Free version update 14-12-2023.
This commit is contained in:
@@ -1,48 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/ActionData.xsd">
|
||||
<action id="0" handler="SitStand" />
|
||||
<action id="1" handler="RunWalk" />
|
||||
<action id="10" handler="PrivateStore" option="1" /> <!-- Private Store Sell -->
|
||||
<action id="0" handler="SitStand" /> <!-- Sit / Stand -->
|
||||
<action id="1" handler="RunWalk" /> <!-- Walk / Run -->
|
||||
<action id="2" handler="None" /> <!-- Attack -->
|
||||
<action id="3" handler="None" /> <!-- Trade -->
|
||||
<action id="4" handler="None" /> <!-- Next Target (Melee) -->
|
||||
<action id="5" handler="None" /> <!-- Pick Up -->
|
||||
<action id="6" handler="None" /> <!-- Assist -->
|
||||
<action id="7" handler="None" /> <!-- Invite -->
|
||||
<action id="8" handler="None" /> <!-- Leave Party -->
|
||||
<action id="9" handler="None" /> <!-- Dismiss Party Member -->
|
||||
<action id="10" handler="PrivateStore" option="1" /> <!-- Private Store - Sell -->
|
||||
<action id="11" handler="None" /> <!-- Party Matching -->
|
||||
<action id="12" handler="SocialAction" option="2" /> <!-- Greeting -->
|
||||
<action id="13" handler="SocialAction" option="3" /> <!-- Victory -->
|
||||
<action id="14" handler="SocialAction" option="4" /> <!-- Advance -->
|
||||
<action id="15" handler="PetHold" /> <!-- Change Movement Mode -->
|
||||
<action id="16" handler="PetAttack" /> <!-- Attack -->
|
||||
<action id="16" handler="PetAttack" /> <!-- Attackers -->
|
||||
<action id="17" handler="PetStop" /> <!-- Stop -->
|
||||
<action id="19" handler="UnsummonPet" />
|
||||
<action id="18" handler="None" /> <!-- Pick Up -->
|
||||
<action id="19" handler="UnsummonPet" /> <!-- Recall Pet -->
|
||||
<action id="20" handler="None" /> <!-- Special skill -->
|
||||
<action id="21" handler="ServitorHold" /> <!-- Change Movement Mode -->
|
||||
<action id="22" handler="ServitorAttack" /> <!-- Attack -->
|
||||
<action id="22" handler="ServitorAttack" /> <!-- Attackers -->
|
||||
<action id="23" handler="ServitorStop" /> <!-- Stop -->
|
||||
<action id="24" handler="SocialAction" option="6" /> <!-- Yes -->
|
||||
<action id="25" handler="SocialAction" option="5" /> <!-- No -->
|
||||
<action id="26" handler="SocialAction" option="7" /> <!-- Bow -->
|
||||
<action id="28" handler="PrivateStore" option="3" /> <!-- Private Store Buy -->
|
||||
<action id="29" handler="SocialAction" option="8" /> <!-- Unaware -->
|
||||
<action id="30" handler="SocialAction" option="9" /> <!-- Social Waiting -->
|
||||
<action id="27" handler="None" /> <!-- Special skill -->
|
||||
<action id="28" handler="PrivateStore" option="3" /> <!-- Private Store - Buy -->
|
||||
<action id="29" handler="SocialAction" option="8" /> <!-- Confusion -->
|
||||
<action id="30" handler="SocialAction" option="9" /> <!-- Standby -->
|
||||
<action id="31" handler="SocialAction" option="10" /> <!-- Laugh -->
|
||||
<action id="32" handler="ServitorSkillUse" option="4230" /> <!-- Wild Hog Cannon - Wild Cannon -->
|
||||
<action id="32" handler="ServitorSkillUse" option="4230" /> <!-- Switch Mode -->
|
||||
<action id="33" handler="SocialAction" option="11" /> <!-- Applaud -->
|
||||
<action id="34" handler="SocialAction" option="12" /> <!-- Dance -->
|
||||
<action id="35" handler="SocialAction" option="13" /> <!-- Sorrow -->
|
||||
<action id="36" handler="ServitorSkillUse" option="4259" /> <!-- Soulless - Toxic Smoke -->
|
||||
<action id="37" handler="PrivateStore" option="5" /> <!-- Dwarven Manufacture -->
|
||||
<action id="36" handler="ServitorSkillUse" option="4259" /> <!-- Toxic Smoke -->
|
||||
<action id="38" handler="Ride" /> <!-- Mount/Dismount -->
|
||||
<action id="39" handler="ServitorSkillUse" option="4138" /> <!-- Soulless - Parasite Burst -->
|
||||
<action id="41" handler="ServitorSkillUse" option="4230" /> <!-- Wild Hog Cannon - Attack -->
|
||||
<action id="42" handler="ServitorSkillUse" option="4378" /> <!-- Kai the Cat - Self Damage Shield -->
|
||||
<action id="43" handler="ServitorSkillUse" option="4137" /> <!-- Unicorn Merrow - Hydro Screw -->
|
||||
<action id="44" handler="ServitorSkillUse" option="4139" /> <!-- Big Boom - Boom Attack -->
|
||||
<action id="45" handler="ServitorSkillUse" option="4025" /> <!-- Unicorn Boxer - Master Recharge -->
|
||||
<action id="46" handler="ServitorSkillUse" option="4261" /> <!-- Mew the Cat - Mega Storm Strike -->
|
||||
<action id="47" handler="ServitorSkillUse" option="4260" /> <!-- Silhouette - Steal Blood -->
|
||||
<action id="48" handler="ServitorSkillUse" option="4068" /> <!-- Mechanic Golem - Mech. Cannon -->
|
||||
<action id="52" handler="UnsummonServitor" />
|
||||
<action id="53" handler="ServitorMove" /> <!-- Move to target -->
|
||||
<action id="54" handler="PetMove" /> <!-- Move to target -->
|
||||
<action id="61" handler="PrivateStore" option="8" /> <!-- Private Store Package Sell -->
|
||||
<action id="39" handler="ServitorSkillUse" option="4138" /> <!-- Parasite Burst -->
|
||||
<action id="40" handler="None" /> <!-- Recommend -->
|
||||
<action id="41" handler="ServitorSkillUse" option="4230" /> <!-- Wild Cannon -->
|
||||
<action id="42" handler="ServitorSkillUse" option="4378" /> <!-- Self Damage Shield -->
|
||||
<action id="43" handler="ServitorSkillUse" option="4137" /> <!-- Water Pit -->
|
||||
<action id="44" handler="ServitorSkillUse" option="4139" /> <!-- Booming Attack -->
|
||||
<action id="45" handler="ServitorSkillUse" option="4025" /> <!-- Master Recharge -->
|
||||
<action id="46" handler="ServitorSkillUse" option="4261" /> <!-- Storm Strike -->
|
||||
<action id="47" handler="ServitorSkillUse" option="4260" /> <!-- Steal Blood -->
|
||||
<action id="48" handler="ServitorSkillUse" option="4068" /> <!-- Mechanical Cannon -->
|
||||
<action id="49" handler="ServitorSkillUse" option="4032" /> <!-- Wild Temper -->
|
||||
<action id="50" handler="None" /> <!-- Change Party Leader -->
|
||||
<action id="52" handler="UnsummonServitor" /> <!-- Unsummon -->
|
||||
<action id="53" handler="ServitorMove" /> <!-- Move -->
|
||||
<action id="54" handler="PetMove" /> <!-- Move -->
|
||||
<action id="55" handler="None" /> <!-- Recording Replay On/Off -->
|
||||
<action id="56" handler="None" /> <!-- Command Channel Invite -->
|
||||
<action id="57" handler="None" /> <!-- Find Store -->
|
||||
<action id="58" handler="None" /> <!-- Duel -->
|
||||
<action id="59" handler="None" /> <!-- Cancel Duel -->
|
||||
<action id="60" handler="None" /> <!-- Party Duel -->
|
||||
<action id="61" handler="PrivateStore" option="8" /> <!-- Private Store - Wholesale -->
|
||||
<action id="62" handler="SocialAction" option="14" /> <!-- Charm -->
|
||||
<action id="64" handler="TeleportBookmark" />
|
||||
<action id="65" handler="BotReport" />
|
||||
<action id="63" handler="None" /> <!-- Mini-Game -->
|
||||
<action id="64" handler="TeleportBookmark" /> <!-- My Teleport -->
|
||||
<action id="66" handler="SocialAction" option="15" /> <!-- Shyness -->
|
||||
<action id="67" handler="AirshipAction" option="1" /> <!-- Steer -->
|
||||
<action id="68" handler="AirshipAction" option="2" /> <!-- Cancel Control -->
|
||||
@@ -51,170 +71,196 @@
|
||||
<action id="71" handler="SocialAction" option="16" /> <!-- Exchange Bows -->
|
||||
<action id="72" handler="SocialAction" option="17" /> <!-- High Five -->
|
||||
<action id="73" handler="SocialAction" option="18" /> <!-- Couple Dance -->
|
||||
<action id="78" handler="TacticalSignUse" option="1" /> <!-- Token 1: Star -->
|
||||
<action id="79" handler="TacticalSignUse" option="2" /> <!-- Token 2: Heart -->
|
||||
<action id="80" handler="TacticalSignUse" option="3" /> <!-- Token 3: Moon -->
|
||||
<action id="81" handler="TacticalSignUse" option="4" /> <!-- Token 4: Cross -->
|
||||
<action id="82" handler="TacticalSignTarget" option="1" /> <!-- Token 1: Star -->
|
||||
<action id="83" handler="TacticalSignTarget" option="2" /> <!-- Token 2: Heart -->
|
||||
<action id="84" handler="TacticalSignTarget" option="3" /> <!-- Token 3: Moon -->
|
||||
<action id="85" handler="TacticalSignTarget" option="4" /> <!-- Token 4: Cross -->
|
||||
<action id="74" handler="None" /> <!-- Turn On/Off the Status Information -->
|
||||
<action id="76" handler="None" /> <!-- Invite Friends -->
|
||||
<action id="77" handler="None" /> <!-- Start/End Recording -->
|
||||
<action id="78" handler="TacticalSignUse" option="1" /> <!-- Use of Token 1 -->
|
||||
<action id="79" handler="TacticalSignUse" option="2" /> <!-- Use of Token 2 -->
|
||||
<action id="80" handler="TacticalSignUse" option="3" /> <!-- Use of Token 3 -->
|
||||
<action id="81" handler="TacticalSignUse" option="4" /> <!-- Use of Token 4 -->
|
||||
<action id="82" handler="TacticalSignTarget" option="1" /> <!-- Target by Token 1 -->
|
||||
<action id="83" handler="TacticalSignTarget" option="2" /> <!-- Target by Token 2 -->
|
||||
<action id="84" handler="TacticalSignTarget" option="3" /> <!-- Target by Token 3 -->
|
||||
<action id="85" handler="TacticalSignTarget" option="4" /> <!-- Target by Token 4 -->
|
||||
<action id="87" handler="SocialAction" option="28" /> <!-- Propose -->
|
||||
<action id="88" handler="SocialAction" option="29" /> <!-- Provoke -->
|
||||
<action id="89" handler="SocialAction" option="30" /> <!-- Beauty Shop -->
|
||||
<action id="90" handler="InstanceZoneInfo" />
|
||||
<action id="95" handler="WaitingAction" />
|
||||
<action id="1000" handler="ServitorSkillUse" option="4079" /> <!-- Siege Golem - Siege Hammer -->
|
||||
<action id="1003" handler="PetSkillUse" option="4710" /> <!-- Wind Hatchling/Strider - Wild Stun -->
|
||||
<action id="1004" handler="PetSkillUse" option="4711" /> <!-- Wind Hatchling/Strider - Wild Defense -->
|
||||
<action id="1005" handler="PetSkillUse" option="4712" /> <!-- Star Hatchling/Strider - Bright Burst -->
|
||||
<action id="1006" handler="PetSkillUse" option="4713" /> <!-- Star Hatchling/Strider - Bright Heal -->
|
||||
<action id="1007" handler="ServitorSkillUse" option="4699" /> <!-- Cat Queen - Blessing of Queen -->
|
||||
<action id="1008" handler="ServitorSkillUse" option="4700" /> <!-- Cat Queen - Gift of Queen -->
|
||||
<action id="1009" handler="ServitorSkillUse" option="4701" /> <!-- Cat Queen - Cure of Queen -->
|
||||
<action id="1010" handler="ServitorSkillUse" option="4702" /> <!-- Unicorn Seraphim - Blessing of Seraphim -->
|
||||
<action id="1011" handler="ServitorSkillUse" option="4703" /> <!-- Unicorn Seraphim - Gift of Seraphim -->
|
||||
<action id="1012" handler="ServitorSkillUse" option="4704" /> <!-- Unicorn Seraphim - Cure of Seraphim -->
|
||||
<action id="1013" handler="ServitorSkillUse" option="4705" /> <!-- Nightshade - Curse of Shade -->
|
||||
<action id="1014" handler="ServitorSkillUse" option="4706" /> <!-- Nightshade - Mass Curse of Shade -->
|
||||
<action id="1015" handler="ServitorSkillUse" option="4707" /> <!-- Nightshade - Shade Sacrifice -->
|
||||
<action id="1016" handler="ServitorSkillUse" option="4709" /> <!-- Cursed Man - Cursed Blow -->
|
||||
<action id="1017" handler="ServitorSkillUse" option="4708" /> <!-- Cursed Man - Cursed Strike/Stun -->
|
||||
<action id="1031" handler="ServitorSkillUse" option="5135" /> <!-- Feline King - Slash -->
|
||||
<action id="1032" handler="ServitorSkillUse" option="5136" /> <!-- Feline King - Spinning Slash -->
|
||||
<action id="1033" handler="ServitorSkillUse" option="5137" /> <!-- Feline King - Grip of the Cat -->
|
||||
<action id="1034" handler="ServitorSkillUse" option="5138" /> <!-- Magnus the Unicorn - Whiplash -->
|
||||
<action id="1035" handler="ServitorSkillUse" option="5139" /> <!-- Magnus the Unicorn - Tridal Wave -->
|
||||
<action id="1036" handler="ServitorSkillUse" option="5142" /> <!-- Spectral Lord - Corpse Kaboom -->
|
||||
<action id="1037" handler="ServitorSkillUse" option="5141" /> <!-- Spectral Lord - Dicing Death -->
|
||||
<action id="1038" handler="ServitorSkillUse" option="5140" /> <!-- Spectral Lord - Force Curse -->
|
||||
<action id="1039" handler="ServitorSkillUse" option="5110" /> <!-- Swoop Cannon - Cannon Fodder -->
|
||||
<action id="1040" handler="ServitorSkillUse" option="5111" /> <!-- Swoop Cannon - Big Bang -->
|
||||
<action id="1041" handler="PetSkillUse" option="5442" /> <!-- Great Wolf - Bite Attack -->
|
||||
<action id="1042" handler="PetSkillUse" option="5444" /> <!-- Great Wolf - Maul -->
|
||||
<action id="1043" handler="PetSkillUse" option="5443" /> <!-- Great Wolf - Cry of the Wolf -->
|
||||
<action id="1044" handler="PetSkillUse" option="5445" /> <!-- Great Wolf - Awakening -->
|
||||
<action id="1045" handler="PetSkillUse" option="5584" /> <!-- Great Wolf - Howl -->
|
||||
<action id="1046" handler="PetSkillUse" option="5585" /> <!-- Strider - Roar -->
|
||||
<action id="1047" handler="ServitorSkillUse" option="5580" /> <!-- Divine Beast - Bite -->
|
||||
<action id="1048" handler="ServitorSkillUse" option="5581" /> <!-- Divine Beast - Stun Attack -->
|
||||
<action id="1049" handler="ServitorSkillUse" option="5582" /> <!-- Divine Beast - Fire Breath -->
|
||||
<action id="1050" handler="ServitorSkillUse" option="5583" /> <!-- Divine Beast - Roar -->
|
||||
<action id="1051" handler="ServitorSkillUse" option="5638" /> <!-- Feline Queen - Bless The Body -->
|
||||
<action id="1052" handler="ServitorSkillUse" option="5639" /> <!-- Feline Queen - Bless The Soul -->
|
||||
<action id="1053" handler="ServitorSkillUse" option="5640" /> <!-- Feline Queen - Haste -->
|
||||
<action id="1054" handler="ServitorSkillUse" option="5643" /> <!-- Unicorn Seraphim - Acumen -->
|
||||
<action id="1055" handler="ServitorSkillUse" option="5647" /> <!-- Unicorn Seraphim - Clarity -->
|
||||
<action id="1056" handler="ServitorSkillUse" option="5648" /> <!-- Unicorn Seraphim - Empower -->
|
||||
<action id="1057" handler="ServitorSkillUse" option="5646" /> <!-- Unicorn Seraphim - Wild Magic -->
|
||||
<action id="1058" handler="ServitorSkillUse" option="5652" /> <!-- Nightshade - Death Whisper -->
|
||||
<action id="1059" handler="ServitorSkillUse" option="5653" /> <!-- Nightshade - Focus -->
|
||||
<action id="1060" handler="ServitorSkillUse" option="5654" /> <!-- Nightshade - Guidance -->
|
||||
<action id="1061" handler="PetSkillUse" option="5745" /> <!-- Wild Beast Fighter, White Weasel - Death blow -->
|
||||
<action id="1062" handler="PetSkillUse" option="5746" /> <!-- Wild Beast Fighter - Double attack -->
|
||||
<action id="1063" handler="PetSkillUse" option="5747" /> <!-- Wild Beast Fighter - Spin attack -->
|
||||
<action id="1064" handler="PetSkillUse" option="5748" /> <!-- Wild Beast Fighter - Meteor Shower -->
|
||||
<action id="1065" handler="PetSkillUse" option="5753" /> <!-- Fox Shaman, Wild Beast Fighter, White Weasel, Fairy Princess - Awakening -->
|
||||
<action id="1066" handler="PetSkillUse" option="5749" /> <!-- Fox Shaman, Spirit Shaman - Thunder Bolt -->
|
||||
<action id="1067" handler="PetSkillUse" option="5750" /> <!-- Fox Shaman, Spirit Shaman - Flash -->
|
||||
<action id="1068" handler="PetSkillUse" option="5751" /> <!-- Fox Shaman, Spirit Shaman - Lightning Wave -->
|
||||
<action id="1069" handler="PetSkillUse" option="5752" /> <!-- Fox Shaman, Fairy Princess - Flare -->
|
||||
<action id="1070" handler="PetSkillUse" option="5771" /> <!-- White Weasel, Fairy Princess, Improved Baby Buffalo, Improved Baby Kookaburra, Improved Baby Cougar, Spirit Shaman, Toy Knight, Turtle Ascetic - Buff control -->
|
||||
<action id="1071" handler="ServitorSkillUse" option="5761" /> <!-- Tigress - Power Strike -->
|
||||
<action id="1072" handler="PetSkillUse" option="6046" /> <!-- Toy Knight - Piercing attack -->
|
||||
<action id="1073" handler="PetSkillUse" option="6047" /> <!-- Toy Knight - Whirlwind -->
|
||||
<action id="1074" handler="PetSkillUse" option="6048" /> <!-- Toy Knight - Lance Smash -->
|
||||
<action id="1075" handler="PetSkillUse" option="6049" /> <!-- Toy Knight - Battle Cry -->
|
||||
<action id="1076" handler="PetSkillUse" option="6050" /> <!-- Turtle Ascetic - Power Smash -->
|
||||
<action id="1077" handler="PetSkillUse" option="6051" /> <!-- Turtle Ascetic - Energy Burst -->
|
||||
<action id="1078" handler="PetSkillUse" option="6052" /> <!-- Turtle Ascetic - Shockwave -->
|
||||
<action id="1079" handler="PetSkillUse" option="6053" /> <!-- Turtle Ascetic - Howl -->
|
||||
<action id="89" handler="SocialAction" option="30" /> <!-- Show Off -->
|
||||
<action id="90" handler="InstanceZoneInfo" /> <!-- Instance Zones -->
|
||||
<action id="92" handler="None" /> <!-- Previous Target (Melee) -->
|
||||
<action id="93" handler="None" /> <!-- Next Target (Range) -->
|
||||
<action id="94" handler="None" /> <!-- Previous Target (Range) -->
|
||||
<action id="95" handler="WaitingAction" /> <!-- Waiting Action -->
|
||||
<action id="96" handler="StrikeBack" /> <!-- Strike Back -->
|
||||
<action id="97" handler="CombatMode" /> <!-- Combat Mode -->
|
||||
<action id="1000" handler="ServitorSkillUse" option="4079" /> <!-- Siege Hammer -->
|
||||
<action id="1001" handler="None" /> <!-- Ultimate Bombastic Buster -->
|
||||
<action id="1002" handler="PetSkillUse" option="4123" /> <!-- Hostile Feeling -->
|
||||
<action id="1003" handler="PetSkillUse" option="4710" /> <!-- Wild Stun -->
|
||||
<action id="1004" handler="PetSkillUse" option="4711" /> <!-- Wild Defense -->
|
||||
<action id="1005" handler="PetSkillUse" option="4712" /> <!-- Bright Burst -->
|
||||
<action id="1006" handler="PetSkillUse" option="4713" /> <!-- Bright Heal -->
|
||||
<action id="1007" handler="ServitorSkillUse" option="4699" /> <!-- Queen's Blessing -->
|
||||
<action id="1008" handler="ServitorSkillUse" option="4700" /> <!-- Queen's Gift -->
|
||||
<action id="1009" handler="ServitorSkillUse" option="4701" /> <!-- Queen's Cure -->
|
||||
<action id="1010" handler="ServitorSkillUse" option="4702" /> <!-- Seraphim's Blessing -->
|
||||
<action id="1011" handler="ServitorSkillUse" option="4703" /> <!-- Seraphim's Gift -->
|
||||
<action id="1012" handler="ServitorSkillUse" option="4704" /> <!-- Seraphim's Cure -->
|
||||
<action id="1013" handler="ServitorSkillUse" option="4705" /> <!-- Shadow's Curse -->
|
||||
<action id="1014" handler="ServitorSkillUse" option="4706" /> <!-- Shadow's Mass Curse -->
|
||||
<action id="1015" handler="ServitorSkillUse" option="4707" /> <!-- Shadow's Sacrifice -->
|
||||
<action id="1016" handler="ServitorSkillUse" option="4709" /> <!-- Cursed Blow -->
|
||||
<action id="1017" handler="ServitorSkillUse" option="4708" /> <!-- Cursed Strike -->
|
||||
|
||||
<!-- TODO: Find skill ids. -->
|
||||
<action id="1018" handler="ServitorSkillUse" option="0" /> <!-- Cursed HP Draining -->
|
||||
<action id="1019" handler="ServitorSkillUse" option="0" /> <!-- Kat the Cat's Skill 2 -->
|
||||
<action id="1020" handler="ServitorSkillUse" option="0" /> <!-- Mew the Cat's Skill 2 -->
|
||||
<action id="1021" handler="ServitorSkillUse" option="0" /> <!-- Kai the Cat's Skill 2 -->
|
||||
<action id="1022" handler="ServitorSkillUse" option="0" /> <!-- Boxer the Unicorn's Skill 2 -->
|
||||
<action id="1023" handler="ServitorSkillUse" option="0" /> <!-- Mirage the Unicorn's Skill 2 -->
|
||||
<action id="1024" handler="ServitorSkillUse" option="0" /> <!-- Merrow the Unicorn Skill 2 -->
|
||||
<action id="1025" handler="ServitorSkillUse" option="0" /> <!-- Shadow's Skill 1 -->
|
||||
<action id="1026" handler="ServitorSkillUse" option="0" /> <!-- Shadow's Skill 2 -->
|
||||
<action id="1027" handler="ServitorSkillUse" option="0" /> <!-- Silhouette's Skill -->
|
||||
<action id="1028" handler="ServitorSkillUse" option="0" /> <!-- Reanimated Man's Skill 1 -->
|
||||
<action id="1029" handler="ServitorSkillUse" option="0" /> <!-- Reanimated Man's Skill 2 -->
|
||||
<action id="1030" handler="ServitorSkillUse" option="0" /> <!-- Corrupted Man's Skill 2 -->
|
||||
|
||||
<action id="1031" handler="ServitorSkillUse" option="5135" /> <!-- Slash -->
|
||||
<action id="1032" handler="ServitorSkillUse" option="5136" /> <!-- Spin Slash -->
|
||||
<action id="1033" handler="ServitorSkillUse" option="5137" /> <!-- Cat's Grip -->
|
||||
<action id="1034" handler="ServitorSkillUse" option="5138" /> <!-- Whiplash -->
|
||||
<action id="1035" handler="ServitorSkillUse" option="5139" /> <!-- Tidal Wave -->
|
||||
<action id="1036" handler="ServitorSkillUse" option="5142" /> <!-- Corpse Burst -->
|
||||
<action id="1037" handler="ServitorSkillUse" option="5141" /> <!-- Dicing Death -->
|
||||
<action id="1038" handler="ServitorSkillUse" option="5140" /> <!-- Dark Curse -->
|
||||
<action id="1039" handler="ServitorSkillUse" option="5110" /> <!-- Cannon Fodder -->
|
||||
<action id="1040" handler="ServitorSkillUse" option="5111" /> <!-- Big Bang -->
|
||||
<action id="1041" handler="PetSkillUse" option="5442" /> <!-- Bite Attack -->
|
||||
<action id="1042" handler="PetSkillUse" option="5444" /> <!-- Maul -->
|
||||
<action id="1043" handler="PetSkillUse" option="5443" /> <!-- Wolf Cry -->
|
||||
<action id="1044" handler="PetSkillUse" option="5445" /> <!-- Awakening -->
|
||||
<action id="1045" handler="PetSkillUse" option="5584" /> <!-- Wolf Howl -->
|
||||
<action id="1046" handler="PetSkillUse" option="5585" /> <!-- Strider Roar -->
|
||||
<action id="1047" handler="ServitorSkillUse" option="5580" /> <!-- Divine Beast's Bite -->
|
||||
<action id="1048" handler="ServitorSkillUse" option="5581" /> <!-- Divine Beast's Stun Attack -->
|
||||
<action id="1049" handler="ServitorSkillUse" option="5582" /> <!-- Divine Beast's Fire Breath -->
|
||||
<action id="1050" handler="ServitorSkillUse" option="5583" /> <!-- Divine Beast's Roar -->
|
||||
<action id="1051" handler="ServitorSkillUse" option="5638" /> <!-- Blessed Body -->
|
||||
<action id="1052" handler="ServitorSkillUse" option="5639" /> <!-- Blessed Soul -->
|
||||
<action id="1053" handler="ServitorSkillUse" option="5640" /> <!-- Haste -->
|
||||
<action id="1054" handler="ServitorSkillUse" option="5643" /> <!-- Acumen -->
|
||||
<action id="1055" handler="ServitorSkillUse" option="5647" /> <!-- Clarity -->
|
||||
<action id="1056" handler="ServitorSkillUse" option="5648" /> <!-- Empower -->
|
||||
<action id="1057" handler="ServitorSkillUse" option="5646" /> <!-- Wild Magic -->
|
||||
<action id="1058" handler="ServitorSkillUse" option="5652" /> <!-- Death Whisper -->
|
||||
<action id="1059" handler="ServitorSkillUse" option="5653" /> <!-- Focus -->
|
||||
<action id="1060" handler="ServitorSkillUse" option="5654" /> <!-- Guidance -->
|
||||
<action id="1061" handler="PetSkillUse" option="5745" /> <!-- Death Blow -->
|
||||
<action id="1062" handler="PetSkillUse" option="5746" /> <!-- Double Attack -->
|
||||
<action id="1063" handler="PetSkillUse" option="5747" /> <!-- Spin Attack -->
|
||||
<action id="1064" handler="PetSkillUse" option="5748" /> <!-- Meteor Shower -->
|
||||
<action id="1065" handler="PetSkillUse" option="5753" /> <!-- Awakening -->
|
||||
<action id="1066" handler="PetSkillUse" option="5749" /> <!-- Thunder Bolt -->
|
||||
<action id="1067" handler="PetSkillUse" option="5750" /> <!-- Blaze -->
|
||||
<action id="1068" handler="PetSkillUse" option="5751" /> <!-- Lightning Wave -->
|
||||
<action id="1069" handler="PetSkillUse" option="5752" /> <!-- Flare -->
|
||||
<action id="1070" handler="PetSkillUse" option="5771" /> <!-- Buff Control -->
|
||||
<action id="1071" handler="ServitorSkillUse" option="5761" /> <!-- Power Striker -->
|
||||
<action id="1072" handler="PetSkillUse" option="6046" /> <!-- Piercing Attack -->
|
||||
<action id="1073" handler="PetSkillUse" option="6047" /> <!-- Whirlwind -->
|
||||
<action id="1074" handler="PetSkillUse" option="6048" /> <!-- Spear Strike -->
|
||||
<action id="1075" handler="PetSkillUse" option="6049" /> <!-- Battle Cry -->
|
||||
<action id="1076" handler="PetSkillUse" option="6050" /> <!-- Power Smash -->
|
||||
<action id="1077" handler="PetSkillUse" option="6051" /> <!-- Energy Burst -->
|
||||
<action id="1078" handler="PetSkillUse" option="6052" /> <!-- Shock Wave -->
|
||||
<action id="1079" handler="PetSkillUse" option="6053" /> <!-- Howl -->
|
||||
<action id="1080" handler="ServitorSkillUse" option="6041" /> <!-- Phoenix Rush -->
|
||||
<action id="1081" handler="ServitorSkillUse" option="6042" /> <!-- Phoenix Cleanse -->
|
||||
<action id="1082" handler="ServitorSkillUse" option="6043" /> <!-- Phoenix Flame Feather -->
|
||||
<action id="1083" handler="ServitorSkillUse" option="6044" /> <!-- Phoenix Flame Beak -->
|
||||
<action id="1084" handler="PetSkillUse" option="6054" /> <!-- Switch State -->
|
||||
<action id="1084" handler="PetSkillUse" option="6054" /> <!-- Switch Tactics -->
|
||||
<action id="1086" handler="ServitorSkillUse" option="6094" /> <!-- Panther Cancel -->
|
||||
<action id="1087" handler="ServitorSkillUse" option="6095" /> <!-- Panther Dark Claw -->
|
||||
<action id="1088" handler="ServitorSkillUse" option="6096" /> <!-- Panther Fatal Claw -->
|
||||
<action id="1089" handler="PetSkillUse" option="6199" /> <!-- Deinonychus - Tail Strike -->
|
||||
<action id="1090" handler="PetSkillUse" option="6205" /> <!-- Guardian's Strider - Strider Bite -->
|
||||
<action id="1091" handler="PetSkillUse" option="6206" /> <!-- Guardian's Strider - Strider Fear -->
|
||||
<action id="1092" handler="PetSkillUse" option="6207" /> <!-- Guardian's Strider - Strider Dash -->
|
||||
<action id="1093" handler="PetSkillUse" option="6618" /> <!-- Maguen - Maguen Strike -->
|
||||
<action id="1094" handler="PetSkillUse" option="6681" /> <!-- Maguen - Maguen Wind Walk -->
|
||||
<action id="1095" handler="PetSkillUse" option="6619" /> <!-- Elite Maguen - Maguen Power Strike -->
|
||||
<action id="1096" handler="PetSkillUse" option="6682" /> <!-- Elite Maguen - Elite Maguen Wind Walk -->
|
||||
<action id="1097" handler="PetSkillUse" option="6683" /> <!-- Maguen - Maguen Return -->
|
||||
<action id="1098" handler="PetSkillUse" option="6684" /> <!-- Elite Maguen - Maguen Party Return -->
|
||||
<action id="1099" handler="ServitorAttack" /> <!-- All Attack -->
|
||||
<action id="1100" handler="ServitorMove" /> <!-- All Move to target -->
|
||||
<action id="1101" handler="ServitorStop" /> <!-- All Stop -->
|
||||
<action id="1102" handler="UnsummonServitor" />
|
||||
<action id="1103" handler="ServitorMode" option="1" /> <!-- All Passive mode -->
|
||||
<action id="1104" handler="ServitorMode" option="2" /> <!-- All Defending mode -->
|
||||
<action id="1106" handler="ServitorSkillUse" option="11278" /> <!-- Cute Bear - Bear Claw -->
|
||||
<action id="1107" handler="ServitorSkillUse" option="11279" /> <!-- Cute Bear - Bear Tumbling -->
|
||||
<action id="1108" handler="ServitorSkillUse" option="11280" /> <!-- Saber Tooth Cougar- Cougar Bite -->
|
||||
<action id="1109" handler="ServitorSkillUse" option="11281" /> <!-- Saber Tooth Cougar - Cougar Pounce -->
|
||||
<action id="1110" handler="ServitorSkillUse" option="11282" /> <!-- Grim Reaper - Reaper Touch -->
|
||||
<action id="1111" handler="ServitorSkillUse" option="11283" /> <!-- Grim Reaper - Reaper Power -->
|
||||
<action id="1113" handler="ServitorSkillUse" option="10051" /> <!-- Golden Lion - Lion Roar -->
|
||||
<action id="1114" handler="ServitorSkillUse" option="10052" /> <!-- Golden Lion - Lion Claw -->
|
||||
<action id="1115" handler="ServitorSkillUse" option="10053" /> <!-- Golden Lion - Lion Dash -->
|
||||
<action id="1116" handler="ServitorSkillUse" option="10054" /> <!-- Golden Lion - Lion Flame -->
|
||||
<action id="1117" handler="ServitorSkillUse" option="10794" /> <!-- Thunder Hawk - Thunder Flight -->
|
||||
<action id="1118" handler="ServitorSkillUse" option="10795" /> <!-- Thunder Hawk - Thunder Purity -->
|
||||
<action id="1120" handler="ServitorSkillUse" option="10797" /> <!-- Thunder Hawk - Thunder Feather Blast -->
|
||||
<action id="1121" handler="ServitorSkillUse" option="10798" /> <!-- Thunder Hawk - Thunder Sharp Claw -->
|
||||
<action id="1122" handler="ServitorSkillUse" option="11806" /> <!-- Tree of Life - Blessing of Tree -->
|
||||
<action id="1123" handler="ServitorSkillUse" option="14767" /> <!-- Siege Golem - Siege Punch -->
|
||||
<action id="1124" handler="ServitorSkillUse" option="11323" /> <!-- Wynn Kai the Cat - Feline Aggression -->
|
||||
<action id="1125" handler="ServitorSkillUse" option="11324" /> <!-- Wynn Kai the Cat - Feline Stun -->
|
||||
<action id="1126" handler="ServitorSkillUse" option="11325" /> <!-- Wynn Feline King - Feline Bite -->
|
||||
<action id="1127" handler="ServitorSkillUse" option="11326" /> <!-- Wynn Feline King - Feline Pounce -->
|
||||
<action id="1128" handler="ServitorSkillUse" option="11327" /> <!-- Wynn Feline Queen - Feline Touch -->
|
||||
<action id="1129" handler="ServitorSkillUse" option="11328" /> <!-- Wynn Feline Queen - Feline Power -->
|
||||
<action id="1130" handler="ServitorSkillUse" option="11332" /> <!-- Wynn Merrow - Unicorn's Aggression -->
|
||||
<action id="1131" handler="ServitorSkillUse" option="11333" /> <!-- Wynn Merrow - Unicorn's Stun -->
|
||||
<action id="1132" handler="ServitorSkillUse" option="11334" /> <!-- Wynn Magnus - Unicorn's Bite -->
|
||||
<action id="1133" handler="ServitorSkillUse" option="11335" /> <!-- Wynn Magnus - Unicorn's Pounce -->
|
||||
<action id="1134" handler="ServitorSkillUse" option="11336" /> <!-- Wynn Seraphim - Unicorn's Touch -->
|
||||
<action id="1135" handler="ServitorSkillUse" option="11337" /> <!-- Wynn Seraphim - Unicorn's Power -->
|
||||
<action id="1136" handler="ServitorSkillUse" option="11341" /> <!-- Wynn Nightshade - Phantom Aggression -->
|
||||
<action id="1137" handler="ServitorSkillUse" option="11342" /> <!-- Wynn Nightshade - Phantom Stun -->
|
||||
<action id="1138" handler="ServitorSkillUse" option="11343" /> <!-- Wynn Spectral Lord - Phantom Bite -->
|
||||
<action id="1139" handler="ServitorSkillUse" option="11344" /> <!-- Wynn Spectral Lord - Phantom Pounce -->
|
||||
<action id="1140" handler="ServitorSkillUse" option="11345" /> <!-- Wynn Soulless - Phantom Touch -->
|
||||
<action id="1141" handler="ServitorSkillUse" option="11346" /> <!-- Wynn Soulless - Phantom Power -->
|
||||
<action id="1142" handler="ServitorSkillUse" option="10087" /> <!-- Blood Panther - Panther Roar -->
|
||||
<action id="1143" handler="ServitorSkillUse" option="10088" /> <!-- Blood Panther - Panther Rush -->
|
||||
<action id="1144" handler="ServitorSkillUse" option="11375" /> <!-- Commando Cat - Commando Jumping Attack -->
|
||||
<action id="1145" handler="ServitorSkillUse" option="11376" /> <!-- Commando Cat - Commando Double Slash -->
|
||||
<action id="1146" handler="ServitorSkillUse" option="11378" /> <!-- Witch Cat - Elemental Slam -->
|
||||
<action id="1147" handler="ServitorSkillUse" option="11377" /> <!-- Witch Cat - Witch Cat Power -->
|
||||
<action id="1148" handler="ServitorSkillUse" option="11379" /> <!-- Unicorn Lancer - Lancer Rush -->
|
||||
<action id="1149" handler="ServitorSkillUse" option="11380" /> <!-- Unicorn Lancer - Power Stamp -->
|
||||
<action id="1150" handler="ServitorSkillUse" option="11382" /> <!-- Unicorn Cherub - Multiple Icicles -->
|
||||
<action id="1151" handler="ServitorSkillUse" option="11381" /> <!-- Unicorn Cherub - Cherub Power -->
|
||||
<action id="1152" handler="ServitorSkillUse" option="11383" /> <!-- Dark Crusader - Phantom Sword Attack -->
|
||||
<action id="1153" handler="ServitorSkillUse" option="11384" /> <!-- Dark Crusader - Phantom Blow -->
|
||||
<action id="1154" handler="ServitorSkillUse" option="11385" /> <!-- Banshee Queen - Phantom Spike -->
|
||||
<action id="1155" handler="ServitorSkillUse" option="11386" /> <!-- Banshee Queen - Phantom Crash -->
|
||||
<action id="5000" handler="PetSkillUse" option="23155" /> <!-- Baby Rudolph - Reindeer Scratch -->
|
||||
<action id="5001" handler="PetSkillUse" option="23167" /> <!-- Deseloph, Hyum, Rekang, Lilias, Lapham, Mafum - Rosy Seduction -->
|
||||
<action id="5002" handler="PetSkillUse" option="23168" /> <!-- Deseloph, Hyum, Rekang, Lilias, Lapham, Mafum - Critical Seduction -->
|
||||
<action id="5003" handler="PetSkillUse" option="5749" /> <!-- Hyum, Lapham, Hyum, Lapham - Thunder Bolt -->
|
||||
<action id="5004" handler="PetSkillUse" option="5750" /> <!-- Hyum, Lapham, Hyum, Lapham - Flash -->
|
||||
<action id="5005" handler="PetSkillUse" option="5751" /> <!-- Hyum, Lapham, Hyum, Lapham - Lightning Wave -->
|
||||
<action id="5006" handler="PetSkillUse" option="5771" /> <!-- Deseloph, Hyum, Rekang, Lilias, Lapham, Mafum, Deseloph, Hyum, Rekang, Lilias, Lapham, Mafum - Buff Control -->
|
||||
<action id="5007" handler="PetSkillUse" option="6046" /> <!-- Deseloph, Lilias, Deseloph, Lilias - Piercing Attack -->
|
||||
<action id="5008" handler="PetSkillUse" option="6047" /> <!-- Deseloph, Lilias, Deseloph, Lilias - Spin Attack -->
|
||||
<action id="5009" handler="PetSkillUse" option="6048" /> <!-- Deseloph, Lilias, Deseloph, Lilias - Smash -->
|
||||
<action id="5010" handler="PetSkillUse" option="6049" /> <!-- Deseloph, Lilias, Deseloph, Lilias - Ignite -->
|
||||
<action id="5011" handler="PetSkillUse" option="6050" /> <!-- Rekang, Mafum, Rekang, Mafum - Power Smash -->
|
||||
<action id="5012" handler="PetSkillUse" option="6051" /> <!-- Rekang, Mafum, Rekang, Mafum - Energy Burst -->
|
||||
<action id="5013" handler="PetSkillUse" option="6052" /> <!-- Rekang, Mafum, Rekang, Mafum - Shockwave -->
|
||||
<action id="5014" handler="PetSkillUse" option="6053" /> <!-- Rekang, Mafum, Rekang, Mafum - Ignite -->
|
||||
<action id="5015" handler="PetSkillUse" option="6054" /> <!-- Deseloph, Hyum, Rekang, Lilias, Lapham, Mafum, Deseloph, Hyum, Rekang, Lilias, Lapham, Mafum - Switch Stance -->
|
||||
<action id="1087" handler="ServitorSkillUse" option="6095" /> <!-- Panther's Dark Claw -->
|
||||
<action id="1088" handler="ServitorSkillUse" option="6096" /> <!-- Panther's Fatal Claw -->
|
||||
<action id="1089" handler="PetSkillUse" option="6199" /> <!-- Tail Strike -->
|
||||
<action id="1090" handler="PetSkillUse" option="6205" /> <!-- Strider Bite -->
|
||||
<action id="1091" handler="PetSkillUse" option="6206" /> <!-- Strider Fear -->
|
||||
<action id="1092" handler="PetSkillUse" option="6207" /> <!-- Strider Dash -->
|
||||
<action id="1093" handler="PetSkillUse" option="6618" /> <!-- Maguen's Strike -->
|
||||
<action id="1094" handler="PetSkillUse" option="6681" /> <!-- Maguen Wind Walk -->
|
||||
<action id="1095" handler="PetSkillUse" option="6619" /> <!-- Maguen's Power Strike -->
|
||||
<action id="1096" handler="PetSkillUse" option="6682" /> <!-- Elite Maguen Wind Walk -->
|
||||
<action id="1097" handler="PetSkillUse" option="6683" /> <!-- Maguen Return -->
|
||||
<action id="1098" handler="PetSkillUse" option="6684" /> <!-- Maguen Party Return -->
|
||||
<action id="1099" handler="ServitorAttack" /> <!-- Attackers -->
|
||||
<action id="1100" handler="ServitorMove" /> <!-- Teleport -->
|
||||
<action id="1101" handler="ServitorStop" /> <!-- Stop -->
|
||||
<action id="1102" handler="UnsummonServitor" /> <!-- Unsummon -->
|
||||
<action id="1103" handler="ServitorMode" option="1" /> <!-- Passive -->
|
||||
<action id="1104" handler="ServitorMode" option="2" /> <!-- Defense -->
|
||||
<action id="1106" handler="ServitorSkillUse" option="11278" /> <!-- Bear Claw -->
|
||||
<action id="1107" handler="ServitorSkillUse" option="11279" /> <!-- Bear Tumbling -->
|
||||
<action id="1108" handler="ServitorSkillUse" option="11280" /> <!-- Cougar Bite -->
|
||||
<action id="1109" handler="ServitorSkillUse" option="11281" /> <!-- Cougar Pounce -->
|
||||
<action id="1110" handler="ServitorSkillUse" option="11282" /> <!-- Reaper Touch -->
|
||||
<action id="1111" handler="ServitorSkillUse" option="11283" /> <!-- Reaper Power -->
|
||||
<action id="1113" handler="ServitorSkillUse" option="10051" /> <!-- Lion Roar -->
|
||||
<action id="1114" handler="ServitorSkillUse" option="10052" /> <!-- Lion Claw -->
|
||||
<action id="1115" handler="ServitorSkillUse" option="10053" /> <!-- Lion Dash -->
|
||||
<action id="1116" handler="ServitorSkillUse" option="10054" /> <!-- Lion Flame -->
|
||||
<action id="1117" handler="ServitorSkillUse" option="10794" /> <!-- Thunder Flight -->
|
||||
<action id="1118" handler="ServitorSkillUse" option="10795" /> <!-- Thunder Purity -->
|
||||
<action id="1120" handler="ServitorSkillUse" option="10797" /> <!-- Thunder Feather Blast -->
|
||||
<action id="1121" handler="ServitorSkillUse" option="10798" /> <!-- Thunder Sharp Claw -->
|
||||
<action id="1122" handler="ServitorSkillUse" option="11806" /> <!-- Blessing of Life -->
|
||||
<action id="1123" handler="ServitorSkillUse" option="14767" /> <!-- Siege Punch -->
|
||||
<action id="1124" handler="ServitorSkillUse" option="11323" /> <!-- Feline Aggression -->
|
||||
<action id="1125" handler="ServitorSkillUse" option="11324" /> <!-- Feline Stun -->
|
||||
<action id="1126" handler="ServitorSkillUse" option="11325" /> <!-- Feline Bite -->
|
||||
<action id="1127" handler="ServitorSkillUse" option="11326" /> <!-- Feline Pounce -->
|
||||
<action id="1128" handler="ServitorSkillUse" option="11327" /> <!-- Feline Touch -->
|
||||
<action id="1129" handler="ServitorSkillUse" option="11328" /> <!-- Feline Power -->
|
||||
<action id="1130" handler="ServitorSkillUse" option="11332" /> <!-- Unicorn's Aggression -->
|
||||
<action id="1131" handler="ServitorSkillUse" option="11333" /> <!-- Unicorn's Stun -->
|
||||
<action id="1132" handler="ServitorSkillUse" option="11334" /> <!-- Unicorn's Bite -->
|
||||
<action id="1133" handler="ServitorSkillUse" option="11335" /> <!-- Unicorn's Pounce -->
|
||||
<action id="1134" handler="ServitorSkillUse" option="11336" /> <!-- Unicorn's Touch -->
|
||||
<action id="1135" handler="ServitorSkillUse" option="11337" /> <!-- Unicorn's Power -->
|
||||
<action id="1136" handler="ServitorSkillUse" option="11341" /> <!-- Phantom Aggression -->
|
||||
<action id="1137" handler="ServitorSkillUse" option="11342" /> <!-- Phantom Stun -->
|
||||
<action id="1138" handler="ServitorSkillUse" option="11343" /> <!-- Phantom Bite -->
|
||||
<action id="1139" handler="ServitorSkillUse" option="11344" /> <!-- Phantom's Pounce -->
|
||||
<action id="1140" handler="ServitorSkillUse" option="11345" /> <!-- Phantom Touch -->
|
||||
<action id="1141" handler="ServitorSkillUse" option="11346" /> <!-- Phantom Power -->
|
||||
<action id="1144" handler="ServitorSkillUse" option="11375" /> <!-- Commando Jumping Attack -->
|
||||
<action id="1145" handler="ServitorSkillUse" option="11376" /> <!-- Commando Double Slash -->
|
||||
<action id="1146" handler="ServitorSkillUse" option="11378" /> <!-- Elemental Slam -->
|
||||
<action id="1147" handler="ServitorSkillUse" option="11377" /> <!-- Witch Cat Power -->
|
||||
<action id="1148" handler="ServitorSkillUse" option="11379" /> <!-- Lancer Rush -->
|
||||
<action id="1149" handler="ServitorSkillUse" option="11380" /> <!-- Power Stamp -->
|
||||
<action id="1150" handler="ServitorSkillUse" option="11382" /> <!-- Multiple Icicles -->
|
||||
<action id="1151" handler="ServitorSkillUse" option="11381" /> <!-- Cherub Power -->
|
||||
<action id="1152" handler="ServitorSkillUse" option="11383" /> <!-- Phantom Sword Attack -->
|
||||
<action id="1153" handler="ServitorSkillUse" option="11384" /> <!-- Phantom Blow -->
|
||||
<action id="1154" handler="ServitorSkillUse" option="11385" /> <!-- Phantom Spike -->
|
||||
<action id="1155" handler="ServitorSkillUse" option="11386" /> <!-- Phantom Crash -->
|
||||
<action id="1156" handler="ServitorSkillUse" option="19406" /> <!-- Curse of Deadlands -->
|
||||
<action id="5000" handler="PetSkillUse" option="23155" /> <!-- Hand of Warmth -->
|
||||
<action id="5001" handler="PetSkillUse" option="23167" /> <!-- Rosy Seduction -->
|
||||
<action id="5002" handler="PetSkillUse" option="23168" /> <!-- Art of Seduction -->
|
||||
<action id="5003" handler="PetSkillUse" option="5749" /> <!-- Thunder Bolt -->
|
||||
<action id="5004" handler="PetSkillUse" option="5750" /> <!-- Flash -->
|
||||
<action id="5005" handler="PetSkillUse" option="5751" /> <!-- Lightning Wave -->
|
||||
<action id="5006" handler="PetSkillUse" option="5771" /> <!-- Buff Control -->
|
||||
<action id="5007" handler="PetSkillUse" option="6046" /> <!-- Piercing Attack -->
|
||||
<action id="5008" handler="PetSkillUse" option="6047" /> <!-- Spin Attack -->
|
||||
<action id="5009" handler="PetSkillUse" option="6048" /> <!-- Impale -->
|
||||
<action id="5010" handler="PetSkillUse" option="6049" /> <!-- Battle Cry -->
|
||||
<action id="5011" handler="PetSkillUse" option="6050" /> <!-- Power Smash -->
|
||||
<action id="5012" handler="PetSkillUse" option="6051" /> <!-- Energy Burst -->
|
||||
<action id="5013" handler="PetSkillUse" option="6052" /> <!-- Shock Wave -->
|
||||
<action id="5014" handler="PetSkillUse" option="6053" /> <!-- Ignite -->
|
||||
<action id="5015" handler="PetSkillUse" option="6054" /> <!-- Switch Tactics -->
|
||||
<action id="5016" handler="PetSkillUse" option="23318" /> <!-- Cat the Ranger Boost -->
|
||||
</list>
|
||||
@@ -177,9 +177,9 @@
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="2101" name="Field Boss I" requiredCompletion="3" isOneTime="false">
|
||||
<!-- Defeat any of the field raid bosses 3 times: Baium Orfen Lilith Anakim Ishka -->
|
||||
<!-- Defeat any of the field raid bosses 3 times: Orfen Lilith Anakim Lord Ishka Queen Ant Guillotine -->
|
||||
<handler name="boss">
|
||||
<param name="ids">29020,29325,29336,29348,29379</param>
|
||||
<param name="ids">29325,29336,29348,29379,25888</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="100" /> <!-- Clan Reputation -->
|
||||
@@ -332,11 +332,11 @@
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3031" name="World Boss Raid: First Steps" requiredCompletion="1">
|
||||
<!-- Defeat 1 of the following once. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<!-- Defeat 1 of the following once. Antharas Valakas Lindvior Helios Etis van Etina -->
|
||||
<handler name="boss">
|
||||
<param name="minLevel">95</param>
|
||||
<param name="maxLevel">255</param>
|
||||
<param name="ids">29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320</param>
|
||||
<param name="ids">29068,29028,29240,29305,29320</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="200" /> <!-- Clan Reputation -->
|
||||
@@ -344,11 +344,11 @@
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3032" name="World Boss Raid: Seasoned" requiredMissionCompleteId="3031" requiredCompletion="10">
|
||||
<!-- Defeat 1 of the following 10 times. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<!-- Defeat 1 of the following 10 times. Antharas Valakas Lindvior Helios Etis van Etina -->
|
||||
<handler name="boss">
|
||||
<param name="minLevel">95</param>
|
||||
<param name="maxLevel">255</param>
|
||||
<param name="ids">29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320</param>
|
||||
<param name="ids">29068,29028,29240,29305,29320</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="1000" /> <!-- Clan Reputation -->
|
||||
@@ -356,11 +356,11 @@
|
||||
</items>
|
||||
</reward>
|
||||
<reward id="3033" name="World Boss Raid: Expert" requiredMissionCompleteId="3032" requiredCompletion="30">
|
||||
<!-- Defeat 1 of the following 30 times. Antharas Valakas Lindvior Fafurion Helios Etis van Etina -->
|
||||
<!-- Defeat 1 of the following 30 times. Antharas Valakas Lindvior Helios Etis van Etina -->
|
||||
<handler name="boss">
|
||||
<param name="minLevel">95</param>
|
||||
<param name="maxLevel">255</param>
|
||||
<param name="ids">29068,29028,29240,29361,29362,29363,29364,29365,29366,29367,29305,29320</param>
|
||||
<param name="ids">29068,29028,29240,29305,29320</param>
|
||||
</handler>
|
||||
<items>
|
||||
<item id="-200" count="2000" /> <!-- Clan Reputation -->
|
||||
|
||||
@@ -11659,6 +11659,176 @@
|
||||
<openStatus default="open" />
|
||||
</door>
|
||||
|
||||
<!-- 21_16 FIXME: Rune clanhall doors cannot be found in client. -->
|
||||
<door id="21160001" name="rune_castle_agit_002_001">
|
||||
<nodes nodeZ="872">
|
||||
<node x="37679" y="-50432" />
|
||||
<node x="37726" y="-50433" />
|
||||
<node x="37726" y="-50423" />
|
||||
<node x="37678" y="-50424" />
|
||||
</nodes>
|
||||
<location x="37680" y="-50428" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160002" name="rune_castle_agit_002_002">
|
||||
<nodes nodeZ="872">
|
||||
<node x="37724" y="-50432" />
|
||||
<node x="37771" y="-50432" />
|
||||
<node x="37771" y="-50423" />
|
||||
<node x="37723" y="-50424" />
|
||||
</nodes>
|
||||
<location x="37770" y="-50428" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160003" name="rune_castle_agit_003_001">
|
||||
<nodes nodeZ="872">
|
||||
<node x="38527" y="-50151" />
|
||||
<node x="38570" y="-50131" />
|
||||
<node x="38566" y="-50122" />
|
||||
<node x="38524" y="-50144" />
|
||||
</nodes>
|
||||
<location x="38527" y="-50147" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160004" name="rune_castle_agit_003_002">
|
||||
<nodes nodeZ="872">
|
||||
<node x="38569" y="-50132" />
|
||||
<node x="38610" y="-50111" />
|
||||
<node x="38606" y="-50103" />
|
||||
<node x="38564" y="-50124" />
|
||||
</nodes>
|
||||
<location x="38607" y="-50108" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160005" name="rune_castle_agit_004_001">
|
||||
<nodes nodeZ="872">
|
||||
<node x="39122" y="-49542" />
|
||||
<node x="39145" y="-49501" />
|
||||
<node x="39137" y="-49498" />
|
||||
<node x="39115" y="-49539" />
|
||||
</nodes>
|
||||
<location x="39119" y="-49539" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160006" name="rune_castle_agit_004_002">
|
||||
<nodes nodeZ="872">
|
||||
<node x="39145" y="-49503" />
|
||||
<node x="39167" y="-49462" />
|
||||
<node x="39160" y="-49459" />
|
||||
<node x="39136" y="-49498" />
|
||||
</nodes>
|
||||
<location x="39163" y="-49461" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160007" name="rune_castle_agit_001_001">
|
||||
<nodes nodeZ="870">
|
||||
<node x="39341" y="-48291" />
|
||||
<node x="39341" y="-48245" />
|
||||
<node x="39335" y="-48245" />
|
||||
<node x="39334" y="-48290" />
|
||||
</nodes>
|
||||
<location x="39338" y="-48290" z="870" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160008" name="rune_castle_agit_001_002">
|
||||
<nodes nodeZ="870">
|
||||
<node x="39341" y="-48246" />
|
||||
<node x="39342" y="-48199" />
|
||||
<node x="39334" y="-48199" />
|
||||
<node x="39334" y="-48246" />
|
||||
</nodes>
|
||||
<location x="39338" y="-48200" z="870" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160009" name="rune_castle_agit_005_001">
|
||||
<nodes nodeZ="872">
|
||||
<node x="39176" y="-47024" />
|
||||
<node x="39155" y="-46982" />
|
||||
<node x="39147" y="-46986" />
|
||||
<node x="39169" y="-47026" />
|
||||
</nodes>
|
||||
<location x="39172" y="-47024" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160010" name="rune_castle_agit_005_002">
|
||||
<nodes nodeZ="872">
|
||||
<node x="39154" y="-46982" />
|
||||
<node x="39133" y="-46942" />
|
||||
<node x="39127" y="-46945" />
|
||||
<node x="39148" y="-46986" />
|
||||
</nodes>
|
||||
<location x="39130" y="-46944" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160011" name="rune_castle_agit_006_001">
|
||||
<nodes nodeZ="872">
|
||||
<node x="38626" y="-46372" />
|
||||
<node x="38586" y="-46350" />
|
||||
<node x="38581" y="-46358" />
|
||||
<node x="38623" y="-46379" />
|
||||
</nodes>
|
||||
<location x="38624" y="-46375" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160012" name="rune_castle_agit_006_002">
|
||||
<nodes nodeZ="872">
|
||||
<node x="38587" y="-46350" />
|
||||
<node x="38545" y="-46330" />
|
||||
<node x="38542" y="-46336" />
|
||||
<node x="38583" y="-46358" />
|
||||
</nodes>
|
||||
<location x="38544" y="-46333" z="872" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160013" name="rune_castle_agit_007_001">
|
||||
<nodes nodeZ="873">
|
||||
<node x="37787" y="-46044" />
|
||||
<node x="37741" y="-46044" />
|
||||
<node x="37741" y="-46051" />
|
||||
<node x="37787" y="-46050" />
|
||||
</nodes>
|
||||
<location x="37787" y="-46047" z="873" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
<door id="21160014" name="rune_castle_agit_007_002">
|
||||
<nodes nodeZ="873">
|
||||
<node x="37743" y="-46043" />
|
||||
<node x="37697" y="-46045" />
|
||||
<node x="37697" y="-46051" />
|
||||
<node x="37742" y="-46051" />
|
||||
</nodes>
|
||||
<location x="37697" y="-46048" z="873" height="450" />
|
||||
<stats basePDef="644" baseMDef="518" baseHpMax="316500" />
|
||||
<status showHp="false" />
|
||||
<openStatus openMethod="BY_CLICK" default="close" />
|
||||
</door>
|
||||
|
||||
<!-- 21_17 -->
|
||||
<door id="21170001" name="Rune_bodeful_fortress_s.Rune_bf_azit_gate_door">
|
||||
<nodes nodeZ="544">
|
||||
|
||||
6
L2J_Mobius_10.3_MasterClass/dist/game/data/html/default/34426.htm
vendored
Normal file
6
L2J_Mobius_10.3_MasterClass/dist/game/data/html/default/34426.htm
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<html><body>Blackbird Clan Lord Leona Blackbird:<br>
|
||||
This place is the Atelia Outlet, the most important place of Atelia Refinery.<br>
|
||||
Embryos might sense your presence, so please be very careful.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10889_SaviorsPathFallenEmperorsThrone teleport">Teleport to the inside of Atelia Refinery.</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
||||
@@ -42,7 +42,7 @@
|
||||
<production count="1" id="38568" />
|
||||
</item>
|
||||
<item>
|
||||
<!-- Enhanced Tauti's Bracelet -->
|
||||
<!-- Enhanced Tauti's Bracelet -->
|
||||
<ingredient count="1" id="35294" />
|
||||
<!-- Raidboss Points -->
|
||||
<ingredient count="1000" id="-500" />
|
||||
@@ -50,7 +50,7 @@
|
||||
<production count="1" id="38569" />
|
||||
</item>
|
||||
<item>
|
||||
<!-- Enhanced Tauti's Bracelet -->
|
||||
<!-- Enhanced Tauti's Bracelet -->
|
||||
<ingredient count="1" id="35294" />
|
||||
<!-- Raidboss Points -->
|
||||
<ingredient count="1000" id="-500" />
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<item>
|
||||
<ingredient count="10" id="45584" />
|
||||
<ingredient count="500000" id="57" />
|
||||
<production count="1" id="37894" /> <!-- Hero’s Recovery Potion -->
|
||||
<production count="1" id="37894" /> <!-- Hero's Recovery Potion -->
|
||||
</item>
|
||||
<item>
|
||||
<ingredient count="2" id="45584" />
|
||||
|
||||
@@ -657,7 +657,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
updatePoints(attackerPlayer, CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel()), CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel()), 0, 0, true);
|
||||
if ((getAttackPoints(attackerPlayer) >= 1) && (getLifePoints(targetPlayer) >= 1))
|
||||
{
|
||||
attackerPlayer.addItem("ConquestCoins", BLOODY_COIN, CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel()), attackerPlayer, true);
|
||||
attackerPlayer.addItem("ConquestCoins", BLOODY_COIN, CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel()) * Config.CONQUEST_RATE_BLOODY_COINS, attackerPlayer, true);
|
||||
setAttackPoints(attackerPlayer, -1);
|
||||
setLifePoints(targetPlayer, -1);
|
||||
|
||||
@@ -669,7 +669,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
// Winner Message
|
||||
SystemMessage sm2 = new SystemMessage(SystemMessageId.YOU_HAVE_DEFEATED_C1_AND_GOT_BLOODY_COINS_X_S2_PERSONAL_CONQUEST_POINTS_X_S3_SERVER_CONQUEST_POINTS_X_S4_ATTACK_POINTS_1_TO_CHECK_THEIR_CURRENT_AMOUNT_ENTER_BLOODYCOIN_IN_YOUR_CHAT_WINDOW);
|
||||
sm2.addString(targetPlayer.getName());
|
||||
sm2.addString(Integer.toString(CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel())));
|
||||
sm2.addString(Integer.toString(CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel()) * Config.CONQUEST_RATE_BLOODY_COINS));
|
||||
sm2.addString(Long.toString(CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel())));
|
||||
sm2.addString(Long.toString(CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel())));
|
||||
attackerPlayer.sendPacket(sm2);
|
||||
|
||||
@@ -170,7 +170,6 @@ public class LionelHunter extends AbstractNpcAI
|
||||
htmltext = "33907-not-completed.html";
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
@@ -186,4 +185,4 @@ public class LionelHunter extends AbstractNpcAI
|
||||
{
|
||||
new LionelHunter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* 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.Rune.SwampOfScreams;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.gameserver.data.xml.SpawnData;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.spawns.SpawnGroup;
|
||||
import org.l2jmobius.gameserver.model.spawns.SpawnTemplate;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Tanatos
|
||||
*/
|
||||
public class SwampOfScreamsSiege extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int[] SWAMP_MONSTERS =
|
||||
{
|
||||
24570,
|
||||
24571,
|
||||
24572,
|
||||
24573
|
||||
};
|
||||
private static final int SWAMP_PETRA = 24574;
|
||||
private static final AtomicReference<SpawnTemplate> SPAWN_SWAMP_MONSTERS = new AtomicReference<>();
|
||||
// Misc
|
||||
private static final int[] DAYS_OF_WEEK =
|
||||
{
|
||||
Calendar.MONDAY,
|
||||
Calendar.TUESDAY,
|
||||
Calendar.WEDNESDAY,
|
||||
Calendar.THURSDAY,
|
||||
Calendar.FRIDAY,
|
||||
Calendar.SATURDAY,
|
||||
Calendar.SUNDAY
|
||||
};
|
||||
// Schedule: 10-11 & 22-23
|
||||
private static final int[] DAY_TIME =
|
||||
{
|
||||
10,
|
||||
00
|
||||
};
|
||||
private static final int[] NIGHT_TIME =
|
||||
{
|
||||
22,
|
||||
00
|
||||
};
|
||||
private static final long DESPAWN_DELAY = 3600000;
|
||||
private static boolean _daytime = false;
|
||||
|
||||
private SwampOfScreamsSiege()
|
||||
{
|
||||
addKillId(SWAMP_MONSTERS);
|
||||
scheduleDayTime();
|
||||
scheduleNightTime();
|
||||
LOGGER.info("Swamp of Screams siege starts from 10:00 to 11:00 and from 22:00 to 23:00.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "day_time_spawn":
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_00_11_00_MONSTERS_ARE_SPAWNING_IN_THE_SWAMP_OF_SCREAMS_KILL_THEM_ALL, 2, 10000, true));
|
||||
SPAWN_SWAMP_MONSTERS.set(SpawnData.getInstance().getSpawnByName("SwampOfScreamsMonsters"));
|
||||
SPAWN_SWAMP_MONSTERS.get().getGroups().forEach(SpawnGroup::spawnAll);
|
||||
_daytime = true;
|
||||
startQuestTimer("despawn", DESPAWN_DELAY, null, null);
|
||||
break;
|
||||
}
|
||||
case "night_time_spawn":
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_00_P_M_11_00_P_M_MONSTERS_ARE_INVADING_THE_SWAMP_OF_SCREAMS_AT_NIGHT_TIME, 2, 10000, true));
|
||||
SPAWN_SWAMP_MONSTERS.set(SpawnData.getInstance().getSpawnByName("SwampOfScreamsMonsters"));
|
||||
SPAWN_SWAMP_MONSTERS.get().getGroups().forEach(SpawnGroup::spawnAll);
|
||||
_daytime = false;
|
||||
startQuestTimer("despawn", DESPAWN_DELAY, null, null);
|
||||
break;
|
||||
}
|
||||
case "despawn":
|
||||
{
|
||||
if (_daytime)
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_P_M_11_00_P_M_MONSTERS_OF_THE_SWAMP_OF_SCREAMS_HAVE_FLED_AWAY, 2, 10000, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_00_11_00_MONSTERS_OF_THE_SWAMP_OF_SCREAMS_ARE_DEFEATED, 2, 10000, true));
|
||||
}
|
||||
SPAWN_SWAMP_MONSTERS.set(SpawnData.getInstance().getSpawnByName("SwampOfScreamsMonsters"));
|
||||
SPAWN_SWAMP_MONSTERS.get().getGroups().forEach(SpawnGroup::despawnAll);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
if ((CommonUtil.contains(SWAMP_MONSTERS, npc.getId())) && (getRandom(100) < 3))
|
||||
{
|
||||
addSpawn(SWAMP_PETRA, npc.getLocation(), false, 600000, false);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void scheduleDayTime()
|
||||
{
|
||||
long time = Long.MAX_VALUE;
|
||||
for (int day : DAYS_OF_WEEK)
|
||||
{
|
||||
final long nextDateMillis = getNextDateMilis(day, DAY_TIME[0], DAY_TIME[1]);
|
||||
if (nextDateMillis < time)
|
||||
{
|
||||
time = nextDateMillis;
|
||||
}
|
||||
}
|
||||
startQuestTimer("day_time_spawn", time - System.currentTimeMillis(), null, null);
|
||||
}
|
||||
|
||||
private void scheduleNightTime()
|
||||
{
|
||||
long time = Long.MAX_VALUE;
|
||||
for (int day : DAYS_OF_WEEK)
|
||||
{
|
||||
final long nextDateMillis = getNextDateMilis(day, NIGHT_TIME[0], NIGHT_TIME[1]);
|
||||
if (nextDateMillis < time)
|
||||
{
|
||||
time = nextDateMillis;
|
||||
}
|
||||
}
|
||||
startQuestTimer("night_time_spawn", time - System.currentTimeMillis(), null, null);
|
||||
}
|
||||
|
||||
private long getNextDateMilis(int dayOfWeek, int hour, int minute)
|
||||
{
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.HOUR_OF_DAY, hour);
|
||||
calendar.set(Calendar.MINUTE, minute);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if ((calendar.get(Calendar.DAY_OF_WEEK) == dayOfWeek) && (calendar.getTimeInMillis() > System.currentTimeMillis()))
|
||||
{
|
||||
return calendar.getTimeInMillis();
|
||||
}
|
||||
calendar.add(Calendar.DAY_OF_WEEK, 1);
|
||||
}
|
||||
return calendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new SwampOfScreamsSiege();
|
||||
}
|
||||
}
|
||||
@@ -42,10 +42,12 @@ import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.model.SkillLearn;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
@@ -266,6 +268,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
else
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastUserInfo();
|
||||
// TODO: SetOneTimeQuestFlag(talker, 10385, 1);
|
||||
htmltext = "test_server_helper025.html";
|
||||
@@ -402,6 +405,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
if (data.isRewardNoblesse())
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
}
|
||||
// Give possible hero status reward.
|
||||
if (data.isRewardHero())
|
||||
@@ -859,6 +863,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
if (data.isRewardNoblesse())
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
}
|
||||
// Give possible hero status reward.
|
||||
if (data.isRewardHero())
|
||||
@@ -1170,6 +1175,15 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
return null;
|
||||
}
|
||||
|
||||
private void checkNobleListener(Player player)
|
||||
{
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_NOBLESSE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeNoblesse(player));
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ClassMaster();
|
||||
|
||||
@@ -600,7 +600,7 @@ public class GreedyTreasureChests extends AbstractNpcAI
|
||||
else if (currentTime > GlobalVariablesManager.getInstance().getLong("TREASURE_CHEST_RESPAWN_NZ_2", 0))
|
||||
{
|
||||
addSpawn(CHEST_LV110, npc, true, 0, true);
|
||||
GlobalVariablesManager.getInstance().set("TREASURE_CHEST_RESPAWN_FM_2", Long.toString(currentTime + RESPAWN_DELAY + getRandom(RND_OFFSET)));
|
||||
GlobalVariablesManager.getInstance().set("TREASURE_CHEST_RESPAWN_NZ_2", Long.toString(currentTime + RESPAWN_DELAY + getRandom(RND_OFFSET)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
26
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34641.html
vendored
Normal file
26
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34641.html
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=250>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Cantabile!<br1>
|
||||
Your beautiful voice flows like a river!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
Welcome, my friend! I am sure you will enjoy your stand in this wonderful place where exquisite music fills the air!<br>
|
||||
The town is divided into 3 zones and each one of them has its own features.<br>
|
||||
The first zone is overseen by Amoroso, the second by Delicato and the third by Comodo. Talk to them to learn more.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
25
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34642.html
vendored
Normal file
25
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34642.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=200>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Amoroso!<br1>
|
||||
Sing us your song of love and beauty!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
My name is Amoroso, I oversee Adagio (Zone 1)! I train dancers who have 10-34 on their PK counter.<br>
|
||||
We are putting on an amazing, truly incredible concert! You must be dying of anticipation, right? Ha-ha!
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
25
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34643.html
vendored
Normal file
25
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34643.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=225>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Delicato!<br1>
|
||||
Your intrincate songs move and inspire us!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
My name is Delicato, I oversee Andante (Zone 2). Lord Narcissus has asked me to look after Pomposo and Dolce.<br>
|
||||
Their petals are very valuable, but almost imposible to collect. Heroes who hace 35-39 on their PK counter can grow these flowers by bleeding over them.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
26
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34644.html
vendored
Normal file
26
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/ai/others/PrisonManager/34644.html
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=275>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Comodo!<br1>
|
||||
Your mellow melodies please our ears and soothe our souls!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
My name is Comodo, I oversee Allegro (Zone 3).<br>
|
||||
I've managed to find a Pure Crystal to offer as tribute to Narcissus, but then I learned that the poor Angel is possessed by evil spirits! Can you imagine?<br>
|
||||
It is possible to exorcize the spirits, but only the heroes who have 40+ on their Pk counter can do it.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
@@ -37,6 +37,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class PrisonManager extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int MORENDO = 34637;
|
||||
private static final int POMPOSO = 34638;
|
||||
private static final int DOLLOROSO = 34639;
|
||||
private static final int DOLCE = 34640;
|
||||
private static final int CANTABILE = 34641;
|
||||
private static final int AMOROSO = 34642;
|
||||
private static final int DELICATO = 34643;
|
||||
private static final int COMODO = 34644;
|
||||
// Misc
|
||||
private static final ScriptZone PRISON_ZONE_1 = ZoneManager.getInstance().getZoneById(26010, ScriptZone.class);
|
||||
private static final ScriptZone PRISON_ZONE_2 = ZoneManager.getInstance().getZoneById(26011, ScriptZone.class);
|
||||
private static final ScriptZone PRISON_ZONE_3 = ZoneManager.getInstance().getZoneById(26012, ScriptZone.class);
|
||||
@@ -48,8 +58,8 @@ public class PrisonManager extends AbstractNpcAI
|
||||
|
||||
public PrisonManager()
|
||||
{
|
||||
addFirstTalkId(34637, 34638, 34639, 34640);
|
||||
addTalkId(34637, 34638, 34639, 34640);
|
||||
addFirstTalkId(MORENDO, POMPOSO, DOLLOROSO, DOLCE, CANTABILE, AMOROSO, DELICATO, COMODO);
|
||||
addTalkId(MORENDO, POMPOSO, DOLLOROSO, DOLCE, CANTABILE, AMOROSO, DELICATO, COMODO);
|
||||
addEnterZoneId(PRISON_ZONE_1.getId(), PRISON_ZONE_2.getId(), PRISON_ZONE_3.getId(), PRISON_ENTER_ZONE.getId(), PRISON_ENTER_ZONE2.getId());
|
||||
addExitZoneId(PRISON_ZONE_1.getId(), PRISON_ZONE_2.getId(), PRISON_ZONE_3.getId(), PRISON_ENTER_ZONE2.getId());
|
||||
}
|
||||
@@ -68,6 +78,10 @@ public class PrisonManager extends AbstractNpcAI
|
||||
case "34639-no.html":
|
||||
case "34640.html":
|
||||
case "34640-no.html":
|
||||
case "34641.html":
|
||||
case "34642.html":
|
||||
case "34643.html":
|
||||
case "34644.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
|
||||
@@ -37,6 +37,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.Summon;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Door;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
|
||||
@@ -235,6 +236,8 @@ public class TvT extends Event
|
||||
final InstanceManager manager = InstanceManager.getInstance();
|
||||
final InstanceTemplate template = manager.getInstanceTemplate(INSTANCE_ID);
|
||||
PVP_WORLD = manager.createInstance(template, null);
|
||||
// Make sure doors are closed.
|
||||
PVP_WORLD.getDoors().forEach(Door::closeMe);
|
||||
// Randomize player list and separate teams.
|
||||
final List<Player> playerList = new ArrayList<>(PLAYER_LIST.size());
|
||||
playerList.addAll(PLAYER_LIST);
|
||||
|
||||
@@ -302,7 +302,20 @@ public class Eraton extends AbstractNpcAI
|
||||
takeItem(player, STONE_OF_DESTINY);
|
||||
takeItem(player, getCloakItemId(player));
|
||||
|
||||
player.removeAllSkills();
|
||||
if (Config.ERATON_RETAINED_SKILLS.isEmpty())
|
||||
{
|
||||
player.removeAllSkills();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (Skill skill : player.getAllSkills())
|
||||
{
|
||||
if (!Config.ERATON_RETAINED_SKILLS.contains(skill.getId()))
|
||||
{
|
||||
player.removeSkill(skill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Stop auto use.
|
||||
for (Shortcut shortcut : player.getAllShortCuts())
|
||||
|
||||
@@ -44,6 +44,8 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("AdditionalPotionHp", AdditionalPotionHp::new);
|
||||
EffectHandler.getInstance().registerHandler("AdditionalPotionMp", AdditionalPotionMp::new);
|
||||
EffectHandler.getInstance().registerHandler("AddPcCafePoints", AddPcCafePoints::new);
|
||||
EffectHandler.getInstance().registerHandler("AddMaxPhysicalCriticalRate", AddMaxPhysicalCriticalRate::new);
|
||||
EffectHandler.getInstance().registerHandler("AddMaxMagicCriticalRate", AddMaxMagicCriticalRate::new);
|
||||
EffectHandler.getInstance().registerHandler("AddSkillBySkill", AddSkillBySkill::new);
|
||||
EffectHandler.getInstance().registerHandler("AddTeleportBookmarkSlot", AddTeleportBookmarkSlot::new);
|
||||
EffectHandler.getInstance().registerHandler("AgathionSlot", AgathionSlot::new);
|
||||
@@ -203,6 +205,7 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("HpToOwner", HpToOwner::new);
|
||||
EffectHandler.getInstance().registerHandler("Ignition", Ignition::new);
|
||||
EffectHandler.getInstance().registerHandler("IgnoreDeath", IgnoreDeath::new);
|
||||
EffectHandler.getInstance().registerHandler("IgnoreReduceDamage", IgnoreReduceDamage::new);
|
||||
EffectHandler.getInstance().registerHandler("ImmobileDamageBonus", ImmobileDamageBonus::new);
|
||||
EffectHandler.getInstance().registerHandler("ImmobileDamageResist", ImmobileDamageResist::new);
|
||||
EffectHandler.getInstance().registerHandler("ImmobilePetBuff", ImmobilePetBuff::new);
|
||||
@@ -242,7 +245,6 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("MAtk", MAtk::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxCp", MaxCp::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxHp", MaxHp::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxMagicCriticalRate", MaxMagicCriticalRate::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxMp", MaxMp::new);
|
||||
EffectHandler.getInstance().registerHandler("ModifyVital", ModifyVital::new);
|
||||
EffectHandler.getInstance().registerHandler("Mp", Mp::new);
|
||||
|
||||
@@ -48,6 +48,7 @@ public class SkillConditionMasterHandler
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseInDragonLair", CanUseInDragonLairSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseSwoopCannon", CanUseSwoopCannonSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("HasVitalityPoints", HasVitalityPointsSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseSymbolSealIncreaseItem", CanUseSymbolSealIncreaseItemSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseVitalityIncreaseItem", CanUseVitalityIncreaseItemSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CheckLevel", CheckLevelSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CheckSex", CheckSexSkillCondition::new);
|
||||
|
||||
@@ -49,6 +49,10 @@ import org.l2jmobius.gameserver.model.actor.Playable;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.Summon;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Pet;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeExalted;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
|
||||
import org.l2jmobius.gameserver.model.html.PageBuilder;
|
||||
import org.l2jmobius.gameserver.model.html.PageResult;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
@@ -913,12 +917,22 @@ public class AdminEditChar implements IAdminCommandHandler
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
player.sendMessage("A GM added you nobless status!");
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_NOBLESSE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeNoblesse(player));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
player.setNobleLevel(2);
|
||||
player.sendMessage("A GM changed your nobless status to exalted!");
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_EXALTED))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeExalted(player));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
/*
|
||||
* 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 handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class MaxMagicCriticalRate extends AbstractStatEffect
|
||||
{
|
||||
public MaxMagicCriticalRate(StatSet params)
|
||||
{
|
||||
super(params, Stat.MAX_MAGIC_CRITICAL_RATE);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author fruit
|
||||
*/
|
||||
public class AddMaxMagicCriticalRate extends AbstractStatEffect
|
||||
{
|
||||
public AddMaxMagicCriticalRate(StatSet params)
|
||||
{
|
||||
super(params, Stat.ADD_MAX_MAGIC_CRITICAL_RATE);
|
||||
}
|
||||
}
|
||||
@@ -1,36 +1,31 @@
|
||||
/*
|
||||
* 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 quests.not_done;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Q10905_HuntingTime extends Quest
|
||||
{
|
||||
private static final int START_NPC = 34599;
|
||||
|
||||
public Q10905_HuntingTime()
|
||||
{
|
||||
super(10905);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author fruit
|
||||
*/
|
||||
public class AddMaxPhysicalCriticalRate extends AbstractStatEffect
|
||||
{
|
||||
public AddMaxPhysicalCriticalRate(StatSet params)
|
||||
{
|
||||
super(params, Stat.ADD_MAX_PHYSICAL_CRITICAL_RATE);
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.commons.threads.ThreadPool;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.SkillData;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
@@ -26,6 +27,7 @@ import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.BuffInfo;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.skill.SkillCaster;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
||||
|
||||
/**
|
||||
* Call Skill effect implementation.
|
||||
@@ -58,7 +60,7 @@ public class CallSkill extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
Skill triggerSkill = null;
|
||||
final Skill triggerSkill;
|
||||
if (_skillLevelScaleTo <= 0)
|
||||
{
|
||||
// Mobius: Use 0 to trigger max effector learned skill level.
|
||||
@@ -72,6 +74,7 @@ public class CallSkill extends AbstractEffect
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Player " + effector + " called unknown skill " + _skill + " triggered by " + skill + " CallSkill.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -100,7 +103,21 @@ public class CallSkill extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
SkillCaster.triggerCast(effector, effected, triggerSkill);
|
||||
final int hitTime = triggerSkill.getHitTime();
|
||||
if (hitTime > 0)
|
||||
{
|
||||
if (effector.isSkillDisabled(triggerSkill))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
effector.broadcastPacket(new MagicSkillUse(effector, effected, triggerSkill.getDisplayId(), triggerSkill.getLevel(), hitTime, 0));
|
||||
ThreadPool.schedule(() -> SkillCaster.triggerCast(effector, effected, triggerSkill), hitTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
SkillCaster.triggerCast(effector, effected, triggerSkill);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,36 +1,31 @@
|
||||
/*
|
||||
* 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 quests.not_done;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Q10906_ChasingTheLight extends Quest
|
||||
{
|
||||
private static final int START_NPC = 34599;
|
||||
|
||||
public Q10906_ChasingTheLight()
|
||||
{
|
||||
super(10906);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 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 handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author fruit
|
||||
*/
|
||||
public class IgnoreReduceDamage extends AbstractStatEffect
|
||||
{
|
||||
public IgnoreReduceDamage(StatSet params)
|
||||
{
|
||||
super(params, Stat.IGNORE_REDUCE_DAMAGE);
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.StatModifierType;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
@@ -25,6 +26,7 @@ import org.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||
import org.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@@ -32,10 +34,12 @@ import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
public class ReduceDamage extends AbstractEffect
|
||||
{
|
||||
private final double _amount;
|
||||
private final StatModifierType _mode;
|
||||
|
||||
public ReduceDamage(StatSet params)
|
||||
{
|
||||
_amount = params.getDouble("amount");
|
||||
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
|
||||
}
|
||||
|
||||
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||
@@ -46,7 +50,15 @@ public class ReduceDamage extends AbstractEffect
|
||||
return null;
|
||||
}
|
||||
|
||||
final double newDamage = event.getDamage() * (_amount / 100);
|
||||
final double newDamage;
|
||||
if (_mode == StatModifierType.PER)
|
||||
{
|
||||
newDamage = event.getDamage() - (event.getDamage() * (_amount / 100));
|
||||
}
|
||||
else // DIFF
|
||||
{
|
||||
newDamage = event.getDamage() - Math.max((_amount - event.getAttacker().getStat().getAdd(Stat.IGNORE_REDUCE_DAMAGE)), 0.0);
|
||||
}
|
||||
|
||||
return new DamageReturn(false, true, false, newDamage);
|
||||
}
|
||||
|
||||
@@ -16,14 +16,21 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.threads.ThreadPool;
|
||||
import org.l2jmobius.gameserver.enums.StatModifierType;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import org.l2jmobius.gameserver.model.effects.EffectType;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
@@ -39,6 +46,12 @@ public class RestoreSymbolSeal extends AbstractEffect
|
||||
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.PER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EffectType getEffectType()
|
||||
{
|
||||
return EffectType.RESTORE_SYMBOL_SEAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInstant()
|
||||
{
|
||||
@@ -77,6 +90,33 @@ public class RestoreSymbolSeal extends AbstractEffect
|
||||
player.updateSymbolSealSkills();
|
||||
player.sendSkillList();
|
||||
player.broadcastUserInfo();
|
||||
|
||||
// Send item list to update Dye Powder with red icon in inventory.
|
||||
ThreadPool.schedule(() ->
|
||||
{
|
||||
final List<Item> items = new LinkedList<>();
|
||||
ITEMS: for (Item i : effected.getActingPlayer().getInventory().getItems())
|
||||
{
|
||||
if (i.getTemplate().hasSkills())
|
||||
{
|
||||
for (ItemSkillHolder s : i.getTemplate().getAllSkills())
|
||||
{
|
||||
if (s.getSkill().hasEffectType(EffectType.RESTORE_SYMBOL_SEAL))
|
||||
{
|
||||
items.add(i);
|
||||
continue ITEMS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!items.isEmpty())
|
||||
{
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addItems(items);
|
||||
effected.getActingPlayer().sendInventoryUpdate(iu);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,6 +210,11 @@ public class TriggerSkillByAttack extends AbstractEffect
|
||||
else
|
||||
{
|
||||
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
|
||||
|
||||
if (event.getAttacker().isSkillDisabled(buffInfo.getSkill()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((buffInfo == null) || (buffInfo.getSkill().getLevel() < triggerSkill.getLevel()) || _renewDuration)
|
||||
|
||||
@@ -124,6 +124,15 @@ public class TriggerSkillBySkill extends AbstractEffect
|
||||
if (buffInfo != null)
|
||||
{
|
||||
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
|
||||
|
||||
if (event.getCaster().isSkillDisabled(buffInfo.getSkill()))
|
||||
{
|
||||
if ((_replace) && (buffInfo.getSkill().getLevel() == _skillLevelScaleTo))
|
||||
{
|
||||
((Creature) target).stopSkillEffects(SkillFinishType.SILENT, triggerSkill.getId());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -17,7 +17,13 @@
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
|
||||
/**
|
||||
* @author Sero
|
||||
@@ -28,4 +34,46 @@ public class WeaponBonusMAtk extends AbstractStatAddEffect
|
||||
{
|
||||
super(params, Stat.WEAPON_BONUS_MAGIC_ATTACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExit(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,13 @@
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
|
||||
/**
|
||||
* @author Sero
|
||||
@@ -28,4 +34,46 @@ public class WeaponBonusPAtk extends AbstractStatAddEffect
|
||||
{
|
||||
super(params, Stat.WEAPON_BONUS_PHYSICAL_ATTACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExit(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
}
|
||||
@@ -16,39 +16,61 @@
|
||||
*/
|
||||
package handlers.playeractions;
|
||||
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
|
||||
import org.l2jmobius.gameserver.model.ActionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Pet;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* Pet attack player action handler.
|
||||
* @author Nik
|
||||
* @author Mobius
|
||||
*/
|
||||
public class PetAttack implements IPlayerActionHandler
|
||||
{
|
||||
@Override
|
||||
public void useAction(Player player, ActionDataHolder data, boolean ctrlPressed, boolean shiftPressed)
|
||||
{
|
||||
if ((player.getPet() == null) || !player.getPet().isPet())
|
||||
final Pet pet = player.getPet();
|
||||
if ((pet == null) || !pet.isPet())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
|
||||
return;
|
||||
}
|
||||
|
||||
final Pet pet = player.getPet();
|
||||
if (pet.isUncontrollable())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.WHEN_YOUR_PET_S_SATIETY_REACHES_0_YOU_CANNOT_CONTROL_IT);
|
||||
return;
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
|
||||
if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||
|
||||
final WorldObject target = player.getTarget();
|
||||
if (target == null)
|
||||
{
|
||||
pet.doAttack(player.getTarget());
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.calculateDistance3D(target) > 3000)
|
||||
{
|
||||
pet.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
|
||||
}
|
||||
else if (pet.canAttack(target, ctrlPressed))
|
||||
{
|
||||
pet.doAttack(target);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,4 +52,10 @@ public class PetHold implements IPlayerActionHandler
|
||||
((SummonAI) pet.getAI()).notifyFollowStatusChange();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,4 +53,10 @@ public class PetMove implements IPlayerActionHandler
|
||||
pet.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, player.getTarget().getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,4 +77,10 @@ public class PetSkillUse implements IPlayerActionHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,4 +51,10 @@ public class PetStop implements IPlayerActionHandler
|
||||
pet.cancelAction();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,34 +16,52 @@
|
||||
*/
|
||||
package handlers.playeractions;
|
||||
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
|
||||
import org.l2jmobius.gameserver.model.ActionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.Summon;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* Servitor Attack player action handler.
|
||||
* @author St3eT
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ServitorAttack implements IPlayerActionHandler
|
||||
{
|
||||
@Override
|
||||
public void useAction(Player player, ActionDataHolder data, boolean ctrlPressed, boolean shiftPressed)
|
||||
{
|
||||
if (player.hasServitors())
|
||||
{
|
||||
for (Summon summon : player.getServitors().values())
|
||||
{
|
||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||
{
|
||||
summon.doAttack(player.getTarget());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!player.hasServitors())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
|
||||
return;
|
||||
}
|
||||
|
||||
final WorldObject target = player.getTarget();
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean targetOutOfRange = player.calculateDistance3D(target) > 3000;
|
||||
for (Summon summon : player.getServitors().values())
|
||||
{
|
||||
if (targetOutOfRange)
|
||||
{
|
||||
summon.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
|
||||
}
|
||||
else if (summon.canAttack(target, ctrlPressed))
|
||||
{
|
||||
summon.doAttack(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -48,4 +48,10 @@ public class ServitorHold implements IPlayerActionHandler
|
||||
((SummonAI) s.getAI()).notifyFollowStatusChange();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,4 +68,10 @@ public class ServitorMode implements IPlayerActionHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,4 +56,10 @@ public class ServitorMove implements IPlayerActionHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,4 +62,10 @@ public class ServitorSkillUse implements IPlayerActionHandler
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,4 +47,10 @@ public class ServitorStop implements IPlayerActionHandler
|
||||
s.cancelAction();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,4 +62,10 @@ public class UnsummonPet implements IPlayerActionHandler
|
||||
pet.unSummon(player);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,4 +69,10 @@ public class UnsummonServitor implements IPlayerActionHandler
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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 handlers.skillconditionhandlers;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.skill.ISkillCondition;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class CanUseSymbolSealIncreaseItemSkillCondition implements ISkillCondition
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public CanUseSymbolSealIncreaseItemSkillCondition(StatSet params)
|
||||
{
|
||||
_amount = params.getInt("amount", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse(Creature caster, Skill skill, WorldObject target)
|
||||
{
|
||||
return caster.isPlayer() && ((caster.getActingPlayer().getSymbolSealPoints() + ((Config.MAX_SYMBOL_SEAL_POINTS * _amount) / 100)) <= Config.MAX_SYMBOL_SEAL_POINTS);
|
||||
}
|
||||
}
|
||||
@@ -39,10 +39,11 @@ public class OpSkillAcquireSkillCondition implements ISkillCondition
|
||||
@Override
|
||||
public boolean canUse(Creature caster, Skill skill, WorldObject target)
|
||||
{
|
||||
if (!target.isCreature())
|
||||
if ((target == null) || !target.isCreature())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final int skillLevel = ((Creature) target).getSkillLevel(_skillId);
|
||||
return _hasLearned ? skillLevel != 0 : skillLevel == 0;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class PartyPledge implements IAffectScopeHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((p != player) && (p.getClanId() != clanId) && ((party == null) || (party != p.getParty())))
|
||||
if ((p != player) && ((clanId == 0) || (p.getClanId() != clanId)) && ((party == null) || (party != p.getParty())))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.actor.Attackable;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.FriendlyNpc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Monster;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
@@ -46,10 +47,11 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int KAIN_VAN_HALTER = 31639;
|
||||
private static final int VAN_HALTER = 33999;
|
||||
private static final int FERIN = 34001;
|
||||
private static final int GRAIL = 33996;
|
||||
private static final int MYSTERIOUS_WIZARD = 33980;
|
||||
// Helper NPCs
|
||||
private static final int HELPER_VAN_HALTER = 33999;
|
||||
private static final int HELPER_FERIN = 34001;
|
||||
// Misc
|
||||
private static final int DOOR_2 = 17230102;
|
||||
private static final int DOOR_3 = 17230103;
|
||||
@@ -66,7 +68,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
addStartNpc(KAIN_VAN_HALTER);
|
||||
addFirstTalkId(KAIN_VAN_HALTER, GRAIL, MYSTERIOUS_WIZARD);
|
||||
addTalkId(KAIN_VAN_HALTER, GRAIL, MYSTERIOUS_WIZARD);
|
||||
addCreatureSeeId(FERIN, VAN_HALTER);
|
||||
addCreatureSeeId(HELPER_FERIN, HELPER_VAN_HALTER);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -145,12 +147,12 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
return null;
|
||||
}
|
||||
final Npc valHalter = world.getNpc(VAN_HALTER);
|
||||
if (valHalter != null)
|
||||
final FriendlyNpc vanHalter = (FriendlyNpc) world.getNpc(HELPER_VAN_HALTER);
|
||||
if (vanHalter != null)
|
||||
{
|
||||
valHalter.deleteMe(); // probably needs another npc id for initial room
|
||||
vanHalter.deleteMe(); // probably needs another npc id for initial room
|
||||
}
|
||||
final Npc ferin = world.getNpc(FERIN);
|
||||
final FriendlyNpc ferin = (FriendlyNpc) world.getNpc(HELPER_FERIN);
|
||||
if (ferin != null)
|
||||
{
|
||||
ferin.deleteMe(); // probably needs another npc id for initial room
|
||||
@@ -190,6 +192,8 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
case "CHECK_STATUS":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final FriendlyNpc ferin = (FriendlyNpc) world.getNpc(HELPER_FERIN);
|
||||
final FriendlyNpc vanHalter = (FriendlyNpc) world.getNpc(HELPER_VAN_HALTER);
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
@@ -200,8 +204,8 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
if (world.getAliveNpcs(Monster.class).isEmpty())
|
||||
{
|
||||
startQuestTimer("SEY2", 14000, world.getNpc(FERIN), player);
|
||||
startQuestTimer("SEY_KAIN", 24000, world.getNpc(VAN_HALTER), player);
|
||||
startQuestTimer("SEY2", 14000, ferin, player);
|
||||
startQuestTimer("SEY_KAIN", 24000, vanHalter, player);
|
||||
startQuestTimer("OPEN_DOOR1", 5000, npc, player);
|
||||
}
|
||||
startQuestTimer("CHECK_STATUS", 7000, npc, player);
|
||||
@@ -221,7 +225,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
if (world.getAliveNpcs(Monster.class).isEmpty())
|
||||
{
|
||||
startQuestTimer("SEY3", 8000, world.getNpc(FERIN), player);
|
||||
startQuestTimer("SEY3", 8000, ferin, player);
|
||||
startQuestTimer("OPEN_DOOR2", 5000, npc, player);
|
||||
}
|
||||
startQuestTimer("CHECK_STATUS", 7000, npc, player);
|
||||
@@ -234,7 +238,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
world.setStatus(4);
|
||||
world.spawnGroup("wof_room3_2");
|
||||
world.openCloseDoor(DOOR_3, false);
|
||||
startQuestTimer("SEY_KAIN_1", 5000, world.getNpc(VAN_HALTER), player);
|
||||
startQuestTimer("SEY_KAIN_1", 5000, vanHalter, player);
|
||||
}
|
||||
startQuestTimer("CHECK_STATUS", 7000, npc, player);
|
||||
break;
|
||||
@@ -245,8 +249,8 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
world.setStatus(5);
|
||||
world.spawnGroup("wof_room4");
|
||||
startQuestTimer("SEY_KAIN_2", 3000, world.getNpc(VAN_HALTER), player);
|
||||
startQuestTimer("SEY4", 7000, world.getNpc(FERIN), player);
|
||||
startQuestTimer("SEY_KAIN_2", 3000, vanHalter, player);
|
||||
startQuestTimer("SEY4", 7000, ferin, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -304,7 +308,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
return null;
|
||||
}
|
||||
cancelQuestTimer("ATTACK1", npc, player);
|
||||
startQuestTimer("ATTACK2", 200, world.getNpc(VAN_HALTER), player, true);
|
||||
startQuestTimer("ATTACK2", 200, world.getNpc(HELPER_VAN_HALTER), player, true);
|
||||
world.setStatus(3);
|
||||
world.spawnGroup("wof_room3");
|
||||
world.openCloseDoor(DOOR_3, true);
|
||||
@@ -321,7 +325,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY2":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.YOU_CAN_T_DIE_HERE_I_DIDN_T_LEARN_RESURRECT_YET));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.apple_quest_4", 0, 0, 0, 0, 0));
|
||||
@@ -330,7 +334,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.GISELLE_WAS_SUCH_A_SWEET_CHILD));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.holter_quest_1", 0, 0, 0, 0, 0));
|
||||
@@ -340,7 +344,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY3":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.DO_YOU_THINK_I_LL_GROW_TALLER_IF_I_EAT_LOTS_AND_LOTS));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.apple_quest_6", 0, 0, 0, 0, 0));
|
||||
@@ -349,7 +353,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN_1":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.SUCH_MONSTERS_IN_A_PLACE_LIKE_THIS_UNBELIEVABLE));
|
||||
}
|
||||
@@ -357,7 +361,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN_2":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.THAT_S_THE_MONSTER_THAT_ATTACKED_FAERON_YOU_RE_OUTMATCHED_HERE_GO_AHEAD_I_LL_CATCH_UP));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.holter_quest_6", 0, 0, 0, 0, 0));
|
||||
@@ -367,7 +371,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY4":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.GO_NOW_KAIN_CAN_HANDLE_THIS));
|
||||
npc.setScriptValue(1);
|
||||
@@ -377,7 +381,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN_3":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.LEAVE_THIS_TO_ME_GO));
|
||||
npc.setScriptValue(1);
|
||||
@@ -387,7 +391,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "REST":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, player);
|
||||
}
|
||||
@@ -508,7 +512,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case FERIN:
|
||||
case HELPER_FERIN:
|
||||
{
|
||||
if (creature.isPlayer() && !creature.isDead() && npc.isScriptValue(0))
|
||||
{
|
||||
@@ -516,7 +520,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VAN_HALTER:
|
||||
case HELPER_VAN_HALTER:
|
||||
{
|
||||
if (creature.isPlayer() && !creature.isDead() && world.isStatus(0))
|
||||
{
|
||||
|
||||
@@ -50,10 +50,6 @@
|
||||
1901 Storm Isle - Furtive Deal
|
||||
10595 The Dimensional Warp, Part 8
|
||||
10596 The Dimensional Warp, Part 9
|
||||
10904 Journey to the Conquest World
|
||||
10905 Hunting Time
|
||||
10906 Chasing the Light
|
||||
10907 Where Flowers Blossom
|
||||
11028 Wind of Destiny - Encounter
|
||||
11029 Wind of Destiny - Promise
|
||||
11030 Wind of Destiny - Choice
|
||||
@@ -177,7 +177,14 @@ public class Q00933_TombRaiders extends Quest
|
||||
final Party party = killer.getParty();
|
||||
if (party != null)
|
||||
{
|
||||
party.getMembers().forEach(p -> processKill(npc, p));
|
||||
for (Player member : party.getMembers())
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
if (qs != null)
|
||||
{
|
||||
processKill(npc, member);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -25,6 +25,9 @@ import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
@@ -209,6 +212,7 @@ public class Q10591_NobleMaterial extends Quest
|
||||
giveItems(player, WARRIOR_CICLET_BOX_LV5, 1);
|
||||
basicRewards(player);
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastInfo();
|
||||
showOnScreenMsg(player, NpcStringId.CONGRATULATIONS_S1_YOU_ARE_NOW_A_NOBLESSE, ExShowScreenMessage.TOP_CENTER, 10000, player.getName());
|
||||
player.doCast(NOBLESSE_PRESENTATION.getSkill());
|
||||
@@ -225,6 +229,7 @@ public class Q10591_NobleMaterial extends Quest
|
||||
giveItems(player, WIZARD_CICLET_BOX_LV5, 1);
|
||||
basicRewards(player);
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastInfo();
|
||||
showOnScreenMsg(player, NpcStringId.CONGRATULATIONS_S1_YOU_ARE_NOW_A_NOBLESSE, ExShowScreenMessage.TOP_CENTER, 10000, player.getName());
|
||||
player.doCast(NOBLESSE_PRESENTATION.getSkill());
|
||||
@@ -241,6 +246,7 @@ public class Q10591_NobleMaterial extends Quest
|
||||
giveItems(player, KNIGHT_CICLET_BOX_LV5, 1);
|
||||
basicRewards(player);
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastInfo();
|
||||
showOnScreenMsg(player, NpcStringId.CONGRATULATIONS_S1_YOU_ARE_NOW_A_NOBLESSE, ExShowScreenMessage.TOP_CENTER, 10000, player.getName());
|
||||
player.doCast(NOBLESSE_PRESENTATION.getSkill());
|
||||
@@ -573,4 +579,13 @@ public class Q10591_NobleMaterial extends Quest
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkNobleListener(Player player)
|
||||
{
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_NOBLESSE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeNoblesse(player));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Have you brought me the message from Leona Blackbird?
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-03.html">"Yes, here it is."</Button>
|
||||
Greetings! I've been expecting you for a while.<br>
|
||||
Leona asked me to tell you something.<br>
|
||||
I hope you are ready to hear me out and help.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-02.htm">"What has Leona asked you to tell?"</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
I see you are ready. Now I'm going to tell you what Leona has told me.<br>
|
||||
In the last combat with Etis van Etina, Leona was badly wounded, so she had to train to recover her strength. Unfortunately, she had no time to complete the trainings because she received a message. It said about a dungeon of Atelia Fortress. Something connected to Etis van Etina was found there. That place was very odd and was called <font color="LEVEL">Atelia Refinery</font>.<br>
|
||||
Leona wanted to meet you personally, but there was an urgent business, so she asked me to see you and explain the situation. My mission is connected with that place.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-03.htm">Ask about Atelia Refinery</Button>
|
||||
</body></html>
|
||||
@@ -1,3 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
I don't see any message from Leona Blackbird, make sure you bring that to me.
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
We're assuming by the name that it's where Atelia is refined.<br>
|
||||
It's located at the underground of Atelia Fortress, so we didn't know about it until now.<br>
|
||||
I think Atelia refined from there is sent to the great temple where Etis van Etina is.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-04.html">"What has happened so far?"</Button>
|
||||
</body></html>
|
||||
@@ -1,3 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Great! You have brought it, now let me read it.<br>
|
||||
</body></html>
|
||||
@@ -1,4 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
I've read the message from Leona Blackbird you should go see her to tell you what you have to do.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-05.html">"Ok, I'll go."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Leona was lost in despair for some time but she finally rose again and started investigating the Atelia Refinery.<br>
|
||||
But our strength still isn't enough, so we're asking for your help once again.<br>
|
||||
Leona will be at the entrance of the Atelia Refinery. You'll find it if you leave camp and follow the passage of Dimensional Energy to the west.<br>
|
||||
Leona will fill you in with more details.
|
||||
</body></html>
|
||||
@@ -1,3 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Leona Blackbird is waiting for you at Atelia Refinery entrance.
|
||||
</body></html>
|
||||
@@ -1,5 +0,0 @@
|
||||
<html><body>Message:<br>
|
||||
You received a message from Leona Blackbird, this means you can start Savior's Path quests.<br>
|
||||
To learn more, go to Blackbird Campsite and talk to Elikia.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery closeMessage">"Close message."</Button>
|
||||
</body></html>
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package quests.Q10885_SaviorsPathDiscovery;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
@@ -58,20 +59,27 @@ public class Q10885_SaviorsPathDiscovery extends Quest
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34057-03.html":
|
||||
case "34057-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34057-03.htm":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
takeItems(player, -1, LEONA_BLACKBIRDS_MESSAGE);
|
||||
qs.setCond(2);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34057-05.html":
|
||||
case "34057-04.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
giveItems(player, LEONA_BLACKBIRDS_MESSAGE, 1, true);
|
||||
playMovie(player, Movie.EP5_ASTATINE_QST_START);
|
||||
qs.setCond(3);
|
||||
}
|
||||
htmltext = event;
|
||||
@@ -83,6 +91,7 @@ public class Q10885_SaviorsPathDiscovery extends Quest
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
takeItems(player, -1, LEONA_BLACKBIRDS_MESSAGE);
|
||||
addExpAndSp(player, 90638, 82);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
@@ -137,7 +146,11 @@ public class Q10885_SaviorsPathDiscovery extends Quest
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34057-04.htm";
|
||||
htmltext = "34057-03.htm";
|
||||
}
|
||||
else if (qs.isCond(3))
|
||||
{
|
||||
htmltext = "34057-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><body>Blackbird Clan Lord Leona Blackbird:<br>
|
||||
Yes. Go speak to <font color="LEVEL">Devianne</font>.
|
||||
Yes. Go speak to <font color="LEVEL">Devianne</font>.<br>
|
||||
Devianne will tell you how to get to the Atelia Refinery and what you must do there.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
I don't see any invitation from Conquest Guide Chloe, make sure you bring that to me.
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Have you brought the invitation that Conquest Guide Chloe gave you?
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10904_JourneyToTheConquestWorld 34599-02.html">"Yes, here it is."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Oh! Let me see if it's genuine, come back later.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Checking the invitation...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10904_JourneyToTheConquestWorld 34599-04.html">"How is it?"</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Great! You have brought the right one, here is your reward.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<html><body>Conquest Guide Chloe:<br>
|
||||
Hello, adventurer!<br>
|
||||
I have no news for you. There's nothing I can tell you.<br>
|
||||
(Available to characters of Lv. 110+.)<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Chloe:<br>
|
||||
Hello, adventurer!<br>
|
||||
The most upstanding warriors receive an invitation to visit a new world - the Conquest.<br>
|
||||
To learn more, go to Conquest Town and talk to Entropy.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10904_JourneyToTheConquestWorld 34600-02.html">Here, take this invitation.</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Chloe:<br>
|
||||
You can go now,<br>
|
||||
you must give the invitation to Conquest Guide Entropy, in the Conquest Town.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* 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 quests.Q10904_JourneyToTheConquestWorld;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class Q10904_JourneyToTheConquestWorld extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int ENTROPY = 34599;
|
||||
private static final int CHLOE = 34600;
|
||||
// Items
|
||||
private static final int CONQUEST_NAME_CHANGE_COUPON = 81979;
|
||||
private static final int CHLOE_INVITATION = 82176;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 110;
|
||||
|
||||
public Q10904_JourneyToTheConquestWorld()
|
||||
{
|
||||
super(10904);
|
||||
addStartNpc(CHLOE);
|
||||
addTalkId(CHLOE, ENTROPY);
|
||||
addCondMinLevel(MIN_LEVEL, "34600-00.html");
|
||||
registerQuestItems(CHLOE_INVITATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34600-02.html":
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
qs.startQuest();
|
||||
giveItems(player, CHLOE_INVITATION, 1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-02.html":
|
||||
{
|
||||
if (qs.isCond(1) && (hasQuestItems(player, CHLOE_INVITATION)))
|
||||
{
|
||||
takeItems(player, -1, CHLOE_INVITATION);
|
||||
qs.setCond(2);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-04.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
giveItems(player, CONQUEST_NAME_CHANGE_COUPON, 1);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == CHLOE)
|
||||
{
|
||||
htmltext = "34600-01.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case CHLOE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "34600-02.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ENTROPY:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "34599-01.htm";
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34599-03.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
||||
4
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-00.html
vendored
Normal file
4
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-00.html
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
You are not ready for this yet.<br>
|
||||
(This quest is for characters Lv. 110 and higher who have completed the Journey to the Conquest World quest.)
|
||||
</body></html>
|
||||
6
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-01.htm
vendored
Normal file
6
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-01.htm
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
You must learn about Conquest World, there are three zones out there and you must hunt in each one of them.<br>
|
||||
Defeat the specified number of monsters in each of the following zones: <font color="LEVEL">600 in the Outer Lands, 600 in Zone 1 (Asa), 600 in Zone 2 (Anima) and 600 in Zone 3 (Nox).</font><br>
|
||||
Monsters to hunt: <font color="LEVEL">all monsters in water hunting zones of the Conquest world.</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10905_HuntingTime 34599-02.html">"OK, let's do it."</Button>
|
||||
</body></html>
|
||||
5
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-02.html
vendored
Normal file
5
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-02.html
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Defeat the specified number of monsters in each of the following zones: <font color="LEVEL">600 in the Outer Lands, 600 in Zone 1 (Asa), 600 in Zone 2 (Anima) and 600 in Zone 3 (Nox).</font><br>
|
||||
Monsters to hunt: <font color="LEVEL">all monsters in water hunting zones of the Conquest world.</font><br>
|
||||
When you are done come back to me, to get your reward.<br>
|
||||
</body></html>
|
||||
4
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-03.htm
vendored
Normal file
4
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-03.htm
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Have you killed all the monsters?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10905_HuntingTime 34599-05.html">"Yes, sure."</Button>
|
||||
</body></html>
|
||||
6
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-04.html
vendored
Normal file
6
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-04.html
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Don't try to foul me...<br>
|
||||
Defeat the specified number of monsters in each of the following zones: <font color="LEVEL">600 in the Outer Lands, 600 in Zone 1 (Asa), 600 in Zone 2 (Anima) and 600 in Zone 3 (Nox).</font><br>
|
||||
Monsters to hunt: <font color="LEVEL">all monsters in water hunting zones of the Conquest world.</font><br>
|
||||
When you are done come back to me, to get your reward.<br>
|
||||
</body></html>
|
||||
3
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-05.html
vendored
Normal file
3
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/34599-05.html
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Congratulations. You have completed all the tasks.
|
||||
</body></html>
|
||||
345
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/Q10905_HuntingTime.java
vendored
Normal file
345
L2J_Mobius_10.3_MasterClass/dist/game/data/scripts/quests/Q10905_HuntingTime/Q10905_HuntingTime.java
vendored
Normal file
@@ -0,0 +1,345 @@
|
||||
/*
|
||||
* 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 quests.Q10905_HuntingTime;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.Party;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
import quests.Q10904_JourneyToTheConquestWorld.Q10904_JourneyToTheConquestWorld;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class Q10905_HuntingTime extends Quest
|
||||
{
|
||||
// NPC
|
||||
private static final int ENTROPY = 34599;
|
||||
// Monsters
|
||||
private static final int[] MONSTERS_OUTER_CASTLE =
|
||||
{
|
||||
// Daril's Water Source (Lv. 112)
|
||||
27701, // Daril
|
||||
27702, // Atron
|
||||
27703, // Seo
|
||||
27704, // Craigo
|
||||
27705, // Kiku
|
||||
27706, // Floato
|
||||
// Daril Phran's Water Source (Lv. 116)
|
||||
27707, // Daril Phran
|
||||
27708, // Atron Phran
|
||||
27709, // Seo Phran
|
||||
27710, // Craigo Phran
|
||||
27711, // Kiku Phran
|
||||
27712, // Floato Phran
|
||||
};
|
||||
private static final int[] MONSTERS_ASA =
|
||||
{
|
||||
// Asa Area 1 (Lv. 116)
|
||||
27713, // Daril Asa Ar
|
||||
27714, // Seo Asa Ar
|
||||
27715, // Floato Asa Ar
|
||||
27716, // Asa Ar Hunter
|
||||
27717, // Asa Ar Sorceress
|
||||
27718, // Saida Asa Ar
|
||||
19830, // Luminous Soul
|
||||
// Asa Area 2 (Lv. 120)
|
||||
27719, // Atron Asa Mide
|
||||
27720, // Craigo Asa Mide
|
||||
27721, // Kerberos Asa Mide
|
||||
27722, // Asa Mide Hunter
|
||||
27723, // Asa Mide Sorceress
|
||||
27724, // Saida Asa Mide
|
||||
27725, // Asa Mide Blader
|
||||
// Asa Area 3 (Lv. 124)
|
||||
27726, // Atron Asa Telro
|
||||
27727, // Craigo Asa Telro
|
||||
27728, // Beor Asa Telro
|
||||
27729, // Asa Telro Hunter
|
||||
27730, // Asa Telro Sorceress
|
||||
27731, // Saida Asa Telro
|
||||
27732, // Asa Telro Blader
|
||||
27733, // Asa Telro Guard
|
||||
};
|
||||
private static final int[] MONSTERS_ANIMA =
|
||||
{
|
||||
// Anima Area 1 (Lv. 116)
|
||||
27755, // Daril Anima Ar
|
||||
27756, // Seo Anima Ar
|
||||
27757, // Floato Anima Ar
|
||||
27758, // Anima Ar Hunter
|
||||
27759, // Anima Ar Sorceress
|
||||
27760, // Saida Anima Ar
|
||||
// Anima Area 2 (Lv. 120)
|
||||
27761, // Atron Anima Mide
|
||||
27762, // Craigo Anima Mide
|
||||
27763, // Kerberos Anima Mide
|
||||
27764, // Anima Mide Hunter
|
||||
27765, // Anima Mide Sorceress
|
||||
27766, // Saida Anima Mide
|
||||
27767, // Anima Mide Blader
|
||||
// Anima Area 3 (Lv. 124)
|
||||
27768, // Atron Anima Telro
|
||||
27769, // Craigo Anima Telro
|
||||
27770, // Beor Anima Telro
|
||||
27771, // Anima Telro Hunter
|
||||
27772, // Anima Telro Sorceress
|
||||
27773, // Saida Anima Telro
|
||||
27774, // Anima Telro Blader
|
||||
27775, // Anima Telro Guard
|
||||
};
|
||||
private static final int[] MONSTERS_NOX =
|
||||
{
|
||||
// Nox Area 1 (Lv. 116)
|
||||
27734, // Daril Nox Ar
|
||||
27735, // Seo Nox Ar
|
||||
27736, // Floato Nox Ar
|
||||
27737, // Nox Ar Hunter
|
||||
27738, // Nox Ar Sorceress
|
||||
27739, // Saida Nox Ar
|
||||
// Nox Area 2 (Lv. 120)
|
||||
27740, // Atron Nox Mide
|
||||
27741, // Craigo Nox Mide
|
||||
27742, // Kerberos Nox Mide
|
||||
27743, // Nox Mide Hunter
|
||||
27744, // Nox Mide Sorceress
|
||||
27745, // Saida Nox Mide
|
||||
27746, // Nox Mide Blader
|
||||
// Nox Area 3 (Lv. 124)
|
||||
27747, // Atron Nox Telro
|
||||
27748, // Craigo Nox Telro
|
||||
27749, // Beor Nox Telro
|
||||
27750, // Nox Telro Hunter
|
||||
27751, // Nox Telro Sorceress
|
||||
27752, // Saida Nox Telro
|
||||
27753, // Nox Telro Blader
|
||||
27754, // Nox Telro Guard
|
||||
};
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 110;
|
||||
private static final String KILL_COUNT_VAR_OUTER_CASTLE = "KillCountOuterCastle";
|
||||
private static final String KILL_COUNT_VAR_ASA = "KillCountAsa";
|
||||
private static final String KILL_COUNT_VAR_ANIMA = "KillCountAnima";
|
||||
private static final String KILL_COUNT_VAR_NOX = "KillCountNox";
|
||||
// Monsters Kill Target
|
||||
private static final int MAX_KILLED_MOBS_OUTER_CASTLE = 600;
|
||||
private static final int MAX_KILLED_MOBS_ASA = 600;
|
||||
private static final int MAX_KILLED_MOBS_ANIMA = 600;
|
||||
private static final int MAX_KILLED_MOBS_NOX = 600;
|
||||
|
||||
public Q10905_HuntingTime()
|
||||
{
|
||||
super(10905);
|
||||
addStartNpc(ENTROPY);
|
||||
addTalkId(ENTROPY);
|
||||
addKillId(MONSTERS_OUTER_CASTLE);
|
||||
addKillId(MONSTERS_ASA);
|
||||
addKillId(MONSTERS_ANIMA);
|
||||
addKillId(MONSTERS_NOX);
|
||||
addCondCompletedQuest(Q10904_JourneyToTheConquestWorld.class.getSimpleName(), "34599-00.html");
|
||||
addCondMinLevel(MIN_LEVEL, "34599-00.html");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34599-02.html":
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
qs.startQuest();
|
||||
qs.setMemoState(1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-05.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
addExpAndSp(player, 26617381116L, 23955643);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "34599-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == ENTROPY)
|
||||
{
|
||||
htmltext = "34599-01.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ENTROPY:
|
||||
{
|
||||
if ((qs.isCond(1) & qs.isMemoState(1)) || qs.isCond(2))
|
||||
{
|
||||
htmltext = "34599-03.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final Party party = killer.getParty();
|
||||
if (party != null)
|
||||
{
|
||||
for (Player member : party.getMembers())
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
if (qs != null)
|
||||
{
|
||||
processKill(npc, member);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
processKill(npc, killer);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void processKill(Npc npc, Player killer)
|
||||
{
|
||||
final QuestState qs = getRandomPartyMemberState(killer, 1, 3, npc);
|
||||
if (qs != null)
|
||||
{
|
||||
final Player player = qs.getPlayer();
|
||||
final int killCountOuterCastle = qs.getInt(KILL_COUNT_VAR_OUTER_CASTLE);
|
||||
final int killCountAsa = qs.getInt(KILL_COUNT_VAR_ASA);
|
||||
final int killCountAnima = qs.getInt(KILL_COUNT_VAR_ANIMA);
|
||||
final int killCountNox = qs.getInt(KILL_COUNT_VAR_NOX);
|
||||
|
||||
if (CommonUtil.contains(MONSTERS_OUTER_CASTLE, npc.getId()))
|
||||
{
|
||||
if (killCountOuterCastle < MAX_KILLED_MOBS_OUTER_CASTLE)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR_OUTER_CASTLE, killCountOuterCastle + 1);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
checkKillProgress(killer);
|
||||
}
|
||||
}
|
||||
if (CommonUtil.contains(MONSTERS_ASA, npc.getId()))
|
||||
{
|
||||
if (killCountAsa < MAX_KILLED_MOBS_ASA)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR_ASA, killCountAsa + 1);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
checkKillProgress(killer);
|
||||
}
|
||||
}
|
||||
if (CommonUtil.contains(MONSTERS_ANIMA, npc.getId()))
|
||||
{
|
||||
if (killCountAnima < MAX_KILLED_MOBS_ANIMA)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR_ANIMA, killCountAnima + 1);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
checkKillProgress(killer);
|
||||
}
|
||||
}
|
||||
if (CommonUtil.contains(MONSTERS_NOX, npc.getId()))
|
||||
{
|
||||
if (killCountNox < MAX_KILLED_MOBS_NOX)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR_NOX, killCountNox + 1);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
checkKillProgress(killer);
|
||||
}
|
||||
}
|
||||
|
||||
sendNpcLogList(player);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkKillProgress(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs.getInt(KILL_COUNT_VAR_OUTER_CASTLE) >= MAX_KILLED_MOBS_OUTER_CASTLE) && (qs.getInt(KILL_COUNT_VAR_ASA) >= MAX_KILLED_MOBS_ASA) && (qs.getInt(KILL_COUNT_VAR_ANIMA) >= MAX_KILLED_MOBS_ANIMA) && (qs.getInt(KILL_COUNT_VAR_NOX) >= MAX_KILLED_MOBS_NOX))
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_MIDDLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.MONSTERS_IN_THE_OUTER_CASTLE.getId(), true, qs.getInt(KILL_COUNT_VAR_OUTER_CASTLE)));
|
||||
holder.add(new NpcLogListHolder(NpcStringId.MONSTERS_IN_THE_ASA_ZONE.getId(), true, qs.getInt(KILL_COUNT_VAR_ASA)));
|
||||
holder.add(new NpcLogListHolder(NpcStringId.MONSTERS_IN_THE_ANIMA_ZONE.getId(), true, qs.getInt(KILL_COUNT_VAR_ANIMA)));
|
||||
holder.add(new NpcLogListHolder(NpcStringId.MONSTERS_IN_THE_NOX_ZONE.getId(), true, qs.getInt(KILL_COUNT_VAR_NOX)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
You are not ready for this yet.<br>
|
||||
(This quest is for characters Lv. 110 and higher who have completed the Journey to the Conquest World quest.)
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
You must learn about a new way to succeed in conquering the Conquest world.<br>
|
||||
Defeat <font color="LEVEL">30 Luminous Souls</font> that can be encountered in certain zones of the Conquest world, and collect their fragments.<br>
|
||||
Monster to hunt: <font color="LEVEL">Luminous Soul.</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10906_ChasingTheLight 34599-02.html">"OK, let's start."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Defeat <font color="LEVEL">30 Luminous Souls</font> that can be encountered in certain zones of the Conquest world, and collect their fragments.<br>
|
||||
Monster to hunt: <font color="LEVEL">Luminous Soul.</font><br>
|
||||
When you are done come back to me, to get your reward.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Have you collected all the required luminous soul fragments?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10906_ChasingTheLight 34599-05.html">"Yes, sure."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Don't try to foul me...<br>
|
||||
Defeat <font color="LEVEL">30 Luminous Souls</font> that can be encountered in certain zones of the Conquest world, and collect their fragments.<br>
|
||||
Monster to hunt: <font color="LEVEL">Luminous Soul.</font><br>
|
||||
When you are done come back to me, to get your reward.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Congratulations. You have completed all the tasks.
|
||||
</body></html>
|
||||
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* 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 quests.Q10906_ChasingTheLight;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
import quests.Q10904_JourneyToTheConquestWorld.Q10904_JourneyToTheConquestWorld;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class Q10906_ChasingTheLight extends Quest
|
||||
{
|
||||
// NPC
|
||||
private static final int ENTROPY = 34599;
|
||||
// Monsters
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
19830, // Luminous Soul - Asa Area 1 (Lv. 116)
|
||||
19832, // Luminous Soul - Anima Area 1 (Lv. 116)
|
||||
19831, // Luminous Soul - Nox Area 1 (Lv. 116)
|
||||
};
|
||||
// Item
|
||||
private static final int LUMINOUS_SOUL_FRAGMENT = 82177;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 110;
|
||||
private static final int LUMINOUS_SOUL_FRAGMENT_NEEDED = 30;
|
||||
|
||||
public Q10906_ChasingTheLight()
|
||||
{
|
||||
super(10906);
|
||||
addStartNpc(ENTROPY);
|
||||
addTalkId(ENTROPY);
|
||||
addKillId(MONSTERS);
|
||||
addCondCompletedQuest(Q10904_JourneyToTheConquestWorld.class.getSimpleName(), "34599-00.html");
|
||||
addCondMinLevel(MIN_LEVEL, "34599-00.html");
|
||||
registerQuestItems(LUMINOUS_SOUL_FRAGMENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34599-02.html":
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
qs.startQuest();
|
||||
qs.setMemoState(1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-05.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
takeItems(player, LUMINOUS_SOUL_FRAGMENT, 30);
|
||||
addExpAndSp(player, 8872460372L, 7985214);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "34599-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == ENTROPY)
|
||||
{
|
||||
htmltext = "34599-01.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ENTROPY:
|
||||
{
|
||||
if ((qs.isCond(1) & qs.isMemoState(1)) || qs.isCond(2))
|
||||
{
|
||||
htmltext = "34599-03.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player player, boolean isSummon)
|
||||
{
|
||||
executeForEachPlayer(player, npc, isSummon, true, false);
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionForEachPlayer(Player player, Npc npc, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
|
||||
{
|
||||
if (getQuestItemsCount(player, LUMINOUS_SOUL_FRAGMENT) < LUMINOUS_SOUL_FRAGMENT_NEEDED)
|
||||
{
|
||||
giveItems(player, LUMINOUS_SOUL_FRAGMENT, 1);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
}
|
||||
if (getQuestItemsCount(player, LUMINOUS_SOUL_FRAGMENT) >= LUMINOUS_SOUL_FRAGMENT_NEEDED)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
You are not ready for this yet.<br>
|
||||
(This quest is for characters Lv. 110 and higher who have completed the Journey to the Conquest World quest.)
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
I need you to bring me petals of the special flowers that grow only in the Conquest world.<br>
|
||||
Defeat <font color="LEVEL">120 Soul Flowers</font> that sometimes appear while hunting monsters in the Conquest world, and gather their petals.<br>
|
||||
Monster to hunt: <font color="LEVEL">Soul Flower.</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10907_WhereFlowersBlossom 34599-02.html">"OK, let's start."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Defeat <font color="LEVEL">120 Soul Flowers</font> that sometimes appear while hunting monsters in the Conquest world, and gather their petals.<br>
|
||||
Monster to hunt: <font color="LEVEL">Soul Flower.</font><br>
|
||||
When you are done come back to me, to get your reward.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Have you gathered all the required flower petals?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10907_WhereFlowersBlossom 34599-05.html">"Yes, sure."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Don't try to foul me...<br>
|
||||
Defeat <font color="LEVEL">120 Soul Flowers</font> that sometimes appear while hunting monsters in the Conquest world, and gather their petals.<br>
|
||||
Monster to hunt: <font color="LEVEL">Soul Flower.</font><br>
|
||||
When you are done come back to me, to get your reward.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Congratulations. You have completed all the tasks.
|
||||
</body></html>
|
||||
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* 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 quests.Q10907_WhereFlowersBlossom;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
import quests.Q10904_JourneyToTheConquestWorld.Q10904_JourneyToTheConquestWorld;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class Q10907_WhereFlowersBlossom extends Quest
|
||||
{
|
||||
// NPC
|
||||
private static final int ENTROPY = 34599;
|
||||
// Monsters
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
19818, // Soul Flower - Asa Area 1 (Lv. 116)
|
||||
19819, // Soul Flower - Asa Area 2 (Lv. 120)
|
||||
19820, // Soul Flower - Asa Area 3 (Lv. 124)
|
||||
19824, // Soul Flower - Anima Area 1 (Lv. 116)
|
||||
19825, // Soul Flower - Anima Area 2 (Lv. 120)
|
||||
19826, // Soul Flower - Anima Area 3 (Lv. 124)
|
||||
19821, // Soul Flower - Nox Area 1 (Lv. 116)
|
||||
19822, // Soul Flower - Nox Area 2 (Lv. 120)
|
||||
19823, // Soul Flower - Nox Area 3 (Lv. 124)
|
||||
19840, // Soul Flower - Vita (Lv. 124)
|
||||
19841, // Soul Flower - Ignis (Lv. 128)
|
||||
};
|
||||
// Item
|
||||
private static final int SOUL_FLOWER_PETAL = 82178;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 110;
|
||||
private static final int SOUL_FLOWER_PETAL_NEEDED = 120;
|
||||
|
||||
public Q10907_WhereFlowersBlossom()
|
||||
{
|
||||
super(10907);
|
||||
addStartNpc(ENTROPY);
|
||||
addTalkId(ENTROPY);
|
||||
addKillId(MONSTERS);
|
||||
addCondCompletedQuest(Q10904_JourneyToTheConquestWorld.class.getSimpleName(), "34599-00.html");
|
||||
addCondMinLevel(MIN_LEVEL, "34599-00.html");
|
||||
registerQuestItems(SOUL_FLOWER_PETAL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34599-02.html":
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
qs.startQuest();
|
||||
qs.setMemoState(1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-05.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
takeItems(player, SOUL_FLOWER_PETAL, 120);
|
||||
addExpAndSp(player, 8872460372L, 7985214);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "34599-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == ENTROPY)
|
||||
{
|
||||
htmltext = "34599-01.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ENTROPY:
|
||||
{
|
||||
if ((qs.isCond(1) & qs.isMemoState(1)) || qs.isCond(2))
|
||||
{
|
||||
htmltext = "34599-03.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player player, boolean isSummon)
|
||||
{
|
||||
executeForEachPlayer(player, npc, isSummon, true, false);
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionForEachPlayer(Player player, Npc npc, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
|
||||
{
|
||||
if (getQuestItemsCount(player, SOUL_FLOWER_PETAL) < SOUL_FLOWER_PETAL_NEEDED)
|
||||
{
|
||||
giveItems(player, SOUL_FLOWER_PETAL, 1);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
}
|
||||
if (getQuestItemsCount(player, SOUL_FLOWER_PETAL) >= SOUL_FLOWER_PETAL_NEEDED)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -614,7 +614,7 @@ public class Q11025_PathOfDestinyProving extends Quest
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_SKELETONS_3.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
else if (qs.isCond(11))
|
||||
else if (qs.isCond(12))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.INVESTIGATE_THE_SURROUNDINGS.getId(), true, qs.getInt(KILL_COUNT_VAR2)));
|
||||
|
||||
@@ -312,7 +312,6 @@ public class Q11026_PathOfDestinyConviction extends Quest
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT1);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport2":
|
||||
@@ -321,7 +320,6 @@ public class Q11026_PathOfDestinyConviction extends Quest
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT2);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport3":
|
||||
@@ -330,7 +328,6 @@ public class Q11026_PathOfDestinyConviction extends Quest
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT3);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport4":
|
||||
@@ -339,7 +336,6 @@ public class Q11026_PathOfDestinyConviction extends Quest
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT4);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport5":
|
||||
@@ -348,10 +344,8 @@ public class Q11026_PathOfDestinyConviction extends Quest
|
||||
{
|
||||
player.teleToLocation(TRAINING_GROUNDS_TELEPORT5);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<font color="LEVEL">When the god's voice will no longer be heard.</font><br>
|
||||
<font color="LEVEL">A red river flows...</font><br>
|
||||
<font color="LEVEL">Hard frost upon the earth... And one of half-noble blood, descending with the winds to become the prophesied one.</font><br>
|
||||
<font color="LEVEL">Your lonely, solitary journey has begun. A small child in the middle of a blocked road appears. When joined by one of nobility, the path will open to the Grail.</center><br>
|
||||
<font color="LEVEL">Your lonely, solitary journey has begun. A small child in the middle of a blocked road appears. When joined by one of nobility, the path will open to the Grail.</font></center><br>
|
||||
So it wasn't a coincidence that you left on your journey.<br>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q11027_PathOfDestinyOvercome 33932-05.html">"What do you mean?"</Button>
|
||||
</body></html>
|
||||
@@ -60,6 +60,10 @@ import quests.Q10887_SaviorsPathDemonsAndAtelia.Q10887_SaviorsPathDemonsAndAteli
|
||||
import quests.Q10888_SaviorsPathDefeatTheEmbryo.Q10888_SaviorsPathDefeatTheEmbryo;
|
||||
import quests.Q10889_SaviorsPathFallenEmperorsThrone.Q10889_SaviorsPathFallenEmperorsThrone;
|
||||
import quests.Q10890_SaviorsPathHallOfEtina.Q10890_SaviorsPathHallOfEtina;
|
||||
import quests.Q10904_JourneyToTheConquestWorld.Q10904_JourneyToTheConquestWorld;
|
||||
import quests.Q10905_HuntingTime.Q10905_HuntingTime;
|
||||
import quests.Q10906_ChasingTheLight.Q10906_ChasingTheLight;
|
||||
import quests.Q10907_WhereFlowersBlossom.Q10907_WhereFlowersBlossom;
|
||||
import quests.Q11024_PathOfDestinyBeginning.Q11024_PathOfDestinyBeginning;
|
||||
import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
|
||||
import quests.Q11026_PathOfDestinyConviction.Q11026_PathOfDestinyConviction;
|
||||
@@ -75,10 +79,6 @@ import quests.not_done.Q01900_StormIsleSecretSpot;
|
||||
import quests.not_done.Q01901_StormIsleFurtiveDeal;
|
||||
import quests.not_done.Q10595_TheDimensionalWarpPart8;
|
||||
import quests.not_done.Q10596_TheDimensionalWarpPart9;
|
||||
import quests.not_done.Q10904_JourneyToTheConquestWorld;
|
||||
import quests.not_done.Q10905_HuntingTime;
|
||||
import quests.not_done.Q10906_ChasingTheLight;
|
||||
import quests.not_done.Q10907_WhereFlowersBlossom;
|
||||
import quests.not_done.Q11028_WindOfDestinyEncounter;
|
||||
import quests.not_done.Q11029_WindOfDestinyPromise;
|
||||
import quests.not_done.Q11030_WindOfDestinyChoice;
|
||||
@@ -144,10 +144,10 @@ public class QuestMasterHandler
|
||||
Q10888_SaviorsPathDefeatTheEmbryo.class,
|
||||
Q10889_SaviorsPathFallenEmperorsThrone.class,
|
||||
Q10890_SaviorsPathHallOfEtina.class,
|
||||
Q10904_JourneyToTheConquestWorld.class, // TODO: Not done.
|
||||
Q10905_HuntingTime.class, // TODO: Not done.
|
||||
Q10906_ChasingTheLight.class, // TODO: Not done.
|
||||
Q10907_WhereFlowersBlossom.class, // TODO: Not done.
|
||||
Q10904_JourneyToTheConquestWorld.class,
|
||||
Q10905_HuntingTime.class,
|
||||
Q10906_ChasingTheLight.class,
|
||||
Q10907_WhereFlowersBlossom.class,
|
||||
Q11028_WindOfDestinyEncounter.class, // TODO: Not done.
|
||||
Q11029_WindOfDestinyPromise.class, // TODO: Not done.
|
||||
Q11030_WindOfDestinyChoice.class, // TODO: Not done.
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.not_done;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Q10904_JourneyToTheConquestWorld extends Quest
|
||||
{
|
||||
private static final int START_NPC = 34600;
|
||||
|
||||
public Q10904_JourneyToTheConquestWorld()
|
||||
{
|
||||
super(10904);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.not_done;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Q10907_WhereFlowersBlossom extends Quest
|
||||
{
|
||||
private static final int START_NPC = 34599;
|
||||
|
||||
public Q10907_WhereFlowersBlossom()
|
||||
{
|
||||
super(10907);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
}
|
||||
}
|
||||
@@ -425,33 +425,6 @@
|
||||
<npc id="21599" count="1" respawnTime="90sec" /> <!-- Requiem Priest -->
|
||||
</group>
|
||||
</spawn>
|
||||
<spawn name="rune09_2116_15_DayNight" ai="DayNightSpawns">
|
||||
<territories>
|
||||
<territory name="rune09_2116_15" minZ="-3247" maxZ="-2347">
|
||||
<node x="61271" y="-48011" />
|
||||
<node x="62135" y="-44855" />
|
||||
<node x="61207" y="-44065" />
|
||||
<node x="58383" y="-47642" />
|
||||
<node x="59055" y="-49908" />
|
||||
</territory>
|
||||
</territories>
|
||||
<group name="dayTime" spawnByDefault="false">
|
||||
<npc id="21570" count="1" respawnTime="30sec" /> <!-- Ghost of Betrayer -->
|
||||
<npc id="21575" count="1" respawnTime="30sec" /> <!-- Bone Grinder -->
|
||||
<npc id="21578" count="1" respawnTime="30sec" /> <!-- Behemoth Zombie -->
|
||||
<npc id="21580" count="1" respawnTime="30sec" /> <!-- Bone Caster -->
|
||||
<npc id="21581" count="1" respawnTime="30sec" /> <!-- Bone Puppeteer -->
|
||||
</group>
|
||||
<group name="nightTime" spawnByDefault="false">
|
||||
<npc id="21573" count="1" respawnTime="30sec" /> <!-- Atrox -->
|
||||
<npc id="21571" count="1" respawnTime="30sec" /> <!-- Ghost of Rebel Soldier -->
|
||||
<npc id="21576" count="1" respawnTime="30sec" /> <!-- Ghost of Guillotine -->
|
||||
<npc id="21577" count="1" respawnTime="30sec" /> <!-- Ghost of Guillotine -->
|
||||
<npc id="21579" count="1" respawnTime="30sec" /> <!-- Ghost of Rebel Leader -->
|
||||
<npc id="21582" count="1" respawnTime="30sec" /> <!-- Vampire Soldier -->
|
||||
<npc id="21599" count="1" respawnTime="90sec" /> <!-- Requiem Priest -->
|
||||
</group>
|
||||
</spawn>
|
||||
<spawn name="rune09_2116_16_DayNight" ai="DayNightSpawns">
|
||||
<territories>
|
||||
<territory name="rune09_2116_16" minZ="-3465" maxZ="-2165">
|
||||
@@ -698,24 +671,4 @@
|
||||
<npc id="21588" count="1" respawnTime="30sec" /> <!-- Vampire Wizard -->
|
||||
</group>
|
||||
</spawn>
|
||||
<spawn name="rune09_2116_26_Night" ai="DayNightSpawns">
|
||||
<territories>
|
||||
<territory name="rune09_2116_26" minZ="-3216" maxZ="-2616">
|
||||
<node x="61742" y="-43011" />
|
||||
<node x="61991" y="-41266" />
|
||||
<node x="58288" y="-40739" />
|
||||
<node x="55959" y="-41439" />
|
||||
<node x="58733" y="-43587" />
|
||||
<node x="60332" y="-43914" />
|
||||
</territory>
|
||||
</territories>
|
||||
<group name="nightTime" spawnByDefault="false">
|
||||
<npc id="21586" count="1" respawnTime="30sec" /> <!-- Vampire Adept -->
|
||||
<npc id="21585" count="1" respawnTime="30sec" /> <!-- Vampire Magician -->
|
||||
<npc id="21592" count="1" respawnTime="30sec" /> <!-- Vampire Magister -->
|
||||
<npc id="21595" count="1" respawnTime="30sec" /> <!-- Vampire Warlord -->
|
||||
<npc id="21588" count="1" respawnTime="30sec" /> <!-- Vampire Wizard -->
|
||||
<npc id="21589" count="1" respawnTime="30sec" /> <!-- Vampire Wizard -->
|
||||
</group>
|
||||
</spawn>
|
||||
</list>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user