Merged zone vertices with XML and categorized by type.

Most data come from aCis free version.
This commit is contained in:
MobiusDevelopment
2020-02-01 22:24:25 +00:00
parent c2bf138434
commit 4b5a762ff4
79 changed files with 10945 additions and 17026 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -617,7 +617,7 @@
<!-- Section: Zone -->
<admin command="admin_zone_check" accessLevel="90" />
<admin command="admin_zone_reload" accessLevel="90" />
<admin command="admin_zone_visual" accessLevel="90" />
<!-- Section: Fences -->
<admin command="admin_addfence" accessLevel="100" />

View File

@@ -0,0 +1,36 @@
<html><title>Zone Check</title><body>
<table width=270>
<tr>
<td width=45><button value="Main" action="bypass -h admin_admin" width=45 height=15 back="sek.cbui94" fore="sek.cbui92"></td>
<td width=180><center>Zone Check</center></td>
<td width=45><button value="Back" action="bypass -h admin_admin4" width=45 height=15 back="sek.cbui94" fore="sek.cbui92"></td>
</tr>
</table><br>
<center><table width=225>
<tr>
<td><button value="Refresh" action="bypass -h admin_zone_check" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td>
<td><button value="Visualize all" action="bypass -h admin_zone_visual all" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td>
<td><button value="Clear" action="bypass -h admin_zone_visual clear" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td>
</tr>
</table>
<br><img src="l2ui.SquareGray" width=270 height=1><br>
<table width=270>
<tr><td width=100><font color="LEVEL">Zone ID:</font></td><td align=right width=170>%ZLIST%</td></tr>
<tr><td width=100><font color="LEVEL">Map region:</font></td><td align=right width=170>%MAPREGION%</td></tr>
<tr><td width=100><font color="LEVEL">Geo region:</font></td><td align=right width=170>%GEOREGION%</td></tr>
<tr><td width=100><font color="LEVEL">Closest Town:</font></td><td align=right width=170>%CLOSESTTOWN%</td></tr>
<tr><td width=100><font color="LEVEL">Current Loc:</font></td><td align=right width=170>%CURRENTLOC%</td></tr>
</table>
<br><img src="l2ui.SquareGray" width=270 height=1><br>
<table width=270>
<tr><td width=90><font color="LEVEL">Pvp:</font></td><td width=45>%PVP%</td><td width=90><font color="LEVEL">Swamp:</font></td><td width=45>%SWAMP%</td></tr>
<tr><td width=90><font color="LEVEL">Peace:</font></td><td width=45>%PEACE%</td><td width=90><font color="LEVEL">No Summon:</font></td><td width=45>%NOSUMMONFRIEND%</td></tr>
<tr><td width=90><font color="LEVEL">Castle:</font></td><td width=45>%CASTLE%</td><td width=90><font color="LEVEL">Siege:</font></td><td width=45>%SIEGE%</td></tr>
<tr><td width=90><font color="LEVEL">Mother Tree:</font></td><td width=45>%MOTHERTREE%</td><td width=90><font color="LEVEL">Town:</font></td><td width=45>%TOWN%</td></tr>
<tr><td width=90><font color="LEVEL">ClanHall:</font></td><td width=45>%CLANHALL%</td><td width=90><font color="LEVEL">No Restart:</font></td><td width=45>%NORESTART%</td></tr>
<tr><td width=90><font color="LEVEL">No Landing:</font></td><td width=45>%NOLANDING%</td><td width=90><font color="LEVEL">Hq:</font></td><td width=45>%HQ%</td></tr>
<tr><td width=90><font color="LEVEL">Water:</font></td><td width=45>%WATER%</td><td width=90><font color="LEVEL">Danger:</font></td><td width=45>%DANGERAREA%</td></tr>
<tr><td width=90><font color="LEVEL">Jail:</font></td><td width=45>%JAIL%</td><td width=90><font color="LEVEL">Boss:</font></td><td width=45>%BOSS%</td></tr>
<tr><td width=90><font color="LEVEL">MonsterTrack:</font></td><td width=45>%MONSTERTRACK%</td><td width=90><font color="LEVEL">No Store:</font></td><td width=45>%NOSTORE%</td></tr>
</table></center><br>
</body></html>

View File

@@ -1,49 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="list">
<xs:complexType>
<xs:sequence>
<xs:element name="zone" maxOccurs="unbounded" minOccurs="0">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element maxOccurs="unbounded" name="zone">
<xs:complexType>
<xs:sequence>
<xs:element name="stat" maxOccurs="unbounded" minOccurs="0">
<xs:element minOccurs="0" maxOccurs="unbounded" name="stat">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name" use="optional"/>
<xs:attribute type="xs:string" name="val" use="optional"/>
</xs:extension>
</xs:simpleContent>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="val" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="node" maxOccurs="unbounded" minOccurs="0">
<xs:element maxOccurs="unbounded" name="node">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:int" name="X" use="optional"/>
<xs:attribute type="xs:int" name="Y" use="optional"/>
</xs:extension>
</xs:simpleContent>
<xs:attribute name="X" type="xs:int" use="required" />
<xs:attribute name="Y" type="xs:int" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="spawn" maxOccurs="unbounded" minOccurs="0">
<xs:element minOccurs="0" maxOccurs="unbounded" name="spawn">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:int" name="X" use="optional"/>
<xs:attribute type="xs:int" name="Y" use="optional"/>
<xs:attribute type="xs:short" name="Z" use="optional"/>
</xs:extension>
</xs:simpleContent>
<xs:attribute name="X" type="xs:int" use="required" />
<xs:attribute name="Y" type="xs:int" use="required" />
<xs:attribute name="Z" type="xs:short" use="required" />
<xs:attribute name="isChaotic" type="xs:boolean" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:int" name="id" use="optional"/>
<xs:attribute type="xs:string" name="type" use="optional"/>
<xs:attribute type="xs:string" name="shape" use="optional"/>
<xs:attribute type="xs:short" name="minZ" use="optional"/>
<xs:attribute type="xs:short" name="maxZ" use="optional"/>
<xs:attribute type="xs:short" name="bossId" use="optional"/>
<xs:attribute type="xs:string" name="name" use="optional"/>
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute name="shape" type="xs:string" use="required" />
<xs:attribute name="minZ" type="xs:short" use="required" />
<xs:attribute name="maxZ" type="xs:short" use="required" />
<xs:attribute name="id" type="xs:unsignedInt" use="optional" />
<xs:attribute name="bossId" type="xs:short" use="optional" />
<xs:attribute name="rad" type="xs:unsignedShort" use="optional" />
<xs:attribute name="name" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- PVP Zones -->
<zone type="ArenaZone" shape="Cuboid" minZ="-3596" maxZ="0"> <!-- dion_monster_pvp -->
<node X="11947" Y="183019" />
<node X="12943" Y="184010" />
<spawn X="12312" Y="182752" Z="-3558" />
</zone>
<zone type="ArenaZone" shape="Cuboid" minZ="-3752" maxZ="-352"> <!-- gludin_pvp -->
<node X="-88411" Y="141732" />
<node X="-87429" Y="142708" />
<spawn X="-86979" Y="142402" Z="-3643" />
</zone>
<zone type="ArenaZone" shape="Cuboid" minZ="-3850" maxZ="-350"> <!-- giran_pvp_battle -->
<node X="72493" Y="142263" />
<node X="73493" Y="143261" />
<spawn X="73890" Y="142656" Z="-3778" />
</zone>
<zone type="ArenaZone" shape="NPoly" minZ="-3498" maxZ="-3298"> <!-- coliseum_battle -->
<node X="150948" Y="46483" />
<node X="151210" Y="46186" />
<node X="151221" Y="45928" />
<node X="150737" Y="45344" />
<node X="148265" Y="45346" />
<node X="147769" Y="45942" />
<node X="147784" Y="46184" />
<node X="148047" Y="46482" />
<node X="148049" Y="46954" />
<node X="147781" Y="47256" />
<node X="147769" Y="47492" />
<node X="148263" Y="48087" />
<node X="150745" Y="48084" />
<node X="151220" Y="47493" />
<node X="151216" Y="47259" />
<node X="150947" Y="46960" />
<spawn X="147451" Y="46728" Z="-3410" />
</zone>
</list>

View File

@@ -0,0 +1,205 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Boss zone Four Sepulchers -->
<zone id="12002" type="BossZone" shape="Cuboid" minZ="-7350" maxZ="-6841" bossId="-1">
<stat name="name" val="FourSepulcher" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="300000" />
<node X="181241" Y="-86443" />
<node X="192134" Y="-84575" />
</zone>
<!-- Boss zone Four Sepulchers -->
<zone id="12003" type="BossZone" shape="Cuboid" minZ="-7350" maxZ="-6841" bossId="-1">
<stat name="name" val="FourSepulcher" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="300000" />
<node X="179551" Y="-89844" />
<node X="190342" Y="-88042" />
</zone>
<!-- Boss zone Four Sepulchers -->
<zone id="12004" type="BossZone" shape="Cuboid" minZ="-7350" maxZ="-6841" bossId="-1">
<stat name="name" val="FourSepulcher" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="300000" />
<node X="172354" Y="-86630" />
<node X="174073" Y="-75565" />
</zone>
<!-- Boss zone Four Sepulchers -->
<zone id="12005" type="BossZone" shape="Cuboid" minZ="-7350" maxZ="-6841" bossId="-1">
<stat name="name" val="FourSepulcher" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="300000" />
<node X="174697" Y="-82707" />
<node X="176500" Y="-71885" />
</zone>
<!-- Boss zone Lair of Antharas -->
<zone id="12006" type="BossZone" shape="Cuboid" minZ="-8220" maxZ="-4870" bossId="29019">
<stat name="name" val="LairofAntharas" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="600000" />
<node X="173439" Y="110176" />
<node X="187346" Y="119469" />
</zone>
<!-- Boss zone Lair of Baium -->
<zone id="12007" type="BossZone" shape="NPoly" minZ="9967" maxZ="16301" bossId="29020">
<stat name="name" val="LairofBaium" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="600000" />
<node X="112987" Y="14312" />
<node X="112507" Y="14623" />
<node X="112129" Y="15551" />
<node X="111890" Y="16230" />
<node X="112067" Y="16965" />
<node X="112496" Y="17482" />
<node X="112863" Y="18120" />
<node X="113453" Y="18561" />
<node X="114135" Y="18590" />
<node X="114815" Y="18811" />
<node X="115549" Y="18648" />
<node X="116074" Y="18205" />
<node X="116776" Y="17506" />
<node X="117255" Y="17013" />
<node X="117371" Y="16298" />
<node X="117405" Y="15925" />
<node X="117236" Y="15199" />
<node X="117158" Y="14895" />
<node X="116784" Y="14260" />
<node X="116096" Y="13902" />
<node X="115159" Y="13507" />
<node X="114135" Y="13518" />
<node X="113203" Y="13898" />
</zone>
<!-- Boss zone Lair of Valakas -->
<zone id="12008" type="BossZone" shape="Cuboid" minZ="-1735" maxZ="16301" bossId="29028">
<stat name="name" val="LairofValakas" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="1800000" />
<node X="199755" Y="-124724" />
<node X="224677" Y="-103211" />
</zone>
<!-- Boss zone Lair of Lilith -->
<zone id="12009" type="BossZone" shape="Cuboid" minZ="-5600" maxZ="-3895" bossId="25283">
<stat name="name" val="LairofLilith" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="1800000" />
<node X="183986" Y="-13716" />
<node X="186097" Y="-11532" />
</zone>
<!-- Boss zone Lair of Anakim -->
<zone id="12010" type="BossZone" shape="Cuboid" minZ="-5600" maxZ="-3895" bossId="25286">
<stat name="name" val="LairofAnakim" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="1800000" />
<node X="184008" Y="-10681" />
<node X="186107" Y="-8589" />
</zone>
<!-- Boss zone Lair of Zaken -->
<zone id="12011" type="BossZone" shape="Cuboid" minZ="-3775" maxZ="-2690" bossId="29022">
<stat name="name" val="LairofZaken" />
<stat name="Flying" val="false" />
<stat name="EnabledByDefault" val="false" />
<stat name="InvadeTime" val="1800000" />
<node X="53182" Y="216945" />
<node X="57311" Y="221151" />
</zone>
<!-- Boss zone SunlightRoom -->
<zone id="12012" type="BossZone" shape="Cuboid" minZ="-2900" maxZ="-2690" bossId="-1">
<stat name="name" val="SunlightRoom" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="0" />
<node X="55794" Y="219633" />
<node X="56789" Y="220629" />
</zone>
<!-- Boss zone Lair of Sailren -->
<zone id="12013" type="BossZone" shape="Cuboid" minZ="-2075" maxZ="-1944" bossId="29065">
<stat name="name" val="LairofSailren" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="0" />
<node X="26095" Y="-8084" />
<node X="28987" Y="-5295" />
</zone>
<!-- Boss zone AltarofSacrifice -->
<zone id="12014" type="BossZone" shape="Cuboid" minZ="-10730" maxZ="-10290" bossId="-1">
<stat name="name" val="AltarofSacrifice" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="0" />
<node X="-18176" Y="-54972" />
<node X="-14614" Y="-51620" />
</zone>
<!-- Boss zone Lair of Ice Fairy Sirra -->
<zone id="12015" type="BossZone" shape="NPoly" minZ="-30000" maxZ="30000" bossId="29056">
<stat name="name" val="IceQueenCastle" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="0" />
<node X="114473" Y="-125909" />
<node X="112930" Y="-128454" />
<node X="112531" Y="-128878" />
<node X="111686" Y="-129216" />
<node X="111139" Y="-129870" />
<node X="109445" Y="-130222" />
<node X="108833" Y="-130162" />
<node X="107534" Y="-129789" />
<node X="106529" Y="-130047" />
<node X="104340" Y="-129183" />
<node X="103691" Y="-128671" />
<node X="102912" Y="-128649" />
<node X="101967" Y="-128170" />
<node X="100645" Y="-126865" />
<node X="100164" Y="-125878" />
<node X="100430" Y="-125058" />
<node X="100997" Y="-124231" />
<node X="101570" Y="-123264" />
<node X="102569" Y="-122852" />
<node X="103934" Y="-123152" />
<node X="104984" Y="-123806" />
<node X="107116" Y="-124592" />
<node X="107995" Y="-124541" />
<node X="108432" Y="-124602" />
<node X="109241" Y="-124654" />
<node X="110081" Y="-124903" />
<node X="110600" Y="-125052" />
<node X="112720" Y="-125225" />
</zone>
<!-- Boss zone Frintezza -->
<zone id="12016" type="BossZone" shape="Cuboid" minZ="-6130" maxZ="-3000" bossId="29047">
<stat name="name" val="Last Imperial Tomb" />
<stat name="Flying" val="false" />
<stat name="InvadeTime" val="1800000" />
<node X="172176" Y="-74106" />
<node X="175984" Y="-90033" />
</zone>
<!-- Boss zone Lair of Orfen -->
<zone id="12018" type="BossZone" shape="NPoly" minZ="-5796" maxZ="-3796" bossId="29014">
<stat name="name" val="LairofOrfen" />
<stat name="EnabledByDefault" val="false" />
<stat name="InvadeTime" val="0" />
<node X="43976" Y="24664" />
<node X="43284" Y="18952" />
<node X="42476" Y="18164" />
<node X="42480" Y="16448" />
<node X="43084" Y="15944" />
<node X="45140" Y="15816" />
<node X="48800" Y="15112" />
<node X="56556" Y="12040" />
<node X="59068" Y="14288" />
<node X="61064" Y="18492" />
<node X="60380" Y="23672" />
<node X="58724" Y="27412" />
<node X="55696" Y="28496" />
<node X="43976" Y="24664" />
</zone>
<!-- Boss zone Lair of Ant Queen -->
<zone id="12019" type="BossZone" shape="NPoly" minZ="-5947" maxZ="-5547" bossId="29001">
<stat name="name" val="LairofAntQueen" />
<stat name="EnabledByDefault" val="false" />
<stat name="InvadeTime" val="0" />
<node X="-21490" Y="178613" />
<node X="-22258" Y="178961" />
<node X="-22890" Y="182205" />
<node X="-22770" Y="183129" />
<node X="-21594" Y="183945" />
<node X="-20570" Y="183381" />
<node X="-20310" Y="182673" />
<node X="-20762" Y="179129" />
</zone>
</list>

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Custom Castle Teleport Zones -->
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-1827" maxZ="-1682"> <!-- Gludio Teleport -->
<stat name="castleId" val="1" />
<stat name="spawnMinX" val="-18482" />
<stat name="spawnMaxX" val="-17727" />
<stat name="spawnMinY" val="109041" />
<stat name="spawnMaxY" val="109383" />
<stat name="spawnZ" val="-2496" />
<node X="-16287" Y="109204" />
<node X="-17178" Y="109518" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-2021" maxZ="-1877"> <!-- Dion Teleport -->
<stat name="castleId" val="2" />
<stat name="spawnMinX" val="21709" />
<stat name="spawnMaxX" val="22456" />
<stat name="spawnMinY" val="160392" />
<stat name="spawnMaxY" val="160706" />
<stat name="spawnZ" val="-2690" />
<node X="20249" Y="160228" />
<node X="21132" Y="160547" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-1891" maxZ="-1750"> <!-- Giran Teleport -->
<stat name="castleId" val="3" />
<stat name="spawnMinX" val="116555" />
<stat name="spawnMaxX" val="116894" />
<stat name="spawnMinY" val="144729" />
<stat name="spawnMaxY" val="145470" />
<stat name="spawnZ" val="-2566" />
<node X="116400" Y="146030" />
<node X="116718" Y="146924" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-1621" maxZ="-1477"> <!-- Oren Teleport -->
<stat name="castleId" val="4" />
<stat name="spawnMinX" val="82633" />
<stat name="spawnMaxX" val="82957" />
<stat name="spawnMinY" val="36787" />
<stat name="spawnMaxY" val="37599" />
<stat name="spawnZ" val="-2288" />
<node X="82478" Y="38125" />
<node X="82794" Y="39020" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-2811" maxZ="-2641"> <!-- Aden Teleport -->
<stat name="castleId" val="5" />
<stat name="spawnMinX" val="147208" />
<stat name="spawnMaxX" val="147718" />
<stat name="spawnMinY" val="4359" />
<stat name="spawnMaxY" val="4806" />
<stat name="spawnZ" val="-343" />
<node X="146944" Y="4097" />
<node X="147967" Y="5112" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-117" maxZ="26"> <!-- Innadril Teleport -->
<stat name="castleId" val="6" />
<stat name="spawnMinX" val="115666" />
<stat name="spawnMaxX" val="116390" />
<stat name="spawnMinY" val="249161" />
<stat name="spawnMaxY" val="249488" />
<stat name="spawnZ" val="-786" />
<node X="114195" Y="249007" />
<node X="115081" Y="249326" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="-989" maxZ="-573"> <!-- Goddard Teleport -->
<stat name="castleId" val="7" />
<stat name="spawnMinX" val="147061" />
<stat name="spawnMaxX" val="147809" />
<stat name="spawnMinY" val="-48779" />
<stat name="spawnMaxY" val="-48198" />
<stat name="spawnZ" val="-2276" />
<node X="147293" Y="-46267" />
<node X="147644" Y="-47188" />
</zone>
<zone type="CastleTeleportZone" shape="NPoly" minZ="3800" maxZ="4250"> <!-- Rune Teleport -->
<stat name="castleId" val="8" />
<stat name="spawnMinX" val="10985" />
<stat name="spawnMaxX" val="11997" />
<stat name="spawnMinY" val="-49498" />
<stat name="spawnMaxY" val="-48780" />
<stat name="spawnZ" val="-546" />
<node X="9337" Y="-49734" />
<node X="11423" Y="-49297" />
<node X="11423" Y="-49006" />
<node X="9337" Y="-48587" />
</zone>
<zone type="CastleTeleportZone" shape="Cuboid" minZ="746" maxZ="1136"> <!-- Schuttgart Teleport -->
<stat name="castleId" val="9" />
<stat name="spawnMinX" val="77144" />
<stat name="spawnMaxX" val="77927" />
<stat name="spawnMinY" val="-152843" />
<stat name="spawnMaxY" val="-152272" />
<stat name="spawnZ" val="-544" />
<node X="77381" Y="-150335" />
<node X="77735" Y="-151256" />
</zone>
</list>

View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Castle Zones -->
<zone id="11200" type="CastleZone" shape="NPoly" minZ="-4448" maxZ="3551"> <!-- gludio_castle -->
<stat name="castleId" val="1" />
<node X="-22615" Y="104510" />
<node X="-13290" Y="104564" />
<node X="-13313" Y="116950" />
<node X="-22638" Y="116896" />
<!-- banish_point_list -->
<spawn X="-15881" Y="110651" Z="-2770" isChaotic="true" />
<spawn X="-15679" Y="110168" Z="-2770" isChaotic="true" />
<spawn X="-15553" Y="110780" Z="-2770" isChaotic="true" />
<spawn X="-15281" Y="110142" Z="-2770" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="-16554" Y="109382" Z="-1799" />
<spawn X="-16869" Y="109375" Z="-1799" />
<spawn X="-16659" Y="109261" Z="-1799" />
<spawn X="-16618" Y="109485" Z="-1799" />
</zone>
<zone id="11201" type="CastleZone" shape="NPoly" minZ="-4642" maxZ="4000"> <!-- dion_castle -->
<stat name="castleId" val="2" />
<node X="26575" Y="165240" />
<node X="17250" Y="165186" />
<node X="17273" Y="152800" />
<node X="26598" Y="152854" />
<!-- banish_point_list -->
<spawn X="19852" Y="159170" Z="-2770" isChaotic="true" />
<spawn X="19650" Y="159653" Z="-2770" isChaotic="true" />
<spawn X="19524" Y="159041" Z="-2770" isChaotic="true" />
<spawn X="19252" Y="159679" Z="-2770" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="20514" Y="160368" Z="-1993" />
<spawn X="20829" Y="160375" Z="-1993" />
<spawn X="20619" Y="160489" Z="-1993" />
<spawn X="20578" Y="160265" Z="-1993" />
</zone>
<zone id="11202" type="CastleZone" shape="NPoly" minZ="-4515" maxZ="19935"> <!-- giran_castle -->
<stat name="castleId" val="3" />
<node X="121412" Y="140594" />
<node X="121358" Y="149919" />
<node X="108972" Y="149896" />
<node X="109026" Y="140571" />
<!-- banish_point_list -->
<spawn X="115275" Y="147273" Z="-2770" isChaotic="true" />
<spawn X="115758" Y="147475" Z="-2770" isChaotic="true" />
<spawn X="115146" Y="147601" Z="-2770" isChaotic="true" />
<spawn X="115784" Y="147873" Z="-2770" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="116540" Y="146655" Z="-1866" />
<spawn X="116547" Y="146340" Z="-1866" />
<spawn X="116661" Y="146550" Z="-1866" />
<spawn X="116437" Y="146591" Z="-1866" />
</zone>
<zone id="11203" type="CastleZone" shape="NPoly" minZ="-4242" maxZ="19935"> <!-- oren_castle -->
<stat name="castleId" val="4" />
<node X="87488" Y="32689" />
<node X="87434" Y="42014" />
<node X="75048" Y="41991" />
<node X="75102" Y="32666" />
<!-- banish_point_list -->
<spawn X="81353" Y="39421" Z="-2770" isChaotic="true" />
<spawn X="81836" Y="39623" Z="-2770" isChaotic="true" />
<spawn X="81224" Y="39749" Z="-2770" isChaotic="true" />
<spawn X="81862" Y="40021" Z="-2770" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="82616" Y="38750" Z="-1593" />
<spawn X="82623" Y="38435" Z="-1593" />
<spawn X="82737" Y="38645" Z="-1593" />
<spawn X="82513" Y="38686" Z="-1593" />
</zone>
<zone id="11204" type="CastleZone" shape="NPoly" minZ="-3184" maxZ="6816"> <!-- aden_castle -->
<stat name="castleId" val="5" />
<node X="142431" Y="362" />
<node X="152319" Y="344" />
<node X="152282" Y="15197" />
<node X="142393" Y="15215" />
<!-- banish_point_list -->
<spawn X="151765" Y="4175" Z="-592" isChaotic="true" />
<spawn X="151555" Y="2660" Z="-592" isChaotic="true" />
<spawn X="151065" Y="1813" Z="-592" isChaotic="true" />
<spawn X="150952" Y="2615" Z="-592" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="147700" Y="4608" Z="-2784" />
<spawn X="147705" Y="4865" Z="-2784" />
<spawn X="147200" Y="4865" Z="-2784" />
<spawn X="147200" Y="4350" Z="-2784" />
<spawn X="147705" Y="4350" Z="-2784" />
</zone>
<zone id="11205" type="CastleZone" shape="NPoly" minZ="-2738" maxZ="4000"> <!-- innadrile_castle -->
<stat name="castleId" val="6" />
<node X="120526" Y="254019" />
<node X="111201" Y="253965" />
<node X="111224" Y="241579" />
<node X="120549" Y="241633" />
<!-- banish_point_list -->
<spawn X="118730" Y="243416" Z="-1060" isChaotic="true" />
<spawn X="118932" Y="242933" Z="-1060" isChaotic="true" />
<spawn X="119058" Y="243545" Z="-1060" isChaotic="true" />
<spawn X="119330" Y="242907" Z="-1060" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="114465" Y="249147" Z="-89" />
<spawn X="114780" Y="249154" Z="-89" />
<spawn X="114570" Y="249268" Z="-89" />
<spawn X="114529" Y="249044" Z="-89" />
</zone>
<zone id="11206" type="CastleZone" shape="NPoly" minZ="-3397" maxZ="2103"> <!-- goddard_castle -->
<stat name="castleId" val="7" />
<node X="141457" Y="-51510" />
<node X="151949" Y="-51510" />
<node X="151949" Y="-39107" />
<node X="145899" Y="-39107" />
<node X="141457" Y="-44407" />
<!-- banish_point_list -->
<spawn X="154848" Y="-52608" Z="-2962" isChaotic="true" />
<spawn X="156400" Y="-53808" Z="-2873" isChaotic="true" />
<spawn X="138439" Y="-45153" Z="-2064" isChaotic="true" />
<spawn X="140871" Y="-55380" Z="-3224" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="147408" Y="-46448" Z="-963" />
<spawn X="147520" Y="-46432" Z="-963" />
<spawn X="147408" Y="-46896" Z="-963" />
<spawn X="147536" Y="-46896" Z="-963" />
</zone>
<zone id="11207" type="CastleZone" shape="Cuboid" minZ="-3000" maxZ="20000"> <!-- rune_castle -->
<stat name="castleId" val="8" />
<node X="7000" Y="-55500" />
<node X="27250" Y="-41716" />
<!-- banish_point_list -->
<spawn X="38096" Y="-46976" Z="899" isChaotic="true" />
<spawn X="38608" Y="-47168" Z="899" isChaotic="true" />
<spawn X="38752" Y="-47792" Z="899" isChaotic="true" />
<spawn X="38848" Y="-48640" Z="899" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="10891" Y="-49058" Z="3890" />
<spawn X="11224" Y="-49116" Z="3890" />
<spawn X="10974" Y="-49244" Z="3890" />
<spawn X="10658" Y="-49211" Z="3890" />
</zone>
<zone id="11208" type="CastleZone" shape="Cuboid" minZ="-3800" maxZ="20000"> <!-- schuttgart_castle -->
<stat name="castleId" val="9" />
<node X="73000" Y="-156600" />
<node X="82560" Y="-144750" />
<!-- banish_point_list -->
<spawn X="76131" Y="-145636" Z="-1200" isChaotic="true" />
<spawn X="76298" Y="-145760" Z="-1184" isChaotic="true" />
<spawn X="76319" Y="-145530" Z="-1208" isChaotic="true" />
<spawn X="76104" Y="-145158" Z="-1264" isChaotic="true" />
<!-- owner_restart_point_list -->
<spawn X="77619" Y="-150591" Z="770" />
<spawn X="77487" Y="-150735" Z="770" />
<spawn X="77575" Y="-150992" Z="770" />
<spawn X="77646" Y="-150441" Z="770" />
</zone>
</list>

View File

@@ -0,0 +1,642 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Clan Hall Zones -->
<zone type="ClanHallZone" shape="NPoly" minZ="-2104" maxZ="-1104"> <!-- partisan_agit001 -->
<stat name="clanHallId" val="21" />
<!-- residence_territory -->
<node X="43048" Y="108832" />
<node X="43692" Y="108204" />
<node X="44052" Y="108604" />
<node X="43976" Y="109180" />
<node X="43684" Y="109496" />
<!-- owner_restart_point_list -->
<spawn X="43370" Y="108839" Z="-1980" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3598" maxZ="-2098"> <!-- gludio_castle_agit_001 -->
<stat name="clanHallId" val="22" />
<!-- residence_territory -->
<node X="-16342" Y="123496" />
<node X="-15748" Y="123315" />
<node X="-15645" Y="123655" />
<node X="-16234" Y="123831" />
<!-- owner_restart_point_list -->
<spawn X="-16029" Y="123642" Z="-3101" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3777" maxZ="-2277"> <!-- gludio_castle_agit_002 -->
<stat name="clanHallId" val="23" />
<!-- residence_territory -->
<node X="-15098" Y="125352" />
<node X="-14789" Y="125352" />
<node X="-14789" Y="125816" />
<node X="-15098" Y="125816" />
<!-- owner_restart_point_list -->
<spawn X="-14848" Y="125552" Z="-3128" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3745" maxZ="-2245"> <!-- gludio_castle_agit_003 -->
<stat name="clanHallId" val="24" />
<!-- residence_territory -->
<node X="-14028" Y="125062" />
<node X="-13695" Y="125070" />
<node X="-13695" Y="125693" />
<node X="-14108" Y="125693" />
<node X="-14108" Y="125588" />
<node X="-14028" Y="125588" />
<!-- owner_restart_point_list -->
<spawn X="-13879" Y="125413" Z="-3128" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3809" maxZ="-2309"> <!-- gludio_castle_agit_004 -->
<stat name="clanHallId" val="25" />
<!-- residence_territory -->
<node X="-12942" Y="123872" />
<node X="-12327" Y="123872" />
<node X="-12327" Y="124231" />
<node X="-12942" Y="124231" />
<!-- owner_restart_point_list -->
<spawn X="-12710" Y="124029" Z="-3096" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-4076" maxZ="-2576"> <!-- gludin_agit_001 -->
<stat name="clanHallId" val="26" />
<!-- residence_territory -->
<node X="-84691" Y="151557" />
<node X="-84261" Y="151557" />
<node X="-84261" Y="151962" />
<node X="-84071" Y="151962" />
<!-- owner_restart_point_list -->
<spawn X="-84416" Y="152192" Z="-3123" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-4076" maxZ="-2576"> <!-- gludin_agit_001 -->
<stat name="clanHallId" val="26" />
<!-- residence_territory -->
<node X="-84071" Y="151850" />
<node X="-83945" Y="151850" />
<node X="-83945" Y="151962" />
<node X="-83819" Y="151962" />
<node X="-83819" Y="152328" />
<node X="-84691" Y="152328" />
<!-- owner_restart_point_list -->
<spawn X="-84416" Y="152192" Z="-3123" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-4012" maxZ="-2512"> <!-- gludin_agit_002 -->
<stat name="clanHallId" val="27" />
<!-- residence_territory -->
<node X="-84367" Y="153086" />
<node X="-83983" Y="153086" />
<node X="-83977" Y="154046" />
<node X="-84367" Y="154054" />
<!-- owner_restart_point_list -->
<spawn X="-84171" Y="153385" Z="-3159" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-4012" maxZ="-2512"> <!-- gludin_agit_002 -->
<stat name="clanHallId" val="27" />
<!-- residence_territory -->
<node X="-84160" Y="153086" />
<node X="-83586" Y="153085" />
<node X="-83585" Y="153564" />
<node X="-84160" Y="153561" />
<!-- owner_restart_point_list -->
<spawn X="-84171" Y="153385" Z="-3159" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-4044" maxZ="-2544"> <!-- gludin_agit_003 -->
<stat name="clanHallId" val="28" />
<!-- residence_territory -->
<node X="-84463" Y="154941" />
<node X="-83987" Y="154941" />
<node X="-83986" Y="155688" />
<node X="-84463" Y="155685" />
<!-- owner_restart_point_list -->
<spawn X="-84236" Y="155520" Z="-3160" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-4044" maxZ="-2544"> <!-- gludin_agit_003 -->
<stat name="clanHallId" val="28" />
<!-- residence_territory -->
<node X="-84098" Y="155318" />
<node X="-83523" Y="155317" />
<node X="-83523" Y="155686" />
<node X="-84098" Y="155684" />
<!-- owner_restart_point_list -->
<spawn X="-84236" Y="155520" Z="-3160" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3948" maxZ="-2448"> <!-- gludin_agit_004 -->
<stat name="clanHallId" val="29" />
<!-- residence_territory -->
<node X="-79657" Y="149419" />
<node X="-79290" Y="149424" />
<node X="-79284" Y="150296" />
<node X="-79656" Y="150298" />
<!-- owner_restart_point_list -->
<spawn X="-79544" Y="150181" Z="-3038" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3948" maxZ="-2448"> <!-- gludin_agit_004 -->
<stat name="clanHallId" val="29" />
<!-- residence_territory -->
<node X="-80066" Y="149420" />
<node X="-79491" Y="149419" />
<node X="-79491" Y="149859" />
<node X="-80066" Y="149857" />
<!-- owner_restart_point_list -->
<spawn X="-79544" Y="150181" Z="-3038" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3980" maxZ="-2480"> <!-- gludin_agit_005 -->
<stat name="clanHallId" val="30" />
<!-- residence_territory -->
<node X="-79663" Y="151367" />
<node X="-79296" Y="151372" />
<node X="-79290" Y="152244" />
<node X="-79663" Y="152246" />
<!-- owner_restart_point_list -->
<spawn X="-79513" Y="151506" Z="-3041" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3980" maxZ="-2480"> <!-- gludin_agit_005 -->
<stat name="clanHallId" val="30" />
<!-- residence_territory -->
<node X="-80067" Y="151809" />
<node X="-79493" Y="151808" />
<node X="-79493" Y="152247" />
<node X="-80067" Y="152245" />
<!-- owner_restart_point_list -->
<spawn X="-79513" Y="151506" Z="-3041" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3365" maxZ="-1865"> <!-- dion_castle_agit_001 -->
<stat name="clanHallId" val="31" />
<!-- residence_territory -->
<node X="17597" Y="144823" />
<node X="17989" Y="145089" />
<node X="17828" Y="145333" />
<node X="17433" Y="145067" />
<!-- owner_restart_point_list -->
<spawn X="17760" Y="145200" Z="-3036" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3333" maxZ="-1833"> <!-- dion_castle_agit_002 -->
<stat name="clanHallId" val="32" />
<!-- residence_territory -->
<node X="18849" Y="143099" />
<node X="18897" Y="143562" />
<node X="18615" Y="143588" />
<node X="18571" Y="143128" />
<!-- owner_restart_point_list -->
<spawn X="18800" Y="143248" Z="-3010" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3397" maxZ="-1897"> <!-- dion_castle_agit_003 -->
<stat name="clanHallId" val="33" />
<!-- residence_territory -->
<node X="19942" Y="145996" />
<node X="20414" Y="145996" />
<node X="20414" Y="146292" />
<node X="19942" Y="146292" />
<!-- owner_restart_point_list -->
<spawn X="20096" Y="146064" Z="-3111" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2514" maxZ="486"> <!-- devastated_castle -->
<stat name="clanHallId" val="34" />
<!-- residence_territory -->
<node X="176793" Y="-19176" />
<node X="179892" Y="-19176" />
<node X="179892" Y="-15276" />
<node X="179417" Y="-14511" />
<node X="177270" Y="-14511" />
<node X="176793" Y="-15276" />
<!-- owner_restart_point_list -->
<spawn X="177930" Y="-18629" Z="-2240" />
<!-- chao_restart_point_list -->
<spawn X="136398" Y="28901" Z="-3582" isChaotic="true" />
<spawn X="137292" Y="28485" Z="-3290" isChaotic="true" />
<spawn X="155925" Y="28554" Z="-3164" isChaotic="true" />
<spawn X="157608" Y="23866" Z="-3760" isChaotic="true" />
<spawn X="157463" Y="28770" Z="-3371" isChaotic="true" />
<spawn X="159348" Y="28561" Z="-3400" isChaotic="true" />
<spawn X="160236" Y="14119" Z="-3892" isChaotic="true" />
<spawn X="156764" Y="13774" Z="-3960" isChaotic="true" />
<spawn X="161426" Y="23055" Z="-3670" isChaotic="true" />
<spawn X="136380" Y="21899" Z="-3647" isChaotic="true" />
<spawn X="137708" Y="15640" Z="-3800" isChaotic="true" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2920" maxZ="80"> <!-- bandits_stronghold -->
<stat name="clanHallId" val="35" />
<!-- residence_territory -->
<node X="79028" Y="-17588" />
<node X="84640" Y="-19528" />
<node X="86952" Y="-16888" />
<node X="83636" Y="-13448" />
<node X="79196" Y="-13584" />
<!-- owner_restart_point_list -->
<spawn X="80339" Y="-15442" Z="-1804" />
<!-- chao_restart_point_list -->
<spawn X="76576" Y="50151" Z="-3200" isChaotic="true" />
<spawn X="77310" Y="50317" Z="-3160" isChaotic="true" />
<spawn X="77250" Y="51285" Z="-3160" isChaotic="true" />
<spawn X="78811" Y="51106" Z="-3160" isChaotic="true" />
<spawn X="75755" Y="51372" Z="-3250" isChaotic="true" />
<spawn X="75613" Y="52504" Z="-3200" isChaotic="true" />
<spawn X="74459" Y="52441" Z="-3260" isChaotic="true" />
<spawn X="74467" Y="53354" Z="-3200" isChaotic="true" />
<spawn X="73600" Y="53918" Z="-3170" isChaotic="true" />
<spawn X="71102" Y="57875" Z="-3330" isChaotic="true" />
<spawn X="70052" Y="59300" Z="-3580" isChaotic="true" />
<spawn X="70420" Y="57480" Z="-3480" isChaotic="true" />
<spawn X="75474" Y="60125" Z="-2730" isChaotic="true" />
<spawn X="74880" Y="60818" Z="-2820" isChaotic="true" />
<spawn X="88011" Y="56589" Z="-3560" isChaotic="true" />
<spawn X="91239" Y="53120" Z="-3430" isChaotic="true" />
<spawn X="81785" Y="46306" Z="-3160" isChaotic="true" />
<spawn X="80708" Y="44609" Z="-3120" isChaotic="true" />
<spawn X="70139" Y="55885" Z="-3550" isChaotic="true" />
<spawn X="80236" Y="45675" Z="-3150" isChaotic="true" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2160" maxZ="-1960"> <!-- aden_castle_agit_001 -->
<stat name="clanHallId" val="36" />
<!-- residence_territory -->
<node X="148844" Y="22709" />
<node X="149424" Y="22709" />
<node X="149424" Y="23569" />
<node X="148844" Y="23569" />
<!-- owner_restart_point_list -->
<spawn X="149134" Y="23140" Z="-2160" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2150" maxZ="-1950"> <!-- aden_castle_agit_002 -->
<stat name="clanHallId" val="37" />
<!-- residence_territory -->
<node X="150343" Y="23193" />
<node X="150943" Y="23193" />
<node X="150943" Y="24113" />
<node X="150343" Y="24113" />
<node X="150343" Y="23693" />
<node X="150305" Y="23693" />
<node X="150305" Y="23618" />
<node X="150343" Y="23618" />
<!-- owner_restart_point_list -->
<spawn X="150644" Y="23653" Z="-2150" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2150" maxZ="-1950"> <!-- aden_castle_agit_003 -->
<stat name="clanHallId" val="38" />
<!-- residence_territory -->
<node X="145362" Y="24890" />
<node X="145972" Y="24890" />
<node X="145972" Y="25820" />
<node X="145362" Y="25820" />
<!-- owner_restart_point_list -->
<spawn X="145667" Y="25356" Z="-2150" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2280" maxZ="-2080"> <!-- aden_castle_agit_004 -->
<stat name="clanHallId" val="39" />
<!-- residence_territory -->
<node X="150460" Y="26108" />
<node X="151036" Y="26108" />
<node X="151036" Y="26972" />
<node X="150460" Y="26972" />
<node X="150460" Y="26585" />
<node X="150450" Y="26585" />
<node X="150450" Y="26505" />
<node X="150460" Y="26505" />
<!-- owner_restart_point_list -->
<spawn X="150748" Y="26540" Z="-2280" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2290" maxZ="-2090"> <!-- aden_castle_agit_005 -->
<stat name="clanHallId" val="40" />
<!-- residence_territory -->
<node X="143701" Y="26661" />
<node X="144299" Y="26661" />
<node X="144299" Y="27521" />
<node X="143701" Y="27521" />
<!-- owner_restart_point_list -->
<spawn X="143992" Y="27092" Z="-2290" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2280" maxZ="-2080"> <!-- aden_castle_agit_006 -->
<stat name="clanHallId" val="41" />
<!-- residence_territory -->
<node X="143704" Y="27734" />
<node X="144324" Y="27734" />
<node X="144324" Y="28155" />
<node X="144360" Y="28155" />
<node X="144360" Y="28245" />
<node X="144324" Y="28245" />
<node X="144324" Y="28670" />
<node X="143704" Y="28670" />
<!-- owner_restart_point_list -->
<spawn X="144014" Y="28202" Z="-2280" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3647" maxZ="-3297"> <!-- giran_castle_agit_001 -->
<stat name="clanHallId" val="42" />
<!-- residence_territory -->
<node X="78059" Y="147906" />
<node X="79122" Y="147906" />
<node X="79122" Y="148296" />
<node X="78620" Y="148296" />
<node X="78620" Y="148316" />
<node X="78524" Y="148316" />
<node X="78524" Y="148296" />
<node X="78059" Y="148296" />
<!-- owner_restart_point_list -->
<spawn X="78592" Y="148080" Z="-3581" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3647" maxZ="-3297"> <!-- giran_castle_agit_002 -->
<stat name="clanHallId" val="43" />
<!-- residence_territory -->
<node X="81859" Y="144802" />
<node X="82254" Y="144802" />
<node X="82254" Y="145870" />
<node X="81859" Y="145870" />
<node X="81859" Y="145355" />
<node X="81833" Y="145355" />
<node X="81833" Y="145274" />
<node X="81859" Y="145274" />
<!-- owner_restart_point_list -->
<spawn X="82032" Y="145328" Z="-3520" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3540" maxZ="-3190"> <!-- giran_castle_agit_003 -->
<stat name="clanHallId" val="44" />
<!-- residence_territory -->
<node X="83195" Y="144779" />
<node X="83591" Y="144779" />
<node X="83591" Y="145287" />
<node X="83615" Y="145287" />
<node X="83615" Y="145374" />
<node X="83594" Y="145374" />
<node X="83591" Y="145847" />
<node X="83195" Y="145847" />
<!-- owner_restart_point_list -->
<spawn X="83392" Y="145328" Z="-3389" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3647" maxZ="-3297"> <!-- giran_castle_agit_004 -->
<stat name="clanHallId" val="45" />
<!-- residence_territory -->
<node X="80773" Y="151053" />
<node X="81169" Y="151053" />
<node X="81169" Y="151560" />
<node X="81185" Y="151560" />
<node X="81185" Y="151653" />
<node X="81169" Y="151653" />
<node X="81169" Y="152121" />
<node X="80773" Y="152121" />
<!-- owner_restart_point_list -->
<spawn X="80960" Y="151600" Z="-3517" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-3647" maxZ="-3297"> <!-- giran_castle_agit_005 -->
<stat name="clanHallId" val="46" />
<!-- residence_territory -->
<node X="81903" Y="151377" />
<node X="82299" Y="151377" />
<node X="82299" Y="152445" />
<node X="81903" Y="152445" />
<node X="81903" Y="151945" />
<node X="81883" Y="151945" />
<node X="81883" Y="151850" />
<node X="81903" Y="151850" />
<!-- owner_restart_point_list -->
<spawn X="82064" Y="151904" Z="-3520" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2828" maxZ="-2528"> <!-- goddard_castle_agit_001 -->
<stat name="clanHallId" val="47" />
<!-- residence_territory -->
<node X="145660" Y="-55829" />
<node X="146459" Y="-55730" />
<node X="146402" Y="-55280" />
<node X="145605" Y="-55378" />
<!-- owner_restart_point_list -->
<spawn X="146022" Y="-55560" Z="-2765" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2828" maxZ="-2528"> <!-- goddard_castle_agit_002 -->
<stat name="clanHallId" val="48" />
<!-- residence_territory -->
<node X="146936" Y="-57320" />
<node X="147308" Y="-56607" />
<node X="146906" Y="-56397" />
<node X="146535" Y="-57111" />
<!-- owner_restart_point_list -->
<spawn X="146960" Y="-56768" Z="-2765" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2828" maxZ="-2528"> <!-- goddard_castle_agit_003 -->
<stat name="clanHallId" val="49" />
<!-- residence_territory -->
<node X="148487" Y="-57327" />
<node X="148887" Y="-57113" />
<node X="148508" Y="-56405" />
<node X="148108" Y="-56618" />
<!-- owner_restart_point_list -->
<spawn X="148480" Y="-56848" Z="-2765" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-2828" maxZ="-2528"> <!-- goddard_castle_agit_004 -->
<stat name="clanHallId" val="50" />
<!-- residence_territory -->
<node X="148962" Y="-55739" />
<node X="149759" Y="-55838" />
<node X="149815" Y="-55388" />
<node X="149018" Y="-55289" />
<!-- owner_restart_point_list -->
<spawn X="149376" Y="-55568" Z="-2765" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_001 -->
<stat name="clanHallId" val="51" />
<!-- residence_territory -->
<node X="37433" Y="-51016" />
<node X="38034" Y="-51016" />
<node X="38034" Y="-50565" />
<node X="37765" Y="-50565" />
<node X="37765" Y="-50445" />
<node X="37680" Y="-50445" />
<node X="37680" Y="-50565" />
<node X="37433" Y="-50565" />
<!-- owner_restart_point_list -->
<spawn X="37736" Y="-50777" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_002 -->
<stat name="clanHallId" val="52" />
<!-- residence_territory -->
<node X="38569" Y="-50790" />
<node X="39107" Y="-50522" />
<node X="38908" Y="-50119" />
<node X="38674" Y="-50238" />
<node X="38612" Y="-50125" />
<node X="38538" Y="-50162" />
<node X="38592" Y="-50271" />
<node X="38369" Y="-50386" />
<!-- owner_restart_point_list -->
<spawn X="38737" Y="-50491" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_003 -->
<stat name="clanHallId" val="53" />
<!-- residence_territory -->
<node X="39123" Y="-49827" />
<node X="39513" Y="-50048" />
<node X="39808" Y="-49526" />
<node X="39414" Y="-49304" />
<node X="39286" Y="-49533" />
<node X="39172" Y="-49472" />
<node X="39136" Y="-49546" />
<node X="39246" Y="-49605" />
<!-- owner_restart_point_list -->
<spawn X="39403" Y="-49668" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_004 -->
<stat name="clanHallId" val="54" />
<!-- residence_territory -->
<node X="39394" Y="-48636" />
<node X="39846" Y="-48636" />
<node X="39845" Y="-47837" />
<node X="39394" Y="-47837" />
<node X="39394" Y="-48198" />
<node X="39347" Y="-48198" />
<node X="39348" Y="-48290" />
<node X="39394" Y="-48290" />
<!-- owner_restart_point_list -->
<spawn X="39599" Y="-48264" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_005 -->
<stat name="clanHallId" val="55" />
<!-- residence_territory -->
<node X="39123" Y="-46646" />
<node X="39254" Y="-46879" />
<node X="39146" Y="-46939" />
<node X="39187" Y="-47014" />
<node X="39296" Y="-46958" />
<node X="39414" Y="-47172" />
<node X="39808" Y="-46954" />
<node X="39517" Y="-46427" />
<!-- owner_restart_point_list -->
<spawn X="39440" Y="-46806" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_006 -->
<stat name="clanHallId" val="56" />
<!-- residence_territory -->
<node X="38371" Y="-46086" />
<node X="38577" Y="-45688" />
<node X="39111" Y="-45960" />
<node X="38906" Y="-46362" />
<node X="38688" Y="-46252" />
<node X="38631" Y="-46361" />
<node X="38554" Y="-46324" />
<node X="38610" Y="-46214" />
<!-- owner_restart_point_list -->
<spawn X="38712" Y="-46042" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="850" maxZ="1150"> <!-- rune_castle_agit_007 -->
<stat name="clanHallId" val="57" />
<!-- residence_territory -->
<node X="37432" Y="-45908" />
<node X="37700" Y="-45908" />
<node X="37700" Y="-46030" />
<node X="37790" Y="-46030" />
<node X="37790" Y="-45908" />
<node X="38033" Y="-45908" />
<node X="38033" Y="-45457" />
<node X="37432" Y="-45457" />
<!-- owner_restart_point_list -->
<spawn X="37711" Y="-45723" Z="910" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-1380" maxZ="-1130"> <!-- schuttgart_castle_agit_001 -->
<stat name="clanHallId" val="58" />
<!-- residence_territory -->
<node X="85259" Y="-143315" />
<node X="86057" Y="-143416" />
<node X="86108" Y="-142966" />
<node X="85311" Y="-142865" />
<!-- owner_restart_point_list -->
<spawn X="85812" Y="-143183" Z="-1230" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-1380" maxZ="-1130"> <!-- schuttgart_castle_agit_002 -->
<stat name="clanHallId" val="59" />
<!-- residence_territory -->
<node X="86184" Y="-141594" />
<node X="86582" Y="-141377" />
<node X="86964" Y="-142085" />
<node X="86563" Y="-142300" />
<!-- owner_restart_point_list -->
<spawn X="86609" Y="-141949" Z="-1230" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-1380" maxZ="-1130"> <!-- schuttgart_castle_agit_003 -->
<stat name="clanHallId" val="60" />
<!-- residence_territory -->
<node X="87767" Y="-142096" />
<node X="88135" Y="-141383" />
<node X="88537" Y="-141591" />
<node X="88167" Y="-142307" />
<!-- owner_restart_point_list -->
<spawn X="88093" Y="-141931" Z="-1230" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-1380" maxZ="-1130"> <!-- schuttgart_castle_agit_004 -->
<stat name="clanHallId" val="61" />
<!-- residence_territory -->
<node X="88668" Y="-143423" />
<node X="89462" Y="-143324" />
<node X="89409" Y="-142877" />
<node X="88613" Y="-142975" />
<!-- owner_restart_point_list -->
<spawn X="88901" Y="-143200" Z="-1230" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-1930" maxZ="-1680"> <!-- rainbow_spring -->
<stat name="clanHallId" val="62" />
<!-- residence_territory -->
<node X="141073" Y="-125043" />
<node X="140574" Y="-124709" />
<node X="140933" Y="-124171" />
<node X="141432" Y="-124505" />
<!-- owner_restart_point_list -->
<spawn X="140949" Y="-124658" Z="-1800" />
<!-- chao_restart_point_list -->
<spawn X="142656" Y="-55008" Z="-3024" isChaotic="true" />
<spawn X="142832" Y="-55680" Z="-3462" isChaotic="true" />
<spawn X="143152" Y="-56368" Z="-3456" isChaotic="true" />
<spawn X="145344" Y="-59472" Z="-3344" isChaotic="true" />
<spawn X="145872" Y="-59744" Z="-3328" isChaotic="true" />
<spawn X="150304" Y="-59800" Z="-3504" isChaotic="true" />
<spawn X="145248" Y="-60064" Z="-3440" isChaotic="true" />
<spawn X="144368" Y="-59616" Z="-3512" isChaotic="true" />
<spawn X="149680" Y="-59600" Z="-3440" isChaotic="true" />
<spawn X="149360" Y="-60576" Z="-3520" isChaotic="true" />
<spawn X="152114" Y="-57296" Z="-3451" isChaotic="true" />
<spawn X="150492" Y="-59719" Z="-3611" isChaotic="true" />
<spawn X="148791" Y="-60361" Z="-3537" isChaotic="true" />
<spawn X="146499" Y="-60242" Z="-3455" isChaotic="true" />
<spawn X="143052" Y="-56418" Z="-3490" isChaotic="true" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="-1407" maxZ="-907"> <!-- beast_farm_guildhall -->
<stat name="clanHallId" val="63" />
<!-- residence_territory -->
<node X="59997" Y="-96111" />
<node X="61969" Y="-92430" />
<node X="58303" Y="-89937" />
<node X="55402" Y="-91364" />
<node X="55254" Y="-92999" />
<node X="55344" Y="-93295" />
<node X="56049" Y="-94619" />
<!-- owner_restart_point_list -->
<spawn X="60608" Y="-94016" Z="-1349" />
<!-- chao_restart_point_list -->
<spawn X="42640" Y="-54496" Z="-2310" isChaotic="true" />
<spawn X="38304" Y="-55440" Z="-1136" isChaotic="true" />
<spawn X="40192" Y="-57600" Z="-2343" isChaotic="true" />
<spawn X="38400" Y="-56832" Z="-992" isChaotic="true" />
<spawn X="35632" Y="-54800" Z="-1744" isChaotic="true" />
<spawn X="37152" Y="-56272" Z="-272" isChaotic="true" />
<spawn X="43936" Y="-56480" Z="-3627" isChaotic="true" />
<spawn X="39440" Y="-60080" Z="-2870" isChaotic="true" />
<spawn X="41376" Y="-55376" Z="-1488" isChaotic="true" />
<spawn X="41920" Y="-57760" Z="-2392" isChaotic="true" />
<spawn X="42496" Y="-58192" Z="-3264" isChaotic="true" />
<spawn X="40784" Y="-59888" Z="-2600" isChaotic="true" />
</zone>
<zone type="ClanHallZone" shape="NPoly" minZ="305" maxZ="1685"> <!-- fortress_of_dead -->
<stat name="clanHallId" val="64" />
<!-- residence_territory -->
<node X="58672" Y="-30158" />
<node X="59478" Y="-29345" />
<node X="59477" Y="-25636" />
<node X="56445" Y="-25638" />
<node X="56445" Y="-29326" />
<node X="57277" Y="-30154" />
<!-- owner_restart_point_list -->
<spawn X="57932" Y="-26064" Z="595" />
<!-- chao_restart_point_list -->
<spawn X="42640" Y="-54496" Z="-2310" isChaotic="true" />
<spawn X="38304" Y="-55440" Z="-1136" isChaotic="true" />
<spawn X="40192" Y="-57600" Z="-2343" isChaotic="true" />
<spawn X="38400" Y="-56832" Z="-992" isChaotic="true" />
<spawn X="35632" Y="-54800" Z="-1744" isChaotic="true" />
<spawn X="37152" Y="-56272" Z="-272" isChaotic="true" />
<spawn X="43936" Y="-56480" Z="-3627" isChaotic="true" />
<spawn X="39440" Y="-60080" Z="-2870" isChaotic="true" />
<spawn X="41376" Y="-55376" Z="-1488" isChaotic="true" />
<spawn X="41920" Y="-57760" Z="-2392" isChaotic="true" />
<spawn X="42496" Y="-58192" Z="-3264" isChaotic="true" />
<spawn X="40784" Y="-59888" Z="-2600" isChaotic="true" />
</zone>
</list>

View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Damage Zones -->
<zone id="71001" type="DamageZone" shape="NPoly" minZ="-496" maxZ="-296"> <!-- aden_damage_1 -->
<stat name="castleId" val="5" />
<node X="145548" Y="6670" />
<node X="145813" Y="6669" />
<node X="145813" Y="6803" />
<node X="145548" Y="6804" />
</zone>
<zone id="71002" type="DamageZone" shape="NPoly" minZ="-496" maxZ="-296"> <!-- aden_damage_2 -->
<stat name="castleId" val="5" />
<node X="145548" Y="6798" />
<node X="145813" Y="6797" />
<node X="145813" Y="6931" />
<node X="145548" Y="6932" />
</zone>
<zone id="71003" type="DamageZone" shape="NPoly" minZ="-496" maxZ="-296"> <!-- aden_damage_3 -->
<stat name="castleId" val="5" />
<node X="145548" Y="6926" />
<node X="145813" Y="6925" />
<node X="145813" Y="7059" />
<node X="145548" Y="7060" />
</zone>
<zone id="71004" type="DamageZone" shape="NPoly" minZ="-528" maxZ="-328"> <!-- aden_damage_4 -->
<stat name="castleId" val="5" />
<node X="145548" Y="7054" />
<node X="145813" Y="7053" />
<node X="145813" Y="7187" />
<node X="145548" Y="7188" />
</zone>
<zone id="71005" type="DamageZone" shape="NPoly" minZ="-528" maxZ="-328"> <!-- aden_damage_5 -->
<stat name="castleId" val="5" />
<node X="149084" Y="6686" />
<node X="149349" Y="6685" />
<node X="149349" Y="6819" />
<node X="149084" Y="6820" />
</zone>
<zone id="71006" type="DamageZone" shape="NPoly" minZ="-528" maxZ="-328"> <!-- aden_damage_6 -->
<stat name="castleId" val="5" />
<node X="149084" Y="6814" />
<node X="149349" Y="6813" />
<node X="149349" Y="6947" />
<node X="149084" Y="6948" />
</zone>
<zone id="71007" type="DamageZone" shape="NPoly" minZ="-528" maxZ="-328"> <!-- aden_damage_7 -->
<stat name="castleId" val="5" />
<node X="149084" Y="6942" />
<node X="149349" Y="6941" />
<node X="149349" Y="7075" />
<node X="149084" Y="7076" />
</zone>
<zone id="71008" type="DamageZone" shape="NPoly" minZ="-560" maxZ="-360"> <!-- aden_damage_8 -->
<stat name="castleId" val="5" />
<node X="149084" Y="7070" />
<node X="149349" Y="7069" />
<node X="149349" Y="7203" />
<node X="149084" Y="7204" />
</zone>
<zone id="71009" type="DamageZone" shape="NPoly" minZ="-2627" maxZ="-2427"> <!-- gludio_damage_1 -->
<stat name="castleId" val="1" />
<node X="-18255" Y="110790" />
<node X="-17971" Y="110790" />
<node X="-17972" Y="111174" />
<node X="-18256" Y="111174" />
</zone>
<zone id="71010" type="DamageZone" shape="NPoly" minZ="-2595" maxZ="-2395"> <!-- gludio_damage_2 -->
<stat name="castleId" val="1" />
<node X="-19213" Y="107137" />
<node X="-18827" Y="107137" />
<node X="-18827" Y="107404" />
<node X="-19213" Y="107404" />
</zone>
<zone id="71011" type="DamageZone" shape="NPoly" minZ="-2821" maxZ="30341"> <!-- dion_damage_1 -->
<stat name="castleId" val="2" />
<node X="22215" Y="158960" />
<node X="21931" Y="158960" />
<node X="21932" Y="158576" />
<node X="22216" Y="158576" />
</zone>
<zone id="71012" type="DamageZone" shape="NPoly" minZ="-2789" maxZ="30373"> <!-- dion_damage_2 -->
<stat name="castleId" val="2" />
<node X="23173" Y="162613" />
<node X="22787" Y="162613" />
<node X="22787" Y="162346" />
<node X="23173" Y="162346" />
</zone>
<zone id="71013" type="DamageZone" shape="NPoly" minZ="-2694" maxZ="13957"> <!-- giran_damage_1 -->
<stat name="castleId" val="3" />
<node X="115132" Y="144954" />
<node X="115132" Y="145238" />
<node X="114748" Y="145237" />
<node X="114748" Y="144953" />
</zone>
<zone id="71014" type="DamageZone" shape="NPoly" minZ="-2662" maxZ="13989"> <!-- giran_damage_2 -->
<stat name="castleId" val="3" />
<node X="118785" Y="143996" />
<node X="118785" Y="144382" />
<node X="118518" Y="144382" />
<node X="118518" Y="143996" />
</zone>
<zone id="71015" type="DamageZone" shape="NPoly" minZ="-2421" maxZ="13957"> <!-- oren_damage_1 -->
<stat name="castleId" val="4" />
<node X="81208" Y="37049" />
<node X="81208" Y="37333" />
<node X="80824" Y="37332" />
<node X="80824" Y="37048" />
</zone>
<zone id="71016" type="DamageZone" shape="NPoly" minZ="-2389" maxZ="13989"> <!-- oren_damage_2 -->
<stat name="castleId" val="4" />
<node X="84861" Y="36091" />
<node X="84861" Y="36477" />
<node X="84594" Y="36477" />
<node X="84594" Y="36091" />
</zone>
<zone id="71017" type="DamageZone" shape="NPoly" minZ="-917" maxZ="30341"> <!-- innadrile_damage_1 -->
<stat name="castleId" val="6" />
<node X="116166" Y="247739" />
<node X="115882" Y="247739" />
<node X="115883" Y="247355" />
<node X="116167" Y="247355" />
</zone>
<zone id="71018" type="DamageZone" shape="NPoly" minZ="-885" maxZ="30373"> <!-- innadrile_damage_2 -->
<stat name="castleId" val="6" />
<node X="117124" Y="251392" />
<node X="116738" Y="251392" />
<node X="116738" Y="251125" />
<node X="117124" Y="251125" />
</zone>
<zone id="71019" type="DamageZone" shape="NPoly" minZ="-1789" maxZ="-1489"> <!-- goddard_damage_1 -->
<stat name="castleId" val="7" />
<node X="149235" Y="-47768" />
<node X="149579" Y="-47608" />
<node X="149515" Y="-47472" />
<node X="149169" Y="-47634" />
</zone>
<zone id="71020" type="DamageZone" shape="NPoly" minZ="-1789" maxZ="-1439"> <!-- goddard_damage_2 -->
<stat name="castleId" val="7" />
<node X="145352" Y="-47607" />
<node X="145696" Y="-47768" />
<node X="145760" Y="-47633" />
<node X="145415" Y="-47471" />
</zone>
<zone id="71021" type="DamageZone" shape="NPoly" minZ="509" maxZ="809"> <!-- rune_damage_1 -->
<stat name="castleId" val="8" />
<node X="13785" Y="-47663" />
<node X="14046" Y="-47854" />
<node X="14203" Y="-47668" />
<node X="13916" Y="-47450" />
</zone>
<zone id="71022" type="DamageZone" shape="NPoly" minZ="518" maxZ="818"> <!-- rune_damage_2 -->
<stat name="castleId" val="8" />
<node X="13917" Y="-50851" />
<node X="14209" Y="-50630" />
<node X="14052" Y="-50447" />
<node X="13788" Y="-50647" />
</zone>
<zone id="71023" type="DamageZone" shape="NPoly" minZ="-93" maxZ="207"> <!-- schutt_damage_1 -->
<stat name="castleId" val="9" />
<node X="75440" Y="-151667" />
<node X="75787" Y="-151830" />
<node X="75849" Y="-151697" />
<node X="75503" Y="-151535" />
</zone>
<zone id="71024" type="DamageZone" shape="NPoly" minZ="-77" maxZ="223"> <!-- schutt_damage_2 -->
<stat name="castleId" val="9" />
<node X="79322" Y="-151831" />
<node X="79668" Y="-151670" />
<node X="79606" Y="-151535" />
<node X="79261" Y="-151699" />
</zone>
<!-- Cruma (Damage Zone) -->
<zone type="DamageZone" shape="NPoly" minZ="-6519" maxZ="-6319"> <!-- cruma_boss_damage_zone -->
<node X="17869" Y="108566" />
<node X="18071" Y="108774" />
<node X="18072" Y="109060" />
<node X="17865" Y="109265" />
<node X="17580" Y="109264" />
<node X="17379" Y="109062" />
<node X="17379" Y="108774" />
<node X="17584" Y="108569" />
</zone>
<!-- Devil Isle Zones -->
<!-- Physical Damage -->
<zone type="DamageZone" shape="NPoly" minZ="-4048" maxZ="-3848"> <!-- devil_damage_001 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="51296" Y="205421" />
<node X="51788" Y="205266" />
<node X="51496" Y="205621" />
<node X="51072" Y="205896" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-4032" maxZ="-3732"> <!-- devil_damage_002 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="51820" Y="205340" />
<node X="52535" Y="205305" />
<node X="52535" Y="205436" />
<node X="51705" Y="205528" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-3776" maxZ="-3626"> <!-- devil_damage_003 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="43439" Y="213259" />
<node X="43589" Y="213249" />
<node X="43750" Y="213760" />
<node X="43680" Y="214092" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-3764" maxZ="-3564"> <!-- devil_damage_004 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="42805" Y="214266" />
<node X="43627" Y="214195" />
<node X="43386" Y="214355" />
<node X="42805" Y="214405" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-3856" maxZ="-3656"> <!-- devil_damage_005 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="43511" Y="218426" />
<node X="43711" Y="218426" />
<node X="43711" Y="218759" />
<node X="43511" Y="218759" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-3940" maxZ="-3740"> <!-- devil_damage_006 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="43012" Y="218850" />
<node X="43708" Y="218850" />
<node X="43719" Y="219260" />
<node X="43001" Y="219260" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-3060" maxZ="-2860"> <!-- devil_damage_007 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="50630" Y="211383" />
<node X="51129" Y="211383" />
<node X="51129" Y="211858" />
<node X="50642" Y="211858" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-4008" maxZ="-3608"> <!-- devil_damage_008 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="51820" Y="206520" />
<node X="52792" Y="206500" />
<node X="52812" Y="207128" />
<node X="51844" Y="207060" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-3056" maxZ="-2706"> <!-- devil_damage_009 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="50673" Y="210566" />
<node X="51054" Y="210572" />
<node X="51054" Y="211317" />
<node X="50667" Y="211311" />
</zone>
<zone type="DamageZone" shape="NPoly" minZ="-2736" maxZ="-2536"> <!-- devil_damage_010 -->
<stat name="initialDelay" val="1000" />
<stat name="reuse" val="60000" />
<node X="50608" Y="209718" />
<node X="51145" Y="209718" />
<node X="51150" Y="210201" />
<node X="50614" Y="210201" />
</zone>
</list>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Monster Race Track -->
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3652" maxZ="-3452"> <!-- dion_monster_race1 -->
<node X="11714" Y="181568" />
<node X="14406" Y="181571" />
<node X="14405" Y="182673" />
<node X="11714" Y="182673" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3610" maxZ="-3410"> <!-- dion_monster_race2 -->
<node X="13309" Y="181324" />
<node X="14061" Y="181324" />
<node X="14061" Y="181610" />
<node X="13309" Y="181610" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3608" maxZ="-3408"> <!-- dion_monster_race3 -->
<node X="13559" Y="182641" />
<node X="14073" Y="182640" />
<node X="14073" Y="182919" />
<node X="13560" Y="182918" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3612" maxZ="-3412"> <!-- dion_monster_race4 -->
<node X="12196" Y="182662" />
<node X="12447" Y="182663" />
<node X="12447" Y="182766" />
<node X="12197" Y="182766" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3624" maxZ="-3424"> <!-- dion_monster_race5 -->
<node X="11706" Y="182774" />
<node X="13194" Y="182769" />
<node X="13194" Y="183006" />
<node X="11701" Y="183017" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3616" maxZ="-3416"> <!-- dion_monster_race6 -->
<node X="11701" Y="184017" />
<node X="13188" Y="184011" />
<node X="13194" Y="184265" />
<node X="11701" Y="184260" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3620" maxZ="-3420"> <!-- dion_monster_race7 -->
<node X="11697" Y="183013" />
<node X="11945" Y="183019" />
<node X="11940" Y="184015" />
<node X="11697" Y="184015" />
</zone>
<zone type="DerbyTrackZone" shape="NPoly" minZ="-3624" maxZ="-3424"> <!-- dion_monster_race8 -->
<node X="12945" Y="183013" />
<node X="13193" Y="183008" />
<node X="13193" Y="184009" />
<node X="12945" Y="184009" />
</zone>
</list>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,329 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Fishing Zones -->
<zone type="FishingZone" shape="NPoly" minZ="-3634" maxZ="-3434"> <!-- fishing_place_1 -->
<node X="141249" Y="-109636" />
<node X="141473" Y="-109798" />
<node X="141739" Y="-109821" />
<node X="141924" Y="-109669" />
<node X="142038" Y="-109397" />
<node X="141852" Y="-109130" />
<node X="141604" Y="-109051" />
<node X="141321" Y="-109091" />
<node X="141213" Y="-109266" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3634" maxZ="-3434"> <!-- fishing_place_2 -->
<node X="141249" Y="-109636" />
<node X="141473" Y="-109798" />
<node X="141739" Y="-109821" />
<node X="141924" Y="-109669" />
<node X="142038" Y="-109397" />
<node X="141852" Y="-109130" />
<node X="141604" Y="-109051" />
<node X="141321" Y="-109091" />
<node X="141213" Y="-109266" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3668" maxZ="-3468"> <!-- fishing_place_3 -->
<node X="140174" Y="-105832" />
<node X="140490" Y="-105875" />
<node X="140962" Y="-105738" />
<node X="141039" Y="-105378" />
<node X="140872" Y="-105119" />
<node X="140081" Y="-105295" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3724" maxZ="-3524"> <!-- fishing_place_4 -->
<node X="144927" Y="-105193" />
<node X="145226" Y="-105412" />
<node X="145576" Y="-105344" />
<node X="145819" Y="-104976" />
<node X="145575" Y="-104555" />
<node X="145217" Y="-104490" />
<node X="144935" Y="-104684" />
<node X="144832" Y="-104959" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-2871" maxZ="-2671"> <!-- fishing_place_5 -->
<node X="152081" Y="-108262" />
<node X="152455" Y="-108588" />
<node X="152835" Y="-108448" />
<node X="152992" Y="-108120" />
<node X="152817" Y="-107670" />
<node X="152310" Y="-107632" />
<node X="152069" Y="-107905" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-2787" maxZ="-2587"> <!-- fishing_place_6 -->
<node X="155279" Y="-105735" />
<node X="155448" Y="-105880" />
<node X="155992" Y="-105963" />
<node X="156201" Y="-105790" />
<node X="156133" Y="-105320" />
<node X="155896" Y="-105229" />
<node X="155459" Y="-105254" />
<node X="155283" Y="-105478" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-2717" maxZ="-2517"> <!-- fishing_place_7 -->
<node X="156838" Y="-109948" />
<node X="157133" Y="-110046" />
<node X="157436" Y="-109918" />
<node X="157491" Y="-109405" />
<node X="157197" Y="-109197" />
<node X="156843" Y="-109261" />
<node X="156683" Y="-109569" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-1609" maxZ="-1409"> <!-- fishing_place_8 -->
<node X="152063" Y="-116732" />
<node X="152505" Y="-116982" />
<node X="152904" Y="-116927" />
<node X="153020" Y="-116469" />
<node X="152881" Y="-116221" />
<node X="152555" Y="-116100" />
<node X="152285" Y="-116160" />
<node X="152099" Y="-116415" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-1694" maxZ="-1494"> <!-- fishing_place_9 -->
<node X="152683" Y="-112829" />
<node X="152796" Y="-113129" />
<node X="153125" Y="-113339" />
<node X="153557" Y="-113190" />
<node X="153649" Y="-112721" />
<node X="153344" Y="-112385" />
<node X="152937" Y="-112409" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-1979" maxZ="-1779"> <!-- fishing_place_10 -->
<node X="157444" Y="-115790" />
<node X="157774" Y="-115907" />
<node X="158174" Y="-115759" />
<node X="158017" Y="-114971" />
<node X="157625" Y="-114984" />
<node X="157439" Y="-115101" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-2152" maxZ="-1952"> <!-- fishing_place_11 -->
<node X="147182" Y="-113255" />
<node X="147194" Y="-113430" />
<node X="147312" Y="-113584" />
<node X="147467" Y="-113630" />
<node X="147748" Y="-113523" />
<node X="147816" Y="-113273" />
<node X="147723" Y="-113074" />
<node X="147512" Y="-112956" />
<node X="147258" Y="-113048" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4388" maxZ="-1388"> <!-- fishing_place_12 -->
<node X="35360" Y="70052" />
<node X="54640" Y="70780" />
<node X="58104" Y="89528" />
<node X="38900" Y="91644" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4916" maxZ="-1916"> <!-- fishing_place_13 -->
<node X="-99139" Y="207208" />
<node X="-65905" Y="254858" />
<node X="-65905" Y="261841" />
<node X="-124577" Y="261607" />
<node X="-128220" Y="215665" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4640" maxZ="-1640"> <!-- fishing_place_14 -->
<node X="134452" Y="66180" />
<node X="170228" Y="67184" />
<node X="172464" Y="97052" />
<node X="136188" Y="94940" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4216" maxZ="-1216"> <!-- fishing_place_15 -->
<node X="135800" Y="35476" />
<node X="162960" Y="35364" />
<node X="161056" Y="64920" />
<node X="136496" Y="65092" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-2568" maxZ="1432"> <!-- fishing_place_16 -->
<node X="97311" Y="-229576" />
<node X="201955" Y="-229291" />
<node X="201926" Y="-163450" />
<node X="97636" Y="-164202" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-7356" maxZ="-1356"> <!-- fishing_place_17 -->
<node X="89909" Y="158343" />
<node X="130731" Y="153447" />
<node X="130741" Y="261840" />
<node X="65549" Y="262183" />
<node X="65612" Y="189166" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3892" maxZ="-892"> <!-- fishing_place_18 -->
<node X="81328" Y="136658" />
<node X="139003" Y="123356" />
<node X="138584" Y="145204" />
<node X="121150" Y="155944" />
<node X="80807" Y="160436" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4684" maxZ="-1684"> <!-- fishing_place_19 -->
<node X="67326" Y="160359" />
<node X="86813" Y="160109" />
<node X="64159" Y="189723" />
<node X="42375" Y="183029" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4874" maxZ="-1874"> <!-- fishing_place_20 -->
<node X="30606" Y="184275" />
<node X="40957" Y="182824" />
<node X="62226" Y="189792" />
<node X="62509" Y="228946" />
<node X="30706" Y="228846" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4372" maxZ="-1372"> <!-- fishing_place_21 -->
<node X="65472" Y="71452" />
<node X="86420" Y="82248" />
<node X="97656" Y="93300" />
<node X="97692" Y="98032" />
<node X="64528" Y="97660" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4328" maxZ="-1328"> <!-- fishing_place_22 -->
<node X="66204" Y="3448" />
<node X="121052" Y="30384" />
<node X="87064" Y="56664" />
<node X="69484" Y="31724" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4096" maxZ="-1096"> <!-- fishing_place_23 -->
<node X="4721" Y="99932" />
<node X="60654" Y="99812" />
<node X="60606" Y="158582" />
<node X="40546" Y="154557" />
<node X="3147" Y="123027" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4724" maxZ="-1724"> <!-- fishing_place_24 -->
<node X="36902" Y="-98025" />
<node X="9543" Y="-42544" />
<node X="54988" Y="-7732" />
<node X="96957" Y="-65614" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4764" maxZ="-1764"> <!-- fishing_place_25 -->
<node X="436" Y="128216" />
<node X="10168" Y="128584" />
<node X="42184" Y="182056" />
<node X="31996" Y="197312" />
<node X="680" Y="197804" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3900" maxZ="-900"> <!-- fishing_place_26 -->
<node X="35960" Y="34780" />
<node X="61228" Y="52232" />
<node X="61704" Y="77128" />
<node X="43360" Y="66444" />
<node X="32924" Y="37972" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4004" maxZ="-1004"> <!-- fishing_place_27 -->
<node X="11764" Y="36204" />
<node X="42092" Y="63036" />
<node X="44408" Y="69824" />
<node X="444" Y="75320" />
<node X="2780" Y="51824" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3856" maxZ="-856"> <!-- fishing_place_28 -->
<node X="148" Y="77464" />
<node X="4116" Y="80668" />
<node X="4816" Y="95352" />
<node X="460" Y="94180" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4848" maxZ="-1848"> <!-- fishing_place_29 -->
<node X="-37560" Y="16423" />
<node X="-8388" Y="126" />
<node X="50773" Y="98" />
<node X="35243" Y="16780" />
<node X="-76016" Y="81087" />
<node X="-75777" Y="65779" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4044" maxZ="-1044"> <!-- fishing_place_30 -->
<node X="-27548" Y="90040" />
<node X="3188" Y="95180" />
<node X="1816" Y="117348" />
<node X="-1732" Y="130032" />
<node X="-25952" Y="130540" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4084" maxZ="-1084"> <!-- fishing_place_31 -->
<node X="-13628" Y="57148" />
<node X="-428" Y="57856" />
<node X="3668" Y="90204" />
<node X="-21376" Y="89884" />
<node X="-26808" Y="87940" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4880" maxZ="-1880"> <!-- fishing_place_32 -->
<node X="-64990" Y="-109438" />
<node X="32369" Y="-96091" />
<node X="31964" Y="-83063" />
<node X="4840" Y="-60901" />
<node X="-30730" Y="-68637" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4828" maxZ="-1828"> <!-- fishing_place_33 -->
<node X="-65739" Y="186145" />
<node X="-188" Y="193188" />
<node X="-470" Y="213105" />
<node X="-22923" Y="225218" />
<node X="-58597" Y="224836" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-3772" maxZ="-772"> <!-- fishing_place_34 -->
<node X="-62980" Y="111764" />
<node X="-50756" Y="126392" />
<node X="-63940" Y="140572" />
<node X="-71220" Y="133792" />
<node X="-69448" Y="120784" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4892" maxZ="-1892"> <!-- fishing_place_35 -->
<node X="-111370" Y="100078" />
<node X="-77020" Y="67100" />
<node X="-65711" Y="190964" />
<node X="-99937" Y="150239" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4115" maxZ="-3415"> <!-- fishing_place_36 -->
<node X="107720" Y="-121415" />
<node X="107976" Y="-121486" />
<node X="108054" Y="-121203" />
<node X="107681" Y="-121077" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4114" maxZ="-3414"> <!-- fishing_place_37 -->
<node X="107174" Y="-120338" />
<node X="107675" Y="-121072" />
<node X="107771" Y="-120739" />
<node X="107596" Y="-120492" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4100" maxZ="-3400"> <!-- fishing_place_38 -->
<node X="106925" Y="-121468" />
<node X="107499" Y="-121754" />
<node X="107718" Y="-121406" />
<node X="107676" Y="-121070" />
<node X="107140" Y="-120299" />
<node X="106748" Y="-121104" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4106" maxZ="-3406"> <!-- fishing_place_39 -->
<node X="107669" Y="-120279" />
<node X="108087" Y="-120174" />
<node X="108270" Y="-119950" />
<node X="107870" Y="-119379" />
<node X="107437" Y="-119884" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4108" maxZ="-3408"> <!-- fishing_place_40 -->
<node X="108275" Y="-119951" />
<node X="108903" Y="-119964" />
<node X="108806" Y="-119162" />
<node X="108431" Y="-118887" />
<node X="107867" Y="-119376" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4155" maxZ="-3455"> <!-- fishing_place_41 -->
<node X="108405" Y="-120801" />
<node X="109222" Y="-120654" />
<node X="109288" Y="-120048" />
<node X="108946" Y="-120080" />
<node X="108812" Y="-120306" />
<node X="108160" Y="-120322" />
<node X="108127" Y="-120625" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4157" maxZ="-3457"> <!-- fishing_place_42 -->
<node X="108450" Y="-121409" />
<node X="109231" Y="-121384" />
<node X="109222" Y="-120651" />
<node X="108396" Y="-120801" />
<node X="108274" Y="-121123" />
<node X="108507" Y="-121226" />
</zone>
<zone type="FishingZone" shape="NPoly" minZ="-4142" maxZ="-3442"> <!-- fishing_place_43 -->
<node X="108544" Y="-121991" />
<node X="109133" Y="-121703" />
<node X="109226" Y="-121385" />
<node X="108343" Y="-121415" />
<node X="108122" Y="-121599" />
<node X="108468" Y="-121820" />
</zone>
</list>

View File

@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Fortress Zones -->
<zone id="21501" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Shanty Fortress -->
<stat name="fortId" val="101" />
<node X="-56256" Y="153728" />
<node X="-49536" Y="159424" />
<spawn X="-52695" Y="156457" Z="-2053" />
</zone>
<zone id="21502" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Southern Fortress -->
<stat name="fortId" val="102" />
<node X="-26304" Y="216576" />
<node X="-19584" Y="222912" />
<spawn X="-22759" Y="219818" Z="-3236" />
</zone>
<zone id="21503" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Hive Fortress -->
<stat name="fortId" val="103" />
<node X="12544" Y="185856" />
<node X="19456" Y="190272" />
<spawn X="16625" Y="188108" Z="-2924" />
</zone>
<zone id="21504" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Valley Fortress -->
<stat name="fortId" val="104" />
<node X="122432" Y="120192" />
<node X="129600" Y="126656" />
<spawn X="126058" Y="123425" Z="-2585" />
</zone>
<zone id="21505" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Ivory Fortress -->
<stat name="fortId" val="105" />
<node X="70080" Y="1984" />
<node X="74944" Y="6656" />
<spawn X="72808" Y="4307" Z="-3045" />
</zone>
<zone id="21506" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Narsell Fortress -->
<stat name="fortId" val="106" />
<node X="151936" Y="52736" />
<node X="157760" Y="58304" />
<spawn X="154966" Y="55276" Z="-3254" />
</zone>
<zone id="21507" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Bayou Fortress -->
<stat name="fortId" val="107" />
<node X="186368" Y="36288" />
<node X="192640" Y="42240" />
<spawn X="189910" Y="39770" Z="-3410" />
</zone>
<zone id="21508" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- White Sands Fortress -->
<stat name="fortId" val="108" />
<node X="114432" Y="201664" />
<node X="122176" Y="208704" />
<spawn X="118361" Y="204924" Z="-3333" />
</zone>
<zone id="21509" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Borderland Fortress -->
<stat name="fortId" val="109" />
<node X="155776" Y="-72896" />
<node X="162368" Y="-67776" />
<spawn X="159009" Y="-70167" Z="-2864" />
</zone>
<zone id="21510" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Marshland Fortress -->
<stat name="fortId" val="110" />
<node X="66304" Y="-63872" />
<node X="72832" Y="-58688" />
<spawn X="69791" Y="-61482" Z="-2786" />
</zone>
<zone id="21511" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Archaic Fortress -->
<stat name="fortId" val="111" />
<node X="106176" Y="-143616" />
<node X="112704" Y="-138752" />
<spawn X="109568" Y="-141277" Z="-2957" />
</zone>
<zone id="21512" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Floran Fortress - Border -->
<stat name="fortId" val="112" />
<node X="1472" Y="145216" />
<node X="9728" Y="155136" />
<spawn X="5688" Y="149726" Z="-2889" />
</zone>
<zone id="21513" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Cloud Mountain Fortress - Border -->
<stat name="fortId" val="113" />
<node X="-57408" Y="88704" />
<node X="-49408" Y="93824" />
<spawn X="-53204" Y="91210" Z="-2821" />
</zone>
<zone id="21514" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Tanor Fortress - Border -->
<stat name="fortId" val="114" />
<node X="56256" Y="136768" />
<node X="64256" Y="142016" />
<spawn X="60258" Y="139425" Z="-1754" />
</zone>
<zone id="21515" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Dragonspine Fortress - Border -->
<stat name="fortId" val="115" />
<node X="8000" Y="92928" />
<node X="14976" Y="97408" />
<spawn X="11542" Y="95060" Z="-3426" />
</zone>
<zone id="21516" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Antharas Fortress - Border -->
<stat name="fortId" val="116" />
<node X="75904" Y="86336" />
<node X="80448" Y="95488" />
<spawn X="79199" Y="91021" Z="-2878" />
</zone>
<zone id="21517" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Western Fortress - Border -->
<stat name="fortId" val="117" />
<node X="107264" Y="-17664" />
<node X="115392" Y="-12544" />
<spawn X="111376" Y="-15203" Z="-995" />
</zone>
<zone id="21518" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Hunters Fortress - Border -->
<stat name="fortId" val="118" />
<node X="121472" Y="92992" />
<node X="129088" Y="97792" />
<spawn X="125308" Y="95066" Z="-2140" />
</zone>
<zone id="21519" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Aaru Fortress - Border -->
<stat name="fortId" val="119" />
<node X="69120" Y="182400" />
<node X="76672" Y="190784" />
<spawn X="73066" Y="185954" Z="-2581" />
</zone>
<zone id="21520" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Demon Fortress - Border -->
<stat name="fortId" val="120" />
<node X="98432" Y="-56465" />
<node X="102912" Y="-52288" />
<spawn X="100698" Y="-55334" Z="-645" />
</zone>
<zone id="21521" type="FortZone" shape="Cuboid" minZ="-3800" maxZ="3200">
<!-- Monastic Fortress - Border -->
<stat name="fortId" val="121" />
<node X="68480" Y="-97536" />
<node X="75520" Y="-92224" />
<spawn X="72146" Y="-94782" Z="-1428" />
</zone>
</list>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Castle HQ Zones -->
<!-- Gludio Casle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-4484" maxZ="3515"> <!-- gludio_castle_headquarter_territory1 -->
<!-- headquarter_territory -->
<node X="-22052" Y="114025" />
<node X="-14221" Y="114007" />
<node X="-14197" Y="116558" />
<node X="-22032" Y="116566" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4420" maxZ="3579"> <!-- gludio_castle_headquarter_territory2 -->
<!-- headquarter_territory -->
<node X="-22030" Y="104809" />
<node X="-20270" Y="104817" />
<node X="-20266" Y="113735" />
<node X="-22031" Y="113732" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4388" maxZ="3611"> <!-- gludio_castle_headquarter_territory3 -->
<!-- headquarter_territory -->
<node X="-15554" Y="104834" />
<node X="-13917" Y="104839" />
<node X="-13914" Y="113757" />
<node X="-15554" Y="113757" />
</zone>
<!-- Dion Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-4678" maxZ="4000"> <!-- dion_castle_headquarter_territory1 -->
<!-- headquarter_territory -->
<node X="26012" Y="155725" />
<node X="18181" Y="155743" />
<node X="18157" Y="153192" />
<node X="25992" Y="153184" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4614" maxZ="4000"> <!-- dion_castle_headquarter_territory2 -->
<!-- headquarter_territory -->
<node X="25990" Y="164941" />
<node X="24230" Y="164933" />
<node X="24226" Y="156015" />
<node X="25991" Y="156018" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4582" maxZ="4000"> <!-- dion_castle_headquarter_territory3 -->
<!-- headquarter_territory -->
<node X="19514" Y="164916" />
<node X="17877" Y="164911" />
<node X="17874" Y="155993" />
<node X="19514" Y="155993" />
</zone>
<!-- Giran Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-4551" maxZ="19899"> <!-- giran_castle_headquarter_territory1 -->
<!-- headquarter_territory -->
<node X="111897" Y="141157" />
<node X="111915" Y="148988" />
<node X="109364" Y="149012" />
<node X="109356" Y="141177" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4487" maxZ="19963"> <!-- giran_castle_headquarter_territory2 -->
<!-- headquarter_territory -->
<node X="121113" Y="141179" />
<node X="121105" Y="142939" />
<node X="112187" Y="142943" />
<node X="112190" Y="141178" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4455" maxZ="19995"> <!-- giran_castle_headquarter_territory3 -->
<!-- headquarter_territory -->
<node X="121088" Y="147655" />
<node X="121083" Y="149292" />
<node X="112165" Y="149295" />
<node X="112165" Y="147655" />
</zone>
<!-- Oren Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-4278" maxZ="19899"> <!-- oren_castle_headquarter_territory1 -->
<!-- headquarter_territory -->
<node X="77973" Y="33252" />
<node X="77991" Y="41083" />
<node X="75440" Y="41107" />
<node X="75432" Y="33272" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4214" maxZ="19963"> <!-- oren_castle_headquarter_territory2 -->
<!-- headquarter_territory -->
<node X="87189" Y="33274" />
<node X="87181" Y="35034" />
<node X="78263" Y="35038" />
<node X="78266" Y="33273" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-4182" maxZ="19995"> <!-- oren_castle_headquarter_territory3 -->
<!-- headquarter_territory -->
<node X="87164" Y="39750" />
<node X="87159" Y="41387" />
<node X="78241" Y="41390" />
<node X="78241" Y="39750" />
</zone>
<!-- Aden Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-1158" maxZ="42"> <!-- aden_castle_headquarter_territory -->
<!-- headquarter_territory -->
<node X="144365" Y="9902" />
<node X="150572" Y="9919" />
<node X="150816" Y="4925" />
<node X="151831" Y="4916" />
<node X="151833" Y="7955" />
<node X="150754" Y="9839" />
<node X="150281" Y="10385" />
<node X="151282" Y="12184" />
<node X="151280" Y="13248" />
<node X="143668" Y="13224" />
<node X="143698" Y="12185" />
<node X="144657" Y="10353" />
<node X="144156" Y="9821" />
<node X="143148" Y="7939" />
<node X="143155" Y="4824" />
<node X="144053" Y="4830" />
</zone>
<!-- Innadril Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-2774" maxZ="4000"> <!-- innadrile_castle_headquarter_territory1 -->
<!-- headquarter_territory -->
<node X="119963" Y="244504" />
<node X="112132" Y="244522" />
<node X="112108" Y="241971" />
<node X="119943" Y="241963" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-2710" maxZ="4000"> <!-- innadrile_castle_headquarter_territory2 -->
<!-- headquarter_territory -->
<node X="119941" Y="253720" />
<node X="118181" Y="253712" />
<node X="118177" Y="244794" />
<node X="119942" Y="244797" />
</zone>
<zone type="HqZone" shape="NPoly" minZ="-2678" maxZ="4000"> <!-- innadrile_castle_headquarter_territory3 -->
<!-- headquarter_territory -->
<node X="113465" Y="253695" />
<node X="111828" Y="253690" />
<node X="111825" Y="244772" />
<node X="113465" Y="244772" />
</zone>
<!-- Goddard Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-2625" maxZ="1875"> <!-- goddard_castle_headquarter_territory -->
<!-- headquarter_territory -->
<node X="144715" Y="-43884" />
<node X="150045" Y="-43884" />
<node X="150037" Y="-43064" />
<node X="148924" Y="-42723" />
<node X="148512" Y="-41841" />
<node X="148496" Y="-40907" />
<node X="147063" Y="-40920" />
<node X="145883" Y="-42805" />
<node X="144692" Y="-42822" />
</zone>
<!-- Rune Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-1780" maxZ="-680"> <!-- rune_castle_headquarter_territory -->
<!-- headquarter_territory -->
<node X="26755" Y="-49171" />
<node X="22310" Y="-49171" />
<node X="22309" Y="-50415" />
<node X="21392" Y="-50412" />
<node X="21391" Y="-49164" />
<node X="19543" Y="-49168" />
<node X="19546" Y="-49074" />
<node X="21387" Y="-49070" />
<node X="21388" Y="-47783" />
<node X="22316" Y="-47784" />
<node X="22316" Y="-49082" />
<node X="26755" Y="-49082" />
</zone>
<!-- Schuttgart Castle HQ Zones -->
<zone type="HqZone" shape="NPoly" minZ="-3800" maxZ="1700"> <!-- schuttgart_castle_headquarter_territory -->
<!-- headquarter_territory -->
<node X="74554" Y="-148009" />
<node X="80640" Y="-148009" />
<node X="80631" Y="-147713" />
<node X="78857" Y="-147120" />
<node X="78119" Y="-146316" />
<node X="76767" Y="-146316" />
<node X="76314" Y="-147099" />
<node X="74533" Y="-147618" />
</zone>
<!-- Clan Hall HQ Zones -->
<!-- zone name="partisan_agit001_headquarter_territory" type="HqZone" shape="NPoly" minZ="0" maxZ="0" -->
<!-- stat name="clanHallId" val="21" / -->
<!-- /zone -->
<!-- zone name="devastated_castle_headquarter_territory" type="HqZone" shape="NPoly" minZ="-2405" maxZ="595">
<stat name="clanHallId" val="34" />
<node X="176740" Y="-13838" />
<node X="180040" Y="-13838" />
<node X="180040" Y="-13188" />
<node X="176740" Y="-13188" />
</zone -->
<!-- zone name="bandits'_stronghold_headquarter_territory" type="HqZone" shape="NPoly" minZ="0" maxZ="0" -->
<!-- stat name="clanHallId" val="35" / -->
<!-- /zone -->
<!-- zone name="rainbow_spring_headquarter_territory" type="HqZone" shape="NPoly" minZ="0" maxZ="0" -->
<!-- stat name="clanHallId" val="62" / -->
<!-- /zone -->
<!-- zone name="beast_farm_headquarter_territory" type="HqZone" shape="NPoly" minZ="0" maxZ="0" -->
<!-- stat name="clanHallId" val="63" / -->
<!-- /zone -->
<!-- zone name="fortress_of_dead_headquarter_territory" type="HqZone" shape="NPoly" minZ="-147" maxZ="1853">
<stat name="clanHallId" val="64" />
<node X="57502" Y="-31651" />
<node X="58431" Y="-31607" />
<node X="59638" Y="-30984" />
<node X="56685" Y="-30983" />
</zone -->
</list>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- GM Room Zones -->
<zone type="JailZone" shape="NPoly" minZ="-3049" maxZ="-2849"> <!-- gm_room_solo1 -->
<node X="-116299" Y="-251426" />
<node X="-115745" Y="-251426" />
<node X="-115745" Y="-250840" />
<node X="-116296" Y="-250840" />
<spawn X="-116059" Y="-251145" Z="-2992" />
<spawn X="-116126" Y="-251135" Z="-2992" />
<spawn X="-116050" Y="-251210" Z="-2992" />
<spawn X="-116049" Y="-251082" Z="-2992" />
<spawn X="-116059" Y="-251145" Z="-2992" isChaotic="true" />
<spawn X="-116126" Y="-251135" Z="-2992" isChaotic="true" />
<spawn X="-116050" Y="-251210" Z="-2992" isChaotic="true" />
<spawn X="-116049" Y="-251082" Z="-2992" isChaotic="true" />
</zone>
<zone type="JailZone" shape="NPoly" minZ="-3053" maxZ="-2853"> <!-- gm_room_solo2 -->
<node X="-113350" Y="-251408" />
<node X="-112797" Y="-251407" />
<node X="-112798" Y="-250855" />
<node X="-113353" Y="-250857" />
<spawn X="-112959" Y="-251147" Z="-2992" />
<spawn X="-113157" Y="-251149" Z="-2992" />
<spawn X="-113099" Y="-251231" Z="-2992" />
<spawn X="-113097" Y="-251033" Z="-2992" />
<spawn X="-112959" Y="-251147" Z="-2992" isChaotic="true" />
<spawn X="-113157" Y="-251149" Z="-2992" isChaotic="true" />
<spawn X="-113099" Y="-251231" Z="-2992" isChaotic="true" />
<spawn X="-113097" Y="-251033" Z="-2992" isChaotic="true" />
</zone>
<zone type="JailZone" shape="NPoly" minZ="-2992" maxZ="-2792"> <!-- gm_prison -->
<node X="-116390" Y="-251581" />
<node X="-112756" Y="-251617" />
<node X="-112720" Y="-248199" />
<node X="-116354" Y="-248217" />
</zone>
<zone type="JailZone" shape="NPoly" minZ="-3050" maxZ="-2850"> <!-- gm_room -->
<node X="-115727" Y="-251652" />
<node X="-113365" Y="-251655" />
<node X="-113365" Y="-248191" />
<node X="-115727" Y="-248194" />
<spawn X="-114598" Y="-249431" Z="-2984" />
<spawn X="-114527" Y="-249452" Z="-2984" />
<spawn X="-114567" Y="-249517" Z="-2984" />
<spawn X="-114634" Y="-249516" Z="-2984" />
<spawn X="-114665" Y="-249440" Z="-2984" />
<spawn X="-114626" Y="-249397" Z="-2984" />
<spawn X="-114567" Y="-249384" Z="-2984" />
<spawn X="-114566" Y="-249470" Z="-2984" />
<spawn X="-114601" Y="-249489" Z="-2984" />
<spawn X="-114630" Y="-249465" Z="-2984" />
<spawn X="-114501" Y="-249297" Z="-2984" />
<spawn X="-114475" Y="-249273" Z="-2984" />
<spawn X="-114441" Y="-249293" Z="-2984" />
<spawn X="-114598" Y="-249431" Z="-2984" isChaotic="true" />
<spawn X="-114527" Y="-249452" Z="-2984" isChaotic="true" />
<spawn X="-114567" Y="-249517" Z="-2984" isChaotic="true" />
<spawn X="-114634" Y="-249516" Z="-2984" isChaotic="true" />
<spawn X="-114665" Y="-249440" Z="-2984" isChaotic="true" />
<spawn X="-114626" Y="-249397" Z="-2984" isChaotic="true" />
<spawn X="-114567" Y="-249384" Z="-2984" isChaotic="true" />
<spawn X="-114566" Y="-249470" Z="-2984" isChaotic="true" />
<spawn X="-114601" Y="-249489" Z="-2984" isChaotic="true" />
<spawn X="-114630" Y="-249465" Z="-2984" isChaotic="true" />
<spawn X="-114501" Y="-249297" Z="-2984" isChaotic="true" />
<spawn X="-114475" Y="-249273" Z="-2984" isChaotic="true" />
<spawn X="-114441" Y="-249293" Z="-2984" isChaotic="true" />
</zone>
</list>

View File

@@ -0,0 +1,223 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Elven Mother Tree Zones -->
<zone type="MotherTreeZone" shape="NPoly" minZ="-3550" maxZ="-3350"> <!-- mother_tree_start_zone -->
<stat name="HpRegenBonus" val="2" />
<stat name="MpRegenBonus" val="1" />
<stat name="affectedRace" val="1" /> <!-- Elf -->
<stat name="enterMsgId" val="114" />
<stat name="leaveMsgId" val="115" />
<node X="45889" Y="41890" />
<node X="45277" Y="41672" />
<node X="45028" Y="41478" />
<node X="44809" Y="41230" />
<node X="44522" Y="40689" />
<node X="44501" Y="39970" />
<node X="44725" Y="39407" />
<node X="44930" Y="39145" />
<node X="45447" Y="38764" />
<node X="46073" Y="38618" />
<node X="46710" Y="38716" />
<node X="47255" Y="39049" />
<node X="47743" Y="39834" />
<node X="47772" Y="40568" />
<node X="47545" Y="41125" />
<node X="47108" Y="41599" />
<node X="46531" Y="41868" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-3121" maxZ="-2921"> <!-- mother_tree_town -->
<stat name="HpRegenBonus" val="2" />
<stat name="MpRegenBonus" val="1" />
<stat name="affectedRace" val="1" /> <!-- Elf -->
<stat name="enterMsgId" val="114" />
<stat name="leaveMsgId" val="115" />
<node X="45234" Y="49892" />
<node X="45117" Y="49826" />
<node X="45031" Y="49722" />
<node X="44986" Y="49597" />
<node X="44985" Y="49462" />
<node X="45032" Y="49336" />
<node X="45116" Y="49233" />
<node X="45233" Y="49165" />
<node X="45365" Y="49143" />
<node X="45498" Y="49166" />
<node X="45614" Y="49235" />
<node X="45700" Y="49336" />
<node X="45746" Y="49462" />
<node X="45747" Y="49596" />
<node X="45699" Y="49723" />
<node X="45614" Y="49825" />
<node X="45498" Y="49893" />
<node X="45366" Y="49914" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-3745" maxZ="-3545"> <!-- 20_19_worldtree -->
<stat name="HpRegenBonus" val="2" />
<stat name="MpRegenBonus" val="1" />
<stat name="affectedRace" val="1" /> <!-- Elf -->
<stat name="enterMsgId" val="114" />
<stat name="leaveMsgId" val="115" />
<node X="21101" Y="50538" />
<node X="21511" Y="50683" />
<node X="21642" Y="51005" />
<node X="21583" Y="51349" />
<node X="21255" Y="51581" />
<node X="20852" Y="51473" />
<node X="20627" Y="51121" />
<node X="20728" Y="50743" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-3260" maxZ="-3060"> <!-- 20_20_worldtree -->
<stat name="HpRegenBonus" val="2" />
<stat name="MpRegenBonus" val="1" />
<stat name="affectedRace" val="1" /> <!-- Elf -->
<stat name="enterMsgId" val="114" />
<stat name="leaveMsgId" val="115" />
<node X="25548" Y="81124" />
<node X="25660" Y="81548" />
<node X="25380" Y="81884" />
<node X="24960" Y="81972" />
<node X="24660" Y="81716" />
<node X="24604" Y="81324" />
<node X="24816" Y="81012" />
<node X="25248" Y="80944" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-3775" maxZ="-3575"> <!-- 21_20_worldtree -->
<stat name="HpRegenBonus" val="2" />
<stat name="MpRegenBonus" val="1" />
<stat name="affectedRace" val="1" /> <!-- Elf -->
<stat name="enterMsgId" val="114" />
<stat name="leaveMsgId" val="115" />
<node X="57755" Y="85802" />
<node X="57974" Y="86079" />
<node X="57953" Y="86404" />
<node X="57711" Y="86683" />
<node X="57324" Y="86686" />
<node X="57105" Y="86436" />
<node X="57088" Y="86061" />
<node X="57404" Y="85785" />
</zone>
<!-- Oracle of Dusk (Mp Regen Zones) -->
<zone type="MotherTreeZone" shape="NPoly" minZ="-5168" maxZ="-4968"> <!-- ssq_main_event_17_20_01 -->
<stat name="MpRegenBonus" val="2" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-79956" Y="84556" />
<node X="-79832" Y="84620" />
<node X="-79824" Y="84772" />
<node X="-79956" Y="84844" />
<node X="-80080" Y="84772" />
<node X="-80076" Y="84620" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-5164" maxZ="-4964"> <!-- ssq_main_event_17_20_04 -->
<stat name="MpRegenBonus" val="2" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-76936" Y="85164" />
<node X="-76820" Y="85232" />
<node X="-76816" Y="85380" />
<node X="-76948" Y="85444" />
<node X="-77068" Y="85376" />
<node X="-77068" Y="85236" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-5164" maxZ="-4964"> <!-- ssq_main_event_17_20_05 -->
<stat name="MpRegenBonus" val="3" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-74924" Y="87012" />
<node X="-74784" Y="87008" />
<node X="-74712" Y="87132" />
<node X="-74780" Y="87256" />
<node X="-74924" Y="87260" />
<node X="-75000" Y="87140" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-5176" maxZ="-4976"> <!-- ssq_main_event_17_20_03 -->
<stat name="MpRegenBonus" val="3" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-77200" Y="88820" />
<node X="-77076" Y="88896" />
<node X="-77076" Y="89040" />
<node X="-77204" Y="89108" />
<node X="-77328" Y="89044" />
<node X="-77328" Y="88892" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-5172" maxZ="-4972"> <!-- ssq_main_event_17_20_02 -->
<stat name="MpRegenBonus" val="4" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-80204" Y="88220" />
<node X="-80080" Y="88288" />
<node X="-80080" Y="88428" />
<node X="-80208" Y="88504" />
<node X="-80336" Y="88428" />
<node X="-80328" Y="88292" />
</zone>
<!-- Oracle of Dawn (Mp Regen Zones) -->
<zone type="MotherTreeZone" shape="NPoly" minZ="-4916" maxZ="-4716"> <!-- ssq_main_event_17_21_01 -->
<stat name="MpRegenBonus" val="2" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-78796" Y="109452" />
<node X="-78804" Y="109608" />
<node X="-78924" Y="109672" />
<node X="-79056" Y="109600" />
<node X="-79056" Y="109456" />
<node X="-78932" Y="109380" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-4908" maxZ="-4708"> <!-- ssq_main_event_17_21_02 -->
<stat name="MpRegenBonus" val="2" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-75920" Y="109992" />
<node X="-75792" Y="110068" />
<node X="-75792" Y="110220" />
<node X="-75912" Y="110288" />
<node X="-76048" Y="110212" />
<node X="-76044" Y="110068" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-4916" maxZ="-4716"> <!-- ssq_main_event_17_21_05 -->
<stat name="MpRegenBonus" val="3" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-73900" Y="111844" />
<node X="-73752" Y="111840" />
<node X="-73688" Y="111976" />
<node X="-73760" Y="112092" />
<node X="-73904" Y="112092" />
<node X="-73976" Y="111968" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-4912" maxZ="-4712"> <!-- ssq_main_event_17_21_03 -->
<stat name="MpRegenBonus" val="3" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-76172" Y="113656" />
<node X="-76052" Y="113728" />
<node X="-76048" Y="113872" />
<node X="-76172" Y="113944" />
<node X="-76308" Y="113876" />
<node X="-76304" Y="113728" />
</zone>
<zone type="MotherTreeZone" shape="NPoly" minZ="-4908" maxZ="-4708"> <!-- ssq_main_event_17_21_04 -->
<stat name="MpRegenBonus" val="4" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="-79184" Y="113040" />
<node X="-79060" Y="113116" />
<node X="-79052" Y="113268" />
<node X="-79184" Y="113336" />
<node X="-79304" Y="113260" />
<node X="-79304" Y="113116" />
</zone>
<!-- Devil Isle Zones -->
<!-- Recovery -->
<zone type="MotherTreeZone" shape="NPoly" minZ="-3913" maxZ="-3413"> <!-- devil_healing_zone -->
<stat name="HpRegenBonus" val="2" />
<stat name="MpRegenBonus" val="1" />
<stat name="enterMsgId" val="1054" />
<stat name="leaveMsgId" val="1055" />
<node X="41520" Y="205163" />
<node X="44448" Y="205623" />
<node X="44352" Y="208957" />
<node X="42813" Y="208983" />
<node X="41473" Y="207893" />
</zone>
</list>

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- No Landing Zones -->
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_01 -->
<node X="-20873" Y="-21000" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_02 -->
<node X="-120324" Y="-225077" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_03 -->
<node X="-102495" Y="-209023" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_04 -->
<node X="-120156" Y="-207378" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_05 -->
<node X="-87628" Y="-225021" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_06 -->
<node X="-81705" Y="-213209" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_07 -->
<node X="-87593" Y="-207339" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_08 -->
<node X="-93709" Y="-218304" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_09 -->
<node X="-77157" Y="-218608" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_10 -->
<node X="-69682" Y="-209027" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_11 -->
<node X="-76887" Y="-201256" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_12 -->
<node X="-109985" Y="-218701" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_13 -->
<node X="-126367" Y="-218228" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_14 -->
<node X="-109629" Y="-201292" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_15 -->
<node X="-87523" Y="-240169" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_16 -->
<node X="-81748" Y="-245950" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_17 -->
<node X="-77123" Y="-251473" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_18 -->
<node X="-69778" Y="-241801" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_19 -->
<node X="-76754" Y="-234014" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_20 -->
<node X="-93742" Y="-251032" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_21 -->
<node X="-87466" Y="-257752" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="7000"> <!-- nofly_olympiad_stadium_22 -->
<node X="-114413" Y="-213241" />
</zone>
<zone type="NoLandingZone" shape="NPoly" minZ="-4096" maxZ="-3896"> <!-- boss_area_antaras -->
<node X="-58026" Y="-190958" />
<node X="-98030" Y="-190958" />
<node X="-97263" Y="-35335" />
<node X="-5341" Y="-34964" />
<node X="-5554" Y="-4207" />
<node X="-129444" Y="-4207" />
</zone>
<zone type="NoLandingZone" shape="NPoly" minZ="-3753" maxZ="16407"> <!-- boss_area_valakas -->
<node X="196710" Y="-130845" />
<node X="228895" Y="-130845" />
<node X="229126" Y="-96162" />
<node X="196478" Y="-98187" />
</zone>
<zone type="NoLandingZone" shape="Cylinder" minZ="-10380" maxZ="16407" rad="10000"> <!-- nofly_TOI -->
<node X="115202" Y="16621" />
</zone>
<zone type="NoLandingZone" shape="NPoly" minZ="-2610" maxZ="16407"> <!-- nofly_Rainbow_Spring -->
<node X="147262" Y="-130925" />
<node X="159640" Y="-130952" />
<node X="159532" Y="-121970" />
<node X="147455" Y="-121883" />
</zone>
<zone type="NoLandingZone" shape="NPoly" minZ="-716" maxZ="16407"> <!-- 24_21_nofly -->
<node X="131156" Y="98394" />
<node X="163755" Y="98405" />
<node X="163747" Y="130995" />
<node X="131168" Y="131006" />
</zone>
<zone type="NoLandingZone" shape="NPoly" minZ="-4044" maxZ="16407"> <!-- 25_21_nofly -->
<node X="163907" Y="98398" />
<node X="196477" Y="98408" />
<node X="196495" Y="130990" />
<node X="164032" Y="130993" />
</zone>
<zone type="NoLandingZone" shape="NPoly" minZ="-15000" maxZ="16407"> <!-- nofly_oren01_mb2220_ugoz01 -->
<node X="88417" Y="77085" />
<node X="105546" Y="77041" />
<node X="105421" Y="92728" />
<node X="88481" Y="92787" />
</zone>
</list>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- No Restart Zones -->
<zone type="NoRestartZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_no_restart1 -->
<node X="-120682" Y="-182923" />
<node X="-115515" Y="-182923" />
<node X="-115515" Y="-180121" />
<node X="-120682" Y="-180121" />
</zone>
<zone type="NoRestartZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_no_restart2 -->
<node X="-120677" Y="-180093" />
<node X="-115510" Y="-180093" />
<node X="-115510" Y="-177291" />
<node X="-120677" Y="-177291" />
</zone>
<zone type="NoRestartZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_no_restart3 -->
<node X="-114045" Y="-182907" />
<node X="-108878" Y="-182907" />
<node X="-108878" Y="-180105" />
<node X="-114045" Y="-180105" />
</zone>
<zone type="NoRestartZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_no_restart4 -->
<node X="-114040" Y="-180077" />
<node X="-108873" Y="-180077" />
<node X="-108873" Y="-177275" />
<node X="-114040" Y="-177275" />
</zone>
<zone type="NoRestartZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_no_restart5 -->
<node X="-116267" Y="-177955" />
<node X="-113344" Y="-177955" />
<node X="-113344" Y="-172772" />
<node X="-116267" Y="-172773" />
</zone>
<zone type="NoRestartZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_no_restart6 -->
<node X="-116217" Y="-187430" />
<node X="-113293" Y="-187430" />
<node X="-113293" Y="-182247" />
<node X="-116217" Y="-182247" />
</zone>
</list>

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- CUSTOM - NO STORE ZONES -->
<!-- Giran - northern coridor - west -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3400" maxZ="-3550">
<node X="81446" Y="143530" />
<node X="81635" Y="147720" />
</zone>
<!-- Giran - northern coridor - east -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3350" maxZ="-3450">
<node X="83790" Y="143495" />
<node X="84000" Y="147230" />
</zone>
<!-- Giran - western coridor (up to the Dusk Priestess) -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3650" maxZ="-3400">
<node X="77080" Y="148525" />
<node X="81780" Y="148720" />
</zone>
<!-- Giran - southern coridor -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3550" maxZ="-3400">
<node X="81435" Y="149530" />
<node X="81640" Y="152920" />
</zone>
<!-- Giran - northern path -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3400">
<node X="80930" Y="147680" />
<node X="82940" Y="147875" />
</zone>
<!-- Giran - western path -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3400">
<node X="80930" Y="147680" />
<node X="81115" Y="149540" />
</zone>
<!-- Giran - southern path -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3400">
<node X="80925" Y="149340" />
<node X="82940" Y="149535" />
</zone>
<!-- Giran - large temple area (gatekeeper and Priest of Dawn area) -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3350">
<node X="82735" Y="147000" />
<node X="84320" Y="149780" />
</zone>
<!-- Giran - olympiad manager -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3400">
<node X="81985" Y="147450" />
<node X="82205" Y="147710" />
</zone>
<!-- Giran - manor manager -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3400">
<node X="81865" Y="149530" />
<node X="82030" Y="149680" />
</zone>
<!-- Giran - auctioneer and gabrielle -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3500" maxZ="-3400">
<node X="81205" Y="149520" />
<node X="81510" Y="149830" />
</zone>
<!-- Giran - path to taurin -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3550" maxZ="-3450">
<node X="81055" Y="146820" />
<node X="81455" Y="147000" />
</zone>
<!-- Giran - path to warehouse -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3550" maxZ="-3450">
<node X="81620" Y="146465" />
<node X="82035" Y="146680" />
</zone>
<!-- Giran - Taurin -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3550" maxZ="-3450">
<node X="80655" Y="146350" />
<node X="80855" Y="146460" />
</zone>
<!-- Giran - Collob -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-3550" maxZ="-3450">
<node X="79200" Y="149455" />
<node X="79300" Y="149645" />
</zone>
<!-- Aden - olympiad manager square -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-2250" maxZ="-2150">
<node X="146841" Y="26541" />
<node X="148071" Y="27425" />
</zone>
<!-- Aden - central stairs -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-2250" maxZ="-1950">
<node X="147273" Y="25941" />
<node X="147645" Y="26538" />
</zone>
<!-- Aden - temple square -->
<zone type="NoStoreZone" shape="Cuboid" minZ="-2050" maxZ="-1950">
<node X="146233" Y="25938" />
<node X="148729" Y="25553" />
</zone>
</list>

View File

@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-5383" maxZ="-4883"> <!-- oracle_of_dusk_waitroom -->
<node X="-82064" Y="85608" />
<node X="-75832" Y="85626" />
<node X="-75832" Y="88068" />
<node X="-82099" Y="88080" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-5118" maxZ="-4618"> <!-- oracle_of_dawn_waitroom -->
<node X="-74529" Y="110475" />
<node X="-75832" Y="110476" />
<node X="-74524" Y="113224" />
<node X="-80892" Y="113211" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-6949" maxZ="-6449"> <!-- rift_between_worlds_waitroom -->
<node X="-115608" Y="-182374" />
<node X="-113976" Y="-182380" />
<node X="-113990" Y="-177851" />
<node X="-115606" Y="-177858" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-3668" maxZ="-3168"> <!-- monster_derby_track -->
<node X="14566" Y="182997" />
<node X="13257" Y="182976" />
<node X="13250" Y="184333" />
<node X="11629" Y="184316" />
<node X="11621" Y="181298" />
<node X="14486" Y="181302" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-2992" maxZ="-2792"> <!-- gm_prison -->
<node X="-116390" Y="-251581" />
<node X="-112756" Y="-251617" />
<node X="-112720" Y="-248199" />
<node X="-116354" Y="-248217" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-3753" maxZ="32767"> <!-- boss_area_valakas -->
<node X="196710" Y="-130845" />
<node X="228895" Y="-130845" />
<node X="229126" Y="-96162" />
<node X="196478" Y="-98187" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-3753" maxZ="32767"> <!-- boss_area_valakas2 -->
<node X="183634" Y="-115085" />
<node X="183634" Y="-114885" />
<node X="184000" Y="-115085" />
<node X="184000" Y="-114885" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-10736" maxZ="-5736"> <!-- 20_26_basetower_inner_01 -->
<node X="12080" Y="274633" />
<node X="20523" Y="274633" />
<node X="20553" Y="284567" />
<node X="11947" Y="284600" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-15364" maxZ="-6864"> <!-- 19_26_tower_a_inner_01 -->
<node X="-23324" Y="276243" />
<node X="-17912" Y="276243" />
<node X="-17912" Y="280871" />
<node X="-23324" Y="280871" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-16148" maxZ="-4648"> <!-- 19_26_tower_b_inner_01 -->
<node X="-15081" Y="271397" />
<node X="-9858" Y="271401" />
<node X="-9809" Y="282115" />
<node X="-15085" Y="282131" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-10412" maxZ="-5112"> <!-- 20_24_beres_01 -->
<node X="11214" Y="205578" />
<node X="20607" Y="205578" />
<node X="20648" Y="220271" />
<node X="11172" Y="220271" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-14581" maxZ="-4581"> <!-- 20_21_cruma_tower -->
<node X="9951" Y="106537" />
<node X="25483" Y="106522" />
<node X="25456" Y="121770" />
<node X="9991" Y="121797" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-8800" maxZ="200"> <!-- 25_15_godard15_nocall -->
<node X="164226" Y="-94258" />
<node X="171998" Y="-94378" />
<node X="171845" Y="-84191" />
<node X="164030" Y="-83790" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-8800" maxZ="200"> <!-- 25_15_godard14_nocall -->
<node X="176475" Y="-90312" />
<node X="192224" Y="-90260" />
<node X="192236" Y="-84568" />
<node X="180669" Y="-84640" />
<node X="180606" Y="-82852" />
<node X="176498" Y="-82757" />
</zone>
<zone type="NoSummonFriendZone" shape="NPoly" minZ="-7318" maxZ="-6718"> <!-- 25_15_godard18_nocall -->
<node X="172063" Y="-90095" />
<node X="176460" Y="-90057" />
<node X="176460" Y="-74019" />
<node X="172089" Y="-74076" />
</zone>
</list>

View File

@@ -0,0 +1,356 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Olympiad Stadium Zones -->
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3100" maxZ="-2825"> <!-- olympiad_stadium_01 -->
<node X="-21680" Y="-20140" />
<node X="-21965" Y="-20500" />
<node X="-21965" Y="-21530" />
<node X="-21680" Y="-21870" />
<node X="-19953" Y="-21870" />
<node X="-19670" Y="-21530" />
<node X="-19670" Y="-20500" />
<node X="-19953" Y="-20142" />
<!-- point1 -->
<spawn X="-21680" Y="-21028" Z="-3022" />
<!-- point2 -->
<spawn X="-19953" Y="-21028" Z="-3022" />
<!-- spectator -->
<spawn X="-20816" Y="-21028" Z="-3022" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_02 -->
<node X="-119418" Y="-225869" />
<node X="-119133" Y="-225519" />
<node X="-119133" Y="-224488" />
<node X="-119418" Y="-224138" />
<node X="-121143" Y="-224138" />
<node X="-121428" Y="-224488" />
<node X="-121428" Y="-225519" />
<node X="-121143" Y="-225869" />
<!-- point1 -->
<spawn X="-119418" Y="-225003" Z="-3327" />
<!-- point2 -->
<spawn X="-121143" Y="-225003" Z="-3327" />
<!-- spectator -->
<spawn X="-120280" Y="-225003" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_03 -->
<node X="-101625" Y="-209870" />
<node X="-101340" Y="-209520" />
<node X="-101340" Y="-208489" />
<node X="-101625" Y="-208139" />
<node X="-103350" Y="-208139" />
<node X="-103635" Y="-208489" />
<node X="-103635" Y="-209520" />
<node X="-103350" Y="-209870" />
<!-- point1 -->
<spawn X="-101625" Y="-209004" Z="-3327" />
<!-- point2 -->
<spawn X="-103350" Y="-209004" Z="-3327" />
<!-- spectator -->
<spawn X="-102487" Y="-209004" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_04 -->
<node X="-119385" Y="-208237" />
<node X="-119100" Y="-207887" />
<node X="-119100" Y="-206856" />
<node X="-119385" Y="-206506" />
<node X="-121110" Y="-206506" />
<node X="-121395" Y="-206856" />
<node X="-121395" Y="-207887" />
<node X="-121110" Y="-208237" />
<!-- point1 -->
<spawn X="-119385" Y="-207371" Z="-3327" />
<!-- point2 -->
<spawn X="-121110" Y="-207371" Z="-3327" />
<!-- spectator -->
<spawn X="-120247" Y="-207371" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_05 -->
<node X="-86650" Y="-225853" />
<node X="-86365" Y="-225503" />
<node X="-86365" Y="-224472" />
<node X="-86650" Y="-224122" />
<node X="-88375" Y="-224122" />
<node X="-88660" Y="-224472" />
<node X="-88660" Y="-225503" />
<node X="-88375" Y="-225853" />
<!-- point1 -->
<spawn X="-86650" Y="-224987" Z="-3327" />
<!-- point2 -->
<spawn X="-88375" Y="-224987" Z="-3327" />
<!-- spectator -->
<spawn X="-87512" Y="-224987" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_06 -->
<node X="-80875" Y="-214077" />
<node X="-80590" Y="-213727" />
<node X="-80590" Y="-212696" />
<node X="-80875" Y="-212346" />
<node X="-82600" Y="-212346" />
<node X="-82885" Y="-212696" />
<node X="-82885" Y="-213727" />
<node X="-82600" Y="-214077" />
<!-- point1 -->
<spawn X="-80875" Y="-213211" Z="-3327" />
<!-- point2 -->
<spawn X="-82600" Y="-213211" Z="-3327" />
<!-- spectator -->
<spawn X="-81737" Y="-213211" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_07 -->
<node X="-86610" Y="-208240" />
<node X="-86325" Y="-207890" />
<node X="-86325" Y="-206860" />
<node X="-86610" Y="-206510" />
<node X="-88335" Y="-206510" />
<node X="-88620" Y="-206860" />
<node X="-88620" Y="-207890" />
<node X="-88335" Y="-208240" />
<!-- point1 -->
<spawn X="-86610" Y="-207354" Z="-3327" />
<!-- point2 -->
<spawn X="-88335" Y="-207354" Z="-3327" />
<!-- spectator -->
<spawn X="-87472" Y="-207354" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_08 -->
<node X="-92940" Y="-219120" />
<node X="-92655" Y="-218770" />
<node X="-92655" Y="-217740" />
<node X="-92940" Y="-217390" />
<node X="-94665" Y="-217390" />
<node X="-94950" Y="-217740" />
<node X="-94950" Y="-218770" />
<node X="-94665" Y="-219120" />
<!-- point1 -->
<spawn X="-92940" Y="-218254" Z="-3327" />
<!-- point2 -->
<spawn X="-94665" Y="-218254" Z="-3327" />
<!-- spectator -->
<spawn X="-93802" Y="-218254" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_09 -->
<node X="-76250" Y="-219566" />
<node X="-75965" Y="-219216" />
<node X="-75965" Y="-218185" />
<node X="-76250" Y="-217835" />
<node X="-77975" Y="-217835" />
<node X="-78260" Y="-218185" />
<node X="-78260" Y="-219216" />
<node X="-77975" Y="-219566" />
<!-- point1 -->
<spawn X="-76250" Y="-218700" Z="-3327" />
<!-- point2 -->
<spawn X="-77975" Y="-218700" Z="-3327" />
<!-- spectator -->
<spawn X="-77112" Y="-218700" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_10 -->
<node X="-68857" Y="-209900" />
<node X="-68572" Y="-209550" />
<node X="-68572" Y="-208519" />
<node X="-68857" Y="-208169" />
<node X="-70582" Y="-208169" />
<node X="-70867" Y="-208519" />
<node X="-70867" Y="-209550" />
<node X="-70582" Y="-209900" />
<!-- point1 -->
<spawn X="-68857" Y="-209034" Z="-3327" />
<!-- point2 -->
<spawn X="-70582" Y="-209034" Z="-3327" />
<!-- spectator -->
<spawn X="-69719" Y="-209034" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_11 -->
<node X="-75962" Y="-202092" />
<node X="-75677" Y="-201742" />
<node X="-75677" Y="-200711" />
<node X="-75962" Y="-200361" />
<node X="-77687" Y="-200361" />
<node X="-77972" Y="-200711" />
<node X="-77972" Y="-201742" />
<node X="-77687" Y="-202092" />
<!-- point1 -->
<spawn X="-75962" Y="-201226" Z="-3327" />
<!-- point2 -->
<spawn X="-77687" Y="-201226" Z="-3327" />
<!-- spectator -->
<spawn X="-76824" Y="-201226" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_12 -->
<node X="-109018" Y="-219565" />
<node X="-108733" Y="-219215" />
<node X="-108733" Y="-218184" />
<node X="-109018" Y="-217834" />
<node X="-110743" Y="-217834" />
<node X="-111028" Y="-218184" />
<node X="-111028" Y="-219215" />
<node X="-110743" Y="-219565" />
<!-- point1 -->
<spawn X="-109018" Y="-218699" Z="-3327" />
<!-- point2 -->
<spawn X="-110743" Y="-218699" Z="-3327" />
<!-- spectator -->
<spawn X="-109880" Y="-218699" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_13 -->
<node X="-125722" Y="-219117" />
<node X="-125437" Y="-218767" />
<node X="-125437" Y="-217736" />
<node X="-125722" Y="-217386" />
<node X="-127447" Y="-217386" />
<node X="-127732" Y="-217736" />
<node X="-127732" Y="-218767" />
<node X="-127447" Y="-219117" />
<!-- point1 -->
<spawn X="-125722" Y="-218251" Z="-3327" />
<!-- point2 -->
<spawn X="-127447" Y="-218251" Z="-3327" />
<!-- spectator -->
<spawn X="-126584" Y="-218251" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_14 -->
<node X="-108730" Y="-202093" />
<node X="-108445" Y="-201743" />
<node X="-108445" Y="-200712" />
<node X="-108730" Y="-200362" />
<node X="-110455" Y="-200362" />
<node X="-110740" Y="-200712" />
<node X="-110740" Y="-201743" />
<node X="-110455" Y="-202093" />
<!-- point1 -->
<spawn X="-108730" Y="-201227" Z="-3327" />
<!-- point2 -->
<spawn X="-110455" Y="-201227" Z="-3327" />
<!-- spectator -->
<spawn X="-109592" Y="-201227" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_15 -->
<node X="-86618" Y="-241008" />
<node X="-86333" Y="-240658" />
<node X="-86333" Y="-239627" />
<node X="-86618" Y="-239277" />
<node X="-88343" Y="-239277" />
<node X="-88628" Y="-239627" />
<node X="-88628" Y="-240658" />
<node X="-88343" Y="-241008" />
<!-- point1 -->
<spawn X="-86618" Y="-240142" Z="-3327" />
<!-- point2 -->
<spawn X="-88343" Y="-240142" Z="-3327" />
<!-- spectator -->
<spawn X="-87480" Y="-240142" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_16 -->
<node X="-80890" Y="-246830" />
<node X="-80605" Y="-246480" />
<node X="-80605" Y="-245449" />
<node X="-80890" Y="-245099" />
<node X="-82615" Y="-245099" />
<node X="-82900" Y="-245449" />
<node X="-82900" Y="-246480" />
<node X="-82615" Y="-246830" />
<!-- point1 -->
<spawn X="-80890" Y="-245964" Z="-3327" />
<!-- point2 -->
<spawn X="-82615" Y="-245964" Z="-3327" />
<!-- spectator -->
<spawn X="-81752" Y="-245964" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_17 -->
<node X="-76249" Y="-252348" />
<node X="-75964" Y="-251998" />
<node X="-75964" Y="-250967" />
<node X="-76249" Y="-250617" />
<node X="-77974" Y="-250617" />
<node X="-78259" Y="-250967" />
<node X="-78259" Y="-251998" />
<node X="-77974" Y="-252348" />
<!-- point1 -->
<spawn X="-76249" Y="-251482" Z="-3327" />
<!-- point2 -->
<spawn X="-77974" Y="-251482" Z="-3327" />
<!-- spectator -->
<spawn X="-77111" Y="-251482" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_18 -->
<node X="-68857" Y="-242637" />
<node X="-68572" Y="-242287" />
<node X="-68572" Y="-241256" />
<node X="-68857" Y="-240906" />
<node X="-70582" Y="-240906" />
<node X="-70867" Y="-241256" />
<node X="-70867" Y="-242287" />
<node X="-70582" Y="-242637" />
<!-- point1 -->
<spawn X="-68857" Y="-241771" Z="-3327" />
<!-- point2 -->
<spawn X="-70582" Y="-241771" Z="-3327" />
<!-- spectator -->
<spawn X="-69719" Y="-241771" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_19 -->
<node X="-75961" Y="-234861" />
<node X="-75676" Y="-234511" />
<node X="-75676" Y="-233480" />
<node X="-75961" Y="-233130" />
<node X="-77686" Y="-233130" />
<node X="-77971" Y="-233480" />
<node X="-77971" Y="-234511" />
<node X="-77686" Y="-234861" />
<!-- point1 -->
<spawn X="-75961" Y="-233995" Z="-3327" />
<!-- point2 -->
<spawn X="-77686" Y="-233995" Z="-3327" />
<!-- spectator -->
<spawn X="-76823" Y="-233995" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_20 -->
<node X="-92953" Y="-251900" />
<node X="-92668" Y="-251550" />
<node X="-92668" Y="-250519" />
<node X="-92953" Y="-250169" />
<node X="-94678" Y="-250169" />
<node X="-94963" Y="-250519" />
<node X="-94963" Y="-251550" />
<node X="-94678" Y="-251900" />
<!-- point1 -->
<spawn X="-92953" Y="-251034" Z="-3327" />
<!-- point2 -->
<spawn X="-94678" Y="-251034" Z="-3327" />
<!-- spectator -->
<spawn X="-93815" Y="-251034" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_21 -->
<node X="-86650" Y="-258653" />
<node X="-86365" Y="-258303" />
<node X="-86365" Y="-257272" />
<node X="-86650" Y="-256922" />
<node X="-88375" Y="-256922" />
<node X="-88660" Y="-257272" />
<node X="-88660" Y="-258303" />
<node X="-88375" Y="-258653" />
<!-- point1 -->
<spawn X="-86650" Y="-257787" Z="-3327" />
<!-- point2 -->
<spawn X="-88375" Y="-257787" Z="-3327" />
<!-- spectator -->
<spawn X="-87512" Y="-257787" Z="-3327" />
</zone>
<zone type="OlympiadStadiumZone" shape="NPoly" minZ="-3400" maxZ="-3125"> <!-- olympiad_stadium_22 -->
<node X="-113674" Y="-214060" />
<node X="-113389" Y="-213710" />
<node X="-113389" Y="-212679" />
<node X="-113674" Y="-212329" />
<node X="-115399" Y="-212329" />
<node X="-115684" Y="-212679" />
<node X="-115684" Y="-213710" />
<node X="-115399" Y="-214060" />
<!-- point1 -->
<spawn X="-113674" Y="-213194" Z="-3327" />
<!-- point2 -->
<spawn X="-115399" Y="-213194" Z="-3327" />
<!-- spectator -->
<spawn X="-114536" Y="-213194" Z="-3327" />
</zone>
</list>

View File

@@ -0,0 +1,915 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Peace Zones -->
<zone type="PeaceZone" shape="NPoly" minZ="-3966" maxZ="-3466"> <!-- talking_island_town_peace_zone1 -->
<node X="-84028" Y="239722" />
<node X="-81007" Y="243210" />
<node X="-81021" Y="243484" />
<node X="-84308" Y="246247" />
<node X="-84552" Y="246239" />
<node X="-87638" Y="242837" />
<node X="-87611" Y="242574" />
<node X="-84305" Y="239649" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3820" maxZ="-3320"> <!-- talking_island_town_peace_zone2 -->
<node X="-83428" Y="240398" />
<node X="-82605" Y="241262" />
<node X="-81512" Y="242568" />
<node X="-82035" Y="242583" />
<node X="-83396" Y="241129" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3789" maxZ="-3289"> <!-- talking_island_town_peace_zone3 -->
<node X="-86138" Y="243444" />
<node X="-85039" Y="244801" />
<node X="-84811" Y="245977" />
<node X="-86323" Y="244370" />
<node X="-87229" Y="243237" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3846" maxZ="-3346"> <!-- talking_island_town_peace_zone4 -->
<node X="-85539" Y="241748" />
<node X="-87612" Y="242572" />
<node X="-87470" Y="242383" />
<node X="-86310" Y="241337" />
<node X="-85622" Y="240814" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3699" maxZ="-2699"> <!-- mage_start_peace_1 -->
<node X="-90034" Y="248143" />
<node X="-89960" Y="248698" />
<node X="-90520" Y="248847" />
<node X="-91136" Y="248445" />
<node X="-91270" Y="248296" />
<node X="-91328" Y="248092" />
<node X="-91250" Y="247867" />
<node X="-91063" Y="247704" />
<node X="-90863" Y="247676" />
<node X="-90638" Y="247748" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4043" maxZ="-3043"> <!-- mage_start_peace_2 -->
<node X="-90165" Y="247096" />
<node X="-88576" Y="248162" />
<node X="-89962" Y="250239" />
<node X="-91512" Y="249150" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3659" maxZ="-2659"> <!-- mage_start_peace_3 -->
<node X="-88457" Y="248867" />
<node X="-88611" Y="249099" />
<node X="-89054" Y="249756" />
<node X="-89279" Y="250048" />
<node X="-89684" Y="250143" />
<node X="-90008" Y="249970" />
<node X="-88864" Y="248209" />
<node X="-88542" Y="248446" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3659" maxZ="-2659"> <!-- mage_start_peace_4 -->
<node X="-88732" Y="248912" />
<node X="-88418" Y="249116" />
<node X="-89005" Y="249980" />
<node X="-89311" Y="249787" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3659" maxZ="-2659"> <!-- mage_start_peace_5 -->
<node X="-88612" Y="249461" />
<node X="-88559" Y="249539" />
<node X="-88581" Y="249649" />
<node X="-88680" Y="249708" />
<node X="-88761" Y="249704" />
<node X="-89050" Y="249513" />
<node X="-89073" Y="249332" />
<node X="-88895" Y="249273" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3284" maxZ="-2284"> <!-- fighter_start_peace_1 -->
<node X="-73436" Y="257725" />
<node X="-71668" Y="256229" />
<node X="-69952" Y="258077" />
<node X="-71896" Y="259701" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3272" maxZ="-2272"> <!-- fighter_start_peace_2 -->
<node X="-73180" Y="257663" />
<node X="-72460" Y="258619" />
<node X="-72720" Y="258831" />
<node X="-73284" Y="258115" />
<node X="-73260" Y="257855" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3272" maxZ="-2272"> <!-- fighter_start_peace_3 -->
<node X="-71279" Y="256408" />
<node X="-70679" Y="257116" />
<node X="-70939" Y="257328" />
<node X="-71575" Y="256612" />
<node X="-71634" Y="256392" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3306" maxZ="-2306"> <!-- fighter_start_peace_4 -->
<node X="-72596" Y="259181" />
<node X="-70363" Y="257272" />
<node X="-70041" Y="257631" />
<node X="-72303" Y="259545" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-8507" maxZ="-1507"> <!-- darkelf_town_peace_zone -->
<node X="15719" Y="16735" />
<node X="14885" Y="19139" />
<node X="12223" Y="21049" />
<node X="8962" Y="20203" />
<node X="7340" Y="18060" />
<node X="7372" Y="15649" />
<node X="8018" Y="14013" />
<node X="9389" Y="12836" />
<node X="10669" Y="12131" />
<node X="12499" Y="12455" />
<node X="14684" Y="13625" />
<node X="15441" Y="15060" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4571" maxZ="-2071"> <!-- darkelf_start_peace_1 -->
<node X="28422" Y="8936" />
<node X="30282" Y="10670" />
<node X="29952" Y="11744" />
<node X="28457" Y="13117" />
<node X="27730" Y="13126" />
<node X="26435" Y="11893" />
<node X="26450" Y="10146" />
<node X="27792" Y="8929" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4588" maxZ="-2088"> <!-- darkelf_start_peace_2 -->
<node X="29434" Y="10233" />
<node X="31273" Y="10233" />
<node X="31273" Y="11827" />
<node X="29431" Y="11830" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3511" maxZ="-2011"> <!-- elf_town_peace1 -->
<node X="47758" Y="51443" />
<node X="46735" Y="52457" />
<node X="45358" Y="52947" />
<node X="44182" Y="52419" />
<node X="43398" Y="51830" />
<node X="43006" Y="51401" />
<node X="42508" Y="50515" />
<node X="42343" Y="49479" />
<node X="42547" Y="48421" />
<node X="43138" Y="47363" />
<node X="44342" Y="46639" />
<node X="45621" Y="46486" />
<node X="45974" Y="46554" />
<node X="47114" Y="46996" />
<node X="47777" Y="47710" />
<node X="48202" Y="48441" />
<node X="48400" Y="49391" />
<node X="48365" Y="50345" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4071" maxZ="-2571"> <!-- elf_start_peace1 -->
<node X="47987" Y="40688" />
<node X="47644" Y="41254" />
<node X="47139" Y="41756" />
<node X="46576" Y="42051" />
<node X="45590" Y="42006" />
<node X="44823" Y="41489" />
<node X="44355" Y="40860" />
<node X="44168" Y="40397" />
<node X="44319" Y="39900" />
<node X="44723" Y="39030" />
<node X="45366" Y="38626" />
<node X="46511" Y="38446" />
<node X="47292" Y="38808" />
<node X="47736" Y="39330" />
<node X="48079" Y="39911" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4082" maxZ="-2582"> <!-- elf_start_peace2 -->
<node X="44215" Y="39803" />
<node X="44497" Y="40504" />
<node X="43643" Y="41416" />
<node X="43398" Y="41419" />
<node X="42884" Y="41191" />
<node X="42475" Y="40529" />
<node X="42466" Y="40285" />
<node X="42762" Y="39658" />
<node X="43311" Y="39336" />
<node X="43546" Y="39327" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4082" maxZ="-2582"> <!-- elf_start_peace3 -->
<node X="49799" Y="39991" />
<node X="49812" Y="40226" />
<node X="48958" Y="41201" />
<node X="48724" Y="41204" />
<node X="48096" Y="40759" />
<node X="47883" Y="40159" />
<node X="48123" Y="39481" />
<node X="48636" Y="39123" />
<node X="48885" Y="39121" />
<node X="49368" Y="39360" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3245" maxZ="-2745"> <!-- guldiocastle_town_peace1 -->
<node X="-11998" Y="123905" />
<node X="-12880" Y="126192" />
<node X="-13928" Y="126485" />
<node X="-14408" Y="126484" />
<node X="-15239" Y="126174" />
<node X="-16120" Y="125367" />
<node X="-16551" Y="124468" />
<node X="-16550" Y="123911" />
<node X="-16509" Y="123323" />
<node X="-14638" Y="122381" />
<node X="-12022" Y="122270" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3156" maxZ="-2656"> <!-- guldiocastle_town_peace2 -->
<node X="-14956" Y="121115" />
<node X="-12670" Y="121093" />
<node X="-12021" Y="121755" />
<node X="-12019" Y="123005" />
<node X="-15400" Y="123009" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3244" maxZ="-2744"> <!-- gludin_town_peace1 -->
<node X="-79283" Y="149148" />
<node X="-78525" Y="149851" />
<node X="-78549" Y="152429" />
<node X="-82513" Y="152442" />
<node X="-82502" Y="149146" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3244" maxZ="-2744"> <!-- gludin_town_peace2 -->
<node X="-84874" Y="149370" />
<node X="-81337" Y="149370" />
<node X="-81337" Y="152419" />
<node X="-84874" Y="152419" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3276" maxZ="-2776"> <!-- gludin_town_peace3 -->
<node X="-84884" Y="152261" />
<node X="-78803" Y="152218" />
<node X="-78803" Y="156106" />
<node X="-84884" Y="156113" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3340" maxZ="-2840"> <!-- gludin_town_peace4 -->
<node X="-80698" Y="155950" />
<node X="-79097" Y="154122" />
<node X="-77125" Y="155447" />
<node X="-77948" Y="156503" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3456" maxZ="-2956"> <!-- gludin_town_peace5 -->
<node X="-78474" Y="156088" />
<node X="-77131" Y="155440" />
<node X="-77831" Y="156543" />
<node X="-78543" Y="156393" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3157" maxZ="-2157"> <!-- dion_town_peace1 -->
<node X="14290" Y="141403" />
<node X="15261" Y="141328" />
<node X="17478" Y="142633" />
<node X="17461" Y="143349" />
<node X="16751" Y="144384" />
<node X="15769" Y="144681" />
<node X="14470" Y="143863" />
<node X="14010" Y="143120" />
<node X="13978" Y="141885" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2802" maxZ="-2302"> <!-- dion_town_peace2 -->
<node X="15653" Y="141687" />
<node X="17220" Y="141541" />
<node X="17361" Y="142876" />
<node X="15789" Y="143037" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2858" maxZ="-2358"> <!-- dion_town_peace3 -->
<node X="17006" Y="141806" />
<node X="17410" Y="141768" />
<node X="17503" Y="142644" />
<node X="17107" Y="142709" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3267" maxZ="-2567"> <!-- dion_town_peace4 -->
<node X="15469" Y="143498" />
<node X="17126" Y="142976" />
<node X="19489" Y="144901" />
<node X="17833" Y="147643" />
<node X="16125" Y="146869" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3230" maxZ="-2530"> <!-- dion_town_peace5 -->
<node X="20387" Y="142469" />
<node X="21407" Y="143663" />
<node X="21402" Y="146315" />
<node X="16663" Y="146406" />
<node X="16461" Y="143892" />
<node X="18915" Y="142444" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3957" maxZ="-3357"> <!-- floran_town_peace1 -->
<node X="18134" Y="169527" />
<node X="18602" Y="169760" />
<node X="18641" Y="169827" />
<node X="18429" Y="170529" />
<node X="17386" Y="170916" />
<node X="16777" Y="170706" />
<node X="16555" Y="170564" />
<node X="16530" Y="170497" />
<node X="16732" Y="169864" />
<node X="17253" Y="169433" />
<node X="17396" Y="169394" />
<node X="17768" Y="169440" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3967" maxZ="-3367"> <!-- floran_town_peace2 -->
<node X="17082" Y="169410" />
<node X="17464" Y="169397" />
<node X="17285" Y="169889" />
<node X="16773" Y="170007" />
<node X="16717" Y="169945" />
<node X="16823" Y="169466" />
<node X="16882" Y="169431" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3956" maxZ="-3356"> <!-- floran_town_peace3 -->
<node X="18487" Y="170499" />
<node X="18390" Y="170915" />
<node X="18343" Y="170933" />
<node X="17768" Y="170965" />
<node X="17223" Y="170891" />
<node X="16878" Y="170752" />
<node X="18430" Y="170079" />
<node X="18543" Y="170093" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3464" maxZ="-3264"> <!-- giran_town_peace12 -->
<node X="85048" Y="145756" />
<node X="86104" Y="145752" />
<node X="86100" Y="145888" />
<node X="85060" Y="145856" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3654" maxZ="-2654"> <!-- giran_town_peace1 -->
<node X="77164" Y="147420" />
<node X="79291" Y="147417" />
<node X="79278" Y="149808" />
<node X="77155" Y="149824" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3598" maxZ="-1598"> <!-- giran_town_peace2 -->
<node X="79193" Y="144776" />
<node X="85019" Y="144748" />
<node X="85148" Y="149864" />
<node X="79198" Y="149858" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3602" maxZ="-2402"> <!-- giran_town_peace3 -->
<node X="79180" Y="149311" />
<node X="83508" Y="149374" />
<node X="83510" Y="151272" />
<node X="79197" Y="151297" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3636" maxZ="-3036"> <!-- giran_town_peace4 -->
<node X="85619" Y="150120" />
<node X="86004" Y="150125" />
<node X="86005" Y="152300" />
<node X="85617" Y="152305" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3799" maxZ="-2399"> <!-- giran_town_peace5 -->
<node X="84848" Y="152234" />
<node X="86779" Y="152240" />
<node X="86781" Y="153610" />
<node X="84844" Y="153610" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3872" maxZ="-1872"> <!-- giran_town_peace6 -->
<node X="84922" Y="146919" />
<node X="88437" Y="146909" />
<node X="88445" Y="150047" />
<node X="85090" Y="150032" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3810" maxZ="-2110"> <!-- giran_town_peace7 -->
<node X="80304" Y="143626" />
<node X="85033" Y="143631" />
<node X="85029" Y="144930" />
<node X="80298" Y="144914" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3538" maxZ="-3338"> <!-- giran_town_peace8 -->
<node X="79190" Y="150958" />
<node X="82705" Y="150962" />
<node X="82717" Y="152824" />
<node X="79202" Y="152821" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3496" maxZ="-2996"> <!-- giran_town_peace9 -->
<node X="84838" Y="145789" />
<node X="86101" Y="145774" />
<node X="86105" Y="146911" />
<node X="84842" Y="146925" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3599" maxZ="-2999"> <!-- giran_town_peace10 -->
<node X="85088" Y="149126" />
<node X="86468" Y="149142" />
<node X="86488" Y="150240" />
<node X="85089" Y="150240" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3410" maxZ="-3210"> <!-- giran_town_peace11 -->
<node X="83111" Y="143502" />
<node X="85038" Y="143499" />
<node X="85038" Y="143856" />
<node X="83111" Y="143859" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1483" maxZ="516"> <!-- orc_start_peace -->
<node X="-58952" Y="-115543" />
<node X="-52769" Y="-115553" />
<node X="-52758" Y="-111736" />
<node X="-58952" Y="-111749" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-397" maxZ="603"> <!-- orc_town_peace1 -->
<node X="-42044" Y="-113585" />
<node X="-42533" Y="-111862" />
<node X="-43811" Y="-110599" />
<node X="-45614" Y="-110071" />
<node X="-47375" Y="-110007" />
<node X="-47397" Y="-117215" />
<node X="-46661" Y="-117220" />
<node X="-45633" Y="-117094" />
<node X="-43791" Y="-116569" />
<node X="-42530" Y="-115322" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-460" maxZ="540"> <!-- orc_town_peace2 -->
<node X="-50211" Y="-116941" />
<node X="-47413" Y="-117301" />
<node X="-47358" Y="-109913" />
<node X="-49161" Y="-109305" />
<node X="-51245" Y="-109819" />
<node X="-53401" Y="-112501" />
<node X="-53788" Y="-113966" />
<node X="-52931" Y="-115293" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-652" maxZ="348"> <!-- dwarf_start -->
<node X="110063" Y="-175794" />
<node X="110565" Y="-173944" />
<node X="110518" Y="-173426" />
<node X="109153" Y="-171575" />
<node X="106345" Y="-171905" />
<node X="104853" Y="-174391" />
<node X="105481" Y="-176144" />
<node X="106031" Y="-177035" />
<node X="107660" Y="-177623" />
<node X="109208" Y="-177140" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1600" maxZ="-400"> <!-- dwarf_town_peace1 -->
<node X="117520" Y="-181718" />
<node X="117423" Y="-180017" />
<node X="115371" Y="-176774" />
<node X="114885" Y="-176815" />
<node X="114070" Y="-177180" />
<node X="113883" Y="-179469" />
<node X="114580" Y="-181875" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1685" maxZ="-685"> <!-- dwarf_town_peace2 -->
<node X="117630" Y="-182925" />
<node X="115159" Y="-182811" />
<node X="115477" Y="-183673" />
<node X="115600" Y="-183891" />
<node X="115740" Y="-184086" />
<node X="115948" Y="-184206" />
<node X="116257" Y="-184251" />
<node X="116710" Y="-184253" />
<node X="117023" Y="-184164" />
<node X="117204" Y="-184034" />
<node X="117335" Y="-183812" />
<node X="117503" Y="-183386" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1724" maxZ="-724"> <!-- dwarf_town_peace3 -->
<node X="114641" Y="-183866" />
<node X="117517" Y="-183140" />
<node X="117778" Y="-182649" />
<node X="117775" Y="-182246" />
<node X="117733" Y="-182086" />
<node X="117432" Y="-181576" />
<node X="114638" Y="-181551" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1000" maxZ="-400"> <!-- dwarf_town_peace4 -->
<node X="116406" Y="-176891" />
<node X="115964" Y="-176809" />
<node X="115535" Y="-176773" />
<node X="115142" Y="-176788" />
<node X="115867" Y="-178003" />
<node X="117355" Y="-179595" />
<node X="117300" Y="-178525" />
<node X="117172" Y="-177847" />
<node X="116798" Y="-177111" />
<node X="116643" Y="-176968" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1257" maxZ="-657"> <!-- dwarf_town_peace5 -->
<node X="116649" Y="-179760" />
<node X="117429" Y="-180911" />
<node X="117493" Y="-180052" />
<node X="117467" Y="-179575" />
<node X="116977" Y="-178211" />
<node X="116142" Y="-178429" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1822" maxZ="-1022"> <!-- oren_town_peace1 -->
<node X="78900" Y="52076" />
<node X="84126" Y="52049" />
<node X="84099" Y="57117" />
<node X="78872" Y="57144" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4652" maxZ="347"> <!-- ivory_tower_peace1 -->
<node X="86094" Y="16382" />
<node X="85888" Y="16744" />
<node X="85510" Y="16968" />
<node X="85139" Y="16966" />
<node X="84767" Y="16736" />
<node X="84576" Y="16394" />
<node X="84580" Y="15977" />
<node X="84783" Y="15631" />
<node X="85143" Y="15417" />
<node X="85499" Y="15403" />
<node X="85886" Y="15642" />
<node X="86049" Y="15990" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2749" maxZ="-1249"> <!-- hunter_town_peace1 -->
<node X="120837" Y="78996" />
<node X="118917" Y="80603" />
<node X="116981" Y="80412" />
<node X="115383" Y="79832" />
<node X="114029" Y="76721" />
<node X="114670" Y="74772" />
<node X="115464" Y="74131" />
<node X="118488" Y="74094" />
<node X="120717" Y="74271" />
<node X="121548" Y="76702" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2512" maxZ="-1012"> <!-- hunter_town_peace2 -->
<node X="117932" Y="74072" />
<node X="118560" Y="74104" />
<node X="118308" Y="74324" />
<node X="118108" Y="74324" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3434" maxZ="-2934"> <!-- hadin_peace1 -->
<node X="106216" Y="112467" />
<node X="106779" Y="113174" />
<node X="106759" Y="114084" />
<node X="106174" Y="115069" />
<node X="105181" Y="115072" />
<node X="104608" Y="113714" />
<node X="104782" Y="112755" />
<node X="105248" Y="112466" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2532" maxZ="-1032"> <!-- aden_town_peace1 -->
<node X="150222" Y="20224" />
<node X="151214" Y="21124" />
<node X="151291" Y="29988" />
<node X="150278" Y="30956" />
<node X="144297" Y="30912" />
<node X="143434" Y="30078" />
<node X="143415" Y="21117" />
<node X="144415" Y="20200" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2517" maxZ="-1017"> <!-- aden_town_peace2 -->
<node X="145783" Y="30543" />
<node X="149035" Y="30552" />
<node X="147953" Y="31586" />
<node X="147032" Y="31586" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2215" maxZ="-715"> <!-- aden_town_peace3 -->
<node X="151101" Y="24718" />
<node X="151485" Y="24715" />
<node X="151489" Y="25546" />
<node X="151098" Y="25549" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2101" maxZ="-601"> <!-- aden_town_peace4 -->
<node X="147162" Y="19914" />
<node X="147775" Y="19914" />
<node X="147834" Y="20395" />
<node X="147099" Y="20394" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2456" maxZ="-956"> <!-- aden_town_peace5 -->
<node X="143117" Y="25953" />
<node X="143728" Y="25712" />
<node X="143728" Y="26882" />
<node X="143118" Y="26712" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3684" maxZ="-3484"> <!-- speaking_port_peace1 -->
<node X="-96610" Y="258814" />
<node X="-96389" Y="258748" />
<node X="-96369" Y="258787" />
<node X="-96374" Y="259051" />
<node X="-96640" Y="259059" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3676" maxZ="-3476"> <!-- speaking_port_peace2 -->
<node X="-96561" Y="258759" />
<node X="-96411" Y="258764" />
<node X="-96553" Y="259066" />
<node X="-97256" Y="259068" />
<node X="-97245" Y="258787" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3672" maxZ="-3472"> <!-- speaking_port_peace3 -->
<node X="-96969" Y="259036" />
<node X="-96649" Y="259036" />
<node X="-96648" Y="261414" />
<node X="-96968" Y="261414" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3672" maxZ="-3472"> <!-- speaking_port_peace4 -->
<node X="-97161" Y="259866" />
<node X="-96961" Y="259866" />
<node X="-96961" Y="260203" />
<node X="-97161" Y="260203" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3679" maxZ="-3479"> <!-- speaking_port_peace5 -->
<node X="-96750" Y="259679" />
<node X="-96326" Y="259679" />
<node X="-96326" Y="260400" />
<node X="-96750" Y="260400" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3685" maxZ="-3485"> <!-- speaking_port_peace6 -->
<node X="-97290" Y="261068" />
<node X="-95888" Y="261068" />
<node X="-95888" Y="261419" />
<node X="-97290" Y="261418" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3681" maxZ="-3481"> <!-- speaking_port_peace7 -->
<node X="-97476" Y="260763" />
<node X="-97167" Y="260763" />
<node X="-97167" Y="261419" />
<node X="-97476" Y="261419" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3670" maxZ="-3470"> <!-- speaking_port_peace8 -->
<node X="-97237" Y="259333" />
<node X="-96923" Y="259333" />
<node X="-96923" Y="259637" />
<node X="-97237" Y="259637" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3708" maxZ="-3508"> <!-- gludin_port1 -->
<node X="-92600" Y="148457" />
<node X="-90416" Y="148372" />
<node X="-90412" Y="151666" />
<node X="-92508" Y="151678" />
<node X="-93497" Y="149244" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3694" maxZ="-3494"> <!-- gludin_port2 -->
<node X="-94294" Y="148251" />
<node X="-92763" Y="148869" />
<node X="-92437" Y="152317" />
<node X="-93461" Y="153244" />
<node X="-95444" Y="151462" />
<node X="-95446" Y="149881" />
<node X="-94588" Y="148248" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3625" maxZ="-3411"> <!-- giran_port1 -->
<node X="47189" Y="185982" />
<node X="49284" Y="183651" />
<node X="52767" Y="186787" />
<node X="49719" Y="190044" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3625" maxZ="-3311"> <!-- giran_port2 -->
<node X="45288" Y="186705" />
<node X="47947" Y="185316" />
<node X="50535" Y="189487" />
<node X="47639" Y="191052" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3606" maxZ="-3106"> <!-- giran_port3 -->
<node X="43935" Y="187891" />
<node X="45949" Y="186815" />
<node X="46215" Y="187346" />
<node X="44226" Y="188420" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3625" maxZ="-3314"> <!-- giran_port4 -->
<node X="41861" Y="188551" />
<node X="44221" Y="187269" />
<node X="46275" Y="191156" />
<node X="44031" Y="192413" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3652" maxZ="-3452"> <!-- dion_monster_race1 -->
<node X="11714" Y="181568" />
<node X="14406" Y="181571" />
<node X="14405" Y="182673" />
<node X="11714" Y="182673" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3610" maxZ="-3410"> <!-- dion_monster_race2 -->
<node X="13309" Y="181324" />
<node X="14061" Y="181324" />
<node X="14061" Y="181610" />
<node X="13309" Y="181610" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3608" maxZ="-3408"> <!-- dion_monster_race3 -->
<node X="13559" Y="182641" />
<node X="14073" Y="182640" />
<node X="14073" Y="182919" />
<node X="13560" Y="182918" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3612" maxZ="-3412"> <!-- dion_monster_race4 -->
<node X="12196" Y="182662" />
<node X="12447" Y="182663" />
<node X="12447" Y="182774" />
<node X="12197" Y="182774" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3624" maxZ="-3424"> <!-- dion_monster_race5 -->
<node X="11706" Y="182774" />
<node X="13194" Y="182774" />
<node X="13194" Y="183006" />
<node X="11701" Y="183017" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3616" maxZ="-3416"> <!-- dion_monster_race6 -->
<node X="11701" Y="184017" />
<node X="13188" Y="184011" />
<node X="13194" Y="184265" />
<node X="11701" Y="184260" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3660" maxZ="-3460"> <!-- dion_monster_race7 -->
<node X="11699" Y="182993" />
<node X="11949" Y="182990" />
<node X="11944" Y="184036" />
<node X="11697" Y="184032" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3636" maxZ="-3436"> <!-- dion_monster_race8 -->
<node X="12945" Y="182992" />
<node X="13193" Y="182987" />
<node X="13193" Y="184019" />
<node X="12945" Y="184029" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4287" maxZ="-3287"> <!-- heiness_peace1 -->
<node X="106085" Y="216119" />
<node X="116559" Y="216118" />
<node X="116533" Y="229030" />
<node X="106085" Y="229015" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4128" maxZ="-3128"> <!-- heiness_peace2 -->
<node X="103796" Y="217964" />
<node X="106602" Y="217963" />
<node X="106602" Y="218361" />
<node X="103796" Y="218363" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4096" maxZ="-3096"> <!-- heiness_peace3 -->
<node X="115950" Y="219084" />
<node X="118877" Y="219084" />
<node X="118879" Y="219496" />
<node X="115952" Y="219498" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3000" maxZ="-771"> <!-- goddard_peace1 -->
<node X="146517" Y="-59854" />
<node X="148916" Y="-59847" />
<node X="151301" Y="-58338" />
<node X="152005" Y="-56872" />
<node X="152043" Y="-55010" />
<node X="150847" Y="-51615" />
<node X="145228" Y="-51601" />
<node X="143824" Y="-54220" />
<node X="143444" Y="-56732" />
<node X="144680" Y="-58725" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1516" maxZ="484"> <!-- rune_peace1 -->
<node X="39503" Y="-52761" />
<node X="42159" Y="-46969" />
<node X="44445" Y="-45865" />
<node X="46202" Y="-46919" />
<node X="47212" Y="-48809" />
<node X="47224" Y="-51046" />
<node X="45845" Y="-51986" />
<node X="43334" Y="-52810" />
<node X="39608" Y="-53505" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-1516" maxZ="484"> <!-- rune_peace1 -->
<node X="40071" Y="-52192" />
<node X="42159" Y="-46969" />
<node X="44445" Y="-45865" />
<node X="46202" Y="-46919" />
<node X="47212" Y="-48809" />
<node X="47224" Y="-51046" />
<node X="45845" Y="-51986" />
<node X="43334" Y="-52810" />
<node X="41192" Y="-53281" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-7660" maxZ="7340"> <!-- rune_peace2 -->
<node X="43099" Y="-38911" />
<node X="40028" Y="-35494" />
<node X="37429" Y="-35357" />
<node X="32846" Y="-38149" />
<node X="32804" Y="-50466" />
<node X="36348" Y="-52427" />
<node X="39429" Y="-52058" />
<node X="46334" Y="-46534" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3723" maxZ="-3223"> <!-- gludin_pvp_peace_1 -->
<node X="-88445" Y="141473" />
<node X="-87166" Y="141474" />
<node X="-87166" Y="141726" />
<node X="-88441" Y="141726" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3745" maxZ="-3245"> <!-- gludin_pvp_peace_2 -->
<node X="-88666" Y="141473" />
<node X="-88417" Y="141474" />
<node X="-88414" Y="142740" />
<node X="-88666" Y="142746" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3723" maxZ="-3223"> <!-- gludin_pvp_peace_3 -->
<node X="-88665" Y="142716" />
<node X="-87165" Y="142716" />
<node X="-87165" Y="142973" />
<node X="-88667" Y="142973" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3732" maxZ="-3232"> <!-- gludin_pvp_peace_4 -->
<node X="-87418" Y="141681" />
<node X="-87165" Y="141680" />
<node X="-87166" Y="142779" />
<node X="-87416" Y="142779" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3851" maxZ="-3351"> <!-- giran_pvp_peace1 -->
<node X="73490" Y="142231" />
<node X="73743" Y="142232" />
<node X="73741" Y="143316" />
<node X="73494" Y="143312" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3855" maxZ="-3355"> <!-- giran_pvp_peace2 -->
<node X="72462" Y="142013" />
<node X="73744" Y="142013" />
<node X="73743" Y="142268" />
<node X="72461" Y="142268" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3853" maxZ="-3353"> <!-- giran_pvp_peace3 -->
<node X="72244" Y="142015" />
<node X="72497" Y="142012" />
<node X="72497" Y="143285" />
<node X="72242" Y="143280" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3856" maxZ="-3356"> <!-- giran_pvp_peace4 -->
<node X="72242" Y="143255" />
<node X="73743" Y="143257" />
<node X="73743" Y="143513" />
<node X="72243" Y="143514" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3468" maxZ="-3268"> <!-- colosseum_peace1 -->
<node X="147779" Y="46196" />
<node X="148045" Y="46481" />
<node X="148047" Y="46958" />
<node X="147772" Y="47256" />
<node X="147078" Y="47258" />
<node X="147095" Y="46203" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-3472" maxZ="-3272"> <!-- colosseum_peace2 -->
<node X="151221" Y="46184" />
<node X="151928" Y="46183" />
<node X="151925" Y="47248" />
<node X="151222" Y="47262" />
<node X="150952" Y="46956" />
<node X="150954" Y="46486" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2992" maxZ="-2792"> <!-- gm_prison -->
<node X="-116390" Y="-251581" />
<node X="-112756" Y="-251617" />
<node X="-112720" Y="-248199" />
<node X="-116354" Y="-248217" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4792" maxZ="208"> <!-- primeval_peace2 -->
<node X="4850" Y="-4736" />
<node X="7294" Y="-4712" />
<node X="8529" Y="-820" />
<node X="3615" Y="-737" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-6964" maxZ="-6064"> <!-- space_of_dimension_peace1 -->
<node X="-115441" Y="-182134" />
<node X="-114106" Y="-182134" />
<node X="-114106" Y="-178021" />
<node X="-115476" Y="-178021" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2444" maxZ="3556"> <!-- schuttgart_peace1 -->
<node X="91064" Y="-143193" />
<node X="90200" Y="-146685" />
<node X="84580" Y="-146745" />
<node X="83600" Y="-143273" />
<node X="84048" Y="-141429" />
<node X="84922" Y="-140225" />
<node X="86528" Y="-139365" />
<node X="88292" Y="-139397" />
<node X="89712" Y="-140205" />
<node X="90660" Y="-141409" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-2472" maxZ="2528"> <!-- rainbow_spring_peace1 -->
<node X="148724" Y="-128356" />
<node X="154172" Y="-130160" />
<node X="158636" Y="-126416" />
<node X="155456" Y="-123772" />
<node X="152140" Y="-124528" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-424" maxZ="376"> <!-- gludio_platform_peace1 -->
<node X="-151634" Y="252804" />
<node X="-147155" Y="252804" />
<node X="-147155" Y="257492" />
<node X="-151634" Y="257492" />
</zone>
<!-- Oracle of Dusk (Peace Zones) -->
<zone type="PeaceZone" shape="NPoly" minZ="-5208" maxZ="-5008"> <!-- ssq_peace_1720_01 -->
<!-- stat name="allowStore" val="false" / -->
<node X="-78118" Y="86296" />
<node X="-75860" Y="86294" />
<node X="-75853" Y="87965" />
<node X="-78156" Y="87967" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-5200" maxZ="-5000"> <!-- ssq_peace_1720_02 -->
<!-- stat name="allowStore" val="false" / -->
<node X="-81169" Y="85693" />
<node X="-78118" Y="85690" />
<node X="-78134" Y="87364" />
<node X="-81187" Y="87364" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-5200" maxZ="-5000"> <!-- ssq_peace_1720_03 -->
<!-- stat name="allowStore" val="false" / -->
<node X="-81549" Y="86361" />
<node X="-80995" Y="86367" />
<node X="-80995" Y="86688" />
<node X="-81549" Y="86688" />
</zone>
<!-- Oracle of Dawn (Peace Zones) -->
<zone type="PeaceZone" shape="NPoly" minZ="-4952" maxZ="-4752"> <!-- ssq_peace_1721_01 -->
<!-- stat name="allowStore" val="false" / -->
<node X="-77077" Y="111140" />
<node X="-74838" Y="111140" />
<node X="-74842" Y="112806" />
<node X="-77104" Y="112779" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4956" maxZ="-4756"> <!-- ssq_peace_1721_02 -->
<!-- stat name="allowStore" val="false" / -->
<node X="-80075" Y="110530" />
<node X="-77066" Y="110552" />
<node X="-77092" Y="112188" />
<node X="-80089" Y="112184" />
</zone>
<zone type="PeaceZone" shape="NPoly" minZ="-4944" maxZ="-4744"> <!-- ssq_peace_1721_03 -->
<!-- stat name="allowStore" val="false" / -->
<node X="-80536" Y="111192" />
<node X="-79984" Y="111196" />
<node X="-79984" Y="111517" />
<node X="-80532" Y="111517" />
</zone>
</list>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Custom zone for Q636 -->
<zone id="100000" type="ScriptZone" shape="Cuboid" minZ="-10735" maxZ="-10720"> <!-- Pagans mark -->
<node X="-16100" Y="-36800" />
<node X="-16600" Y="-37100" />
</zone>
<!-- Custom zones for Q114 -->
<zone id="100001" type="ScriptZone" shape="Cuboid" minZ="-3300" maxZ="-3400"> <!-- archaic_laboratory_gate1 -->
<node X="89953" Y="-106250" />
<node X="90242" Y="-106143" />
</zone>
<zone id="100002" type="ScriptZone" shape="NPoly" minZ="-3300" maxZ="-3400"> <!-- archaic_laboratory_gate2 -->
<node X="91491" Y="-108277" />
<node X="91409" Y="-108192" />
<node X="91623" Y="-107981" />
<node X="91703" Y="-108064" />
</zone>
<zone id="100003" type="ScriptZone" shape="NPoly" minZ="-3300" maxZ="-3400"> <!-- archaic_laboratory_gate3 -->
<node X="88468" Y="-108063" />
<node X="88549" Y="-107983" />
<node X="88759" Y="-108195" />
<node X="88677" Y="-108275" />
</zone>
</list>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/zones.xsd">
<!-- Swamp Zones -->
<zone type="SwampZone" shape="NPoly" minZ="-3964" maxZ="-3364"> <!-- devil_slow_8 -->
<!-- stat name="initialDelay" val="1000" / -->
<stat name="move_bonus" val="-80" />
<node X="55250" Y="210873" />
<node X="55762" Y="211217" />
<node X="55934" Y="212274" />
<node X="55686" Y="212533" />
<node X="54639" Y="212740" />
<node X="54276" Y="212407" />
<node X="54160" Y="211696" />
<node X="54332" Y="211108" />
</zone>
<!-- Sea of Spores (Swamp Zone) -->
<zone type="SwampZone" shape="NPoly" minZ="-4468" maxZ="-4118"> <!-- spore_boss_swamp_zone -->
<node X="43084" Y="15944" />
<node X="45140" Y="15816" />
<node X="45748" Y="17200" />
<node X="44504" Y="18780" />
<node X="43284" Y="18952" />
<node X="42476" Y="18164" />
<node X="42480" Y="16448" />
</zone>
</list>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,6 @@
package org.l2jmobius.gameserver.datatables.xml;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
@@ -26,12 +25,11 @@ import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.l2jmobius.commons.util.IXmlReader;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.ArenaManager;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
@@ -55,29 +53,6 @@ public class MapRegionData implements IXmlReader
public static final Location FLORAN_VILLAGE_LOCATION = new Location(17817, 170079, -3530);
public static final Location JAIL_LOCATION = new Location(-114356, -249645, -2984);
private static final Location EXIT_MONSTER_RACE_LOCATION = new Location(12661, 181687, -3560);
private static final List<Location> KARMA_LOCATIONS = new ArrayList<>();
static
{
KARMA_LOCATIONS.add(new Location(-79077, 240355, -3440)); // Talking Island Village
KARMA_LOCATIONS.add(new Location(43503, 40398, -3450)); // Elven Village
KARMA_LOCATIONS.add(new Location(1675, 19581, -3110)); // Dark Elven Village
KARMA_LOCATIONS.add(new Location(-44413, -121762, -235)); // Orc Village
KARMA_LOCATIONS.add(new Location(12009, -187319, -3309)); // Dwarven Village
KARMA_LOCATIONS.add(new Location(-18872, 126216, -3280)); // Town of Gludio
KARMA_LOCATIONS.add(new Location(-85915, 150402, -3060)); // Gludin Village
KARMA_LOCATIONS.add(new Location(23652, 144823, -3330)); // Town of Dion
KARMA_LOCATIONS.add(new Location(79125, 154197, -3490)); // Town of Giran
KARMA_LOCATIONS.add(new Location(73840, 58193, -2730)); // Town of Oren
KARMA_LOCATIONS.add(new Location(44413, 22610, 235)); // Town of Aden
KARMA_LOCATIONS.add(new Location(114137, 72993, -2445)); // Hunters Village
KARMA_LOCATIONS.add(new Location(79125, 154197, -3490)); // Giran Harbor
KARMA_LOCATIONS.add(new Location(119536, 218558, -3495)); // Heine
KARMA_LOCATIONS.add(new Location(42931, -44733, -1326)); // Rune Township
KARMA_LOCATIONS.add(new Location(147419, -64980, -3457)); // Town of Goddard
KARMA_LOCATIONS.add(new Location(85184, -138560, -2256)); // Town of Shuttgart
KARMA_LOCATIONS.add(new Location(17817, 170079, -3530)); // Floran Village
KARMA_LOCATIONS.add(new Location(9927, -24138, -3723)); // Primeval Isle Wharf
}
private static final int[][] REGIONS = new int[19][21];
protected MapRegionData()
@@ -148,6 +123,124 @@ public class MapRegionData implements IXmlReader
return (posY >> 15) + 10;
}
public Location getTeleToLocation(Creature creature, TeleportWhereType teleportWhere)
{
// The character isn't a player, bypass all checks and retrieve a random spawn location on closest town.
if (!(creature instanceof PlayerInstance))
{
return getClosestTown(creature.getX(), creature.getY()).getSpawnLoc();
}
final PlayerInstance player = creature.getActingPlayer();
// If in Monster Derby Track
if (player.isInsideZone(ZoneId.MONSTER_TRACK))
{
return EXIT_MONSTER_RACE_LOCATION;
}
Castle castle = null;
Fort fort = null;
ClanHall clanhall = null;
if (player.getClan() != null)
{
// If teleport to clan hall
if (teleportWhere == TeleportWhereType.CLANHALL)
{
clanhall = ClanHallManager.getInstance().getClanHallByOwner(player.getClan());
if (clanhall != null)
{
final ClanHallZone zone = clanhall.getZone();
if (zone != null)
{
return zone.getSpawnLoc();
}
}
}
// If teleport to castle
if (teleportWhere == TeleportWhereType.CASTLE)
{
castle = CastleManager.getInstance().getCastleByOwner(player.getClan());
}
// If teleport to fort
if (teleportWhere == TeleportWhereType.FORTRESS)
{
fort = FortManager.getInstance().getFortByOwner(player.getClan());
}
// Check if player is on castle or fortress ground
if (castle == null)
{
castle = CastleManager.getInstance().getCastle(player);
}
if (fort == null)
{
fort = FortManager.getInstance().getFort(player);
}
if ((castle != null) && (castle.getCastleId() > 0))
{
// If Teleporting to castle or if is on caslte with siege and player's clan is defender
if ((teleportWhere == TeleportWhereType.CASTLE) || ((teleportWhere == TeleportWhereType.CASTLE) && castle.getSiege().isInProgress() && (castle.getSiege().getDefenderClan(player.getClan()) != null)))
{
return castle.getZone().getSpawnLoc();
}
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && castle.getSiege().isInProgress())
{
// Check if player's clan is attacker
final List<NpcInstance> flags = castle.getSiege().getFlag(player.getClan());
if ((flags != null) && !flags.isEmpty())
{
// Spawn to flag - Need more work to get player to the nearest flag
final NpcInstance flag = flags.get(0);
return new Location(flag.getX(), flag.getY(), flag.getZ());
}
}
}
else if ((fort != null) && (fort.getFortId() > 0))
{
// Teleporting to castle or fortress is on castle with siege and player's clan is defender
if ((teleportWhere == TeleportWhereType.FORTRESS) || ((teleportWhere == TeleportWhereType.FORTRESS) && fort.getSiege().isInProgress() && (fort.getSiege().getDefenderClan(player.getClan()) != null)))
{
return fort.getZone().getSpawnLoc();
}
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && fort.getSiege().isInProgress())
{
// Check if player's clan is attacker
final List<NpcInstance> flags = fort.getSiege().getFlag(player.getClan());
if ((flags != null) && !flags.isEmpty())
{
// Spawn to flag
final NpcInstance flag = flags.get(0);
return new Location(flag.getX(), flag.getY(), flag.getZ());
}
}
}
}
// Karma player lands out of city.
if (player.getKarma() > 0)
{
return getClosestTown(player).getChaoticSpawnLoc();
}
// Check if player is in arena.
final ArenaZone arena = ZoneData.getInstance().getZone(player, ArenaZone.class);
if (arena != null)
{
return arena.getSpawnLoc();
}
// Retrieve a random spawn location of the nearest town.
return getClosestTown(player).getSpawnLoc();
}
public int getAreaCastle(Creature creature)
{
switch (getClosestTownNumber(creature))
@@ -323,137 +416,261 @@ public class MapRegionData implements IXmlReader
}
}
public Location getTeleToLocation(Creature creature, TeleportWhereType teleportWhere)
/**
* A specific method, used ONLY by players. There's a Race condition.
* @param player : The player used to find race, x and y.
* @return the closest TownZone based on a X/Y location.
*/
private TownZone getClosestTown(PlayerInstance player)
{
if (creature instanceof PlayerInstance)
switch (getMapRegion(player.getX(), player.getY()))
{
final PlayerInstance player = creature.getActingPlayer();
// If in Monster Derby Track
if (player.isInsideZone(ZoneId.MONSTER_TRACK))
case 0: // TI
{
return EXIT_MONSTER_RACE_LOCATION;
return getTown(2);
}
case 1: // Elven
{
return getTown((player.getTemplate().getRace() == Race.DARK_ELF) ? 1 : 3);
}
case 2: // DE
{
return getTown((player.getTemplate().getRace() == Race.ELF) ? 3 : 1);
}
case 3: // Orc
{
return getTown(4);
}
case 4: // Dwarven
{
return getTown(6);
}
case 5: // Gludio
{
return getTown(7);
}
case 6: // Gludin
{
return getTown(5);
}
case 7: // Dion
{
return getTown(8);
}
case 8: // Giran
case 12: // Giran Harbor
{
return getTown(9);
}
case 9: // Oren
{
return getTown(10);
}
case 10: // Aden
{
return getTown(12);
}
case 11: // HV
{
return getTown(11);
}
case 13: // Heine
{
return getTown(15);
}
case 14: // Rune
{
return getTown(14);
}
case 15: // Goddard
{
return getTown(13);
}
case 16: // Schuttgart
{
return getTown(17);
}
case 17: // Floran
{
return getTown(16);
}
case 18: // Primeval Isle
{
return getTown(19);
}
}
return getTown(16); // Default to floran
}
Castle castle = null;
Fort fort = null;
ClanHall clanhall = null;
if (player.getClan() != null)
/**
* @param x : The current character's X location.
* @param y : The current character's Y location.
* @return the closest L2TownZone based on a X/Y location.
*/
private TownZone getClosestTown(int x, int y)
{
// If teleport to clan hall
if (teleportWhere == TeleportWhereType.CLANHALL)
switch (getMapRegion(x, y))
{
clanhall = ClanHallManager.getInstance().getClanHallByOwner(player.getClan());
if (clanhall != null)
case 0: // TI
{
final ClanHallZone zone = clanhall.getZone();
if (zone != null)
return getTown(2);
}
case 1: // Elven
{
return zone.getSpawn();
return getTown(3);
}
case 2: // DE
{
return getTown(1);
}
case 3: // Orc
{
return getTown(4);
}
case 4: // Dwarven
{
return getTown(6);
}
case 5: // Gludio
{
return getTown(7);
}
case 6: // Gludin
{
return getTown(5);
}
case 7: // Dion
{
return getTown(8);
}
case 8: // Giran
case 12: // Giran Harbor
{
return getTown(9);
}
case 9: // Oren
{
return getTown(10);
}
case 10: // Aden
{
return getTown(12);
}
case 11: // HV
{
return getTown(11);
}
case 13: // Heine
{
return getTown(15);
}
case 14: // Rune
{
return getTown(14);
}
case 15: // Goddard
{
return getTown(13);
}
case 16: // Schuttgart
{
return getTown(17);
}
case 17: // Floran
{
return getTown(16);
}
case 18: // Primeval Isle
{
return getTown(19);
}
}
return getTown(16); // Default to floran
}
// If teleport to castle
if (teleportWhere == TeleportWhereType.CASTLE)
/**
* @param x : The current character's X location.
* @param y : The current character's Y location.
* @return the closest region based on a X/Y location.
*/
public int getClosestLocation(int x, int y)
{
castle = CastleManager.getInstance().getCastleByOwner(player.getClan());
switch (getMapRegion(x, y))
{
case 0: // TI
{
return 1;
}
case 1: // Elven
{
return 4;
}
case 2: // DE
{
return 3;
}
case 3: // Orc
case 4: // Dwarven
case 16: // Schuttgart
{
return 9;
}
case 5: // Gludio
case 6: // Gludin
{
return 2;
}
case 7: // Dion
{
return 5;
}
case 8: // Giran
case 12: // Giran Harbor
{
return 6;
}
case 9: // Oren
{
return 10;
}
case 10: // Aden
{
return 13;
}
case 11: // HV
{
return 11;
}
case 13: // Heine
{
return 12;
}
case 14: // Rune
{
return 14;
}
case 15: // Goddard
{
return 15;
}
}
return 0;
}
// If teleport to fort
if (teleportWhere == TeleportWhereType.FORTRESS)
/**
* @param townId the townId to match.
* @return a TownZone based on the overall list of TownZone, matching the townId.
*/
public final TownZone getTown(int townId)
{
fort = FortManager.getInstance().getFortByOwner(player.getClan());
}
// Check if player is on castle or fortress ground
if (castle == null)
for (TownZone temp : ZoneData.getInstance().getAllZones(TownZone.class))
{
castle = CastleManager.getInstance().getCastle(player);
}
if (fort == null)
if (temp.getTownId() == townId)
{
fort = FortManager.getInstance().getFort(player);
}
if ((castle != null) && (castle.getCastleId() > 0))
{
// If Teleporting to castle or if is on caslte with siege and player's clan is defender
if ((teleportWhere == TeleportWhereType.CASTLE) || ((teleportWhere == TeleportWhereType.CASTLE) && castle.getSiege().isInProgress() && (castle.getSiege().getDefenderClan(player.getClan()) != null)))
{
return castle.getZone().getSpawn();
}
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && castle.getSiege().isInProgress())
{
// Check if player's clan is attacker
final List<NpcInstance> flags = castle.getSiege().getFlag(player.getClan());
if ((flags != null) && !flags.isEmpty())
{
// Spawn to flag - Need more work to get player to the nearest flag
final NpcInstance flag = flags.get(0);
return new Location(flag.getX(), flag.getY(), flag.getZ());
return temp;
}
}
}
else if ((fort != null) && (fort.getFortId() > 0))
{
// Teleporting to castle or fortress is on castle with siege and player's clan is defender
if ((teleportWhere == TeleportWhereType.FORTRESS) || ((teleportWhere == TeleportWhereType.FORTRESS) && fort.getSiege().isInProgress() && (fort.getSiege().getDefenderClan(player.getClan()) != null)))
{
return fort.getZone().getSpawn();
}
if ((teleportWhere == TeleportWhereType.SIEGEFLAG) && fort.getSiege().isInProgress())
{
// Check if player's clan is attacker
final List<NpcInstance> flags = fort.getSiege().getFlag(player.getClan());
if ((flags != null) && !flags.isEmpty())
{
// Spawn to flag
final NpcInstance flag = flags.get(0);
return new Location(flag.getX(), flag.getY(), flag.getZ());
}
}
}
}
// Teleport red pk 5+ to Floran Village
if ((player.getPkKills() > 5) && (player.getKarma() > 1))
{
return FLORAN_VILLAGE_LOCATION;
}
// Karma player land out of city
if (player.getKarma() > 1)
{
final int closest = getMapRegion(creature.getX(), creature.getY());
if ((closest >= 0) && (closest < KARMA_LOCATIONS.size()))
{
return KARMA_LOCATIONS.get(closest);
}
return FLORAN_VILLAGE_LOCATION;
}
// Checking if in arena
final ArenaZone arena = ArenaManager.getInstance().getArena(player);
if (arena != null)
{
return arena.getSpawnLoc();
}
}
// Get the nearest town
TownZone localZone = null;
if ((creature != null) && ((localZone = TownManager.getInstance().getClosestTown(creature)) != null))
{
return localZone.getSpawnLoc();
}
localZone = TownManager.getInstance().getTown(9); // Giran
return localZone.getSpawnLoc();
return null;
}
public static MapRegionData getInstance()

View File

@@ -17,11 +17,13 @@
package org.l2jmobius.gameserver.datatables.xml;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -30,15 +32,15 @@ import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.instancemanager.ArenaManager;
import org.l2jmobius.gameserver.instancemanager.FishingZoneManager;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.OlympiadStadiaManager;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.WorldRegion;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.zone.SpawnZone;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.form.ZoneCuboid;
import org.l2jmobius.gameserver.model.zone.form.ZoneCylinder;
@@ -49,80 +51,163 @@ import org.l2jmobius.gameserver.model.zone.type.BossZone;
import org.l2jmobius.gameserver.model.zone.type.CastleTeleportZone;
import org.l2jmobius.gameserver.model.zone.type.CastleZone;
import org.l2jmobius.gameserver.model.zone.type.ClanHallZone;
import org.l2jmobius.gameserver.model.zone.type.CustomZone;
import org.l2jmobius.gameserver.model.zone.type.DamageZone;
import org.l2jmobius.gameserver.model.zone.type.DerbyTrackZone;
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
import org.l2jmobius.gameserver.model.zone.type.FishingZone;
import org.l2jmobius.gameserver.model.zone.type.FortZone;
import org.l2jmobius.gameserver.model.zone.type.HqZone;
import org.l2jmobius.gameserver.model.zone.type.JailZone;
import org.l2jmobius.gameserver.model.zone.type.MotherTreeZone;
import org.l2jmobius.gameserver.model.zone.type.NoHqZone;
import org.l2jmobius.gameserver.model.zone.type.NoLandingZone;
import org.l2jmobius.gameserver.model.zone.type.NoRestartZone;
import org.l2jmobius.gameserver.model.zone.type.NoStoreZone;
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
import org.l2jmobius.gameserver.model.zone.type.OlympiadStadiumZone;
import org.l2jmobius.gameserver.model.zone.type.PeaceZone;
import org.l2jmobius.gameserver.model.zone.type.PoisonZone;
import org.l2jmobius.gameserver.model.zone.type.ScriptZone;
import org.l2jmobius.gameserver.model.zone.type.SwampZone;
import org.l2jmobius.gameserver.model.zone.type.TownZone;
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
/**
* @author durgus
*/
public class ZoneData
{
private static final Logger LOGGER = Logger.getLogger(ZoneData.class.getName());
public ZoneData()
private final Map<Class<? extends ZoneType>, Map<Integer, ? extends ZoneType>> _classZones = new HashMap<>();
private final Map<Integer, ItemInstance> _debugItems = new ConcurrentHashMap<>();
private int _lastDynamicId = 300000;
protected ZoneData()
{
LOGGER.info("Loading zones...");
LOGGER.info(getClass().getSimpleName() + ": Loading zones...");
load();
}
public void load()
public void reload()
{
int zoneCount = 0;
// remove zones from world
int count = 0;
for (WorldRegion[] worldRegion : World.getInstance().getAllWorldRegions())
{
for (WorldRegion region : worldRegion)
{
for (ZoneType zone : region.getZones())
{
region.removeZone(zone);
count++;
}
}
}
LOGGER.info(getClass().getSimpleName() + ": Removed zones in " + count + " regions.");
// clear
_classZones.clear();
clearDebugItems();
// load all zones
load();
// revalidate objects in zones
for (WorldObject o : World.getInstance().getAllVisibleObjects())
{
if (o instanceof Creature)
{
((Creature) o).revalidateZone(true);
}
}
}
private final void load()
{
// Get the world regions
final WorldRegion[][] worldRegions = World.getInstance().getAllWorldRegions();
boolean done = false;
WorldRegion[][] worldRegions = World.getInstance().getAllWorldRegions();
// Load the zone xml
try (Connection con = DatabaseFactory.getConnection())
try
{
final File mainDir = new File("data/zones");
if (!mainDir.isDirectory())
{
LOGGER.warning(getClass().getSimpleName() + ": Main directory " + mainDir.getAbsolutePath() + " hasn't been found.");
return;
}
for (final File file : mainDir.listFiles())
{
if (file.isFile() && file.getName().endsWith(".xml"))
{
loadFileZone(file, worldRegions);
}
}
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Error while loading zones.", e);
return;
}
// get size
int size = 0;
for (Map<Integer, ? extends ZoneType> map : _classZones.values())
{
size += map.size();
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _classZones.size() + " zones classes and total " + size + " zones.");
}
private void loadFileZone(final File f, WorldRegion[][] worldRegions) throws Exception
{
Document doc = null;
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);
final File file = new File(Config.DATAPACK_ROOT + "/data/zones/zone.xml");
if (file.exists())
try
{
final Document doc = factory.newDocumentBuilder().parse(file);
doc = factory.newDocumentBuilder().parse(f);
}
catch (Exception e)
{
LOGGER.warning("Could not parse zone file: " + e);
return;
}
int effectZoneId = 150000; // FIXME: Temporally workaround to avoid zone.xml modification
for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
{
if ("list".equalsIgnoreCase(n.getNodeName()))
{
NamedNodeMap attrs = n.getAttributes();
Node attribute = attrs.getNamedItem("enabled");
if ((attribute != null) && !Boolean.parseBoolean(attribute.getNodeValue()))
{
continue;
}
for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
if ("zone".equalsIgnoreCase(d.getNodeName()))
{
NamedNodeMap attrs = d.getAttributes();
final NamedNodeMap nnmd = d.getAttributes();
int zoneId = -1;
if (attrs.getNamedItem("id") != null)
// Generate dynamically zone's ID.
int zoneId = _lastDynamicId++;
// Dynamic id is replaced by handwritten id if existing.
attribute = nnmd.getNamedItem("id");
if (attribute != null)
{
zoneId = Integer.parseInt(attrs.getNamedItem("id").getNodeValue());
zoneId = Integer.parseInt(attribute.getNodeValue());
}
final int minZ = Integer.parseInt(attrs.getNamedItem("minZ").getNodeValue());
final int maxZ = Integer.parseInt(attrs.getNamedItem("maxZ").getNodeValue());
final String zoneType = attrs.getNamedItem("type").getNodeValue();
final String zoneShape = attrs.getNamedItem("shape").getNodeValue();
final String zoneType = nnmd.getNamedItem("type").getNodeValue();
final String zoneShape = nnmd.getNamedItem("shape").getNodeValue();
final int minZ = Integer.parseInt(nnmd.getNamedItem("minZ").getNodeValue());
final int maxZ = Integer.parseInt(nnmd.getNamedItem("maxZ").getNodeValue());
// Create the zone
ZoneType temp = null;
@@ -144,12 +229,12 @@ public class ZoneData
temp = new PeaceZone(zoneId);
break;
}
case "Town":
case "TownZone":
{
temp = new TownZone(zoneId);
break;
}
case "OlympiadStadium":
case "OlympiadStadiumZone":
{
temp = new OlympiadStadiumZone(zoneId);
break;
@@ -169,12 +254,12 @@ public class ZoneData
temp = new DamageZone(zoneId);
break;
}
case "Arena":
case "ArenaZone":
{
temp = new ArenaZone(zoneId);
break;
}
case "MotherTree":
case "MotherTreeZone":
{
temp = new MotherTreeZone(zoneId);
break;
@@ -189,11 +274,21 @@ public class ZoneData
temp = new NoLandingZone(zoneId);
break;
}
case "NoRestartZone":
{
temp = new NoRestartZone(zoneId);
break;
}
case "NoStoreZone":
{
temp = new NoStoreZone(zoneId);
break;
}
case "NoSummonFriendZone":
{
temp = new NoSummonFriendZone(zoneId);
break;
}
case "JailZone":
{
temp = new JailZone(zoneId);
@@ -209,29 +304,18 @@ public class ZoneData
temp = new WaterZone(zoneId);
break;
}
case "NoHqZone":
case "HqZone":
{
temp = new NoHqZone(zoneId);
temp = new HqZone(zoneId);
break;
}
case "BossZone":
{
int bossId = -1;
try
{
bossId = Integer.parseInt(attrs.getNamedItem("bossId").getNodeValue());
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
temp = new BossZone(zoneId, bossId);
temp = new BossZone(zoneId, Integer.parseInt(nnmd.getNamedItem("bossId").getNodeValue()));
break;
}
case "EffectZone":
{
zoneId = effectZoneId;
effectZoneId++;
temp = new EffectZone(zoneId);
break;
}
@@ -240,16 +324,16 @@ public class ZoneData
temp = new PoisonZone(zoneId);
break;
}
case "ScriptZone":
{
temp = new ScriptZone(zoneId);
break;
}
case "CastleTeleportZone":
{
temp = new CastleTeleportZone(zoneId);
break;
}
case "CustomZone":
{
temp = new CustomZone(zoneId);
break;
}
case "SwampZone":
{
temp = new SwampZone(zoneId);
@@ -264,134 +348,34 @@ public class ZoneData
continue;
}
// get the zone shape from file if any
int[][] coords = null;
int[] point;
final List<int[]> rs = new ArrayList<>();
// Get the zone shape from file if any
try
{
List<int[]> rs = new ArrayList<>();
// loading from XML first
for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
{
if ("node".equalsIgnoreCase(cd.getNodeName()))
{
attrs = cd.getAttributes();
point = new int[2];
int[] point = new int[2];
point[0] = Integer.parseInt(attrs.getNamedItem("X").getNodeValue());
point[1] = Integer.parseInt(attrs.getNamedItem("Y").getNodeValue());
rs.add(point);
}
}
coords = rs.toArray(new int[rs.size()][]);
int[][] coords = rs.toArray(new int[rs.size()][]);
if ((coords == null) || (coords.length == 0)) // check on database
{
// Get the zone shape from sql or from file if not defined into sql
try
{
PreparedStatement statement = null;
// Set the correct query
statement = con.prepareStatement("SELECT x,y FROM zone_vertices WHERE id=? ORDER BY 'order' ASC ");
statement.setInt(1, zoneId);
final ResultSet rset = statement.executeQuery();
// Create this zone. Parsing for cuboids is a bit different than for other polygons
// cuboids need exactly 2 points to be defined. Other polygons need at least 3 (one per vertex)
switch (zoneShape)
{
case "Cuboid":
{
final int[] x =
{
0,
0
};
final int[] y =
{
0,
0
};
boolean successfulLoad = true;
for (int i = 0; i < 2; i++)
{
if (rset.next())
{
x[i] = rset.getInt("x");
y[i] = rset.getInt("y");
}
else
{
LOGGER.warning("ZoneData: Missing cuboid vertex in sql data for zone: " + zoneId);
statement.close();
rset.close();
successfulLoad = false;
break;
}
}
if (successfulLoad)
{
temp.setZone(new ZoneCuboid(x[0], x[1], y[0], y[1], minZ, maxZ));
}
else
if ((coords == null) || (coords.length == 0))
{
LOGGER.warning(getClass().getSimpleName() + ": missing data for zone: " + zoneId + " on file: " + f.getName());
continue;
}
break;
}
case "NPoly":
{
final List<Integer> flX = new ArrayList<>();
final List<Integer> flY = new ArrayList<>();
// Load the rest
while (rset.next())
{
flX.add(rset.getInt("x"));
flY.add(rset.getInt("y"));
}
// An nPoly needs to have at least 3 vertices
if ((flX.size() == flY.size()) && (flX.size() > 2))
{
// Create arrays
final int[] aX = new int[flX.size()];
final int[] aY = new int[flY.size()];
// This runs only at server startup so dont complain :>
for (int i = 0; i < flX.size(); i++)
{
aX[i] = flX.get(i);
aY[i] = flY.get(i);
}
// Create the zone
temp.setZone(new ZoneNPoly(aX, aY, minZ, maxZ));
}
else
{
LOGGER.warning("ZoneData: Bad sql data for zone: " + zoneId);
statement.close();
rset.close();
continue;
}
break;
}
default:
{
LOGGER.warning("ZoneData: Unknown shape: " + zoneShape);
statement.close();
rset.close();
continue;
}
}
statement.close();
rset.close();
}
catch (Exception e)
{
LOGGER.warning("ZoneData: Failed to load zone coordinates: " + e);
}
}
else // Create this zone. Parsing for cuboids is a bit different than for other polygons cuboids need exactly 2 points to be defined. Other polygons need at least 3 (one per vertex)
// Create this zone. Parsing for cuboids is a bit different than for other polygons cuboids need exactly 2 points to be defined.
// Other polygons need at least 3 (one per vertex)
if (zoneShape.equalsIgnoreCase("Cuboid"))
{
if (coords.length == 2)
@@ -400,7 +384,7 @@ public class ZoneData
}
else
{
LOGGER.warning("ZoneData: Missing cuboid vertex in sql data for zone: " + zoneId);
LOGGER.warning(getClass().getSimpleName() + ": Missing cuboid vertex in data for zone: " + zoneId + " in file: " + f.getName());
continue;
}
}
@@ -420,13 +404,13 @@ public class ZoneData
}
else
{
LOGGER.warning("ZoneData: Bad data for zone: " + zoneId);
LOGGER.warning(getClass().getSimpleName() + ": Bad data for zone: " + zoneId + " in file: " + f.getName());
continue;
}
}
else if (zoneShape.equalsIgnoreCase("Cylinder"))
{
// A cylinder zone requires a center point at x,y and a radius
// A Cylinder zone requires a center point at x,y and a radius
attrs = d.getAttributes();
final int zoneRad = Integer.parseInt(attrs.getNamedItem("rad").getNodeValue());
if ((coords.length == 1) && (zoneRad > 0))
@@ -435,61 +419,59 @@ public class ZoneData
}
else
{
LOGGER.warning("ZoneData: Bad data for zone: " + zoneId);
LOGGER.warning(getClass().getSimpleName() + ": Bad data for zone: " + zoneId + " in file: " + f.getName());
continue;
}
}
else
{
LOGGER.warning("ZoneData: Unknown shape: " + zoneShape);
LOGGER.warning(getClass().getSimpleName() + ": Unknown shape: " + zoneShape + " in file: " + f.getName());
continue;
}
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Failed to load zone " + zoneId + " coordinates: " + e.getMessage(), e);
}
// Check for aditional parameters
// Check for additional parameters
for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
{
if ("stat".equalsIgnoreCase(cd.getNodeName()))
{
attrs = cd.getAttributes();
final String name = attrs.getNamedItem("name").getNodeValue();
final String val = attrs.getNamedItem("val").getNodeValue();
String name = attrs.getNamedItem("name").getNodeValue();
String val = attrs.getNamedItem("val").getNodeValue();
temp.setParameter(name, val);
}
if ("spawn".equalsIgnoreCase(cd.getNodeName()))
else if ("spawn".equalsIgnoreCase(cd.getNodeName()) && (temp instanceof SpawnZone))
{
temp.setSpawnLocs(cd);
}
}
attrs = cd.getAttributes();
int spawnX = Integer.parseInt(attrs.getNamedItem("X").getNodeValue());
int spawnY = Integer.parseInt(attrs.getNamedItem("Y").getNodeValue());
int spawnZ = Integer.parseInt(attrs.getNamedItem("Z").getNodeValue());
// Skip checks for fishing zones & add to fishing zone manager
if (temp instanceof FishingZone)
Node val = attrs.getNamedItem("isChaotic");
if ((val != null) && Boolean.parseBoolean(val.getNodeValue()))
{
FishingZoneManager.getInstance().addFishingZone((FishingZone) temp);
continue;
((SpawnZone) temp).addChaoticSpawn(spawnX, spawnY, spawnZ);
}
if (temp instanceof WaterZone)
else
{
FishingZoneManager.getInstance().addWaterZone((WaterZone) temp);
((SpawnZone) temp).addSpawn(spawnX, spawnY, spawnZ);
}
}
}
// Register the zone into any world region it intersects with currently 11136 test for each zone :>
int ax;
int ay;
int bx;
int by;
addZone(zoneId, temp);
// Register the zone into any world region it intersects with...
for (int x = 0; x < worldRegions.length; x++)
{
for (int y = 0; y < worldRegions[x].length; y++)
{
ax = (x - World.OFFSET_X) << World.SHIFT_BY;
bx = ((x + 1) - World.OFFSET_X) << World.SHIFT_BY;
ay = (y - World.OFFSET_Y) << World.SHIFT_BY;
by = ((y + 1) - World.OFFSET_Y) << World.SHIFT_BY;
if (temp.getZone().intersectsRectangle(ax, bx, ay, by))
if (temp.getZone().intersectsRectangle((x - World.OFFSET_X) << World.SHIFT_BY, ((x + 1) - World.OFFSET_X) << World.SHIFT_BY, (y - World.OFFSET_Y) << World.SHIFT_BY, ((y + 1) - World.OFFSET_Y) << World.SHIFT_BY))
{
worldRegions[x][y].addZone(temp);
}
@@ -501,10 +483,6 @@ public class ZoneData
{
ArenaManager.getInstance().addArena((ArenaZone) temp);
}
else if (temp instanceof TownZone)
{
TownManager.getInstance().addTown((TownZone) temp);
}
else if (temp instanceof OlympiadStadiumZone)
{
OlympiadStadiaManager.getInstance().addStadium((OlympiadStadiumZone) temp);
@@ -513,31 +491,170 @@ public class ZoneData
{
GrandBossManager.getInstance().addZone((BossZone) temp);
}
// Increase the counter
zoneCount++;
}
}
}
}
}
done = true;
}
}
catch (Exception e)
/**
* Add new zone
* @param id
* @param <T>
* @param zone
*/
@SuppressWarnings("unchecked")
public <T extends ZoneType> void addZone(Integer id, T zone)
{
LOGGER.warning("Error while loading zones. " + e);
}
if (done)
// _zones.put(id, zone);
Map<Integer, T> map = (Map<Integer, T>) _classZones.get(zone.getClass());
if (map == null)
{
GrandBossManager.getInstance().initZones();
map = new HashMap<>();
map.put(id, zone);
_classZones.put(zone.getClass(), map);
}
else
{
map.put(id, zone);
}
}
LOGGER.info("Done: loaded " + zoneCount + " zones.");
/**
* Return all zones by class type
* @param <T>
* @param zoneType Zone class
* @return Collection of zones
*/
@SuppressWarnings("unchecked")
public <T extends ZoneType> Collection<T> getAllZones(Class<T> zoneType)
{
return (Collection<T>) _classZones.get(zoneType).values();
}
public static ZoneData getInstance()
/**
* Get zone by ID
* @param id
* @return
* @see #getZoneById(int, Class)
*/
public ZoneType getZoneById(int id)
{
for (Map<Integer, ? extends ZoneType> map : _classZones.values())
{
if (map.containsKey(id))
{
return map.get(id);
}
}
return null;
}
/**
* Get zone by ID and zone class
* @param <T>
* @param id
* @param zoneType
* @return zone
*/
@SuppressWarnings("unchecked")
public <T extends ZoneType> T getZoneById(int id, Class<T> zoneType)
{
return (T) _classZones.get(zoneType).get(id);
}
/**
* Returns all zones from where the object is located
* @param object
* @return zones
*/
public List<ZoneType> getZones(WorldObject object)
{
return getZones(object.getX(), object.getY(), object.getZ());
}
/**
* Returns zone from where the object is located by type
* @param <T>
* @param object
* @param type
* @return zone
*/
public <T extends ZoneType> T getZone(WorldObject object, Class<T> type)
{
if (object == null)
{
return null;
}
return getZone(object.getX(), object.getY(), object.getZ(), type);
}
/**
* Returns all zones from given coordinates
* @param x
* @param y
* @param z
* @return zones
*/
public List<ZoneType> getZones(int x, int y, int z)
{
final List<ZoneType> temp = new ArrayList<>();
for (ZoneType zone : World.getInstance().getRegion(x, y).getZones())
{
if (zone.isInsideZone(x, y, z))
{
temp.add(zone);
}
}
return temp;
}
/**
* Returns zone from given coordinates
* @param <T>
* @param x
* @param y
* @param z
* @param type
* @return zone
*/
@SuppressWarnings("unchecked")
public <T extends ZoneType> T getZone(int x, int y, int z, Class<T> type)
{
for (ZoneType zone : World.getInstance().getRegion(x, y).getZones())
{
if (zone.isInsideZone(x, y, z) && type.isInstance(zone))
{
return (T) zone;
}
}
return null;
}
/**
* Add an item on debug list. Used to visualize zones.
* @param item : The item to add.
*/
public void addDebugItem(ItemInstance item)
{
_debugItems.put(item.getObjectId(), item);
}
/**
* Remove all debug items from the world.
*/
public void clearDebugItems()
{
for (ItemInstance item : _debugItems.values())
{
item.decayMe();
}
_debugItems.clear();
}
public static final ZoneData getInstance()
{
return SingletonHolder.INSTANCE;
}

View File

@@ -232,10 +232,9 @@ public class AdminSiege implements IAdminCommandHandler
else if (command.equalsIgnoreCase("admin_clanhallteleportself"))
{
final ClanHallZone zone = clanhall.getZone();
if (zone != null)
{
activeChar.teleToLocation(zone.getSpawn(), true);
activeChar.teleToLocation(zone.getSpawnLoc(), true);
}
}
else if (command.equalsIgnoreCase("admin_spawn_doors"))

View File

@@ -16,11 +16,10 @@
*/
package org.l2jmobius.gameserver.handler.admincommandhandlers;
import java.util.Collection;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -61,48 +60,30 @@ public class AdminTownWar implements IAdminCommandHandler
// All Towns will become War Zones
if (Config.TW_ALL_TOWNS)
{
TownManager.getInstance().getTown(1).setParameter("noPeace", "true");
TownManager.getInstance().getTown(2).setParameter("noPeace", "true");
TownManager.getInstance().getTown(3).setParameter("noPeace", "true");
TownManager.getInstance().getTown(4).setParameter("noPeace", "true");
TownManager.getInstance().getTown(5).setParameter("noPeace", "true");
TownManager.getInstance().getTown(6).setParameter("noPeace", "true");
TownManager.getInstance().getTown(7).setParameter("noPeace", "true");
TownManager.getInstance().getTown(8).setParameter("noPeace", "true");
TownManager.getInstance().getTown(9).setParameter("noPeace", "true");
TownManager.getInstance().getTown(10).setParameter("noPeace", "true");
TownManager.getInstance().getTown(11).setParameter("noPeace", "true");
TownManager.getInstance().getTown(12).setParameter("noPeace", "true");
TownManager.getInstance().getTown(13).setParameter("noPeace", "true");
TownManager.getInstance().getTown(14).setParameter("noPeace", "true");
TownManager.getInstance().getTown(15).setParameter("noPeace", "true");
TownManager.getInstance().getTown(16).setParameter("noPeace", "true");
TownManager.getInstance().getTown(17).setParameter("noPeace", "true");
TownManager.getInstance().getTown(19).setParameter("noPeace", "true");
for (TownZone zone : ZoneData.getInstance().getAllZones(TownZone.class))
{
zone.setParameter("noPeace", "true");
}
}
// A Town will become War Zone
if (!Config.TW_ALL_TOWNS && (Config.TW_TOWN_ID != 18) && (Config.TW_TOWN_ID != 21) && (Config.TW_TOWN_ID != 22))
{
TownManager.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "true");
MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "true");
}
final Collection<PlayerInstance> pls = World.getInstance().getAllPlayers();
{
int x;
int y;
int z;
TownZone town;
for (PlayerInstance onlinePlayer : pls)
for (PlayerInstance onlinePlayer : World.getInstance().getAllPlayers())
{
if (onlinePlayer.isOnline())
{
x = onlinePlayer.getX();
y = onlinePlayer.getY();
z = onlinePlayer.getZ();
town = TownManager.getInstance().getTown(x, y, z);
town = ZoneData.getInstance().getZone(x, y, z, TownZone.class);
if (town != null)
{
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
@@ -119,7 +100,6 @@ public class AdminTownWar implements IAdminCommandHandler
onlinePlayer.setInTownWar(true);
}
}
}
// Announce for all towns
if (Config.TW_ALL_TOWNS)
@@ -132,7 +112,7 @@ public class AdminTownWar implements IAdminCommandHandler
if (!Config.TW_ALL_TOWNS)
{
Announcements.getInstance().gameAnnounceToAll("Town War Event!");
Announcements.getInstance().gameAnnounceToAll(TownManager.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set to war zone by " + activeChar.getName() + ".");
Announcements.getInstance().gameAnnounceToAll(MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set to war zone by " + activeChar.getName() + ".");
}
}
@@ -141,48 +121,44 @@ public class AdminTownWar implements IAdminCommandHandler
// All Towns will become Peace Zones
if (Config.TW_ALL_TOWNS)
{
TownManager.getInstance().getTown(1).setParameter("noPeace", "false");
TownManager.getInstance().getTown(2).setParameter("noPeace", "false");
TownManager.getInstance().getTown(3).setParameter("noPeace", "false");
TownManager.getInstance().getTown(4).setParameter("noPeace", "false");
TownManager.getInstance().getTown(5).setParameter("noPeace", "false");
TownManager.getInstance().getTown(6).setParameter("noPeace", "false");
TownManager.getInstance().getTown(7).setParameter("noPeace", "false");
TownManager.getInstance().getTown(8).setParameter("noPeace", "false");
TownManager.getInstance().getTown(9).setParameter("noPeace", "false");
TownManager.getInstance().getTown(10).setParameter("noPeace", "false");
TownManager.getInstance().getTown(11).setParameter("noPeace", "false");
TownManager.getInstance().getTown(12).setParameter("noPeace", "false");
TownManager.getInstance().getTown(13).setParameter("noPeace", "false");
TownManager.getInstance().getTown(14).setParameter("noPeace", "false");
TownManager.getInstance().getTown(15).setParameter("noPeace", "false");
TownManager.getInstance().getTown(16).setParameter("noPeace", "false");
TownManager.getInstance().getTown(17).setParameter("noPeace", "false");
TownManager.getInstance().getTown(19).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(1).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(2).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(3).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(4).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(5).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(6).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(7).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(8).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(9).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(10).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(11).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(12).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(13).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(14).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(15).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(16).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(17).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(19).setParameter("noPeace", "false");
}
// A Town will become Peace Zone
if (!Config.TW_ALL_TOWNS && (Config.TW_TOWN_ID != 18) && (Config.TW_TOWN_ID != 21) && (Config.TW_TOWN_ID != 22))
{
TownManager.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "false");
MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).setParameter("noPeace", "false");
}
final Collection<PlayerInstance> pls = World.getInstance().getAllPlayers();
{
int x;
int y;
int z;
TownZone town;
for (PlayerInstance onlinePlayer : pls)
for (PlayerInstance onlinePlayer : World.getInstance().getAllPlayers())
{
if (onlinePlayer.isOnline())
{
x = onlinePlayer.getX();
y = onlinePlayer.getY();
z = onlinePlayer.getZ();
town = TownManager.getInstance().getTown(x, y, z);
town = ZoneData.getInstance().getZone(x, y, z, TownZone.class);
if (town != null)
{
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
@@ -199,7 +175,6 @@ public class AdminTownWar implements IAdminCommandHandler
onlinePlayer.setInTownWar(false);
}
}
}
// Announce for all towns
if (Config.TW_ALL_TOWNS)
@@ -210,7 +185,7 @@ public class AdminTownWar implements IAdminCommandHandler
// Announce for one town
if (!Config.TW_ALL_TOWNS)
{
Announcements.getInstance().gameAnnounceToAll(TownManager.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set back to normal by " + activeChar.getName() + ".");
Announcements.getInstance().gameAnnounceToAll(MapRegionData.getInstance().getTown(Config.TW_TOWN_ID).getName() + " has been set back to normal by " + activeChar.getName() + ".");
}
}

View File

@@ -18,88 +18,119 @@ package org.l2jmobius.gameserver.handler.admincommandhandlers;
import java.util.StringTokenizer;
import org.l2jmobius.gameserver.datatables.xml.AdminData;
import org.l2jmobius.commons.util.StringUtil;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.util.BuilderUtil;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
/**
* @author luisantonioa
*/
public class AdminZone implements IAdminCommandHandler
{
private static final String[] ADMIN_COMMANDS =
{
"admin_zone_check",
"admin_zone_reload"
"admin_zone_visual"
};
@Override
public boolean useAdminCommand(String command, PlayerInstance activeChar)
{
final StringTokenizer st = new StringTokenizer(command, " ");
final String actualCommand = st.nextToken(); // Get actual command
if (activeChar == null)
{
return false;
}
StringTokenizer st = new StringTokenizer(command, " ");
String actualCommand = st.nextToken(); // Get actual command
if (actualCommand.equalsIgnoreCase("admin_zone_check"))
{
if (activeChar.isInsideZone(ZoneId.PVP))
showHtml(activeChar);
}
else if (actualCommand.equalsIgnoreCase("admin_zone_visual"))
{
BuilderUtil.sendSysMessage(activeChar, "This is a PvP zone.");
try
{
String next = st.nextToken();
if (next.equalsIgnoreCase("all"))
{
for (ZoneType zone : ZoneData.getInstance().getZones(activeChar))
{
zone.visualizeZone(activeChar.getZ());
}
showHtml(activeChar);
}
else if (next.equalsIgnoreCase("clear"))
{
ZoneData.getInstance().clearDebugItems();
showHtml(activeChar);
}
else
{
BuilderUtil.sendSysMessage(activeChar, "This is NOT a PvP zone.");
int zoneId = Integer.parseInt(next);
ZoneData.getInstance().getZoneById(zoneId).visualizeZone(activeChar.getZ());
}
if (activeChar.isInsideZone(ZoneId.NO_LANDING))
}
catch (Exception e)
{
BuilderUtil.sendSysMessage(activeChar, "This is a no landing zone.");
activeChar.sendMessage("Invalid parameter for //zone_visual.");
}
else
{
BuilderUtil.sendSysMessage(activeChar, "This is NOT a no landing zone.");
}
if (activeChar.isInsideZone(ZoneId.NO_STORE))
{
BuilderUtil.sendSysMessage(activeChar, "This is a no-store zone.");
}
else
{
BuilderUtil.sendSysMessage(activeChar, "This is NOT a no-store zone.");
}
BuilderUtil.sendSysMessage(activeChar, "MapRegion: x:" + MapRegionData.getInstance().getMapRegionX(activeChar.getX()) + " y:" + MapRegionData.getInstance().getMapRegionX(activeChar.getY()));
BuilderUtil.sendSysMessage(activeChar, "Closest Town: " + MapRegionData.getInstance().getClosestTownName(activeChar));
Location loc;
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.CASTLE);
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (Castle): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.CLANHALL);
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (ClanHall): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.SIEGEFLAG);
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (SiegeFlag): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
loc = MapRegionData.getInstance().getTeleToLocation(activeChar, TeleportWhereType.TOWN);
BuilderUtil.sendSysMessage(activeChar, "TeleToLocation (Town): x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ());
}
else if (actualCommand.equalsIgnoreCase("admin_zone_reload"))
{
// TODO: ZONETODO ZoneManager.getInstance().reload();
AdminData.broadcastMessageToGMs("Zones can not be reloaded in this version.");
}
return true;
}
private static void showHtml(PlayerInstance activeChar)
{
final int x = activeChar.getX();
final int y = activeChar.getY();
final int rx = ((x - World.MAP_MIN_X) >> 15) + World.TILE_X_MIN;
final int ry = ((y - World.MAP_MIN_Y) >> 15) + World.TILE_Y_MIN;
final NpcHtmlMessage html = new NpcHtmlMessage(0);
html.setFile("data/html/admin/zone.htm");
html.replace("%MAPREGION%", "[x:" + MapRegionData.getInstance().getMapRegionX(x) + " y:" + MapRegionData.getInstance().getMapRegionY(y) + "]");
html.replace("%GEOREGION%", rx + "_" + ry);
html.replace("%CLOSESTTOWN%", MapRegionData.getInstance().getClosestTownName(activeChar));
html.replace("%CURRENTLOC%", x + ", " + y + ", " + activeChar.getZ());
html.replace("%PVP%", (activeChar.isInsideZone(ZoneId.PVP) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%PEACE%", (activeChar.isInsideZone(ZoneId.PEACE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%SIEGE%", (activeChar.isInsideZone(ZoneId.SIEGE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%MOTHERTREE%", (activeChar.isInsideZone(ZoneId.MOTHERTREE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%CLANHALL%", (activeChar.isInsideZone(ZoneId.CLAN_HALL) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%NOLANDING%", (activeChar.isInsideZone(ZoneId.NO_LANDING) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%WATER%", (activeChar.isInsideZone(ZoneId.WATER) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%JAIL%", (activeChar.isInsideZone(ZoneId.JAIL) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%MONSTERTRACK%", (activeChar.isInsideZone(ZoneId.MONSTER_TRACK) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%CASTLE%", (activeChar.isInsideZone(ZoneId.CASTLE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%SWAMP%", (activeChar.isInsideZone(ZoneId.SWAMP) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%NOSUMMONFRIEND%", (activeChar.isInsideZone(ZoneId.NO_SUMMON_FRIEND) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%NOSTORE%", (activeChar.isInsideZone(ZoneId.NO_STORE) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%TOWN%", (activeChar.isInsideZone(ZoneId.TOWN) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%HQ%", (activeChar.isInsideZone(ZoneId.HQ) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%DANGERAREA%", (activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%BOSS%", (activeChar.isInsideZone(ZoneId.BOSS) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
html.replace("%NORESTART%", (activeChar.isInsideZone(ZoneId.NO_RESTART) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
final StringBuilder sb = new StringBuilder(100);
for (ZoneType zone : World.getInstance().getRegion(x, y).getZones())
{
if (zone.isCharacterInZone(activeChar))
{
StringUtil.append(sb, zone.getId(), " ");
}
}
html.replace("%ZLIST%", sb.toString());
activeChar.sendPacket(html);
}
@Override
public String[] getAdminCommandList()
{

View File

@@ -165,7 +165,7 @@ public class SiegeFlag implements ISkillHandler
{
message = "You have already placed the maximum number of flags possible.";
}
else if (player.isInsideZone(ZoneId.NO_HQ))
else if (!player.isInsideZone(ZoneId.HQ))
{
message = "You cannot place flag here.";
}
@@ -210,7 +210,7 @@ public class SiegeFlag implements ISkillHandler
{
message = "You have already placed the maximum number of flags possible.";
}
else if (player.isInsideZone(ZoneId.NO_HQ))
else if (!player.isInsideZone(ZoneId.HQ))
{
message = "You cannot place flag here.";
}

View File

@@ -42,7 +42,7 @@ public class Escape implements IUserCommandHandler
@Override
public boolean useUserCommand(int id, PlayerInstance player)
{
final int unstuckTimer = player.getAccessLevel().isGm() ? 1000 : Config.UNSTUCK_INTERVAL * 1000;
final int unstuckTimer = player.isGM() ? 1000 : Config.UNSTUCK_INTERVAL * 1000;
// Check to see if the current player is in Festival.
if (player.isFestivalParticipant())

View File

@@ -36,11 +36,6 @@ public class CastleManager
{
protected static final Logger LOGGER = Logger.getLogger(CastleManager.class.getName());
public static final CastleManager getInstance()
{
return SingletonHolder.INSTANCE;
}
private static final List<Castle> _castles = new CopyOnWriteArrayList<>();
private static final int[] _castleCirclets =
@@ -62,25 +57,23 @@ public class CastleManager
load();
}
public int findNearestCastlesIndex(WorldObject obj)
public int findNearestCastleIndex(WorldObject obj)
{
int index = getCastleIndex(obj);
if (index < 0)
{
double closestDistance = 99999999;
double closestDistance = Double.MAX_VALUE;
double distance;
Castle castle;
for (int i = 0; i < getCastles().size(); i++)
{
castle = getCastles().get(i);
if (castle == null)
{
continue;
}
distance = castle.getDistance(obj);
if (closestDistance > distance)
{
closestDistance = distance;
@@ -91,6 +84,28 @@ public class CastleManager
return index;
}
public Castle findNearestCastle(int x, int y)
{
double closestDistance = Double.MAX_VALUE;
double distance;
Castle result = null;
for (Castle castle : _castles)
{
if (castle == null)
{
continue;
}
distance = castle.getZone().getDistanceToZone(x, y);
if (closestDistance > distance)
{
closestDistance = distance;
result = castle;
}
}
return result;
}
private final void load()
{
LOGGER.info("Initializing CastleManager");
@@ -354,6 +369,11 @@ public class CastleManager
}
}
public static final CastleManager getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final CastleManager INSTANCE = new CastleManager();

View File

@@ -1,323 +0,0 @@
/*
* 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 org.l2jmobius.gameserver.instancemanager;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.entity.siege.Castle;
import org.l2jmobius.gameserver.model.zone.type.TownZone;
public class TownManager
{
private List<TownZone> _towns;
private TownManager()
{
}
public void addTown(TownZone arena)
{
if (_towns == null)
{
_towns = new ArrayList<>();
}
_towns.add(arena);
}
public TownZone getClosestTown(WorldObject activeObject)
{
switch (MapRegionData.getInstance().getMapRegion(activeObject.getPosition().getX(), activeObject.getPosition().getY()))
{
case 0:
{
return getTown(2); // TI
}
case 1:
{
return getTown(3); // Elven
}
case 2:
{
return getTown(1); // DE
}
case 3:
{
return getTown(4); // Orc
}
case 4:
{
return getTown(6); // Dwarven
}
case 5:
{
return getTown(7); // Gludio
}
case 6:
{
return getTown(5); // Gludin
}
case 7:
{
return getTown(8); // Dion
}
case 8:
{
return getTown(9); // Giran
}
case 9:
{
return getTown(10); // Oren
}
case 10:
{
return getTown(12); // Aden
}
case 11:
{
return getTown(11); // HV
}
case 12:
{
return getTown(9); // Giran Harbour
}
case 13:
{
return getTown(15); // Heine
}
case 14:
{
return getTown(14); // Rune
}
case 15:
{
return getTown(13); // Goddard
}
case 16:
{
return getTown(17); // Schuttgart
}
case 17:
{
return getTown(16); // Floran
}
case 18:
{
return getTown(19); // Primeval Isle
}
}
return getTown(16); // Default to floran
}
public static final int getClosestLocation(WorldObject activeObject)
{
switch (MapRegionData.getInstance().getMapRegion(activeObject.getPosition().getX(), activeObject.getPosition().getY()))
{
case 0:
{
return 1; // TI
}
case 1:
{
return 4; // Elven
}
case 2:
{
return 3; // DE
}
case 3:
{
return 9; // Orc
}
case 4:
{
return 9; // Dwarven
}
case 5:
{
return 2; // Gludio
}
case 6:
{
return 2; // Gludin
}
case 7:
{
return 5; // Dion
}
case 8:
{
return 6; // Giran
}
case 9:
{
return 10; // Oren
}
case 10:
{
return 13; // Aden
}
case 11:
{
return 11; // HV
}
case 12:
{
return 6; // Giran Harbour
}
case 13:
{
return 12; // Heine
}
case 14:
{
return 14; // Rune
}
case 15:
{
return 15; // Goddard
}
case 16:
{
return 9; // Schuttgart
}
}
return 0;
}
public boolean townHasCastleInSiege(int townId)
{
final int[] castleidarray =
{
0,
0,
0,
0,
0,
0,
0,
1,
2,
3,
4,
0,
5,
7,
8,
6,
0,
9,
0
};
final int castleIndex = castleidarray[townId];
if (castleIndex > 0)
{
final Castle castle = CastleManager.getInstance().getCastles().get(CastleManager.getInstance().getCastleIndex(castleIndex));
if (castle != null)
{
return castle.getSiege().isInProgress();
}
}
return false;
}
public boolean townHasCastleInSiege(int x, int y)
{
final int curtown = MapRegionData.getInstance().getMapRegion(x, y);
final int[] castleidarray =
{
0,
0,
0,
0,
0,
1,
0,
2,
3,
4,
5,
0,
0,
6,
8,
7,
9,
0,
0
};
// find an instance of the castle for this town.
final int castleIndex = castleidarray[curtown];
if (castleIndex > 0)
{
final Castle castle = CastleManager.getInstance().getCastles().get(CastleManager.getInstance().getCastleIndex(castleIndex));
if (castle != null)
{
return castle.getSiege().isInProgress();
}
}
return false;
}
public TownZone getTown(int townId)
{
for (TownZone temp : _towns)
{
if (temp.getTownId() == townId)
{
return temp;
}
}
return null;
}
/**
* Returns the town at that position (if any)
* @param x
* @param y
* @param z
* @return
*/
public TownZone getTown(int x, int y, int z)
{
for (TownZone temp : _towns)
{
if (temp.isInsideZone(x, y, z))
{
return temp;
}
}
return null;
}
public static TownManager getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final TownManager INSTANCE = new TownManager();
}
}

View File

@@ -17,6 +17,8 @@
package org.l2jmobius.gameserver.model;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.logging.Logger;
@@ -76,6 +78,15 @@ public class WorldRegion
_zoneManager.unregisterZone(zone);
}
public List<ZoneType> getZones()
{
if (_zoneManager == null)
{
return Collections.emptyList();
}
return _zoneManager.getZones();
}
public void revalidateZones(Creature creature)
{
if (_zoneManager == null)

View File

@@ -40,6 +40,7 @@ import org.l2jmobius.gameserver.datatables.HeroSkillTable;
import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.handler.ISkillHandler;
@@ -49,7 +50,6 @@ import org.l2jmobius.gameserver.instancemanager.DimensionalRiftManager;
import org.l2jmobius.gameserver.instancemanager.DuelManager;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.ChanceSkillList;
import org.l2jmobius.gameserver.model.Effect;
import org.l2jmobius.gameserver.model.ForceBuff;
@@ -663,14 +663,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
{
if (Config.TW_DISABLE_GK)
{
int x1;
int y1;
int z1;
x1 = getX();
y1 = getY();
z1 = getZ();
TownZone town;
town = TownManager.getInstance().getTown(x1, y1, z1);
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
if ((town != null) && _inTownWar)
{
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
@@ -6513,7 +6506,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
int bossId = -1;
NpcTemplate bossTemplate = null;
final BossZone bossZone = GrandBossManager.getInstance().getZone(this);
if (bossZone != null)
{
bossId = bossZone.getBossId();
@@ -8301,7 +8293,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
{
// Set some values inside target's instance for later use
final Creature creature = (Creature) target;
if ((skill.getEffectType() == SkillType.BUFF) && creature.isBlockBuff())
{
continue;
@@ -8310,7 +8301,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (target instanceof Creature)
{
final Creature targ = (Creature) target;
if (ChanceSkillList.canTriggerByCast(this, targ, skill))
{
// Maybe launch chance skills on us
@@ -8345,7 +8335,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
int bossId = -1;
NpcTemplate bossTemplate = null;
final BossZone bossZone = GrandBossManager.getInstance().getZone(this);
if (bossZone != null)
{
bossId = bossZone.getBossId();

View File

@@ -534,8 +534,7 @@ public class DoorInstance extends Creature
// Send a Server->Client packet MyTargetSelected to the PlayerInstance player
player.sendPacket(new MyTargetSelected(getObjectId(), 0));
final DoorStatusUpdate su = new DoorStatusUpdate(this);
player.sendPacket(su);
player.sendPacket(new DoorStatusUpdate(this));
// Send a Server->Client packet ValidateLocation to correct the NpcInstance position and heading on the client
player.sendPacket(new ValidateLocation(this));
@@ -580,31 +579,25 @@ public class DoorInstance extends Creature
return;
}
if (player.getAccessLevel().isGm())
if (player.isGM())
{
player.setTarget(this);
player.sendPacket(new MyTargetSelected(getObjectId(), player.getLevel()));
if (isAutoAttackable(player))
{
final DoorStatusUpdate su = new DoorStatusUpdate(this);
player.sendPacket(su);
player.sendPacket(new DoorStatusUpdate(this));
}
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
final StringBuilder html1 = new StringBuilder("<html><body><table border=0>");
html1.append("<tr><td><font color=\"LEVEL\">Door Information</font><br></td></tr>");
html1.append("<tr><td>Current HP " + getCurrentHp() + "</td></tr>");
html1.append("<tr><td>Max HP " + getMaxHp() + "</td></tr>");
html1.append("<tr><td>Object ID: " + getObjectId() + "</td></tr>");
html1.append("<tr><td>Door ID: " + _doorId + "</td></tr>");
html1.append("<tr><td><br></td></tr>");
html1.append("<tr><td>Class: " + getClass().getSimpleName() + "</td></tr>");
html1.append("<tr><td><br></td></tr>");
html1.append("</table>");
html1.append("<table><tr>");
html1.append("<td><button value=\"Open\" action=\"bypass -h admin_open " + _doorId + "\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");
html1.append("<td><button value=\"Close\" action=\"bypass -h admin_close " + _doorId + "\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");
@@ -623,8 +616,7 @@ public class DoorInstance extends Creature
if (isAutoAttackable(player))
{
final DoorStatusUpdate su = new DoorStatusUpdate(this);
player.sendPacket(su);
player.sendPacket(new DoorStatusUpdate(this));
}
final NpcHtmlMessage reply = new NpcHtmlMessage(5);
@@ -643,14 +635,12 @@ public class DoorInstance extends Creature
public void broadcastStatusUpdate()
{
final Collection<PlayerInstance> knownPlayers = getKnownList().getKnownPlayers().values();
if ((knownPlayers == null) || knownPlayers.isEmpty())
{
return;
}
final DoorStatusUpdate su = new DoorStatusUpdate(this);
for (PlayerInstance player : knownPlayers)
{
player.sendPacket(su);

View File

@@ -293,7 +293,7 @@ public class MerchantInstance extends FolkInstance
return;
}
if (player.getAccessLevel().isGm())
if (player.isGM())
{
player.setTarget(this);

View File

@@ -31,13 +31,13 @@ import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.sql.HelperBuffTable;
import org.l2jmobius.gameserver.datatables.sql.SpawnTable;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.CustomNpcInstanceManager;
import org.l2jmobius.gameserver.instancemanager.DimensionalRiftManager;
import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.DropCategory;
import org.l2jmobius.gameserver.model.DropData;
import org.l2jmobius.gameserver.model.Skill;
@@ -829,7 +829,7 @@ public class NpcInstance extends Creature
final Weapon currentWeapon = player.getActiveWeaponItem();
// Check if the PlayerInstance is a GM
if (player.getAccessLevel().isGm())
if (player.isGM())
{
// Set the target of the PlayerInstance player
player.setTarget(this);
@@ -1135,8 +1135,7 @@ public class NpcInstance extends Creature
// Get castle this NPC belongs to (excluding Attackable)
if (_castleIndex < 0)
{
final TownZone town = TownManager.getInstance().getTown(getX(), getY(), getZ());
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
if (town != null)
{
_castleIndex = CastleManager.getInstance().getCastleIndex(town.getTaxById());
@@ -1144,7 +1143,7 @@ public class NpcInstance extends Creature
if (_castleIndex < 0)
{
_castleIndex = CastleManager.getInstance().findNearestCastlesIndex(this);
_castleIndex = CastleManager.getInstance().findNearestCastleIndex(this);
}
else
{

View File

@@ -66,6 +66,7 @@ import org.l2jmobius.gameserver.datatables.xml.FishData;
import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.datatables.xml.RecipeData;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
@@ -86,7 +87,6 @@ import org.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager;
import org.l2jmobius.gameserver.instancemanager.PlayerCountManager;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.AccessLevel;
import org.l2jmobius.gameserver.model.BlockList;
import org.l2jmobius.gameserver.model.Effect;
@@ -6090,14 +6090,7 @@ public class PlayerInstance extends Playable
{
if (Config.TW_RESS_ON_DIE)
{
int x1;
int y1;
int z1;
x1 = getX();
y1 = getY();
z1 = getZ();
TownZone town;
town = TownManager.getInstance().getTown(x1, y1, z1);
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
if ((town != null) && isinTownWar())
{
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
@@ -6769,14 +6762,7 @@ public class PlayerInstance extends Playable
*/
public void increasePvpKills()
{
int x;
int y;
int z;
x = getX();
y = getY();
z = getZ();
TownZone town;
town = TownManager.getInstance().getTown(x, y, z);
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
if ((town != null) && isinTownWar())
{
if ((town.getTownId() == Config.TW_TOWN_ID) && !Config.TW_ALL_TOWNS)
@@ -7117,18 +7103,9 @@ public class PlayerInstance extends Playable
}
// Add karma to attacker and increase its PK counter
int x;
int y;
int z;
x = getX();
y = getY();
z = getZ();
// get local town
final TownZone town = TownManager.getInstance().getTown(x, y, z);
setPkKills(getPkKills() + 1);
final TownZone town = ZoneData.getInstance().getZone(getX(), getY(), getZ(), TownZone.class);
if ((town == null) || (isinTownWar() && Config.TW_ALLOW_KARMA))
{
setKarma(getKarma() + newKarma);

View File

@@ -20,14 +20,15 @@ import java.util.StringTokenizer;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.sql.TeleportLocationTable;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.SiegeManager;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.model.TeleportLocation;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.zone.type.BossZone;
import org.l2jmobius.gameserver.model.zone.type.TownZone;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
@@ -217,7 +218,7 @@ public class TeleporterInstance extends FolkInstance
player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
return;
}
else if (!SiegeManager.getInstance().isTeleportToSiegeTownAllowed() && TownManager.getInstance().townHasCastleInSiege(list.getX(), list.getY()) && !player.isNoble())
else if (!SiegeManager.getInstance().isTeleportToSiegeTownAllowed() && (ZoneData.getInstance().getZone(list.getX(), list.getY(), list.getZ(), TownZone.class) != null) && CastleManager.getInstance().findNearestCastle(list.getX(), list.getY()).getSiege().isInProgress() && !player.isNoble())
{
player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
return;

View File

@@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.partymatching;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ExManagePartyRoomMember;
@@ -44,7 +44,7 @@ public class PartyMatchRoom
_id = id;
_title = title;
_loot = loot;
_location = TownManager.getClosestLocation(owner);
_location = MapRegionData.getInstance().getClosestLocation(owner.getX(), owner.getY());
_minlvl = minlvl;
_maxlvl = maxlvl;
_maxmem = maxmem;

View File

@@ -0,0 +1,78 @@
/*
* 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 org.l2jmobius.gameserver.model.zone;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.model.Location;
/**
* Abstract zone with spawn locations.<br>
* It inherits regular ZoneType behavior, with the possible addition of 2 Lists holding Locations.
*/
public abstract class SpawnZone extends ZoneType
{
private List<Location> _spawnLocs = null;
private List<Location> _chaoticSpawnLocs = null;
public SpawnZone(int id)
{
super(id);
}
public final void addSpawn(int x, int y, int z)
{
if (_spawnLocs == null)
{
_spawnLocs = new ArrayList<>();
}
_spawnLocs.add(new Location(x, y, z));
}
public final void addChaoticSpawn(int x, int y, int z)
{
if (_chaoticSpawnLocs == null)
{
_chaoticSpawnLocs = new ArrayList<>();
}
_chaoticSpawnLocs.add(new Location(x, y, z));
}
public final List<Location> getSpawns()
{
return _spawnLocs;
}
public final Location getSpawnLoc()
{
return _spawnLocs.get(Rnd.get(_spawnLocs.size()));
}
public final Location getChaoticSpawnLoc()
{
if (_chaoticSpawnLocs != null)
{
return _chaoticSpawnLocs.get(Rnd.get(_chaoticSpawnLocs.size()));
}
return getSpawnLoc();
}
}

View File

@@ -16,12 +16,20 @@
*/
package org.l2jmobius.gameserver.model.zone;
import java.awt.geom.Line2D;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.idfactory.IdFactory;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
/**
* Abstract base class for any zone form
* @author durgus
*/
public abstract class ZoneForm
{
protected static final int STEP = 50;
public abstract boolean isInsideZone(int x, int y, int z);
public abstract boolean intersectsRectangle(int x1, int x2, int y1, int y2);
@@ -32,11 +40,13 @@ public abstract class ZoneForm
public abstract int getHighZ(); // New fishing patch makes use of that to get the Z for the hook
public abstract void visualizeZone(int id, int z);
// landing coordinates.
protected boolean lineSegmentsIntersect(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2)
{
return java.awt.geom.Line2D.linesIntersect(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2);
return Line2D.linesIntersect(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2);
}
protected boolean lineIntersectsLine(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2)
@@ -82,4 +92,13 @@ public abstract class ZoneForm
{
return b > a ? (c >= a) && (c <= b) : (c >= b) && (c <= a);
}
protected static final void dropDebugItem(int id, int x, int y, int z)
{
final ItemInstance item = new ItemInstance(IdFactory.getInstance().getNextId(), 57);
item.setCount(id);
item.spawnMe(x, y, z + 5);
ZoneData.getInstance().addDebugItem(item);
}
}

View File

@@ -22,22 +22,26 @@ package org.l2jmobius.gameserver.model.zone;
*/
public enum ZoneId
{
PVP,
PEACE,
SIEGE,
MOTHERTREE,
BOSS,
CASTLE,
CLAN_HALL,
UNUSED,
NO_LANDING,
WATER,
DANGER_AREA,
HQ,
JAIL,
MONSTER_TRACK,
SWAMP,
MOTHERTREE,
NO_LANDING,
NO_RESTART,
NO_STORE,
NO_SUMMON_FRIEND,
OLYMPIAD,
NO_HQ,
DANGER_AREA,
NO_STORE;
PEACE,
PVP,
SCRIPT,
SIEGE,
TOWN,
SWAMP,
WATER;
public static int getZoneCount()
{

View File

@@ -19,8 +19,6 @@ package org.l2jmobius.gameserver.model.zone;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.w3c.dom.Node;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -149,10 +147,6 @@ public abstract class ZoneType
}
}
public void setSpawnLocs(Node node1)
{
}
/**
* Checks if the given character is affected by this zone
* @param creature
@@ -364,4 +358,9 @@ public abstract class ZoneType
{
return _characterList;
}
public void visualizeZone(int z)
{
getZone().visualizeZone(_id, z);
}
}

View File

@@ -198,4 +198,21 @@ public class ZoneCuboid extends ZoneForm
{
return _z2;
}
@Override
public void visualizeZone(int id, int z)
{
// x1->x2
for (int x = _x1; x < _x2; x = x + STEP)
{
dropDebugItem(id, x, _y1, z);
dropDebugItem(id, x, _y2, z);
}
// y1->y2
for (int y = _y1; y < _y2; y = y + STEP)
{
dropDebugItem(id, _x1, y, z);
dropDebugItem(id, _x2, y, z);
}
}
}

View File

@@ -130,4 +130,17 @@ public class ZoneCylinder extends ZoneForm
{
return _z2;
}
@Override
public void visualizeZone(int id, int z)
{
int count = (int) ((2 * Math.PI * _rad) / STEP);
double angle = (2 * Math.PI) / count;
for (int i = 0; i < count; i++)
{
int x = (int) (Math.cos(angle * i) * _rad);
int y = (int) (Math.sin(angle * i) * _rad);
dropDebugItem(id, _x + x, _y + y, z);
}
}
}

View File

@@ -136,4 +136,27 @@ public class ZoneNPoly extends ZoneForm
{
return _z2;
}
@Override
public void visualizeZone(int id, int z)
{
for (int i = 0; i < _x.length; i++)
{
int nextIndex = i + 1;
// ending point to first one
if (nextIndex == _x.length)
{
nextIndex = 0;
}
int vx = _x[nextIndex] - _x[i];
int vy = _y[nextIndex] - _y[i];
float lenght = (float) Math.sqrt((vx * vx) + (vy * vy));
lenght /= STEP;
for (int o = 1; o <= lenght; o++)
{
float k = o / lenght;
dropDebugItem(id, (int) (_x[i] + (k * vx)), (int) (_y[i] + (k * vy)), z);
}
}
}
}

View File

@@ -17,58 +17,28 @@
package org.l2jmobius.gameserver.model.zone.type;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.SpawnZone;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.SystemMessageId;
/**
* An arena
* @author durgus
*/
public class ArenaZone extends ZoneType
public class ArenaZone extends SpawnZone
{
private final Location _spawnLoc = new Location(0, 0, 0);
public ArenaZone(int id)
{
super(id);
}
@Override
public void setParameter(String name, String value)
{
switch (name)
{
case "spawnX":
{
_spawnLoc.setX(Integer.parseInt(value));
break;
}
case "spawnY":
{
_spawnLoc.setY(Integer.parseInt(value));
break;
}
case "spawnZ":
{
_spawnLoc.setZ(Integer.parseInt(value));
break;
}
default:
{
super.setParameter(name, value);
break;
}
}
}
@Override
protected void onEnter(Creature creature)
{
creature.setInsideZone(ZoneId.PVP, true);
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
if (creature instanceof PlayerInstance)
{
@@ -80,6 +50,7 @@ public class ArenaZone extends ZoneType
protected void onExit(Creature creature)
{
creature.setInsideZone(ZoneId.PVP, false);
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
if (creature instanceof PlayerInstance)
{
@@ -126,9 +97,4 @@ public class ArenaZone extends ZoneType
}
}
}
public Location getSpawnLoc()
{
return _spawnLoc;
}
}

View File

@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
/**
@@ -90,7 +91,14 @@ public class BossZone extends ZoneType
*/
protected void onEnter(Creature creature)
{
if (_enabled && (creature instanceof PlayerInstance))
if (!_enabled)
{
return;
}
creature.setInsideZone(ZoneId.BOSS, true);
if (creature instanceof PlayerInstance)
{
final PlayerInstance player = (PlayerInstance) creature;
@@ -163,7 +171,6 @@ public class BossZone extends ZoneType
* @param y
* @param z
*/
public void movePlayersTo(int x, int y, int z)
{
if (_characterList.isEmpty())
@@ -187,7 +194,14 @@ public class BossZone extends ZoneType
@Override
protected void onExit(Creature creature)
{
if (_enabled && (creature instanceof PlayerInstance))
if (!_enabled)
{
return;
}
creature.setInsideZone(ZoneId.BOSS, false);
if (creature instanceof PlayerInstance)
{
// Thread.dumpStack();
final PlayerInstance player = (PlayerInstance) creature;

View File

@@ -19,25 +19,22 @@ package org.l2jmobius.gameserver.model.zone.type;
import java.util.ArrayList;
import java.util.List;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.SiegeSummonInstance;
import org.l2jmobius.gameserver.model.entity.siege.Castle;
import org.l2jmobius.gameserver.model.zone.SpawnZone;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.SystemMessageId;
/**
* A castle zone
* @author durgus
*/
public class CastleZone extends ZoneType
public class CastleZone extends SpawnZone
{
private Castle _castle;
private final Location _spawnLoc = new Location(0, 0, 0);
public CastleZone(int id)
{
@@ -57,21 +54,6 @@ public class CastleZone extends ZoneType
_castle.setZone(this);
break;
}
case "spawnX":
{
_spawnLoc.setX(Integer.parseInt(value));
break;
}
case "spawnY":
{
_spawnLoc.setY(Integer.parseInt(value));
break;
}
case "spawnZ":
{
_spawnLoc.setZ(Integer.parseInt(value));
break;
}
default:
{
super.setParameter(name, value);
@@ -83,6 +65,8 @@ public class CastleZone extends ZoneType
@Override
protected void onEnter(Creature creature)
{
creature.setInsideZone(ZoneId.CASTLE, true);
if (_castle.getSiege().isInProgress())
{
creature.setInsideZone(ZoneId.PVP, true);
@@ -98,6 +82,8 @@ public class CastleZone extends ZoneType
@Override
protected void onExit(Creature creature)
{
creature.setInsideZone(ZoneId.CASTLE, false);
if (_castle.getSiege().isInProgress())
{
creature.setInsideZone(ZoneId.PVP, false);
@@ -189,7 +175,7 @@ public class CastleZone extends ZoneType
continue;
}
((PlayerInstance) temp).teleToLocation(TeleportWhereType.TOWN);
((PlayerInstance) temp).teleToLocation(getChaoticSpawnLoc(), true);
}
}
@@ -227,11 +213,6 @@ public class CastleZone extends ZoneType
return players;
}
public Location getSpawn()
{
return _spawnLoc;
}
public boolean isSiegeActive()
{
if (_castle != null)

View File

@@ -20,28 +20,24 @@ import java.util.Map;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.ClanHallManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.entity.ClanHall;
import org.l2jmobius.gameserver.model.zone.SpawnZone;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.serverpackets.ClanHallDecoration;
/**
* A clan hall zone
* @author durgus
*/
public class ClanHallZone extends ZoneType
public class ClanHallZone extends SpawnZone
{
private int _clanHallId;
private final int[] _spawnLoc;
public ClanHallZone(int id)
{
super(id);
_spawnLoc = new int[3];
}
@Override
@@ -56,21 +52,6 @@ public class ClanHallZone extends ZoneType
ClanHallManager.getInstance().getClanHallById(_clanHallId).setZone(this);
break;
}
case "spawnX":
{
_spawnLoc[0] = Integer.parseInt(value);
break;
}
case "spawnY":
{
_spawnLoc[1] = Integer.parseInt(value);
break;
}
case "spawnZ":
{
_spawnLoc[2] = Integer.parseInt(value);
break;
}
default:
{
super.setParameter(name, value);
@@ -100,7 +81,7 @@ public class ClanHallZone extends ZoneType
// Send a message
if ((clanHall.getOwnerId() != 0) && (clanHall.getOwnerId() == ((PlayerInstance) creature).getClanId()))
{
((PlayerInstance) creature).sendMessage("You have entered your clan hall");
((PlayerInstance) creature).sendMessage("You have entered your clan hall.");
}
}
}
@@ -116,7 +97,7 @@ public class ClanHallZone extends ZoneType
// Send a message
if ((((PlayerInstance) creature).getClanId() != 0) && (ClanHallManager.getInstance().getClanHallById(_clanHallId).getOwnerId() == ((PlayerInstance) creature).getClanId()))
{
((PlayerInstance) creature).sendMessage("You have left your clan hall");
((PlayerInstance) creature).sendMessage("You have left your clan hall.");
}
}
}
@@ -158,13 +139,4 @@ public class ClanHallZone extends ZoneType
{
return _characterList;
}
/**
* Get the clan hall's spawn
* @return
*/
public Location getSpawn()
{
return new Location(_spawnLoc[0], _spawnLoc[1], _spawnLoc[2]);
}
}

View File

@@ -1,111 +0,0 @@
/*
* 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 org.l2jmobius.gameserver.model.zone.type;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
public class CustomZone extends ZoneType
{
public CustomZone(int id)
{
super(id);
_isFlyingEnable = true;
}
@Override
protected void onDieInside(Creature l2character)
{
}
@Override
protected void onReviveInside(Creature l2character)
{
}
@Override
public void setParameter(String name, String value)
{
switch (name)
{
case "name":
{
_zoneName = value;
break;
}
case "flying":
{
_isFlyingEnable = Boolean.parseBoolean(value);
break;
}
default:
{
super.setParameter(name, value);
break;
}
}
}
@Override
protected void onEnter(Creature creature)
{
if (creature instanceof PlayerInstance)
{
final PlayerInstance player = (PlayerInstance) creature;
if (!player.isGM() && player.isFlying() && !player.isInJail() && !_isFlyingEnable)
{
player.teleToLocation(TeleportWhereType.TOWN);
}
if (_zoneName.equalsIgnoreCase("tradeoff"))
{
player.sendMessage("Trade restrictions are involved.");
player.setTradeDisabled(true);
}
}
}
@Override
protected void onExit(Creature creature)
{
if (creature instanceof PlayerInstance)
{
final PlayerInstance player = (PlayerInstance) creature;
if (_zoneName.equalsIgnoreCase("tradeoff"))
{
player.sendMessage("Trade restrictions removed.");
player.setTradeDisabled(false);
}
}
}
public String getZoneName()
{
return _zoneName;
}
public boolean isFlyingEnable()
{
return _isFlyingEnable;
}
private String _zoneName;
private boolean _isFlyingEnable;
}

View File

@@ -21,23 +21,21 @@ import java.util.List;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.FortManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.SiegeSummonInstance;
import org.l2jmobius.gameserver.model.entity.siege.Fort;
import org.l2jmobius.gameserver.model.zone.SpawnZone;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.SystemMessageId;
/**
* A castle zone
* @author programmos
*/
public class FortZone extends ZoneType
public class FortZone extends SpawnZone
{
private Fort _fort;
private final Location _spawnLoc = new Location(0, 0, 0);
public FortZone(int id)
{
@@ -57,21 +55,6 @@ public class FortZone extends ZoneType
_fort.setZone(this);
break;
}
case "spawnX":
{
_spawnLoc.setX(Integer.parseInt(value));
break;
}
case "spawnY":
{
_spawnLoc.setY(Integer.parseInt(value));
break;
}
case "spawnZ":
{
_spawnLoc.setZ(Integer.parseInt(value));
break;
}
default:
{
super.setParameter(name, value);
@@ -215,7 +198,6 @@ public class FortZone extends ZoneType
public List<PlayerInstance> getAllPlayers()
{
final List<PlayerInstance> players = new ArrayList<>();
for (Creature temp : _characterList.values())
{
if (temp instanceof PlayerInstance)
@@ -223,16 +205,6 @@ public class FortZone extends ZoneType
players.add((PlayerInstance) temp);
}
}
return players;
}
/**
* Get the forts defender spawn
* @return
*/
public Location getSpawn()
{
return _spawnLoc;
}
}

View File

@@ -0,0 +1,62 @@
/*
* 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 org.l2jmobius.gameserver.model.zone.type;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
/**
* The only zone where 'Build Headquarters' is allowed.
* @author Tryskell, reverted version of Gnat's NoHqZone
*/
public class HqZone extends ZoneType
{
public HqZone(final int id)
{
super(id);
}
@Override
protected void onEnter(final Creature character)
{
if (character instanceof PlayerInstance)
{
character.setInsideZone(ZoneId.HQ, true);
}
}
@Override
protected void onExit(final Creature character)
{
if (character instanceof PlayerInstance)
{
character.setInsideZone(ZoneId.HQ, false);
}
}
@Override
public void onDieInside(final Creature character)
{
}
@Override
public void onReviveInside(final Creature character)
{
}
}

View File

@@ -40,7 +40,6 @@ public class MotherTreeZone extends ZoneType
if (creature instanceof PlayerInstance)
{
final PlayerInstance player = (PlayerInstance) creature;
if (player.isInParty())
{
for (PlayerInstance member : player.getParty().getPartyMembers())

View File

@@ -22,41 +22,41 @@ import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
/**
* Zone where 'Build Headquarters' is not allowed.
* @author Gnat
* A simple no restart zone
* @author GKR
*/
public class NoHqZone extends ZoneType
public class NoRestartZone extends ZoneType
{
public NoHqZone(int id)
public NoRestartZone(final int id)
{
super(id);
}
@Override
protected void onEnter(Creature creature)
protected void onEnter(Creature character)
{
if (creature instanceof PlayerInstance)
if (character instanceof PlayerInstance)
{
creature.setInsideZone(ZoneId.NO_HQ, true);
character.setInsideZone(ZoneId.NO_RESTART, true);
}
}
@Override
protected void onExit(Creature creature)
protected void onExit(Creature character)
{
if (creature instanceof PlayerInstance)
if (character instanceof PlayerInstance)
{
creature.setInsideZone(ZoneId.NO_HQ, false);
character.setInsideZone(ZoneId.NO_RESTART, false);
}
}
@Override
public void onDieInside(Creature creature)
public void onDieInside(Creature character)
{
}
@Override
public void onReviveInside(Creature creature)
public void onReviveInside(Creature character)
{
}
}

View File

@@ -0,0 +1,56 @@
/*
* 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 org.l2jmobius.gameserver.model.zone.type;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
/**
* A simple no summon zone
* @author JIV
*/
public class NoSummonFriendZone extends ZoneType
{
public NoSummonFriendZone(int id)
{
super(id);
}
@Override
protected void onEnter(Creature character)
{
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
}
@Override
protected void onExit(Creature character)
{
character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
}
@Override
public void onDieInside(Creature character)
{
}
@Override
public void onReviveInside(Creature character)
{
}
}

View File

@@ -53,6 +53,8 @@ public class OlympiadStadiumZone extends ZoneType
public void onEnter(Creature creature)
{
creature.setInsideZone(ZoneId.PVP, true);
creature.setInsideZone(ZoneId.NO_RESTART, true);
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true);
if (creature instanceof PlayerInstance)
{
@@ -71,6 +73,8 @@ public class OlympiadStadiumZone extends ZoneType
public void onExit(Creature creature)
{
creature.setInsideZone(ZoneId.PVP, false);
creature.setInsideZone(ZoneId.NO_RESTART, false);
creature.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false);
if (creature instanceof PlayerInstance)
{

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.model.zone.type;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
/**
@@ -30,13 +31,15 @@ public class ScriptZone extends ZoneType
}
@Override
protected void onEnter(Creature creature)
protected void onEnter(Creature character)
{
character.setInsideZone(ZoneId.SCRIPT, true);
}
@Override
protected void onExit(Creature creature)
protected void onExit(Creature character)
{
character.setInsideZone(ZoneId.SCRIPT, false);
}
@Override

View File

@@ -16,38 +16,29 @@
*/
package org.l2jmobius.gameserver.model.zone.type;
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Node;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.SpawnZone;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
/**
* A Town zone
* @author durgus
*/
public class TownZone extends ZoneType
public class TownZone extends SpawnZone
{
private String _townName;
private int _townId;
private int _redirectTownId;
private int _taxById;
private boolean _noPeace;
private final List<Location> _spawnLoc;
public TownZone(int id)
{
super(id);
_taxById = 0;
_spawnLoc = new ArrayList<>();
// Default to Giran
_redirectTownId = 9;
@@ -85,12 +76,6 @@ public class TownZone extends ZoneType
}
}
@Override
public void setSpawnLocs(Node node)
{
_spawnLoc.add(new Location(Integer.parseInt(node.getAttributes().getNamedItem("X").getNodeValue()), Integer.parseInt(node.getAttributes().getNamedItem("Y").getNodeValue()), Integer.parseInt(node.getAttributes().getNamedItem("Z").getNodeValue())));
}
@Override
protected void onEnter(Creature creature)
{
@@ -106,6 +91,7 @@ public class TownZone extends ZoneType
creature.setInsideZone(ZoneId.PEACE, true);
}
creature.setInsideZone(ZoneId.TOWN, true);
}
@Override
@@ -115,6 +101,8 @@ public class TownZone extends ZoneType
{
creature.setInsideZone(ZoneId.PEACE, false);
}
creature.setInsideZone(ZoneId.TOWN, false);
}
@Override
@@ -155,15 +143,6 @@ public class TownZone extends ZoneType
return _redirectTownId;
}
/**
* Returns this zones spawn location
* @return
*/
public Location getSpawnLoc()
{
return _spawnLoc.get(Rnd.get(_spawnLoc.size()));
}
/**
* Returns this town zones castle id
* @return

View File

@@ -2096,10 +2096,23 @@ public enum SystemMessageId
PLAYING_FOR_LONG_TIME(764),
/**
* ID: 769 Message: A hacking tool has been discovered. Please try again after closing unnecessary programs.
* ID: 769<br>
* Message: A hacking tool has been discovered. Please try again after closing unnecessary programs.
*/
HACKING_TOOL(769),
/**
* ID: 778<br>
* Message: You may not log out from this location.
*/
NO_LOGOUT_HERE(778),
/**
* ID: 779<br>
* Message: You may not restart in this location.
*/
NO_RESTART_HERE(779),
/**
* ID: 780<br>
* Message: Observation is only possible during a siege.

View File

@@ -50,7 +50,6 @@ public class Action extends GameClientPacket
{
// Get the current PlayerInstance of the player
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
@@ -64,7 +63,6 @@ public class Action extends GameClientPacket
}
final WorldObject obj;
if (player.getTargetId() == _objectId)
{
obj = player.getTarget();

View File

@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.entity.sevensigns.SevenSignsFestival;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
@@ -38,9 +39,8 @@ public class Logout extends GameClientPacket
@Override
protected void runImpl()
{
// Dont allow leaving if player is fighting
// Do not allow leaving if player is fighting
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
@@ -53,7 +53,12 @@ public class Logout extends GameClientPacket
return;
}
player.getInventory().updateDatabase();
if (player.isInsideZone(ZoneId.NO_RESTART))
{
player.sendPacket(SystemMessageId.NO_LOGOUT_HERE);
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
if (AttackStanceTaskManager.getInstance().hasAttackStanceTask(player) && (!player.isGM() || !Config.GM_RESTART_FIGHTING))
{
@@ -62,7 +67,7 @@ public class Logout extends GameClientPacket
return;
}
// Dont allow leaving if player is in combat
// Do not allow leaving if player is in combat
if (player.isInCombat() && !player.isGM())
{
player.sendMessage("You cannot logout while in combat mode.");
@@ -70,7 +75,7 @@ public class Logout extends GameClientPacket
return;
}
// Dont allow leaving if player is teleporting
// Do not allow leaving if player is teleporting
if (player.isTeleporting() && !player.isGM())
{
player.sendMessage("You cannot logout while teleporting.");
@@ -107,6 +112,8 @@ public class Logout extends GameClientPacket
}
}
player.getInventory().updateDatabase();
if (player.isFlying())
{
player.removeSkill(SkillTable.getInstance().getInfo(4289, 1));

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.partymatching.PartyMatchRoom;
@@ -82,8 +82,7 @@ public class RequestOustFromPartyRoom extends GameClientPacket
PartyMatchWaitingList.getInstance().addPlayer(member);
// Send Room list
final int loc = TownManager.getClosestLocation(member);
member.sendPacket(new PartyMatchList(member, 0, loc, member.getLevel()));
member.sendPacket(new PartyMatchList(member, 0, MapRegionData.getInstance().getClosestLocation(member.getX(), member.getY()), member.getLevel()));
// Clean player's LFP title
member.broadcastUserInfo();

View File

@@ -69,14 +69,14 @@ public class RequestRecipeShopListSet extends GameClientPacket
if (player.isTradeDisabled())
{
player.sendMessage("Private manufacture is disabled here. Try in another place.");
player.sendMessage("Private manufacture is disabled here. Try another place.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
if (player.isInsideZone(ZoneId.NO_STORE))
{
player.sendMessage("Private manufacture is disabled here. Try in another place.");
player.sendMessage("Private manufacture is disabled here. Try another place.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}

View File

@@ -26,6 +26,7 @@ import org.l2jmobius.gameserver.model.Party;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.entity.sevensigns.SevenSignsFestival;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.GameClient.GameClientState;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -49,11 +50,8 @@ public class RequestRestart extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
// Check if player is == null
if (player == null)
{
LOGGER.warning("[RequestRestart] activeChar null!?");
return;
}
@@ -64,6 +62,13 @@ public class RequestRestart extends GameClientPacket
return;
}
if (player.isInsideZone(ZoneId.NO_RESTART))
{
player.sendPacket(SystemMessageId.NO_RESTART_HERE);
sendPacket(RestartResponse.valueOf(false));
return;
}
// Check if player are changing class
if (player.isLocked())
{
@@ -72,8 +77,6 @@ public class RequestRestart extends GameClientPacket
return;
}
player.getInventory().updateDatabase();
// Check if player is in private store
if (player.getPrivateStoreType() != 0)
{
@@ -126,6 +129,8 @@ public class RequestRestart extends GameClientPacket
return;
}
player.getInventory().updateDatabase();
// Fix against exploit anti-target
if (player.isCastingNow())
{

View File

@@ -54,6 +54,40 @@ public class RequestRestartPoint extends GameClientPacket
_requestedPointType = readD();
}
@Override
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
if (player.isFakeDeath())
{
player.stopFakeDeath(null);
player.broadcastPacket(new Revive(player));
return;
}
else if (!player.isAlikeDead())
{
LOGGER.warning("Living player [" + player.getName() + "] called RestartPointPacket! Ban this player!");
return;
}
final Castle castle = CastleManager.getInstance().getCastle(player.getX(), player.getY(), player.getZ());
if ((castle != null) && castle.getSiege().isInProgress() && (player.getClan() != null) && castle.getSiege().checkIsAttacker(player.getClan()))
{
// Schedule respawn delay for attacker
ThreadPool.schedule(new DeathTask(player), castle.getSiege().getAttackerRespawnDelay());
player.sendMessage("You will be re-spawned in " + (castle.getSiege().getAttackerRespawnDelay() / 1000) + " seconds");
return;
}
// Run immediately (no need to schedule)
new DeathTask(player).run();
}
class DeathTask implements Runnable
{
PlayerInstance _player;
@@ -71,6 +105,7 @@ public class RequestRestartPoint extends GameClientPacket
_player.sendMessage("You cannot restart while participating in an event!");
return;
}
try
{
Location loc = null;
@@ -213,38 +248,4 @@ public class RequestRestartPoint extends GameClientPacket
}
}
}
@Override
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
if (player.isFakeDeath())
{
player.stopFakeDeath(null);
player.broadcastPacket(new Revive(player));
return;
}
else if (!player.isAlikeDead())
{
LOGGER.warning("Living player [" + player.getName() + "] called RestartPointPacket! Ban this player!");
return;
}
final Castle castle = CastleManager.getInstance().getCastle(player.getX(), player.getY(), player.getZ());
if ((castle != null) && castle.getSiege().isInProgress() && (player.getClan() != null) && castle.getSiege().checkIsAttacker(player.getClan()))
{
// Schedule respawn delay for attacker
ThreadPool.schedule(new DeathTask(player), castle.getSiege().getAttackerRespawnDelay());
player.sendMessage("You will be re-spawned in " + (castle.getSiege().getAttackerRespawnDelay() / 1000) + " seconds");
return;
}
// run immediately (no need to schedule)
new DeathTask(player).run();
}
}

View File

@@ -99,7 +99,7 @@ public class SetPrivateStoreListBuy extends GameClientPacket
if (player.isInsideZone(ZoneId.NO_STORE))
{
player.sendPacket(new PrivateStoreManageListBuy(player));
player.sendMessage("Trade are disable here. Try in another place.");
player.sendMessage("Trade is disable here. Try another place.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}

View File

@@ -99,7 +99,7 @@ public class SetPrivateStoreListSell extends GameClientPacket
if (player.isInsideZone(ZoneId.NO_STORE))
{
player.sendPacket(new PrivateStoreManageListSell(player));
player.sendMessage("Trade are disable here. Try in another place.");
player.sendMessage("Trade is disable here. Try another place.");
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.partymatching.PartyMatchRoom;
@@ -46,7 +46,7 @@ public class ExManagePartyRoomMember extends GameServerPacket
writeS(_player.getName());
writeD(_player.getActiveClass());
writeD(_player.getLevel());
writeD(TownManager.getClosestLocation(_player));
writeD(MapRegionData.getInstance().getClosestLocation(_player.getX(), _player.getY()));
if (_room.getOwner().equals(_player))
{
writeD(1);

View File

@@ -16,7 +16,7 @@
*/
package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.gameserver.instancemanager.TownManager;
import org.l2jmobius.gameserver.datatables.xml.MapRegionData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.partymatching.PartyMatchRoom;
@@ -41,18 +41,18 @@ public class ExPartyRoomMember extends GameServerPacket
writeH(0x0e);
writeD(_mode);
writeD(_room.getMembers());
for (PlayerInstance _member : _room.getPartyMembers())
for (PlayerInstance member : _room.getPartyMembers())
{
writeD(_member.getObjectId());
writeS(_member.getName());
writeD(_member.getActiveClass());
writeD(_member.getLevel());
writeD(TownManager.getClosestLocation(_member));
if (_room.getOwner().equals(_member))
writeD(member.getObjectId());
writeS(member.getName());
writeD(member.getActiveClass());
writeD(member.getLevel());
writeD(MapRegionData.getInstance().getClosestLocation(member.getX(), member.getY()));
if (_room.getOwner().equals(member))
{
writeD(1);
}
else if ((_room.getOwner().isInParty() && _member.isInParty()) && (_room.getOwner().getParty().getPartyLeaderOID() == _member.getParty().getPartyLeaderOID()))
else if ((_room.getOwner().isInParty() && member.isInParty()) && (_room.getOwner().getParty().getPartyLeaderOID() == member.getParty().getPartyLeaderOID()))
{
writeD(2);
}

View File

@@ -758,8 +758,8 @@ public class GameStatusThread extends Thread
}
else if (type.equals("zone"))
{
_print.print("Reloading zone tables... ");
ZoneData.getInstance().load();
_print.print("Reloading zones... ");
ZoneData.getInstance().reload();
_print.println("done");
}
else if (type.equals("teleports"))