Addition of Crystal Cavern instances.

Author: St3eT
Adapted from: L2jUnity free files.
This commit is contained in:
MobiusDevelopment 2019-11-02 15:45:52 +00:00
parent 8a8b5c0cb6
commit e9abca9dbe
120 changed files with 39216 additions and 16 deletions

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

View File

@ -0,0 +1,408 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.TeleportZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Steam Corridor instance zone.
* @author St3eT
*/
public class CrystalCavernsSteamCorridor extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int KECHI_NORMAL = 25797;
private static final int KECHI_WISE = 26113;
private static final int KECHI_WEALTHY = 26112;
private static final int KECHI_ARMED = 26111;
private static final int VICIOUS_DUELER = 23014;
private static final int VICIOUS_WARRIOR = 23016;
private static final int VICIOUS_SWORDSMAN = 23015;
private static final int SPIRIT_PROTECTOR = 23013;
private static final int FIRE_REGION = 19161;
private static final int PLAYER_DETECTOR = 19075;
private static final int TRAP_1 = 19011;
private static final int TRAP_2 = 19012;
// Skills
private static final SkillHolder FIRE_SKILL_1 = new SkillHolder(14373, 1);
private static final SkillHolder FIRE_SKILL_2 = new SkillHolder(14373, 2);
private static final SkillHolder FIRE_SKILL_3 = new SkillHolder(14197, 1);
private static final SkillHolder TRAP_SKILL_1 = new SkillHolder(14180, 1);
private static final SkillHolder TRAP_SKILL_2 = new SkillHolder(14181, 1);
private static final SkillHolder TRAP_SKILL_3 = new SkillHolder(14372, 1);
// Location
private static final Location BOSS_LOC = new Location(154078, 215125, -12140);
// Misc
private static final int TEMPLATE_ID = 164;
public CrystalCavernsSteamCorridor()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addAttackId(TRAP_1, TRAP_2);
addKillId(VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, KECHI_NORMAL, KECHI_WISE, KECHI_WEALTHY, KECHI_ARMED);
addSpawnId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, FIRE_REGION, PLAYER_DETECTOR);
addEventReceivedId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN);
addInstanceCreatedId(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, PLAYER_DETECTOR);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "FIRE_REGION_TIMER_1":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_1, 23);
getTimers().addTimer("FIRE_REGION_TIMER_2", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_2":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_2, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_3":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_3, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 1000, npc, null);
break;
}
case "TRAP_REACT_TIMER":
{
final int timer = npcVars.increaseInt("TIMER_VAL", -1);
if (timer > 0)
{
npc.broadcastSay(ChatType.NPC_GENERAL, " " + timer);
}
else
{
if (npc.getId() == TRAP_1)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_1 : TRAP_SKILL_3), 23);
}
else if (npc.getId() == TRAP_2)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_2 : TRAP_SKILL_3), 23);
}
}
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceCreated(Instance instance, PlayerInstance player)
{
instance.setStatus(1);
for (int i = 0; i < 6; i++)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName("24_24_fire_telezone_0" + i, TeleportZone.class);
if (zone != null)
{
zone.setEnabled(false, instance.getId());
}
}
super.onInstanceCreated(instance, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case SPIRIT_PROTECTOR:
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
npc.setTargetable(false);
npc.disableCoreAI(true);
npc.setInvisible(true);
break;
}
case FIRE_REGION:
{
final int timeLimit = npcParams.getInt("Limit_Time", 0);
if (timeLimit > 0)
{
getTimers().addTimer("FIRE_REGION_TIMER_1", ((timeLimit * 30) * 100), npc, null);
}
npc.setTargetable(false);
npc.setIsInvul(true);
npc.setRandomAnimation(false);
npc.setRandomWalking(false);
npc.disableCoreAI(true);
break;
}
case PLAYER_DETECTOR:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
@Override
public String onEventReceived(String eventName, Npc sender, Npc receiver, WorldObject reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = receiver.getParameters();
if (eventName.equals(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0))))
{
receiver.setTargetable(true);
receiver.disableCoreAI(false);
receiver.setInvisible(false);
}
}
return super.onEventReceived(eventName, sender, receiver, reference);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case TRAP_1:
case TRAP_2:
{
if (npc.isScriptValue(0))
{
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
npc.setScriptValue(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int killTarget = instance.getParameters().getInt("KILL_TARGET", 5);
int currentKillCount = instance.getParameters().getInt("KILL_COUNT", 0);
switch (npc.getId())
{
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
if (npcParams.getInt("last_checker", 0) == 1)
{
currentKillCount = instance.getParameters().increaseInt("KILL_COUNT", 0, 1);
if (currentKillCount >= killTarget)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName(npc.getParameters().getString("AreaTeleName"), TeleportZone.class);
if (zone != null)
{
zone.setEnabled(true, instance.getId());
showOnScreenMsg(instance, NpcStringId.THE_PORTAL_TO_THE_NEXT_ROOM_IS_NOW_OPEN, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.spawnGroup("innadril23_mb2422_pt" + instance.getStatus() + "m1");
instance.getParameters().set("KILL_COUNT", 0);
switch (instance.getStatus())
{
case 1:
{
instance.getParameters().set("KILL_TARGET", 12);
instance.setStatus(2);
break;
}
case 2:
{
instance.getParameters().set("KILL_TARGET", 3);
instance.setStatus(3);
break;
}
case 3:
{
instance.getParameters().set("KILL_TARGET", 18);
instance.setStatus(4);
break;
}
case 4:
{
instance.getParameters().set("KILL_TARGET", 5);
instance.setStatus(5);
break;
}
case 5:
{
instance.getParameters().set("KILL_TARGET", 20);
instance.setStatus(6);
break;
}
case 6:
{
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = KECHI_NORMAL;
}
else if (random < 80)
{
bossId = KECHI_WISE;
}
else if (random < 95)
{
bossId = KECHI_WEALTHY;
}
else
{
bossId = KECHI_ARMED;
}
addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
break;
}
}
}
else
{
LOGGER.warning("Cannot find teleport zone for Crystal Cavern: Steam Corridor instance!!!");
}
}
}
break;
}
case KECHI_NORMAL:
case KECHI_WISE:
case KECHI_WEALTHY:
case KECHI_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
private void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && creature.isPlayer())
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case PLAYER_DETECTOR:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.broadcastEvent(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0)), 2000, null);
for (int i = 0; i < getRandom(5); i++)
{
final Npc trap = addSpawn(((npcParams.getInt("MobType", 0) == 0) ? TRAP_1 : TRAP_2), npc, true, 0, false, instance.getId());
trap.getVariables().set("TIMER_VAL", 4);
}
npc.deleteMe();
}
break;
}
}
}
}
public static void main(String[] args)
{
new CrystalCavernsSteamCorridor();
}
}

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
You must be in a party to enter.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
The leader of the party should try to enter.
</body></html>

View File

@ -366,7 +366,7 @@
<height normal="13" />
</collision>
</npc>
<npc id="19013" level="96" type="Npc" name="Crystalline Golem">
<npc id="19013" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />
@ -403,7 +403,7 @@
<height normal="47" />
</collision>
</npc>
<npc id="19014" level="96" type="Npc" name="Crystalline Golem">
<npc id="19014" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />

View File

@ -154,6 +154,72 @@
<node X="108616" Y="-41676" />
<node X="108816" Y="-40776" />
<node X="107856" Y="-40652" />
</zone>
<zone name="24_24_fire_telezone_01" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="147444" />
<stat name="oustY" val="218208" />
<stat name="oustZ" val="-12117" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="147204" Y="218138" />
<node X="147200" Y="218279" />
<node X="147138" Y="218278" />
<node X="147133" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_02" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="150143" />
<stat name="oustY" val="218205" />
<stat name="oustZ" val="-12121" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="149886" Y="218138" />
<node X="149884" Y="218278" />
<node X="149822" Y="218274" />
<node X="149833" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_03" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="145610" />
<stat name="oustY" val="220065" />
<stat name="oustZ" val="-12106" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152585" Y="218139" />
<node X="152579" Y="218276" />
<node X="152514" Y="218272" />
<node X="152521" Y="218134" />
</zone>
<zone name="24_24_fire_telezone_04" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="148309" />
<stat name="oustY" val="220064" />
<stat name="oustZ" val="-12118" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="148064" Y="219993" />
<node X="148061" Y="220133" />
<node X="147999" Y="220129" />
<node X="148007" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_05" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="149761" />
<stat name="oustY" val="215582" />
<stat name="oustZ" val="-12104" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="150747" Y="219991" />
<node X="150748" Y="220132" />
<node X="150688" Y="220134" />
<node X="150697" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_06" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="153400" />
<stat name="oustY" val="215138" />
<stat name="oustZ" val="-12102" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152267" Y="215518" />
<node X="152258" Y="215654" />
<node X="152173" Y="215653" />
<node X="152180" Y="215514" />
</zone>
<zone name="26_20_orbis_enter" type="TeleportZone" shape="NPoly" minZ="-458" maxZ="-158">
<stat name="oustX" val="213983" />

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

View File

@ -0,0 +1,408 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.TeleportZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Steam Corridor instance zone.
* @author St3eT
*/
public class CrystalCavernsSteamCorridor extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int KECHI_NORMAL = 25797;
private static final int KECHI_WISE = 26113;
private static final int KECHI_WEALTHY = 26112;
private static final int KECHI_ARMED = 26111;
private static final int VICIOUS_DUELER = 23014;
private static final int VICIOUS_WARRIOR = 23016;
private static final int VICIOUS_SWORDSMAN = 23015;
private static final int SPIRIT_PROTECTOR = 23013;
private static final int FIRE_REGION = 19161;
private static final int PLAYER_DETECTOR = 19075;
private static final int TRAP_1 = 19011;
private static final int TRAP_2 = 19012;
// Skills
private static final SkillHolder FIRE_SKILL_1 = new SkillHolder(14373, 1);
private static final SkillHolder FIRE_SKILL_2 = new SkillHolder(14373, 2);
private static final SkillHolder FIRE_SKILL_3 = new SkillHolder(14197, 1);
private static final SkillHolder TRAP_SKILL_1 = new SkillHolder(14180, 1);
private static final SkillHolder TRAP_SKILL_2 = new SkillHolder(14181, 1);
private static final SkillHolder TRAP_SKILL_3 = new SkillHolder(14372, 1);
// Location
private static final Location BOSS_LOC = new Location(154078, 215125, -12140);
// Misc
private static final int TEMPLATE_ID = 164;
public CrystalCavernsSteamCorridor()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addAttackId(TRAP_1, TRAP_2);
addKillId(VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, KECHI_NORMAL, KECHI_WISE, KECHI_WEALTHY, KECHI_ARMED);
addSpawnId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, FIRE_REGION, PLAYER_DETECTOR);
addEventReceivedId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN);
addInstanceCreatedId(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, PLAYER_DETECTOR);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "FIRE_REGION_TIMER_1":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_1, 23);
getTimers().addTimer("FIRE_REGION_TIMER_2", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_2":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_2, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_3":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_3, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 1000, npc, null);
break;
}
case "TRAP_REACT_TIMER":
{
final int timer = npcVars.increaseInt("TIMER_VAL", -1);
if (timer > 0)
{
npc.broadcastSay(ChatType.NPC_GENERAL, " " + timer);
}
else
{
if (npc.getId() == TRAP_1)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_1 : TRAP_SKILL_3), 23);
}
else if (npc.getId() == TRAP_2)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_2 : TRAP_SKILL_3), 23);
}
}
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceCreated(Instance instance, PlayerInstance player)
{
instance.setStatus(1);
for (int i = 0; i < 6; i++)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName("24_24_fire_telezone_0" + i, TeleportZone.class);
if (zone != null)
{
zone.setEnabled(false, instance.getId());
}
}
super.onInstanceCreated(instance, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case SPIRIT_PROTECTOR:
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
npc.setTargetable(false);
npc.disableCoreAI(true);
npc.setInvisible(true);
break;
}
case FIRE_REGION:
{
final int timeLimit = npcParams.getInt("Limit_Time", 0);
if (timeLimit > 0)
{
getTimers().addTimer("FIRE_REGION_TIMER_1", ((timeLimit * 30) * 100), npc, null);
}
npc.setTargetable(false);
npc.setIsInvul(true);
npc.setRandomAnimation(false);
npc.setRandomWalking(false);
npc.disableCoreAI(true);
break;
}
case PLAYER_DETECTOR:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
@Override
public String onEventReceived(String eventName, Npc sender, Npc receiver, WorldObject reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = receiver.getParameters();
if (eventName.equals(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0))))
{
receiver.setTargetable(true);
receiver.disableCoreAI(false);
receiver.setInvisible(false);
}
}
return super.onEventReceived(eventName, sender, receiver, reference);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case TRAP_1:
case TRAP_2:
{
if (npc.isScriptValue(0))
{
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
npc.setScriptValue(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int killTarget = instance.getParameters().getInt("KILL_TARGET", 5);
int currentKillCount = instance.getParameters().getInt("KILL_COUNT", 0);
switch (npc.getId())
{
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
if (npcParams.getInt("last_checker", 0) == 1)
{
currentKillCount = instance.getParameters().increaseInt("KILL_COUNT", 0, 1);
if (currentKillCount >= killTarget)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName(npc.getParameters().getString("AreaTeleName"), TeleportZone.class);
if (zone != null)
{
zone.setEnabled(true, instance.getId());
showOnScreenMsg(instance, NpcStringId.THE_PORTAL_TO_THE_NEXT_ROOM_IS_NOW_OPEN, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.spawnGroup("innadril23_mb2422_pt" + instance.getStatus() + "m1");
instance.getParameters().set("KILL_COUNT", 0);
switch (instance.getStatus())
{
case 1:
{
instance.getParameters().set("KILL_TARGET", 12);
instance.setStatus(2);
break;
}
case 2:
{
instance.getParameters().set("KILL_TARGET", 3);
instance.setStatus(3);
break;
}
case 3:
{
instance.getParameters().set("KILL_TARGET", 18);
instance.setStatus(4);
break;
}
case 4:
{
instance.getParameters().set("KILL_TARGET", 5);
instance.setStatus(5);
break;
}
case 5:
{
instance.getParameters().set("KILL_TARGET", 20);
instance.setStatus(6);
break;
}
case 6:
{
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = KECHI_NORMAL;
}
else if (random < 80)
{
bossId = KECHI_WISE;
}
else if (random < 95)
{
bossId = KECHI_WEALTHY;
}
else
{
bossId = KECHI_ARMED;
}
addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
break;
}
}
}
else
{
LOGGER.warning("Cannot find teleport zone for Crystal Cavern: Steam Corridor instance!!!");
}
}
}
break;
}
case KECHI_NORMAL:
case KECHI_WISE:
case KECHI_WEALTHY:
case KECHI_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
private void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && creature.isPlayer())
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case PLAYER_DETECTOR:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.broadcastEvent(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0)), 2000, null);
for (int i = 0; i < getRandom(5); i++)
{
final Npc trap = addSpawn(((npcParams.getInt("MobType", 0) == 0) ? TRAP_1 : TRAP_2), npc, true, 0, false, instance.getId());
trap.getVariables().set("TIMER_VAL", 4);
}
npc.deleteMe();
}
break;
}
}
}
}
public static void main(String[] args)
{
new CrystalCavernsSteamCorridor();
}
}

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
You must be in a party to enter.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
The leader of the party should try to enter.
</body></html>

View File

@ -366,7 +366,7 @@
<height normal="13" />
</collision>
</npc>
<npc id="19013" level="96" type="Npc" name="Crystalline Golem">
<npc id="19013" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />
@ -403,7 +403,7 @@
<height normal="47" />
</collision>
</npc>
<npc id="19014" level="96" type="Npc" name="Crystalline Golem">
<npc id="19014" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />

View File

@ -154,6 +154,72 @@
<node X="108616" Y="-41676" />
<node X="108816" Y="-40776" />
<node X="107856" Y="-40652" />
</zone>
<zone name="24_24_fire_telezone_01" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="147444" />
<stat name="oustY" val="218208" />
<stat name="oustZ" val="-12117" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="147204" Y="218138" />
<node X="147200" Y="218279" />
<node X="147138" Y="218278" />
<node X="147133" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_02" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="150143" />
<stat name="oustY" val="218205" />
<stat name="oustZ" val="-12121" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="149886" Y="218138" />
<node X="149884" Y="218278" />
<node X="149822" Y="218274" />
<node X="149833" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_03" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="145610" />
<stat name="oustY" val="220065" />
<stat name="oustZ" val="-12106" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152585" Y="218139" />
<node X="152579" Y="218276" />
<node X="152514" Y="218272" />
<node X="152521" Y="218134" />
</zone>
<zone name="24_24_fire_telezone_04" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="148309" />
<stat name="oustY" val="220064" />
<stat name="oustZ" val="-12118" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="148064" Y="219993" />
<node X="148061" Y="220133" />
<node X="147999" Y="220129" />
<node X="148007" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_05" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="149761" />
<stat name="oustY" val="215582" />
<stat name="oustZ" val="-12104" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="150747" Y="219991" />
<node X="150748" Y="220132" />
<node X="150688" Y="220134" />
<node X="150697" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_06" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="153400" />
<stat name="oustY" val="215138" />
<stat name="oustZ" val="-12102" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152267" Y="215518" />
<node X="152258" Y="215654" />
<node X="152173" Y="215653" />
<node X="152180" Y="215514" />
</zone>
<zone name="26_20_orbis_enter" type="TeleportZone" shape="NPoly" minZ="-458" maxZ="-158">
<stat name="oustX" val="213983" />

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

View File

@ -0,0 +1,408 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.TeleportZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Steam Corridor instance zone.
* @author St3eT
*/
public class CrystalCavernsSteamCorridor extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int KECHI_NORMAL = 25797;
private static final int KECHI_WISE = 26113;
private static final int KECHI_WEALTHY = 26112;
private static final int KECHI_ARMED = 26111;
private static final int VICIOUS_DUELER = 23014;
private static final int VICIOUS_WARRIOR = 23016;
private static final int VICIOUS_SWORDSMAN = 23015;
private static final int SPIRIT_PROTECTOR = 23013;
private static final int FIRE_REGION = 19161;
private static final int PLAYER_DETECTOR = 19075;
private static final int TRAP_1 = 19011;
private static final int TRAP_2 = 19012;
// Skills
private static final SkillHolder FIRE_SKILL_1 = new SkillHolder(14373, 1);
private static final SkillHolder FIRE_SKILL_2 = new SkillHolder(14373, 2);
private static final SkillHolder FIRE_SKILL_3 = new SkillHolder(14197, 1);
private static final SkillHolder TRAP_SKILL_1 = new SkillHolder(14180, 1);
private static final SkillHolder TRAP_SKILL_2 = new SkillHolder(14181, 1);
private static final SkillHolder TRAP_SKILL_3 = new SkillHolder(14372, 1);
// Location
private static final Location BOSS_LOC = new Location(154078, 215125, -12140);
// Misc
private static final int TEMPLATE_ID = 164;
public CrystalCavernsSteamCorridor()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addAttackId(TRAP_1, TRAP_2);
addKillId(VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, KECHI_NORMAL, KECHI_WISE, KECHI_WEALTHY, KECHI_ARMED);
addSpawnId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, FIRE_REGION, PLAYER_DETECTOR);
addEventReceivedId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN);
addInstanceCreatedId(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, PLAYER_DETECTOR);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "FIRE_REGION_TIMER_1":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_1, 23);
getTimers().addTimer("FIRE_REGION_TIMER_2", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_2":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_2, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_3":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_3, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 1000, npc, null);
break;
}
case "TRAP_REACT_TIMER":
{
final int timer = npcVars.increaseInt("TIMER_VAL", -1);
if (timer > 0)
{
npc.broadcastSay(ChatType.NPC_GENERAL, " " + timer);
}
else
{
if (npc.getId() == TRAP_1)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_1 : TRAP_SKILL_3), 23);
}
else if (npc.getId() == TRAP_2)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_2 : TRAP_SKILL_3), 23);
}
}
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceCreated(Instance instance, PlayerInstance player)
{
instance.setStatus(1);
for (int i = 0; i < 6; i++)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName("24_24_fire_telezone_0" + i, TeleportZone.class);
if (zone != null)
{
zone.setEnabled(false, instance.getId());
}
}
super.onInstanceCreated(instance, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case SPIRIT_PROTECTOR:
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
npc.setTargetable(false);
npc.disableCoreAI(true);
npc.setInvisible(true);
break;
}
case FIRE_REGION:
{
final int timeLimit = npcParams.getInt("Limit_Time", 0);
if (timeLimit > 0)
{
getTimers().addTimer("FIRE_REGION_TIMER_1", ((timeLimit * 30) * 100), npc, null);
}
npc.setTargetable(false);
npc.setIsInvul(true);
npc.setRandomAnimation(false);
npc.setRandomWalking(false);
npc.disableCoreAI(true);
break;
}
case PLAYER_DETECTOR:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
@Override
public String onEventReceived(String eventName, Npc sender, Npc receiver, WorldObject reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = receiver.getParameters();
if (eventName.equals(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0))))
{
receiver.setTargetable(true);
receiver.disableCoreAI(false);
receiver.setInvisible(false);
}
}
return super.onEventReceived(eventName, sender, receiver, reference);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case TRAP_1:
case TRAP_2:
{
if (npc.isScriptValue(0))
{
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
npc.setScriptValue(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int killTarget = instance.getParameters().getInt("KILL_TARGET", 5);
int currentKillCount = instance.getParameters().getInt("KILL_COUNT", 0);
switch (npc.getId())
{
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
if (npcParams.getInt("last_checker", 0) == 1)
{
currentKillCount = instance.getParameters().increaseInt("KILL_COUNT", 0, 1);
if (currentKillCount >= killTarget)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName(npc.getParameters().getString("AreaTeleName"), TeleportZone.class);
if (zone != null)
{
zone.setEnabled(true, instance.getId());
showOnScreenMsg(instance, NpcStringId.THE_PORTAL_TO_THE_NEXT_ROOM_IS_NOW_OPEN, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.spawnGroup("innadril23_mb2422_pt" + instance.getStatus() + "m1");
instance.getParameters().set("KILL_COUNT", 0);
switch (instance.getStatus())
{
case 1:
{
instance.getParameters().set("KILL_TARGET", 12);
instance.setStatus(2);
break;
}
case 2:
{
instance.getParameters().set("KILL_TARGET", 3);
instance.setStatus(3);
break;
}
case 3:
{
instance.getParameters().set("KILL_TARGET", 18);
instance.setStatus(4);
break;
}
case 4:
{
instance.getParameters().set("KILL_TARGET", 5);
instance.setStatus(5);
break;
}
case 5:
{
instance.getParameters().set("KILL_TARGET", 20);
instance.setStatus(6);
break;
}
case 6:
{
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = KECHI_NORMAL;
}
else if (random < 80)
{
bossId = KECHI_WISE;
}
else if (random < 95)
{
bossId = KECHI_WEALTHY;
}
else
{
bossId = KECHI_ARMED;
}
addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
break;
}
}
}
else
{
LOGGER.warning("Cannot find teleport zone for Crystal Cavern: Steam Corridor instance!!!");
}
}
}
break;
}
case KECHI_NORMAL:
case KECHI_WISE:
case KECHI_WEALTHY:
case KECHI_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
private void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && creature.isPlayer())
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case PLAYER_DETECTOR:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.broadcastEvent(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0)), 2000, null);
for (int i = 0; i < getRandom(5); i++)
{
final Npc trap = addSpawn(((npcParams.getInt("MobType", 0) == 0) ? TRAP_1 : TRAP_2), npc, true, 0, false, instance.getId());
trap.getVariables().set("TIMER_VAL", 4);
}
npc.deleteMe();
}
break;
}
}
}
}
public static void main(String[] args)
{
new CrystalCavernsSteamCorridor();
}
}

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
You must be in a party to enter.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
The leader of the party should try to enter.
</body></html>

View File

@ -366,7 +366,7 @@
<height normal="13" />
</collision>
</npc>
<npc id="19013" level="96" type="Npc" name="Crystalline Golem">
<npc id="19013" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />
@ -403,7 +403,7 @@
<height normal="47" />
</collision>
</npc>
<npc id="19014" level="96" type="Npc" name="Crystalline Golem">
<npc id="19014" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />

View File

@ -154,6 +154,72 @@
<node X="108616" Y="-41676" />
<node X="108816" Y="-40776" />
<node X="107856" Y="-40652" />
</zone>
<zone name="24_24_fire_telezone_01" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="147444" />
<stat name="oustY" val="218208" />
<stat name="oustZ" val="-12117" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="147204" Y="218138" />
<node X="147200" Y="218279" />
<node X="147138" Y="218278" />
<node X="147133" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_02" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="150143" />
<stat name="oustY" val="218205" />
<stat name="oustZ" val="-12121" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="149886" Y="218138" />
<node X="149884" Y="218278" />
<node X="149822" Y="218274" />
<node X="149833" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_03" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="145610" />
<stat name="oustY" val="220065" />
<stat name="oustZ" val="-12106" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152585" Y="218139" />
<node X="152579" Y="218276" />
<node X="152514" Y="218272" />
<node X="152521" Y="218134" />
</zone>
<zone name="24_24_fire_telezone_04" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="148309" />
<stat name="oustY" val="220064" />
<stat name="oustZ" val="-12118" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="148064" Y="219993" />
<node X="148061" Y="220133" />
<node X="147999" Y="220129" />
<node X="148007" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_05" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="149761" />
<stat name="oustY" val="215582" />
<stat name="oustZ" val="-12104" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="150747" Y="219991" />
<node X="150748" Y="220132" />
<node X="150688" Y="220134" />
<node X="150697" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_06" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="153400" />
<stat name="oustY" val="215138" />
<stat name="oustZ" val="-12102" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152267" Y="215518" />
<node X="152258" Y="215654" />
<node X="152173" Y="215653" />
<node X="152180" Y="215514" />
</zone>
<zone name="26_20_orbis_enter" type="TeleportZone" shape="NPoly" minZ="-458" maxZ="-158">
<stat name="oustX" val="213983" />

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

View File

@ -0,0 +1,408 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.TeleportZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Steam Corridor instance zone.
* @author St3eT
*/
public class CrystalCavernsSteamCorridor extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int KECHI_NORMAL = 25797;
private static final int KECHI_WISE = 26113;
private static final int KECHI_WEALTHY = 26112;
private static final int KECHI_ARMED = 26111;
private static final int VICIOUS_DUELER = 23014;
private static final int VICIOUS_WARRIOR = 23016;
private static final int VICIOUS_SWORDSMAN = 23015;
private static final int SPIRIT_PROTECTOR = 23013;
private static final int FIRE_REGION = 19161;
private static final int PLAYER_DETECTOR = 19075;
private static final int TRAP_1 = 19011;
private static final int TRAP_2 = 19012;
// Skills
private static final SkillHolder FIRE_SKILL_1 = new SkillHolder(14373, 1);
private static final SkillHolder FIRE_SKILL_2 = new SkillHolder(14373, 2);
private static final SkillHolder FIRE_SKILL_3 = new SkillHolder(14197, 1);
private static final SkillHolder TRAP_SKILL_1 = new SkillHolder(14180, 1);
private static final SkillHolder TRAP_SKILL_2 = new SkillHolder(14181, 1);
private static final SkillHolder TRAP_SKILL_3 = new SkillHolder(14372, 1);
// Location
private static final Location BOSS_LOC = new Location(154078, 215125, -12140);
// Misc
private static final int TEMPLATE_ID = 164;
public CrystalCavernsSteamCorridor()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addAttackId(TRAP_1, TRAP_2);
addKillId(VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, KECHI_NORMAL, KECHI_WISE, KECHI_WEALTHY, KECHI_ARMED);
addSpawnId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, FIRE_REGION, PLAYER_DETECTOR);
addEventReceivedId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN);
addInstanceCreatedId(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, PLAYER_DETECTOR);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "FIRE_REGION_TIMER_1":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_1, 23);
getTimers().addTimer("FIRE_REGION_TIMER_2", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_2":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_2, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_3":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_3, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 1000, npc, null);
break;
}
case "TRAP_REACT_TIMER":
{
final int timer = npcVars.increaseInt("TIMER_VAL", -1);
if (timer > 0)
{
npc.broadcastSay(ChatType.NPC_GENERAL, " " + timer);
}
else
{
if (npc.getId() == TRAP_1)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_1 : TRAP_SKILL_3), 23);
}
else if (npc.getId() == TRAP_2)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_2 : TRAP_SKILL_3), 23);
}
}
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceCreated(Instance instance, PlayerInstance player)
{
instance.setStatus(1);
for (int i = 0; i < 6; i++)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName("24_24_fire_telezone_0" + i, TeleportZone.class);
if (zone != null)
{
zone.setEnabled(false, instance.getId());
}
}
super.onInstanceCreated(instance, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case SPIRIT_PROTECTOR:
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
npc.setTargetable(false);
npc.disableCoreAI(true);
npc.setInvisible(true);
break;
}
case FIRE_REGION:
{
final int timeLimit = npcParams.getInt("Limit_Time", 0);
if (timeLimit > 0)
{
getTimers().addTimer("FIRE_REGION_TIMER_1", ((timeLimit * 30) * 100), npc, null);
}
npc.setTargetable(false);
npc.setIsInvul(true);
npc.setRandomAnimation(false);
npc.setRandomWalking(false);
npc.disableCoreAI(true);
break;
}
case PLAYER_DETECTOR:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
@Override
public String onEventReceived(String eventName, Npc sender, Npc receiver, WorldObject reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = receiver.getParameters();
if (eventName.equals(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0))))
{
receiver.setTargetable(true);
receiver.disableCoreAI(false);
receiver.setInvisible(false);
}
}
return super.onEventReceived(eventName, sender, receiver, reference);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case TRAP_1:
case TRAP_2:
{
if (npc.isScriptValue(0))
{
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
npc.setScriptValue(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int killTarget = instance.getParameters().getInt("KILL_TARGET", 5);
int currentKillCount = instance.getParameters().getInt("KILL_COUNT", 0);
switch (npc.getId())
{
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
if (npcParams.getInt("last_checker", 0) == 1)
{
currentKillCount = instance.getParameters().increaseInt("KILL_COUNT", 0, 1);
if (currentKillCount >= killTarget)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName(npc.getParameters().getString("AreaTeleName"), TeleportZone.class);
if (zone != null)
{
zone.setEnabled(true, instance.getId());
showOnScreenMsg(instance, NpcStringId.THE_PORTAL_TO_THE_NEXT_ROOM_IS_NOW_OPEN, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.spawnGroup("innadril23_mb2422_pt" + instance.getStatus() + "m1");
instance.getParameters().set("KILL_COUNT", 0);
switch (instance.getStatus())
{
case 1:
{
instance.getParameters().set("KILL_TARGET", 12);
instance.setStatus(2);
break;
}
case 2:
{
instance.getParameters().set("KILL_TARGET", 3);
instance.setStatus(3);
break;
}
case 3:
{
instance.getParameters().set("KILL_TARGET", 18);
instance.setStatus(4);
break;
}
case 4:
{
instance.getParameters().set("KILL_TARGET", 5);
instance.setStatus(5);
break;
}
case 5:
{
instance.getParameters().set("KILL_TARGET", 20);
instance.setStatus(6);
break;
}
case 6:
{
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = KECHI_NORMAL;
}
else if (random < 80)
{
bossId = KECHI_WISE;
}
else if (random < 95)
{
bossId = KECHI_WEALTHY;
}
else
{
bossId = KECHI_ARMED;
}
addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
break;
}
}
}
else
{
LOGGER.warning("Cannot find teleport zone for Crystal Cavern: Steam Corridor instance!!!");
}
}
}
break;
}
case KECHI_NORMAL:
case KECHI_WISE:
case KECHI_WEALTHY:
case KECHI_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
private void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && creature.isPlayer())
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case PLAYER_DETECTOR:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.broadcastEvent(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0)), 2000, null);
for (int i = 0; i < getRandom(5); i++)
{
final Npc trap = addSpawn(((npcParams.getInt("MobType", 0) == 0) ? TRAP_1 : TRAP_2), npc, true, 0, false, instance.getId());
trap.getVariables().set("TIMER_VAL", 4);
}
npc.deleteMe();
}
break;
}
}
}
}
public static void main(String[] args)
{
new CrystalCavernsSteamCorridor();
}
}

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
You must be in a party to enter.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
The leader of the party should try to enter.
</body></html>

View File

@ -366,7 +366,7 @@
<height normal="13" />
</collision>
</npc>
<npc id="19013" level="96" type="Npc" name="Crystalline Golem">
<npc id="19013" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />
@ -403,7 +403,7 @@
<height normal="47" />
</collision>
</npc>
<npc id="19014" level="96" type="Npc" name="Crystalline Golem">
<npc id="19014" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />

View File

@ -154,6 +154,72 @@
<node X="108616" Y="-41676" />
<node X="108816" Y="-40776" />
<node X="107856" Y="-40652" />
</zone>
<zone name="24_24_fire_telezone_01" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="147444" />
<stat name="oustY" val="218208" />
<stat name="oustZ" val="-12117" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="147204" Y="218138" />
<node X="147200" Y="218279" />
<node X="147138" Y="218278" />
<node X="147133" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_02" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="150143" />
<stat name="oustY" val="218205" />
<stat name="oustZ" val="-12121" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="149886" Y="218138" />
<node X="149884" Y="218278" />
<node X="149822" Y="218274" />
<node X="149833" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_03" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="145610" />
<stat name="oustY" val="220065" />
<stat name="oustZ" val="-12106" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152585" Y="218139" />
<node X="152579" Y="218276" />
<node X="152514" Y="218272" />
<node X="152521" Y="218134" />
</zone>
<zone name="24_24_fire_telezone_04" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="148309" />
<stat name="oustY" val="220064" />
<stat name="oustZ" val="-12118" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="148064" Y="219993" />
<node X="148061" Y="220133" />
<node X="147999" Y="220129" />
<node X="148007" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_05" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="149761" />
<stat name="oustY" val="215582" />
<stat name="oustZ" val="-12104" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="150747" Y="219991" />
<node X="150748" Y="220132" />
<node X="150688" Y="220134" />
<node X="150697" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_06" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="153400" />
<stat name="oustY" val="215138" />
<stat name="oustZ" val="-12102" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152267" Y="215518" />
<node X="152258" Y="215654" />
<node X="152173" Y="215653" />
<node X="152180" Y="215514" />
</zone>
<zone name="26_20_orbis_enter" type="TeleportZone" shape="NPoly" minZ="-458" maxZ="-158">
<stat name="oustX" val="213983" />

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

View File

@ -0,0 +1,408 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.TeleportZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Steam Corridor instance zone.
* @author St3eT
*/
public class CrystalCavernsSteamCorridor extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int KECHI_NORMAL = 25797;
private static final int KECHI_WISE = 26113;
private static final int KECHI_WEALTHY = 26112;
private static final int KECHI_ARMED = 26111;
private static final int VICIOUS_DUELER = 23014;
private static final int VICIOUS_WARRIOR = 23016;
private static final int VICIOUS_SWORDSMAN = 23015;
private static final int SPIRIT_PROTECTOR = 23013;
private static final int FIRE_REGION = 19161;
private static final int PLAYER_DETECTOR = 19075;
private static final int TRAP_1 = 19011;
private static final int TRAP_2 = 19012;
// Skills
private static final SkillHolder FIRE_SKILL_1 = new SkillHolder(14373, 1);
private static final SkillHolder FIRE_SKILL_2 = new SkillHolder(14373, 2);
private static final SkillHolder FIRE_SKILL_3 = new SkillHolder(14197, 1);
private static final SkillHolder TRAP_SKILL_1 = new SkillHolder(14180, 1);
private static final SkillHolder TRAP_SKILL_2 = new SkillHolder(14181, 1);
private static final SkillHolder TRAP_SKILL_3 = new SkillHolder(14372, 1);
// Location
private static final Location BOSS_LOC = new Location(154078, 215125, -12140);
// Misc
private static final int TEMPLATE_ID = 164;
public CrystalCavernsSteamCorridor()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addAttackId(TRAP_1, TRAP_2);
addKillId(VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, KECHI_NORMAL, KECHI_WISE, KECHI_WEALTHY, KECHI_ARMED);
addSpawnId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, FIRE_REGION, PLAYER_DETECTOR);
addEventReceivedId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN);
addInstanceCreatedId(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, PLAYER_DETECTOR);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "FIRE_REGION_TIMER_1":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_1, 23);
getTimers().addTimer("FIRE_REGION_TIMER_2", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_2":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_2, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_3":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_3, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 1000, npc, null);
break;
}
case "TRAP_REACT_TIMER":
{
final int timer = npcVars.increaseInt("TIMER_VAL", -1);
if (timer > 0)
{
npc.broadcastSay(ChatType.NPC_GENERAL, " " + timer);
}
else
{
if (npc.getId() == TRAP_1)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_1 : TRAP_SKILL_3), 23);
}
else if (npc.getId() == TRAP_2)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_2 : TRAP_SKILL_3), 23);
}
}
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceCreated(Instance instance, PlayerInstance player)
{
instance.setStatus(1);
for (int i = 0; i < 6; i++)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName("24_24_fire_telezone_0" + i, TeleportZone.class);
if (zone != null)
{
zone.setEnabled(false, instance.getId());
}
}
super.onInstanceCreated(instance, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case SPIRIT_PROTECTOR:
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
npc.setTargetable(false);
npc.disableCoreAI(true);
npc.setInvisible(true);
break;
}
case FIRE_REGION:
{
final int timeLimit = npcParams.getInt("Limit_Time", 0);
if (timeLimit > 0)
{
getTimers().addTimer("FIRE_REGION_TIMER_1", ((timeLimit * 30) * 100), npc, null);
}
npc.setTargetable(false);
npc.setIsInvul(true);
npc.setRandomAnimation(false);
npc.setRandomWalking(false);
npc.disableCoreAI(true);
break;
}
case PLAYER_DETECTOR:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
@Override
public String onEventReceived(String eventName, Npc sender, Npc receiver, WorldObject reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = receiver.getParameters();
if (eventName.equals(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0))))
{
receiver.setTargetable(true);
receiver.disableCoreAI(false);
receiver.setInvisible(false);
}
}
return super.onEventReceived(eventName, sender, receiver, reference);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case TRAP_1:
case TRAP_2:
{
if (npc.isScriptValue(0))
{
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
npc.setScriptValue(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int killTarget = instance.getParameters().getInt("KILL_TARGET", 5);
int currentKillCount = instance.getParameters().getInt("KILL_COUNT", 0);
switch (npc.getId())
{
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
if (npcParams.getInt("last_checker", 0) == 1)
{
currentKillCount = instance.getParameters().increaseInt("KILL_COUNT", 0, 1);
if (currentKillCount >= killTarget)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName(npc.getParameters().getString("AreaTeleName"), TeleportZone.class);
if (zone != null)
{
zone.setEnabled(true, instance.getId());
showOnScreenMsg(instance, NpcStringId.THE_PORTAL_TO_THE_NEXT_ROOM_IS_NOW_OPEN, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.spawnGroup("innadril23_mb2422_pt" + instance.getStatus() + "m1");
instance.getParameters().set("KILL_COUNT", 0);
switch (instance.getStatus())
{
case 1:
{
instance.getParameters().set("KILL_TARGET", 12);
instance.setStatus(2);
break;
}
case 2:
{
instance.getParameters().set("KILL_TARGET", 3);
instance.setStatus(3);
break;
}
case 3:
{
instance.getParameters().set("KILL_TARGET", 18);
instance.setStatus(4);
break;
}
case 4:
{
instance.getParameters().set("KILL_TARGET", 5);
instance.setStatus(5);
break;
}
case 5:
{
instance.getParameters().set("KILL_TARGET", 20);
instance.setStatus(6);
break;
}
case 6:
{
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = KECHI_NORMAL;
}
else if (random < 80)
{
bossId = KECHI_WISE;
}
else if (random < 95)
{
bossId = KECHI_WEALTHY;
}
else
{
bossId = KECHI_ARMED;
}
addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
break;
}
}
}
else
{
LOGGER.warning("Cannot find teleport zone for Crystal Cavern: Steam Corridor instance!!!");
}
}
}
break;
}
case KECHI_NORMAL:
case KECHI_WISE:
case KECHI_WEALTHY:
case KECHI_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
private void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && creature.isPlayer())
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case PLAYER_DETECTOR:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.broadcastEvent(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0)), 2000, null);
for (int i = 0; i < getRandom(5); i++)
{
final Npc trap = addSpawn(((npcParams.getInt("MobType", 0) == 0) ? TRAP_1 : TRAP_2), npc, true, 0, false, instance.getId());
trap.getVariables().set("TIMER_VAL", 4);
}
npc.deleteMe();
}
break;
}
}
}
}
public static void main(String[] args)
{
new CrystalCavernsSteamCorridor();
}
}

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
You must be in a party to enter.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
The leader of the party should try to enter.
</body></html>

View File

@ -366,7 +366,7 @@
<height normal="13" />
</collision>
</npc>
<npc id="19013" level="96" type="Npc" name="Crystalline Golem">
<npc id="19013" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />
@ -403,7 +403,7 @@
<height normal="47" />
</collision>
</npc>
<npc id="19014" level="96" type="Npc" name="Crystalline Golem">
<npc id="19014" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />

View File

@ -154,6 +154,72 @@
<node X="108616" Y="-41676" />
<node X="108816" Y="-40776" />
<node X="107856" Y="-40652" />
</zone>
<zone name="24_24_fire_telezone_01" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="147444" />
<stat name="oustY" val="218208" />
<stat name="oustZ" val="-12117" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="147204" Y="218138" />
<node X="147200" Y="218279" />
<node X="147138" Y="218278" />
<node X="147133" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_02" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="150143" />
<stat name="oustY" val="218205" />
<stat name="oustZ" val="-12121" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="149886" Y="218138" />
<node X="149884" Y="218278" />
<node X="149822" Y="218274" />
<node X="149833" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_03" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="145610" />
<stat name="oustY" val="220065" />
<stat name="oustZ" val="-12106" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152585" Y="218139" />
<node X="152579" Y="218276" />
<node X="152514" Y="218272" />
<node X="152521" Y="218134" />
</zone>
<zone name="24_24_fire_telezone_04" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="148309" />
<stat name="oustY" val="220064" />
<stat name="oustZ" val="-12118" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="148064" Y="219993" />
<node X="148061" Y="220133" />
<node X="147999" Y="220129" />
<node X="148007" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_05" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="149761" />
<stat name="oustY" val="215582" />
<stat name="oustZ" val="-12104" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="150747" Y="219991" />
<node X="150748" Y="220132" />
<node X="150688" Y="220134" />
<node X="150697" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_06" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="153400" />
<stat name="oustY" val="215138" />
<stat name="oustZ" val="-12102" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152267" Y="215518" />
<node X="152258" Y="215654" />
<node X="152173" Y="215653" />
<node X="152180" Y="215514" />
</zone>
<zone name="26_20_orbis_enter" type="TeleportZone" shape="NPoly" minZ="-458" maxZ="-158">
<stat name="oustX" val="213983" />

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

View File

@ -0,0 +1,408 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.TeleportZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Steam Corridor instance zone.
* @author St3eT
*/
public class CrystalCavernsSteamCorridor extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int KECHI_NORMAL = 25797;
private static final int KECHI_WISE = 26113;
private static final int KECHI_WEALTHY = 26112;
private static final int KECHI_ARMED = 26111;
private static final int VICIOUS_DUELER = 23014;
private static final int VICIOUS_WARRIOR = 23016;
private static final int VICIOUS_SWORDSMAN = 23015;
private static final int SPIRIT_PROTECTOR = 23013;
private static final int FIRE_REGION = 19161;
private static final int PLAYER_DETECTOR = 19075;
private static final int TRAP_1 = 19011;
private static final int TRAP_2 = 19012;
// Skills
private static final SkillHolder FIRE_SKILL_1 = new SkillHolder(14373, 1);
private static final SkillHolder FIRE_SKILL_2 = new SkillHolder(14373, 2);
private static final SkillHolder FIRE_SKILL_3 = new SkillHolder(14197, 1);
private static final SkillHolder TRAP_SKILL_1 = new SkillHolder(14180, 1);
private static final SkillHolder TRAP_SKILL_2 = new SkillHolder(14181, 1);
private static final SkillHolder TRAP_SKILL_3 = new SkillHolder(14372, 1);
// Location
private static final Location BOSS_LOC = new Location(154078, 215125, -12140);
// Misc
private static final int TEMPLATE_ID = 164;
public CrystalCavernsSteamCorridor()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addAttackId(TRAP_1, TRAP_2);
addKillId(VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, KECHI_NORMAL, KECHI_WISE, KECHI_WEALTHY, KECHI_ARMED);
addSpawnId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN, FIRE_REGION, PLAYER_DETECTOR);
addEventReceivedId(SPIRIT_PROTECTOR, VICIOUS_DUELER, VICIOUS_WARRIOR, VICIOUS_SWORDSMAN);
addInstanceCreatedId(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, PLAYER_DETECTOR);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "FIRE_REGION_TIMER_1":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_1, 23);
getTimers().addTimer("FIRE_REGION_TIMER_2", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_2":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_2, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 10000, npc, null);
break;
}
case "FIRE_REGION_TIMER_3":
{
addSkillCastDesire(npc, npc, FIRE_SKILL_3, 23);
getTimers().addTimer("FIRE_REGION_TIMER_3", 1000, npc, null);
break;
}
case "TRAP_REACT_TIMER":
{
final int timer = npcVars.increaseInt("TIMER_VAL", -1);
if (timer > 0)
{
npc.broadcastSay(ChatType.NPC_GENERAL, " " + timer);
}
else
{
if (npc.getId() == TRAP_1)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_1 : TRAP_SKILL_3), 23);
}
else if (npc.getId() == TRAP_2)
{
addSkillCastDesire(npc, npc, (getRandom(10) < 8 ? TRAP_SKILL_2 : TRAP_SKILL_3), 23);
}
}
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceCreated(Instance instance, PlayerInstance player)
{
instance.setStatus(1);
for (int i = 0; i < 6; i++)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName("24_24_fire_telezone_0" + i, TeleportZone.class);
if (zone != null)
{
zone.setEnabled(false, instance.getId());
}
}
super.onInstanceCreated(instance, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case SPIRIT_PROTECTOR:
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
npc.setTargetable(false);
npc.disableCoreAI(true);
npc.setInvisible(true);
break;
}
case FIRE_REGION:
{
final int timeLimit = npcParams.getInt("Limit_Time", 0);
if (timeLimit > 0)
{
getTimers().addTimer("FIRE_REGION_TIMER_1", ((timeLimit * 30) * 100), npc, null);
}
npc.setTargetable(false);
npc.setIsInvul(true);
npc.setRandomAnimation(false);
npc.setRandomWalking(false);
npc.disableCoreAI(true);
break;
}
case PLAYER_DETECTOR:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
@Override
public String onEventReceived(String eventName, Npc sender, Npc receiver, WorldObject reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = receiver.getParameters();
if (eventName.equals(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0))))
{
receiver.setTargetable(true);
receiver.disableCoreAI(false);
receiver.setInvisible(false);
}
}
return super.onEventReceived(eventName, sender, receiver, reference);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case TRAP_1:
case TRAP_2:
{
if (npc.isScriptValue(0))
{
getTimers().addTimer("TRAP_REACT_TIMER", 1000, npc, null);
npc.setScriptValue(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int killTarget = instance.getParameters().getInt("KILL_TARGET", 5);
int currentKillCount = instance.getParameters().getInt("KILL_COUNT", 0);
switch (npc.getId())
{
case VICIOUS_DUELER:
case VICIOUS_WARRIOR:
case VICIOUS_SWORDSMAN:
{
if (npcParams.getInt("last_checker", 0) == 1)
{
currentKillCount = instance.getParameters().increaseInt("KILL_COUNT", 0, 1);
if (currentKillCount >= killTarget)
{
final ZoneType zone = ZoneManager.getInstance().getZoneByName(npc.getParameters().getString("AreaTeleName"), TeleportZone.class);
if (zone != null)
{
zone.setEnabled(true, instance.getId());
showOnScreenMsg(instance, NpcStringId.THE_PORTAL_TO_THE_NEXT_ROOM_IS_NOW_OPEN, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.spawnGroup("innadril23_mb2422_pt" + instance.getStatus() + "m1");
instance.getParameters().set("KILL_COUNT", 0);
switch (instance.getStatus())
{
case 1:
{
instance.getParameters().set("KILL_TARGET", 12);
instance.setStatus(2);
break;
}
case 2:
{
instance.getParameters().set("KILL_TARGET", 3);
instance.setStatus(3);
break;
}
case 3:
{
instance.getParameters().set("KILL_TARGET", 18);
instance.setStatus(4);
break;
}
case 4:
{
instance.getParameters().set("KILL_TARGET", 5);
instance.setStatus(5);
break;
}
case 5:
{
instance.getParameters().set("KILL_TARGET", 20);
instance.setStatus(6);
break;
}
case 6:
{
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = KECHI_NORMAL;
}
else if (random < 80)
{
bossId = KECHI_WISE;
}
else if (random < 95)
{
bossId = KECHI_WEALTHY;
}
else
{
bossId = KECHI_ARMED;
}
addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
break;
}
}
}
else
{
LOGGER.warning("Cannot find teleport zone for Crystal Cavern: Steam Corridor instance!!!");
}
}
}
break;
}
case KECHI_NORMAL:
case KECHI_WISE:
case KECHI_WEALTHY:
case KECHI_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
private void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && creature.isPlayer())
{
final StatsSet npcParams = npc.getParameters();
switch (npc.getId())
{
case PLAYER_DETECTOR:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.broadcastEvent(String.valueOf(24220005 + npcParams.getInt("Terri_ID", 0)), 2000, null);
for (int i = 0; i < getRandom(5); i++)
{
final Npc trap = addSpawn(((npcParams.getInt("MobType", 0) == 0) ? TRAP_1 : TRAP_2), npc, true, 0, false, instance.getId());
trap.getVariables().set("TIMER_VAL", 4);
}
npc.deleteMe();
}
break;
}
}
}
}
public static void main(String[] args)
{
new CrystalCavernsSteamCorridor();
}
}

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
You must be in a party to enter.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Crystal Caverns Admission Portal:<br>
The leader of the party should try to enter.
</body></html>

View File

@ -366,7 +366,7 @@
<height normal="13" />
</collision>
</npc>
<npc id="19013" level="96" type="Npc" name="Crystalline Golem">
<npc id="19013" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />
@ -403,7 +403,7 @@
<height normal="47" />
</collision>
</npc>
<npc id="19014" level="96" type="Npc" name="Crystalline Golem">
<npc id="19014" level="96" type="FriendlyNpc" name="Crystalline Golem" usingServerSideTitle="true">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Link_Skill_01" id="14283" level="1" />

View File

@ -154,6 +154,72 @@
<node X="108616" Y="-41676" />
<node X="108816" Y="-40776" />
<node X="107856" Y="-40652" />
</zone>
<zone name="24_24_fire_telezone_01" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="147444" />
<stat name="oustY" val="218208" />
<stat name="oustZ" val="-12117" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="147204" Y="218138" />
<node X="147200" Y="218279" />
<node X="147138" Y="218278" />
<node X="147133" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_02" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="150143" />
<stat name="oustY" val="218205" />
<stat name="oustZ" val="-12121" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="149886" Y="218138" />
<node X="149884" Y="218278" />
<node X="149822" Y="218274" />
<node X="149833" Y="218135" />
</zone>
<zone name="24_24_fire_telezone_03" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="145610" />
<stat name="oustY" val="220065" />
<stat name="oustZ" val="-12106" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152585" Y="218139" />
<node X="152579" Y="218276" />
<node X="152514" Y="218272" />
<node X="152521" Y="218134" />
</zone>
<zone name="24_24_fire_telezone_04" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="148309" />
<stat name="oustY" val="220064" />
<stat name="oustZ" val="-12118" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="148064" Y="219993" />
<node X="148061" Y="220133" />
<node X="147999" Y="220129" />
<node X="148007" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_05" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="149761" />
<stat name="oustY" val="215582" />
<stat name="oustZ" val="-12104" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="150747" Y="219991" />
<node X="150748" Y="220132" />
<node X="150688" Y="220134" />
<node X="150697" Y="219994" />
</zone>
<zone name="24_24_fire_telezone_06" type="TeleportZone" shape="NPoly" minZ="-12150" maxZ="-12050"> <!-- 24_24 -->
<stat name="oustX" val="153400" />
<stat name="oustY" val="215138" />
<stat name="oustZ" val="-12102" />
<stat name="instanceId" val="164" />
<stat name="targetClass" val="PlayerInstance" />
<node X="152267" Y="215518" />
<node X="152258" Y="215654" />
<node X="152173" Y="215653" />
<node X="152180" Y="215514" />
</zone>
<zone name="26_20_orbis_enter" type="TeleportZone" shape="NPoly" minZ="-458" maxZ="-158">
<stat name="oustX" val="213983" />

View File

@ -2476,6 +2476,79 @@
<point X="182894" Y="17577" Z="-10304" delay="2" run="true" />
<point X="182426" Y="18210" Z="-10304" delay="3" run="true" />
</route>
<route name="gd_golem_1" repeat="false" repeatStyle="back">
<point X="139821" Y="217257" Z="-11768" delay="0" run="true" />
<point X="139925" Y="217250" Z="-11768" delay="0" run="true" />
<point X="140050" Y="217251" Z="-11768" delay="0" run="true" />
<point X="140137" Y="217244" Z="-11768" delay="0" run="true" />
<point X="140156" Y="217190" Z="-11768" delay="0" run="true" />
<point X="140170" Y="217104" Z="-11768" delay="0" run="true" />
<point X="140198" Y="217003" Z="-11768" delay="0" run="true" />
<point X="140224" Y="216897" Z="-11768" delay="0" run="true" />
<point X="140287" Y="216756" Z="-11768" delay="0" run="true" />
<point X="140352" Y="216600" Z="-11768" delay="0" run="true" />
<point X="140468" Y="216459" Z="-11768" delay="0" run="true" />
<point X="140594" Y="216334" Z="-11768" delay="0" run="true" />
<point X="140703" Y="216212" Z="-11768" delay="0" run="true" />
<point X="140805" Y="216144" Z="-11768" delay="0" run="true" />
<point X="140916" Y="216065" Z="-11768" delay="0" run="true" />
<point X="141076" Y="216000" Z="-11768" delay="0" run="true" />
<point X="141206" Y="215970" Z="-11768" delay="0" run="true" />
<point X="141343" Y="215974" Z="-11768" delay="0" run="true" />
<point X="141502" Y="216016" Z="-11768" delay="0" run="true" />
<point X="141654" Y="216106" Z="-11768" delay="0" run="true" />
<point X="141805" Y="216240" Z="-11768" delay="0" run="true" />
<point X="141942" Y="216354" Z="-11768" delay="0" run="true" />
<point X="142038" Y="216472" Z="-11768" delay="0" run="true" />
<point X="142151" Y="216643" Z="-11768" delay="0" run="true" />
<point X="142240" Y="216782" Z="-11768" delay="0" run="true" />
<point X="142284" Y="216894" Z="-11768" delay="0" run="true" />
<point X="142326" Y="217024" Z="-11768" delay="0" run="true" />
<point X="142345" Y="217100" Z="-11768" delay="0" run="true" />
<point X="142364" Y="217166" Z="-11768" delay="0" run="true" />
<point X="142397" Y="217238" Z="-11768" delay="0" run="true" />
<point X="142481" Y="217250" Z="-11768" delay="0" run="true" />
<point X="142608" Y="217249" Z="-11768" delay="0" run="true" />
<point X="142664" Y="217269" Z="-11768" delay="0" run="true" />
<point X="142939" Y="217270" Z="-11776" delay="10000" run="true" />
</route>
<route name="gd_golem_2" repeat="false" repeatStyle="back">
<point X="142642" Y="217278" Z="-11768" delay="0" run="true" />
<point X="142536" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142457" Y="217281" Z="-11768" delay="0" run="true" />
<point X="142367" Y="217287" Z="-11768" delay="0" run="true" />
<point X="142344" Y="217364" Z="-11768" delay="0" run="true" />
<point X="142319" Y="217442" Z="-11768" delay="0" run="true" />
<point X="142305" Y="217527" Z="-11768" delay="0" run="true" />
<point X="142279" Y="217614" Z="-11768" delay="0" run="true" />
<point X="142246" Y="217704" Z="-11768" delay="0" run="true" />
<point X="142186" Y="217815" Z="-11768" delay="0" run="true" />
<point X="142114" Y="217924" Z="-11768" delay="0" run="true" />
<point X="142039" Y="218047" Z="-11768" delay="0" run="true" />
<point X="141950" Y="218157" Z="-11768" delay="0" run="true" />
<point X="141821" Y="218287" Z="-11768" delay="0" run="true" />
<point X="141645" Y="218418" Z="-11768" delay="0" run="true" />
<point X="141459" Y="218510" Z="-11768" delay="0" run="true" />
<point X="141262" Y="218532" Z="-11768" delay="0" run="true" />
<point X="141135" Y="218517" Z="-11768" delay="0" run="true" />
<point X="140977" Y="218469" Z="-11768" delay="0" run="true" />
<point X="140861" Y="218401" Z="-11768" delay="0" run="true" />
<point X="140762" Y="218327" Z="-11768" delay="0" run="true" />
<point X="140655" Y="218230" Z="-11768" delay="0" run="true" />
<point X="140542" Y="218106" Z="-11768" delay="0" run="true" />
<point X="140447" Y="218012" Z="-11768" delay="0" run="true" />
<point X="140369" Y="217903" Z="-11768" delay="0" run="true" />
<point X="140305" Y="217796" Z="-11768" delay="0" run="true" />
<point X="140257" Y="217701" Z="-11768" delay="0" run="true" />
<point X="140222" Y="217593" Z="-11768" delay="0" run="true" />
<point X="140204" Y="217492" Z="-11768" delay="0" run="true" />
<point X="140179" Y="217411" Z="-11768" delay="0" run="true" />
<point X="140157" Y="217323" Z="-11768" delay="0" run="true" />
<point X="140100" Y="217281" Z="-11768" delay="0" run="true" />
<point X="139972" Y="217277" Z="-11768" delay="0" run="true" />
<point X="139843" Y="217279" Z="-11768" delay="0" run="true" />
<point X="139502" Y="217276" Z="-11776" delay="10000" run="true" />
</route>
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->

View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Coral Garden -->
<instance id="165" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="142003" y="214496" z="-11600" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="165" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="24240021">
<openStatus default="close" />
</door>
<door id="24240024">
<openStatus default="open" />
</door>
<door id="24240025">
<openStatus default="open" />
</door>
<door id="24240026">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="innadril24_2422_01m1">
<territories>
<territory name="innadril24_2422_01" minZ="-11812" maxZ="-11612">
<node x="140772" y="214027" />
<node x="141701" y="214024" />
<node x="141722" y="214971" />
<node x="140776" y="214973" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="5" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_02m1">
<territories>
<territory name="innadril24_2422_02" minZ="-11817" maxZ="-11617">
<node x="141288" y="215403" />
<node x="141740" y="215413" />
<node x="141887" y="215959" />
<node x="142400" y="216437" />
<node x="141647" y="216436" />
<node x="141288" y="216181" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_03m1">
<territories>
<territory name="innadril24_2422_03" minZ="-11819" maxZ="-11619">
<node x="140792" y="215411" />
<node x="141224" y="215411" />
<node x="141241" y="216166" />
<node x="140860" y="216435" />
<node x="140148" y="216438" />
<node x="140635" y="215920" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="4" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_04m1">
<territories>
<territory name="innadril24_2422_04" minZ="-11816" maxZ="-11616">
<node x="140113" y="216495" />
<node x="140842" y="216485" />
<node x="140659" y="216910" />
<node x="140646" y="217244" />
<node x="139829" y="217222" />
<node x="139829" y="217222" />
<node x="139852" y="216817" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_05m1">
<territories>
<territory name="innadril24_2422_05" minZ="-11813" maxZ="-11613">
<node x="141670" y="216494" />
<node x="142425" y="216494" />
<node x="142638" y="216831" />
<node x="142692" y="217230" />
<node x="141859" y="217241" />
<node x="141840" y="216891" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_06m1">
<territories>
<territory name="innadril24_2422_06" minZ="-11817" maxZ="-11617">
<node x="141856" y="217297" />
<node x="142687" y="217287" />
<node x="142550" y="217912" />
<node x="142020" y="218441" />
<node x="141567" y="218171" />
<node x="141810" y="217710" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_07m1">
<territories>
<territory name="innadril24_2422_07" minZ="-11820" maxZ="-11620">
<node x="139832" y="217298" />
<node x="140644" y="217281" />
<node x="140695" y="217709" />
<node x="140919" y="218175" />
<node x="140469" y="218436" />
<node x="139940" y="217889" />
</territory>
</territories>
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_08m1">
<territories>
<territory name="innadril24_2422_08" minZ="-11812" maxZ="-11612">
<node x="140506" y="218463" />
<node x="140950" y="218188" />
<node x="141244" y="218401" />
<node x="140675" y="218807" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_09m1">
<territories>
<territory name="innadril24_2422_09" minZ="-11829" maxZ="-11629">
<node x="141540" y="218183" />
<node x="142012" y="218480" />
<node x="141815" y="218808" />
<node x="141271" y="218405" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
</group>
<group name="innadril24_2422_10m1">
<territories>
<territory name="innadril24_2422_10" minZ="-11815" maxZ="-11615">
<node x="141261" y="218427" />
<node x="141798" y="218823" />
<node x="141732" y="219192" />
<node x="140779" y="219201" />
<node x="140713" y="218815" />
</territory>
</territories>
<npc id="23017" respawnTime="2min" count="3" /> <!-- Punisher of Sins -->
<npc id="23018" respawnTime="2min" count="3" /> <!-- Judge of Sins -->
<npc id="23019" respawnTime="5min" count="1" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_11m1">
<territories>
<territory name="innadril24_2422_11" minZ="-11814" maxZ="-11614">
<node x="140749" y="219542" />
<node x="141733" y="219539" />
<node x="141721" y="220520" />
<node x="140746" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="2" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_2422_12m1">
<territories>
<territory name="innadril24_2422_12" minZ="-11815" maxZ="-11615">
<node x="142059" y="219549" />
<node x="143029" y="219542" />
<node x="143030" y="220520" />
<node x="142059" y="220531" />
</territory>
</territories>
<npc id="23017" count="2" /> <!-- Punisher of Sins -->
<npc id="23018" count="2" /> <!-- Judge of Sins -->
<npc id="23019" count="3" /> <!-- Arbitrator of Sins -->
</group>
<group name="innadril24_e2422_01m1">
<territories>
<territory name="innadril24_e2422_01" minZ="-11817" maxZ="-11617">
<node x="139388" y="217164" />
<node x="139588" y="217164" />
<node x="139588" y="217364" />
<node x="139388" y="217364" />
</territory>
</territories>
<npc id="19013" x="139488" y="217264" z="-11817" count="1" /> <!-- Crystalline Golem -->
</group>
<group name="innadril24_e2422_02m1">
<territories>
<territory name="innadril24_e2422_02" minZ="-11817" maxZ="-11617">
<node x="142908" y="217164" />
<node x="143108" y="217164" />
<node x="143108" y="217364" />
<node x="142908" y="217364" />
</territory>
</territories>
<npc id="19014" x="143008" y="217264" z="-11817" heading="32768" count="1" /> <!-- Crystalline Golem -->
</group>
</spawnlist>
</instance>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,694 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Crystal Caverns - Steam Corridor -->
<instance id="164" maxWorlds="80" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="3" />
<removeBuffs type="ALL" />
<locations>
<enter type="FIXED">
<location x="144324" y="218207" z="-12000" />
</enter>
<exit type="FIXED">
<location x="149364" y="173631" z="-920" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html" />
</condition>
<condition type="PartyLeader">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="97" />
</condition>
<condition type="Distance" />
<condition type="Reenter">
<param name="instanceId" value="164" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<spawnlist>
<group name="innadril23_2422_01m1">
<territories>
<territory name="innadril23_2422_01" minZ="-12178" maxZ="-11678">
<node x="144778" y="217940" />
<node x="145497" y="217937" />
<node x="145510" y="218475" />
<node x="144781" y="218469" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="1" />
</parameters>
</npc>
<npc id="19161" x="145129" y="218189" z="-12136" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="30" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_02m1">
<territories>
<territory name="innadril23_2422_02" minZ="-12160" maxZ="-11660">
<node x="145563" y="217941" />
<node x="146353" y="217943" />
<node x="146357" y="218483" />
<node x="145572" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23013" count="4"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="23014" count="4"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="2" />
</parameters>
</npc>
<npc id="19161" x="146016" y="218235" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="34" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m1">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="3" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="3" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_01"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_03m2">
<territories>
<territory name="innadril23_2422_03" minZ="-12167" maxZ="-11667">
<node x="146422" y="217935" />
<node x="147125" y="217942" />
<node x="147128" y="218482" />
<node x="146431" y="218475" />
</territory>
</territories>
<npc id="19161" x="146875" y="218229" z="-12167" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="37" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_04m1">
<territories>
<territory name="innadril23_2422_04" minZ="-12160" maxZ="-11660">
<node x="147465" y="217937" />
<node x="148256" y="217938" />
<node x="148259" y="218478" />
<node x="147475" y="218477" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="23013" count="6"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="4" />
</parameters>
</npc>
<npc id="19161" x="147918" y="218230" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="60" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_05m1">
<territories>
<territory name="innadril23_2422_05" minZ="-12166" maxZ="-11666">
<node x="148258" y="217940" />
<node x="149048" y="217942" />
<node x="149051" y="218482" />
<node x="148267" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="23014" count="10"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="5" />
</parameters>
</npc>
<npc id="19161" x="148710" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="64" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m1">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="6" />
</parameters>
</npc>
<npc id="23014" count="12"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="6" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_02"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_06m2">
<territories>
<territory name="innadril23_2422_06" minZ="-12166" maxZ="-11666">
<node x="149027" y="217940" />
<node x="149818" y="217942" />
<node x="149821" y="218482" />
<node x="149037" y="218480" />
</territory>
</territories>
<npc id="19161" x="149480" y="218233" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="67" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_07m1">
<territories>
<territory name="innadril23_2422_07" minZ="-12170" maxZ="-11670">
<node x="150145" y="217941" />
<node x="150856" y="217941" />
<node x="150859" y="218481" />
<node x="150155" y="218481" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23013" count="5"> <!-- Spirit Protector -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="23014" count="5"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="7" />
</parameters>
</npc>
<npc id="19161" x="150598" y="218234" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="90" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_08m1">
<territories>
<territory name="innadril23_2422_08" minZ="-12170" maxZ="-11670">
<node x="150935" y="217936" />
<node x="151726" y="217942" />
<node x="151729" y="218482" />
<node x="150945" y="218476" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="8" />
</parameters>
</npc>
<npc id="19161" x="151388" y="218229" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="94" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m1">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="Terri_ID" value="9" />
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="9" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_03"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_09m2">
<territories>
<territory name="innadril23_2422_09" minZ="-12170" maxZ="-11670">
<node x="151791" y="217952" />
<node x="152499" y="217939" />
<node x="152502" y="218479" />
<node x="151801" y="218492" />
</territory>
</territories>
<npc id="19161" x="152244" y="218245" z="-12170" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="97" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_10m1">
<territories>
<territory name="innadril23_2422_10" minZ="-12166" maxZ="-11666">
<node x="145650" y="219795" />
<node x="146356" y="219796" />
<node x="146358" y="220337" />
<node x="145652" y="220331" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="23015" count="10"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="10" />
</parameters>
</npc>
<npc id="19161" x="145984" y="220051" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="120" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_11m1">
<territories>
<territory name="innadril23_2422_11" minZ="-12166" maxZ="-11666">
<node x="146468" y="219793" />
<node x="147174" y="219794" />
<node x="147176" y="220335" />
<node x="146470" y="220329" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="11" />
</parameters>
</npc>
<npc id="19161" x="146802" y="220049" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="124" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m1">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="12" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
<npc id="23016" count="3"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="12" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_04"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_12m2">
<territories>
<territory name="innadril23_2422_12" minZ="-12166" maxZ="-11666">
<node x="147298" y="219800" />
<node x="148004" y="219801" />
<node x="148006" y="220342" />
<node x="147300" y="220336" />
</territory>
</territories>
<npc id="19161" x="147632" y="220056" z="-12166" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="127" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_13m1">
<territories>
<territory name="innadril23_2422_13" minZ="-12165" maxZ="-11665">
<node x="148361" y="219796" />
<node x="149067" y="219797" />
<node x="149069" y="220338" />
<node x="148363" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23014" count="15"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="23015" count="15"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="13" />
</parameters>
</npc>
<npc id="19161" x="148695" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="150" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_14m1">
<territories>
<territory name="innadril23_2422_14" minZ="-12165" maxZ="-11665">
<node x="149095" y="219796" />
<node x="149801" y="219797" />
<node x="149803" y="220338" />
<node x="149097" y="220332" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23014" count="17"> <!-- Vicious Dueler -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="23015" count="17"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="14" />
</parameters>
</npc>
<npc id="19161" x="149429" y="220052" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="154" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m1">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="15" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="15" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_15m2">
<territories>
<territory name="innadril23_2422_15" minZ="-12165" maxZ="-11665">
<node x="149865" y="219798" />
<node x="150571" y="219799" />
<node x="150573" y="220340" />
<node x="149867" y="220334" />
</territory>
</territories>
<npc id="19161" x="150199" y="220054" z="-12165" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="157" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_16m1">
<territories>
<territory name="innadril23_2422_16" minZ="-12160" maxZ="-11660">
<node x="149819" y="215314" />
<node x="150580" y="215309" />
<node x="150592" y="215840" />
<node x="149834" y="215842" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="16" />
</parameters>
</npc>
<npc id="19161" x="150198" y="215606" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="180" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_17m1">
<territories>
<territory name="innadril23_2422_17" minZ="-12160" maxZ="-11660">
<node x="150589" y="215313" />
<node x="151350" y="215308" />
<node x="151362" y="215839" />
<node x="150604" y="215841" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="23016" count="5"> <!-- Vicious Warrior -->
<parameters>
<param name="Terri_ID" value="17" />
</parameters>
</npc>
<npc id="19161" x="150968" y="215605" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="184" />
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m1">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19075" count="1"> <!-- Jewel Transparent 1 -->
<parameters>
<param name="MobType" value="1" />
<param name="Terri_ID" value="18" />
</parameters>
</npc>
<npc id="23015" count="20"> <!-- Vicious Swordsman -->
<parameters>
<param name="Terri_ID" value="18" />
<param name="last_checker" value="1" />
<param name="AreaTeleName" value="24_24_fire_telezone_05"/>
</parameters>
</npc>
</group>
<group name="innadril23_2422_18m2">
<territories>
<territory name="innadril23_2422_18" minZ="-12160" maxZ="-11660">
<node x="151375" y="215317" />
<node x="152136" y="215312" />
<node x="152148" y="215843" />
<node x="151390" y="215845" />
</territory>
</territories>
<npc id="19161" x="151754" y="215609" z="-12160" count="1"> <!-- Fire Region -->
<parameters>
<param name="Limit_Time" value="187" />
</parameters>
</npc>
</group>
<group name="innadril23_mb2422m1">
<territories>
<territory name="innadril23_mb2422" minZ="-12140" maxZ="-11740">
<node x="154093" y="215667" />
<node x="153813" y="215602" />
<node x="153627" y="215436" />
<node x="153537" y="215291" />
<node x="153506" y="215131" />
<node x="153555" y="214913" />
<node x="153696" y="214713" />
<node x="153892" y="214590" />
<node x="154087" y="214538" />
<node x="154301" y="214602" />
<node x="154479" y="214720" />
<node x="154601" y="214903" />
<node x="154646" y="215119" />
<node x="154613" y="215288" />
<node x="154550" y="215411" />
<node x="154462" y="215527" />
<node x="154304" y="215624" />
</territory>
</territories>
<npc id="19161" x="154078" y="215125" z="-12140" respawnTime="1min" count="1" /> <!-- Fire Region -->
</group>
<group name="innadril23_mb2422_pt1m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt1" minZ="-12145" maxZ="-11945">
<node x="146993" y="218107" />
<node x="147193" y="218107" />
<node x="147193" y="218307" />
<node x="146993" y="218307" />
</territory>
</territories>
<npc id="19077" x="147148" y="218208" z="-12112" heading="32624" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt2m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt2" minZ="-12147" maxZ="-11947">
<node x="149740" y="218107" />
<node x="149940" y="218107" />
<node x="149940" y="218307" />
<node x="149740" y="218307" />
</territory>
</territories>
<npc id="19077" x="149818" y="218208" z="-12096" heading="32496" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt3m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt3" minZ="-12141" maxZ="-11941">
<node x="152440" y="218104" />
<node x="152640" y="218104" />
<node x="152640" y="218304" />
<node x="152440" y="218304" />
</territory>
</territories>
<npc id="19077" x="152538" y="218208" z="-12096" heading="32552" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt4m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt4" minZ="-12146" maxZ="-11946">
<node x="147916" y="219968" />
<node x="148116" y="219968" />
<node x="148116" y="220168" />
<node x="147916" y="220168" />
</territory>
</territories>
<npc id="19077" x="148022" y="220069" z="-12112" heading="-32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt5m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt5" minZ="-12144" maxZ="-11944">
<node x="150613" y="219960" />
<node x="150813" y="219960" />
<node x="150813" y="220160" />
<node x="150613" y="220160" />
</territory>
</territories>
<npc id="19077" x="150699" y="220064" z="-12112" heading="-32696" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
<group name="innadril23_mb2422_pt6m1" spawnByDefault="false">
<territories>
<territory name="innadril23_mb2422_pt6" minZ="-12143" maxZ="-11943">
<node x="152084" y="215474" />
<node x="152284" y="215474" />
<node x="152284" y="215674" />
<node x="152084" y="215674" />
</territory>
</territories>
<npc id="19077" x="152214" y="215586" z="-12112" heading="32568" respawnTime="1min" count="1" /> <!-- Jewel Transparent 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,215 @@
/*
* 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 ai.areas.Parnassus.EntrancePortalToCrystalCaverns;
import java.util.Calendar;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import ai.AbstractNpcAI;
import instances.CrystalCaverns.CrystalCavernsCoralGarden;
import instances.CrystalCaverns.CrystalCavernsEmeraldSquare;
import instances.CrystalCaverns.CrystalCavernsSteamCorridor;
/**
* Entrance Portal to Crystal Caverns AI.
* @author St3eT
*/
public class EntrancePortalToCrystalCaverns extends AbstractNpcAI
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
// Misc
private static final int EMERALD_SQUARE_TEMPLATE_ID = 163;
private static final int STEAM_CORRIDOR_TEMPLATE_ID = 164;
private static final int CORAL_GARDEN_TEMPLATE_ID = 165;
private static final int PRISON_ENTRACE_TRIGGER_1 = 24230010;
private static final int PRISON_ENTRACE_TRIGGER_2 = 24230012;
private static final int CAVERNS_ENTRACE_TRIGGER_1 = 24230014;
private static final int CAVERNS_ENTRACE_TRIGGER_2 = 24230016;
private static final int CAVERNS_ENTRACE_TRIGGER_3 = 24230018;
private EntrancePortalToCrystalCaverns()
{
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(CAVERNS_ENTRACE);
addSpawnId(CAVERNS_ENTRACE);
addSeeCreatureId(CAVERNS_ENTRACE);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
Quest instanceScript = null;
switch (getCurrentInstanceTemplateId())
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsEmeraldSquare.class.getSimpleName());
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsSteamCorridor.class.getSimpleName());
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
instanceScript = QuestManager.getInstance().getQuest(CrystalCavernsCoralGarden.class.getSimpleName());
break;
}
}
if (instanceScript != null)
{
instanceScript.notifyEvent(event, npc, player);
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "EntrancePortal_" + getCurrentInstanceTemplateId() + ".html";
}
@Override
public String onSpawn(Npc npc)
{
getTimers().addRepeatingTimer("LOOP_TIMER", 10000, npc, null);
return super.onSpawn(npc);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
if (event.equals("LOOP_TIMER"))
{
final int currentTemplateId = getCurrentInstanceTemplateId();
World.getInstance().forEachVisibleObjectInRange(npc, PlayerInstance.class, 500, p ->
{
updateTriggersForPlayer(player, currentTemplateId);
});
}
}
@Override
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
{
if (creature.isPlayer())
{
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_1, true));
creature.getActingPlayer().sendPacket(new OnEventTrigger(PRISON_ENTRACE_TRIGGER_2, true));
updateTriggersForPlayer(creature.getActingPlayer(), getCurrentInstanceTemplateId());
}
return super.onSeeCreature(npc, creature, isSummon);
}
public void updateTriggersForPlayer(PlayerInstance player, int currentTemplateId)
{
if (player != null)
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, false));
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, false));
switch (currentTemplateId)
{
case EMERALD_SQUARE_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_1, true));
break;
}
case STEAM_CORRIDOR_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_2, true));
break;
}
case CORAL_GARDEN_TEMPLATE_ID:
{
player.sendPacket(new OnEventTrigger(CAVERNS_ENTRACE_TRIGGER_3, true));
break;
}
}
}
}
public int getCurrentInstanceTemplateId()
{
final int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
final int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int templateId = -1;
switch (day)
{
case Calendar.MONDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.TUESDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.WEDNESDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.THURSDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
case Calendar.FRIDAY:
{
templateId = (hour < 18) ? CORAL_GARDEN_TEMPLATE_ID : EMERALD_SQUARE_TEMPLATE_ID;
break;
}
case Calendar.SATURDAY:
{
templateId = (hour < 18) ? STEAM_CORRIDOR_TEMPLATE_ID : CORAL_GARDEN_TEMPLATE_ID;
break;
}
case Calendar.SUNDAY:
{
templateId = (hour < 18) ? EMERALD_SQUARE_TEMPLATE_ID : STEAM_CORRIDOR_TEMPLATE_ID;
break;
}
}
return templateId;
}
public static void main(String[] args)
{
new EntrancePortalToCrystalCaverns();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Emerald Square</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Steam Corridor</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Entrance Portal to Crystal Caverns:<br>
At this time, you can go into the <font color="LEVEL">Coral Garden</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest EntrancePortalToCrystalCaverns enterInstance">Enter</Button>
</body></html>

View File

@ -0,0 +1,253 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.instancemanager.WalkingManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Coral Garden instance zone.
* @author St3eT
*/
public class CrystalCavernsCoralGarden extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int MICHAELA_NORMAL = 25799;
private static final int MICHAELA_WISE = 26116;
private static final int MICHAELA_WEALTHY = 26115;
private static final int MICHAELA_ARMED = 26114;
private static final int GOLEM_1 = 19013; // Crystalline Golem
private static final int GOLEM_2 = 19014; // Crystalline Golem
// Location
private static final Location BOSS_LOC = new Location(144307, 220032, -11824);
// Misc
private static final int TEMPLATE_ID = 165;
private static final int BOSS_DOOR_ID = 24240026;
private static final int PLAYER_MAX_DISTANCE = 250;
public CrystalCavernsCoralGarden()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addFirstTalkId(GOLEM_1, GOLEM_2);
addKillId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addAttackId(MICHAELA_NORMAL, MICHAELA_WISE, MICHAELA_WEALTHY, MICHAELA_ARMED);
addRouteFinishedId(GOLEM_1, GOLEM_2);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (event)
{
case "SUCCESS_TIMER":
{
showOnScreenMsg(instance, NpcStringId.GOLEM_LOCATION_SUCCESSFUL_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 5000);
break;
}
case "LOOP_TIMER":
{
player = npcVars.getObject("PLAYER_OBJECT", PlayerInstance.class);
if ((player != null) && (npc.calculateDistance3D(player) > PLAYER_MAX_DISTANCE) && npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
addMoveToDesire(npc, new Location(npc.getX() + getRandom(-100, 100), npc.getY() + getRandom(-150, 150), npc.getZ()), 23);
npc.setRunning();
npcVars.set("NPC_FOLLOWING", false);
getTimers().cancelTimer("LOOP_TIMER", npc, null);
getTimers().addTimer("FAIL_TIMER", 5000, npc, null);
}
break;
}
case "FAIL_TIMER":
{
final Spawn spawn = npc.getSpawn();
if (!npcVars.getBoolean("NPC_FOLLOWING", true))
{
WalkingManager.getInstance().cancelMoving(npc);
npc.setWalking();
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
npc.setScriptValue(0);
npc.setNameString(null);
npc.setTitleString(null);
npc.setTitle(null);
npc.broadcastInfo();
}
npcVars.set("CAN_CALL_MONSTERS", ((spawn.getX() - ((npc.getX() * spawn.getX()) - npc.getX())) + (spawn.getY() - (npc.getY() * spawn.getY()) - npc.getY())) > (200 * 200));
break;
}
}
}
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.getVariables().set("PLAYER_OBJECT", player);
npc.setNameString(NpcStringId.TRAITOR_CRYSTALLINE_GOLEM);
npc.setTitleString(NpcStringId.GIVEN_TO_S1);
npc.setTitle(player.getName());
npc.broadcastInfo();
WalkingManager.getInstance().startMoving(npc, npc.getId() == GOLEM_1 ? "gd_golem_1" : "gd_golem_2");
getTimers().addRepeatingTimer("LOOP_TIMER", 500, npc, null);
}
}
return null;
}
@Override
public void onRouteFinished(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (instance != null)
{
WalkingManager.getInstance().cancelMoving(npc);
showOnScreenMsg(instance, NpcStringId.GOLEM_ENTERED_THE_REQUIRED_ZONE, ExShowScreenMessage.MIDDLE_CENTER, 5000);
npc.deleteMe();
if (instance.getAliveNpcs(GOLEM_1, GOLEM_2).isEmpty())
{
instance.openCloseDoor(BOSS_DOOR_ID, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = MICHAELA_NORMAL;
}
else if (random < 80)
{
bossId = MICHAELA_WISE;
}
else if (random < 95)
{
bossId = MICHAELA_WEALTHY;
}
else
{
bossId = MICHAELA_ARMED;
}
final Npc boss = addSpawn(bossId, BOSS_LOC, false, 0, false, instance.getId());
getTimers().addTimer("SUCCESS_TIMER", 5000, boss, null);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
instance.finishInstance();
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case MICHAELA_NORMAL:
case MICHAELA_WISE:
case MICHAELA_WEALTHY:
case MICHAELA_ARMED:
{
if (npc.isScriptValue(0))
{
npc.setScriptValue(1);
instance.openCloseDoor(BOSS_DOOR_ID, false);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
public static void main(String[] args)
{
new CrystalCavernsCoralGarden();
}
}

View File

@ -0,0 +1,424 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.CrystalCaverns;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureSee;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stats;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import instances.AbstractInstance;
/**
* Crystal Caverns - Emerald Square instance zone.
* @author St3eT
*/
public class CrystalCavernsEmeraldSquare extends AbstractInstance
{
// NPCs
private static final int CAVERNS_ENTRACE = 33522;
private static final int VERIDAN_NORMAL = 25796;
private static final int VERIDAN_WISE = 26107;
private static final int VERIDAN_WEALTHY = 26106;
private static final int VERIDAN_ARMED = 26105;
private static final int WATER_CANNON = 19008;
private static final int WATER_CANNON_SKILL = 19009;
private static final int STRONGHOLD_PROTECTOR = 23012;
private static final int SQUARE_INTRUDER = 23010;
private static final int SQUARE_ATTACKER = 23011;
// Skills
private static final SkillHolder DESTROY_SKILL = new SkillHolder(12003, 1);
private static final SkillHolder WATER_CANNON_SKILL_ATTACK = new SkillHolder(14179, 1);
// Locations
private static final Location[] BOSS_SPAWNS =
{
new Location(152745, 145957, -12584, 16446),
new Location(152816, 145968, -12633, 16446),
};
// Misc
private static final int TEMPLATE_ID = 163;
private static final int RAID_DOOR_1 = 24220005;
private static final int RAID_DOOR_2 = 24220006;
public CrystalCavernsEmeraldSquare()
{
super(TEMPLATE_ID);
addStartNpc(CAVERNS_ENTRACE);
addTalkId(CAVERNS_ENTRACE);
addSpawnId(WATER_CANNON);
addKillId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addAttackId(WATER_CANNON, VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED);
addSpellFinishedId(WATER_CANNON_SKILL);
addInstanceEnterId(TEMPLATE_ID);
addInstanceLeaveId(TEMPLATE_ID);
setCreatureSeeId(this::onCreatureSee, WATER_CANNON);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public void onTimerEvent(String event, StatsSet params, Npc npc, PlayerInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
final int baseId = npcParams.getInt("base_id", -1);
switch (event)
{
case "HP_REGEN_TIMER":
{
int value = ((baseId == 5) || (baseId == 6)) ? 5 : baseId;
npc.getStat().addFixedValue(Stats.REGENERATE_HP_RATE, Double.valueOf(value * 1000));
break;
}
case "SUPPORT_SPAWN_TIMER":
{
int supportVal = npcVars.getInt("SUPPORT_VALUE", 0);
if (supportVal > 3)
{
return;
}
if ((supportVal == 0) || (supportVal == 1) || (supportVal == 2))
{
final String spawnName = npcParams.getString("SupportMaker" + (supportVal + 1), null);
if (spawnName != null)
{
instance.spawnGroup(spawnName);
}
npcVars.increaseInt("SUPPORT_VALUE", 1);
}
if (!npcVars.getBoolean("PREVIOUS_BASE_DESTROYED", false))
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", 60000, npc, null);
}
break;
}
case "CANNON_LOOP_ATTACK":
{
if (npc.getCurrentHpPercent() > 30)
{
if (npcVars.getBoolean("IS_DESTROY_ACTIVATED", false) || (getRandom(10) < 2))
{
final Npc cannonSkill = addSpawn(WATER_CANNON_SKILL, npc, true, 0, false, instance.getId());
addSkillCastDesire(cannonSkill, cannonSkill, WATER_CANNON_SKILL_ATTACK, 23);
}
}
break;
}
case "SUICIDE_TIMER":
{
npc.doDie(null);
break;
}
}
}
}
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
switch (npc.getId())
{
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (!npcVars.getBoolean("CLOSED_DOORS", false))
{
npcVars.set("CLOSED_DOORS", true);
instance.openCloseDoor(RAID_DOOR_2, false);
}
}
case WATER_CANNON:
{
if ((skill != null) && (skill.getId() == DESTROY_SKILL.getSkillId()) && !npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npcVars.set("IS_DESTROY_ACTIVATED", true);
npc.setDisplayEffect(2);
getTimers().addTimer("SUICIDE_TIMER", 60000, npc, null);
}
if (npc.getCurrentHpPercent() < 30)
{
if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(3);
}
}
else if (!npcVars.getBoolean("IS_DESTROY_ACTIVATED", false))
{
npc.setDisplayEffect(1);
}
break;
}
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
switch (npc.getId())
{
case VERIDAN_NORMAL:
case VERIDAN_WISE:
case VERIDAN_WEALTHY:
case VERIDAN_ARMED:
{
if (instance.getAliveNpcs(VERIDAN_NORMAL, VERIDAN_WISE, VERIDAN_WEALTHY, VERIDAN_ARMED).isEmpty())
{
instance.finishInstance();
}
else
{
instance.setReenterTime();
}
break;
}
case WATER_CANNON:
{
npc.setDisplayEffect(4);
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_S1, ExShowScreenMessage.MIDDLE_CENTER, 4000, String.valueOf(npc.getParameters().getInt("base_id", -1)));
World.getInstance().forEachVisibleObjectInRange(npc, MonsterInstance.class, 400, monster ->
{
if ((monster.getId() == STRONGHOLD_PROTECTOR) || (monster.getId() == SQUARE_INTRUDER) || (monster.getId() == SQUARE_ATTACKER))
{
monster.doDie(null);
}
});
instance.getAliveNpcs(WATER_CANNON).forEach(cannon ->
{
final int cannonBaseId = cannon.getParameters().getInt("base_id", -1);
switch (baseId)
{
case 1:
{
if (cannonBaseId == 2)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 2:
{
if (cannonBaseId == 3)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 3:
{
if (cannonBaseId == 4)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 4:
{
if ((cannonBaseId == 5) || (cannonBaseId == 6))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 5:
case 6:
{
if (cannonBaseId == 7)
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
case 7:
{
if ((cannonBaseId == 8) || (cannonBaseId == 9))
{
cannon.getVariables().set("PREVIOUS_BASE_DESTROYED", true);
cannon.setTargetable(true);
}
break;
}
}
});
if ((baseId == 8) || (baseId == 9))
{
instance.getParameters().increaseInt("MAIN_TARGETS_KILLED", 0, 1);
if (instance.getParameters().getInt("MAIN_TARGETS_KILLED", 0) == 2)
{
showOnScreenMsg(instance, NpcStringId.SUCCESSFUL_DESTRUCTION_OF_STRONGHOLD_ENTRY_ACCESSED, ExShowScreenMessage.MIDDLE_CENTER, 4000);
instance.openCloseDoor(RAID_DOOR_1, true);
instance.openCloseDoor(RAID_DOOR_2, true);
final int random = getRandom(100);
int bossId = -1;
if (random < 55)
{
bossId = VERIDAN_NORMAL;
}
else if (random < 80)
{
bossId = VERIDAN_WISE;
}
else if (random < 95)
{
bossId = VERIDAN_WEALTHY;
}
else
{
bossId = VERIDAN_ARMED;
}
for (Location loc : BOSS_SPAWNS)
{
addSpawn(bossId, loc, false, 0, false, instance.getId());
}
}
}
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance) && (npc.getId() == WATER_CANNON_SKILL) && (skill.getId() == WATER_CANNON_SKILL_ATTACK.getSkillId()))
{
npc.deleteMe();
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onSpawn(Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isInInstance(instance))
{
switch (npc.getId())
{
case WATER_CANNON:
{
final StatsSet npcParams = npc.getParameters();
final int baseId = npcParams.getInt("base_id", -1);
if (baseId != 1)
{
npc.setTargetable(false);
}
getTimers().addTimer("HP_REGEN_TIMER", 10000, npc, null);
if (baseId > 0)
{
getTimers().addTimer("SUPPORT_SPAWN_TIMER", (baseId * 60) * 1000, npc, null);
}
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
{
final Creature creature = event.getSeen();
final Npc npc = (Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if ((world != null) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
npc.setDisplayEffect(1);
getTimers().addRepeatingTimer("CANNON_LOOP_ATTACK", 1000, npc, null);
}
}
@Override
public void onInstanceEnter(PlayerInstance player, Instance instance)
{
final int startTime = (int) (instance.getElapsedTime() / 1000);
final int endTime = (int) (instance.getRemainingTime() / 1000);
player.sendPacket(new ExSendUIEvent(player, false, true, startTime, endTime, NpcStringId.ELAPSED_TIME));
}
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, true, true, 0, 0, NpcStringId.ELAPSED_TIME));
}
public static void main(String[] args)
{
new CrystalCavernsEmeraldSquare();
}
}

Some files were not shown because too many files have changed in this diff Show More