Free version update 14-12-2023.

This commit is contained in:
MobiusDevelopment
2023-12-14 02:11:28 +02:00
parent 6a0a4be1ea
commit 1204ad8e00
6352 changed files with 98838 additions and 68045 deletions

View File

@@ -299,6 +299,13 @@ HardinRemovedSkills = 148,10104,10065,10098,19558,10097,10042,19552;\
181,11855,19212,11856,11854,11863,11859
# ---------------------------------------------------------------------------
# Eraton (Red Libra)
# ---------------------------------------------------------------------------
# Skill ids that will remain after Eraton class change.
EratonRetainedSkills = 1370,1371,1372,11400,11401,11402,11403,11404,31048,31049,30930,30931
# ---------------------------------------------------------------------------
# Summons configuration
# ---------------------------------------------------------------------------

View File

@@ -64,6 +64,10 @@ ConquestRateServerSoulOrbs = 1
# Retail: 1
ConquestRateZonePoints = 1
# Bloody Coins multiplier
# Retail: 1
ConquestRateBloodyCoins = 1
# Character Attack Points
# Retail: 100
ConquestCharacterAttackPoints = 100

View File

@@ -17,6 +17,9 @@ FakePlayerKillsRewardPvP = True
# Fake player kills apply karma rules.
FakePlayerUnflaggedKillsKarma = True
# Fake players can be attacked without PvP flagging.
FakePlayerAutoAttackable = False
# Aggressive AI fake players attack nearby monsters.
FakePlayerAggroMonsters = True

View File

@@ -436,8 +436,8 @@ ChatFilterChars = ^_^
# NPC_SHOUT
# NEW_TELL
# WORLD (&)
# Default: ALL;SHOUT;GLOBAL;TRADE;HERO_VOICE
BanChatChannels = GENERAL;SHOUT;WORLD;TRADE;HERO_VOICE
# Default: GENERAL;SHOUT;GLOBAL;TRADE;HERO_VOICE;WHISPER
BanChatChannels = GENERAL;SHOUT;WORLD;TRADE;HERO_VOICE;WHISPER
# ---------------------------------------------------------------------------
@@ -660,6 +660,11 @@ EnableAutoItem = True
# Retail: False
ResumeAutoPlay = False
# Assist party leader.
# When in party, target what the leader is targeting.
# Retail: False
AssistLeader = False
# ---------------------------------------------------------------------------
# Blue-Red Team Abnormal Effect Settings

View File

@@ -159,11 +159,13 @@ EventItemMaxLevelDifference = 9
# Vitality system rates. Works only if EnableVitality = True
# ---------------------------------------------------------------------------
# The following configures the XP multiplier of each vitality level. Basically, you have
# Default: 2
# The following configures the XP multiplier of each vitality level.
# Take care setting these values according to your server rates, as the can lead to huge differences!
# Example with a server rate 15x and vitality = 2. => final server rate = 30 (15x2)!
# Retail: 2
RateVitalityExpMultiplier = 2.
# Retail: 3
RateVitalityExpPremiumMultiplier = 3.
# Maximum vitality items allowed to be used for a week by a player.
# Default: 999

View File

@@ -2,33 +2,33 @@
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/ActionData.xsd">
<action id="0" handler="SitStand" /> <!-- Sit / Stand -->
<action id="1" handler="RunWalk" /> <!-- Walk / Run -->
<!-- Attack -->
<!-- Exchange -->
<!-- Next Target (Melee) -->
<!-- Pick Up -->
<!-- Help -->
<!-- Invite -->
<!-- Leave Party -->
<!-- Dismiss Party Member -->
<action id="10" handler="PrivateStore" option="1" /> <!-- Private Store Sell -->
<!-- Party Matching -->
<action id="2" handler="None" /> <!-- Attack -->
<action id="3" handler="None" /> <!-- Exchange -->
<action id="4" handler="None" /> <!-- Next Target (Melee) -->
<action id="5" handler="None" /> <!-- Pick Up -->
<action id="6" handler="None" /> <!-- Help -->
<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="17" handler="PetStop" /> <!-- Stop -->
<!-- Pick Up -->
<action id="18" handler="None" /> <!-- Pick Up -->
<action id="19" handler="UnsummonPet" /> <!-- Recall Pet -->
<!-- Special skill -->
<action id="20" handler="None" /> <!-- Special skill -->
<action id="21" handler="ServitorHold" /> <!-- Change Movement Mode -->
<action id="22" handler="ServitorAttack" /> <!-- Attack -->
<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 -->
<!-- Special skill -->
<action id="28" handler="PrivateStore" option="3" /> <!-- Private Store Buy -->
<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 -->
@@ -37,10 +37,9 @@
<action id="34" handler="SocialAction" option="12" /> <!-- Dance -->
<action id="35" handler="SocialAction" option="13" /> <!-- Sorrow -->
<action id="36" handler="ServitorSkillUse" option="4259" /> <!-- Toxic Smoke -->
<action id="37" handler="PrivateStore" option="5" /> <!-- Dwarven Manufacture -->
<action id="38" handler="Ride" /> <!-- Mount/Dismount -->
<action id="39" handler="ServitorSkillUse" option="4138" /> <!-- Parasite Burst -->
<!-- Recommend -->
<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 -->
@@ -50,21 +49,20 @@
<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 -->
<!-- Change Party Leader -->
<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 -->
<!-- Recording Replay On/Off -->
<!-- Command Channel Invite -->
<!-- Find Store -->
<!-- Duel -->
<!-- Cancel Duel -->
<!-- Party Duel -->
<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 -->
<!-- Minigame -->
<action id="63" handler="None" /> <!-- Minigame -->
<action id="64" handler="TeleportBookmark" /> <!-- My Teleport -->
<action id="65" handler="BotReport" />
<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 -->
@@ -73,9 +71,9 @@
<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 -->
<!-- Turn On/Off the Status Information -->
<!-- Invite Friends -->
<!-- Start/End Recording -->
<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 -->
@@ -88,15 +86,15 @@
<action id="88" handler="SocialAction" option="29" /> <!-- Provoke -->
<action id="89" handler="SocialAction" option="30" /> <!-- Show Off -->
<action id="90" handler="InstanceZoneInfo" /> <!-- Instance Zones -->
<!-- Previous Target (Melee) -->
<!-- Next Target (Range) -->
<!-- Previous Target (Range) -->
<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 -->
<!-- Ultimate Bombastic Buster -->
<!-- Hostile Feeling -->
<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 -->
@@ -235,8 +233,6 @@
<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="1142" handler="ServitorSkillUse" option="10087" /> <!-- Panther Roar -->
<action id="1143" handler="ServitorSkillUse" option="10088" /> <!-- Panther Rush -->
<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 -->

View File

@@ -4550,4 +4550,34 @@
<bodyPart>chest</bodyPart>
<bodyPart>fullarmor</bodyPart>
</appearance_stone>
<!-- Appearance Stone: Sigil of Light Lv. 1 -->
<appearance_stone id="60585" targetType="ARMOR" type="FIXED" visualId="60575" armorType="SIGIL" /> <!-- Sigil of Light Lv. 1 -->
<!-- Appearance Stone: Sigil of Light Lv. 2 -->
<appearance_stone id="60586" targetType="ARMOR" type="FIXED" visualId="60576" armorType="SIGIL" /> <!-- Sigil of Light Lv. 2 -->
<!-- Appearance Stone: Sigil of Light Lv. 3 -->
<appearance_stone id="60587" targetType="ARMOR" type="FIXED" visualId="60577" armorType="SIGIL" /> <!-- Sigil of Light Lv. 3 -->
<!-- Appearance Stone: Sigil of Light Lv. 4 -->
<appearance_stone id="60588" targetType="ARMOR" type="FIXED" visualId="60578" armorType="SIGIL" /> <!-- Sigil of Light Lv. 4 -->
<!-- Appearance Stone: Sigil of Light Lv. 5 -->
<appearance_stone id="60589" targetType="ARMOR" type="FIXED" visualId="60579" armorType="SIGIL" /> <!-- Sigil of Light Lv. 5 -->
<!-- Appearance Stone: Sigil of Light Lv. 6 -->
<appearance_stone id="60590" targetType="ARMOR" type="FIXED" visualId="60580" armorType="SIGIL" /> <!-- Sigil of Light Lv. 6 -->
<!-- Appearance Stone: Sigil of Light Lv. 7 -->
<appearance_stone id="60591" targetType="ARMOR" type="FIXED" visualId="60581" armorType="SIGIL" /> <!-- Sigil of Light Lv. 7 -->
<!-- Appearance Stone: Sigil of Light Lv. 8 -->
<appearance_stone id="60592" targetType="ARMOR" type="FIXED" visualId="60582" armorType="SIGIL" /> <!-- Sigil of Light Lv. 8 -->
<!-- Appearance Stone: Sigil of Light Lv. 9 -->
<appearance_stone id="60593" targetType="ARMOR" type="FIXED" visualId="60583" armorType="SIGIL" /> <!-- Sigil of Light Lv. 9 -->
<!-- Appearance Stone: Sigil of Light Lv. 10 -->
<appearance_stone id="60594" targetType="ARMOR" type="FIXED" visualId="60584" armorType="SIGIL" /> <!-- Sigil of Light Lv. 10 -->
</list>

View File

@@ -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 -->

View File

@@ -4,7 +4,7 @@
<!-- Kill 300 monsters. (A monster kill counts only when XP is gained from it.) -->
<!-- dethronedailymission_begin name=[Monster Hunting] id=1 npc_kill_max_count=300 reward_personal_dethrone_point=250 reward_server_dethrone_point=500 dethronedailymission_end -->
<handler name="monster">
<param name="ids">27701,27702,27703,27704,27705,27706,27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754</param>
<param name="ids">27701,27702,27703,27704,27705,27706,27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27801,27802,27803,27804,27805,27806,27794,27795,27796,27797,27798,27799,27808,27810,27811,27812,27813,27814,27815,27816,27817,27819,27820,27821,27822,27823,27824,27825</param>
<param name="minLevel">101</param>
<param name="maxLevel">255</param>
</handler>

View File

@@ -11947,6 +11947,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">

View File

@@ -4,110 +4,110 @@
<item id="60368" count="2" premiumId="60386" premiumCount="1"/> <!-- Season Pass Bonus / Hunter's Coin -->
<item id="48848" count="5" premiumId="60368" premiumCount="10" /> <!-- Freya's Ice Rose / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80960" premiumCount="1" /> <!-- Season Pass Bonus / Pantheon's Museum's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="81011" count="5" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="48848" premiumCount="40" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="48857" count="5" premiumId="60368" premiumCount="20" /> <!-- Glowing Dragon's Attribute Potion (XP) / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="60368" count="2" premiumId="81013" premiumCount="20" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="81815" count="1" premiumId="60368" premiumCount="10" /> <!-- Homunculus' Hourglass / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60368" count="2" premiumId="81012" premiumCount="20" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60306" count="10" premiumId="60306" premiumCount="650" /> <!-- Vitality Sustention Points / Vitality Sustention Points -->
<!-- Page 2 -->
<item id="60368" count="2" premiumId="81815" premiumCount="4"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80906" premiumCount="1" /> <!-- Season Pass Bonus / Jamoa's Camp's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="81011" premiumCount="40" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="48857" premiumCount="40" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60368" count="2" premiumId="81054" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="10" premiumId="82394" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Accesories -->
<!-- Page 3 -->
<item id="60368" count="2" premiumId="81815" premiumCount="2"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="48848" count="5" premiumId="60368" premiumCount="10" /> <!-- Freya's Ice Rose / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80960" premiumCount="1" /> <!-- Season Pass Bonus / Pantheon's Museum's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="81011" count="5" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="48848" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="48857" count="5" premiumId="60368" premiumCount="20" /> <!-- Glowing Dragon's Attribute Potion (XP) / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="60368" count="2" premiumId="81013" premiumCount="10" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="81815" count="1" premiumId="60368" premiumCount="10" /> <!-- Homunculus' Hourglass / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60368" count="2" premiumId="81012" premiumCount="10" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60306" count="10" premiumId="60306" premiumCount="650" /> <!-- Vitality Sustention Points / Vitality Sustention Points -->
<!-- Page 4 -->
<item id="60368" count="2" premiumId="81815" premiumCount="4"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80906" premiumCount="1" /> <!-- Season Pass Bonus / Jamoa's Camp's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="81011" premiumCount="20" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="48857" premiumCount="20" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="40" premiumId="80393" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Circlet -->
<item id="60368" count="2" premiumId="81054" premiumCount="10" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="10" premiumId="82393" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Circlet -->
<!-- Page 5 -->
<item id="60368" count="2" premiumId="81815" premiumCount="2"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="48848" count="5" premiumId="60368" premiumCount="10" /> <!-- Freya's Ice Rose / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80960" premiumCount="1" /> <!-- Season Pass Bonus / Pantheon's Museum's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="81011" count="5" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="48848" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="48857" count="5" premiumId="60368" premiumCount="20" /> <!-- Glowing Dragon's Attribute Potion (XP) / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="60368" count="2" premiumId="81013" premiumCount="10" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="81815" count="1" premiumId="60368" premiumCount="10" /> <!-- Homunculus' Hourglass / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60368" count="2" premiumId="81012" premiumCount="10" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60306" count="10" premiumId="60306" premiumCount="650" /> <!-- Vitality Sustention Points / Vitality Sustention Points -->
<!-- Page 6 -->
<item id="60368" count="2" premiumId="81815" premiumCount="4"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80906" premiumCount="1" /> <!-- Season Pass Bonus / Jamoa's Camp's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="81011" premiumCount="20" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="48857" premiumCount="20" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="40" premiumId="80396" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Kaliel's Bracelet -->
<item id="60368" count="2" premiumId="81054" premiumCount="10" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="10" premiumId="80396" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Kaliel's Bracelet -->
<!-- Page 7 -->
<item id="60368" count="2" premiumId="81815" premiumCount="2"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="48848" count="5" premiumId="60368" premiumCount="10" /> <!-- Freya's Ice Rose / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80960" premiumCount="1" /> <!-- Season Pass Bonus / Pantheon's Museum's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="81011" count="5" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="48848" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="48857" count="5" premiumId="60368" premiumCount="20" /> <!-- Glowing Dragon's Attribute Potion (XP) / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="60368" count="2" premiumId="81013" premiumCount="10" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="81815" count="1" premiumId="60368" premiumCount="10" /> <!-- Homunculus' Hourglass / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60368" count="2" premiumId="81012" premiumCount="10" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60306" count="10" premiumId="60306" premiumCount="650" /> <!-- Vitality Sustention Points / Vitality Sustention Points -->
<!-- Page 8 -->
<item id="60368" count="2" premiumId="81815" premiumCount="4"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80906" premiumCount="1" /> <!-- Season Pass Bonus / Jamoa's Camp's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="81011" premiumCount="20" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="48857" premiumCount="20" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="40" premiumId="80398" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Artifact Book -->
<item id="60368" count="2" premiumId="81054" premiumCount="10" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60306" count="40" premiumId="82398" premiumCount="5" /> <!-- Vitality Sustention Points / Augmenting Stone: Artifact Book -->
<!-- Page 9 -->
<item id="60368" count="2" premiumId="81815" premiumCount="2"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="48848" count="5" premiumId="60368" premiumCount="10" /> <!-- Freya's Ice Rose / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80960" premiumCount="1" /> <!-- Season Pass Bonus / Pantheon's Museum's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="81011" count="5" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="48848" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Ice Rose -->
<item id="48857" count="5" premiumId="60368" premiumCount="20" /> <!-- Glowing Dragon's Attribute Potion (XP) / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="60368" count="2" premiumId="81013" premiumCount="10" /> <!-- Season Pass Bonus / Shining Nevit's Gold Hourglass -->
<item id="81815" count="1" premiumId="60368" premiumCount="10" /> <!-- Homunculus' Hourglass / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60368" count="2" premiumId="81012" premiumCount="10" /> <!-- Season Pass Bonus / Emperor's Special Cocktail Event -->
<item id="60306" count="10" premiumId="60306" premiumCount="650" /> <!-- Vitality Sustention Points / Vitality Sustention Points -->
<!-- Page 10 -->
<item id="60368" count="2" premiumId="81815" premiumCount="4"/> <!-- Season Pass Bonus / Homunculus' Hourglass -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="80906" premiumCount="1" /> <!-- Season Pass Bonus / Jamoa's Camp's Time Stone -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="81011" premiumCount="20" /> <!-- Season Pass Bonus / Honey Dark Beer -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="40" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="48857" premiumCount="20" /> <!-- Season Pass Bonus / Glowing Dragon's Attribute Potion (XP) -->
<item id="60368" count="2" premiumId="60368" premiumCount="10" /> <!-- Season Pass Bonus / Season Pass Bonus -->
<item id="60368" count="2" premiumId="60368" premiumCount="20" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="60368" count="2" premiumId="81054" premiumCount="10" /> <!-- Season Pass Bonus / Freya's Scroll of Storm Event -->
<item id="82344" count="50" premiumId="60378" premiumCount="1" /> <!-- Tales of Dimensions / Final Reward Chest -->
</list>

View File

@@ -322,6 +322,7 @@
<instance id="320" name="Crystal Caverns" />
<instance id="321" name="Nightmare Kamaloka" />
<instance id="322" name="Krofin's Nest" />
<instance id="323" name="Ice Queen's Castle (Party)" />
<instance id="1001" name="Session Zone - Fioren's Crystal Prison" />
<instance id="1006" name="Session Zone - Jamoa's Camp" />
<instance id="1007" name="Session Zone - Pantheon's Museum" />

View File

@@ -1,8 +1,9 @@
<html><body>Seed Talisman Manager:<br>
Gracia is interesting, yes, interesting for its seeds. Many seeds, very interesting!<br>
We have found, let me see... Talisman - Infinity, Talisman - Destruction, Talisman - Annihilation, Talisman - Hellfire, Talisman - Desire, Talisman - Longing, and Talisman - Insanity! But I can only offer the Talisman - Infinity. But no worries! With the <font color="LEVEL">Energy of Destruction</font> and <font color="LEVEL">Giant's Energy</font>, you can create a Seed Talisman beyond that of Destruction! It does not always work, of course, but it is worth trying, yes! Oh, and when you're upgrading them, use <font color="LEVEL">Kaliel's Energy</font> or <font color="LEVEL">Elcyum</font> to increase the success rate.<br>
Oh, and wearing multiple will not give you multiple effects!<br>
Ah! I want you to know that I cannot help you create Talisman - Insanity. But if you use <font color="LEVEL">combination</font> in the inventory, you will be able to get one. But the chances are low because it is so rare.<br>
All Seed Talismans are bound to you, but you can unbind the Talisman - Longing and Talisman - Insanity by sealing them.<br>
Since Gracia and Aden have made an alliance, the research of Gracia's Seed is progressing at a quick rate. For instance, we've found talismans in several seeds.<br>
Those are Talisman of Infinity, Talisman of Destruction, Talisman of Annihilation, Talisman of Hellfire, Talisman of Desire, Talisman of Longing, and Talisman of Insanity and Heavenly Talisman. However, I can give you only the Talisman of Infinity.<br>
Don't worry! Using <font color="LEVEL">Energy of Destruction</font> and <font color="LEVEL">Giant's Energy</font>, you can create a Seed Talisman that's more powerful than Talisman of Destruction - if you're lucky, of course. You can equip several Seed Talismans, but only the most powerful of them will be active.<br>
You can <font color="LEVEL">seal Talisman of Longing</font> and <font color="LEVEL">Talisman of Insanity</font> to <font color="LEVEL">give them</font> to <font color="LEVEL">another character</font>.<br>
If you use several talismans, <font color="LEVEL">only one will be active</font>.<br>
By the way, you can try crafting Talisman of Insanity and Heavenly Talisman by yourself via the <font color="LEVEL">compounding</font> option in your inventory. But I'd recommend using my services to increase your success rate, because these are very rare items and it's not that easy to get them.<br1>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</body></html>

View 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>

View File

@@ -1,3 +1,3 @@
<html><body>Overseer Merksman:<br>
<html><body>Overseer Marksman:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -1,3 +1,3 @@
<html><body>Investigators Guard:<br>
<html><body>Expedition Guard:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -3,6 +3,6 @@ It's simple. You need to defeat Freya in the Ice Queen's Castle.<br>
You can enter the Ice Queen's Castle in a <font color="LEVEL">party of 2-7 players of Lv. 115 or higher</font>. You won't need to choose difficulty level here: Unlike daily instance zones, here there is only one difficulty.<br>
If you defeat Freya, you will be able to re-enter the Ice Queen's Castle only after resetting <font color="LEVEL">each Wednesday at 06:30</font>.<br>
Note that during the battle you can re-enter the zone, but <font color="LEVEL">if all the members of your party left</font>, you need to return there <font color="LEVEL">within 1 minute</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest IceQueensCastle enterInstance">Enter the Ice Queen's Castle</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Freya enterInstance">Enter the Ice Queen's Castle</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Search Team Guard:<br>
There are many dangerous monsters out there. Don't let your guard down.
</body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Patrol Guard:<br>
Fafurion's Soldiers have occupied the fields. We found out rhat they have divided into two units.<br>
Fafurion's Soldiers have occupied the fields. We found out that they have divided into two units.<br>
The soldiers to the north in the Field of Silence are there to capture Krofins, and the elite soldiers are to the south in the Field of Whispers.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Researchers' Guard:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Researchers' Guard:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Expedition Guard:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Expedition Guard:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Overseer Marksman:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Overseer Guardian:<br>
There are many dangerous monsters outside the camps. Don't let your guard down.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Patrol Guard:<br>
Fafurion's Soldiers have occupied the fields. We found out that they have divided into two units.<br>
The soldiers to the north in the Field of Silence are there to capture Krofins, and the elite soldiers are to the south in the Field of Whispers.
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Fire Fortress Guide Casgard:<br>
I hope these landscapes were not a disappointment to you. Although this place is called the <font color="LEVEL">Fire Fortress</font>, did you really think that you'll see only scorching ashes and harsh smoke here?<br>
In any case, you've come a long way. For now, take a breath and look around. We'll discuss my request later.<br>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Fire Fortress Guide Ishrin:<br>
Have you ever heard the expression <font color="LEVEL">"petals of fire"</font>? I've always found it strange. How could anyone compare hot scarlet flames with tender florwers?<br>
Probably, that's the reason why I became so interested in the flowers that grow in the Fire Conquest area.<br>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,8 @@
<html><body>Fire Fortress Guide Kellond:<br>
Greetings! I hope we'll become friends, and friends have no use for formalities. There is no need to call me Fire Fortress Guide.<br>
Friends call me <font color="LEVEL">Kellond the Immortal</font>!<br>
Care to know why? That's quite simple.<br>
I'm called the Immortal because, unlike you, I never put myself at risk and try to avoid difficulties that threaten my life. What is even more important, I always keep to safe places!<br>
To my mind, this is the safest place in all the Conquest world, which means I'll never ever leave it!<br>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -1,12 +1,8 @@
<html><body>Overseer Teleporter:<br>
I can teleport you to any Overseer camp.<br>
Where would you like to teleport?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Golden Hills(north)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Golden Hills(south)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Golden Altar</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3"><font color="f96464">Mimir's Altar(Lv. 112)</font></Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4"><font color="f96464">Nornil's Altar(Lv. 112)</font></Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 5"><font color="f96464">Isle of Souls Harbor(Lv. 112)</font></Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 6"><font color="f96464">Kamael Village(East)(Lv. 112)</font></Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 7"><font color="f96464">Kamael Village(South)(Lv. 112)</font></Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Pantheon's Museum</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Golden Hills(north)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Golden Hills(south)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Golden Altar</Button>
</body></html>

View File

@@ -1,8 +1,9 @@
<html><body>Expedition Teleporter:<br>
We will safely send you to our camps.<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Southern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Northern Camp</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 0">Jamoa's Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Southern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Northern Camp</Button>
</body></html>

View File

@@ -1,8 +1,9 @@
<html><body>Investigators Teleporter:<br>
We will safely send you to our camps.<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Southern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Northern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Fioren's Crystal Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Southern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Northern Camp</Button>
</body></html>

View File

@@ -1,12 +1,13 @@
<html><body>Patrol Teleporter:<br>
The sudden attack of the Fafurion army has had my head spinning. The first group can be found in the Field of Silence to the north trying to subjugate the Krofin.
The second one, composed of elite warriors, is setting up camp in the Field of Whispers to the south.<br>
Out scouts think that the soldiers in the Field of Whispers are more dangerous, so be extra careful.<br>
Where would you like to teleport? <br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Eastern Border</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Western Border</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">East of the Fields of Silence(Lv. 108)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Western Part of the Fields of Silence(Lv. 108)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Eastern Part of the Fields of Whispers(Lv. 114)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 5">Western Part of the Fields of Silence(Lv. 114)</Button>
The sudden attack of the Fafurion army has had my head spinning. The first group can be found in the Field of Silence to the north trying to subjugate
the Krofin. The second one, composed of elite warriors, is setting up camp in the Field of Whispers to the south.<br>
Our scouts think that the soldiers in the Fields of Whispers are more dangerous, so be extra careful.<br>
Where would you like to teleport?<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 0">Return to Heine</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Border</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Border</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 3">East of the Field of Silence</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 4">Western part of the Field of Silence</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 5">Eastern part of the Field of Whispers</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 6">Western part of the Field of Whispers</Button>
</body></html>

View File

@@ -0,0 +1,9 @@
<html><body>Investigators Teleporter:<br>
We will safely send you to our camps.<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Fioren's Crystal Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Southern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Northern Camp</Button>
</body></html>

View File

@@ -0,0 +1,9 @@
<html><body>Researchers' Teleporter:<br>
We will safely send you to our camps.<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Fioren's Crystal Prison</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Southern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Northern Camp</Button>
</body></html>

View File

@@ -0,0 +1,8 @@
<html><body>Expedition Teleporter:<br>
We will safely send you to our camps.<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Jamoas's Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Northern Camp</Button>
</body></html>

View File

@@ -0,0 +1,8 @@
<html><body>Expedition Teleporter:<br>
We will safely send you to our camps.<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Jamoa's Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Eastern Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Western Camp</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Northern Camp</Button>
</body></html>

View File

@@ -0,0 +1,10 @@
<html><body>Overseer Teleporter:<br>
I can teleport you to any Overseer camp.<br>
Where would you like to teleport?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Pantheon's Museum</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Mimir's Altar</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Nornil's Altar</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Isle of Souls Harbor</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Kamael Village (East)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 5">Kamael Village (South)</Button>
</body></html>

View File

@@ -0,0 +1,9 @@
<html><body>Overseer Teleporter:<br>
I can teleport you to any Overseer camp.<br>
Where would you like to teleport?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Pantheon's Museum</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Railroad Station</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Plunderous Plains (West)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 3">Plunderous Plains (East)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 4">Sky Wagon Relic</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Lionel Hunter:<br>
Select the place you wish to teleport to.
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 0">Field of Silence</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 1">Field of Whispers</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_teleport OTHER 2">Alligator Beach</Button>
</body></html>

View File

@@ -3,10 +3,7 @@ The sudden attack of the Fafurion army has had my head spinning. The first group
the Krofin. The second one, composed of elite warriors, is setting up camp in the Field of Whispers to the south.<br>
Our scouts think that the soldiers in the Fields of Whispers are more dangerous, so be extra careful.<br>
Where would you like to teleport?<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 0">Eastern Border</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 1">Western Border</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 2">East of the Field of Silence (Lv.108)</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 3">Western part of the Field of Silence (Lv.108)</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 4">Eastern part of the Field of Whispers (Lv.114)</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 5">Western part of the Field of Whispers (Lv.114)</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 0">Return to Heine</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 1">Southern part of the Alligator Beach</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 2">Northern of the Alligator Beach</Button>
</body></html>

View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Ice Queen's Castle -->
<instance id="323" maxWorlds="100" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="0" />
<locations>
<enter type="FIXED">
<location x="114722" y="-113870" z="-11207" />
</enter>
<exit type="FIXED">
<location x="146981" y="26877" z="-2208" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoEnter.html" />
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoEnter.html" />
</condition>
<condition type="GroupMin">
<param name="html" value="condNoEnter.html" />
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level" showMessageAndHtml="true">
<param name="html" value="condNoEnter.html" />
<param name="min" value="115" />
</condition>
<condition type="Distance" />
<condition type="Reenter" />
</conditions>
<reenter apply="ON_FINISH">
<reset day="WEDNESDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="23140101">
<openStatus default="close" />
</door>
</doorlist>
<spawnlist>
<group name="FREYA_STAGE_1" spawnByDefault="false">
<npc id="26511" x="114721" y="-114809" z="-11208" heading="16117" /> <!-- Freya -->
</group>
<group name="FREYA_STAGE_2" spawnByDefault="false">
<npc id="26512" x="114723" y="-117531" z="-10676" heading="16117" /> <!-- Freya -->
</group>
<group name="FREYA_STAGE_3" spawnByDefault="false">
<npc id="26513" x="114721" y="-114809" z="-11208" heading="16117" /> <!-- Freya -->
</group>
<group name="GLAKIAS" spawnByDefault="false">
<npc id="26514" x="114721" y="-114809" z="-11208" heading="16117" /> <!-- Glakias -->
</group>
<group name="KANNAS_KNIGHTS" spawnByDefault="false">
<npc id="26521" x="113916" y="-114006" z="-11203" heading="57456" /> <!-- Adrini -->
<npc id="26522" x="113916" y="-115602" z="-11203" heading="8079" /> <!-- Belkshin -->
<npc id="26523" x="115526" y="-115602" z="-11203" heading="24096" /> <!-- Kamel -->
<npc id="26524" x="115532" y="-114006" z="-11203" heading="40815" /> <!-- Diastin -->
</group>
<group name="WINTER_CRYSTAL" spawnByDefault="false">
<npc id="26518" x="114871" y="-114817" z="-11208" heading="16154" /> <!-- Winter Crystal -->
</group>
<group name="ICICLES_1" spawnByDefault="false">
<npc id="26520" x="114730" y="-117205" z="-11083" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-117005" z="-11083" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116805" z="-11083" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116605" z="-11099" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116405" z="-11177" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116205" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116005" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115605" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115405" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115205" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115005" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114605" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114405" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114205" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114005" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113605" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113405" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113205" z="-10989" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113005" z="-10989" heading="0" /> <!-- Huge Icicle -->
</group>
<group name="ICICLES_2" spawnByDefault="false">
<npc id="26520" x="112930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="116130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="116330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="116530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
</group>
<group name="ICICLES_3" spawnByDefault="false">
<npc id="26520" x="114730" y="-117205" z="-11083" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-117005" z="-11083" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116805" z="-11083" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116605" z="-11099" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116405" z="-11177" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116205" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-116005" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115605" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115405" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115205" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-115005" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114605" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114405" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114205" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114005" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113605" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113405" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113205" z="-10989" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-113005" z="-10989" heading="0" /> <!-- Huge Icicle -->
</group>
<group name="ICICLES_4" spawnByDefault="false">
<npc id="26520" x="112930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="113930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="114930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115730" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="115930" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="116130" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="116330" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
<npc id="26520" x="116530" y="-114805" z="-11200" heading="0" /> <!-- Huge Icicle -->
</group>
</spawnlist>
</instance>

View File

@@ -7,7 +7,7 @@
<ingredient id="37714" count="1" /> <!-- Talisman - Lilith -->
<ingredient id="37715" count="1" /> <!-- Talisman - Anakim -->
<ingredient id="37716" count="1" /> <!-- Seven Signs' Energy -->
<ingredient id="57" count="5600000" /> <!-- Seven Signs' Energy -->
<ingredient id="57" count="22400000" /> <!-- Adena -->
<production id="37717" count="1" /> <!-- Talisman - Seven Signs -->
</item>
</list>

View File

@@ -13,6 +13,10 @@
<npc>31308</npc> <!-- Achim -->
<npc>31953</npc> <!-- Rankar -->
</npcs>
<item>
<ingredient count="5" id="60319" /> <!-- Forgotten Lord's Crystal of Dyes -->
<production count="1" id="60321" /> <!-- Forgotten Lord's Dye Lv.1 (CON +1) -->
</item>
<item>
<ingredient count="10" id="81134" /> <!-- Crystal Of Dye -->
<production count="1" id="81055" /> <!-- Legendary Dye Lv.1 (P. Atk) -->

View File

@@ -17,81 +17,81 @@
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="17825" count="1" chance="0" /> <!-- STR Dye -->
<production id="17625" count="1" chance="35" /> <!-- Giant STR Dye Lv.1 -->
<production id="17631" count="1" chance="20" /> <!-- Ancient STR Dye Lv.1 -->
<production id="17637" count="1" chance="20" /> <!-- Legendary STR Dye Lv.1 -->
<production id="17643" count="1" chance="5" /> <!-- Giant STR Dye Lv.2 -->
<production id="17649" count="1" chance="5" /> <!-- Ancient STR Dye Lv.2 -->
<production id="17655" count="1" chance="3" /> <!-- Legendary STR Dye Lv.2 -->
<production id="17661" count="1" chance="2" /> <!-- Giant STR Dye Lv.3 -->
<production id="17667" count="1" chance="2" /> <!-- Ancient STR Dye Lv.3 -->
<production id="17673" count="1" chance="2" /> <!-- Legendary STR Dye Lv.3 -->
<production id="17697" count="1" chance="2" /> <!-- Giant STR Dye Lv.5 -->
<production id="17703" count="1" chance="2" /> <!-- Ancient STR Dye Lv.5 -->
<production id="17709" count="1" chance="2" /> <!-- Legendary STR Dye Lv.5 -->
<production id="17631" count="1" chance="25" /> <!-- Ancient STR Dye Lv.1 -->
<production id="17637" count="1" chance="15" /> <!-- Legendary STR Dye Lv.1 -->
<production id="17643" count="1" chance="9" /> <!-- Giant STR Dye Lv.2 -->
<production id="17649" count="1" chance="7" /> <!-- Ancient STR Dye Lv.2 -->
<production id="17655" count="1" chance="4" /> <!-- Legendary STR Dye Lv.2 -->
<production id="17661" count="1" chance="3" /> <!-- Giant STR Dye Lv.3 -->
<production id="17667" count="1" chance="1.5" /> <!-- Ancient STR Dye Lv.3 -->
<production id="17673" count="1" chance="0.3" /> <!-- Legendary STR Dye Lv.3 -->
<production id="17697" count="1" chance="0.1" /> <!-- Giant STR Dye Lv.5 -->
<production id="17703" count="1" chance="0.07" /> <!-- Ancient STR Dye Lv.5 -->
<production id="17709" count="1" chance="0.03" /> <!-- Legendary STR Dye Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="17826" count="1" chance="0" /> <!-- DEX Dye -->
<production id="17626" count="1" chance="35" /> <!-- Giant DEX Dye Lv.1 -->
<production id="17632" count="1" chance="20" /> <!-- Ancient DEX Dye Lv.1 -->
<production id="17638" count="1" chance="20" /> <!-- Legendary DEX Dye Lv.1 -->
<production id="17644" count="1" chance="5" /> <!-- Giant DEX Dye Lv.2 -->
<production id="17650" count="1" chance="5" /> <!-- Ancient DEX Dye Lv.2 -->
<production id="17656" count="1" chance="3" /> <!-- Legendary DEX Dye Lv.2 -->
<production id="17662" count="1" chance="2" /> <!-- Giant DEX Dye Lv.3 -->
<production id="17668" count="1" chance="2" /> <!-- Ancient DEX Dye Lv.3 -->
<production id="17674" count="1" chance="2" /> <!-- Legendary DEX Dye Lv.3 -->
<production id="17698" count="1" chance="2" /> <!-- Giant DEX Dye Lv.5 -->
<production id="17704" count="1" chance="2" /> <!-- Ancient DEX Dye Lv.5 -->
<production id="17710" count="1" chance="2" /> <!-- Legendary DEX Dye Lv.5 -->
<production id="17632" count="1" chance="25" /> <!-- Ancient DEX Dye Lv.1 -->
<production id="17638" count="1" chance="15" /> <!-- Legendary DEX Dye Lv.1 -->
<production id="17644" count="1" chance="9" /> <!-- Giant DEX Dye Lv.2 -->
<production id="17650" count="1" chance="7" /> <!-- Ancient DEX Dye Lv.2 -->
<production id="17656" count="1" chance="4" /> <!-- Legendary DEX Dye Lv.2 -->
<production id="17662" count="1" chance="3" /> <!-- Giant DEX Dye Lv.3 -->
<production id="17668" count="1" chance="1.5" /> <!-- Ancient DEX Dye Lv.3 -->
<production id="17674" count="1" chance="0.3" /> <!-- Legendary DEX Dye Lv.3 -->
<production id="17698" count="1" chance="0.1" /> <!-- Giant DEX Dye Lv.5 -->
<production id="17704" count="1" chance="0.07" /> <!-- Ancient DEX Dye Lv.5 -->
<production id="17710" count="1" chance="0.03" /> <!-- Legendary DEX Dye Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="17827" count="1" chance="0" /> <!-- CON Dye -->
<production id="17627" count="1" chance="35" /> <!-- Giant CON Dye Lv.1 -->
<production id="17633" count="1" chance="20" /> <!-- Ancient CON Dye Lv.1 -->
<production id="17639" count="1" chance="20" /> <!-- Legendary CON Dye Lv.1 -->
<production id="17645" count="1" chance="5" /> <!-- Giant CON Dye Lv.2 -->
<production id="17651" count="1" chance="5" /> <!-- Ancient CON Dye Lv.2 -->
<production id="17657" count="1" chance="3" /> <!-- Legendary CON Dye Lv.2 -->
<production id="17663" count="1" chance="2" /> <!-- Giant CON Dye Lv.3 -->
<production id="17669" count="1" chance="2" /> <!-- Ancient CON Dye Lv.3 -->
<production id="17675" count="1" chance="2" /> <!-- Legendary CON Dye Lv.3 -->
<production id="17699" count="1" chance="2" /> <!-- Giant CON Dye Lv.5 -->
<production id="17705" count="1" chance="2" /> <!-- Ancient CON Dye Lv.5 -->
<production id="17711" count="1" chance="2" /> <!-- Legendary CON Dye Lv.5 -->
<production id="17633" count="1" chance="25" /> <!-- Ancient CON Dye Lv.1 -->
<production id="17639" count="1" chance="15" /> <!-- Legendary CON Dye Lv.1 -->
<production id="17645" count="1" chance="9" /> <!-- Giant CON Dye Lv.2 -->
<production id="17651" count="1" chance="7" /> <!-- Ancient CON Dye Lv.2 -->
<production id="17657" count="1" chance="4" /> <!-- Legendary CON Dye Lv.2 -->
<production id="17663" count="1" chance="3" /> <!-- Giant CON Dye Lv.3 -->
<production id="17669" count="1" chance="1.5" /> <!-- Ancient CON Dye Lv.3 -->
<production id="17675" count="1" chance="0.3" /> <!-- Legendary CON Dye Lv.3 -->
<production id="17699" count="1" chance="0.1" /> <!-- Giant CON Dye Lv.5 -->
<production id="17705" count="1" chance="0.07" /> <!-- Ancient CON Dye Lv.5 -->
<production id="17711" count="1" chance="0.03" /> <!-- Legendary CON Dye Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="17828" count="1" chance="0" /> <!-- INT Dye -->
<production id="17628" count="1" chance="35" /> <!-- Giant INT Dye Lv.1 -->
<production id="17634" count="1" chance="20" /> <!-- Ancient INT Dye Lv.1 -->
<production id="17640" count="1" chance="20" /> <!-- Legendary INT Dye Lv.1 -->
<production id="17646" count="1" chance="5" /> <!-- Giant INT Dye Lv.2 -->
<production id="17652" count="1" chance="5" /> <!-- Ancient INT Dye Lv.2 -->
<production id="17658" count="1" chance="3" /> <!-- Legendary INT Dye Lv.2 -->
<production id="17664" count="1" chance="2" /> <!-- Giant INT Dye Lv.3 -->
<production id="17670" count="1" chance="2" /> <!-- Ancient INT Dye Lv.3 -->
<production id="17676" count="1" chance="2" /> <!-- Legendary INT Dye Lv.3 -->
<production id="17700" count="1" chance="2" /> <!-- Giant INT Dye Lv.5 -->
<production id="17706" count="1" chance="2" /> <!-- Ancient INT Dye Lv.5 -->
<production id="17712" count="1" chance="2" /> <!-- Legendary INT Dye Lv.5 -->
<production id="17634" count="1" chance="25" /> <!-- Ancient INT Dye Lv.1 -->
<production id="17640" count="1" chance="15" /> <!-- Legendary INT Dye Lv.1 -->
<production id="17646" count="1" chance="9" /> <!-- Giant INT Dye Lv.2 -->
<production id="17652" count="1" chance="7" /> <!-- Ancient INT Dye Lv.2 -->
<production id="17658" count="1" chance="4" /> <!-- Legendary INT Dye Lv.2 -->
<production id="17664" count="1" chance="3" /> <!-- Giant INT Dye Lv.3 -->
<production id="17670" count="1" chance="1.5" /> <!-- Ancient INT Dye Lv.3 -->
<production id="17676" count="1" chance="0.3" /> <!-- Legendary INT Dye Lv.3 -->
<production id="17700" count="1" chance="0.1" /> <!-- Giant INT Dye Lv.5 -->
<production id="17706" count="1" chance="0.07" /> <!-- Ancient INT Dye Lv.5 -->
<production id="17712" count="1" chance="0.03" /> <!-- Legendary INT Dye Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="17829" count="1" chance="0" /> <!-- WIT Dye -->
<production id="17629" count="1" chance="35" /> <!-- Giant WIT Dye Lv.1 -->
<production id="17635" count="1" chance="20" /> <!-- Ancient WIT Dye Lv.1 -->
<production id="17641" count="1" chance="20" /> <!-- Legendary WIT Dye Lv.1 -->
<production id="17647" count="1" chance="5" /> <!-- Giant WIT Dye Lv.2 -->
<production id="17653" count="1" chance="5" /> <!-- Ancient WIT Dye Lv.2 -->
<production id="17659" count="1" chance="3" /> <!-- Legendary WIT Dye Lv.2 -->
<production id="17665" count="1" chance="2" /> <!-- Giant WIT Dye Lv.3 -->
<production id="17671" count="1" chance="2" /> <!-- Ancient WIT Dye Lv.3 -->
<production id="17677" count="1" chance="2" /> <!-- Legendary WIT Dye Lv.3 -->
<production id="17701" count="1" chance="2" /> <!-- Giant WIT Dye Lv.5 -->
<production id="17707" count="1" chance="2" /> <!-- Ancient WIT Dye Lv.5 -->
<production id="17713" count="1" chance="2" /> <!-- Legendary WIT Dye Lv.5 -->
<production id="17635" count="1" chance="25" /> <!-- Ancient WIT Dye Lv.1 -->
<production id="17641" count="1" chance="15" /> <!-- Legendary WIT Dye Lv.1 -->
<production id="17647" count="1" chance="9" /> <!-- Giant WIT Dye Lv.2 -->
<production id="17653" count="1" chance="7" /> <!-- Ancient WIT Dye Lv.2 -->
<production id="17659" count="1" chance="4" /> <!-- Legendary WIT Dye Lv.2 -->
<production id="17665" count="1" chance="3" /> <!-- Giant WIT Dye Lv.3 -->
<production id="17671" count="1" chance="1.5" /> <!-- Ancient WIT Dye Lv.3 -->
<production id="17677" count="1" chance="0.3" /> <!-- Legendary WIT Dye Lv.3 -->
<production id="17701" count="1" chance="0.1" /> <!-- Giant WIT Dye Lv.5 -->
<production id="17707" count="1" chance="0.07" /> <!-- Ancient WIT Dye Lv.5 -->
<production id="17713" count="1" chance="0.03" /> <!-- Legendary WIT Dye Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
@@ -103,38 +103,38 @@
<production id="17654" count="1" chance="5" /> <!-- Ancient MEN Dye Lv.2 -->
<production id="17660" count="1" chance="3" /> <!-- Legendary MEN Dye Lv.2 -->
<production id="17666" count="1" chance="2" /> <!-- Giant MEN Dye Lv.3 -->
<production id="17672" count="1" chance="2" /> <!-- Ancient MEN Dye Lv.3 -->
<production id="17678" count="1" chance="2" /> <!-- Legendary MEN Dye Lv.3 -->
<production id="17702" count="1" chance="2" /> <!-- Giant MEN Dye Lv.5 -->
<production id="17708" count="1" chance="2" /> <!-- Ancient MEN Dye Lv.5 -->
<production id="17714" count="1" chance="2" /> <!-- Legendary MEN Dye Lv.5 -->
<production id="17672" count="1" chance="1.5" /> <!-- Ancient MEN Dye Lv.3 -->
<production id="17678" count="1" chance="0.3" /> <!-- Legendary MEN Dye Lv.3 -->
<production id="17702" count="1" chance="0.1" /> <!-- Giant MEN Dye Lv.5 -->
<production id="17708" count="1" chance="0.07" /> <!-- Ancient MEN Dye Lv.5 -->
<production id="17714" count="1" chance="0.03" /> <!-- Legendary MEN Dye Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="39381" count="1" chance="0" /> <!-- Windy CHA Dye -->
<production id="39381" count="1" chance="35" /> <!-- Windy CHA Dye Lv.1 -->
<production id="39382" count="1" chance="20" /> <!-- Windy CHA Dye Lv.2 -->
<production id="39383" count="1" chance="20" /> <!-- Windy CHA Dye Lv.3 -->
<production id="39384" count="1" chance="5" /> <!-- Windy CHA Dye Lv.4 -->
<production id="39385" count="1" chance="5" /> <!-- Windy CHA Dye Lv.5 -->
<production id="39451" count="1" chance="3" /> <!-- Windy CHA Dye (Luck) Lv.1 -->
<production id="39382" count="1" chance="25" /> <!-- Windy CHA Dye Lv.2 -->
<production id="39383" count="1" chance="15" /> <!-- Windy CHA Dye Lv.3 -->
<production id="39384" count="1" chance="9" /> <!-- Windy CHA Dye Lv.4 -->
<production id="39385" count="1" chance="7" /> <!-- Windy CHA Dye Lv.5 -->
<production id="39451" count="1" chance="4" /> <!-- Windy CHA Dye (Luck) Lv.1 -->
<production id="39452" count="1" chance="3" /> <!-- Windy CHA Dye (Luck) Lv.2 -->
<production id="39453" count="1" chance="3" /> <!-- Windy CHA Dye (Luck) Lv.3 -->
<production id="39454" count="1" chance="3" /> <!-- Windy CHA Dye (Luck) Lv.4 -->
<production id="39455" count="1" chance="3" /> <!-- Windy CHA Dye (Luck) Lv.5 -->
<production id="39453" count="1" chance="1.9" /> <!-- Windy CHA Dye (Luck) Lv.3 -->
<production id="39454" count="1" chance="0.07" /> <!-- Windy CHA Dye (Luck) Lv.4 -->
<production id="39455" count="1" chance="0.03" /> <!-- Windy CHA Dye (Luck) Lv.5 -->
</item>
<item>
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="39386" count="1" chance="0" /> <!-- Windy LUC Dye -->
<production id="39386" count="1" chance="35" /> <!-- Windy LUC Dye Lv.1 -->
<production id="39387" count="1" chance="20" /> <!-- Windy LUC Dye Lv.2 -->
<production id="39388" count="1" chance="20" /> <!-- Windy LUC Dye Lv.3 -->
<production id="39389" count="1" chance="5" /> <!-- Windy LUC Dye Lv.4 -->
<production id="39390" count="1" chance="5" /> <!-- Windy LUC Dye Lv.5 -->
<production id="39456" count="1" chance="3" /> <!-- Windy LUC Dye (Charisma) Lv.1 -->
<production id="39387" count="1" chance="25" /> <!-- Windy LUC Dye Lv.2 -->
<production id="39388" count="1" chance="15" /> <!-- Windy LUC Dye Lv.3 -->
<production id="39389" count="1" chance="9" /> <!-- Windy LUC Dye Lv.4 -->
<production id="39390" count="1" chance="7" /> <!-- Windy LUC Dye Lv.5 -->
<production id="39456" count="1" chance="4" /> <!-- Windy LUC Dye (Charisma) Lv.1 -->
<production id="39457" count="1" chance="3" /> <!-- Windy LUC Dye (Charisma) Lv.2 -->
<production id="39458" count="1" chance="3" /> <!-- Windy LUC Dye (Charisma) Lv.3 -->
<production id="39459" count="1" chance="3" /> <!-- Windy LUC Dye (Charisma) Lv.4 -->
<production id="39460" count="1" chance="3" /> <!-- Windy LUC Dye (Charisma) Lv.5 -->
<production id="39458" count="1" chance="1.9" /> <!-- Windy LUC Dye (Charisma) Lv.3 -->
<production id="39459" count="1" chance="0.07" /> <!-- Windy LUC Dye (Charisma) Lv.4 -->
<production id="39460" count="1" chance="0.03" /> <!-- Windy LUC Dye (Charisma) Lv.5 -->
</item>
</list>

View File

@@ -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" />

View File

@@ -13,15 +13,15 @@
<production id="29759" count="1" /> <!-- Heir's Radiance Shard -->
</item>
<item>
<ingredient id="26455" count="1" /> <!-- High-grade Talisman of Abundance Lv. 1 -->
<ingredient id="26338" count="1" /> <!-- High-grade Talisman of Abundance Lv. 1 -->
<production id="29759" count="15" /> <!-- Heir's Radiance Shard -->
</item>
<item>
<ingredient id="26456" count="1" /> <!-- High-grade Talisman of Abundance Lv. 2 -->
<ingredient id="26339" count="1" /> <!-- High-grade Talisman of Abundance Lv. 2 -->
<production id="29759" count="60" /> <!-- Heir's Radiance Shard -->
</item>
<item>
<ingredient id="26457" count="1" /> <!-- High-grade Talisman of Abundance Lv. 3 -->
<ingredient id="26340" count="1" /> <!-- High-grade Talisman of Abundance Lv. 3 -->
<production id="29759" count="200" /> <!-- Heir's Radiance Shard -->
</item>
<item>

View File

@@ -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" />

View File

@@ -4,7 +4,7 @@
<npc>33715</npc> <!-- Seed Talisman Manager -->
</npcs>
<item>
<ingredient id="57" count="76000000" /> <!-- Adena -->
<ingredient id="57" count="88000000" /> <!-- Adena -->
<production id="34985" count="1" /> <!-- Talisman - Destruction -->
</item>
<item>
@@ -14,13 +14,13 @@
<item>
<ingredient id="35567" count="1" /> <!-- Dark Armor Enhancement Stone -->
<ingredient id="47952" count="10" /> <!-- Crystal of Protection -->
<ingredient id="57" count="980000" /> <!-- Adena -->
<ingredient id="57" count="3920000" /> <!-- Adena -->
<production id="80963" count="1" /> <!-- Blood-Stained Talisman of Protection 8 Hours -->
</item>
<item>
<ingredient id="35569" count="1" /> <!-- Bloody Armor Enhancement Stone -->
<ingredient id="47952" count="10" /> <!-- Crystal of Protection -->
<ingredient id="57" count="980000" /> <!-- Adena -->
<ingredient id="57" count="3920000" /> <!-- Adena -->
<production id="80963" count="1" /> <!-- Blood-Stained Talisman of Protection 8 Hours -->
</item>
<item>

View File

@@ -7,21 +7,14 @@
<ingredient id="34989" count="1" /> <!-- Talisman - Longing -->
<ingredient id="35562" count="72" /> <!-- Energy of Destruction -->
<ingredient id="35563" count="200" /> <!-- Giant's Energy -->
<ingredient id="57" count="4900000" /> <!-- Adena -->
<ingredient id="57" count="19600000" /> <!-- Adena -->
<production id="35649" count="1" /> <!-- Sealed Talisman - Longing -->
</item>
<item>
<ingredient id="39572" count="1" /> <!-- Talisman - Insanity -->
<ingredient id="35562" count="100" /> <!-- Energy of Destruction -->
<ingredient id="35563" count="900" /> <!-- Giant's Energy -->
<ingredient id="57" count="22050000" /> <!-- Adena -->
<ingredient id="57" count="88200000" /> <!-- Adena -->
<production id="39573" count="1" /> <!-- Sealed Talisman - Insanity -->
</item>
<item>
<ingredient id="80957" count="1" /> <!-- Talisman - Heavenly -->
<ingredient id="35562" count="130" /> <!-- Energy of Destruction -->
<ingredient id="35563" count="900" /> <!-- Giant's Energy -->
<ingredient id="57" count="99225000" /> <!-- Adena -->
<production id="80958" count="1" /> <!-- Sealed Talisman - Heavenly -->
</item>
</list>

View File

@@ -6,6 +6,7 @@
<item>
<ingredient id="34984" count="1" /> <!-- Talisman - Infinity -->
<ingredient id="57" count="44000000" /> <!-- Adena -->
<production id="34985" count="1" /> <!-- Talisman - Destruction -->
<production id="34985" count="1" chance="100" /> <!-- Talisman - Destruction -->
</item>
<item>
@@ -15,7 +16,7 @@
<ingredient id="57" count="5500000" /> <!-- Adena -->
<production id="34986" count="1" /> <!-- Talisman - Annihilation -->
<production id="34986" count="1" chance="50" /> <!-- Talisman - Annihilation -->
<production id="34986" count="1" chance="50" /> <!-- Talisman - Annihilation -->
<production id="34985" count="1" chance="50" /> <!-- Talisman - Destruction -->
</item>
<item>
<ingredient id="34986" count="1" /> <!-- Talisman - Annihilation -->
@@ -23,8 +24,8 @@
<ingredient id="35563" count="30" /> <!-- Giant's Energy -->
<ingredient id="57" count="11000000" /> <!-- Adena -->
<production id="34987" count="1" /> <!-- Talisman - Hellfire -->
<production id="34987" count="1" chance="45" /> <!-- Talisman - Hellfire -->
<production id="34986" count="1" chance="55" /> <!-- Talisman - Annihilation -->
<production id="34987" count="1" chance="40" /> <!-- Talisman - Hellfire -->
<production id="34986" count="1" chance="60" /> <!-- Talisman - Annihilation -->
</item>
<item>
<ingredient id="34987" count="1" /> <!-- Talisman - Hellfire -->
@@ -32,8 +33,8 @@
<ingredient id="35563" count="45" /> <!-- Giant's Energy -->
<ingredient id="57" count="22000000" /> <!-- Adena -->
<production id="34988" count="1" /> <!-- Talisman - Desire -->
<production id="34988" count="1" chance="35" /> <!-- Talisman - Desire -->
<production id="34987" count="1" chance="65" /> <!-- Talisman - Hellfire -->
<production id="34988" count="1" chance="30" /> <!-- Talisman - Desire -->
<production id="34987" count="1" chance="70" /> <!-- Talisman - Hellfire -->
</item>
<item>
<ingredient id="34988" count="1" /> <!-- Talisman - Desire -->
@@ -41,8 +42,8 @@
<ingredient id="35563" count="60" /> <!-- Giant's Energy -->
<ingredient id="57" count="44000000" /> <!-- Adena -->
<production id="34989" count="1" /> <!-- Talisman - Longing -->
<production id="34989" count="1" chance="15" /> <!-- Talisman - Longing -->
<production id="34988" count="1" chance="85" /> <!-- Talisman - Desire -->
<production id="34989" count="1" chance="20" /> <!-- Talisman - Longing -->
<production id="34988" count="1" chance="80" /> <!-- Talisman - Desire -->
</item>
<item>
<ingredient id="34989" count="1" /> <!-- Talisman - Longing -->

View File

@@ -8,19 +8,19 @@
<production id="81150" count="1" /> <!-- Energy of Destruction -->
</item>
<item>
<ingredient id="57" count="3800000" /> <!-- Adena -->
<ingredient id="57" count="4400000" /> <!-- Adena -->
<production id="36184" count="1" /> <!-- Annihilation Energy -->
</item>
<item>
<ingredient id="57" count="14250000" /> <!-- Adena -->
<ingredient id="57" count="16500000" /> <!-- Adena -->
<production id="36185" count="1" /> <!-- Hellfire Energy -->
</item>
<item>
<ingredient id="57" count="142500000" /> <!-- Adena -->
<ingredient id="57" count="165000000" /> <!-- Adena -->
<production id="36186" count="1" /> <!-- Energy of Desire -->
</item>
<item>
<ingredient id="57" count="485300000" /> <!-- Adena -->
<ingredient id="57" count="561200000" /> <!-- Adena -->
<production id="26291" count="1" /> <!-- Kaliel's Energy Longing -->
</item>
</list>

View File

@@ -9,7 +9,7 @@ the area controlled by Devil Varos,<br>
the area controlled by Demonic Weiss.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery entrance">Teleport to the Atelia Refinery</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery outlet">Teleport to the Atelia Outlet</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Demonic Pontus</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
</body></html>

View File

@@ -0,0 +1,13 @@
<html><body>Atelia Refinery Teleport Device:<br>
A device for teleporting to Atelia Refinery settled by the Blackbird Clan.<br>
Choose your destination.<br><br>
<center>Places:<br>
Outside of Atelia Refinery,<br>
the area controlled by Death Pondus,<br>
the area controlled by Devil Varos,<br>
the area controlled by Demonic Weiss.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery exit">Teleport from Atelia Refinery</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
</body></html>

View File

@@ -0,0 +1,15 @@
<html><body>Atelia Refinery Teleport Device:<br>
A device for teleporting to Atelia Refinery settled by the Blackbird Clan.<br>
Choose your destination.<br><br>
<center>Places:<br>
Outside of Atelia Refinery,<br>
Atelia Outlet,<br>
the area controlled by Death Pondus,<br>
the area controlled by Devil Varos,<br>
the area controlled by Demonic Weiss.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery exit">Teleport from Atelia Refinery</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery outlet">Teleport to the Atelia Outlet</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
</body></html>

View File

@@ -7,7 +7,7 @@ the area controlled by Death Pondus,<br>
the area controlled by Devil Varos,<br>
the area controlled by Demonic Weiss.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery entrance">Teleport to the Atelia Refinery</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Demonic Pontus</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
</body></html>

View File

@@ -39,6 +39,7 @@ public class AteliaRefinery extends AbstractNpcAI
new Location(-56096, 49688, -8729), // First Area
new Location(-56160, 45406, -8847), // Second Area
new Location(-56140, 41067, -8965), // Third Area
new Location(-51716, 60243, -3344), // Exit
};
// Special Mobs
private static final int HARKE = 24161;
@@ -109,6 +110,12 @@ public class AteliaRefinery extends AbstractNpcAI
htmltext = "34441-01.html";
break;
}
case "exit":
{
player.teleToLocation(TELE_LOCATIONS[5]);
htmltext = "34441-01.html";
break;
}
}
return htmltext;
}
@@ -136,11 +143,20 @@ public class AteliaRefinery extends AbstractNpcAI
public String onFirstTalk(Npc npc, Player player)
{
String htmltext = null;
Location npcLoc = npc.getLocation();
final QuestState qs = player.getQuestState(Q10890_SaviorsPathHallOfEtina.class.getSimpleName());
if (((qs != null) && qs.isCompleted()))
if (((qs != null) && qs.isCompleted()) && ((npcLoc.getX() == -59891) && (npcLoc.getY() == 52625)))
{
htmltext = "34441-03.html";
}
else if (((qs != null) && qs.isCompleted()))
{
htmltext = "34441-00.html";
}
else if ((npcLoc.getX() == -59891) && (npcLoc.getY() == 52625))
{
htmltext = "34441-02.html";
}
else
{
htmltext = "34441.html";

View File

@@ -70,17 +70,27 @@ public class ConquestEngine extends AbstractNpcAI
// Queries
private static final String LOAD_CONQUEST_DATA = "SELECT current_cycle, conquest_season_end FROM conquest_data WHERE id = 0";
private static final String SAVE_CONQUEST_DATA = "INSERT INTO conquest_data (id, current_cycle, conquest_season_end) VALUES (0,?,?) ON DUPLICATE KEY UPDATE current_cycle=?, conquest_season_end=?";
private static final String CLEAR_CONQUEST_PREVIOUS_RANKLIST = "DELETE FROM conquest_prev_season_ranklist;";
private static final String SAVE_CONQUEST_PREVIOUS_RANKLIST = "INSERT INTO conquest_prev_season_ranklist (charId, char_name, personal_points) SELECT a.charId, a.val, b.val FROM character_variables a, character_variables b WHERE a.var=\"CONQUEST_NAME\" AND b.var=\"CONQUEST_PERSONAL_POINTS\" AND a.charId=b.charId;";
private static final String CLEAR_CONQUEST_PREVIOUS_RANKLIST = "DELETE FROM conquest_prev_season_ranklist";
private static final String SAVE_CONQUEST_PREVIOUS_RANKLIST = "INSERT INTO conquest_prev_season_ranklist (charId, char_name, personal_points) SELECT a.charId, a.val, b.val FROM character_variables a, character_variables b WHERE a.var=\"CONQUEST_NAME\" AND b.var=\"CONQUEST_PERSONAL_POINTS\" AND a.charId=b.charId";
private static final String CLEAR_CONQUEST_PREVIOUS_PLAYER_DATA = "DELETE FROM character_variables WHERE var=?";
// Variables
private static final String CONQUEST_AVAILABLE_VAR = "CONQUEST_AVAILABLE";
private static final String CONQUEST_CONNECTED_VAR = "CONQUEST_CONNECTED";
private static final String CONQUEST_SERVER_POINTS_VAR = "CONQUEST_SERVER_POINTS";
private static final String CONQUEST_PREV_SEASON_SERVER_POINTS_VAR = "CONQUEST_PREV_SEASON_SERVER_POINTS";
private static final String CONQUEST_SERVER_SOUL_ORBS_VAR = "CONQUEST_SOUL_ORBS";
private static final String CONQUEST_PREV_SEASON_SERVER_SOUL_ORBS_VAR = "CONQUEST_PREV_SEASON_SERVER_SOUL_ORBS";
// Zone Name Vars used only for reset points
private static final String CONQUEST_ZONE_ASA_VAR = "CONQUEST_ZONE_ASA_POINTS";
private static final String CONQUEST_ZONE_ANIMA_VAR = "CONQUEST_ZONE_ANIMA_POINTS";
private static final String CONQUEST_ZONE_NOX_VAR = "CONQUEST_ZONE_NOX_POINTS";
private static final String CONQUEST_ZONE_VITA_VAR = "CONQUEST_ZONE_VITA_POINTS";
private static final String CONQUEST_ZONE_IGNIS_VAR = "CONQUEST_ZONE_IGNIS_POINTS";
// Skills
private static final int FIRE_SOURCE_CENTER = 34490;
private static final int FIRE_SOURCE_CENTER_SKILL_ID = 34490;
protected static boolean _isConquestAvailable = GlobalVariablesManager.getInstance().getBoolean(CONQUEST_AVAILABLE_VAR, false);
protected int _currentCycle;
@@ -408,6 +418,7 @@ public class ConquestEngine extends AbstractNpcAI
saveConquestData();
saveConquestPrevSeasonRanklistData();
saveConquestPrevSeasonServerPoints();
clearConquestPrevSeasonPlayerData();
_currentCycle++;
setNewConquestSeasonEnd();
init();
@@ -442,7 +453,7 @@ public class ConquestEngine extends AbstractNpcAI
{
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps1 = con.prepareStatement(CLEAR_CONQUEST_PREVIOUS_RANKLIST);
PreparedStatement ps2 = con.prepareStatement(SAVE_CONQUEST_PREVIOUS_RANKLIST))
PreparedStatement ps2 = con.prepareStatement(SAVE_CONQUEST_PREVIOUS_RANKLIST);)
{
ps1.execute();
ps2.execute();
@@ -458,9 +469,44 @@ public class ConquestEngine extends AbstractNpcAI
*/
public void saveConquestPrevSeasonServerPoints()
{
// Save previous season Server Points and Soul Orbs
GlobalVariablesManager.getInstance().set(CONQUEST_PREV_SEASON_SERVER_POINTS_VAR, GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_POINTS_VAR));
GlobalVariablesManager.getInstance().set(CONQUEST_PREV_SEASON_SERVER_SOUL_ORBS_VAR, GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_SOUL_ORBS_VAR));
// Reset Server Points and Soul Orbs for next season
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_POINTS_VAR, 0);
// Maybe add here soul orbs as well.
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_SOUL_ORBS_VAR, 0);
// Reset Zone Points for next season
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_ASA_VAR, 0);
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_ANIMA_VAR, 0);
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_NOX_VAR, 0);
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_VITA_VAR, 0);
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_IGNIS_VAR, 0);
GlobalVariablesManager.getInstance().storeMe();
}
public void clearConquestPrevSeasonPlayerData()
{
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement(CLEAR_CONQUEST_PREVIOUS_PLAYER_DATA);)
{
ps.setString(1, PlayerVariables.CONQUEST_PERSONAL_POINTS);
ps.execute();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset Conquest Previous Season player data: " + e);
}
// Update data for online players.
for (Player player : World.getInstance().getPlayers())
{
player.getVariables().remove(PlayerVariables.CONQUEST_PERSONAL_POINTS);
player.getVariables().storeMe();
}
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Conquest Previous Season player data has been reset.");
}
/**
@@ -474,7 +520,7 @@ public class ConquestEngine extends AbstractNpcAI
{
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Attack Points updated for player: " + player.getName() + " from " + getAttackPoints(player) + " to " + (getAttackPoints(player) + attackPoints) + ".");
}
player.getVariables().set("CONQUEST_ATTACK_POINTS", getAttackPoints(player) + attackPoints);
player.getVariables().set(PlayerVariables.CONQUEST_ATTACK_POINTS, getAttackPoints(player) + attackPoints);
}
/**
@@ -488,7 +534,7 @@ public class ConquestEngine extends AbstractNpcAI
{
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Life Points updated for player: " + player.getName() + " from " + getLifePoints(player) + " to " + (getLifePoints(player) + lifePoints) + ".");
}
player.getVariables().set("CONQUEST_LIFE_POINTS", getLifePoints(player) + lifePoints);
player.getVariables().set(PlayerVariables.CONQUEST_LIFE_POINTS, getLifePoints(player) + lifePoints);
}
/**
@@ -519,6 +565,20 @@ public class ConquestEngine extends AbstractNpcAI
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_POINTS_VAR, getServerPoints() + serverPoints);
}
/**
* Sets the Conquest Soul Orbs.
* @param player the activeChar
* @param serverSoulOrbs the server soul orbs amount to set
*/
public void setServerSoulOrbs(Player player, long serverSoulOrbs)
{
if (DEBUG)
{
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Soul Orbs updated from " + getServerSoulOrbs() + " to " + (getServerSoulOrbs() + serverSoulOrbs) + ".");
}
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_SOUL_ORBS_VAR, getServerSoulOrbs() + serverSoulOrbs);
}
/**
* Gets the Conquest Zone name by id.
* @param zoneId the zone id
@@ -575,11 +635,12 @@ public class ConquestEngine extends AbstractNpcAI
* @param player the activeChar
* @param personalPoints the personal points
* @param serverPoints the server points
* @param serverSoulOrbs the server soul orbs
* @param zonePoints the zone points
* @param zoneId the zone id
* @param useRates if {@code true} it will use Conquest rates multipliers
*/
public synchronized void updatePoints(Player player, int personalPoints, int serverPoints, int zonePoints, int zoneId, boolean useRates)
public synchronized void updatePoints(Player player, int personalPoints, int serverPoints, int serverSoulOrbs, int zonePoints, int zoneId, boolean useRates)
{
if (!_isConquestAvailable)
{
@@ -588,15 +649,18 @@ public class ConquestEngine extends AbstractNpcAI
long finalPersonalPoints = personalPoints;
long finalServerPoints = serverPoints;
long finalServerSoulOrbs = serverSoulOrbs;
int finalZonePoints = zonePoints;
if (useRates)
{
finalPersonalPoints = personalPoints * Config.CONQUEST_RATE_PERSONAL_POINTS;
finalServerPoints = serverPoints * Config.CONQUEST_RATE_SERVER_POINTS;
finalServerSoulOrbs = serverSoulOrbs * Config.CONQUEST_RATE_SERVER_SOUL_ORBS;
finalZonePoints = zonePoints * Config.CONQUEST_RATE_ZONE_POINTS;
}
setPersonalPoints(player, finalPersonalPoints);
setServerPoints(player, finalServerPoints);
setServerSoulOrbs(player, finalServerSoulOrbs);
setZonePoints(zoneId, finalZonePoints);
}
@@ -607,7 +671,7 @@ public class ConquestEngine extends AbstractNpcAI
*/
public int getAttackPoints(Player player)
{
return player.getVariables().getInt("CONQUEST_ATTACK_POINTS", Config.CONQUEST_ATTACK_POINTS);
return player.getVariables().getInt(PlayerVariables.CONQUEST_ATTACK_POINTS, Config.CONQUEST_ATTACK_POINTS);
}
/**
@@ -617,7 +681,7 @@ public class ConquestEngine extends AbstractNpcAI
*/
public int getLifePoints(Player player)
{
return player.getVariables().getInt("CONQUEST_LIFE_POINTS", Config.CONQUEST_LIFE_POINTS);
return player.getVariables().getInt(PlayerVariables.CONQUEST_LIFE_POINTS, Config.CONQUEST_LIFE_POINTS);
}
/**
@@ -639,6 +703,15 @@ public class ConquestEngine extends AbstractNpcAI
return GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_POINTS_VAR, 0);
}
/**
* Gets the Conquest soul orbs.
* @return the soul orbs amount
*/
public long getServerSoulOrbs()
{
return GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_SOUL_ORBS_VAR, 0);
}
/**
* Gets the Conquest zone points.
* @param zoneId the zone id to get point for
@@ -655,7 +728,7 @@ public class ConquestEngine extends AbstractNpcAI
if (_isConquestAvailable)
{
final int npcId = npc.getId();
updatePoints(killer, CONQUEST_POINT_DATA.getPersonalPointsAmount(npcId), CONQUEST_POINT_DATA.getServerPointsAmount(npcId), CONQUEST_POINT_DATA.getZonePointsAmount(npcId), CONQUEST_POINT_DATA.getZoneId(npcId), true);
updatePoints(killer, CONQUEST_POINT_DATA.getPersonalPointsAmount(npcId), CONQUEST_POINT_DATA.getServerPointsAmount(npcId), 1, CONQUEST_POINT_DATA.getZonePointsAmount(npcId), CONQUEST_POINT_DATA.getZoneId(npcId), true);
}
return super.onKill(npc, killer, isSummon);
}
@@ -664,16 +737,16 @@ public class ConquestEngine extends AbstractNpcAI
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerPvPKill(OnPlayerPvPKill event)
{
if (_isConquestAvailable && event.getPlayer().isInsideZone(ZoneId.CONQUEST) && event.getTarget().isInsideZone(ZoneId.CONQUEST) && !event.getPlayer().getEffectList().isAffectedBySkill(FIRE_SOURCE_CENTER))
if (_isConquestAvailable && event.getPlayer().isInsideZone(ZoneId.CONQUEST) && event.getTarget().isInsideZone(ZoneId.CONQUEST) && !event.getPlayer().getEffectList().isAffectedBySkill(FIRE_SOURCE_CENTER_SKILL_ID))
{
final Player attackerPlayer = event.getPlayer();
final Player targetPlayer = event.getTarget();
if (CONQUEST_POINT_DATA.getPvpPointsInfo().containsKey(targetPlayer.getLevel()))
{
updatePoints(attackerPlayer, CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel()), CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel()), 0, 0, true);
updatePoints(attackerPlayer, CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel()), CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel()), 0, 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);
@@ -685,7 +758,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);

View File

@@ -1,9 +1,9 @@
<html><body>Conquest Teleport Device:<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone0">Fire & Water Border (Fire Side)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone2">Zone 1 - Asa</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone3">Zone 2 - Anima</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone4">Zone 3 - Nox</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone5">Callide's Hall</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone6">Eigis</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone7">Fire & Water Border (Water Side)</Button>
</body></html>

View File

@@ -1,10 +1,10 @@
<html><body>Conquest Teleport Device:<br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone1">Fire & Water Border (Fire Side)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone2">Fire Fortress</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone3">Kellond's Secret Barracks</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone4">Zone 1 - Vita</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone5">Zone 2 - Ignis</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone6">Fire Source (Common Area)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone7">Fire Source (Central Area)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone0">Fire & Water Border (Water Side)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone1">Fire Fortress</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone2">Kellond's Secret Barracks</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone3">Zone 1 - Vita</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone4">Zone 2 - Ignis</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone5">Fire Source (Common Area)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone6">Fire Source (Central Area)</Button>
</body></html>

View File

@@ -2,7 +2,7 @@
Those who have occupied Conquest may use the teleport function to teleport to important places in Conquest area.<br>
<font color="LEVEL">(Only characters from the occupying Clan may use teleport.)</font><br>
Where would you like to go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone7">Teleport on the Water Side</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone0">Teleport on the Fire Side</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone1">Conquest Town</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone2">Zone 1 - Asa</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone3">Zone 2 - Anima</Button>

View File

@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.instancemanager.RankManager;
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.clan.ClanMember;
import ai.AbstractNpcAI;
@@ -35,7 +36,16 @@ public class ConquestTeleportDevice extends AbstractNpcAI
private static final int DEVICE2 = 34597; // Teleport Device 2 ( Water Side Teleporter)
private static final int DEVICE3 = 34661; // Teleport Device 3 ( Fire Side Teleporter)
// Locations
// Enter Locations
private static final Location[] ENTER_LOCS =
{
// Water Area
new Location(-525, -201894, -3016), // Fire & Water Border (Water Side)
// Fire Area
new Location(446, -201800, -3000), // Fire & Water Border (Fire Side)
};
// Hunt Locations
private static final Location[] HUNT_LOCS =
{
// Water Areas
@@ -45,9 +55,7 @@ public class ConquestTeleportDevice extends AbstractNpcAI
new Location(-2570, -213261, -3603), // Zone 3 - Nox
new Location(-11731, -215556, -2800), // Zone 4 - Callide Hall
new Location(-24036, -220963, -3511), // Eigis Seat
new Location(-525, -201894, -3016), // Fire & Water Border (Water Side)
// Fire Areas
new Location(446, -201800, -3000), // Fire & Water Border (Fire Side)
new Location(7515, -202872, -3184), // Fire Fortress
new Location(21937, -225270, -3800), // Kellond's Secret Barracks
new Location(10256, -217176, -3568), // Zone 1 - Vita (Lv. 124)
@@ -80,86 +88,111 @@ public class ConquestTeleportDevice extends AbstractNpcAI
checkPrivs(player);
break;
}
}
if (checkPrivs(player))
{
switch (event)
case "waterZone0":
{
case "waterZone1":
player.teleToLocation(ENTER_LOCS[0], 0, player.getInstanceWorld());
break;
}
case "fireZone0":
{
player.teleToLocation(ENTER_LOCS[1], 0, player.getInstanceWorld());
break;
}
case "waterZone1":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[0], 0, player.getInstanceWorld());
break;
}
case "waterZone2":
break;
}
case "waterZone2":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[1], 0, player.getInstanceWorld());
break;
}
case "waterZone3":
break;
}
case "waterZone3":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[2], 0, player.getInstanceWorld());
break;
}
case "waterZone4":
break;
}
case "waterZone4":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[3], 0, player.getInstanceWorld());
break;
}
case "waterZone5":
break;
}
case "waterZone5":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[4], 0, player.getInstanceWorld());
break;
}
case "waterZone6":
break;
}
case "waterZone6":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[5], 0, player.getInstanceWorld());
break;
}
case "waterZone7":
break;
}
case "fireZone1":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[6], 0, player.getInstanceWorld());
break;
}
case "fireZone1":
break;
}
case "fireZone2":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[7], 0, player.getInstanceWorld());
break;
}
case "fireZone2":
break;
}
case "fireZone3":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[8], 0, player.getInstanceWorld());
break;
}
case "fireZone3":
break;
}
case "fireZone4":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[9], 0, player.getInstanceWorld());
break;
}
case "fireZone4":
break;
}
case "fireZone5":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[10], 0, player.getInstanceWorld());
break;
}
case "fireZone5":
break;
}
case "fireZone6":
{
if (checkPrivs(player))
{
player.teleToLocation(HUNT_LOCS[11], 0, player.getInstanceWorld());
break;
}
case "fireZone6":
{
player.teleToLocation(HUNT_LOCS[12], 0, player.getInstanceWorld());
break;
}
case "fireZone7":
{
player.teleToLocation(HUNT_LOCS[13], 0, player.getInstanceWorld());
break;
}
default:
{
player.sendMessage("You can't use the teleport device.");
break;
}
break;
}
}
return htmltext;
@@ -167,13 +200,28 @@ public class ConquestTeleportDevice extends AbstractNpcAI
private boolean checkPrivs(Player player)
{
final int prevSeasonConquerorId = RankManager.getInstance().getPreviousConquestRankList().get(1) != null ? RankManager.getInstance().getPreviousConquestRankList().get(1).getInt("charId") : 0;
if (Config.CONQUEST_TELEPORTS_FOR_ALL || (player.getClan().getLeaderId() == prevSeasonConquerorId))
final int prevSeasonRank1Id = RankManager.getInstance().getPreviousConquestRankList().get(1) != null ? RankManager.getInstance().getPreviousConquestRankList().get(1).getInt("charId") : 0;
final int currentSeasonRank1Id = RankManager.getInstance().getCurrentConquestRankList().get(1) != null ? RankManager.getInstance().getCurrentConquestRankList().get(1).getInt("charId") : 0;
if (Config.CONQUEST_TELEPORTS_FOR_ALL)
{
player.sendMessage("You are free to use this teleport device.");
return true;
}
// Check if rank 1 player id is in checker clan or not
else if (player.getClan() != null)
{
for (ClanMember member : player.getClan().getMembers())
{
if ((member.getObjectId() == prevSeasonRank1Id) || (member.getObjectId() == (currentSeasonRank1Id)))
{
player.sendMessage("You are free to use this teleport device.");
return true;
}
player.sendMessage("You can't use this teleport device, because you don't belong to the conquest conqueror clan.");
return false;
}
}
// If no clan
player.sendMessage("You can't use this teleport device, because you don't belong to the conquest conqueror clan.");
return false;
}

View File

@@ -104,7 +104,7 @@ public class Flowers extends AbstractNpcAI
// Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_CONQUEST_FLOWER_COLLECT))
{
EventDispatcher.getInstance().notifyEventAsync(new OnConquestFlowerCollect(player));
EventDispatcher.getInstance().notifyEventAsync(new OnConquestFlowerCollect(player, npc.getId()));
}
if (player.isInventoryUnder90(false))
@@ -144,7 +144,7 @@ public class Flowers extends AbstractNpcAI
}
else
{
player.getVariables().set(PlayerVariables.CONQUEST_PERSONAL_POINTS, player.getVariables().getLong(PlayerVariables.CONQUEST_PERSONAL_POINTS) + PERSONAL_POINTS_AMOUNT);
player.getVariables().set(PlayerVariables.CONQUEST_PERSONAL_POINTS, player.getVariables().getLong(PlayerVariables.CONQUEST_PERSONAL_POINTS, 0) + PERSONAL_POINTS_AMOUNT);
player.sendPacket(SystemMessageId.YOU_HAVE_RECEIVED_PERSONAL_CONQUEST_POINTS);
}
}

View File

@@ -32,12 +32,14 @@ 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.Guard;
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.Id;
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
import org.l2jmobius.gameserver.model.events.impl.OnServerStart;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSacredFire;
import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
@@ -352,6 +354,8 @@ public class SacredFire extends AbstractNpcAI
sacredFire.getVariables().set("SLOT", sacredFireSlot);
sacredFire.getVariables().set("SUMMON_TIME", System.currentTimeMillis());
checkSummonSacredFireListener(player);
// Update owner current Sacred Fires count.
player.getVariables().set(PlayerVariables.CONQUEST_SACRED_FIRE_SLOT_COUNT, player.getVariables().getInt(PlayerVariables.CONQUEST_SACRED_FIRE_SLOT_COUNT, 0) + 1);
@@ -470,6 +474,15 @@ public class SacredFire extends AbstractNpcAI
removeSacredFireVars();
}
private void checkSummonSacredFireListener(Player player)
{
// Notify to scripts.
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_SACRED_FIRE))
{
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSacredFire(player, SACRED_FIRE));
}
}
public static void main(String[] args)
{
new SacredFire();

View File

@@ -8,7 +8,7 @@
<npc id="27704" personalPoints="20" serverPoints="20" /> <!-- Craigo -->
<npc id="27705" personalPoints="4" serverPoints="4" /> <!-- Kiku -->
<npc id="27706" personalPoints="4" serverPoints="4" /> <!-- Floato -->
<npc id="19816" personalPoints="4" serverPoints="4" /> <!-- Soul Flower -->
<npc id="19816" personalPoints="40" serverPoints="40" /> <!-- Soul Flower -->
<!-- Daril Phran's Water Source (Lv. 116) -->
<npc id="27707" personalPoints="6" serverPoints="6" /> <!-- Daril Phran -->
@@ -17,112 +17,112 @@
<npc id="27710" personalPoints="30" serverPoints="30" /> <!-- Craigo Phran -->
<npc id="27711" personalPoints="6" serverPoints="6" /> <!-- Kiku Phran -->
<npc id="27712" personalPoints="6" serverPoints="6" /> <!-- Floato Phran -->
<npc id="19817" personalPoints="6" serverPoints="6" /> <!-- Soul Flower -->
<npc id="19817" personalPoints="60" serverPoints="60" /> <!-- Soul Flower -->
<!-- Asa Area 1 (Lv. 116) -->
<npc id="27713" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Daril Asa Ar -->
<npc id="27714" personalPoints="30" serverPoints="30" zonePoints="19" zoneId="1" /> <!-- Seo Asa Ar -->
<npc id="27715" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Floato Asa Ar -->
<npc id="27716" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Asa Ar Hunter -->
<npc id="27717" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Asa Ar Sorceress -->
<npc id="27718" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Saida Asa Ar -->
<npc id="19830" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Luminous Soul -->
<npc id="19818" personalPoints="45" serverPoints="45" zonePoints="95" zoneId="1" /> <!-- Soul Flower -->
<npc id="27713" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Daril Asa Ar -->
<npc id="27714" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Seo Asa Ar -->
<npc id="27715" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Floato Asa Ar -->
<npc id="27716" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Asa Ar Hunter -->
<npc id="27717" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Asa Ar Sorceress -->
<npc id="27718" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Saida Asa Ar -->
<npc id="19830" personalPoints="267" serverPoints="267" zonePoints="810" zoneId="1" /> <!-- Luminous Soul -->
<npc id="19818" personalPoints="180" serverPoints="180" zonePoints="95" zoneId="1" /> <!-- Soul Flower -->
<!-- Asa Area 2 (Lv. 120) -->
<npc id="27719" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Atron Asa Mide -->
<npc id="27720" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Craigo Asa Mide -->
<npc id="27721" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Kerberos Asa Mide -->
<npc id="27722" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Asa Mide Hunter -->
<npc id="27723" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Asa Mide Sorceress -->
<npc id="27724" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Saida Asa Mide -->
<npc id="27725" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Asa Mide Blader -->
<npc id="19819" personalPoints="55" serverPoints="55" zonePoints="110" zoneId="1" /> <!-- Soul Flower -->
<npc id="27719" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Atron Asa Mide -->
<npc id="27720" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Craigo Asa Mide -->
<npc id="27721" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Kerberos Asa Mide -->
<npc id="27722" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Asa Mide Hunter -->
<npc id="27723" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Asa Mide Sorceress -->
<npc id="27724" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Saida Asa Mide -->
<npc id="27725" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Asa Mide Blader -->
<npc id="19819" personalPoints="280" serverPoints="280" zonePoints="110" zoneId="1" /> <!-- Soul Flower -->
<!-- Asa Area 3 (Lv. 124) -->
<npc id="27726" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Atron Asa Telro -->
<npc id="27727" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Craigo Asa Telro -->
<npc id="27728" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Beor Asa Telro -->
<npc id="27729" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Hunter -->
<npc id="27730" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Sorceress -->
<npc id="27731" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Saida Asa Telro -->
<npc id="27732" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Blader -->
<npc id="27733" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Guard -->
<npc id="19820" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="1" /> <!-- Soul Flower -->
<npc id="19827" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="1" /> <!-- Soul Tree -->
<npc id="27776" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Catshi Trickster Asa Guardian -->
<npc id="27777" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Catshi Muse Asa Guardian -->
<npc id="27778" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Catshi Ripper Asa Guardian -->
<npc id="27726" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Atron Asa Telro -->
<npc id="27727" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Craigo Asa Telro -->
<npc id="27728" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Beor Asa Telro -->
<npc id="27729" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Hunter -->
<npc id="27730" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Sorceress -->
<npc id="27731" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Saida Asa Telro -->
<npc id="27732" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Blader -->
<npc id="27733" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Guard -->
<npc id="19820" personalPoints="430" serverPoints="430" zonePoints="160" zoneId="1" /> <!-- Soul Flower -->
<npc id="19827" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="1" /> <!-- Soul Tree -->
<npc id="27776" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Catshi Trickster Asa Guardian -->
<npc id="27777" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Catshi Muse Asa Guardian -->
<npc id="27778" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Catshi Ripper Asa Guardian -->
<!-- Anima Area 1 (Lv. 116) -->
<npc id="27755" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Daril Anima Ar -->
<npc id="27755" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Daril Anima Ar -->
<npc id="27756" personalPoints="30" serverPoints="30" zonePoints="19" zoneId="2" /> <!-- Seo Anima Ar -->
<npc id="27757" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Floato Anima Ar -->
<npc id="27758" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Anima Ar Hunter -->
<npc id="27759" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Anima Ar Sorceress -->
<npc id="27760" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Saida Anima Ar -->
<npc id="19832" personalPoints="46" serverPoints="115" zonePoints="277" zoneId="2" /> <!-- Luminous Soul -->
<npc id="19824" personalPoints="45" serverPoints="45" zonePoints="95" zoneId="2" /> <!-- Soul Flower -->
<npc id="27757" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Floato Anima Ar -->
<npc id="27758" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Anima Ar Hunter -->
<npc id="27759" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Anima Ar Sorceress -->
<npc id="27760" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Saida Anima Ar -->
<npc id="19832" personalPoints="267" serverPoints="267" zonePoints="810" zoneId="2" /> <!-- Luminous Soul -->
<npc id="19824" personalPoints="180" serverPoints="180" zonePoints="95" zoneId="2" /> <!-- Soul Flower -->
<!-- Anima Area 2 (Lv. 120) -->
<npc id="27761" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Atron Anima Mide -->
<npc id="27762" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Craigo Anima Mide -->
<npc id="27763" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Kerberos Anima Mide -->
<npc id="27764" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Anima Mide Hunter -->
<npc id="27765" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Anima Mide Sorceress -->
<npc id="27766" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Saida Anima Mide -->
<npc id="27767" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Anima Mide Blader -->
<npc id="19825" personalPoints="55" serverPoints="55" zonePoints="110" zoneId="2" /> <!-- Soul Flower -->
<npc id="27761" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Atron Anima Mide -->
<npc id="27762" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Craigo Anima Mide -->
<npc id="27763" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Kerberos Anima Mide -->
<npc id="27764" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Anima Mide Hunter -->
<npc id="27765" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Anima Mide Sorceress -->
<npc id="27766" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Saida Anima Mide -->
<npc id="27767" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Anima Mide Blader -->
<npc id="19825" personalPoints="280" serverPoints="280" zonePoints="110" zoneId="2" /> <!-- Soul Flower -->
<!-- Anima Area 3 (Lv. 124) -->
<npc id="27768" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Atron Anima Telro -->
<npc id="27769" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Craigo Anima Telro -->
<npc id="27770" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Beor Anima Telro -->
<npc id="27771" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Hunter -->
<npc id="27772" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Sorceress -->
<npc id="27773" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Saida Anima Telro -->
<npc id="27774" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Blader -->
<npc id="27775" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Guard -->
<npc id="19826" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="2" /> <!-- Soul Flower -->
<npc id="19829" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="2" /> <!-- Soul Tree -->
<npc id="27782" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Catshi Trickster Anima Guardian -->
<npc id="27783" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Catshi Muse Anima Guardian -->
<npc id="27784" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Catshi Ripper Anima Guardian -->
<npc id="27768" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Atron Anima Telro -->
<npc id="27769" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Craigo Anima Telro -->
<npc id="27770" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Beor Anima Telro -->
<npc id="27771" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Hunter -->
<npc id="27772" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Sorceress -->
<npc id="27773" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Saida Anima Telro -->
<npc id="27774" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Blader -->
<npc id="27775" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Guard -->
<npc id="19826" personalPoints="430" serverPoints="430" zonePoints="160" zoneId="2" /> <!-- Soul Flower -->
<npc id="19829" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="2" /> <!-- Soul Tree -->
<npc id="27782" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Catshi Trickster Anima Guardian -->
<npc id="27783" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Catshi Muse Anima Guardian -->
<npc id="27784" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Catshi Ripper Anima Guardian -->
<!-- Nox Area 1 (Lv. 116) -->
<npc id="27734" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Daril Nox Ar -->
<npc id="27734" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Daril Nox Ar -->
<npc id="27735" personalPoints="30" serverPoints="30" zonePoints="19" zoneId="3" /> <!-- Seo Nox Ar -->
<npc id="27736" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Floato Nox Ar -->
<npc id="27737" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Nox Ar Hunter -->
<npc id="27738" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Nox Ar Sorceress -->
<npc id="27739" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Saida Nox Ar -->
<npc id="19831" personalPoints="46" serverPoints="115" zonePoints="277" zoneId="3" /> <!-- Luminous Soul -->
<npc id="19821" personalPoints="45" serverPoints="45" zonePoints="95" zoneId="3" /> <!-- Soul Flower -->
<npc id="27736" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Floato Nox Ar -->
<npc id="27737" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Nox Ar Hunter -->
<npc id="27738" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Nox Ar Sorceress -->
<npc id="27739" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Saida Nox Ar -->
<npc id="19831" personalPoints="267" serverPoints="267" zonePoints="810" zoneId="3" /> <!-- Luminous Soul -->
<npc id="19821" personalPoints="180" serverPoints="180" zonePoints="95" zoneId="3" /> <!-- Soul Flower -->
<!-- Nox Area 2 (Lv. 120) -->
<npc id="27740" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Atron Nox Mide -->
<npc id="27741" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Craigo Nox Mide -->
<npc id="27742" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Kerberos Nox Mide -->
<npc id="27743" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Nox Mide Hunter -->
<npc id="27744" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Nox Mide Sorceress -->
<npc id="27745" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Saida Nox Mide -->
<npc id="27746" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Nox Mide Blader -->
<npc id="19822" personalPoints="55" serverPoints="55" zonePoints="110" zoneId="3" /> <!-- Soul Flower -->
<npc id="27740" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Atron Nox Mide -->
<npc id="27741" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Craigo Nox Mide -->
<npc id="27742" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Kerberos Nox Mide -->
<npc id="27743" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Nox Mide Hunter -->
<npc id="27744" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Nox Mide Sorceress -->
<npc id="27745" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Saida Nox Mide -->
<npc id="27746" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Nox Mide Blader -->
<npc id="19822" personalPoints="280" serverPoints="280" zonePoints="110" zoneId="3" /> <!-- Soul Flower -->
<!-- Nox Area 3 (Lv. 124) -->
<npc id="27747" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Atron Nox Telro -->
<npc id="27748" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Craigo Nox Telro -->
<npc id="27749" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Beor Nox Telro -->
<npc id="27750" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Hunter -->
<npc id="27751" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Sorceress -->
<npc id="27752" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Saida Nox Telro -->
<npc id="27753" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Blader -->
<npc id="27754" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Guard -->
<npc id="19823" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="3" /> <!-- Soul Flower -->
<npc id="19828" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="3" /> <!-- Soul Tree -->
<npc id="27779" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Catshi Trickster Nox Guardian -->
<npc id="27780" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Catshi Muse Nox Guardian -->
<npc id="27781" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Catshi Ripper Nox Guardian -->
<npc id="27747" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Atron Nox Telro -->
<npc id="27748" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Craigo Nox Telro -->
<npc id="27749" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Beor Nox Telro -->
<npc id="27750" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Hunter -->
<npc id="27751" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Sorceress -->
<npc id="27752" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Saida Nox Telro -->
<npc id="27753" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Blader -->
<npc id="27754" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Guard -->
<npc id="19823" personalPoints="430" serverPoints="430" zonePoints="160" zoneId="3" /> <!-- Soul Flower -->
<npc id="19828" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="3" /> <!-- Soul Tree -->
<npc id="27779" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Catshi Trickster Nox Guardian -->
<npc id="27780" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Catshi Muse Nox Guardian -->
<npc id="27781" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Catshi Ripper Nox Guardian -->
<!-- Fiery Field (no PvP) (Lv. 116) -->
<npc id="27801" personalPoints="6" serverPoints="6" /> <!-- Seo Agel -->
@@ -133,42 +133,42 @@
<npc id="27806" personalPoints="6" serverPoints="6" /> <!-- Catshi Agel Knight -->
<!-- Garden of Flames (no PvP) (Lv. 120) -->
<npc id="27794" personalPoints="6" serverPoints="6" /> <!-- Delia Gof -->
<npc id="27795" personalPoints="6" serverPoints="6" /> <!-- Aselon Gof -->
<npc id="27796" personalPoints="6" serverPoints="6" /> <!-- Retel Gof -->
<npc id="27797" personalPoints="6" serverPoints="6" /> <!-- Catshi Gof Wizard -->
<npc id="27798" personalPoints="6" serverPoints="6" /> <!-- Catshi Gof Archer -->
<npc id="27799" personalPoints="6" serverPoints="6" /> <!-- Catshi Gof Warrior -->
<npc id="27794" personalPoints="9" serverPoints="9" /> <!-- Delia Gof -->
<npc id="27795" personalPoints="9" serverPoints="9" /> <!-- Aselon Gof -->
<npc id="27796" personalPoints="9" serverPoints="9" /> <!-- Retel Gof -->
<npc id="27797" personalPoints="9" serverPoints="9" /> <!-- Catshi Gof Wizard -->
<npc id="27798" personalPoints="9" serverPoints="9" /> <!-- Catshi Gof Archer -->
<npc id="27799" personalPoints="9" serverPoints="9" /> <!-- Catshi Gof Warrior -->
<!-- Vita Area 1 (Lv. 124) -->
<npc id="27808" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Renard Vita -->
<npc id="27810" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Wizard -->
<npc id="27811" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Archer -->
<npc id="27812" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Warrior -->
<npc id="27813" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Knight -->
<npc id="27814" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Vita Sorceress -->
<npc id="27815" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Vita Seeker -->
<npc id="27816" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Vita Reaper -->
<npc id="27808" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Renard Vita -->
<npc id="27810" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Wizard -->
<npc id="27811" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Archer -->
<npc id="27812" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Warrior -->
<npc id="27813" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Knight -->
<npc id="27814" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Vita Sorceress -->
<npc id="27815" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Vita Seeker -->
<npc id="27816" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Vita Reaper -->
<npc id="19840" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="4" /> <!-- Soul Flower -->
<npc id="19842" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="4" /> <!-- Soul Tree -->
<npc id="27826" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Trickster - Vita Guardian -->
<npc id="27827" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Muse - Vita Guardian -->
<npc id="27828" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Guard - Vita Guardian -->
<npc id="19842" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="4" /> <!-- Soul Tree -->
<npc id="27826" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Trickster - Vita Guardian -->
<npc id="27827" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Muse - Vita Guardian -->
<npc id="27828" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Guard - Vita Guardian -->
<!-- Ignis Area 1 (Lv. 128) -->
<npc id="27817" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Beor Ignis -->
<npc id="27819" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Ignis Wizard -->
<npc id="27820" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Ignis Archer -->
<npc id="27821" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Sorceress -->
<npc id="27822" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Seeker -->
<npc id="27823" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Reaper -->
<npc id="27824" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Swordsman -->
<npc id="27825" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Guardian -->
<npc id="19841" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="5" /> <!-- Soul Flower -->
<npc id="19843" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="5" /> <!-- Soul Tree -->
<npc id="27829" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Trickster - Ignis Guardian -->
<npc id="27830" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Muse - Ignis Guardian -->
<npc id="27831" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Guard - Ignis Guardian -->
<npc id="27817" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Beor Ignis -->
<npc id="27819" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Ignis Wizard -->
<npc id="27820" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Ignis Archer -->
<npc id="27821" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Sorceress -->
<npc id="27822" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Seeker -->
<npc id="27823" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Reaper -->
<npc id="27824" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Swordsman -->
<npc id="27825" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Guardian -->
<npc id="19841" personalPoints="670" serverPoints="670" zonePoints="210" zoneId="5" /> <!-- Soul Flower -->
<npc id="19843" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="5" /> <!-- Soul Tree -->
<npc id="27829" personalPoints="67" serverPoints="20" zonePoints="42" zoneId="5" /> <!-- Catshi Trickster - Ignis Guardian -->
<npc id="27830" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Muse - Ignis Guardian -->
<npc id="27831" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Guard - Ignis Guardian -->
<!-- Players Points -->
<player level="110" personalPoints="33" serverPoints="16" bloodyCoins="50" /> <!-- Player level 110 -->

View File

@@ -58,10 +58,10 @@ public class LionelHunter extends AbstractNpcAI
private static final int VITALITY_OF_THE_EXALTED_LV2 = 47855;
private static final int DIGNITY_OF_THE_EXALTED_LV6 = 80970;
private static final int FAVOR_OF_THE_EXLATED = 45870;
private static final int COMMON_BOX_PHYSCAL = 81207;
private static final int COMMON_BOX_PHYSICAL = 81207;
private static final int COMMON_BOX_MAGIC = 81208;
private static final int SPECIAL_BOX_MAGIC = 81209;
private static final int SPECIAL_BOX_PHYSICAL = 81210;
private static final int SPECIAL_BOX_PHYSICAL = 81209;
private static final int SPECIAL_BOX_MAGIC = 81210;
private LionelHunter()
{
@@ -98,28 +98,31 @@ public class LionelHunter extends AbstractNpcAI
}
case "getSupplyBox":
{
if ((qs7 != null) && qs7.isCompleted())
if (((qs7 != null) && !qs7.isCompleted()) || (qs7 == null))
{
if (player.isMageClass())
htmltext = "33907-06-no.html";
}
else if (qs7.isCompleted())
{
if (player.getVariables().getBoolean("LIONEL_REWARD_RECEIVED", false) == true)
{
giveItems(player, COMMON_BOX_MAGIC, 1);
giveItems(player, SPECIAL_BOX_MAGIC, 1);
htmltext = "33907-06-received.html";
}
else
{
giveItems(player, COMMON_BOX_PHYSCAL, 1);
giveItems(player, SPECIAL_BOX_PHYSICAL, 1);
if (player.isMageClass())
{
giveItems(player, COMMON_BOX_MAGIC, 1);
giveItems(player, SPECIAL_BOX_MAGIC, 1);
}
else
{
giveItems(player, COMMON_BOX_PHYSICAL, 1);
giveItems(player, SPECIAL_BOX_PHYSICAL, 1);
}
player.getVariables().set("LIONEL_REWARD_RECEIVED", true);
player.getVariables().storeMe();
}
player.getVariables().set("LIONEL_REWARD_RECEIVED", true);
player.getVariables().storeMe();
}
else if (player.getVariables().getBoolean("LIONEL_REWARD_RECEIVED", false))
{
htmltext = "33907-06-received.html";
}
else
{
htmltext = "33907-06-no.html";
}
break;
}
@@ -234,7 +237,6 @@ public class LionelHunter extends AbstractNpcAI
htmltext = "33907-not-completed.html";
}
break;
}
}
return htmltext;
@@ -250,4 +252,4 @@ public class LionelHunter extends AbstractNpcAI
{
new LionelHunter();
}
}
}

View File

@@ -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();
}
}

View File

@@ -46,25 +46,9 @@ public class AdenReconstructorManager extends AbstractNpcAI
{
if (npc != null)
{
switch (event)
if (event.equals("SPAM_TEXT"))
{
case "SPAM_TEXT":
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_LAND_OF_ADEN_IS_IN_NEED_OF_MATERIALS_TO_REBUILD_FROM_SHILLIEN_S_DESTRUCTION);
startQuestTimer("SPAM_TEXT2", 1000, npc, null);
break;
}
case "SPAM_TEXT2":
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.PLEASE_DONATE_ANY_UNUSED_MATERIALS_YOU_HAVE_TO_HELP_REBUILD_ADEN);
startQuestTimer("SPAM_TEXT3", 1000, npc, null);
break;
}
case "SPAM_TEXT3":
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_LL_RECEIVE_A_GIFT_FOR_ANY_APPLICABLE_DONATION);
break;
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_LAND_OF_ADEN_IS_IN_NEED_OF_MATERIALS_TO_REBUILD_FROM_SHILLIEN_S_DESTRUCTION);
}
}
return super.onAdvEvent(event, npc, player);

View File

@@ -38,85 +38,84 @@ public class AetherDrops extends AbstractNpcAI
// Monsters
private static final int[] MONSTERS =
{
23487, // Magma Ailith
// Blazing Swamp
23488, // Magma Apophis
23489, // Lava Wyrm
23490, // Lava Drake
23491, // Lava Wendigo
23492, // Lava Stone Golem
23493, // Lava Leviah
23496, // Magma Ifrit
// Abandoned Coal Mines
24577, // Black Hammer Artisan
24578, // Black Hammer Collector
24579, // Black Hammer Protector
// Cemetery Lv.117
24844, // Royal Guard Captain
24846, // Commander of Operations
// Cemetery Lv.118
24843, // Royal Guard
24844, // Royal Guard Captain
24845, // Royal Field Officer
24848, // Wizard Captain
24846, // Commander of Operations
24847, // Elite Wizard
// Fields of Massacre Lv.115
24848, // Wizard Captain
// Fields of Massacre Lv.116
24488, // Doom Archer
24489, // Doom Scout
24490, // Doom Soldier
24487, // Graveyard Predator
24486, // Dismal Pole
24491, // Doom Knight
// Silent Valley 105
// Silent Valley 106
24506, // Silence Witch
24507, // Silence Preacle
24508, // Silence Warrior
24509, // Silence Slave
24510, // Silence Hannibal
// Ivory Tower Crater Lv.105
// Ivory Tower Crater Lv.106
24421, // Stone Gargoyle
24422, // Stone Golem
24423, // Monster Eye
24424, // Gargoyle Hunter
24425, // Steel Golem
24426, // Stone Cube
// Enchanted Valley Lv.103
// Enchanted Valley Lv.104
23567, // Nymph Rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23572, // Nymph Cosmos
23567, // Nymph Rose
23573, // Nymph Cosmos
23578, // Nymph Guardian
19600, // Flower Bud
23581, // Apherus
// Forest of Mirrors Lv.109
// Forest of Mirrors Lv.110
24461, // Forest Ghost
24462, // Bewildered Expedition Member
24463, // Bewildered Patrol
24464, // Bewildered Dwarf Adventurer
24465, // Forest Evil Spirit
24466, // Demonic Mirror
// Desert Query Lv.101
// Desert Query Lv.102
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
// Beleth's Magic Circle Lv.101
// Beleth's Magic Circle Lv.102
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
// Phantasmal Ridge Lv.103
// Phantasmal Ridge Lv.104
24511, // Lunatikan
24512, // Garion Neti
24513, // Desert Wendigo
24514, // Koraza
24515, // Kandiloth
// Wasteland Lv.117
// Wasteland Lv.118
24500, // Sand Golem
24501, // Centaur Fighter
24502, // Centaur Marksman
24503, // Centaur Wizard
24504, // Centaur Warlord
24505, // Earth Elemental Lord
// Tanor Canyon Lv. 107
// Tanor Canyon Lv. 108
24587, // Tanor Silenos
20936, // Tanor Silenos
20937, // Tanor Silenos Soldier
@@ -124,25 +123,25 @@ public class AetherDrops extends AbstractNpcAI
20939, // Tanor Silenos Warrior
20942, // Nightmare Guide
20943, // Nightmare Watchman
// Alligator Island Lv.107
// Alligator Island Lv.108
24373, // Dailaon Lad
24376, // Nos Lad
24377, // Swamp Tribe
24378, // Swamp Alligator
24379, // Swamp Warrior
// Field of Silence Lv.109
// Field of Silence Lv.110
24517, // Kropiora
24520, // Krotania
24521, // Krophy
24522, // Spiz Krphy
24523, // Krotany
// Field of Whispers Lv.111
// Field of Whispers Lv.112
24304, // Groz Kropiora
24305, // Groz Krotania
24306, // Groz Krophy
24307, // Groz Krotany
24308, // Groz Water Drake
// Isle of Prayer
// Isle of Prayer Lv.112
24445, // Lizardman Rouge
24446, // Island Guard
24447, // Niasis
@@ -150,7 +149,7 @@ public class AetherDrops extends AbstractNpcAI
24449, // Lizardman Warrior
24450, // Lizardman Wizard
24451, // Lizardman Defender
// Fafurion Temple
// Fafurion Temple Lv.124
24318, // Temple Guard Captain
24321, // Temple Patrol Guard
24322, // Temple Knight Recruit
@@ -169,62 +168,97 @@ public class AetherDrops extends AbstractNpcAI
23780, // Royal Templar Colonel
23781, // Royal Sharpshooter
23782, // Royal Archmage
// Breka's Stronghold Lv.113
// Breka's Stronghold Lv.114
24415, // Breka Orc Scout
24416, // Breka Orc Scout Captain
24417, // Breka Orc Archer
24418, // Breka Orc Shaman
24419, // Breka Orc Slaughterer
24420, // Breka Orc prefect
// Dragon Valley Lv.124
24617, // Dragon Peltast
24618, // Dragon Officer
24619, // Behemoth Dragon
24620, // Soul Hunter
// Swamp of Screams
// Swamp of Screams Lv.116
24570, // Dire Stakato Drone
24571, // Dire Stakato Berserker
24572, // Dire Stakato Shaman
24573, // Dire Stakato Witch
// Sel Mahum Training Grounds Lv.113
// Sel Mahum Training Grounds Lv.114
24492, // Sel Mahum Soldier
24493, // Sel Mahum Squad Leader
24494, // Sel Mahum Warrior
24495, // Keltron
// Plains of the Lizardman Lv.113
// Plains of the Lizardman Lv.114
24496, // Tanta Lizardman Warrior
24497, // Tanta Lizardman Archer
24498, // Tanta Lizardman Wizard
24499, // Priest Uguros
// Varka Silenos Barracks Lv.111
// Varka Silenos Barracks Lv.114
24636, // Varka Silenos Magus
24637, // Varka Silenos Shaman
24638, // Varka Silenos Footman
24639, // Varka Silenos Seargeant
24640, // Varka Silenos Officer
// Ketra Orc Barracks Lv.111
// Ketra Orc Barracks Lv.112
24631, // Ketra Orc Shaman
24632, // Ketra Orc Prophet
24633, // Ketra Orc Warrior
24634, // Ketra Orc Lieutenant
24635, // Battalion Commander
// Wall of Argos Lv.115
// Wall of Argos Lv.116
24606, // Captive Antelope
24607, // Captive Bandersnatch
24608, // Captive Buffalo
24609, // Captive Grendel
24610, // Eye of Watchman
24611, // Elder Homunculus
// Neutral Zone
// Neutral Zone Lv.110
24641, // Tel Mahum Wizard
24642, // Tel Mahum Legionary
24643, // Tel Mahum Footman
24644, // Tel Mahum Lieutenant
// Sea of Spores
// Sea of Spores Lv.116
24621, // Laikel
24622, // Harane
24623, // Lesatanas
24624, // Arbor
// Cruma Marshlands Lv.122
24930, // Black Demon Knight
24931, // Black Demon Warrior
24932, // Black Demon Scout
24933, // Black Demon Wizard
// Frozen Labyrinth Lv.122
24934, // Frozen Soldier
24935, // Frozen Defender
24936, // Ice Knight
24937, // Glacier Golem
24938, // Ice Fairy
// Sel Mahum Base Lv.124
24961, // Sel Mahum Footman
24962, // Sel Mahum Elite Soldier
24963, // Sel Mahum Shaman
24964, // Sel Mahum Wizard
// Dragon Valley West Lv.120
24664, // Graveyard Death Lich
24665, // Graveyard Death Berserker
24666, // Graveyard Death Soldier
24667, // Graveyard Death Knight
// Dragon Valley East Lv.122
24669, // Dragon Officer
24670, // Dragon Beast
24671, // Dragon Centurion
24672, // Elite Dragon Guard
// Shadow Of The Mother Tree Lv.120
24965, // Creeper Rampike
24966, // Fila Aprias
24967, // Flush Teasle
24968, // Treant Blossom
24969, // Arsos Butterfly
// Execution Grounds Lv.126
24673, // Zombie Orc
24674, // Zombie Dark Elf
24675, // Zombie Dwarf
24676, // Schnabel Stalker
24677, // Henker Hacker
24678, // Schnabel Doctor
24679, // Henker Anatomist
};
// Item
private static final int AETHER = 81215;

View File

@@ -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();

View File

@@ -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;
}

View 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>

View 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>

View 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>

View 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>

View File

@@ -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;

View File

@@ -38,16 +38,16 @@ public class WaterDragonEliteSupplyDrops extends AbstractNpcAI
// Monsters
private static final int[] MONSTERS =
{
24596, // Water Dragon's Elite Archer
24597, // Water Dragon's Elite Mage
24598, // Water Dragon's Elite Raider
24599, // Water Dragon's Elite Swordsman
24600, // Water Dragon's Elite Wyrm
24601, // Water Dragon's Shaman
24602, // Water Dragon's Mage
24603, // Water Dragon's Pikeman
24604, // Water Dragon's Swordsman
24605, // Weakened Krotania
24957, // Fafurion's Praetorian Knight
24958, // Fafurion's Praetorian Pikeman
24959, // Fafurion's Praetorian Swordsman
24960 // Fafurion's Praetorian Water Dragon
};
// Item
private static final int WATER_DRAGON_ELITE_SUPPLIES = 81758;
@@ -57,7 +57,7 @@ public class WaterDragonEliteSupplyDrops extends AbstractNpcAI
private static final int DROP_DAILY = 100;
private static final int DROP_MIN = 1;
private static final int DROP_MAX = 1;
private static final double CHANCE = 10;
private static final double CHANCE = 7.2;
private WaterDragonEliteSupplyDrops()
{
@@ -97,7 +97,7 @@ public class WaterDragonEliteSupplyDrops extends AbstractNpcAI
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, "Could not reset Corroded Fields drop count: ", e);
LOGGER.log(Level.SEVERE, "Could not reset Ravaged Innadril drop count: ", e);
}
// Update data for online players.

View File

@@ -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);

View File

@@ -291,7 +291,20 @@ public class Eraton extends AbstractNpcAI
}
takeItem(player, STONE_OF_DESTINY);
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())

View File

@@ -37,6 +37,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("AbnormalTimeChangeBySkillId", AbnormalTimeChangeBySkillId::new);
EffectHandler.getInstance().registerHandler("AbsorbDamage", AbsorbDamage::new);
EffectHandler.getInstance().registerHandler("Accuracy", Accuracy::new);
EffectHandler.getInstance().registerHandler("AddFireSourcePoints", AddFireSourcePoints::new);
EffectHandler.getInstance().registerHandler("AddHate", AddHate::new);
EffectHandler.getInstance().registerHandler("AddHomunculusPoints", AddHomunculusPoints::new);
EffectHandler.getInstance().registerHandler("AddHuntingTime", AddHuntingTime::new);
@@ -44,6 +45,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);
@@ -204,6 +207,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);
@@ -243,7 +247,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);

View File

@@ -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);

View File

@@ -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:

View File

@@ -0,0 +1,66 @@
/*
* 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.Config;
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.events.AbstractScript;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
/*
* @author CostyKiller
*/
public class AddFireSourcePoints extends AbstractEffect
{
public AddFireSourcePoints(StatSet params)
{
}
@Override
public boolean isInstant()
{
return true;
}
@Override
public void instant(Creature effector, Creature effected, Skill skill, Item item)
{
if (!effected.isPlayable())
{
return;
}
final Player player = effected.getActingPlayer();
if (AbstractScript.getRandom(100) < Config.CONQUEST_ABILITY_FIRE_SOURCE_UPGRADE_CHANCE)
{
player.getVariables().set(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, player.getVariables().getInt(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, 0) + Config.CONQUEST_ABILITY_FIRE_SOURCE_EXP_AMOUNT);
player.sendMessage("You have added Fire Source points.");
AbstractScript.showOnScreenMsg(player, "You have added Fire Source points.", 5000);
}
else
{
player.sendMessage("You have failed to add Fire Source points.");
AbstractScript.showOnScreenMsg(player, "You have failed to add Fire Source points.", 5000);
}
}
}

View File

@@ -14,23 +14,18 @@
* 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;
package handlers.effecthandlers;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.stats.Stat;
/**
* @author Mobius
* @author fruit
*/
public class Q10905_HuntingTime extends Quest
public class AddMaxMagicCriticalRate extends AbstractStatEffect
{
private static final int START_NPC = 34599;
public Q10905_HuntingTime()
public AddMaxMagicCriticalRate(StatSet params)
{
super(10905);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
super(params, Stat.ADD_MAX_MAGIC_CRITICAL_RATE);
}
}

View File

@@ -14,23 +14,18 @@
* 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;
package handlers.effecthandlers;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.stats.Stat;
/**
* @author Mobius
* @author fruit
*/
public class Q10906_ChasingTheLight extends Quest
public class AddMaxPhysicalCriticalRate extends AbstractStatEffect
{
private static final int START_NPC = 34599;
public Q10906_ChasingTheLight()
public AddMaxPhysicalCriticalRate(StatSet params)
{
super(10906);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
super(params, Stat.ADD_MAX_PHYSICAL_CRITICAL_RATE);
}
}

View File

@@ -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
{

View File

@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.SystemMessageId;
/**
* @author CostyKiller
@@ -59,6 +60,8 @@ public class ConquestFireCentralAreaReward extends AbstractEffect
if (AbstractScript.getRandom(100) < Config.CONQUEST_ABILITY_FIRE_SOURCE_UPGRADE_CHANCE)
{
player.getVariables().set(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, player.getVariables().getInt(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, 0) + Config.CONQUEST_ABILITY_FIRE_SOURCE_EXP_AMOUNT);
player.sendPacket(SystemMessageId.YOU_HAVE_RECEIVED_FIRE_SOURCE_POINTS);
AbstractScript.showOnScreenMsg(player, "You have received Fire Source points.", 5000);
}
}
}

View File

@@ -20,12 +20,12 @@ import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.stats.Stat;
/**
* @author Mobius
* @author fruit
*/
public class MaxMagicCriticalRate extends AbstractStatEffect
public class IgnoreReduceDamage extends AbstractStatEffect
{
public MaxMagicCriticalRate(StatSet params)
public IgnoreReduceDamage(StatSet params)
{
super(params, Stat.MAX_MAGIC_CRITICAL_RATE);
super(params, Stat.IGNORE_REDUCE_DAMAGE);
}
}

View File

@@ -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);
}

View File

@@ -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);
}
}
}

View File

@@ -16,6 +16,11 @@
*/
package handlers.effecthandlers;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.l2jmobius.gameserver.data.xml.ExperienceData;
import org.l2jmobius.gameserver.data.xml.NpcData;
import org.l2jmobius.gameserver.enums.Race;
@@ -33,11 +38,12 @@ import org.l2jmobius.gameserver.model.skill.Skill;
/**
* SummonMulti effect implementation.
* @author UnAfraid
* @author UnAfraid, Mobius
*/
public class SummonMulti extends AbstractEffect
{
private final int _npcId;
private final Map<Integer, Integer> _levelTemplates;
private final float _expMultiplier;
private final ItemHolder _consumeItem;
private final int _lifeTime;
@@ -46,7 +52,21 @@ public class SummonMulti extends AbstractEffect
public SummonMulti(StatSet params)
{
_npcId = params.getInt("npcId");
_npcId = params.getInt("npcId", 0);
if (_npcId > 0)
{
_levelTemplates = null;
}
else
{
final List<Integer> summonerLevels = params.getIntegerList("summonerLevels");
final List<Integer> npcIds = params.getIntegerList("npcIds");
_levelTemplates = new LinkedHashMap<>(npcIds.size());
for (int i = 0; i < npcIds.size(); i++)
{
_levelTemplates.put(summonerLevels.get(i), npcIds.get(i));
}
}
_expMultiplier = params.getFloat("expMultiplier", 1);
_consumeItem = new ItemHolder(params.getInt("consumeItemId", 0), params.getInt("consumeItemCount", 1));
_consumeItemInterval = params.getInt("consumeItemInterval", 0);
@@ -80,7 +100,31 @@ public class SummonMulti extends AbstractEffect
return;
}
final NpcTemplate template = NpcData.getInstance().getTemplate(_npcId);
final NpcTemplate template;
if (_npcId > 0)
{
template = NpcData.getInstance().getTemplate(_npcId);
}
else
{
Entry<Integer, Integer> levelTemplate = null;
for (Entry<Integer, Integer> entry : _levelTemplates.entrySet())
{
if ((levelTemplate == null) || (player.getLevel() >= entry.getKey()))
{
levelTemplate = entry;
}
}
if (levelTemplate != null)
{
template = NpcData.getInstance().getTemplate(levelTemplate.getValue());
}
else // Should never happen.
{
template = NpcData.getInstance().getTemplate(_levelTemplates.keySet().stream().findFirst().get());
}
}
final Servitor summon = new Servitor(template, player);
final int consumeItemInterval = (_consumeItemInterval > 0 ? _consumeItemInterval : (template.getRace() != Race.SIEGE_WEAPON ? 240 : 60)) * 1000;

View File

@@ -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)

View File

@@ -34,6 +34,7 @@ public class TriggerSkillByBaseStat extends AbstractEffect
private final BaseStat _baseStat;
private final int _skillId;
private final int _skillLevel;
private final int _skillSubLevel;
private final int _min;
private final int _max;
@@ -42,6 +43,7 @@ public class TriggerSkillByBaseStat extends AbstractEffect
_baseStat = params.getEnum("baseStat", BaseStat.class);
_skillId = params.getInt("skillId", 0);
_skillLevel = params.getInt("skillLevel", 1);
_skillSubLevel = params.getInt("skillSubLevel", 0);
_min = params.getInt("min", 0);
_max = params.getInt("max", 9999);
}
@@ -101,7 +103,7 @@ public class TriggerSkillByBaseStat extends AbstractEffect
{
if (!target.isAffectedBySkill(_skillId))
{
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel));
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel, _skillSubLevel));
}
}
else

View File

@@ -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
{

View File

@@ -34,6 +34,7 @@ public class TriggerSkillByStat extends AbstractEffect
private final Stat _stat;
private final int _skillId;
private final int _skillLevel;
private final int _skillSubLevel;
private final int _min;
private final int _max;
@@ -42,6 +43,7 @@ public class TriggerSkillByStat extends AbstractEffect
_stat = params.getEnum("stat", Stat.class);
_skillId = params.getInt("skillId", 0);
_skillLevel = params.getInt("skillLevel", 1);
_skillSubLevel = params.getInt("skillSubLevel", 0);
_min = params.getInt("min", 0);
_max = params.getInt("max", 9999);
}
@@ -63,7 +65,7 @@ public class TriggerSkillByStat extends AbstractEffect
{
if (!target.isAffectedBySkill(_skillId))
{
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel));
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel, _skillSubLevel));
}
}
else

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -52,4 +52,10 @@ public class PetHold implements IPlayerActionHandler
((SummonAI) pet.getAI()).notifyFollowStatusChange();
}
}
@Override
public boolean isPetAction()
{
return true;
}
}

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