Castle Dungeon instances.

This commit is contained in:
MobiusDev 2016-08-21 10:38:40 +00:00
parent 85a9aff1aa
commit b141f4d0be
23 changed files with 669 additions and 0 deletions

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Prison Warden:<br><br>
This is a dangerous place. Don't come around here unless you're ready for a fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleDungeon">"I want to enter the prison."</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="17" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="5" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="14" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="2" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="15" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="3" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="13" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="1" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="19" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="7" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="18" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="6" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="16" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="4" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="20" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="8" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Castle Dungeon -->
<instance id="21" maxWorlds="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/instance.xsd">
<time duration="60" empty="20" />
<locations>
<enter type="RANDOM">
<location x="12188" y="-48770" z="-3009" />
<location x="12140" y="-48707" z="-3009" />
<location x="12223" y="-48714" z="-3009" />
</enter>
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party">
<param name="html" value="noParty.html" />
</condition>
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="HasResidence">
<param name="id" value="9" />
<param name="type" value="CASTLE" />
<param name="html" value="noProperPledge.html" />
</condition>
<condition type="Quest">
<param name="id" value="512" />
</condition>
<condition type="Reenter">
<param name="html" value="hasReenter.html" />
</condition>
<condition type="Distance" />
</conditions>
<reenter apply="ON_FINISH">
<reset time="1440" /> <!-- 24 hours -->
</reenter>
</instance>

View File

@ -0,0 +1,242 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CastleDungeon;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.entity.Fort;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
import com.l2jmobius.gameserver.model.quest.QuestState;
import instances.AbstractInstance;
import quests.Q00512_BladeUnderFoot.Q00512_BladeUnderFoot;
/**
* <b>Castle dungeon</b> instance for quest <b>BladeUnderFoot (512)</b>
* @author Mobius
*/
public final class CastleDungeon extends AbstractInstance
{
// NPCs
private static final Map<Integer, Integer> NPCS = new HashMap<>();
static
{
NPCS.put(36403, 13); // Gludio
NPCS.put(36404, 14); // Dion
NPCS.put(36405, 15); // Giran
NPCS.put(36406, 16); // Oren
NPCS.put(36407, 17); // Aden
NPCS.put(36408, 18); // Innadril
NPCS.put(36409, 19); // Goddard
NPCS.put(36410, 20); // Rune
NPCS.put(36411, 21); // Schuttgart
}
// Monsters
private static final int[] RAIDS1 =
{
25546,
25549,
25552
};
private static final int[] RAIDS2 =
{
25553,
25554,
25557,
25560
};
private static final int[] RAIDS3 =
{
25563,
25566,
25569
};
// Item
private static final int MARK = 9798;
// Locations
private static final Location SPAWN_LOC = new Location(12230, -49139, -3013);
// Misc
private static final int MARK_COUNT = 2520;
private static final long REENTER = 24 * 3600000; // 24 hours
private static final Map<Integer, Long> REENETER_HOLDER = new ConcurrentHashMap<>();
public CastleDungeon()
{
// NPCs
addStartNpc(NPCS.keySet());
addTalkId(NPCS.keySet());
// Monsters
addKillId(RAIDS1);
addKillId(RAIDS2);
addKillId(RAIDS3);
// Instance
addInstanceCreatedId(NPCS.values());
addInstanceDestroyId(NPCS.values());
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final int npcId = npc.getId();
if (NPCS.containsKey(npcId))
{
enterInstance(player, npc, NPCS.get(npcId));
}
return null;
}
@Override
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
if (world != null)
{
if (CommonUtil.contains(RAIDS3, npc.getId()))
{
// Get players with active quest
final List<L2PcInstance> members = new ArrayList<>();
for (L2PcInstance member : world.getPlayers())
{
final QuestState qs = member.getQuestState(Q00512_BladeUnderFoot.class.getSimpleName());
if ((qs != null) && qs.isCond(1))
{
members.add(member);
}
}
// Distribute marks between them
if (!members.isEmpty())
{
final long itemCount = MARK_COUNT / members.size();
for (L2PcInstance member : members)
{
giveItems(member, MARK, itemCount);
playSound(member, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
world.finishInstance();
}
else
{
world.incStatus();
spawnRaid(world);
}
}
return super.onKill(npc, player, isSummon);
}
@Override
public void onInstanceCreated(Instance instance, L2PcInstance player)
{
// Put re-enter for instance
REENETER_HOLDER.put(instance.getTemplateId(), System.currentTimeMillis() + REENTER);
// Schedule spawn of first raid
spawnRaid(instance);
}
@Override
protected boolean validateConditions(List<L2PcInstance> group, L2Npc npc, InstanceTemplate template)
{
final L2PcInstance groupLeader = group.get(0);
final Fort fort = npc.getFort();
if (fort == null)
{
showHtmlFile(groupLeader, "noProperPledge.html");
return false;
}
else if (REENETER_HOLDER.containsKey(template.getId()))
{
final long time = REENETER_HOLDER.get(template.getId());
if (time > System.currentTimeMillis())
{
showHtmlFile(groupLeader, "enterRestricted.html");
return false;
}
REENETER_HOLDER.remove(template.getId());
}
return true;
}
@Override
public void onInstanceDestroy(Instance instance)
{
// Stop running spawn task
final ScheduledFuture<?> task = instance.getParameters().getObject("spawnTask", ScheduledFuture.class);
if ((task != null) && !task.isDone())
{
task.cancel(true);
}
instance.setParameter("spawnTask", null);
}
/**
* Spawn raid boss according to instance status.
* @param instance instance world where instance should be spawned
*/
private void spawnRaid(Instance instance)
{
final ScheduledFuture<?> spawnTask = ThreadPoolManager.getInstance().scheduleGeneral(() ->
{
// Get template id of raid
final int npcId;
switch (instance.getStatus())
{
case 0:
{
npcId = RAIDS1[getRandom(RAIDS1.length)];
break;
}
case 1:
{
npcId = RAIDS2[getRandom(RAIDS2.length)];
break;
}
default:
{
npcId = RAIDS3[getRandom(RAIDS3.length)];
}
}
// Spawn raid
addSpawn(npcId, SPAWN_LOC, false, 0, false, instance.getId());
// Unset spawn task reference
instance.setParameter("spawnTask", null);
}, 2, TimeUnit.MINUTES);
// Save timer to instance world
instance.setParameter("spawnTask", spawnTask);
}
public static void main(String[] args)
{
new CastleDungeon();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Prison is currently closed.<br>
You can visit the prison once every 24 hours with your clan.<br>
If prison is closed, check with your clan members to see when the last session started.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
Only a party may enter the prison. Once you visit the prison, you may not attend another one for at least 24 hours.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
To enter the prison, your party must include at least 2 people.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>
The clan does not possess this castle.
</body></html>