Sync with L2jUnity (7db5b4f).

This commit is contained in:
MobiusDev 2016-12-04 21:28:20 +00:00
parent 9e1d3569f0
commit b9d3c99cf1
412 changed files with 13806 additions and 10065 deletions

View File

@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS `character_pet_skills_save` (
`petObjItemId` INT NOT NULL DEFAULT 0,
`skill_id` INT NOT NULL DEFAULT 0,
`skill_level` INT(3) NOT NULL DEFAULT 1,
`skill_sub_level` INT(4) NOT NULL DEFAULT '0',
`remaining_time` INT NOT NULL DEFAULT 0,
`buff_index` INT(2) NOT NULL DEFAULT 0,
PRIMARY KEY (`petObjItemId`,`skill_id`,`skill_level`)

View File

@ -6,6 +6,7 @@ CREATE TABLE IF NOT EXISTS `character_shortcuts` (
`type` decimal(3) ,
`shortcut_id` decimal(16) ,
`level` SMALLINT UNSIGNED ,
`sub_level` INT(4) NOT NULL DEFAULT '0',
`class_index` int(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`charId`,`slot`,`page`,`class_index`),
KEY `shortcut_id` (`shortcut_id`)

View File

@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS `character_skills` (
`charId` INT UNSIGNED NOT NULL DEFAULT 0,
`skill_id` INT NOT NULL DEFAULT 0,
`skill_level` INT(4) NOT NULL DEFAULT 1,
`skill_sub_level` INT(4) NOT NULL DEFAULT '0',
`class_index` INT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`charId`,`skill_id`,`class_index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS `character_skills_save` (
`charId` INT NOT NULL DEFAULT 0,
`skill_id` INT NOT NULL DEFAULT 0,
`skill_level` INT(4) NOT NULL DEFAULT 1,
`skill_sub_level` INT(4) NOT NULL DEFAULT '0',
`remaining_time` INT NOT NULL DEFAULT 0,
`reuse_delay` INT(8) NOT NULL DEFAULT 0,
`systime` bigint(13) unsigned NOT NULL DEFAULT '0',

View File

@ -5,6 +5,7 @@ CREATE TABLE IF NOT EXISTS `character_summon_skills_save` (
`summonSkillId` INT NOT NULL DEFAULT 0,
`skill_id` INT NOT NULL DEFAULT 0,
`skill_level` INT(3) NOT NULL DEFAULT 1,
`skill_sub_level` INT(4) NOT NULL DEFAULT '0',
`remaining_time` INT NOT NULL DEFAULT 0,
`buff_index` INT(2) NOT NULL DEFAULT 0,
PRIMARY KEY (`ownerId`,`ownerClassIndex`,`summonSkillId`,`skill_id`,`skill_level`)

View File

@ -13,6 +13,8 @@ CREATE TABLE IF NOT EXISTS `pledge_recruit` (
`karma` tinyint(1) NOT NULL,
`information` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`detailed_information` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`application_type` tinyint(1) NOT NULL,
`recruit_type` tinyint(1) NOT NULL,
PRIMARY KEY (`clan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@ -14,20 +14,29 @@
SiegeHourList = 16,20
# Taxes for castles
# Tax in percent when is castle owned by npc's.
# Default: 15
# Buy tax in percent when is castle owned by npc's.
# Defualt: 15
BuyTaxForNeutralSide = 15
SellTaxForNeutralSide = 0
# Tax in percent when is castle owned by player's and castle is on light side.
# Default: 0
# Buy tax in percent when is castle owned by player's and castle is on light side.
# Defualt: 0
BuyTaxForLightSide = 0
# Buy tax in percent when is castle owned by player's and castle is on dark side.
# Defualt: 30
BuyTaxForDarkSide = 30
# Sell tax in percent when is castle owned by npc's.
# Defualt: 15
SellTaxForNeutralSide = 15
# Sell tax in percent when is castle owned by player's and castle is on light side.
# Defualt: 0
SellTaxForLightSide = 0
# Tax in percent when is castle owned by player's and castle is on dark side.
# Default: 30
BuyTaxForDarkSide = 30
SellTaxForDarkSide = 20
# Sell tax in percent when is castle owned by player's and castle is on dark side.
# Defualt: 30
SellTaxForDarkSide = 30
# Teleport Function price
# Price = 7 days

View File

@ -502,8 +502,8 @@ WorldChatPointsPerDay = 3
# The delay player must wait before sending new world chat message
# Note: Value is in seconds
# Default: 20sec
WorldChatInterval = 20sec
# Default: 20secs
WorldChatInterval = 20secs
# ---------------------------------------------------------------------------

View File

@ -1,203 +1,603 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/EnchantSkillGroups.xsd">
<!-- 2nd Class Buffs Debuffs Toogle and Summons -->
<group id="1">
<enchant level="1" adena="74250" sp="575980" chance76="82" chance77="92" chance78="97" chance79="97" chance80="97" chance81="97" chance82="97" chance83="97" chance84="97" chance85="97" chance86="99" chance87="99" chance88="99" chance89="99" chance90="99" chance91="99" chance92="99" chance93="99" chance94="99" chance95="99" chance96="99" chance97="99" chance98="99" chance99="99" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="2" adena="74250" sp="575980" chance76="80" chance77="90" chance78="95" chance79="95" chance80="95" chance81="95" chance82="95" chance83="95" chance84="95" chance85="95" chance86="97" chance87="97" chance88="97" chance89="97" chance90="97" chance91="97" chance92="97" chance93="97" chance94="97" chance95="98" chance96="98" chance97="98" chance98="98" chance99="98" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="3" adena="74250" sp="575980" chance76="78" chance77="88" chance78="93" chance79="93" chance80="93" chance81="93" chance82="93" chance83="93" chance84="93" chance85="93" chance86="95" chance87="95" chance88="95" chance89="95" chance90="95" chance91="95" chance92="95" chance93="95" chance94="95" chance95="96" chance96="96" chance97="96" chance98="96" chance99="96" chance100="97" chance101="97" chance102="97" chance103="97" chance104="97" chance105="97" chance106="97" chance107="97" />
<enchant level="4" adena="112050" sp="604535" chance76="52" chance77="76" chance78="86" chance79="91" chance80="91" chance81="91" chance82="91" chance83="91" chance84="91" chance85="91" chance86="93" chance87="93" chance88="93" chance89="93" chance90="93" chance91="93" chance92="93" chance93="93" chance94="93" chance95="94" chance96="94" chance97="94" chance98="94" chance99="94" chance100="95" chance101="95" chance102="95" chance103="95" chance104="95" chance105="95" chance106="95" chance107="95" />
<enchant level="5" adena="112050" sp="604535" chance76="50" chance77="74" chance78="84" chance79="89" chance80="89" chance81="89" chance82="89" chance83="89" chance84="89" chance85="89" chance86="91" chance87="91" chance88="91" chance89="91" chance90="91" chance91="91" chance92="91" chance93="91" chance94="91" chance95="92" chance96="92" chance97="92" chance98="92" chance99="92" chance100="93" chance101="93" chance102="93" chance103="93" chance104="93" chance105="93" chance106="93" chance107="93" />
<enchant level="6" adena="112050" sp="604535" chance76="48" chance77="72" chance78="82" chance79="87" chance80="87" chance81="87" chance82="87" chance83="87" chance84="87" chance85="87" chance86="89" chance87="89" chance88="89" chance89="89" chance90="89" chance91="89" chance92="89" chance93="89" chance94="89" chance95="90" chance96="90" chance97="90" chance98="90" chance99="90" chance100="91" chance101="91" chance102="91" chance103="91" chance104="91" chance105="91" chance106="91" chance107="91" />
<enchant level="7" adena="150300" sp="634020" chance76="36" chance77="46" chance78="70" chance79="80" chance80="85" chance81="85" chance82="85" chance83="85" chance84="85" chance85="85" chance86="87" chance87="87" chance88="87" chance89="87" chance90="87" chance91="87" chance92="87" chance93="87" chance94="87" chance95="88" chance96="88" chance97="88" chance98="88" chance99="88" chance100="89" chance101="89" chance102="89" chance103="89" chance104="89" chance105="89" chance106="89" chance107="89" />
<enchant level="8" adena="150300" sp="634020" chance76="34" chance77="44" chance78="68" chance79="78" chance80="83" chance81="83" chance82="83" chance83="83" chance84="83" chance85="83" chance86="85" chance87="85" chance88="85" chance89="85" chance90="85" chance91="85" chance92="85" chance93="85" chance94="85" chance95="86" chance96="86" chance97="86" chance98="86" chance99="86" chance100="87" chance101="87" chance102="87" chance103="87" chance104="87" chance105="87" chance106="87" chance107="87" />
<enchant level="9" adena="150300" sp="634020" chance76="32" chance77="42" chance78="66" chance79="76" chance80="81" chance81="81" chance82="81" chance83="81" chance84="81" chance85="81" chance86="83" chance87="83" chance88="83" chance89="83" chance90="83" chance91="83" chance92="83" chance93="83" chance94="83" chance95="84" chance96="84" chance97="84" chance98="84" chance99="84" chance100="85" chance101="85" chance102="85" chance103="85" chance104="85" chance105="85" chance106="85" chance107="85" />
<enchant level="10" adena="189000" sp="680020" chance76="20" chance77="30" chance78="40" chance79="64" chance80="74" chance81="79" chance82="79" chance83="79" chance84="79" chance85="79" chance86="81" chance87="81" chance88="81" chance89="81" chance90="81" chance91="81" chance92="81" chance93="81" chance94="81" chance95="82" chance96="82" chance97="82" chance98="82" chance99="82" chance100="83" chance101="83" chance102="83" chance103="83" chance104="83" chance105="83" chance106="83" chance107="83" />
<enchant level="11" adena="189000" sp="680020" chance76="18" chance77="28" chance78="38" chance79="62" chance80="72" chance81="77" chance82="77" chance83="77" chance84="77" chance85="77" chance86="79" chance87="79" chance88="79" chance89="79" chance90="79" chance91="79" chance92="79" chance93="79" chance94="79" chance95="80" chance96="80" chance97="80" chance98="80" chance99="80" chance100="81" chance101="81" chance102="81" chance103="81" chance104="81" chance105="81" chance106="81" chance107="81" />
<enchant level="12" adena="189000" sp="680020" chance76="16" chance77="26" chance78="36" chance79="60" chance80="70" chance81="75" chance82="75" chance83="75" chance84="75" chance85="75" chance86="77" chance87="77" chance88="77" chance89="77" chance90="77" chance91="77" chance92="77" chance93="77" chance94="77" chance95="78" chance96="78" chance97="78" chance98="78" chance99="78" chance100="79" chance101="79" chance102="79" chance103="79" chance104="79" chance105="79" chance106="79" chance107="79" />
<enchant level="13" adena="228150" sp="711890" chance76="4" chance77="14" chance78="24" chance79="34" chance80="58" chance81="68" chance82="73" chance83="73" chance84="73" chance85="73" chance86="75" chance87="75" chance88="75" chance89="75" chance90="75" chance91="75" chance92="75" chance93="75" chance94="75" chance95="76" chance96="76" chance97="76" chance98="76" chance99="76" chance100="77" chance101="77" chance102="77" chance103="77" chance104="77" chance105="77" chance106="77" chance107="77" />
<enchant level="14" adena="228150" sp="711890" chance76="2" chance77="12" chance78="22" chance79="32" chance80="56" chance81="66" chance82="71" chance83="71" chance84="71" chance85="71" chance86="73" chance87="73" chance88="73" chance89="73" chance90="73" chance91="73" chance92="73" chance93="73" chance94="73" chance95="74" chance96="74" chance97="74" chance98="74" chance99="74" chance100="75" chance101="75" chance102="75" chance103="75" chance104="75" chance105="75" chance106="75" chance107="75" />
<enchant level="15" adena="228150" sp="711890" chance76="1" chance77="10" chance78="20" chance79="30" chance80="54" chance81="64" chance82="69" chance83="69" chance84="69" chance85="69" chance86="71" chance87="71" chance88="71" chance89="71" chance90="71" chance91="71" chance92="71" chance93="71" chance94="71" chance95="72" chance96="72" chance97="72" chance98="72" chance99="72" chance100="73" chance101="73" chance102="73" chance103="73" chance104="73" chance105="73" chance106="73" chance107="73" />
<enchant level="16" adena="267750" sp="761540" chance76="1" chance77="1" chance78="8" chance79="18" chance80="28" chance81="52" chance82="62" chance83="67" chance84="67" chance85="67" chance86="69" chance87="69" chance88="69" chance89="69" chance90="69" chance91="69" chance92="69" chance93="69" chance94="69" chance95="70" chance96="70" chance97="70" chance98="70" chance99="70" chance100="71" chance101="71" chance102="71" chance103="71" chance104="71" chance105="71" chance106="71" chance107="71" />
<enchant level="17" adena="267750" sp="761540" chance76="1" chance77="1" chance78="6" chance79="16" chance80="26" chance81="50" chance82="60" chance83="65" chance84="65" chance85="65" chance86="67" chance87="67" chance88="67" chance89="67" chance90="67" chance91="67" chance92="67" chance93="67" chance94="67" chance95="68" chance96="68" chance97="68" chance98="68" chance99="68" chance100="69" chance101="69" chance102="69" chance103="69" chance104="69" chance105="69" chance106="69" chance107="69" />
<enchant level="18" adena="267750" sp="761540" chance76="1" chance77="1" chance78="4" chance79="14" chance80="24" chance81="48" chance82="58" chance83="63" chance84="63" chance85="63" chance86="65" chance87="65" chance88="65" chance89="65" chance90="65" chance91="65" chance92="65" chance93="65" chance94="65" chance95="66" chance96="66" chance97="66" chance98="66" chance99="66" chance100="67" chance101="67" chance102="67" chance103="67" chance104="67" chance105="67" chance106="67" chance107="67" />
<enchant level="19" adena="307800" sp="795890" chance76="1" chance77="1" chance78="1" chance79="2" chance80="12" chance81="22" chance82="46" chance83="56" chance84="61" chance85="61" chance86="63" chance87="63" chance88="63" chance89="63" chance90="63" chance91="63" chance92="63" chance93="63" chance94="63" chance95="64" chance96="64" chance97="64" chance98="64" chance99="64" chance100="65" chance101="65" chance102="65" chance103="65" chance104="65" chance105="65" chance106="65" chance107="65" />
<enchant level="20" adena="307800" sp="795890" chance76="1" chance77="1" chance78="1" chance79="1" chance80="10" chance81="20" chance82="44" chance83="54" chance84="59" chance85="59" chance86="61" chance87="61" chance88="61" chance89="61" chance90="61" chance91="61" chance92="61" chance93="61" chance94="61" chance95="62" chance96="62" chance97="62" chance98="62" chance99="62" chance100="63" chance101="63" chance102="63" chance103="63" chance104="63" chance105="63" chance106="63" chance107="63" />
<enchant level="21" adena="307800" sp="795890" chance76="1" chance77="1" chance78="1" chance79="1" chance80="8" chance81="18" chance82="42" chance83="52" chance84="57" chance85="57" chance86="59" chance87="59" chance88="59" chance89="59" chance90="59" chance91="59" chance92="59" chance93="59" chance94="59" chance95="60" chance96="60" chance97="60" chance98="60" chance99="60" chance100="61" chance101="61" chance102="61" chance103="61" chance104="61" chance105="61" chance106="61" chance107="61" />
<enchant level="22" adena="348300" sp="849330" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="6" chance82="16" chance83="40" chance84="50" chance85="55" chance86="57" chance87="57" chance88="57" chance89="57" chance90="57" chance91="57" chance92="57" chance93="57" chance94="57" chance95="58" chance96="58" chance97="58" chance98="58" chance99="58" chance100="59" chance101="59" chance102="59" chance103="59" chance104="59" chance105="59" chance106="59" chance107="59" />
<enchant level="23" adena="348300" sp="849330" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="4" chance82="14" chance83="38" chance84="48" chance85="53" chance86="55" chance87="55" chance88="55" chance89="55" chance90="55" chance91="55" chance92="55" chance93="55" chance94="55" chance95="56" chance96="56" chance97="56" chance98="56" chance99="56" chance100="57" chance101="57" chance102="57" chance103="57" chance104="57" chance105="57" chance106="57" chance107="57" />
<enchant level="24" adena="348300" sp="849330" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="2" chance82="12" chance83="36" chance84="46" chance85="46" chance86="51" chance87="51" chance88="51" chance89="51" chance90="51" chance91="51" chance92="51" chance93="51" chance94="51" chance95="52" chance96="52" chance97="52" chance98="52" chance99="52" chance100="53" chance101="53" chance102="53" chance103="53" chance104="53" chance105="53" chance106="53" chance107="53" />
<enchant level="25" adena="389250" sp="886255" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="10" chance84="34" chance85="44" chance86="49" chance87="49" chance88="49" chance89="49" chance90="49" chance91="49" chance92="49" chance93="49" chance94="49" chance95="50" chance96="50" chance97="50" chance98="50" chance99="50" chance100="51" chance101="51" chance102="51" chance103="51" chance104="51" chance105="51" chance106="51" chance107="51" />
<enchant level="26" adena="389250" sp="886255" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="8" chance84="32" chance85="42" chance86="47" chance87="47" chance88="47" chance89="47" chance90="47" chance91="47" chance92="47" chance93="47" chance94="47" chance95="48" chance96="48" chance97="48" chance98="48" chance99="48" chance100="49" chance101="49" chance102="49" chance103="49" chance104="49" chance105="49" chance106="49" chance107="49" />
<enchant level="27" adena="389250" sp="886255" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="6" chance84="30" chance85="40" chance86="45" chance87="45" chance88="45" chance89="45" chance90="45" chance91="45" chance92="45" chance93="45" chance94="45" chance95="46" chance96="46" chance97="46" chance98="46" chance99="46" chance100="47" chance101="47" chance102="47" chance103="47" chance104="47" chance105="47" chance106="47" chance107="47" />
<enchant level="28" adena="430650" sp="943620" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="4" chance85="28" chance86="31" chance87="31" chance88="31" chance89="31" chance90="31" chance91="31" chance92="31" chance93="31" chance94="31" chance95="32" chance96="32" chance97="32" chance98="32" chance99="32" chance100="33" chance101="33" chance102="33" chance103="33" chance104="33" chance105="33" chance106="33" chance107="33" />
<enchant level="29" adena="430650" sp="943620" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="2" chance85="26" chance86="29" chance87="29" chance88="29" chance89="29" chance90="29" chance91="29" chance92="29" chance93="29" chance94="29" chance95="30" chance96="30" chance97="30" chance98="30" chance99="30" chance100="31" chance101="31" chance102="31" chance103="31" chance104="31" chance105="31" chance106="31" chance107="31" />
<enchant level="30" adena="430650" sp="943620" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="24" chance86="27" chance87="27" chance88="27" chance89="27" chance90="27" chance91="27" chance92="27" chance93="27" chance94="27" chance95="28" chance96="28" chance97="28" chance98="28" chance99="28" chance100="29" chance101="29" chance102="29" chance103="29" chance104="29" chance105="29" chance106="29" chance107="29" />
</group>
<!-- 2nd Class Cubic and Attack Type Skills -->
<group id="2">
<enchant level="1" adena="133650" sp="1036764" chance76="82" chance77="92" chance78="97" chance79="97" chance80="97" chance81="97" chance82="97" chance83="97" chance84="97" chance85="97" chance86="99" chance87="99" chance88="99" chance89="99" chance90="99" chance91="99" chance92="99" chance93="99" chance94="99" chance95="99" chance96="99" chance97="99" chance98="99" chance99="99" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="2" adena="133650" sp="1036764" chance76="80" chance77="90" chance78="95" chance79="95" chance80="95" chance81="95" chance82="95" chance83="95" chance84="95" chance85="95" chance86="97" chance87="97" chance88="97" chance89="97" chance90="97" chance91="97" chance92="97" chance93="97" chance94="97" chance95="98" chance96="98" chance97="98" chance98="98" chance99="98" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="3" adena="133650" sp="1036764" chance76="78" chance77="88" chance78="93" chance79="93" chance80="93" chance81="93" chance82="93" chance83="93" chance84="93" chance85="93" chance86="95" chance87="95" chance88="95" chance89="95" chance90="95" chance91="95" chance92="95" chance93="95" chance94="95" chance95="96" chance96="96" chance97="96" chance98="96" chance99="96" chance100="97" chance101="97" chance102="97" chance103="97" chance104="97" chance105="97" chance106="97" chance107="97" />
<enchant level="4" adena="201690" sp="1088163" chance76="52" chance77="76" chance78="86" chance79="91" chance80="91" chance81="91" chance82="91" chance83="91" chance84="91" chance85="91" chance86="93" chance87="93" chance88="93" chance89="93" chance90="93" chance91="93" chance92="93" chance93="93" chance94="93" chance95="94" chance96="94" chance97="94" chance98="94" chance99="94" chance100="95" chance101="95" chance102="95" chance103="95" chance104="95" chance105="95" chance106="95" chance107="95" />
<enchant level="5" adena="201690" sp="1088163" chance76="50" chance77="74" chance78="84" chance79="89" chance80="89" chance81="89" chance82="89" chance83="89" chance84="89" chance85="89" chance86="91" chance87="91" chance88="91" chance89="91" chance90="91" chance91="91" chance92="91" chance93="91" chance94="91" chance95="92" chance96="92" chance97="92" chance98="92" chance99="92" chance100="93" chance101="93" chance102="93" chance103="93" chance104="93" chance105="93" chance106="93" chance107="93" />
<enchant level="6" adena="201690" sp="1088163" chance76="48" chance77="72" chance78="82" chance79="87" chance80="87" chance81="87" chance82="87" chance83="87" chance84="87" chance85="87" chance86="89" chance87="89" chance88="89" chance89="89" chance90="89" chance91="89" chance92="89" chance93="89" chance94="89" chance95="90" chance96="90" chance97="90" chance98="90" chance99="90" chance100="91" chance101="91" chance102="91" chance103="91" chance104="91" chance105="91" chance106="91" chance107="91" />
<enchant level="7" adena="270540" sp="1141236" chance76="36" chance77="46" chance78="70" chance79="80" chance80="85" chance81="85" chance82="85" chance83="85" chance84="85" chance85="85" chance86="87" chance87="87" chance88="87" chance89="87" chance90="87" chance91="87" chance92="87" chance93="87" chance94="87" chance95="88" chance96="88" chance97="88" chance98="88" chance99="88" chance100="89" chance101="89" chance102="89" chance103="89" chance104="89" chance105="89" chance106="89" chance107="89" />
<enchant level="8" adena="270540" sp="1141236" chance76="34" chance77="44" chance78="68" chance79="78" chance80="83" chance81="83" chance82="83" chance83="83" chance84="83" chance85="83" chance86="85" chance87="85" chance88="85" chance89="85" chance90="85" chance91="85" chance92="85" chance93="85" chance94="85" chance95="86" chance96="86" chance97="86" chance98="86" chance99="86" chance100="87" chance101="87" chance102="87" chance103="87" chance104="87" chance105="87" chance106="87" chance107="87" />
<enchant level="9" adena="270540" sp="1141236" chance76="32" chance77="42" chance78="66" chance79="76" chance80="81" chance81="81" chance82="81" chance83="81" chance84="81" chance85="81" chance86="83" chance87="83" chance88="83" chance89="83" chance90="83" chance91="83" chance92="83" chance93="83" chance94="83" chance95="84" chance96="84" chance97="84" chance98="84" chance99="84" chance100="85" chance101="85" chance102="85" chance103="85" chance104="85" chance105="85" chance106="85" chance107="85" />
<enchant level="10" adena="340200" sp="1224036" chance76="20" chance77="30" chance78="40" chance79="64" chance80="74" chance81="79" chance82="79" chance83="79" chance84="79" chance85="79" chance86="81" chance87="81" chance88="81" chance89="81" chance90="81" chance91="81" chance92="81" chance93="81" chance94="81" chance95="82" chance96="82" chance97="82" chance98="82" chance99="82" chance100="83" chance101="83" chance102="83" chance103="83" chance104="83" chance105="83" chance106="83" chance107="83" />
<enchant level="11" adena="340200" sp="1224036" chance76="18" chance77="28" chance78="38" chance79="62" chance80="72" chance81="77" chance82="77" chance83="77" chance84="77" chance85="77" chance86="79" chance87="79" chance88="79" chance89="79" chance90="79" chance91="79" chance92="79" chance93="79" chance94="79" chance95="80" chance96="80" chance97="80" chance98="80" chance99="80" chance100="81" chance101="81" chance102="81" chance103="81" chance104="81" chance105="81" chance106="81" chance107="81" />
<enchant level="12" adena="340200" sp="1224036" chance76="16" chance77="26" chance78="36" chance79="60" chance80="70" chance81="75" chance82="75" chance83="75" chance84="75" chance85="75" chance86="77" chance87="77" chance88="77" chance89="77" chance90="77" chance91="77" chance92="77" chance93="77" chance94="77" chance95="78" chance96="78" chance97="78" chance98="78" chance99="78" chance100="79" chance101="79" chance102="79" chance103="79" chance104="79" chance105="79" chance106="79" chance107="79" />
<enchant level="13" adena="410670" sp="1281402" chance76="4" chance77="14" chance78="24" chance79="34" chance80="58" chance81="68" chance82="73" chance83="73" chance84="73" chance85="73" chance86="75" chance87="75" chance88="75" chance89="75" chance90="75" chance91="75" chance92="75" chance93="75" chance94="75" chance95="76" chance96="76" chance97="76" chance98="76" chance99="76" chance100="77" chance101="77" chance102="77" chance103="77" chance104="77" chance105="77" chance106="77" chance107="77" />
<enchant level="14" adena="410670" sp="1281402" chance76="2" chance77="12" chance78="22" chance79="32" chance80="56" chance81="66" chance82="71" chance83="71" chance84="71" chance85="71" chance86="73" chance87="73" chance88="73" chance89="73" chance90="73" chance91="73" chance92="73" chance93="73" chance94="73" chance95="74" chance96="74" chance97="74" chance98="74" chance99="74" chance100="75" chance101="75" chance102="75" chance103="75" chance104="75" chance105="75" chance106="75" chance107="75" />
<enchant level="15" adena="410670" sp="1281402" chance76="1" chance77="10" chance78="20" chance79="30" chance80="54" chance81="64" chance82="69" chance83="69" chance84="69" chance85="69" chance86="71" chance87="71" chance88="71" chance89="71" chance90="71" chance91="71" chance92="71" chance93="71" chance94="71" chance95="72" chance96="72" chance97="72" chance98="72" chance99="72" chance100="73" chance101="73" chance102="73" chance103="73" chance104="73" chance105="73" chance106="73" chance107="73" />
<enchant level="16" adena="481950" sp="1370772" chance76="1" chance77="1" chance78="8" chance79="18" chance80="28" chance81="52" chance82="62" chance83="67" chance84="67" chance85="67" chance86="69" chance87="69" chance88="69" chance89="69" chance90="69" chance91="69" chance92="69" chance93="69" chance94="69" chance95="70" chance96="70" chance97="70" chance98="70" chance99="70" chance100="71" chance101="71" chance102="71" chance103="71" chance104="71" chance105="71" chance106="71" chance107="71" />
<enchant level="17" adena="481950" sp="1370772" chance76="1" chance77="1" chance78="6" chance79="16" chance80="26" chance81="50" chance82="60" chance83="65" chance84="65" chance85="65" chance86="67" chance87="67" chance88="67" chance89="67" chance90="67" chance91="67" chance92="67" chance93="67" chance94="67" chance95="68" chance96="68" chance97="68" chance98="68" chance99="68" chance100="69" chance101="69" chance102="69" chance103="69" chance104="69" chance105="69" chance106="69" chance107="69" />
<enchant level="18" adena="481950" sp="1370772" chance76="1" chance77="1" chance78="4" chance79="14" chance80="24" chance81="48" chance82="58" chance83="63" chance84="63" chance85="63" chance86="65" chance87="65" chance88="65" chance89="65" chance90="65" chance91="65" chance92="65" chance93="65" chance94="65" chance95="66" chance96="66" chance97="66" chance98="66" chance99="66" chance100="67" chance101="67" chance102="67" chance103="67" chance104="67" chance105="67" chance106="67" chance107="67" />
<enchant level="19" adena="554040" sp="1432602" chance76="1" chance77="1" chance78="1" chance79="2" chance80="12" chance81="22" chance82="46" chance83="56" chance84="61" chance85="61" chance86="63" chance87="63" chance88="63" chance89="63" chance90="63" chance91="63" chance92="63" chance93="63" chance94="63" chance95="64" chance96="64" chance97="64" chance98="64" chance99="64" chance100="65" chance101="65" chance102="65" chance103="65" chance104="65" chance105="65" chance106="65" chance107="65" />
<enchant level="20" adena="554040" sp="1432602" chance76="1" chance77="1" chance78="1" chance79="1" chance80="10" chance81="20" chance82="44" chance83="54" chance84="59" chance85="59" chance86="61" chance87="61" chance88="61" chance89="61" chance90="61" chance91="61" chance92="61" chance93="61" chance94="61" chance95="62" chance96="62" chance97="62" chance98="62" chance99="62" chance100="63" chance101="63" chance102="63" chance103="63" chance104="63" chance105="63" chance106="63" chance107="63" />
<enchant level="21" adena="554040" sp="1432602" chance76="1" chance77="1" chance78="1" chance79="1" chance80="8" chance81="18" chance82="42" chance83="52" chance84="57" chance85="57" chance86="59" chance87="59" chance88="59" chance89="59" chance90="59" chance91="59" chance92="59" chance93="59" chance94="59" chance95="60" chance96="60" chance97="60" chance98="60" chance99="60" chance100="61" chance101="61" chance102="61" chance103="61" chance104="61" chance105="61" chance106="61" chance107="61" />
<enchant level="22" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="6" chance82="16" chance83="40" chance84="50" chance85="55" chance86="57" chance87="57" chance88="57" chance89="57" chance90="57" chance91="57" chance92="57" chance93="57" chance94="57" chance95="58" chance96="58" chance97="58" chance98="58" chance99="58" chance100="59" chance101="59" chance102="59" chance103="59" chance104="59" chance105="59" chance106="59" chance107="59" />
<enchant level="23" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="4" chance82="14" chance83="38" chance84="48" chance85="53" chance86="55" chance87="55" chance88="55" chance89="55" chance90="55" chance91="55" chance92="55" chance93="55" chance94="55" chance95="56" chance96="56" chance97="56" chance98="56" chance99="56" chance100="57" chance101="57" chance102="57" chance103="57" chance104="57" chance105="57" chance106="57" chance107="57" />
<enchant level="24" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="2" chance82="12" chance83="36" chance84="46" chance85="46" chance86="51" chance87="51" chance88="51" chance89="51" chance90="51" chance91="51" chance92="51" chance93="51" chance94="51" chance95="52" chance96="52" chance97="52" chance98="52" chance99="52" chance100="53" chance101="53" chance102="53" chance103="53" chance104="53" chance105="53" chance106="53" chance107="53" />
<enchant level="25" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="10" chance84="34" chance85="44" chance86="49" chance87="49" chance88="49" chance89="49" chance90="49" chance91="49" chance92="49" chance93="49" chance94="49" chance95="50" chance96="50" chance97="50" chance98="50" chance99="50" chance100="51" chance101="51" chance102="51" chance103="51" chance104="51" chance105="51" chance106="51" chance107="51" />
<enchant level="26" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="8" chance84="32" chance85="42" chance86="47" chance87="47" chance88="47" chance89="47" chance90="47" chance91="47" chance92="47" chance93="47" chance94="47" chance95="48" chance96="48" chance97="48" chance98="48" chance99="48" chance100="49" chance101="49" chance102="49" chance103="49" chance104="49" chance105="49" chance106="49" chance107="49" />
<enchant level="27" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="6" chance84="30" chance85="40" chance86="45" chance87="45" chance88="45" chance89="45" chance90="45" chance91="45" chance92="45" chance93="45" chance94="45" chance95="46" chance96="46" chance97="46" chance98="46" chance99="46" chance100="47" chance101="47" chance102="47" chance103="47" chance104="47" chance105="47" chance106="47" chance107="47" />
<enchant level="28" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="4" chance85="28" chance86="31" chance87="31" chance88="31" chance89="31" chance90="31" chance91="31" chance92="31" chance93="31" chance94="31" chance95="32" chance96="32" chance97="32" chance98="32" chance99="32" chance100="33" chance101="33" chance102="33" chance103="33" chance104="33" chance105="33" chance106="33" chance107="33" />
<enchant level="29" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="2" chance85="26" chance86="29" chance87="29" chance88="29" chance89="29" chance90="29" chance91="29" chance92="29" chance93="29" chance94="29" chance95="30" chance96="30" chance97="30" chance98="30" chance99="30" chance100="31" chance101="31" chance102="31" chance103="31" chance104="31" chance105="31" chance106="31" chance107="31" />
<enchant level="30" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="24" chance86="27" chance87="27" chance88="27" chance89="27" chance90="27" chance91="27" chance92="27" chance93="27" chance94="27" chance95="28" chance96="28" chance97="28" chance98="28" chance99="28" chance100="29" chance101="29" chance102="29" chance103="29" chance104="29" chance105="29" chance106="29" chance107="29" />
</group>
<!-- 3rd Class Buffs, Debuffs, Toggles -->
<group id="5">
<enchant level="1" adena="481950" sp="1370772" chance76="18" chance77="28" chance78="38" chance79="48" chance80="58" chance81="82" chance82="92" chance83="97" chance84="97" chance85="97" chance86="99" chance87="99" chance88="99" chance89="99" chance90="99" chance91="99" chance92="99" chance93="99" chance94="99" chance95="99" chance96="99" chance97="99" chance98="99" chance99="99" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="2" adena="481950" sp="1370772" chance76="16" chance77="26" chance78="36" chance79="46" chance80="56" chance81="80" chance82="90" chance83="95" chance84="95" chance85="95" chance86="97" chance87="97" chance88="97" chance89="97" chance90="97" chance91="97" chance92="97" chance93="97" chance94="97" chance95="98" chance96="98" chance97="98" chance98="98" chance99="98" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="3" adena="481950" sp="1370772" chance76="14" chance77="24" chance78="34" chance79="44" chance80="54" chance81="78" chance82="88" chance83="93" chance84="93" chance85="93" chance86="95" chance87="95" chance88="95" chance89="95" chance90="95" chance91="95" chance92="95" chance93="95" chance94="95" chance95="96" chance96="96" chance97="96" chance98="96" chance99="96" chance100="97" chance101="97" chance102="97" chance103="97" chance104="97" chance105="97" chance106="97" chance107="97" />
<enchant level="4" adena="554040" sp="1432602" chance76="2" chance77="12" chance78="22" chance79="32" chance80="42" chance81="52" chance82="76" chance83="86" chance84="91" chance85="91" chance86="93" chance87="93" chance88="93" chance89="93" chance90="93" chance91="93" chance92="93" chance93="93" chance94="93" chance95="94" chance96="94" chance97="94" chance98="94" chance99="94" chance100="95" chance101="95" chance102="95" chance103="95" chance104="95" chance105="95" chance106="95" chance107="95" />
<enchant level="5" adena="554040" sp="1432602" chance76="1" chance77="10" chance78="20" chance79="30" chance80="40" chance81="50" chance82="74" chance83="84" chance84="89" chance85="89" chance86="91" chance87="91" chance88="91" chance89="91" chance90="91" chance91="91" chance92="91" chance93="91" chance94="91" chance95="92" chance96="92" chance97="92" chance98="92" chance99="92" chance100="93" chance101="93" chance102="93" chance103="93" chance104="93" chance105="93" chance106="93" chance107="93" />
<enchant level="6" adena="554040" sp="1432602" chance76="1" chance77="8" chance78="18" chance79="28" chance80="38" chance81="48" chance82="72" chance83="82" chance84="87" chance85="87" chance86="89" chance87="89" chance88="89" chance89="89" chance90="89" chance91="89" chance92="89" chance93="89" chance94="89" chance95="90" chance96="90" chance97="90" chance98="90" chance99="90" chance100="91" chance101="91" chance102="91" chance103="91" chance104="91" chance105="91" chance106="91" chance107="91" />
<enchant level="7" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="6" chance79="16" chance80="26" chance81="36" chance82="46" chance83="70" chance84="80" chance85="85" chance86="87" chance87="87" chance88="87" chance89="87" chance90="87" chance91="87" chance92="87" chance93="87" chance94="87" chance95="88" chance96="88" chance97="88" chance98="88" chance99="88" chance100="89" chance101="89" chance102="89" chance103="89" chance104="89" chance105="89" chance106="89" chance107="89" />
<enchant level="8" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="4" chance79="14" chance80="24" chance81="34" chance82="44" chance83="68" chance84="78" chance85="83" chance86="85" chance87="85" chance88="85" chance89="85" chance90="85" chance91="85" chance92="85" chance93="85" chance94="85" chance95="86" chance96="86" chance97="86" chance98="86" chance99="86" chance100="87" chance101="87" chance102="87" chance103="87" chance104="87" chance105="87" chance106="87" chance107="87" />
<enchant level="9" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="2" chance79="12" chance80="22" chance81="32" chance82="42" chance83="66" chance84="76" chance85="81" chance86="83" chance87="83" chance88="83" chance89="83" chance90="83" chance91="83" chance92="83" chance93="83" chance94="83" chance95="84" chance96="84" chance97="84" chance98="84" chance99="84" chance100="85" chance101="85" chance102="85" chance103="85" chance104="85" chance105="85" chance106="85" chance107="85" />
<enchant level="10" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="10" chance81="20" chance82="30" chance83="40" chance84="64" chance85="74" chance86="77" chance87="77" chance88="77" chance89="77" chance90="77" chance91="77" chance92="77" chance93="77" chance94="77" chance95="78" chance96="78" chance97="78" chance98="78" chance99="78" chance100="79" chance101="79" chance102="79" chance103="79" chance104="79" chance105="79" chance106="79" chance107="79" />
<enchant level="11" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="8" chance81="18" chance82="28" chance83="38" chance84="62" chance85="72" chance86="75" chance87="75" chance88="75" chance89="75" chance90="75" chance91="75" chance92="75" chance93="75" chance94="75" chance95="76" chance96="76" chance97="76" chance98="76" chance99="76" chance100="77" chance101="77" chance102="77" chance103="77" chance104="77" chance105="77" chance106="77" chance107="77" />
<enchant level="12" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="6" chance81="16" chance82="26" chance83="36" chance84="60" chance85="70" chance86="73" chance87="73" chance88="73" chance89="73" chance90="73" chance91="73" chance92="73" chance93="73" chance94="73" chance95="74" chance96="74" chance97="74" chance98="74" chance99="74" chance100="75" chance101="75" chance102="75" chance103="75" chance104="75" chance105="75" chance106="75" chance107="75" />
<enchant level="13" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="4" chance82="14" chance83="24" chance84="34" chance85="58" chance86="61" chance87="61" chance88="61" chance89="61" chance90="61" chance91="61" chance92="61" chance93="61" chance94="61" chance95="62" chance96="62" chance97="62" chance98="62" chance99="62" chance100="63" chance101="63" chance102="63" chance103="63" chance104="63" chance105="63" chance106="63" chance107="63" />
<enchant level="14" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="2" chance82="12" chance83="22" chance84="32" chance85="56" chance86="59" chance87="59" chance88="59" chance89="59" chance90="59" chance91="59" chance92="59" chance93="59" chance94="59" chance95="60" chance96="60" chance97="60" chance98="60" chance99="60" chance100="61" chance101="61" chance102="61" chance103="61" chance104="61" chance105="61" chance106="61" chance107="61" />
<enchant level="15" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="10" chance83="20" chance84="30" chance85="54" chance86="57" chance87="57" chance88="57" chance89="57" chance90="57" chance91="57" chance92="57" chance93="57" chance94="57" chance95="58" chance96="58" chance97="58" chance98="58" chance99="58" chance100="59" chance101="59" chance102="59" chance103="59" chance104="59" chance105="59" chance106="59" chance107="59" />
<enchant level="16" adena="850500" sp="1838565" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="8" chance84="18" chance85="28" chance86="52" chance87="62" chance88="67" chance89="67" chance90="67" chance91="69" chance92="69" chance93="69" chance94="69" chance95="69" chance96="69" chance97="69" chance98="69" chance99="69" chance100="70" chance101="70" chance102="70" chance103="70" chance104="70" chance105="71" chance106="71" chance107="71" />
<enchant level="17" adena="850500" sp="1838565" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="6" chance84="16" chance85="26" chance86="50" chance87="60" chance88="65" chance89="65" chance90="65" chance91="67" chance92="67" chance93="67" chance94="67" chance95="67" chance96="67" chance97="67" chance98="67" chance99="67" chance100="68" chance101="68" chance102="68" chance103="68" chance104="68" chance105="69" chance106="69" chance107="69" />
<enchant level="18" adena="850500" sp="1838565" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="4" chance84="14" chance85="24" chance86="48" chance87="58" chance88="63" chance89="63" chance90="63" chance91="65" chance92="65" chance93="65" chance94="65" chance95="65" chance96="65" chance97="65" chance98="65" chance99="65" chance100="66" chance101="66" chance102="66" chance103="66" chance104="66" chance105="67" chance106="67" chance107="67" />
<enchant level="19" adena="926640" sp="2020406" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="2" chance85="12" chance86="22" chance87="46" chance88="56" chance89="61" chance90="61" chance91="63" chance92="63" chance93="63" chance94="63" chance95="63" chance96="63" chance97="63" chance98="63" chance99="63" chance100="64" chance101="64" chance102="64" chance103="64" chance104="64" chance105="65" chance106="65" chance107="65" />
<enchant level="20" adena="926640" sp="2020406" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="10" chance86="20" chance87="44" chance88="54" chance89="59" chance90="59" chance91="61" chance92="61" chance93="61" chance94="61" chance95="61" chance96="61" chance97="61" chance98="61" chance99="61" chance100="62" chance101="62" chance102="62" chance103="62" chance104="62" chance105="63" chance106="63" chance107="63" />
<enchant level="21" adena="926640" sp="2020406" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="8" chance86="18" chance87="42" chance88="52" chance89="57" chance90="57" chance91="59" chance92="59" chance93="59" chance94="59" chance95="59" chance96="59" chance97="59" chance98="59" chance99="59" chance100="60" chance101="60" chance102="60" chance103="60" chance104="60" chance105="61" chance106="61" chance107="61" />
<enchant level="22" adena="1003590" sp="2249039" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="6" chance87="16" chance88="40" chance89="50" chance90="55" chance91="57" chance92="57" chance93="57" chance94="57" chance95="57" chance96="57" chance97="57" chance98="57" chance99="57" chance100="58" chance101="58" chance102="58" chance103="58" chance104="58" chance105="59" chance106="59" chance107="59" />
<enchant level="23" adena="1003590" sp="2249039" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="4" chance87="14" chance88="38" chance89="48" chance90="53" chance91="55" chance92="55" chance93="55" chance94="55" chance95="55" chance96="55" chance97="55" chance98="55" chance99="55" chance100="56" chance101="56" chance102="56" chance103="56" chance104="56" chance105="57" chance106="57" chance107="57" />
<enchant level="24" adena="1003590" sp="2249039" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="2" chance87="12" chance88="36" chance89="46" chance90="46" chance91="51" chance92="51" chance93="51" chance94="51" chance95="51" chance96="51" chance97="51" chance98="51" chance99="51" chance100="52" chance101="52" chance102="52" chance103="52" chance104="52" chance105="53" chance106="53" chance107="53" />
<enchant level="25" adena="1081350" sp="2529464" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="10" chance89="34" chance90="44" chance91="49" chance92="49" chance93="49" chance94="49" chance95="49" chance96="49" chance97="49" chance98="49" chance99="49" chance100="50" chance101="50" chance102="50" chance103="50" chance104="50" chance105="51" chance106="51" chance107="51" />
<enchant level="26" adena="1081350" sp="2529464" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="8" chance89="32" chance90="42" chance91="47" chance92="47" chance93="47" chance94="47" chance95="47" chance96="47" chance97="47" chance98="47" chance99="47" chance100="48" chance101="48" chance102="48" chance103="48" chance104="48" chance105="49" chance106="49" chance107="49" />
<enchant level="27" adena="1081350" sp="2529464" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="6" chance89="30" chance90="40" chance91="45" chance92="45" chance93="45" chance94="45" chance95="45" chance96="45" chance97="45" chance98="45" chance99="45" chance100="46" chance101="46" chance102="46" chance103="46" chance104="46" chance105="47" chance106="47" chance107="47" />
<enchant level="28" adena="1159920" sp="2866681" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="1" chance89="4" chance90="28" chance91="31" chance92="31" chance93="31" chance94="31" chance95="31" chance96="31" chance97="31" chance98="31" chance99="31" chance100="32" chance101="32" chance102="32" chance103="32" chance104="32" chance105="33" chance106="33" chance107="33" />
<enchant level="29" adena="1159920" sp="2866681" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="1" chance89="2" chance90="26" chance91="29" chance92="29" chance93="29" chance94="29" chance95="29" chance96="29" chance97="29" chance98="29" chance99="29" chance100="30" chance101="30" chance102="30" chance103="30" chance104="30" chance105="31" chance106="31" chance107="31" />
<enchant level="30" adena="1159920" sp="2866681" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="24" chance91="27" chance92="27" chance93="27" chance94="27" chance95="27" chance96="27" chance97="27" chance98="27" chance99="27" chance100="28" chance101="28" chance102="28" chance103="28" chance104="28" chance105="29" chance106="29" chance107="29" />
</group>
<!-- 3rd Class Attack Type skills -->
<group id="6">
<enchant level="1" adena="481950" sp="1370772" chance76="18" chance77="28" chance78="38" chance79="48" chance80="58" chance81="82" chance82="92" chance83="97" chance84="97" chance85="97" chance86="99" chance87="99" chance88="99" chance89="99" chance90="99" chance91="99" chance92="99" chance93="99" chance94="99" chance95="99" chance96="99" chance97="99" chance98="99" chance99="99" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="2" adena="481950" sp="1370772" chance76="16" chance77="26" chance78="36" chance79="46" chance80="56" chance81="80" chance82="90" chance83="95" chance84="95" chance85="95" chance86="97" chance87="97" chance88="97" chance89="97" chance90="97" chance91="97" chance92="97" chance93="97" chance94="97" chance95="98" chance96="98" chance97="98" chance98="98" chance99="98" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="3" adena="481950" sp="1370772" chance76="14" chance77="24" chance78="34" chance79="44" chance80="54" chance81="78" chance82="88" chance83="93" chance84="93" chance85="93" chance86="95" chance87="95" chance88="95" chance89="95" chance90="95" chance91="95" chance92="95" chance93="95" chance94="95" chance95="96" chance96="96" chance97="96" chance98="96" chance99="96" chance100="97" chance101="97" chance102="97" chance103="97" chance104="97" chance105="97" chance106="97" chance107="97" />
<enchant level="4" adena="554040" sp="1432602" chance76="2" chance77="12" chance78="22" chance79="32" chance80="42" chance81="52" chance82="76" chance83="86" chance84="91" chance85="91" chance86="93" chance87="93" chance88="93" chance89="93" chance90="93" chance91="93" chance92="93" chance93="93" chance94="93" chance95="94" chance96="94" chance97="94" chance98="94" chance99="94" chance100="95" chance101="95" chance102="95" chance103="95" chance104="95" chance105="95" chance106="95" chance107="95" />
<enchant level="5" adena="554040" sp="1432602" chance76="1" chance77="10" chance78="20" chance79="30" chance80="40" chance81="50" chance82="74" chance83="84" chance84="89" chance85="89" chance86="91" chance87="91" chance88="91" chance89="91" chance90="91" chance91="91" chance92="91" chance93="91" chance94="91" chance95="92" chance96="92" chance97="92" chance98="92" chance99="92" chance100="93" chance101="93" chance102="93" chance103="93" chance104="93" chance105="93" chance106="93" chance107="93" />
<enchant level="6" adena="554040" sp="1432602" chance76="1" chance77="8" chance78="18" chance79="28" chance80="38" chance81="48" chance82="72" chance83="82" chance84="87" chance85="87" chance86="89" chance87="89" chance88="89" chance89="89" chance90="89" chance91="89" chance92="89" chance93="89" chance94="89" chance95="90" chance96="90" chance97="90" chance98="90" chance99="90" chance100="91" chance101="91" chance102="91" chance103="91" chance104="91" chance105="91" chance106="91" chance107="91" />
<enchant level="7" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="6" chance79="16" chance80="26" chance81="36" chance82="46" chance83="70" chance84="80" chance85="85" chance86="87" chance87="87" chance88="87" chance89="87" chance90="87" chance91="87" chance92="87" chance93="87" chance94="87" chance95="88" chance96="88" chance97="88" chance98="88" chance99="88" chance100="89" chance101="89" chance102="89" chance103="89" chance104="89" chance105="89" chance106="89" chance107="89" />
<enchant level="8" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="4" chance79="14" chance80="24" chance81="34" chance82="44" chance83="68" chance84="78" chance85="83" chance86="85" chance87="85" chance88="85" chance89="85" chance90="85" chance91="85" chance92="85" chance93="85" chance94="85" chance95="86" chance96="86" chance97="86" chance98="86" chance99="86" chance100="87" chance101="87" chance102="87" chance103="87" chance104="87" chance105="87" chance106="87" chance107="87" />
<enchant level="9" adena="626940" sp="1528794" chance76="1" chance77="1" chance78="2" chance79="12" chance80="22" chance81="32" chance82="42" chance83="66" chance84="76" chance85="81" chance86="83" chance87="83" chance88="83" chance89="83" chance90="83" chance91="83" chance92="83" chance93="83" chance94="83" chance95="84" chance96="84" chance97="84" chance98="84" chance99="84" chance100="85" chance101="85" chance102="85" chance103="85" chance104="85" chance105="85" chance106="85" chance107="85" />
<enchant level="10" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="10" chance81="20" chance82="30" chance83="40" chance84="64" chance85="74" chance86="77" chance87="77" chance88="77" chance89="77" chance90="77" chance91="77" chance92="77" chance93="77" chance94="77" chance95="78" chance96="78" chance97="78" chance98="78" chance99="78" chance100="79" chance101="79" chance102="79" chance103="79" chance104="79" chance105="79" chance106="79" chance107="79" />
<enchant level="11" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="8" chance81="18" chance82="28" chance83="38" chance84="62" chance85="72" chance86="75" chance87="75" chance88="75" chance89="75" chance90="75" chance91="75" chance92="75" chance93="75" chance94="75" chance95="76" chance96="76" chance97="76" chance98="76" chance99="76" chance100="77" chance101="77" chance102="77" chance103="77" chance104="77" chance105="77" chance106="77" chance107="77" />
<enchant level="12" adena="700650" sp="1595259" chance76="1" chance77="1" chance78="1" chance79="1" chance80="6" chance81="16" chance82="26" chance83="36" chance84="60" chance85="70" chance86="73" chance87="73" chance88="73" chance89="73" chance90="73" chance91="73" chance92="73" chance93="73" chance94="73" chance95="74" chance96="74" chance97="74" chance98="74" chance99="74" chance100="75" chance101="75" chance102="75" chance103="75" chance104="75" chance105="75" chance106="75" chance107="75" />
<enchant level="13" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="4" chance82="14" chance83="24" chance84="34" chance85="58" chance86="61" chance87="61" chance88="61" chance89="61" chance90="61" chance91="61" chance92="61" chance93="61" chance94="61" chance95="62" chance96="62" chance97="62" chance98="62" chance99="62" chance100="63" chance101="63" chance102="63" chance103="63" chance104="63" chance105="63" chance106="63" chance107="63" />
<enchant level="14" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="2" chance82="12" chance83="22" chance84="32" chance85="56" chance86="59" chance87="59" chance88="59" chance89="59" chance90="59" chance91="59" chance92="59" chance93="59" chance94="59" chance95="60" chance96="60" chance97="60" chance98="60" chance99="60" chance100="61" chance101="61" chance102="61" chance103="61" chance104="61" chance105="61" chance106="61" chance107="61" />
<enchant level="15" adena="775170" sp="1698516" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="10" chance83="20" chance84="30" chance85="54" chance86="57" chance87="57" chance88="57" chance89="57" chance90="57" chance91="57" chance92="57" chance93="57" chance94="57" chance95="58" chance96="58" chance97="58" chance98="58" chance99="58" chance100="59" chance101="59" chance102="59" chance103="59" chance104="59" chance105="59" chance106="59" chance107="59" />
<enchant level="16" adena="850500" sp="1838565" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="8" chance84="18" chance85="28" chance86="52" chance87="62" chance88="67" chance89="67" chance90="67" chance91="69" chance92="69" chance93="69" chance94="69" chance95="69" chance96="69" chance97="69" chance98="69" chance99="69" chance100="70" chance101="70" chance102="70" chance103="70" chance104="70" chance105="71" chance106="71" chance107="71" />
<enchant level="17" adena="850500" sp="1838565" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="6" chance84="16" chance85="26" chance86="50" chance87="60" chance88="65" chance89="65" chance90="65" chance91="67" chance92="67" chance93="67" chance94="67" chance95="67" chance96="67" chance97="67" chance98="67" chance99="67" chance100="68" chance101="68" chance102="68" chance103="68" chance104="68" chance105="69" chance106="69" chance107="69" />
<enchant level="18" adena="850500" sp="1838565" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="4" chance84="14" chance85="24" chance86="48" chance87="58" chance88="63" chance89="63" chance90="63" chance91="65" chance92="65" chance93="65" chance94="65" chance95="65" chance96="65" chance97="65" chance98="65" chance99="65" chance100="66" chance101="66" chance102="66" chance103="66" chance104="66" chance105="67" chance106="67" chance107="67" />
<enchant level="19" adena="926640" sp="2020406" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="2" chance85="12" chance86="22" chance87="46" chance88="56" chance89="61" chance90="61" chance91="63" chance92="63" chance93="63" chance94="63" chance95="63" chance96="63" chance97="63" chance98="63" chance99="63" chance100="64" chance101="64" chance102="64" chance103="64" chance104="64" chance105="65" chance106="65" chance107="65" />
<enchant level="20" adena="926640" sp="2020406" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="10" chance86="20" chance87="44" chance88="54" chance89="59" chance90="59" chance91="61" chance92="61" chance93="61" chance94="61" chance95="61" chance96="61" chance97="61" chance98="61" chance99="61" chance100="62" chance101="62" chance102="62" chance103="62" chance104="62" chance105="63" chance106="63" chance107="63" />
<enchant level="21" adena="926640" sp="2020406" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="8" chance86="18" chance87="42" chance88="52" chance89="57" chance90="57" chance91="59" chance92="59" chance93="59" chance94="59" chance95="59" chance96="59" chance97="59" chance98="59" chance99="59" chance100="60" chance101="60" chance102="60" chance103="60" chance104="60" chance105="61" chance106="61" chance107="61" />
<enchant level="22" adena="1003590" sp="2249039" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="6" chance87="16" chance88="40" chance89="50" chance90="55" chance91="57" chance92="57" chance93="57" chance94="57" chance95="57" chance96="57" chance97="57" chance98="57" chance99="57" chance100="58" chance101="58" chance102="58" chance103="58" chance104="58" chance105="59" chance106="59" chance107="59" />
<enchant level="23" adena="1003590" sp="2249039" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="4" chance87="14" chance88="38" chance89="48" chance90="53" chance91="55" chance92="55" chance93="55" chance94="55" chance95="55" chance96="55" chance97="55" chance98="55" chance99="55" chance100="56" chance101="56" chance102="56" chance103="56" chance104="56" chance105="57" chance106="57" chance107="57" />
<enchant level="24" adena="1003590" sp="2249039" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="2" chance87="12" chance88="36" chance89="46" chance90="46" chance91="51" chance92="51" chance93="51" chance94="51" chance95="51" chance96="51" chance97="51" chance98="51" chance99="51" chance100="52" chance101="52" chance102="52" chance103="52" chance104="52" chance105="53" chance106="53" chance107="53" />
<enchant level="25" adena="1081350" sp="2529464" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="10" chance89="34" chance90="44" chance91="49" chance92="49" chance93="49" chance94="49" chance95="49" chance96="49" chance97="49" chance98="49" chance99="49" chance100="50" chance101="50" chance102="50" chance103="50" chance104="50" chance105="51" chance106="51" chance107="51" />
<enchant level="26" adena="1081350" sp="2529464" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="8" chance89="32" chance90="42" chance91="47" chance92="47" chance93="47" chance94="47" chance95="47" chance96="47" chance97="47" chance98="47" chance99="47" chance100="48" chance101="48" chance102="48" chance103="48" chance104="48" chance105="49" chance106="49" chance107="49" />
<enchant level="27" adena="1081350" sp="2529464" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="6" chance89="30" chance90="40" chance91="45" chance92="45" chance93="45" chance94="45" chance95="45" chance96="45" chance97="45" chance98="45" chance99="45" chance100="46" chance101="46" chance102="46" chance103="46" chance104="46" chance105="47" chance106="47" chance107="47" />
<enchant level="28" adena="1159920" sp="2866681" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="1" chance89="4" chance90="28" chance91="31" chance92="31" chance93="31" chance94="31" chance95="31" chance96="31" chance97="31" chance98="31" chance99="31" chance100="32" chance101="32" chance102="32" chance103="32" chance104="32" chance105="33" chance106="33" chance107="33" />
<enchant level="29" adena="1159920" sp="2866681" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="1" chance89="2" chance90="26" chance91="29" chance92="29" chance93="29" chance94="29" chance95="29" chance96="29" chance97="29" chance98="29" chance99="29" chance100="30" chance101="30" chance102="30" chance103="30" chance104="30" chance105="31" chance106="31" chance107="31" />
<enchant level="30" adena="1159920" sp="2866681" chance76="1" chance77="1" chance78="1" chance79="1" chance80="1" chance81="1" chance82="1" chance83="1" chance84="1" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="24" chance91="27" chance92="27" chance93="27" chance94="27" chance95="27" chance96="27" chance97="27" chance98="27" chance99="27" chance100="28" chance101="28" chance102="28" chance103="28" chance104="28" chance105="29" chance106="29" chance107="29" />
</group>
<!-- 4rd Class skills GOD -->
<group id="10">
<!-- normal="30297" oblivion="30300" discipline="30299" mastery="30298" -->
<enchant level="1" adena="1332450" sp="2091345" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="85" chance86="86" chance87="87" chance88="88" chance89="89" chance90="90" chance91="91" chance92="92" chance93="93" chance94="94" chance95="95" chance96="96" chance97="97" chance98="98" chance99="99" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="2" adena="3997349" sp="6274037" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="80" chance86="81" chance87="82" chance88="83" chance89="84" chance90="85" chance91="86" chance92="87" chance93="88" chance94="89" chance95="90" chance96="91" chance97="92" chance98="93" chance99="94" chance100="95" chance101="96" chance102="97" chance103="98" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="3" adena="6662250" sp="10456729" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="75" chance86="76" chance87="77" chance88="78" chance89="79" chance90="80" chance91="81" chance92="82" chance93="83" chance94="84" chance95="85" chance96="86" chance97="87" chance98="88" chance99="89" chance100="90" chance101="91" chance102="92" chance103="93" chance104="94" chance105="95" chance106="96" chance107="97" />
<enchant level="4" adena="9327150" sp="14639421" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="70" chance86="71" chance87="72" chance88="73" chance89="74" chance90="75" chance91="76" chance92="77" chance93="78" chance94="79" chance95="80" chance96="81" chance97="82" chance98="83" chance99="84" chance100="85" chance101="86" chance102="87" chance103="88" chance104="89" chance105="90" chance106="91" chance107="92" />
<enchant level="5" adena="11992050" sp="18822133" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="65" chance86="66" chance87="67" chance88="68" chance89="69" chance90="70" chance91="71" chance92="72" chance93="73" chance94="74" chance95="75" chance96="76" chance97="77" chance98="78" chance99="79" chance100="80" chance101="81" chance102="82" chance103="83" chance104="84" chance105="85" chance106="86" chance107="87" />
<enchant level="6" adena="14656950" sp="23004804" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="60" chance86="61" chance87="62" chance88="63" chance89="64" chance90="65" chance91="66" chance92="67" chance93="68" chance94="69" chance95="70" chance96="71" chance97="72" chance98="73" chance99="74" chance100="75" chance101="76" chance102="77" chance103="78" chance104="79" chance105="80" chance106="81" chance107="82" />
<enchant level="7" adena="17321850" sp="27187496" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="55" chance86="56" chance87="57" chance88="58" chance89="59" chance90="60" chance91="61" chance92="62" chance93="63" chance94="64" chance95="65" chance96="66" chance97="67" chance98="68" chance99="69" chance100="70" chance101="71" chance102="72" chance103="73" chance104="74" chance105="75" chance106="81" chance107="77" />
<enchant level="8" adena="19986750" sp="31370188" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="50" chance86="51" chance87="52" chance88="53" chance89="54" chance90="55" chance91="56" chance92="57" chance93="58" chance94="59" chance95="60" chance96="61" chance97="62" chance98="63" chance99="64" chance100="65" chance101="66" chance102="67" chance103="68" chance104="69" chance105="70" chance106="81" chance107="72" />
<enchant level="9" adena="22651650" sp="35552880" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="45" chance86="46" chance87="47" chance88="48" chance89="49" chance90="50" chance91="51" chance92="52" chance93="53" chance94="54" chance95="55" chance96="56" chance97="57" chance98="58" chance99="59" chance100="60" chance101="61" chance102="62" chance103="63" chance104="64" chance105="65" chance106="81" chance107="67" />
<enchant level="10" adena="25316550" sp="39735572" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="40" chance86="41" chance87="42" chance88="43" chance89="44" chance90="45" chance91="46" chance92="47" chance93="48" chance94="49" chance95="50" chance96="51" chance97="52" chance98="53" chance99="54" chance100="55" chance101="56" chance102="57" chance103="58" chance104="59" chance105="60" chance106="81" chance107="62" />
<enchant level="11" adena="27981450" sp="43918264" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="36" chance86="37" chance87="38" chance88="39" chance89="40" chance90="41" chance91="42" chance92="43" chance93="44" chance94="45" chance95="46" chance96="47" chance97="48" chance98="49" chance99="50" chance100="51" chance101="52" chance102="53" chance103="54" chance104="55" chance105="56" chance106="81" chance107="58" />
<enchant level="12" adena="30646350" sp="48100956" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="32" chance86="33" chance87="34" chance88="35" chance89="36" chance90="37" chance91="38" chance92="39" chance93="40" chance94="41" chance95="42" chance96="43" chance97="44" chance98="45" chance99="46" chance100="47" chance101="48" chance102="49" chance103="50" chance104="51" chance105="52" chance106="81" chance107="54" />
<enchant level="13" adena="33311250" sp="52283648" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="28" chance86="29" chance87="30" chance88="31" chance89="32" chance90="33" chance91="34" chance92="35" chance93="36" chance94="37" chance95="38" chance96="39" chance97="40" chance98="41" chance99="42" chance100="43" chance101="44" chance102="45" chance103="46" chance104="47" chance105="48" chance106="81" chance107="50" />
<enchant level="14" adena="35976150" sp="56466340" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="24" chance86="25" chance87="26" chance88="27" chance89="28" chance90="29" chance91="30" chance92="31" chance93="32" chance94="33" chance95="34" chance96="35" chance97="36" chance98="37" chance99="38" chance100="39" chance101="40" chance102="41" chance103="42" chance104="43" chance105="44" chance106="81" chance107="46" />
<enchant level="15" adena="38641050" sp="60649032" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="20" chance86="21" chance87="22" chance88="23" chance89="24" chance90="25" chance91="26" chance92="27" chance93="28" chance94="29" chance95="30" chance96="31" chance97="32" chance98="33" chance99="34" chance100="35" chance101="36" chance102="37" chance103="38" chance104="39" chance105="40" chance106="81" chance107="42" />
<enchant level="16" adena="41305950" sp="64831724" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="17" chance86="18" chance87="19" chance88="20" chance89="21" chance90="22" chance91="23" chance92="24" chance93="25" chance94="26" chance95="27" chance96="28" chance97="29" chance98="30" chance99="31" chance100="32" chance101="33" chance102="34" chance103="35" chance104="36" chance105="37" chance106="81" chance107="39" />
<enchant level="17" adena="43970850" sp="69014416" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="14" chance86="15" chance87="16" chance88="17" chance89="18" chance90="19" chance91="20" chance92="21" chance93="22" chance94="23" chance95="24" chance96="25" chance97="26" chance98="27" chance99="28" chance100="29" chance101="30" chance102="31" chance103="32" chance104="33" chance105="34" chance106="81" chance107="36" />
<enchant level="18" adena="46635750" sp="73197108" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="11" chance86="12" chance87="13" chance88="14" chance89="15" chance90="16" chance91="17" chance92="18" chance93="19" chance94="20" chance95="21" chance96="22" chance97="23" chance98="24" chance99="25" chance100="26" chance101="27" chance102="28" chance103="29" chance104="30" chance105="31" chance106="81" chance107="33" />
<enchant level="19" adena="49300650" sp="77379800" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="8" chance86="9" chance87="10" chance88="11" chance89="12" chance90="13" chance91="14" chance92="15" chance93="16" chance94="17" chance95="18" chance96="19" chance97="20" chance98="21" chance99="22" chance100="23" chance101="24" chance102="25" chance103="26" chance104="27" chance105="28" chance106="81" chance107="30" />
<enchant level="20" adena="51965550" sp="81562492" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="5" chance86="6" chance87="7" chance88="8" chance89="9" chance90="10" chance91="11" chance92="12" chance93="13" chance94="14" chance95="15" chance96="16" chance97="17" chance98="18" chance99="19" chance100="20" chance101="21" chance102="22" chance103="23" chance104="24" chance105="25" chance106="81" chance107="27" />
<enchant level="21" adena="54630450" sp="85745184" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="3" chance86="4" chance87="5" chance88="6" chance89="7" chance90="8" chance91="9" chance92="10" chance93="11" chance94="12" chance95="13" chance96="14" chance97="15" chance98="16" chance99="17" chance100="18" chance101="19" chance102="20" chance103="21" chance104="22" chance105="23" chance106="81" chance107="25" />
<enchant level="22" adena="57295350" sp="89927876" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="2" chance87="3" chance88="4" chance89="5" chance90="6" chance91="7" chance92="8" chance93="9" chance94="10" chance95="11" chance96="12" chance97="13" chance98="14" chance99="15" chance100="16" chance101="17" chance102="18" chance103="19" chance104="20" chance105="21" chance106="81" chance107="23" />
<enchant level="23" adena="59960250" sp="94110568" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="2" chance89="3" chance90="4" chance91="5" chance92="6" chance93="7" chance94="8" chance95="9" chance96="10" chance97="11" chance98="12" chance99="13" chance100="14" chance101="15" chance102="16" chance103="17" chance104="18" chance105="19" chance106="81" chance107="21" />
<enchant level="24" adena="62625150" sp="98293260" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="2" chance91="3" chance92="4" chance93="5" chance94="6" chance95="7" chance96="8" chance97="9" chance98="10" chance99="11" chance100="12" chance101="13" chance102="14" chance103="15" chance104="16" chance105="17" chance106="81" chance107="19" />
<enchant level="25" adena="65290050" sp="102475952" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="2" chance93="3" chance94="4" chance95="5" chance96="6" chance97="7" chance98="8" chance99="9" chance100="10" chance101="11" chance102="12" chance103="13" chance104="14" chance105="15" chance106="81" chance107="17" />
<enchant level="26" adena="67954950" sp="106658644" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="2" chance94="3" chance95="4" chance96="5" chance97="6" chance98="7" chance99="8" chance100="9" chance101="10" chance102="11" chance103="12" chance104="13" chance105="14" chance106="81" chance107="16" />
<enchant level="27" adena="70619850" sp="110841336" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="2" chance95="3" chance96="4" chance97="5" chance98="6" chance99="7" chance100="8" chance101="9" chance102="10" chance103="11" chance104="12" chance105="13" chance106="81" chance107="15" />
<enchant level="28" adena="73284750" sp="115024028" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="1" chance95="2" chance96="3" chance97="4" chance98="5" chance99="6" chance100="7" chance101="8" chance102="9" chance103="10" chance104="11" chance105="12" chance106="81" chance107="14" />
<enchant level="29" adena="75949650" sp="119206720" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="1" chance95="1" chance96="2" chance97="3" chance98="4" chance99="5" chance100="6" chance101="7" chance102="8" chance103="9" chance104="10" chance105="11" chance106="81" chance107="13" />
<enchant level="30" adena="78614550" sp="123389412" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="1" chance95="1" chance96="1" chance97="2" chance98="3" chance99="4" chance100="5" chance101="6" chance102="7" chance103="8" chance104="9" chance105="10" chance106="81" chance107="12" />
</group>
<!-- 4rd Class skills GOD +20-->
<group id="11">
<!-- normal="30297" oblivion="30300" discipline="30299" mastery="30298" -->
<enchant level="1" adena="1332450" sp="2091345" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="85" chance86="86" chance87="87" chance88="88" chance89="89" chance90="90" chance91="91" chance92="92" chance93="93" chance94="94" chance95="95" chance96="96" chance97="97" chance98="98" chance99="99" chance100="99" chance101="99" chance102="99" chance103="99" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="2" adena="3997349" sp="6274037" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="80" chance86="81" chance87="82" chance88="83" chance89="84" chance90="85" chance91="86" chance92="87" chance93="88" chance94="89" chance95="90" chance96="91" chance97="92" chance98="93" chance99="94" chance100="95" chance101="96" chance102="97" chance103="98" chance104="99" chance105="99" chance106="99" chance107="99" />
<enchant level="3" adena="6662250" sp="10456729" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="75" chance86="76" chance87="77" chance88="78" chance89="79" chance90="80" chance91="81" chance92="82" chance93="83" chance94="84" chance95="85" chance96="86" chance97="87" chance98="88" chance99="89" chance100="90" chance101="91" chance102="92" chance103="93" chance104="94" chance105="95" chance106="96" chance107="97" />
<enchant level="4" adena="9327150" sp="14639421" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="70" chance86="71" chance87="72" chance88="73" chance89="74" chance90="75" chance91="76" chance92="77" chance93="78" chance94="79" chance95="80" chance96="81" chance97="82" chance98="83" chance99="84" chance100="85" chance101="86" chance102="87" chance103="88" chance104="89" chance105="90" chance106="91" chance107="92" />
<enchant level="5" adena="11992050" sp="18822133" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="65" chance86="66" chance87="67" chance88="68" chance89="69" chance90="70" chance91="71" chance92="72" chance93="73" chance94="74" chance95="75" chance96="76" chance97="77" chance98="78" chance99="79" chance100="80" chance101="81" chance102="82" chance103="83" chance104="84" chance105="85" chance106="86" chance107="87" />
<enchant level="6" adena="14656950" sp="23004804" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="60" chance86="61" chance87="62" chance88="63" chance89="64" chance90="65" chance91="66" chance92="67" chance93="68" chance94="69" chance95="70" chance96="71" chance97="72" chance98="73" chance99="74" chance100="75" chance101="76" chance102="77" chance103="78" chance104="79" chance105="80" chance106="81" chance107="82" />
<enchant level="7" adena="17321850" sp="27187496" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="55" chance86="56" chance87="57" chance88="58" chance89="59" chance90="60" chance91="61" chance92="62" chance93="63" chance94="64" chance95="65" chance96="66" chance97="67" chance98="68" chance99="69" chance100="70" chance101="71" chance102="72" chance103="73" chance104="74" chance105="75" chance106="81" chance107="77" />
<enchant level="8" adena="19986750" sp="31370188" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="50" chance86="51" chance87="52" chance88="53" chance89="54" chance90="55" chance91="56" chance92="57" chance93="58" chance94="59" chance95="60" chance96="61" chance97="62" chance98="63" chance99="64" chance100="65" chance101="66" chance102="67" chance103="68" chance104="69" chance105="70" chance106="81" chance107="72" />
<enchant level="9" adena="22651650" sp="35552880" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="45" chance86="46" chance87="47" chance88="48" chance89="49" chance90="50" chance91="51" chance92="52" chance93="53" chance94="54" chance95="55" chance96="56" chance97="57" chance98="58" chance99="59" chance100="60" chance101="61" chance102="62" chance103="63" chance104="64" chance105="65" chance106="81" chance107="67" />
<enchant level="10" adena="25316550" sp="39735572" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="40" chance86="41" chance87="42" chance88="43" chance89="44" chance90="45" chance91="46" chance92="47" chance93="48" chance94="49" chance95="50" chance96="51" chance97="52" chance98="53" chance99="54" chance100="55" chance101="56" chance102="57" chance103="58" chance104="59" chance105="60" chance106="81" chance107="62" />
<enchant level="11" adena="27981450" sp="43918264" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="36" chance86="37" chance87="38" chance88="39" chance89="40" chance90="41" chance91="42" chance92="43" chance93="44" chance94="45" chance95="46" chance96="47" chance97="48" chance98="49" chance99="50" chance100="51" chance101="52" chance102="53" chance103="54" chance104="55" chance105="56" chance106="81" chance107="58" />
<enchant level="12" adena="30646350" sp="48100956" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="32" chance86="33" chance87="34" chance88="35" chance89="36" chance90="37" chance91="38" chance92="39" chance93="40" chance94="41" chance95="42" chance96="43" chance97="44" chance98="45" chance99="46" chance100="47" chance101="48" chance102="49" chance103="50" chance104="51" chance105="52" chance106="81" chance107="54" />
<enchant level="13" adena="33311250" sp="52283648" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="28" chance86="29" chance87="30" chance88="31" chance89="32" chance90="33" chance91="34" chance92="35" chance93="36" chance94="37" chance95="38" chance96="39" chance97="40" chance98="41" chance99="42" chance100="43" chance101="44" chance102="45" chance103="46" chance104="47" chance105="48" chance106="81" chance107="50" />
<enchant level="14" adena="35976150" sp="56466340" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="24" chance86="25" chance87="26" chance88="27" chance89="28" chance90="29" chance91="30" chance92="31" chance93="32" chance94="33" chance95="34" chance96="35" chance97="36" chance98="37" chance99="38" chance100="39" chance101="40" chance102="41" chance103="42" chance104="43" chance105="44" chance106="81" chance107="46" />
<enchant level="15" adena="38641050" sp="60649032" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="20" chance86="21" chance87="22" chance88="23" chance89="24" chance90="25" chance91="26" chance92="27" chance93="28" chance94="29" chance95="30" chance96="31" chance97="32" chance98="33" chance99="34" chance100="35" chance101="36" chance102="37" chance103="38" chance104="39" chance105="40" chance106="81" chance107="42" />
<enchant level="16" adena="41305950" sp="64831724" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="17" chance86="18" chance87="19" chance88="20" chance89="21" chance90="22" chance91="23" chance92="24" chance93="25" chance94="26" chance95="27" chance96="28" chance97="29" chance98="30" chance99="31" chance100="32" chance101="33" chance102="34" chance103="35" chance104="36" chance105="37" chance106="81" chance107="39" />
<enchant level="17" adena="43970850" sp="69014416" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="14" chance86="15" chance87="16" chance88="17" chance89="18" chance90="19" chance91="20" chance92="21" chance93="22" chance94="23" chance95="24" chance96="25" chance97="26" chance98="27" chance99="28" chance100="29" chance101="30" chance102="31" chance103="32" chance104="33" chance105="34" chance106="81" chance107="36" />
<enchant level="18" adena="46635750" sp="73197108" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="11" chance86="12" chance87="13" chance88="14" chance89="15" chance90="16" chance91="17" chance92="18" chance93="19" chance94="20" chance95="21" chance96="22" chance97="23" chance98="24" chance99="25" chance100="26" chance101="27" chance102="28" chance103="29" chance104="30" chance105="31" chance106="81" chance107="33" />
<enchant level="19" adena="49300650" sp="77379800" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="8" chance86="9" chance87="10" chance88="11" chance89="12" chance90="13" chance91="14" chance92="15" chance93="16" chance94="17" chance95="18" chance96="19" chance97="20" chance98="21" chance99="22" chance100="23" chance101="24" chance102="25" chance103="26" chance104="27" chance105="28" chance106="81" chance107="30" />
<enchant level="20" adena="51965550" sp="81562492" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="5" chance86="6" chance87="7" chance88="8" chance89="9" chance90="10" chance91="11" chance92="12" chance93="13" chance94="14" chance95="15" chance96="16" chance97="17" chance98="18" chance99="19" chance100="20" chance101="21" chance102="22" chance103="23" chance104="24" chance105="25" chance106="81" chance107="27" />
<enchant level="21" adena="54630450" sp="85745184" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="3" chance86="4" chance87="5" chance88="6" chance89="7" chance90="8" chance91="9" chance92="10" chance93="11" chance94="12" chance95="13" chance96="14" chance97="15" chance98="16" chance99="17" chance100="18" chance101="19" chance102="20" chance103="21" chance104="22" chance105="23" chance106="81" chance107="25" />
<enchant level="22" adena="57295350" sp="89927876" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="2" chance87="3" chance88="4" chance89="5" chance90="6" chance91="7" chance92="8" chance93="9" chance94="10" chance95="11" chance96="12" chance97="13" chance98="14" chance99="15" chance100="16" chance101="17" chance102="18" chance103="19" chance104="20" chance105="21" chance106="81" chance107="23" />
<enchant level="23" adena="59960250" sp="94110568" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="2" chance89="3" chance90="4" chance91="5" chance92="6" chance93="7" chance94="8" chance95="9" chance96="10" chance97="11" chance98="12" chance99="13" chance100="14" chance101="15" chance102="16" chance103="17" chance104="18" chance105="19" chance106="81" chance107="21" />
<enchant level="24" adena="62625150" sp="98293260" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="2" chance91="3" chance92="4" chance93="5" chance94="6" chance95="7" chance96="8" chance97="9" chance98="10" chance99="11" chance100="12" chance101="13" chance102="14" chance103="15" chance104="16" chance105="17" chance106="81" chance107="19" />
<enchant level="25" adena="65290050" sp="102475952" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="2" chance93="3" chance94="4" chance95="5" chance96="6" chance97="7" chance98="8" chance99="9" chance100="10" chance101="11" chance102="12" chance103="13" chance104="14" chance105="15" chance106="81" chance107="17" />
<enchant level="26" adena="67954950" sp="106658644" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="2" chance94="3" chance95="4" chance96="5" chance97="6" chance98="7" chance99="8" chance100="9" chance101="10" chance102="11" chance103="12" chance104="13" chance105="14" chance106="81" chance107="16" />
<enchant level="27" adena="70619850" sp="110841336" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="2" chance95="3" chance96="4" chance97="5" chance98="6" chance99="7" chance100="8" chance101="9" chance102="10" chance103="11" chance104="12" chance105="13" chance106="81" chance107="15" />
<enchant level="28" adena="73284750" sp="115024028" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="1" chance95="2" chance96="3" chance97="4" chance98="5" chance99="6" chance100="7" chance101="8" chance102="9" chance103="10" chance104="11" chance105="12" chance106="81" chance107="14" />
<enchant level="29" adena="75949650" sp="119206720" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="1" chance95="1" chance96="2" chance97="3" chance98="4" chance99="5" chance100="6" chance101="7" chance102="8" chance103="9" chance104="10" chance105="11" chance106="81" chance107="13" />
<enchant level="30" adena="78614550" sp="123389412" chance76="0" chance77="0" chance78="0" chance79="0" chance80="0" chance81="0" chance82="0" chance83="0" chance84="0" chance85="1" chance86="1" chance87="1" chance88="1" chance89="1" chance90="1" chance91="1" chance92="1" chance93="1" chance94="1" chance95="1" chance96="1" chance97="2" chance98="3" chance99="4" chance100="5" chance101="6" chance102="7" chance103="8" chance104="9" chance105="10" chance106="81" chance107="12" />
</group>
<enchant level="1" enchantFailLevel="0">
<sps>
<sp amount="4250000" type="NORMAL" />
<sp amount="4250000" type="BLESSED" />
<sp amount="4250000" type="CHANGE" />
</sps>
<chances>
<chance value="90" type="NORMAL" />
<chance value="90" type="BLESSED" />
</chances>
<items>
<item id="30297" count="1" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="2380000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="2380000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="2380000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="2" enchantFailLevel="0">
<sps>
<sp amount="4550000" type="NORMAL" />
<sp amount="4550000" type="BLESSED" />
<sp amount="4550000" type="CHANGE" />
</sps>
<chances>
<chance value="87" type="NORMAL" />
<chance value="87" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="2540000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="2540000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="2540000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="3" enchantFailLevel="0">
<sps>
<sp amount="4850000" type="NORMAL" />
<sp amount="4850000" type="BLESSED" />
<sp amount="4850000" type="CHANGE" />
</sps>
<chances>
<chance value="84" type="NORMAL" />
<chance value="84" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="2720000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="2720000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="2720000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="4" enchantFailLevel="0">
<sps>
<sp amount="5170000" type="NORMAL" />
<sp amount="5170000" type="BLESSED" />
<sp amount="5170000" type="CHANGE" />
</sps>
<chances>
<chance value="81" type="NORMAL" />
<chance value="81" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="2890000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="2890000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="2890000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="5" enchantFailLevel="0">
<sps>
<sp amount="5420000" type="NORMAL" />
<sp amount="5420000" type="BLESSED" />
<sp amount="5420000" type="CHANGE" />
</sps>
<chances>
<chance value="78" type="NORMAL" />
<chance value="78" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="3030000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="3030000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="3030000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="6" enchantFailLevel="0">
<sps>
<sp amount="5880000" type="NORMAL" />
<sp amount="5880000" type="BLESSED" />
<sp amount="5880000" type="CHANGE" />
</sps>
<chances>
<chance value="75" type="NORMAL" />
<chance value="75" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="3290000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="3290000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="3290000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="7" enchantFailLevel="0">
<sps>
<sp amount="6550000" type="NORMAL" />
<sp amount="6550000" type="BLESSED" />
<sp amount="6550000" type="CHANGE" />
</sps>
<chances>
<chance value="72" type="NORMAL" />
<chance value="72" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="3670000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="3670000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="3670000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="8" enchantFailLevel="0">
<sps>
<sp amount="13340000" type="NORMAL" />
<sp amount="13340000" type="BLESSED" />
<sp amount="13340000" type="CHANGE" />
</sps>
<chances>
<chance value="68" type="NORMAL" />
<chance value="68" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="7470000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="7470000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="7470000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="9" enchantFailLevel="0">
<sps>
<sp amount="18580000" type="NORMAL" />
<sp amount="18580000" type="BLESSED" />
<sp amount="18580000" type="CHANGE" />
</sps>
<chances>
<chance value="64" type="NORMAL" />
<chance value="64" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="10400000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="10400000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="10400000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="10" enchantFailLevel="0">
<sps>
<sp amount="36370000" type="NORMAL" />
<sp amount="36370000" type="BLESSED" />
<sp amount="36370000" type="CHANGE" />
</sps>
<chances>
<chance value="60" type="NORMAL" />
<chance value="60" type="BLESSED" />
</chances>
<items>
<item id="30297" count="0" type="NORMAL" /> <!-- Superior Giant's Codex -->
<item id="57" count="20700000" type="NORMAL" /> <!-- Adena -->
<item id="30298" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery -->
<item id="57" count="20700000" type="BLESSED" /> <!-- Adena -->
<item id="30299" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline -->
<item id="57" count="20700000" type="CHANGE" /> <!-- Adena -->
<item id="37044" count="1" type="IMMORTAL" /> <!-- Immortal Scroll -->
</items>
</enchant>
<enchant level="11" enchantFailLevel="10">
<sps>
<sp amount="15000000" type="NORMAL" />
<sp amount="15000000" type="BLESSED" />
<sp amount="15000000" type="CHANGE" />
</sps>
<chances>
<chance value="89" type="NORMAL" />
<chance value="89" type="BLESSED" />
</chances>
<items>
<item id="46150" count="1" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="8400000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="8400000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="8400000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="12" enchantFailLevel="10">
<sps>
<sp amount="16800000" type="NORMAL" />
<sp amount="16800000" type="BLESSED" />
<sp amount="16800000" type="CHANGE" />
</sps>
<chances>
<chance value="86" type="NORMAL" />
<chance value="86" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="9400000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="9400000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="9400000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="13" enchantFailLevel="10">
<sps>
<sp amount="47000000" type="NORMAL" />
<sp amount="47000000" type="BLESSED" />
<sp amount="47000000" type="CHANGE" />
</sps>
<chances>
<chance value="83" type="NORMAL" />
<chance value="83" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="26300000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="26300000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="26300000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="14" enchantFailLevel="10">
<sps>
<sp amount="56700000" type="NORMAL" />
<sp amount="56700000" type="BLESSED" />
<sp amount="56700000" type="CHANGE" />
</sps>
<chances>
<chance value="80" type="NORMAL" />
<chance value="80" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="31700000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="31700000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="31700000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="15" enchantFailLevel="10">
<sps>
<sp amount="85100000" type="NORMAL" />
<sp amount="85100000" type="BLESSED" />
<sp amount="85100000" type="CHANGE" />
</sps>
<chances>
<chance value="77" type="NORMAL" />
<chance value="77" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="47600000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="47600000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="47600000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="16" enchantFailLevel="10">
<sps>
<sp amount="110500000" type="NORMAL" />
<sp amount="110500000" type="BLESSED" />
<sp amount="110500000" type="CHANGE" />
</sps>
<chances>
<chance value="74" type="NORMAL" />
<chance value="74" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="61800000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="61800000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="61800000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="17" enchantFailLevel="10">
<sps>
<sp amount="358400000" type="NORMAL" />
<sp amount="358400000" type="BLESSED" />
<sp amount="358400000" type="CHANGE" />
</sps>
<chances>
<chance value="71" type="NORMAL" />
<chance value="71" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="200700000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="200700000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="200700000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="18" enchantFailLevel="10">
<sps>
<sp amount="575400000" type="NORMAL" />
<sp amount="575400000" type="BLESSED" />
<sp amount="575400000" type="CHANGE" />
</sps>
<chances>
<chance value="67" type="NORMAL" />
<chance value="67" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="322200000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="322200000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="322200000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="19" enchantFailLevel="10">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="63" type="NORMAL" />
<chance value="63" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="20" enchantFailLevel="10">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="59" type="NORMAL" />
<chance value="59" type="BLESSED" />
</chances>
<items>
<item id="46150" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 1 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46151" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 1 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46152" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 1 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46153" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 1 -->
</items>
</enchant>
<enchant level="21" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="88" type="NORMAL" />
<chance value="88" type="BLESSED" />
</chances>
<items>
<item id="46154" count="1" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="22" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="84" type="NORMAL" />
<chance value="84" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="23" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="80" type="NORMAL" />
<chance value="80" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="24" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="76" type="NORMAL" />
<chance value="76" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="25" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="72" type="NORMAL" />
<chance value="72" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="26" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="68" type="NORMAL" />
<chance value="68" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="27" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="64" type="NORMAL" />
<chance value="64" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="28" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="60" type="NORMAL" />
<chance value="60" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="29" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="56" type="NORMAL" />
<chance value="56" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
<enchant level="30" enchantFailLevel="20">
<sps>
<sp amount="690500000" type="NORMAL" />
<sp amount="690500000" type="BLESSED" />
<sp amount="690500000" type="CHANGE" />
</sps>
<chances>
<chance value="52" type="NORMAL" />
<chance value="52" type="BLESSED" />
</chances>
<items>
<item id="46154" count="0" type="NORMAL" /> <!-- Superior Giant's Codex Chapter 2 -->
<item id="57" count="386700000" type="NORMAL" /> <!-- Adena -->
<item id="46155" count="1" type="BLESSED" /> <!-- Superior Giant's Codex - Mastery Chapter 2 -->
<item id="57" count="386700000" type="BLESSED" /> <!-- Adena -->
<item id="46156" count="1" type="CHANGE" /> <!-- Superior Giant's Codex - Discipline Chapter 2 -->
<item id="57" count="386700000" type="CHANGE" /> <!-- Adena -->
<item id="46157" count="1" type="IMMORTAL" /> <!-- Immortal Scroll Chapter 2 -->
</items>
</enchant>
</list>

View File

@ -752,6 +752,7 @@
<route name="glu_di_fort_ordery" repeat="true" repeatStyle="cycle">
<target id="36035" spawnX="11513" spawnY="150539" spawnZ="-3308" />
<point X="11513" Y="150539" Z="-3308" delay="20" run="false" />
<point X="13142" Y="150096" Z="-3357" delay="0" run="false" />
<point X="17401" Y="149526" Z="-3380" delay="0" run="false" />
<point X="18446" Y="152507" Z="-3381" delay="0" run="false" />
<point X="18333" Y="155024" Z="-3617" delay="15" run="false" />

View File

@ -275,7 +275,7 @@ public final class BeastFarm extends AbstractNpcAI
final SkillData st = SkillData.getInstance();
for (SkillHolder sh : beast.getSkills())
{
nextNpc.addBeastSkill(st.getSkill(sh.getSkillId(), sh.getSkillLvl()));
nextNpc.addBeastSkill(st.getSkill(sh.getSkillId(), sh.getSkillLevel()));
}
Q00020_BringUpWithLove.checkJewelOfInnocence(player);

View File

@ -21,7 +21,6 @@ import java.util.concurrent.ConcurrentHashMap;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
@ -34,6 +33,7 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2GrandBossInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
@ -77,6 +77,10 @@ public final class Orfen extends AbstractNpcAI
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
private static final SkillHolder PARALYSIS = new SkillHolder(4064, 1);
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
private Orfen()
{
final int[] mobs =
@ -244,7 +248,7 @@ public final class Orfen extends AbstractNpcAI
npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(4)], caster.getName());
originalCaster.teleToLocation(npc.getLocation());
npc.setTarget(originalCaster);
npc.doCast(SkillData.getInstance().getSkill(4064, 1));
npc.doCast(PARALYSIS.getSkill());
}
}
return super.onSkillSee(npc, caster, skill, targets, isSummon);
@ -262,7 +266,7 @@ public final class Orfen extends AbstractNpcAI
if ((npcId == RAIKEL_LEOS) && (getRandom(20) == 0))
{
npc.setTarget(attacker);
npc.doCast(SkillData.getInstance().getSkill(4067, 4));
npc.doCast(BLOW.getSkill());
}
else if (npcId == RIBA_IREN)
{
@ -275,7 +279,7 @@ public final class Orfen extends AbstractNpcAI
{
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
npc.setTarget(caller);
npc.doCast(SkillData.getInstance().getSkill(4516, 1));
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onFactionCall(npc, caller, attacker, isSummon);
@ -297,7 +301,7 @@ public final class Orfen extends AbstractNpcAI
npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(3)], attacker.getName());
attacker.teleToLocation(npc.getLocation());
npc.setTarget(attacker);
npc.doCast(SkillData.getInstance().getSkill(4064, 1));
npc.doCast(PARALYSIS.getSkill());
}
}
else if (npcId == RIBA_IREN)
@ -305,7 +309,7 @@ public final class Orfen extends AbstractNpcAI
if (!npc.isCastingNow(SkillCaster::isAnyNormalType) && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2.0)))
{
npc.setTarget(attacker);
npc.doCast(SkillData.getInstance().getSkill(4516, 1));
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);

View File

@ -14,16 +14,16 @@
* 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.group;
package ai.areas.StakatoNest;
import java.util.List;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jmobius.gameserver.util.Broadcast;
@ -81,6 +81,8 @@ public final class StakatoNest extends AbstractNpcAI
// Large Stakato Cocoon
private static final int LARGE_COCOON = 14834;
private static final SkillHolder DEVOUR_SUBORDINATE = new SkillHolder(4484, 1);
private StakatoNest()
{
registerMobs(STAKATO_MOBS);
@ -104,7 +106,7 @@ public final class StakatoNest extends AbstractNpcAI
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, _follower));
mob.doCast(SkillData.getInstance().getSkill(4484, 1));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
_follower.doDie(_follower);
_follower.deleteMe();

View File

@ -21,10 +21,12 @@ import java.util.Map;
import java.util.Map.Entry;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
import com.l2jmobius.gameserver.data.xml.impl.SkillTreesData;
import com.l2jmobius.gameserver.enums.CategoryType;
import com.l2jmobius.gameserver.enums.Race;
import com.l2jmobius.gameserver.enums.UserInfoType;
import com.l2jmobius.gameserver.model.L2SkillLearn;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.base.ClassId;
@ -38,7 +40,6 @@ import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillList;
import com.l2jmobius.gameserver.network.serverpackets.ExChangeToAwakenedClass;
import com.l2jmobius.gameserver.network.serverpackets.ExShowUsm;
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
@ -66,6 +67,7 @@ public final class AwakeningMaster extends AbstractNpcAI
// Items
private static final int SCROLL_OF_AFTERLIFE = 17600;
private static final int CHAOS_POMANDER = 37374;
private static final int CHAOS_POMANDER_DUAL_CLASS = 37375;
private static final Map<CategoryType, Integer> AWAKE_POWER = new HashMap<>();
static
@ -337,11 +339,13 @@ public final class AwakeningMaster extends AbstractNpcAI
break;
}
}
giveItems(player, CHAOS_POMANDER, 2);
giveItems(player, player.isDualClassActive() ? CHAOS_POMANDER_DUAL_CLASS : CHAOS_POMANDER, 2);
SkillTreesData.getInstance().cleanSkillUponAwakening(player);
player.sendPacket(new AcquireSkillList(player));
for (L2SkillLearn skill : SkillTreesData.getInstance().getRaceSkillTree(player.getRace()))
{
player.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);
}
player.sendSkillList();
}

View File

@ -1,8 +1,8 @@
<html><body>Monk of Chaos:<br>
The skills that were once given to each race to balance their power have been taken back. Through the will of Chaos, you can learn the skills of other races as long as you have a Chaos Pomander.<br>
The skills that were once given to each race to balance their power have been taken back. Through the will of Chaos, you can learn the skills of other races as long as you have a Chaos Pomander. <br>
Chaos Pomander is a crystal of power that can combine anything. If you have one, you have been selected by my master to work for a balanced world.<br>
Are you ready for that world? If so, select the Revelation of Chaos, and through it a power appropriate for you.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos LearnRevelationSkills">Receive the Revelation of Chaos.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos CancelRevelationSkills">Reset the Revelation skill.(100,000,000 Adena)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos 33880-2.html">"Who are Monks of Chaos?"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos LearnRevelationSkills">"Okay. I want the Revelation of Chaos."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos CancelRevelationSkills" msg="4099">"I want to reset my Revelation skills." (100,000,000 Adena)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos 33880-2.html">"Can you tell me about yourself?"</Button>
</body></html>

View File

@ -1,6 +1,5 @@
<html><body>Monk of Chaos:<br>
We, the Monks of Chaos, serve the balance.<br>
You may think chaos is a destructive force, but nothing could be further from the truth.
<font color="LEVEL">Chaos</font> seeks to balance light and darkness by reverting them to the original energies.<br>
We who respect his will are the only ones truly free to act on it.
You may think chaos is a destructive force, but nothing could be further from the truth. <font color="LEVEL">Chaos</font> seeks to balance light and darkness by reverting them to the original energies.<br>
We who respect his will are the only ones truly free to act on it.<br>
</body></html>

View File

@ -1,6 +1,6 @@
<html><body>Monk of Chaos:<br>
Nothing could be created or destroyed without chaos. It is the beginning and the end of all things.<br>
We, the Monks of Chaos, understand this. It is the law of the universe.<br>
If you wish, we will reveal our master's will to you.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos 33880-1.html">"So tell me about this Revelation of Chaos."</Button>
Chaos is absolutely necessary for both creation and destruction.<br>
We, the Monks of Chaos, respect Chaos' will and act on it.<br>
If you want, I will tell you about our master's will.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest MonkOfChaos 33880-1.html">"What is the Revelation of Chaos?"</Button>
</body></html>

View File

@ -27,6 +27,7 @@ import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.base.AcquireSkillType;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.variables.PlayerVariables;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.ExAcquirableSkillListByClass;
@ -51,8 +52,8 @@ public final class MonkOfChaos extends AbstractNpcAI
private static final String[] DUALCLASS_REVELATION_VAR_NAMES =
{
"DualclassRevelationSkill1",
"DualclassRevelationSkill2"
PlayerVariables.REVELATION_SKILL_1_DUAL_CLASS,
PlayerVariables.REVELATION_SKILL_2_DUAL_CLASS
};
private MonkOfChaos()
@ -161,13 +162,10 @@ public final class MonkOfChaos extends AbstractNpcAI
giveItems(player, chaosPomander, count);
}
}
htmltext = "canceled.html";
break;
}
}
return htmltext;
}

View File

@ -1,5 +1,5 @@
<html><body>
Are you curious why I'm here in front of this fortress owned by the <font color="LEVEL">%clanName%</font> clan selling my wares, instead of in a nice, safe village?<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 90001000">"No. Please show me items I can use on the battlefield."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">"Yes, I'm a little curious."</Button>
<html><body>
Are you curious why I'm here in front of this fortress owned by the <font color="LEVEL">%clanName%</font> clan selling my wares, instead of in a nice, safe village?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 90001000">"No. Please show me items I can use on the battlefield."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">"Yes, I'm a little curious."</Button>
</body></html>

View File

@ -1,8 +1,7 @@
<html><body>
I'll tell you why. You may be surprised to learn that I am a member of the Tactics Corps. You see this fortress? Places just like it used to protect the people of this land from Monsters and foreign armies. And now? Greedy, grasping fools have occupied the fortress, using its might to extort money from the area residents... So I'm guarding this area, searching for someone worthy to defeat that band of bandits and occupy the fortress on behalf of the citizens here.<br>
You seem a likely candidate... What do you say? You could hire our mercenaries, and with our help I'm sure you'd be able to capture the fortress. Do you want to try?<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager register">Register fortress siege warfare.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager cancel">Cancel registration.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager warInfo">Ask about fortress siege warfare.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-13.html">"Tell me more about the fortress."</Button>
</body></html>
<html><body>I'll tell you why. You may be surprised to learn that I am a member of the Tactics Corps. You see this fortress? Places just like it used to protect the people of this land from Monsters and foreign armies. And now? Greedy, grasping fools have occupied the fortress, using its might to extort money from the area residents... So I'm guarding this area, searching for someone worthy to defeat that band of bandits and occupy the fortress on behalf of the citizens here.<br>
You seem a likely candidate... What do you say? You could hire our mercenaries, and with our help I'm sure you'd be able to capture the fortress. Do you want to try?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager register">"I'd like to register for fortress siege warfare."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager cancel">"I want to cancel my registration."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager warInfo">"Can you tell me about fortress siege warfare?"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-13.html">"Tell me more about the fortress."</Button></body>
</html>

View File

@ -1,6 +1,5 @@
<html><body>
Listen carefully. My lord does not trust the clan currently in possession of this fortress — you can see the effort and expense he has gone to to assemble this mercenary force as a counterweight. Were you to expel the current owners and capture the fortress, I am sure he would be most grateful. (Of course, that probably won't last long -- it's not called a "3-day reign" for nothing...)<br><br>
Oh, forgive my muttering -- just talking to myself, you know. In any event, let me explain a little about the two types of fortresses.<br><br>
Territorial fortresses are built within a territory to defend against monster attacks, while border fortresses are established along the boundary between two territories. If you have a map, take a look for yourself and you'll see what I mean. Blue flags indicate territorial fortresses, whereas red flags indicate border fortresses.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-14.html">Ask him how to conquer a fortress.</Button>
</body></html>
<html><body>
Listen carefully. My lord does not trust the clan currently in possession of this fortress <20> you can see the effort and expense he has gone to assemble this mercenary force as a counterweight. Were you to expel the current owners and capture the fortress, I am sure he would be most grateful. (Of course, that probably won't last long -- it's not called a "3-day reign" for nothing...)<br><br>
Oh, forgive my muttering -- just talking to myself, you know. In any event, let me explain a little about the two types of fortresses.<br><br>Territorial fortresses are built within a territory to defend against monster attacks, while border fortresses are established along the boundary between two territories. If you have a map, take a look for yourself and you'll see what I mean. Blue flags indicate territorial fortresses, whereas red flags indicate border fortresses.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-14.html">"What should I do to conquer a fortress?"</Button>
</body></html>

View File

@ -1,5 +1,5 @@
<html><body>
Knowing a fortress' layout can help you turn the battle to your advantage. Each fortress is essentially a residential area consisting of a large central command post surrounded by several barracks.<br><br>
There are 5 types of barracks: defense barracks, archer barracks, support barracks, officer's barracks and a control center. The number of barracks varies depending on the size of the fortress. Each barracks has a commander who must be defeated in order for you to conquer that barracks. Note that the control center must have a Warsmith or a Maestro in order to handle the machinery.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-15.html">"What happens if I conquer the barracks?"</Button>
<html><body>
Knowing a fortress' layout can help you turn the battle to your advantage. Each fortress is essentially a residential area consisting of a large central command post surrounded by several barracks.<br><br>
There are 5 types of barracks: defense barracks, archer barracks, support barracks, officer's barracks and a control room. The number of barracks varies depending on the size of the fortress. Each barracks has a commander who must be defeated in order for you to conquer that barracks. Note that the control center must have a Warsmith or a Maestro in order to handle the machinery.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-15.html">"What happens if I conquer the barracks?"</Button>
</body></html>

View File

@ -1,5 +1,5 @@
<html><body>
If you conquer all of the barracks, weakening your opponents' defensive system, the command gate will open. Entering the command post, you will find a Flag of Combat on the first floor that symbolizes the authority of the fort. You can end the battle by hanging it from the flag pole on the very highest floor.<br><br>
Be warned, though, that you must conquer the fortress within 10 minutes or all of the barracks' functions will return to normal.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-16.html">"As a mercenary, what do you..."</Button>
<html><body>
If you conquer all of the barracks, weakening your opponents' defensive system, the command gate will open. Entering the command post, you will find a Combat Flag on the first floor that symbolizes the authority of the fort. You can end the battle by hanging it from the flag pole on the very highest floor.<br><br>
Be warned, though, that you must conquer the fortress within 10 minutes or all of the barracks' functions will return to normal.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-16.html">"As a mercenary, what do you..."</Button>
</body></html>

View File

@ -1,5 +1,4 @@
<html><body>
Uh-huh. I occasionally earn a few Adena as mercenary... A single mission earns me 250,000 Adena. Not a particularly expensive fee, considering that I put my life on the line!<br><br>
But I get your point. If there is an enemy clan controlling the fortress, I'll escort our mercenary captain there. He can open the central command gate, so be sure to guard him carefully!<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back</Button>
</body></html>
<html><body>
Uh-huh. I occasionally earn a few Adena as mercenary... A single mission earns me 250,000 Adena. Not a particularly expensive fee, considering that I put my life on the line!<br><br>But I get your point. If there is an enemy clan controlling the fortress, I'll escort our mercenary captain there. He can open the central command gate, so be sure to guard him carefully!<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>
Hmm... I feel a strange energy near the fortress. Be on your guard! I believe that the rebels who once held this place will soon attempt to seize it again!<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back.</Button>
</body></html>
<html><body>
Hmm... I feel a strange energy near the fortress. Be on your guard! I believe that the rebels who once held this place will soon attempt to seize it again!<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>
We don't have any clients at the moment, so we're searching for opportunities. If someone needs us, we can be ready in less than an hour. How about your clan? A mere 250,000 Adena secures our services!<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back.</Button>
</body></html>
<html><body>
We don't have any clients at the moment, so we're searching for opportunities. If someone needs us, we can be ready in less than an hour. How about your clan? A mere 250,000 Adena secures our services!<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>
Ah, we've already been hired by another clan. If you make a request now, we will register your clan to the battle, but don't give us a hard time. I'll return to our headquarters to prepare. Get ready! The battle will begin in 10 minutes.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back.</Button>
</body></html>
<html><body>
Ah, we've already been hired by another clan. If you make a request now, we will register your clan to the battle, but don't give us a hard time. I'll return to our headquarters to prepare. Get ready! The battle will begin in 10 minutes.<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">Back</Button>
</body></html>

View File

@ -1,5 +1,4 @@
<html><body>
Are you curious why I am selling here, since it's not a village?<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 90001000">"No. Please show me items I can use on the battlefield."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">"Yes, I'm a little curious."</Button>
<html><body>Are you curious why I am selling here, since it's not a village?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 90001000">"No. Please show me items I can use on the battlefield."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FortressSiegeManager FortressSiegeManager-11.html">"Yes, I'm a little curious."</Button>
</body></html>

View File

@ -158,6 +158,7 @@ public final class MonumentOfHeroes extends AbstractNpcAI
{
htmltext = "MonumentOfHeroes-weaponNo.html";
}
break;
}
case "heroCirclet":
{

View File

@ -76,7 +76,7 @@ public final class DayNightSpawns extends AbstractNpcAI
}
else
{
group.spawnAll(null);
group.spawnAll();
}
}
else if (DAY_GROUP_NAME.equalsIgnoreCase(group.getName()))
@ -87,7 +87,7 @@ public final class DayNightSpawns extends AbstractNpcAI
}
else
{
group.spawnAll(null);
group.spawnAll();
}
}
});

View File

@ -40,6 +40,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("AddTeleportBookmarkSlot", AddTeleportBookmarkSlot::new);
EffectHandler.getInstance().registerHandler("AreaDamage", AreaDamage::new);
EffectHandler.getInstance().registerHandler("AttackAttribute", AttackAttribute::new);
EffectHandler.getInstance().registerHandler("AttackAttributeAdd", AttackAttributeAdd::new);
EffectHandler.getInstance().registerHandler("AttackBehind", AttackBehind::new);
EffectHandler.getInstance().registerHandler("AttackTrait", AttackTrait::new);
EffectHandler.getInstance().registerHandler("Backstab", Backstab::new);
@ -117,7 +118,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("DispelBySlotProbability", DispelBySlotProbability::new);
EffectHandler.getInstance().registerHandler("DoubleCast", DoubleCast::new);
EffectHandler.getInstance().registerHandler("EnableCloak", EnableCloak::new);
EffectHandler.getInstance().registerHandler("EnemyCharge", EnemyCharge::new);
EffectHandler.getInstance().registerHandler("EnergyAttack", EnergyAttack::new);
EffectHandler.getInstance().registerHandler("EnlargeAbnormalSlot", EnlargeAbnormalSlot::new);
EffectHandler.getInstance().registerHandler("EnlargeSlot", EnlargeSlot::new);
@ -131,7 +131,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("Feed", Feed::new);
EffectHandler.getInstance().registerHandler("Flag", Flag::new);
EffectHandler.getInstance().registerHandler("FlipBlock", FlipBlock::new);
EffectHandler.getInstance().registerHandler("FlyMove", FlyMove::new);
EffectHandler.getInstance().registerHandler("FocusEnergy", FocusEnergy::new);
EffectHandler.getInstance().registerHandler("FocusMomentum", FocusMomentum::new);
EffectHandler.getInstance().registerHandler("FocusMaxMomentum", FocusMaxMomentum::new);
@ -249,6 +248,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("RealDamage", RealDamage::new);
EffectHandler.getInstance().registerHandler("RebalanceHP", RebalanceHP::new);
EffectHandler.getInstance().registerHandler("Recovery", Recovery::new);
EffectHandler.getInstance().registerHandler("ReduceDamage", ReduceDamage::new);
EffectHandler.getInstance().registerHandler("ReduceCancel", ReduceCancel::new);
EffectHandler.getInstance().registerHandler("ReduceDropPenalty", ReduceDropPenalty::new);
EffectHandler.getInstance().registerHandler("ReflectMagic", ReflectMagic::new);
@ -314,7 +314,7 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("TeleportToNpc", TeleportToNpc::new);
EffectHandler.getInstance().registerHandler("TeleportToSummon", TeleportToSummon::new);
EffectHandler.getInstance().registerHandler("TeleportToTarget", TeleportToTarget::new);
EffectHandler.getInstance().registerHandler("ThrowUp", ThrowUp::new);
EffectHandler.getInstance().registerHandler("FlyAway", FlyAway::new);
EffectHandler.getInstance().registerHandler("TransferDamageToPlayer", TransferDamageToPlayer::new);
EffectHandler.getInstance().registerHandler("TransferDamageToSummon", TransferDamageToSummon::new);
EffectHandler.getInstance().registerHandler("TransferHate", TransferHate::new);

View File

@ -0,0 +1,86 @@
/*
* 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 com.l2jmobius.gameserver.enums.AttributeType;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Sdw
*/
public class AttackAttributeAdd extends AbstractEffect
{
private final double _amount;
public AttackAttributeAdd(StatsSet params)
{
_amount = params.getDouble("amount", 0);
}
@Override
public void pump(L2Character effected, Skill skill)
{
Stats stat = Stats.FIRE_POWER;
AttributeType maxAttribute = AttributeType.FIRE;
int maxValue = 0;
for (AttributeType attribute : AttributeType.values())
{
final int attributeValue = effected.getStat().getAttackElementValue(attribute);
if ((attributeValue > 0) && (attributeValue > maxValue))
{
maxAttribute = attribute;
maxValue = attributeValue;
}
}
switch (maxAttribute)
{
case WATER:
{
stat = Stats.WATER_POWER;
break;
}
case WIND:
{
stat = Stats.WIND_POWER;
break;
}
case EARTH:
{
stat = Stats.EARTH_POWER;
break;
}
case HOLY:
{
stat = Stats.HOLY_POWER;
break;
}
case DARK:
{
stat = Stats.DARK_POWER;
break;
}
}
effected.getStat().mergeAdd(stat, _amount);
}
}

View File

@ -37,7 +37,7 @@ public final class CallSkill extends AbstractEffect
public CallSkill(StatsSet params)
{
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1));
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1), params.getInt("skillSubLevel", 0));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
}

View File

@ -35,7 +35,7 @@ public final class CallSkillOnActionTime extends AbstractEffect
public CallSkillOnActionTime(StatsSet params)
{
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1));
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel", 1), params.getInt("skillSubLevel", 0));
setTicks(params.getInt("ticks"));
}

View File

@ -1,109 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.gameserver.GeoData;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation;
import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
/**
* Enemy Charge effect implementation.
*/
public final class EnemyCharge extends AbstractEffect
{
private final int _speed;
private final int _delay;
private final int _animationSpeed;
public EnemyCharge(StatsSet params)
{
_speed = params.getInt("speed", 0);
_delay = params.getInt("delay", 0);
_animationSpeed = params.getInt("animationSpeed", 0);
}
@Override
public boolean isInstant()
{
return true;
}
@Override
public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
{
if (effected.isMovementDisabled())
{
return;
}
// Get current position of the L2Character
final int curX = effector.getX();
final int curY = effector.getY();
final int curZ = effector.getZ();
// Calculate distance (dx,dy) between current position and destination
final double dx = effected.getX() - curX;
final double dy = effected.getY() - curY;
final double dz = effected.getZ() - curZ;
final double distance = Math.sqrt((dx * dx) + (dy * dy));
if (distance > 2000)
{
_log.info("EffectEnemyCharge was going to use invalid coordinates for characters, getEffector: " + curX + "," + curY + " and getEffected: " + effected.getX() + "," + effected.getY());
return;
}
int offset = Math.max((int) distance - skill.getFlyRadius(), 30);
// approximation for moving closer when z coordinates are different
// TODO: handle Z axis movement better
offset -= Math.abs(dz);
if (offset < 5)
{
offset = 5;
}
// If no distance
if ((distance < 1) || ((distance - offset) <= 0))
{
return;
}
// Calculate movement angles needed
final double sin = dy / distance;
final double cos = dx / distance;
// Calculate the new destination with offset included
final int x = curX + (int) ((distance - offset) * cos);
final int y = curY + (int) ((distance - offset) * sin);
final int z = effected.getZ();
final Location destination = GeoData.getInstance().moveCheck(effector.getX(), effector.getY(), effector.getZ(), x, y, z, effector.getInstanceWorld());
effector.broadcastPacket(new FlyToLocation(effector, destination, skill.getFlyType(), _speed, _delay, _animationSpeed));
// maybe is need force set X,Y,Z
effected.setXYZ(destination);
effected.broadcastPacket(new ValidateLocation(effector));
effected.revalidateZone(true);
}
}

View File

@ -43,6 +43,7 @@ public final class EnergyAttack extends AbstractEffect
private final int _criticalChance;
private final boolean _ignoreShieldDefence;
private final boolean _overHit;
private final double _pDefMod;
public EnergyAttack(StatsSet params)
{
@ -51,6 +52,7 @@ public final class EnergyAttack extends AbstractEffect
_ignoreShieldDefence = params.getBoolean("ignoreShieldDefence", false);
_overHit = params.getBoolean("overHit", false);
_chargeConsume = params.getInt("chargeConsume", 0);
_pDefMod = params.getDouble("pDefMod", 1.0);
}
@Override
@ -103,7 +105,7 @@ public final class EnergyAttack extends AbstractEffect
((L2Attackable) effected).overhitEnabled(true);
}
int defence = effected.getPDef();
double defence = effected.getPDef() * _pDefMod;
if (!_ignoreShieldDefence)
{
@ -137,7 +139,7 @@ public final class EnergyAttack extends AbstractEffect
// Skill specific mods.
final double energyChargesBoost = 1 + (charge * 0.1); // 10% bonus damage for each charge used.
final double critMod = critical ? Formulas.calcCritDamage(attacker, effected, skill) : 1;
final double ssmod = (skill.useSoulShot() && attacker.isChargedShot(ShotType.SOULSHOTS)) ? attacker.getStat().getValue(Stats.SHOTS_BONUS, 2) : 1; // 2.04 for dual weapon?
final double ssmod = (skill.useSoulShot() && attacker.isChargedShot(ShotType.SOULSHOTS)) ? (2 * attacker.getStat().getValue(Stats.SHOTS_BONUS)) : 1; // 2.04 for dual weapon?
// ...................________Initial Damage_________...__Charges Additional Damage__...____________________________________
// ATTACK CALCULATION ((77 * ((pAtk * lvlMod) + power) * (1 + (0.1 * chargesConsumed)) / pdef) * skillPower) + skillPowerAdd

View File

@ -30,10 +30,13 @@ import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
/**
* Throw Up effect implementation.
*/
public final class ThrowUp extends AbstractEffect
public final class FlyAway extends AbstractEffect
{
public ThrowUp(StatsSet params)
private final int _radius;
public FlyAway(StatsSet params)
{
_radius = params.getInt("radius");
}
@Override
@ -45,52 +48,18 @@ public final class ThrowUp extends AbstractEffect
@Override
public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
{
final int curX = effected.getX();
final int curY = effected.getY();
final int curZ = effected.getZ();
// Calculate distance between effector and effected current position
final double dx = effector.getX() - curX;
final double dy = effector.getY() - curY;
final double dz = effector.getZ() - curZ;
final int dx = effector.getX() - effected.getX();
final int dy = effector.getY() - effected.getY();
final double distance = Math.sqrt((dx * dx) + (dy * dy));
if (distance > 2000)
{
_log.info("EffectThrow was going to use invalid coordinates for characters, getEffected: " + curX + "," + curY + " and getEffector: " + effector.getX() + "," + effector.getY());
return;
}
int offset = Math.min((int) distance + skill.getFlyRadius(), 1400);
final double nRadius = effector.getCollisionRadius() + effected.getCollisionRadius() + _radius;
double cos;
double sin;
// approximation for moving futher when z coordinates are different
// TODO: handle Z axis movement better
offset += Math.abs(dz);
if (offset < 5)
{
offset = 5;
}
// If no distance
if (distance < 1)
{
return;
}
// Calculate movement angles needed
sin = dy / distance;
cos = dx / distance;
// Calculate the new destination with offset included
final int x = effector.getX() - (int) (offset * cos);
final int y = effector.getY() - (int) (offset * sin);
final int z = effected.getZ();
final int x = (int) (effector.getX() - (nRadius * (dx / distance)));
final int y = (int) (effector.getY() - (nRadius * (dy / distance)));
final int z = effector.getZ();
final Location destination = GeoData.getInstance().moveCheck(effected.getX(), effected.getY(), effected.getZ(), x, y, z, effected.getInstanceWorld());
effected.broadcastPacket(new FlyToLocation(effected, destination, FlyType.THROW_UP));
// TODO: Review.
effected.setXYZ(destination);
effected.broadcastPacket(new ValidateLocation(effected));
effected.revalidateZone(true);

View File

@ -1,86 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.gameserver.GeoData;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
import com.l2jmobius.gameserver.util.Util;
/**
* @author Nos
*/
public class FlyMove extends AbstractEffect
{
private final FlyType _flyType;
private final int _angle;
private final boolean _absoluteAngle; // Use map angle instead of character angle.
private final int _range;
private final boolean _selfPos; // Use the position and heading of yourself to move in the given range
private final int _speed;
private final int _delay;
private final int _animationSpeed;
public FlyMove(StatsSet params)
{
_flyType = params.getEnum("flyType", FlyType.class, FlyType.DUMMY);
_angle = params.getInt("angle", 0);
_absoluteAngle = params.getBoolean("absoluteAngle", false);
_range = params.getInt("range", 20);
_selfPos = params.getBoolean("selfPos", false);
_speed = params.getInt("speed", 0);
_delay = params.getInt("delay", 0);
_animationSpeed = params.getInt("animationSpeed", 0);
}
@Override
public void instant(L2Character effector, L2Character effected, Skill skill, L2ItemInstance item)
{
final L2Character target = _selfPos ? effector : effected;
// Avoid calculating heading towards yourself because it always yields 0. Same results can be achieved with absoluteAngle of 0.
final int heading = (_selfPos || (effector == effected)) ? effector.getHeading() : Util.calculateHeadingFrom(effector, effected);
double angle = _absoluteAngle ? _angle : Util.convertHeadingToDegree(heading);
angle = (angle + _angle) % 360;
if (angle < 0)
{
angle += 360;
}
final double radiansAngle = Math.toRadians(angle);
final int posX = (int) (target.getX() + (_range * Math.cos(radiansAngle)));
final int posY = (int) (target.getY() + (_range * Math.sin(radiansAngle)));
final int posZ = target.getZ();
final Location destination = GeoData.getInstance().moveCheck(effector.getX(), effector.getY(), effector.getZ(), posX, posY, posZ, effector.getInstanceWorld());
effector.broadcastPacket(new FlyToLocation(effector, destination, _flyType, _speed, _delay, _animationSpeed));
effector.setXYZ(destination);
effected.revalidateZone(true);
}
@Override
public boolean isInstant()
{
return true;
}
}

View File

@ -1,31 +1,31 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Sdw
*/
public class JewelSlot extends AbstractStatAddEffect
{
public JewelSlot(StatsSet params)
{
super(params, Stats.BROOCH_JEWELS);
}
}
/*
* 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 com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
* @author Sdw
*/
public class JewelSlot extends AbstractStatAddEffect
{
public JewelSlot(StatsSet params)
{
super(params, Stats.BROOCH_JEWELS);
}
}

View File

@ -44,6 +44,7 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
private final double _criticalChance;
private final boolean _ignoreShieldDefence;
private final boolean _overHit;
private final double _pDefMod;
private final Map<WeaponType, Double> _weaponBonus = new HashMap<>();
@ -53,6 +54,7 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
_criticalChance = params.getDouble("criticalChance", 0);
_ignoreShieldDefence = params.getBoolean("ignoreShieldDefence", false);
_overHit = params.getBoolean("overHit", false);
_pDefMod = params.getDouble("pDefMod", 1.0);
for (WeaponType weapon : WeaponType.values())
{
@ -106,7 +108,7 @@ public final class PhysicalAttackWeaponBonus extends AbstractEffect
}
final double attack = effector.getPAtk();
double defence = effected.getPDef();
double defence = effected.getPDef() * _pDefMod;
if (!_ignoreShieldDefence)
{

View File

@ -137,7 +137,7 @@ public final class PhysicalSoulAttack extends AbstractEffect
final double wpnMod = effector.getAttackType().isRanged() ? 70 : (70 * 1.10113);
final double rangedBonus = effector.getAttackType().isRanged() ? (attack + _power) : 0;
final double critMod = critical ? Formulas.calcCritDamage(effector, effected, skill) : 1;
final double ssmod = (skill.useSoulShot() && effector.isChargedShot(ShotType.SOULSHOTS)) ? effector.getStat().getValue(Stats.SHOTS_BONUS, 2) : 1; // 2.04 for dual weapon?
final double ssmod = (skill.useSoulShot() && effector.isChargedShot(ShotType.SOULSHOTS)) ? (2 * effector.getStat().getValue(Stats.SHOTS_BONUS)) : 1; // 2.04 for dual weapon?
final double soulsMod = 1 + (souls * 0.04); // Souls Formula (each soul increase +4%)
// ...................____________Melee Damage_____________......................................___________________Ranged Damage____________________

View File

@ -0,0 +1,63 @@
/*
* 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 com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
/**
* @author Sdw
*/
public class ReduceDamage extends AbstractEffect
{
private final double _amount;
public ReduceDamage(StatsSet params)
{
_amount = params.getDouble("amount");
}
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
{
// DOT effects are not taken into account.
if (event.isDamageOverTime())
{
return null;
}
final double newDamage = event.getDamage() * (_amount / 100);
return new DamageReturn(false, true, false, newDamage);
}
@Override
public void onExit(BuffInfo info)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
{
info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@ -87,7 +87,7 @@ public final class TriggerSkillByAttack extends AbstractEffect
public void onAttackEvent(OnCreatureDamageDealt event)
{
if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)) || (!_allowNormalAttack && !_allowSkillAttack))
if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0)) || (!_allowNormalAttack && !_allowSkillAttack))
{
return;
}

View File

@ -57,7 +57,7 @@ public final class TriggerSkillByAvoid extends AbstractEffect
public void onAvoidEvent(OnCreatureAttackAvoid event)
{
if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)))
if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0)))
{
return;
}

View File

@ -61,7 +61,7 @@ public final class TriggerSkillByDamage extends AbstractEffect
public void onDamageReceivedEvent(OnCreatureDamageReceived event)
{
if (event.isDamageOverTime() || (_chance == 0) || (_skill.getSkillLvl() == 0))
if (event.isDamageOverTime() || (_chance == 0) || (_skill.getSkillLevel() == 0))
{
return;
}

View File

@ -16,17 +16,23 @@
*/
package handlers.effecthandlers;
import java.util.logging.Level;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.enums.InstanceType;
import com.l2jmobius.gameserver.handler.TargetHandler;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDeath;
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
import com.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
/**
* Trigger Skill By Death Blow effect implementation.
@ -34,43 +40,76 @@ import com.l2jmobius.gameserver.model.skills.SkillCaster;
*/
public final class TriggerSkillByDeathBlow extends AbstractEffect
{
private final int _minAttackerLevel;
private final int _maxAttackerLevel;
private final int _chance;
private final SkillHolder _skill;
private final TargetType _targetType;
private final InstanceType _attackerType;
public TriggerSkillByDeathBlow(StatsSet params)
{
_minAttackerLevel = params.getInt("minAttackerLevel", 1);
_maxAttackerLevel = params.getInt("maxAttackerLevel", 127);
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel"));
_targetType = params.getEnum("targetType", TargetType.class, TargetType.SELF);
_attackerType = params.getEnum("attackerType", InstanceType.class, InstanceType.L2Character);
}
public TerminateReturn onCreatureDeath(OnCreatureDeath event)
public void onDamageReceivedEvent(OnCreatureDamageReceived event)
{
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)))
if (event.getDamage() < event.getTarget().getCurrentHp())
{
return new TerminateReturn(false, false, false);
return;
}
if (Rnd.get(100) > _chance)
if ((_chance == 0) || (_skill.getSkillLevel() == 0))
{
return new TerminateReturn(false, false, false);
return;
}
if (event.getAttacker() == event.getTarget())
{
return;
}
if ((event.getAttacker().getLevel() < _minAttackerLevel) || (event.getAttacker().getLevel() > _maxAttackerLevel))
{
return;
}
if (((_chance < 100) && (Rnd.get(100) > _chance)) || !event.getAttacker().getInstanceType().isType(_attackerType))
{
return;
}
final Skill triggerSkill = _skill.getSkill();
L2Object target = null;
try
{
target = TargetHandler.getInstance().getHandler(_targetType).getTarget(event.getTarget(), event.getAttacker(), triggerSkill, false, false, false);
}
catch (Exception e)
{
_log.log(Level.WARNING, "Exception in ITargetTypeHandler.getTarget(): " + e.getMessage(), e);
}
SkillCaster.triggerCast(event.getTarget(), event.getTarget(), triggerSkill);
return new TerminateReturn(true, true, true);
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(event.getTarget(), (L2Character) target, triggerSkill);
}
}
@Override
public void onExit(BuffInfo info)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DEATH, listener -> listener.getOwner() == this);
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
{
info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DEATH, (OnCreatureDeath event) -> onCreatureDeath(event), this));
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@ -45,7 +45,7 @@ public final class TriggerSkillByKill extends AbstractEffect
public void onCreatureKilled(OnCreatureKilled event, L2Character target)
{
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)))
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0)))
{
return;
}

View File

@ -114,7 +114,7 @@ public final class TriggerSkillByMagicType extends AbstractEffect
@Override
public void onStart(BuffInfo info)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0) || (_magicTypes.length == 0))
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}

View File

@ -48,9 +48,9 @@ public final class TriggerSkillBySkill extends AbstractEffect
public TriggerSkillBySkill(StatsSet params)
{
_castSkillId = params.getInt("castSkillId", 0);
_castSkillId = params.getInt("castSkillId");
_chance = params.getInt("chance", 100);
_skill = new SkillHolder(params.getInt("skillId", 0), params.getInt("skillLevel", 0));
_skill = new SkillHolder(params.getInt("skillId"), params.getInt("skillLevel"));
_skillLevelScaleTo = params.getInt("skillLevelScaleTo", 0);
_targetType = params.getEnum("targetType", TargetType.class, TargetType.TARGET);
}
@ -67,9 +67,9 @@ public final class TriggerSkillBySkill extends AbstractEffect
info.getEffected().removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
}
public void onSkillUseEvent(OnCreatureSkillFinishCast event)
private void onSkillUseEvent(OnCreatureSkillFinishCast event)
{
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0) || (_castSkillId == 0)))
if ((_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_castSkillId == 0)))
{
return;
}

View File

@ -77,9 +77,9 @@ public final class TriggerSkillBySkillAttack extends AbstractEffect
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_DEALT, listener -> listener.getOwner() == this);
}
public void onAttackEvent(OnCreatureDamageDealt event)
private void onAttackEvent(OnCreatureDamageDealt event)
{
if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLvl() == 0)) || (_attackSkill.getSkillId() == 0))
if (event.isDamageOverTime() || (_chance == 0) || ((_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0)) || (_attackSkill.getSkillId() == 0))
{
return;
}

View File

@ -121,7 +121,7 @@ public class BeastSoulShot implements IItemHandler
if (!pet.isChargedShot(ShotType.SOULSHOTS))
{
pet.setChargedShot(ShotType.SOULSHOTS, true);
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
}
}
@ -130,7 +130,7 @@ public class BeastSoulShot implements IItemHandler
if (!s.isChargedShot(ShotType.SOULSHOTS))
{
s.setChargedShot(ShotType.SOULSHOTS, true);
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
}
});
return true;

View File

@ -123,7 +123,7 @@ public class BeastSpiritShot implements IItemHandler
if (!pet.isChargedShot(shotType))
{
pet.setChargedShot(shotType, true);
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(pet, pet, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
}
}
@ -132,7 +132,7 @@ public class BeastSpiritShot implements IItemHandler
if (!s.isChargedShot(shotType))
{
s.setChargedShot(shotType, true);
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeOwner, new MagicSkillUse(s, s, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
}
});
return true;

View File

@ -101,7 +101,7 @@ public class BlessedSpiritShot implements IItemHandler
{
activeChar.sendPacket(SystemMessageId.YOUR_SPIRITSHOT_HAS_BEEN_ENABLED);
}
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
return true;
}
}

View File

@ -88,7 +88,7 @@ public class FishShots implements IItemHandler
return false;
}
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
activeChar.setTarget(oldTarget);
return true;
}

View File

@ -49,7 +49,7 @@ public class PetFood implements IItemHandler
final List<ItemSkillHolder> skills = item.getItem().getSkills(ItemSkillType.NORMAL);
if (skills != null)
{
skills.forEach(holder -> useFood(playable, holder.getSkillId(), holder.getSkillLvl(), item));
skills.forEach(holder -> useFood(playable, holder.getSkillId(), holder.getSkillLevel(), item));
}
return true;
}

View File

@ -113,7 +113,7 @@ public class SoulShots implements IItemHandler
{
activeChar.sendPacket(SystemMessageId.YOUR_SOULSHOTS_ARE_ENABLED);
}
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
return true;
}
}

View File

@ -101,7 +101,7 @@ public class SpiritShot implements IItemHandler
{
activeChar.sendPacket(SystemMessageId.YOUR_SPIRITSHOT_HAS_BEEN_ENABLED);
}
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLvl(), 0, 0), 600));
skills.forEach(holder -> Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, activeChar, holder.getSkillId(), holder.getSkillLevel(), 0, 0), 600));
return true;
}
}

View File

@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
/**
* Any friendly selected target. Works on dead targets or doors as well. Unable to force use.
@ -74,7 +73,7 @@ public class EnemyNot implements ITargetTypeHandler
}
}
if ((skill.getFlyType() == FlyType.CHARGE) && !GeoData.getInstance().canMove(activeChar, target))
if ((skill.isFlyType()) && !GeoData.getInstance().canMove(activeChar, target))
{
if (sendMessage)
{

View File

@ -20,6 +20,7 @@ import com.l2jmobius.gameserver.GeoData;
import com.l2jmobius.gameserver.handler.ITargetTypeHandler;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
import com.l2jmobius.gameserver.network.SystemMessageId;
@ -60,14 +61,14 @@ public class NpcBody implements ITargetTypeHandler
return null;
}
final L2Character target = (L2Character) selectedTarget;
final L2Npc npc = (L2Npc) selectedTarget;
if (target.isDead())
if (npc.isDead())
{
// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent.
if (dontMove)
{
if (activeChar.calculateDistance(target, false, false) > skill.getCastRange())
if (activeChar.calculateDistance(npc, false, false) > skill.getCastRange())
{
if (sendMessage)
{
@ -79,7 +80,7 @@ public class NpcBody implements ITargetTypeHandler
}
// Geodata check when character is within range.
if (!GeoData.getInstance().canSeeTarget(activeChar, target))
if (!GeoData.getInstance().canSeeTarget(activeChar, npc))
{
if (sendMessage)
{
@ -89,7 +90,7 @@ public class NpcBody implements ITargetTypeHandler
return null;
}
return selectedTarget;
return npc;
}
// If target is not dead or not player/pet it will not even bother to walk within range, unlike Enemy target type.

View File

@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
/**
* Any friendly selected target or enemy if force use. Works on dead targets or doors as well.
@ -76,7 +75,7 @@ public class Target implements ITargetTypeHandler
}
}
if ((skill.getFlyType() == FlyType.CHARGE) && !GeoData.getInstance().canMove(activeChar, target))
if ((skill.isFlyType()) && !GeoData.getInstance().canMove(activeChar, target))
{
if (sendMessage)
{

View File

@ -77,9 +77,9 @@ public class Fan implements IAffectScopeHandler
};
// Add object of origin since its skipped in the forEachVisibleObjectInRange method.
if (target.isCharacter() && filter.test((L2Character) target))
if (filter.test(activeChar))
{
action.accept(target);
action.accept(activeChar);
}
// Check and add targets.

View File

@ -29,6 +29,7 @@ import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.targets.AffectObject;
import com.l2jmobius.gameserver.model.skills.targets.AffectScope;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
@ -53,11 +54,8 @@ public class PointBlank implements IAffectScopeHandler
{
return false;
}
if (c.isDead())
{
return false;
}
if ((affectObject != null) && !affectObject.checkAffectedObject(activeChar, c))
// XXX : Find a proper way to fix, if it's not proper.
if ((affectObject != null) && (!c.isDead() || (skill.getAffectObject() == AffectObject.OBJECT_DEAD_NPC_BODY)) && !affectObject.checkAffectedObject(activeChar, c))
{
return false;
}

View File

@ -90,9 +90,9 @@ public class Square implements IAffectScopeHandler
};
// Add object of origin since its skipped in the forEachVisibleObjectInRange method.
if (target.isCharacter() && filter.test((L2Character) target))
if (filter.test(activeChar))
{
action.accept(target);
action.accept(activeChar);
}
// Check and add targets.

View File

@ -18,6 +18,7 @@ package instances;
import java.util.List;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.enums.InstanceReenterType;
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
import com.l2jmobius.gameserver.model.Location;
@ -38,6 +39,27 @@ import ai.AbstractNpcAI;
*/
public abstract class AbstractInstance extends AbstractNpcAI
{
private final int[] _templateIds;
public AbstractInstance(int... templateId)
{
if (templateId.length == 0)
{
throw new IllegalStateException("No template ids were provided!");
}
_templateIds = templateId;
}
public int[] getTemplateId()
{
return _templateIds;
}
public boolean isInInstance(Instance instance)
{
return (instance != null) && CommonUtil.contains(_templateIds, instance.getTemplateId());
}
/**
* Get instance world associated with {@code player}.<br>
* @param player player who wants get instance world

View File

@ -54,6 +54,7 @@ public final class BaylorWarzone extends AbstractInstance
public BaylorWarzone()
{
super(TEMPLATE_ID);
addStartNpc(ENTRANCE_PORTAL);
addTalkId(ENTRANCE_PORTAL);
addInstanceCreatedId(TEMPLATE_ID);
@ -77,7 +78,7 @@ public final class BaylorWarzone extends AbstractInstance
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
{
final Instance world = npc.getInstanceWorld();
if (isBylorInstance(world))
if (isInInstance(world))
{
switch (event)
{
@ -265,7 +266,7 @@ public final class BaylorWarzone extends AbstractInstance
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
{
final Instance world = npc.getInstanceWorld();
if (isBylorInstance(world))
if (isInInstance(world))
{
world.getAliveNpcs(INVISIBLE_NPC_1, INVISIBLE_NPC_2, INVISIBLE_NPC_3).forEach(L2Npc::deleteMe);
world.getAliveNpcs(PRISON_GUARD).forEach(guard -> guard.doDie(null));
@ -289,7 +290,7 @@ public final class BaylorWarzone extends AbstractInstance
final L2Npc npc = (L2Npc) event.getTarget();
final Instance world = npc.getInstanceWorld();
if (isBylorInstance(world))
if (isInInstance(world))
{
if (world.getAliveNpcs(BAYLOR).isEmpty())
{
@ -308,7 +309,7 @@ public final class BaylorWarzone extends AbstractInstance
final L2Npc npc = (L2Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if (isBylorInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
if (isInInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
{
npc.setScriptValue(1);
getTimers().addTimer("START_SCENE_01", 5000, npc, null);
@ -325,11 +326,6 @@ public final class BaylorWarzone extends AbstractInstance
return super.onSpawn(npc);
}
private boolean isBylorInstance(Instance instance)
{
return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID);
}
public static void main(String[] args)
{
new BaylorWarzone();

View File

@ -89,6 +89,7 @@ public final class CastleDungeon extends AbstractInstance
public CastleDungeon()
{
super(NPCS.values().stream().mapToInt(Integer::valueOf).toArray());
// NPCs
addStartNpc(NPCS.keySet());
addTalkId(NPCS.keySet());

View File

@ -124,6 +124,7 @@ public final class CavernOfThePirateCaptain extends AbstractInstance
public CavernOfThePirateCaptain()
{
super(TEMPLATE_ID_60, TEMPLATE_ID_83);
addStartNpc(PATHFINDER);
addTalkId(PATHFINDER);
addKillId(ZAKEN_60, ZAKEN_83);

View File

@ -91,6 +91,7 @@ public final class ChamberOfDelusion extends AbstractInstance
public ChamberOfDelusion()
{
super(ENTRANCE_GATEKEEPER.values().stream().mapToInt(Integer::valueOf).toArray());
addStartNpc(ENTRANCE_GATEKEEPER.keySet());
addStartNpc(ROOM_GATEKEEPERS);
addTalkId(ENTRANCE_GATEKEEPER.keySet());

View File

@ -110,6 +110,7 @@ public final class DarkCloudMansion extends AbstractInstance
public DarkCloudMansion()
{
super(TEMPLATE_ID);
addStartNpc(YIYEN);
addFirstTalkId(MONOLITH, TRUTH, FAITH, ADVERSITY, ADVENTURE);
addTalkId(YIYEN, TRUTH);
@ -372,8 +373,10 @@ public final class DarkCloudMansion extends AbstractInstance
break;
}
case 9:
{
handleRoomE(world, npc);
break;
}
}
}
return null;

View File

@ -38,6 +38,7 @@ public final class EvasHiddenSpace extends AbstractInstance
public EvasHiddenSpace()
{
super(TEMPLATE_ID);
addStartNpc(CERENAS);
addTalkId(CERENAS, EVAS_AVATAR);
addFirstTalkId(EVAS_AVATAR);

View File

@ -187,6 +187,7 @@ public final class EvilIncubator extends AbstractInstance
public EvilIncubator()
{
super(TEMPLATE_ID);
addStartNpc(VANGUARD_MEMBER);
addTalkId(VANGUARD_MEMBER, ADOLPH, ALICE, BARTON, HAYUK, ELIYAH);
addFirstTalkId(ADOLPH, ALICE, BARTON, HAYUK, ELIYAH);

View File

@ -59,6 +59,7 @@ public final class FaeronTrainingGrounds1 extends AbstractInstance
public FaeronTrainingGrounds1()
{
super(TEMPLATE_ID);
addStartNpc(AYANTHE, AYANTHE_2);
addFirstTalkId(AYANTHE_2);
addTalkId(AYANTHE, AYANTHE_2);

View File

@ -59,6 +59,7 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance
public FaeronTrainingGrounds2()
{
super(TEMPLATE_ID);
addStartNpc(KATALIN, KATALIN_2);
addFirstTalkId(KATALIN_2);
addTalkId(KATALIN, KATALIN_2);
@ -78,11 +79,15 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance
switch (event)
{
case "enter_instance":
{
enterInstance(player, npc, TEMPLATE_ID);
break;
}
case "exit_instance":
{
finishInstance(player, 0);
break;
}
case "33945-03.html":
{
if (qs.isCond(6))

View File

@ -46,7 +46,6 @@ public final class FortressDungeon extends AbstractInstance
{
// NPCs
private static final Map<Integer, Integer> NPCS = new HashMap<>();
static
{
NPCS.put(35666, 22); // Shanty
@ -103,6 +102,7 @@ public final class FortressDungeon extends AbstractInstance
public FortressDungeon()
{
super(NPCS.values().stream().mapToInt(Integer::valueOf).toArray());
// NPCs
addStartNpc(NPCS.keySet());
addTalkId(NPCS.keySet());

View File

@ -51,6 +51,7 @@ public final class FortressOfTheDead extends AbstractInstance
public FortressOfTheDead()
{
super(TEMPLATE_ID);
addStartNpc(BROKEN_BOOKSHELF);
addFirstTalkId(KAIN_VAN_HALTER);
addTalkId(BROKEN_BOOKSHELF, KAIN_VAN_HALTER, MYSTERIOUS_WIZARD);
@ -69,7 +70,7 @@ public final class FortressOfTheDead extends AbstractInstance
else
{
final Instance world = npc.getInstanceWorld();
if (isFotDInstance(world))
if (isInInstance(world))
{
switch (event)
{
@ -138,7 +139,7 @@ public final class FortressOfTheDead extends AbstractInstance
{
final Instance world = npc.getInstanceWorld();
if (isFotDInstance(world))
if (isInInstance(world))
{
if (npc.getId() == VAMPIRIC_SOLDIER)
{
@ -157,11 +158,6 @@ public final class FortressOfTheDead extends AbstractInstance
return super.onKill(npc, player, isSummon);
}
private boolean isFotDInstance(Instance instance)
{
return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID);
}
public static void main(String[] args)
{
new FortressOfTheDead();

View File

@ -94,6 +94,7 @@ public final class HarnakUndergroundRuins extends AbstractInstance
public HarnakUndergroundRuins()
{
super(TEMPLATE_ID);
registerMobs(KRAKIA_BATHUS, KRAKIA_CARCASS, KRAKIA_LOTUS, RAKZAN, WEISS_KHAN, BAMONTI, SEKNUS, WEISS_ELE, HARNAKS_WRAITH);
addSeeCreatureId(POWER_SOURCES);
addEnterZoneId(ZONE_ROOM_2, ZONE_ROOM_3);

View File

@ -56,6 +56,7 @@ public final class IceQueensCastle extends AbstractInstance
public IceQueensCastle()
{
super(TEMPLATE_ID);
addStartNpc(JINIA);
addTalkId(JINIA);
addSeeCreatureId(BATTALION_LEADER, LEGIONNAIRE, MERCENARY_ARCHER);

View File

@ -150,6 +150,7 @@ public final class IceQueensCastleBattle extends AbstractInstance
public IceQueensCastleBattle()
{
super(TEMPLATE_ID_EASY, TEMPLATE_ID_HARD);
addStartNpc(SIRRA, SUPP_KEGOR, SUPP_JINIA);
addFirstTalkId(SUPP_KEGOR, SUPP_JINIA);
addTalkId(SIRRA, JINIA, SUPP_KEGOR);

View File

@ -80,6 +80,7 @@ public final class IstinaCavern extends AbstractInstance
public IstinaCavern()
{
super(TEMPLATE_ID_COMMON, TEMPLATE_ID_EXTREME);
addStartNpc(RUMIESE);
addTalkId(RUMIESE, RUMIESE_INSTANCE);
addFirstTalkId(RUMIESE_INSTANCE);
@ -95,7 +96,7 @@ public final class IstinaCavern extends AbstractInstance
{
String htmltext = null;
final Instance instance = npc.getInstanceWorld();
if (isIstinaInstance(instance))
if (isInInstance(instance))
{
switch (event)
{
@ -157,7 +158,7 @@ public final class IstinaCavern extends AbstractInstance
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isIstinaInstance(instance))
if (isInInstance(instance))
{
final StatsSet npcParams = npc.getParameters();
final StatsSet npcVars = npc.getVariables();
@ -363,7 +364,7 @@ public final class IstinaCavern extends AbstractInstance
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if ((skill != null) && isIstinaInstance(instance))
if ((skill != null) && isInInstance(instance))
{
final int skillId = skill.getId();
@ -433,7 +434,7 @@ public final class IstinaCavern extends AbstractInstance
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isIstinaInstance(instance))
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
final int stage = npcVars.getInt("ISTINA_STAGE", -1);
@ -571,7 +572,7 @@ public final class IstinaCavern extends AbstractInstance
public String onSpawn(L2Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isIstinaInstance(instance))
if (isInInstance(instance))
{
if (npc.getId() == INVISIBLE_NPC)
{
@ -595,7 +596,7 @@ public final class IstinaCavern extends AbstractInstance
{
String htmltext = null;
final Instance instance = npc.getInstanceWorld();
if (isIstinaInstance(instance))
if (isInInstance(instance))
{
switch (instance.getStatus())
{
@ -624,11 +625,6 @@ public final class IstinaCavern extends AbstractInstance
return instance.getTemplateId() == TEMPLATE_ID_EXTREME;
}
private boolean isIstinaInstance(Instance instance)
{
return (instance != null) && ((instance.getTemplateId() == TEMPLATE_ID_COMMON) || (instance.getTemplateId() == TEMPLATE_ID_EXTREME));
}
private int getChargedPercent(int score, boolean isExtreme)
{
final int charged;

View File

@ -37,6 +37,7 @@ public final class JiniaGuildHideout1 extends AbstractInstance
public JiniaGuildHideout1()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@ -37,6 +37,7 @@ public final class JiniaGuildHideout2 extends AbstractInstance
public JiniaGuildHideout2()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@ -37,6 +37,7 @@ public final class JiniaGuildHideout3 extends AbstractInstance
public JiniaGuildHideout3()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@ -37,6 +37,7 @@ public final class JiniaGuildHideout4 extends AbstractInstance
public JiniaGuildHideout4()
{
super(TEMPLATE_ID);
addStartNpc(RAFFORTY);
addTalkId(RAFFORTY);
}

View File

@ -40,6 +40,7 @@ public final class KaraphonHabitat extends AbstractInstance
public KaraphonHabitat()
{
super(TEMPLATE_ID);
addStartNpc(DOLKIN);
addFirstTalkId(DOLKIN_INSTANCE);
addTalkId(DOLKIN);

View File

@ -157,6 +157,7 @@ public final class KartiasLabyrinth extends AbstractInstance
public KartiasLabyrinth()
{
super(TEMPLATE_ID_SOLO_85, TEMPLATE_ID_SOLO_90, TEMPLATE_ID_SOLO_95, TEMPLATE_ID_GROUP_85, TEMPLATE_ID_GROUP_90, TEMPLATE_ID_GROUP_95);
addStartNpc(KARTIA_RESEARCHER);
addFirstTalkId(KARTIA_RESEARCHER);
addFirstTalkId(ADOLPH);

View File

@ -72,6 +72,7 @@ public final class KimerianCommon extends AbstractInstance
public KimerianCommon()
{
super(TEMPLATE_ID);
addStartNpc(NOETI_KASHERON);
addTalkId(NOETI_KASHERON, NOETI_KASHERON_ENTRANCE);
addFirstTalkId(NOETI_KASHERON_ENTRANCE, NOETI_KASHERON_LEAVE);
@ -86,7 +87,7 @@ public final class KimerianCommon extends AbstractInstance
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
switch (event)
{
@ -141,7 +142,7 @@ public final class KimerianCommon extends AbstractInstance
{
String htmltext = null;
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
switch (event)
{
@ -206,7 +207,7 @@ public final class KimerianCommon extends AbstractInstance
public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
if (npc.getId() == KIMERIAN)
{
@ -243,7 +244,7 @@ public final class KimerianCommon extends AbstractInstance
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
switch (npc.getId())
{
@ -290,7 +291,7 @@ public final class KimerianCommon extends AbstractInstance
{
final L2Npc npc = (L2Npc) event.getTarget();
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
getTimers().cancelTimersOf(npc);
}
@ -300,7 +301,7 @@ public final class KimerianCommon extends AbstractInstance
public String onSpawn(L2Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
switch (npc.getId())
{
@ -355,7 +356,7 @@ public final class KimerianCommon extends AbstractInstance
final StatsSet npcVars = npc.getVariables();
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
switch (npc.getId())
{
@ -431,7 +432,7 @@ public final class KimerianCommon extends AbstractInstance
{
final Instance instance = npc.getInstanceWorld();
if (isKimerianInstance(instance))
if (isInInstance(instance))
{
if (isHollow)
{
@ -454,11 +455,6 @@ public final class KimerianCommon extends AbstractInstance
}
}
private boolean isKimerianInstance(Instance instance)
{
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
}
public static void main(String[] args)
{
new KimerianCommon();

View File

@ -81,6 +81,7 @@ public final class LabyrinthOfBelis extends AbstractInstance
public LabyrinthOfBelis()
{
super(TEMPLATE_ID);
addStartNpc(SEBION, INFILTRATION_OFFICER, BELIS_VERITIFICATION_SYSTEM);
addFirstTalkId(INFILTRATION_OFFICER, ELECTRICITY_GENERATOR, BELIS_VERITIFICATION_SYSTEM);
addTalkId(SEBION, INFILTRATION_OFFICER, BELIS_VERITIFICATION_SYSTEM);

View File

@ -154,6 +154,7 @@ public final class LastImperialTomb extends AbstractInstance
public LastImperialTomb()
{
super(TEMPLATE_ID);
addTalkId(GUIDE, CUBE);
addAttackId(SCARLET1);
addKillId(ON_KILL_MONSTERS);
@ -831,7 +832,7 @@ public final class LastImperialTomb extends AbstractInstance
final SkillHolder skill = new SkillHolder(5007, random);
final SkillHolder skillEffect = new SkillHolder(5008, random);
broadCastPacket(world, new ExShowScreenMessage(2, -1, 2, 0, 0, 0, 0, true, 4000, false, null, SKILL_MSG.get(random), null));
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLvl(), skill.getSkill().getHitTime(), 0));
broadCastPacket(world, new MagicSkillUse(frintezza, frintezza, skill.getSkillId(), skill.getSkillLevel(), skill.getSkill().getHitTime(), 0));
for (L2PcInstance player : world.getPlayers())
{
if ((player != null) && player.isOnline())

View File

@ -25,6 +25,7 @@ import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.enums.CategoryType;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
@ -48,8 +49,10 @@ import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.serverpackets.Earthquake;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml;
import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
import com.l2jmobius.gameserver.network.serverpackets.awakening.ExCallToChangeClass;
import com.l2jmobius.gameserver.taskmanager.DecayTaskManager;
import instances.AbstractInstance;
@ -73,6 +76,7 @@ public final class MemoryOfDisaster extends AbstractInstance
private static final int SILVERA = 19194;
private static final int WIRPHY = 19195;
private static final int EARTH_WYRM_TRASKEN = 19217;
private static final int SWOOP_CANNON = 19190;
private static final int[] DWARVES =
{
19191,
@ -97,16 +101,31 @@ public final class MemoryOfDisaster extends AbstractInstance
19214,
19215
};
private static final int CONTROL_DARKELF_AWAKE = 33550;
private static final int[] SACRIFICED_DARK_ELF =
{
33536,
33538,
33540,
33542,
33544,
33546
};
// Skills
private static final SkillHolder SWOOP_CANNON_SKILL = new SkillHolder(16023, 1);
private static final SkillHolder SIEGE_GOLEM_SKILL_1 = new SkillHolder(16022, 1);
private static final SkillHolder SIEGE_GOLEM_SKILL_2 = new SkillHolder(16024, 1);
private static final SkillHolder PULLER_SKILL = new SkillHolder(16031, 1);
private static final SkillHolder BOUNCER_SKILL = new SkillHolder(14649, 1);
private static final SkillHolder TEREDOR_TRANSPARENT_SKILL = new SkillHolder(16021, 1);
private static final SkillHolder TRASKEN_SKILL_1 = new SkillHolder(14505, 1);
private static final SkillHolder TRASKEN_SKILL_2 = new SkillHolder(14337, 1);
private static final SkillHolder TRASKEN_SKILL_3 = new SkillHolder(14338, 1);
private static final SkillHolder TRASKEN_SKILL_4 = new SkillHolder(14340, 1);
// Items
private static final int TRANSPARENT_1HS = 15280;
// Locations
private static final Location BATTLE_PORT = new Location(116063, -183167, -1460, 64960);
private static final Location BATTLE_PORT = new Location(116063, -183167, -1480, 64960);
private static final Location ROGIN_MOVE = new Location(116400, -183069, -1600);
private static final Location AWAKENING_GUIDE_MOVE_1 = new Location(115830, -182103, -1400);
private static final Location AWAKENING_GUIDE_MOVE_2 = new Location(115955, -181387, -1624);
@ -132,6 +151,7 @@ public final class MemoryOfDisaster extends AbstractInstance
new Location(116925, -180420, -1200, 46585),
new Location(116656, -180461, -1240, 56363),
};
private static final Location DE_VILLAGE_START = new Location(10400, 17092, -4584, Rnd.get(65520));
// Misc
private static final int FIRE_IN_DWARVEN_VILLAGE = 23120700;
private static final int TEMPLATE_ID = 200;
@ -158,24 +178,38 @@ public final class MemoryOfDisaster extends AbstractInstance
NpcStringId.NO_WAY4,
NpcStringId.ANOTHER_ONE_OVER_THERE
};
private static final NpcStringId[] SACRIFICED_DARK_ELF_SUICIDE_MESSAGES =
{
NpcStringId.GAH_SHILEN_WHY_MUST_YOU_MAKE_US_SUFFER,
NpcStringId.SHILEN_ABANDONED_US_IT_IS_OUR_TIME_TO_DIE,
NpcStringId.WITH_OUR_SACRIFICE_WILL_WE_FULFILL_THE_PROPHECY,
NpcStringId.BLOODY_RAIN_PLAGUE_DEATH_SHE_IS_NEAR,
NpcStringId.ARHHHH,
NpcStringId.WE_OFFER_OUR_BLOOD_AS_A_SACRIFICE_SHILEN_SEE_US,
NpcStringId.WILL_DARK_ELVES_BE_FORGOTTEN_AFTER_WHAT_WE_HAVE_DONE,
NpcStringId.UNBELIEVERS_RUN_DEATH_WILL_FOLLOW_YOU,
NpcStringId.I_CURSE_OUR_BLOOD_I_DESPISE_WHAT_WE_ARE_SHILEN
};
public MemoryOfDisaster()
{
super(TEMPLATE_ID);
addInstanceCreatedId(TEMPLATE_ID);
addSpawnId(INVISIBLE_NPC, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN);
addSpawnId(INVISIBLE_NPC, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN, SWOOP_CANNON, CONTROL_DARKELF_AWAKE);
addMoveFinishedId(ROGIN, SOLDIER, WIRPHY, SILVERA);
addMoveFinishedId(DWARVES);
addSpellFinishedId(SIEGE_GOLEM, INVISIBLE_NPC, TEREDOR_TRANSPARENT);
addSpellFinishedId(SIEGE_GOLEM, INVISIBLE_NPC, TEREDOR_TRANSPARENT, EARTH_WYRM_TRASKEN, SWOOP_CANNON);
setCreatureKillId(this::onCreatureKill, BRONK, SILVERA);
setCreatureAttackedId(this::onCreatureAttacked, BRONK, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, SIEGE_GOLEM, WIRPHY, SILVERA);
setCreatureSeeId(this::onCreatureSee, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, INVISIBLE_NPC);
setCreatureSeeId(this::onCreatureSee, TENTACLE, SOLDIER, SOLDIER2, TEREDOR, INVISIBLE_NPC, CONTROL_DARKELF_AWAKE);
addEventReceivedId(SACRIFICED_DARK_ELF);
}
@Override
public String onSpawn(L2Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isMoDInstance(instance))
if (isInInstance(instance))
{
switch (npc.getId())
{
@ -216,7 +250,6 @@ public final class MemoryOfDisaster extends AbstractInstance
}
case "EVENT_C":
{
// Rework me plz, I'm dying
final L2Npc golem = addSpawn(npc, SIEGE_GOLEM, 116881, -180742, -1248, 1843, false, 0, false, instance.getId());
golem.setIsInvul(true);
break;
@ -232,6 +265,10 @@ public final class MemoryOfDisaster extends AbstractInstance
{
addSkillCastDesire(npc, instance.getFirstPlayer(), PULLER_SKILL, 100000000);
}
else if (npc.getVariables().getString("type", "").equals("BOUNCER"))
{
addSkillCastDesire(npc, instance.getFirstPlayer(), BOUNCER_SKILL, 100000000);
}
break;
}
}
@ -274,7 +311,6 @@ public final class MemoryOfDisaster extends AbstractInstance
case SIEGE_GOLEM:
{
npc.initSeenCreatures();
for (Location loc : TEREDOR_SPAWN_LOC)
{
final L2Npc teredor = addSpawn(TEREDOR, loc, false, 0, false, instance.getId());
@ -287,7 +323,6 @@ public final class MemoryOfDisaster extends AbstractInstance
{
npc.setIsRunning(true);
addMoveToDesire(npc, WIRPHY_MOVE, 23);
npc.getInstanceWorld().getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(2)).forEach(n -> addAttackDesire(n, npc));
break;
}
case SILVERA:
@ -298,8 +333,6 @@ public final class MemoryOfDisaster extends AbstractInstance
}
case TEREDOR_TRANSPARENT:
{
// TODO: Check why the first doesn't work :(
addSkillCastDesire(npc, npc, TEREDOR_TRANSPARENT_SKILL, 1000000);
npc.setTarget(npc);
npc.doCast(TEREDOR_TRANSPARENT_SKILL.getSkill());
break;
@ -310,17 +343,29 @@ public final class MemoryOfDisaster extends AbstractInstance
getTimers().addTimer("ENTER_EVENT", 5000, npc, null);
break;
}
case SWOOP_CANNON:
{
npc.setTarget(npc);
npc.doCast(SWOOP_CANNON_SKILL.getSkill());
break;
}
case CONTROL_DARKELF_AWAKE:
{
npc.initSeenCreatures();
break;
}
}
}
return super.onSpawn(npc);
}
public void onCreatureSee(OnCreatureSee event)
private void onCreatureSee(OnCreatureSee event)
{
final L2Character creature = event.getSeen();
final L2Npc npc = (L2Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if (isMoDInstance(world))
if (isInInstance(world))
{
if (creature.isNpc())
{
@ -370,7 +415,7 @@ public final class MemoryOfDisaster extends AbstractInstance
siegeGolem.setScriptValue(1);
siegeGolem.abortAttack();
siegeGolem.abortCast();
addSkillCastDesire(siegeGolem, siegeGolem, SIEGE_GOLEM_SKILL_1, 1000000);
siegeGolem.doCast(SIEGE_GOLEM_SKILL_1.getSkill());
world.getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(1)).forEach(n -> getTimers().addTimer("TEREDOR_SUICIDE", 10000, n, null));
getTimers().addTimer("CHASING_TRAJAN_TIME", 5000, npc, null);
getTimers().addTimer("EARTHWORM_TIME", 15000, npc, null);
@ -386,6 +431,15 @@ public final class MemoryOfDisaster extends AbstractInstance
}
break;
}
case CONTROL_DARKELF_AWAKE:
{
getTimers().addTimer("OPENING_DE_SCENE", 1000, e ->
{
playMovie(creature.getActingPlayer(), Movie.SC_AWAKENING_OPENING_D);
getTimers().addTimer("TIMER_ID_OP_SCEN_END", 25000, npc, creature.getActingPlayer());
});
break;
}
}
}
}
@ -396,24 +450,15 @@ public final class MemoryOfDisaster extends AbstractInstance
{
switch (event)
{
case "START_AWAKENING_OPENING_SCENE":
{
playMovie(player, Movie.SC_AWAKENING_OPENING);
break;
}
case "EARTHQUAKE":
{
player.sendPacket(new Earthquake(player.getLocation(), 50, 4));
break;
}
case "TELEPORT_PLAYER_TO_START":
{
player.teleToLocation(BATTLE_PORT);
getTimers().addTimer("EARTHQUAKE", 10000, null, player);
break;
}
case "END_OF_OPENING_SCENE":
{
player.teleToLocation(BATTLE_PORT);
player.teleToLocation(BATTLE_PORT, player.getInstanceWorld());
getTimers().addTimer("SPAWN_ROGIN", 10000, null, player);
break;
}
@ -529,14 +574,17 @@ public final class MemoryOfDisaster extends AbstractInstance
case "ATTACK_TIME":
{
final List<L2Npc> tentacles = npc.getInstanceWorld().getAliveNpcs(TENTACLE).stream().filter(n -> n.getVariables().getBoolean("isLeaderKiller", false)).collect(Collectors.toList());
addAttackDesire(npc, tentacles.get(Rnd.get(tentacles.size())));
npc.getInstanceWorld().getNpcs(DWARVES).forEach(n -> addAttackDesire(n, tentacles.get(Rnd.get(tentacles.size()))));
break;
}
case "RUN_TIME":
{
npc.broadcastSay(ChatType.NPC_GENERAL, SHOUT_RUN[Rnd.get(SHOUT_RUN.length)]);
addMoveToDesire(npc, DWARVES_MOVE_1, 23);
npc.setIsRunning(true);
npc.getInstanceWorld().getNpcs(DWARVES).forEach(n ->
{
n.setIsRunning(true);
n.broadcastSay(ChatType.NPC_GENERAL, SHOUT_RUN[Rnd.get(SHOUT_RUN.length)]);
n.getAI().moveTo(DWARVES_MOVE_1);
});
break;
}
case "TEREDOR_SUICIDE":
@ -553,10 +601,10 @@ public final class MemoryOfDisaster extends AbstractInstance
case "SECOND_PULL":
{
addSkillCastDesire(npc, npc.getInstanceWorld().getFirstPlayer(), PULLER_SKILL, 100000000);
getTimers().addTimer("DESPAWNER_PULLER", 3000, npc, null);
getTimers().addTimer("DESPAWN_PULLER", 3000, npc, null);
break;
}
case "DESPAWNER_PULLER":
case "DESPAWN_PULLER":
{
npc.deleteMe();
break;
@ -569,12 +617,13 @@ public final class MemoryOfDisaster extends AbstractInstance
}
case "EARTHWORM_TIME":
{
addSpawn(npc, TEREDOR_TRANSPARENT, 116511, -178729, -1176, 43905, false, 0, false, npc.getInstanceId());
addSpawn(npc, TEREDOR_TRANSPARENT, 116511, -178729, -1176, 58208, false, 0, false, npc.getInstanceId());
break;
}
case "ENTER_EVENT":
{
addSkillCastDesire(npc, npc, TRASKEN_SKILL_1, 100000000);
npc.setTarget(npc);
npc.doCast(TRASKEN_SKILL_1.getSkill());
npc.getInstanceWorld().getFirstPlayer().sendPacket(new Earthquake(npc.getLocation(), 50, 4));
getTimers().addTimer("TRASKEN_UNEQUIP", 2000, npc, null);
break;
@ -582,37 +631,61 @@ public final class MemoryOfDisaster extends AbstractInstance
case "TRASKEN_UNEQUIP":
{
npc.setLHandId(0);
npc.broadcastInfo();
getTimers().addTimer("END_VIDEO", 20000, null, npc.getInstanceWorld().getFirstPlayer());
break;
}
case "END_VIDEO":
case "PC_TEL_TIME":
{
player.sendPacket(new OnEventTrigger(FIRE_IN_DWARVEN_VILLAGE, false));
getTimers().cancelTimer("EARTHQUAKE", null, player);
player.teleToLocation(DE_VILLAGE_START, player.getInstanceWorld());
break;
}
case "TIMER_ID_OP_SCEN_END":
{
npc.broadcastEvent("SCE_J4D_DARK_ELF_START", 8000, null);
getTimers().addTimer("TIMER_ID_END", 60000, npc, player);
break;
}
case "TIMER_ID_END":
{
playMovie(player, Movie.SC_AWAKENING_OPENING_E);
getTimers().addTimer("TIMER_ID_ED_SCEN_END", 30000, npc, player);
break;
}
case "TIMER_ID_ED_SCEN_END":
{
playMovie(player, Movie.SC_AWAKENING_OPENING_F);
getTimers().addTimer("END_INSTANCE", 45000, null, player);
getTimers().addTimer("TIMER_ID_FINAL_ED_SCEN_END", 10000, npc, player);
break;
}
case "END_INSTANCE":
case "TIMER_ID_FINAL_ED_SCEN_END":
{
getTimers().cancelTimers("EARTHQUAKE");
// myself->SetOneTimeQuestFlag(myself->c_ai0, 10491, 1);
player.sendPacket(new TutorialShowHtml(getHtm(player.getHtmlPrefix(), "calltochange_end.htm")));
finishInstance(player, 0);
break;
}
case "TIMER_ID_DIE":
{
npc.broadcastSay(ChatType.NPC_GENERAL, SACRIFICED_DARK_ELF_SUICIDE_MESSAGES[Rnd.get(SACRIFICED_DARK_ELF_SUICIDE_MESSAGES.length)]);
npc.doDie(npc);
DecayTaskManager.getInstance().cancel(npc);
break;
}
}
}
@Override
public void onInstanceCreated(Instance instance, L2PcInstance player)
{
getTimers().addTimer("OPENING_SCENE", 500, e ->
getTimers().addTimer("OPENING_SCENE", 1000, e ->
{
instance.getPlayers().forEach(p ->
{
p.sendPacket(new OnEventTrigger(FIRE_IN_DWARVEN_VILLAGE, true));
getTimers().addRepeatingTimer("EARTHQUAKE", 10000, null, p);
getTimers().addTimer("END_OF_OPENING_SCENE", 30000, null, p);
getTimers().addTimer("START_AWAKENING_OPENING_SCENE", 1000, null, p);
getTimers().addTimer("TELEPORT_PLAYER_TO_START", 25000, null, p);
playMovie(p, Movie.SC_AWAKENING_OPENING);
getTimers().addTimer("EARTHQUAKE", 10000, null, p);
getTimers().addTimer("END_OF_OPENING_SCENE", 32000, null, p);
});
});
}
@ -679,6 +752,7 @@ public final class MemoryOfDisaster extends AbstractInstance
case WIRPHY:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HELP_ME3);
npc.getInstanceWorld().getAliveNpcs(TEREDOR).stream().filter(n -> n.isScriptValue(2)).forEach(n -> addAttackDesire(n, npc));
break;
}
case SILVERA:
@ -692,7 +766,7 @@ public final class MemoryOfDisaster extends AbstractInstance
private void onCreatureAttacked(OnCreatureAttacked event)
{
final Instance world = event.getTarget().getInstanceWorld();
if (isMoDInstance(world))
if (isInInstance(world))
{
if (!event.getAttacker().isPlayable())
{
@ -774,6 +848,10 @@ public final class MemoryOfDisaster extends AbstractInstance
if ((attackCount == 80) || (attacker.getId() == SIEGE_GOLEM))
{
npc.doDie(attacker);
final L2Npc golem = world.getNpc(SIEGE_GOLEM);
golem.abortAttack();
golem.abortCast();
world.getNpc(SIEGE_GOLEM).getAI().moveTo(GOLEM_MOVE);
}
addAttackDesire(npc, attacker);
}
@ -791,17 +869,14 @@ public final class MemoryOfDisaster extends AbstractInstance
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.NO_WAY2);
npc.doDie(null);
// TODO : This shit doesn't attack silvera for some reason which prevents to trigger the dwarf text
// Used some additional method such as World.getInstance().getVisibleObjects(attacker, Npc.class, n -> (n.getId() == SILVERA))
// It found the npc but didn't worked either.
addAttackDesire(attacker, world.getNpc(SILVERA));
attacker.doAttack(world.getNpc(SILVERA));
break;
}
case SILVERA:
{
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.MY_GOD);
npc.doDie(null);
addAttackDesire(world.getNpc(SIEGE_GOLEM), attacker);
world.getNpc(SIEGE_GOLEM).doAttack(attacker);
break;
}
}
@ -824,10 +899,10 @@ public final class MemoryOfDisaster extends AbstractInstance
{
dwarf.broadcastSay(ChatType.NPC_GENERAL, SHOUT_BRONK_DEATH[Rnd.get(SHOUT_BRONK_DEATH.length)]);
}
getTimers().addTimer("ATTACK_TIME", 1000, dwarf, null);
getTimers().addTimer("RUN_TIME", 10000, dwarf, null);
}
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.UGH_IF_I_SEE_YOU_IN_THE_SPIRIT_WORLD_FIRST_ROUND_IS_ON_ME);
getTimers().addTimer("ATTACK_TIME", 1000, npc, null);
getTimers().addTimer("RUN_TIME", 10000, npc, null);
}
else if (npc.getId() == SILVERA)
{
@ -838,26 +913,104 @@ public final class MemoryOfDisaster extends AbstractInstance
@Override
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
{
if ((npc.getId() == SIEGE_GOLEM) && (skill.getId() == SIEGE_GOLEM_SKILL_1.getSkillId()))
switch (npc.getId())
{
addMoveToDesire(npc, GOLEM_MOVE, 23);
npc.setIsRunning(true);
}
else if ((npc.getId() == INVISIBLE_NPC) && npc.getVariables().getString("type", "").equals("PULLER") && (skill.getId() == PULLER_SKILL.getSkillId()) && npc.isScriptValue(0))
{
npc.teleToLocation(PULLER_TELEPORT);
getTimers().addTimer("SECOND_PULL", 2000, npc, null);
}
else if ((npc.getId() == TEREDOR_TRANSPARENT) && (skill.getId() == TEREDOR_TRANSPARENT_SKILL.getSkillId()))
{
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
invisibleNpc.getVariables().set("type", "BOUNCER");
addSpawn(npc, EARTH_WYRM_TRASKEN, npc.getLocation(), false, npc.getInstanceId());
npc.deleteMe();
case SIEGE_GOLEM:
{
if (skill.getId() == SIEGE_GOLEM_SKILL_1.getSkillId())
{
npc.setIsRunning(true);
npc.getAI().moveTo(GOLEM_MOVE);
}
break;
}
case INVISIBLE_NPC:
{
if (npc.getVariables().getString("type", "").equals("PULLER") && (skill.getId() == PULLER_SKILL.getSkillId()) && npc.isScriptValue(0))
{
npc.teleToLocation(PULLER_TELEPORT, npc.getInstanceWorld());
npc.setScriptValue(1);
getTimers().addTimer("SECOND_PULL", 2000, npc, null);
}
else if (npc.getVariables().getString("type", "").equals("BOUNCER") && (skill.getId() == BOUNCER_SKILL.getSkillId()))
{
npc.deleteMe();
}
break;
}
case TEREDOR_TRANSPARENT:
{
if (skill.getId() == TEREDOR_TRANSPARENT_SKILL.getSkillId())
{
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
invisibleNpc.getVariables().set("type", "BOUNCER");
addSpawn(npc, EARTH_WYRM_TRASKEN, npc.getLocation(), false, npc.getInstanceId());
npc.deleteMe();
}
break;
}
case EARTH_WYRM_TRASKEN:
{
if (skill.getId() == TRASKEN_SKILL_1.getSkillId())
{
playMovie(npc.getInstanceWorld().getFirstPlayer(), Movie.SC_AWAKENING_OPENING_C);
npc.setTarget(npc.getInstanceWorld().getNpc(SIEGE_GOLEM));
npc.doCast(TRASKEN_SKILL_2.getSkill());
getTimers().addTimer("PC_TEL_TIME", 23000, npc, npc.getInstanceWorld().getFirstPlayer());
}
else if (skill.getId() == TRASKEN_SKILL_2.getSkillId())
{
if (npc.isScriptValue(0))
{
npc.getInstanceWorld().getNpc(SIEGE_GOLEM).doDie(npc);
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
invisibleNpc.getVariables().set("type", "BOUNCER");
}
npc.setTarget(npc);
npc.doCast(TRASKEN_SKILL_4.getSkill());
}
else if (skill.getId() == TRASKEN_SKILL_4.getSkillId())
{
npc.setTarget(npc);
npc.doCast(TRASKEN_SKILL_3.getSkill());
if (npc.isScriptValue(0))
{
final L2Npc invisibleNpc = addSpawn(npc, INVISIBLE_NPC, npc.getLocation(), false, npc.getInstanceId());
invisibleNpc.getVariables().set("type", "BOUNCER");
npc.setScriptValue(1);
}
}
else if (skill.getId() == TRASKEN_SKILL_3.getSkillId())
{
npc.setTarget(npc);
npc.doCast(TRASKEN_SKILL_2.getSkill());
}
break;
}
case SWOOP_CANNON:
{
npc.setTarget(npc);
npc.doCast(SWOOP_CANNON_SKILL.getSkill());
break;
}
}
return super.onSpellFinished(npc, player, skill);
}
@Override
public String onEventReceived(String event, L2Npc sender, L2Npc receiver, L2Object reference)
{
final Instance instance = receiver.getInstanceWorld();
if (isInInstance(instance))
{
if (event.equals("SCE_J4D_DARK_ELF_START"))
{
getTimers().addTimer("TIMER_ID_DIE", Rnd.get(60000) + 5000, receiver, null);
}
}
return super.onEventReceived(event, sender, receiver, reference);
}
@RegisterEvent(EventType.ON_PLAYER_CALL_TO_CHANGE_CLASS)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void onPlayerCallToChangeClass(OnPlayerCallToChangeClass event)
@ -895,11 +1048,6 @@ public final class MemoryOfDisaster extends AbstractInstance
}
}
private boolean isMoDInstance(Instance instance)
{
return (instance != null) && (instance.getTemplateId() == TEMPLATE_ID);
}
public static void main(String[] args)
{
new MemoryOfDisaster();

View File

@ -0,0 +1,7 @@
<html><body>Hermuncus Call:<br>
My faithful servant Cellphine is waiting to guide you to your fate of Awakening.<br1>
To find Cellphine, go to the Museum, the largest building at Southern most part of Talking Island Village.<br1>
Speak to the Pantheon to enter the Museum and find Cellphine inside.<br>
Follow Cellphine's instructions to answer my call.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="link tutorial_close_0">Close Window</Button>
</body></html>

View File

@ -53,6 +53,7 @@ public final class MithrilMine extends AbstractInstance
public MithrilMine()
{
super(TEMPLATE_ID);
addFirstTalkId(KEGOR);
addKillId(KEGOR, MITHRIL_MILLIPEDE);
addStartNpc(TARUN, KRUN);

View File

@ -61,6 +61,7 @@ public final class MuseumDungeon extends AbstractInstance
public MuseumDungeon()
{
super(TEMPLATE_ID);
addStartNpc(PANTHEON);
addFirstTalkId(DESK);
addTalkId(PANTHEON, TOYRON);

View File

@ -55,6 +55,7 @@ public final class NightmareKamaloka extends AbstractInstance
public NightmareKamaloka()
{
super(TEMPLATE_ID);
addStartNpc(KURTIZ);
addTalkId(KURTIZ);
addSpawnId(INVISIBLE_NPC);
@ -66,7 +67,7 @@ public final class NightmareKamaloka extends AbstractInstance
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isNightmareKamalokaInstance(instance))
if (isInInstance(instance))
{
switch (event)
{
@ -93,7 +94,7 @@ public final class NightmareKamaloka extends AbstractInstance
public String onSpawn(L2Npc npc)
{
final Instance instance = npc.getInstanceWorld();
if (isNightmareKamalokaInstance(instance))
if (isInInstance(instance))
{
if (npc.getId() == INVISIBLE_NPC)
{
@ -107,7 +108,7 @@ public final class NightmareKamaloka extends AbstractInstance
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isNightmareKamalokaInstance(instance))
if (isInInstance(instance))
{
final int nextDoorId = BOSS_MAP.getOrDefault(npc.getId(), -1);
if (nextDoorId == -1)
@ -126,7 +127,7 @@ public final class NightmareKamaloka extends AbstractInstance
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isNightmareKamalokaInstance(instance))
if (isInInstance(instance))
{
if (npc.getId() == DARK_RIDER_UD)
{
@ -155,11 +156,6 @@ public final class NightmareKamaloka extends AbstractInstance
return super.onAttack(npc, attacker, damage, isSummon);
}
private boolean isNightmareKamalokaInstance(Instance instance)
{
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
}
public static void main(String[] args)
{
new NightmareKamaloka();

View File

@ -1,4 +0,0 @@
<html><head><body>Kurtiz<br>
Aren't you in a party? But you are not the party leader. <br>
(Only the party leader can request to enter.)
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Kurtiz<br>
Aren't you in a party? But you are not the party leader.<br>
(Only the party leader can request to enter.)
</body></html>

View File

@ -69,6 +69,7 @@ public final class Nursery extends AbstractInstance
public Nursery()
{
super(TEMPLATE_ID);
addStartNpc(TIE);
addFirstTalkId(TIE);
addTalkId(TIE);
@ -82,7 +83,7 @@ public final class Nursery extends AbstractInstance
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isNurseryInstance(instance))
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
final int gameStage = npcVars.getInt("GAME_STAGE", 0);
@ -139,7 +140,7 @@ public final class Nursery extends AbstractInstance
final Instance instance = npc.getInstanceWorld();
String htmltext = null;
if (isNurseryInstance(instance))
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
@ -191,7 +192,7 @@ public final class Nursery extends AbstractInstance
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final Instance instance = npc.getInstanceWorld();
if (isNurseryInstance(instance))
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
final int gameStage = npcVars.getInt("GAME_STAGE", 0);
@ -272,7 +273,7 @@ public final class Nursery extends AbstractInstance
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isNurseryInstance(instance))
if (isInInstance(instance))
{
final StatsSet npcVars = npc.getVariables();
final int maguenStatus = npcVars.getInt("MAGUEN_STATUS", 0);
@ -316,7 +317,7 @@ public final class Nursery extends AbstractInstance
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final Instance instance = npc.getInstanceWorld();
if (isNurseryInstance(instance))
if (isInInstance(instance))
{
if (getRandom(100) < 6)
{
@ -389,7 +390,7 @@ public final class Nursery extends AbstractInstance
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
{
final Instance instance = npc.getInstanceWorld();
if (isNurseryInstance(instance))
if (isInInstance(instance))
{
final L2Npc gameManager = instance.getNpc(TIE);
if (gameManager != null)
@ -458,11 +459,6 @@ public final class Nursery extends AbstractInstance
return super.onEnterZone(character, zone);
}
private boolean isNurseryInstance(Instance instance)
{
return ((instance != null) && (instance.getTemplateId() == TEMPLATE_ID));
}
public static void main(String[] args)
{
new Nursery();

View File

@ -105,6 +105,7 @@ public final class OctavisWarzone extends AbstractInstance
public OctavisWarzone()
{
super(TEMPLATE_ID, EXTREME_TEMPLATE_ID);
addStartNpc(LYDIA);
addTalkId(LYDIA);
addSpawnId(DOOR_MANAGER);
@ -140,7 +141,7 @@ public final class OctavisWarzone extends AbstractInstance
case "reenterInstance":
{
final Instance activeInstance = getPlayerInstance(player);
if (isOctavisInstance(activeInstance))
if (isInInstance(activeInstance))
{
enterInstance(player, npc, activeInstance.getTemplateId());
return "PartyMemberReenter.html";
@ -154,7 +155,7 @@ public final class OctavisWarzone extends AbstractInstance
public void onTimerEvent(String event, StatsSet params, L2Npc npc, L2PcInstance player)
{
final Instance world = npc.getInstanceWorld();
if (isOctavisInstance(world))
if (isInInstance(world))
{
final StatsSet npcVars = npc.getVariables();
final StatsSet npcParams = npc.getParameters();
@ -350,7 +351,7 @@ public final class OctavisWarzone extends AbstractInstance
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
if (isOctavisInstance(world))
if (isInInstance(world))
{
final int hpPer = npc.getCurrentHpPercent();
@ -421,7 +422,7 @@ public final class OctavisWarzone extends AbstractInstance
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
if (isOctavisInstance(world))
if (isInInstance(world))
{
if (CommonUtil.contains(OCTAVIS_STAGE_1, npc.getId()))
{
@ -463,7 +464,7 @@ public final class OctavisWarzone extends AbstractInstance
@Override
public void onInstanceCreated(Instance instance, L2PcInstance player)
{
if ((player != null) && isOctavisInstance(instance))
if ((player != null) && isInInstance(instance))
{
showHtmlFile(player, (instance.getTemplateId() == TEMPLATE_ID) ? "PartyEnterCommon.html" : "PartyEnterExtreme.html");
}
@ -473,7 +474,7 @@ public final class OctavisWarzone extends AbstractInstance
public String onSpawn(L2Npc npc)
{
final Instance world = npc.getInstanceWorld();
if (isOctavisInstance(world))
if (isInInstance(world))
{
if (CommonUtil.contains(GLADIATORS, npc.getId()))
{
@ -490,7 +491,7 @@ public final class OctavisWarzone extends AbstractInstance
public void onMoveFinished(L2Npc npc)
{
final Instance world = npc.getInstanceWorld();
if (isOctavisInstance(world))
if (isInInstance(world))
{
world.openCloseDoor(npc.getParameters().getInt("My_DoorName", -1), false);
}
@ -512,7 +513,7 @@ public final class OctavisWarzone extends AbstractInstance
final L2Npc npc = (L2Npc) event.getSeer();
final Instance world = npc.getInstanceWorld();
if (isOctavisInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
if (isInInstance(world) && creature.isPlayer() && npc.isScriptValue(0))
{
world.openCloseDoor(MAIN_DOOR_1, true);
getTimers().addTimer("SECOND_DOOR_OPEN", 3000, npc, null);
@ -525,7 +526,7 @@ public final class OctavisWarzone extends AbstractInstance
public String onEnterZone(L2Character character, L2ZoneType zone)
{
final Instance world = character.getInstanceWorld();
if (character.isPlayer() && isOctavisInstance(world))
if (character.isPlayer() && isInInstance(world))
{
if (world.getParameters().getBoolean("TELEPORT_ACTIVE", false))
{
@ -535,11 +536,6 @@ public final class OctavisWarzone extends AbstractInstance
return super.onEnterZone(character, zone);
}
private boolean isOctavisInstance(Instance instance)
{
return ((instance != null) && ((instance.getTemplateId() == TEMPLATE_ID) || (instance.getTemplateId() == EXTREME_TEMPLATE_ID)));
}
private boolean isExtremeMode(Instance instance)
{
return instance.getTemplateId() == EXTREME_TEMPLATE_ID;

View File

@ -71,6 +71,7 @@ public final class PailakaDevilsLegacy extends AbstractInstance
public PailakaDevilsLegacy()
{
super(TEMPLATE_ID);
addTalkId(SURVIVOR);
addAttackId(POWDER_KEG, TREASURE_BOX, LEMATAN);
addKillId(LEMATAN);

View File

@ -84,6 +84,7 @@ public class PailakaInjuredDragon extends AbstractInstance
public PailakaInjuredDragon()
{
super(TEMPLATE_ID);
addInstanceEnterId(TEMPLATE_ID);
addStartNpc(KETRA_ORC_SHAMAN);
addKillId(ANTELOPE1, ANTELOPE2, ANTELOPE3, GENERAL, GREAT_MAGUS, PROPHET, ELITE_GUARD, COMMANDER, OFFICER, RECRUIT, FOOTMAN, WARRIOR, PROPHET_GUARD, HEAD_GUARD, SHAMAN, CHIEF_PRIEST, GRAND_PRIEST, LATANA);

View File

@ -96,6 +96,7 @@ public final class PailakaRuneCastle extends AbstractInstance
public PailakaRuneCastle()
{
super(MANAGERS.values().stream().mapToInt(Integer::valueOf).toArray());
addFirstTalkId(VICTIMS);
addTalkId(VICTIMS);
addTalkId(MANAGERS.keySet());

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