Implementation of the Certification Skill system.

Contributed by Iris.
This commit is contained in:
MobiusDevelopment
2022-10-08 14:08:49 +00:00
parent 01cc1c1303
commit 05eae2c23c
37 changed files with 881 additions and 334 deletions

View File

@@ -2,7 +2,8 @@
Hm, Lately there have been rumor about a limited opening of a border with Elmore, but it's not clear whether it's misheard talks from bigwigs or they're going to tighten the crews even more instead.....<br> Hm, Lately there have been rumor about a limited opening of a border with Elmore, but it's not clear whether it's misheard talks from bigwigs or they're going to tighten the crews even more instead.....<br>
You see, my brother moved to Elmore hoping to start a trading business there..... And I'm worried that I won't be able to see him again even once.<br> You see, my brother moved to Elmore hoping to start a trading business there..... And I'm worried that I won't be able to see him again even once.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3084001">Purchase Spellbooks, Amulets and Blueprints</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3084001">Purchase Spellbooks, Amulets and Blueprints</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3084002">Exchange a Spellbook (avaiable after 3rd CLass Tranfer)</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3084002">Exchange 3rd Class Spellbooks</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_SkillList">Learn certification skills</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_TerritoryStatus">Learn about the local governor and taxes</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_TerritoryStatus">Learn about the local governor and taxes</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button> <Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html> </body></html>

View File

@@ -1,180 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd">
<skillTree type="classSkillTree">
<skill skillName="Dye of War" skillId="51271" skillLevel="1" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="2" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="3" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="4" getLevel="40">
<item id="91481" count="30" />
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="5" getLevel="40">
<item id="91481" count="45" />
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="1" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="2" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="3" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="4" getLevel="40">
<item id="91481" count="30" />
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="5" getLevel="40">
<item id="91481" count="45" />
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="1" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="2" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="3" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="4" getLevel="40">
<item id="91481" count="30" />
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="5" getLevel="40">
<item id="91481" count="45" />
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="1" getLevel="40">
<item id="91481" count="1" />
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="2" getLevel="40">
<item id="91481" count="3" />
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="3" getLevel="40">
<item id="91481" count="4" />
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="4" getLevel="40">
<item id="91481" count="10" />
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="5" getLevel="40">
<item id="91481" count="15" />
</skill>
</skillTree>
</list>

View File

@@ -7,7 +7,7 @@
<skill skillName="Expertise B" skillId="239" skillLevel="3" getLevel="52" autoGet="true" /> <skill skillName="Expertise B" skillId="239" skillLevel="3" getLevel="52" autoGet="true" />
<skill skillName="Expertise A" skillId="239" skillLevel="4" getLevel="61" autoGet="true" /> <skill skillName="Expertise A" skillId="239" skillLevel="4" getLevel="61" autoGet="true" />
<skill skillName="Expertise S" skillId="239" skillLevel="5" getLevel="76" autoGet="true" /> <skill skillName="Expertise S" skillId="239" skillLevel="5" getLevel="76" autoGet="true" />
<skill skillName="Pirate" skillId="1800" skillLevel="1" getLevel="45" autoGet="true" /> <skill skillName="Pirate" skillId="1800" skillLevel="1" getLevel="45" autoGet="true" />
<skill skillName="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" autoGet="true" /> <skill skillName="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" autoGet="true" />
<skill skillName="White Assassin" skillId="1802" skillLevel="1" getLevel="70" autoGet="true" /> <skill skillName="White Assassin" skillId="1802" skillLevel="1" getLevel="70" autoGet="true" />

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd">
<skillTree type="certificationSkillTree">
<skill skillName="Dye of War" skillId="51271" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
</skillTree>
</list>

View File

@@ -19,7 +19,7 @@ parentClassId = CLASS ID PARENT
type = SKILL TREE types like: type = SKILL TREE types like:
- classSkillTree - classSkillTree
- collectSkillTree - certificationSkillTree
- fishingSkillTree - fishingSkillTree
- gameMasterAuraSkillTree - gameMasterAuraSkillTree
- gameMasterSkillTree - gameMasterSkillTree

View File

@@ -298,26 +298,88 @@
<skill id="51247" toLevel="1" name="Disarm"> <skill id="51247" toLevel="1" name="Disarm">
<!-- For 5 sec. makes target's and nearby enemies' weapon useless, P./ M. Atk. -30%, Speed -10%. --> <!-- For 5 sec. makes target's and nearby enemies' weapon useless, P./ M. Atk. -30%, Speed -10%. -->
<icon>icon.skill0485</icon> <icon>icon.skill0485</icon>
<operateType>A1</operateType> <abnormalLevel>1</abnormalLevel>
<isDebuff>true</isDebuff> <abnormalTime>5</abnormalTime>
<castRange>600</castRange> <abnormalType>DISARM</abnormalType>
<abnormalVisualEffect>DOT_BLEEDING</abnormalVisualEffect>
<activateRate>70</activateRate>
<affectLimit>6-12</affectLimit>
<affectRange>200</affectRange>
<basicProperty>PHYSICAL</basicProperty>
<effectPoint>-341</effectPoint>
<hitTime>1500</hitTime> <hitTime>1500</hitTime>
<coolTime>500</coolTime> <coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay> <icon>icon.skill0794</icon>
<effectPoint>-341</effectPoint> <isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<mpConsume>205</mpConsume> <mpConsume>205</mpConsume>
<operateType>A2</operateType>
<reuseDelay>60000</reuseDelay>
<magicCriticalRate>5</magicCriticalRate>
<trait>DISARM</trait>
<targetType>SELF</targetType>
<affectScope>POINT_BLANK</affectScope>
<affectObject>NOT_FRIEND</affectObject>
<effects>
<effect name="Disarm">
</effect>
<effect name="PAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="MAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="Speed">
<amount>-10</amount>
<mode>PER</mode>
</effect>
</effects>
</skill> </skill>
<skill id="51248" toLevel="1" name="Armor Break"> <skill id="51248" toLevel="1" name="Armor Break">
<!-- For 5 sec. makes target's and nearby enemies' armor useless, P./ M. Def. -30%, Speed -10%. --> <!-- For 5 sec. makes target's and nearby enemies' armor useless, P./ M. Def. -30%, Speed -10%. -->
<icon>icon.skill10703</icon> <icon>icon.skill10703</icon>
<operateType>A1</operateType> <abnormalLevel>1</abnormalLevel>
<isDebuff>true</isDebuff> <abnormalTime>5</abnormalTime>
<castRange>600</castRange> <abnormalType>DISARM</abnormalType>
<abnormalVisualEffect>DOT_BLEEDING</abnormalVisualEffect>
<activateRate>70</activateRate>
<affectLimit>6-12</affectLimit>
<affectRange>200</affectRange>
<basicProperty>PHYSICAL</basicProperty>
<effectPoint>-341</effectPoint>
<hitTime>1500</hitTime> <hitTime>1500</hitTime>
<coolTime>500</coolTime> <coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay> <icon>icon.skill0794</icon>
<effectPoint>-341</effectPoint> <isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<mpConsume>205</mpConsume> <mpConsume>205</mpConsume>
<operateType>A2</operateType>
<reuseDelay>60000</reuseDelay>
<magicCriticalRate>5</magicCriticalRate>
<trait>DISARM</trait>
<targetType>SELF</targetType>
<affectScope>POINT_BLANK</affectScope>
<affectObject>NOT_FRIEND</affectObject>
<effects>
<effect name="Disarmor">
</effect>
<effect name="PAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="MAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="Speed">
<amount>-10</amount>
<mode>PER</mode>
</effect>
</effects>
</skill> </skill>
<skill id="51249" toLevel="1" name="Spell Break"> <skill id="51249" toLevel="1" name="Spell Break">
<!-- For 5 sec. makes target's and nearby enemies' Skills useless. --> <!-- For 5 sec. makes target's and nearby enemies' Skills useless. -->
@@ -355,11 +417,42 @@
<skill id="51252" toLevel="1" name="Berserker Mode"> <skill id="51252" toLevel="1" name="Berserker Mode">
<!-- For 20 sec. P./ M. Atk., and Atk./ Casting Spd. +50%. Cannot be stacked with Berserker Spirit that will be available after transformation into Dragon Berserker. --> <!-- For 20 sec. P./ M. Atk., and Atk./ Casting Spd. +50%. Cannot be stacked with Berserker Spirit that will be available after transformation into Dragon Berserker. -->
<icon>icon.skill10274</icon> <icon>icon.skill10274</icon>
<operateType>A1</operateType>
<hitTime>2000</hitTime>
<reuseDelay>300000</reuseDelay> <reuseDelay>300000</reuseDelay>
<effectPoint>20</effectPoint> <effectPoint>20</effectPoint>
<mpConsume>200</mpConsume> <abnormalLevel>3</abnormalLevel>
<abnormalTime>20</abnormalTime>
<abnormalType>BERSERKER</abnormalType>
<castRange>1200</castRange>
<effectRange>1400</effectRange>
<isMagic>4</isMagic> <!-- Item Skill -->
<isTriggeredSkill>true</isTriggeredSkill>
<magicLevel>80</magicLevel>
<operateType>A2</operateType>
<basicProperty>NONE</basicProperty>
<magicCriticalRate>-5</magicCriticalRate>
<targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope>
<effects>
<effect name="PAtk">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="MAtk">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="PhysicalAttackSpeed">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="MagicalAttackSpeed">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="DamageShield">
<amount>15</amount>
</effect>
</effects>
</skill> </skill>
<skill id="51253" toLevel="1" name="Elmoreden XP Scroll"> <skill id="51253" toLevel="1" name="Elmoreden XP Scroll">
<!-- 500,000 XP. --> <!-- 500,000 XP. -->
@@ -516,6 +609,15 @@
<value level="5">30</value> <value level="5">30</value>
</amount> </amount>
</effect> </effect>
<effect name="SpModify">
<amount>
<value level="1">5</value>
<value level="2">7</value>
<value level="3">12</value>
<value level="4">20</value>
<value level="5">30</value>
</amount>
</effect>
</effects> </effects>
</skill> </skill>
<skill id="51273" toLevel="5" name="Courage Mastery"> <skill id="51273" toLevel="5" name="Courage Mastery">
@@ -544,11 +646,11 @@
<effects> <effects>
<effect name="ReduceDropPenalty"> <effect name="ReduceDropPenalty">
<exp> <exp>
<value level="1">0</value> <value level="1">-5</value>
<value level="2">0</value> <value level="2">-10</value>
<value level="3">0</value> <value level="3">-15</value>
<value level="4">0</value> <value level="4">-20</value>
<value level="5">0</value> <value level="5">-25</value>
</exp> </exp>
<deathPenalty> <deathPenalty>
<value level="1">-5</value> <value level="1">-5</value>
@@ -558,7 +660,7 @@
<value level="5">-25</value> <value level="5">-25</value>
</deathPenalty> </deathPenalty>
<mode>PER</mode> <mode>PER</mode>
<type>PK</type> <type>ANY</type>
</effect> </effect>
</effects> </effects>
</skill> </skill>

View File

@@ -143,7 +143,7 @@
<xs:enumeration value="alchemySkillTree" /> <xs:enumeration value="alchemySkillTree" />
<xs:enumeration value="awakeningSaveSkillTree" /> <xs:enumeration value="awakeningSaveSkillTree" />
<xs:enumeration value="classSkillTree" /> <xs:enumeration value="classSkillTree" />
<xs:enumeration value="collectSkillTree" /> <xs:enumeration value="certificationSkillTree" />
<xs:enumeration value="dualClassSkillTree" /> <xs:enumeration value="dualClassSkillTree" />
<xs:enumeration value="fishingSkillTree" /> <xs:enumeration value="fishingSkillTree" />
<xs:enumeration value="gameMasterAuraSkillTree" /> <xs:enumeration value="gameMasterAuraSkillTree" />

View File

@@ -61,7 +61,7 @@ import org.l2jmobius.gameserver.model.skill.Skill;
* <ul> * <ul>
* <li>Class skill trees: player skill trees for each class.</li> * <li>Class skill trees: player skill trees for each class.</li>
* <li>Transfer skill trees: player skill trees for each healer class.</li> * <li>Transfer skill trees: player skill trees for each healer class.</li>
* <li>Collect skill tree: player skill tree for Gracia related skills.</li> * <li>Certification skill tree: player skill tree for certification-related skills.</li>
* <li>Fishing skill tree: player skill tree for fishing related skills.</li> * <li>Fishing skill tree: player skill tree for fishing related skills.</li>
* <li>Transform skill tree: player skill tree for transformation related skills.</li> * <li>Transform skill tree: player skill tree for transformation related skills.</li>
* <li>Sub-Class skill tree: player skill tree for sub-class related skills.</li> * <li>Sub-Class skill tree: player skill tree for sub-class related skills.</li>
@@ -87,7 +87,7 @@ public class SkillTreeData implements IXmlReader
private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>(); private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>();
private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>(); private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>();
// Skill Hash Code, SkillLearn // Skill Hash Code, SkillLearn
private static final Map<Long, SkillLearn> _collectSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _certificationSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _fishingSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _fishingSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _pledgeSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _pledgeSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>();
@@ -128,7 +128,7 @@ public class SkillTreeData implements IXmlReader
{ {
_loading = true; _loading = true;
_classSkillTrees.clear(); _classSkillTrees.clear();
_collectSkillTree.clear(); _certificationSkillTree.clear();
_fishingSkillTree.clear(); _fishingSkillTree.clear();
_pledgeSkillTree.clear(); _pledgeSkillTree.clear();
_subClassSkillTree.clear(); _subClassSkillTree.clear();
@@ -298,9 +298,9 @@ public class SkillTreeData implements IXmlReader
transferSkillTree.put(skillHashCode, skillLearn); transferSkillTree.put(skillHashCode, skillLearn);
break; break;
} }
case "collectSkillTree": case "certificationSkillTree":
{ {
_collectSkillTree.put(skillHashCode, skillLearn); _certificationSkillTree.put(skillHashCode, skillLearn);
break; break;
} }
case "raceSkillTree": case "raceSkillTree":
@@ -484,12 +484,12 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Gets the collect skill tree. * Gets the Certification skill tree.
* @return the complete Collect Skill Tree * @return the complete Certification Skill Tree
*/ */
public Map<Long, SkillLearn> getCollectSkillTree() public Map<Long, SkillLearn> getCertificationSkillTree()
{ {
return _collectSkillTree; return _certificationSkillTree;
} }
/** /**
@@ -959,14 +959,14 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Used in Gracia continent. * Implemented in Secret of Empire
* @param player the collecting skill learning player * @param player the certification skill learning player
* @return all the available Collecting skills for a given {@code player} * @return all the available Certification skills for a given {@code player}
*/ */
public List<SkillLearn> getAvailableCollectSkills(Player player) public List<SkillLearn> getAvailableCertificationSkills(Player player)
{ {
final List<SkillLearn> result = new ArrayList<>(); final List<SkillLearn> result = new ArrayList<>();
for (SkillLearn skill : _collectSkillTree.values()) for (SkillLearn skill : _certificationSkillTree.values())
{ {
final Skill oldSkill = player.getSkills().get(skill.getSkillId()); final Skill oldSkill = player.getSkills().get(skill.getSkillId());
if (oldSkill != null) if (oldSkill != null)
@@ -1229,9 +1229,9 @@ public class SkillTreeData implements IXmlReader
sl = getSubClassSkill(id, lvl); sl = getSubClassSkill(id, lvl);
break; break;
} }
case COLLECT: case CERTIFICATION:
{ {
sl = getCollectSkill(id, lvl); sl = getCertificationSkill(id, lvl);
break; break;
} }
case REVELATION: case REVELATION:
@@ -1405,14 +1405,14 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Gets the collect skill. * Gets the certification skill.
* @param id the collect skill Id * @param id the certification skill Id
* @param lvl the collect skill level * @param lvl the certification skill level
* @return the collect skill from the Collect Skill Tree for a given {@code id} and {@code lvl} * @return the certification skill from the Certification Skill Tree for a given {@code id} and {@code lvl}
*/ */
public SkillLearn getCollectSkill(int id, int lvl) public SkillLearn getCertificationSkill(int id, int lvl)
{ {
return _collectSkillTree.get(SkillData.getSkillHashCode(id, lvl)); return _certificationSkillTree.get(SkillData.getSkillHashCode(id, lvl));
} }
/** /**
@@ -1712,7 +1712,7 @@ public class SkillTreeData implements IXmlReader
} }
} }
for (SkillLearn s : _collectSkillTree.values()) for (SkillLearn s : _certificationSkillTree.values())
{ {
list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel())); list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel()));
} }
@@ -1847,7 +1847,7 @@ public class SkillTreeData implements IXmlReader
LOGGER.info(className + ": Loaded " + transferSkillTreeCount + " transfer skills for " + _transferSkillTrees.size() + " transfer skill trees."); LOGGER.info(className + ": Loaded " + transferSkillTreeCount + " transfer skills for " + _transferSkillTrees.size() + " transfer skill trees.");
LOGGER.info(className + ": Loaded " + raceSkillTreeCount + " race skills for " + _raceSkillTree.size() + " race skill trees."); LOGGER.info(className + ": Loaded " + raceSkillTreeCount + " race skills for " + _raceSkillTree.size() + " race skill trees.");
LOGGER.info(className + ": Loaded " + _fishingSkillTree.size() + " fishing skills, " + dwarvenOnlyFishingSkillCount + " Dwarven only fishing skills."); LOGGER.info(className + ": Loaded " + _fishingSkillTree.size() + " fishing skills, " + dwarvenOnlyFishingSkillCount + " Dwarven only fishing skills.");
LOGGER.info(className + ": Loaded " + _collectSkillTree.size() + " collect skills."); LOGGER.info(className + ": Loaded " + _certificationSkillTree.size() + " certification skills.");
LOGGER.info(className + ": Loaded " + _pledgeSkillTree.size() + " clan skills, " + (_pledgeSkillTree.size() - resSkillCount) + " for clan and " + resSkillCount + " residential."); LOGGER.info(className + ": Loaded " + _pledgeSkillTree.size() + " clan skills, " + (_pledgeSkillTree.size() - resSkillCount) + " for clan and " + resSkillCount + " residential.");
LOGGER.info(className + ": Loaded " + _subPledgeSkillTree.size() + " sub-pledge skills."); LOGGER.info(className + ": Loaded " + _subPledgeSkillTree.size() + " sub-pledge skills.");
LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills."); LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills.");

View File

@@ -29,7 +29,7 @@ public enum AcquireSkillType
TRANSFORM(4), TRANSFORM(4),
TRANSFER(5), TRANSFER(5),
SUBCLASS(6), SUBCLASS(6),
COLLECT(7), CERTIFICATION(7),
DUMMY2(8), DUMMY2(8),
DUMMY3(9), DUMMY3(9),
FISHING(10), FISHING(10),

View File

@@ -63,12 +63,12 @@ public class Folk extends Npc
public static void showSkillList(Player player, Npc npc, ClassId classId) public static void showSkillList(Player player, Npc npc, ClassId classId)
{ {
final int npcId = npc.getTemplate().getId(); final int npcId = npc.getTemplate().getId();
if (npcId == 32611) // Tolonis (Officer) if (npcId == 30840) // Lorenzo
{ {
final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailableCollectSkills(player); final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailableCertificationSkills(player);
if (skills.isEmpty()) // No more skills to learn, come back when you level. if (skills.isEmpty()) // No more skills to learn, come back when you level.
{ {
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCollectSkillTree()); final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCertificationSkillTree());
if (minLevel > 0) if (minLevel > 0)
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1);
@@ -82,7 +82,7 @@ public class Folk extends Npc
} }
else else
{ {
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.COLLECT)); player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.CERTIFICATION));
} }
return; return;
} }

View File

@@ -276,8 +276,8 @@ public class Transform implements IIdentifiable
} }
} }
// Add collection skills. // Add certification skills.
for (SkillLearn s : SkillTreeData.getInstance().getCollectSkillTree().values()) for (SkillLearn s : SkillTreeData.getInstance().getCertificationSkillTree().values())
{ {
final Skill skill = player.getKnownSkill(s.getSkillId()); final Skill skill = player.getKnownSkill(s.getSkillId());
if (skill != null) if (skill != null)

View File

@@ -365,7 +365,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
break; break;
} }
case COLLECT: case CERTIFICATION:
{ {
if (checkPlayerSkill(player, trainer, s)) if (checkPlayerSkill(player, trainer, s))
{ {

View File

@@ -90,7 +90,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
case TRANSFORM: case TRANSFORM:
case FISHING: case FISHING:
case SUBCLASS: case SUBCLASS:
case COLLECT: case CERTIFICATION:
case TRANSFER: case TRANSFER:
case DUALCLASS: case DUALCLASS:
{ {

View File

@@ -2,7 +2,8 @@
Hm, Lately there have been rumor about a limited opening of a border with Elmore, but it's not clear whether it's misheard talks from bigwigs or they're going to tighten the crews even more instead.....<br> Hm, Lately there have been rumor about a limited opening of a border with Elmore, but it's not clear whether it's misheard talks from bigwigs or they're going to tighten the crews even more instead.....<br>
You see, my brother moved to Elmore hoping to start a trading business there..... And I'm worried that I won't be able to see him again even once.<br> You see, my brother moved to Elmore hoping to start a trading business there..... And I'm worried that I won't be able to see him again even once.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3084001">Purchase Spellbooks, Amulets and Blueprints</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3084001">Purchase Spellbooks, Amulets and Blueprints</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3084002">Exchange a Spellbook (avaiable after 3rd CLass Tranfer)</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3084002">Exchange 3rd Class Spellbooks</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_SkillList">Learn certification skills</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_TerritoryStatus">Learn about the local governor and taxes</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_TerritoryStatus">Learn about the local governor and taxes</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button> <Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html> </body></html>

View File

@@ -7,7 +7,7 @@
<skill skillName="Expertise B" skillId="239" skillLevel="3" getLevel="52" autoGet="true" /> <skill skillName="Expertise B" skillId="239" skillLevel="3" getLevel="52" autoGet="true" />
<skill skillName="Expertise A" skillId="239" skillLevel="4" getLevel="61" autoGet="true" /> <skill skillName="Expertise A" skillId="239" skillLevel="4" getLevel="61" autoGet="true" />
<skill skillName="Expertise S" skillId="239" skillLevel="5" getLevel="76" autoGet="true" /> <skill skillName="Expertise S" skillId="239" skillLevel="5" getLevel="76" autoGet="true" />
<skill skillName="Pirate" skillId="1800" skillLevel="1" getLevel="45" autoGet="true" /> <skill skillName="Pirate" skillId="1800" skillLevel="1" getLevel="45" autoGet="true" />
<skill skillName="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" autoGet="true" /> <skill skillName="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" autoGet="true" />
<skill skillName="White Assassin" skillId="1802" skillLevel="1" getLevel="70" autoGet="true" /> <skill skillName="White Assassin" skillId="1802" skillLevel="1" getLevel="70" autoGet="true" />

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd">
<skillTree type="certificationSkillTree">
<skill skillName="Dye of War" skillId="51271" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dye of War" skillId="51271" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resist" skillId="51275" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resist" skillId="51276" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resist" skillId="51277" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resist" skillId="51278" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resist" skillId="51279" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resist" skillId="51280" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="4" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resist" skillId="51281" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
</skillTree>
</list>

View File

@@ -19,7 +19,7 @@ parentClassId = CLASS ID PARENT
type = SKILL TREE types like: type = SKILL TREE types like:
- classSkillTree - classSkillTree
- collectSkillTree - certificationSkillTree
- fishingSkillTree - fishingSkillTree
- gameMasterAuraSkillTree - gameMasterAuraSkillTree
- gameMasterSkillTree - gameMasterSkillTree

View File

@@ -298,26 +298,88 @@
<skill id="51247" toLevel="1" name="Disarm"> <skill id="51247" toLevel="1" name="Disarm">
<!-- For 5 sec. makes target's and nearby enemies' weapon useless, P./ M. Atk. -30%, Speed -10%. --> <!-- For 5 sec. makes target's and nearby enemies' weapon useless, P./ M. Atk. -30%, Speed -10%. -->
<icon>icon.skill0485</icon> <icon>icon.skill0485</icon>
<operateType>A1</operateType> <abnormalLevel>1</abnormalLevel>
<isDebuff>true</isDebuff> <abnormalTime>5</abnormalTime>
<castRange>600</castRange> <abnormalType>DISARM</abnormalType>
<abnormalVisualEffect>DOT_BLEEDING</abnormalVisualEffect>
<activateRate>70</activateRate>
<affectLimit>6-12</affectLimit>
<affectRange>200</affectRange>
<basicProperty>PHYSICAL</basicProperty>
<effectPoint>-341</effectPoint>
<hitTime>1500</hitTime> <hitTime>1500</hitTime>
<coolTime>500</coolTime> <coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay> <icon>icon.skill0794</icon>
<effectPoint>-341</effectPoint> <isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<mpConsume>205</mpConsume> <mpConsume>205</mpConsume>
<operateType>A2</operateType>
<reuseDelay>60000</reuseDelay>
<magicCriticalRate>5</magicCriticalRate>
<trait>DISARM</trait>
<targetType>SELF</targetType>
<affectScope>POINT_BLANK</affectScope>
<affectObject>NOT_FRIEND</affectObject>
<effects>
<effect name="Disarm">
</effect>
<effect name="PAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="MAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="Speed">
<amount>-10</amount>
<mode>PER</mode>
</effect>
</effects>
</skill> </skill>
<skill id="51248" toLevel="1" name="Armor Break"> <skill id="51248" toLevel="1" name="Armor Break">
<!-- For 5 sec. makes target's and nearby enemies' armor useless, P./ M. Def. -30%, Speed -10%. --> <!-- For 5 sec. makes target's and nearby enemies' armor useless, P./ M. Def. -30%, Speed -10%. -->
<icon>icon.skill10703</icon> <icon>icon.skill10703</icon>
<operateType>A1</operateType> <abnormalLevel>1</abnormalLevel>
<isDebuff>true</isDebuff> <abnormalTime>5</abnormalTime>
<castRange>600</castRange> <abnormalType>DISARM</abnormalType>
<abnormalVisualEffect>DOT_BLEEDING</abnormalVisualEffect>
<activateRate>70</activateRate>
<affectLimit>6-12</affectLimit>
<affectRange>200</affectRange>
<basicProperty>PHYSICAL</basicProperty>
<effectPoint>-341</effectPoint>
<hitTime>1500</hitTime> <hitTime>1500</hitTime>
<coolTime>500</coolTime> <coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay> <icon>icon.skill0794</icon>
<effectPoint>-341</effectPoint> <isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<mpConsume>205</mpConsume> <mpConsume>205</mpConsume>
<operateType>A2</operateType>
<reuseDelay>60000</reuseDelay>
<magicCriticalRate>5</magicCriticalRate>
<trait>DISARM</trait>
<targetType>SELF</targetType>
<affectScope>POINT_BLANK</affectScope>
<affectObject>NOT_FRIEND</affectObject>
<effects>
<effect name="Disarmor">
</effect>
<effect name="PAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="MAtk">
<amount>-30</amount>
<mode>PER</mode>
</effect>
<effect name="Speed">
<amount>-10</amount>
<mode>PER</mode>
</effect>
</effects>
</skill> </skill>
<skill id="51249" toLevel="1" name="Spell Break"> <skill id="51249" toLevel="1" name="Spell Break">
<!-- For 5 sec. makes target's and nearby enemies' Skills useless. --> <!-- For 5 sec. makes target's and nearby enemies' Skills useless. -->
@@ -355,11 +417,42 @@
<skill id="51252" toLevel="1" name="Berserker Mode"> <skill id="51252" toLevel="1" name="Berserker Mode">
<!-- For 20 sec. P./ M. Atk., and Atk./ Casting Spd. +50%. Cannot be stacked with Berserker Spirit that will be available after transformation into Dragon Berserker. --> <!-- For 20 sec. P./ M. Atk., and Atk./ Casting Spd. +50%. Cannot be stacked with Berserker Spirit that will be available after transformation into Dragon Berserker. -->
<icon>icon.skill10274</icon> <icon>icon.skill10274</icon>
<operateType>A1</operateType>
<hitTime>2000</hitTime>
<reuseDelay>300000</reuseDelay> <reuseDelay>300000</reuseDelay>
<effectPoint>20</effectPoint> <effectPoint>20</effectPoint>
<mpConsume>200</mpConsume> <abnormalLevel>3</abnormalLevel>
<abnormalTime>20</abnormalTime>
<abnormalType>BERSERKER</abnormalType>
<castRange>1200</castRange>
<effectRange>1400</effectRange>
<isMagic>4</isMagic> <!-- Item Skill -->
<isTriggeredSkill>true</isTriggeredSkill>
<magicLevel>80</magicLevel>
<operateType>A2</operateType>
<basicProperty>NONE</basicProperty>
<magicCriticalRate>-5</magicCriticalRate>
<targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope>
<effects>
<effect name="PAtk">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="MAtk">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="PhysicalAttackSpeed">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="MagicalAttackSpeed">
<amount>50</amount>
<mode>PER</mode>
</effect>
<effect name="DamageShield">
<amount>15</amount>
</effect>
</effects>
</skill> </skill>
<skill id="51253" toLevel="1" name="Elmoreden XP Scroll"> <skill id="51253" toLevel="1" name="Elmoreden XP Scroll">
<!-- 500,000 XP. --> <!-- 500,000 XP. -->
@@ -516,6 +609,15 @@
<value level="5">30</value> <value level="5">30</value>
</amount> </amount>
</effect> </effect>
<effect name="SpModify">
<amount>
<value level="1">5</value>
<value level="2">7</value>
<value level="3">12</value>
<value level="4">20</value>
<value level="5">30</value>
</amount>
</effect>
</effects> </effects>
</skill> </skill>
<skill id="51273" toLevel="5" name="Courage Mastery"> <skill id="51273" toLevel="5" name="Courage Mastery">
@@ -544,11 +646,11 @@
<effects> <effects>
<effect name="ReduceDropPenalty"> <effect name="ReduceDropPenalty">
<exp> <exp>
<value level="1">0</value> <value level="1">-5</value>
<value level="2">0</value> <value level="2">-10</value>
<value level="3">0</value> <value level="3">-15</value>
<value level="4">0</value> <value level="4">-20</value>
<value level="5">0</value> <value level="5">-25</value>
</exp> </exp>
<deathPenalty> <deathPenalty>
<value level="1">-5</value> <value level="1">-5</value>
@@ -558,7 +660,7 @@
<value level="5">-25</value> <value level="5">-25</value>
</deathPenalty> </deathPenalty>
<mode>PER</mode> <mode>PER</mode>
<type>PK</type> <type>ANY</type>
</effect> </effect>
</effects> </effects>
</skill> </skill>

View File

@@ -143,7 +143,7 @@
<xs:enumeration value="alchemySkillTree" /> <xs:enumeration value="alchemySkillTree" />
<xs:enumeration value="awakeningSaveSkillTree" /> <xs:enumeration value="awakeningSaveSkillTree" />
<xs:enumeration value="classSkillTree" /> <xs:enumeration value="classSkillTree" />
<xs:enumeration value="collectSkillTree" /> <xs:enumeration value="certificationSkillTree" />
<xs:enumeration value="dualClassSkillTree" /> <xs:enumeration value="dualClassSkillTree" />
<xs:enumeration value="fishingSkillTree" /> <xs:enumeration value="fishingSkillTree" />
<xs:enumeration value="gameMasterAuraSkillTree" /> <xs:enumeration value="gameMasterAuraSkillTree" />

View File

@@ -61,7 +61,7 @@ import org.l2jmobius.gameserver.model.skill.Skill;
* <ul> * <ul>
* <li>Class skill trees: player skill trees for each class.</li> * <li>Class skill trees: player skill trees for each class.</li>
* <li>Transfer skill trees: player skill trees for each healer class.</li> * <li>Transfer skill trees: player skill trees for each healer class.</li>
* <li>Collect skill tree: player skill tree for Gracia related skills.</li> * <li>Certification skill tree: player skill tree for certification-related skills.</li>
* <li>Fishing skill tree: player skill tree for fishing related skills.</li> * <li>Fishing skill tree: player skill tree for fishing related skills.</li>
* <li>Transform skill tree: player skill tree for transformation related skills.</li> * <li>Transform skill tree: player skill tree for transformation related skills.</li>
* <li>Sub-Class skill tree: player skill tree for sub-class related skills.</li> * <li>Sub-Class skill tree: player skill tree for sub-class related skills.</li>
@@ -87,7 +87,7 @@ public class SkillTreeData implements IXmlReader
private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>(); private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>();
private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>(); private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>();
// Skill Hash Code, SkillLearn // Skill Hash Code, SkillLearn
private static final Map<Long, SkillLearn> _collectSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _certificationSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _fishingSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _fishingSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _pledgeSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _pledgeSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>();
@@ -128,7 +128,7 @@ public class SkillTreeData implements IXmlReader
{ {
_loading = true; _loading = true;
_classSkillTrees.clear(); _classSkillTrees.clear();
_collectSkillTree.clear(); _certificationSkillTree.clear();
_fishingSkillTree.clear(); _fishingSkillTree.clear();
_pledgeSkillTree.clear(); _pledgeSkillTree.clear();
_subClassSkillTree.clear(); _subClassSkillTree.clear();
@@ -298,9 +298,9 @@ public class SkillTreeData implements IXmlReader
transferSkillTree.put(skillHashCode, skillLearn); transferSkillTree.put(skillHashCode, skillLearn);
break; break;
} }
case "collectSkillTree": case "certificationSkillTree":
{ {
_collectSkillTree.put(skillHashCode, skillLearn); _certificationSkillTree.put(skillHashCode, skillLearn);
break; break;
} }
case "raceSkillTree": case "raceSkillTree":
@@ -484,12 +484,12 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Gets the collect skill tree. * Gets the Certification skill tree.
* @return the complete Collect Skill Tree * @return the complete Certification Skill Tree
*/ */
public Map<Long, SkillLearn> getCollectSkillTree() public Map<Long, SkillLearn> getCertificationSkillTree()
{ {
return _collectSkillTree; return _certificationSkillTree;
} }
/** /**
@@ -959,14 +959,14 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Used in Gracia continent. * Implemented in Secret of Empire
* @param player the collecting skill learning player * @param player the certification skill learning player
* @return all the available Collecting skills for a given {@code player} * @return all the available Certification skills for a given {@code player}
*/ */
public List<SkillLearn> getAvailableCollectSkills(Player player) public List<SkillLearn> getAvailableCertificationSkills(Player player)
{ {
final List<SkillLearn> result = new ArrayList<>(); final List<SkillLearn> result = new ArrayList<>();
for (SkillLearn skill : _collectSkillTree.values()) for (SkillLearn skill : _certificationSkillTree.values())
{ {
final Skill oldSkill = player.getSkills().get(skill.getSkillId()); final Skill oldSkill = player.getSkills().get(skill.getSkillId());
if (oldSkill != null) if (oldSkill != null)
@@ -1229,9 +1229,9 @@ public class SkillTreeData implements IXmlReader
sl = getSubClassSkill(id, lvl); sl = getSubClassSkill(id, lvl);
break; break;
} }
case COLLECT: case CERTIFICATION:
{ {
sl = getCollectSkill(id, lvl); sl = getCertificationSkill(id, lvl);
break; break;
} }
case REVELATION: case REVELATION:
@@ -1405,14 +1405,14 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Gets the collect skill. * Gets the certification skill.
* @param id the collect skill Id * @param id the certification skill Id
* @param lvl the collect skill level * @param lvl the certification skill level
* @return the collect skill from the Collect Skill Tree for a given {@code id} and {@code lvl} * @return the certification skill from the Certification Skill Tree for a given {@code id} and {@code lvl}
*/ */
public SkillLearn getCollectSkill(int id, int lvl) public SkillLearn getCertificationSkill(int id, int lvl)
{ {
return _collectSkillTree.get(SkillData.getSkillHashCode(id, lvl)); return _certificationSkillTree.get(SkillData.getSkillHashCode(id, lvl));
} }
/** /**
@@ -1712,7 +1712,7 @@ public class SkillTreeData implements IXmlReader
} }
} }
for (SkillLearn s : _collectSkillTree.values()) for (SkillLearn s : _certificationSkillTree.values())
{ {
list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel())); list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel()));
} }
@@ -1847,7 +1847,7 @@ public class SkillTreeData implements IXmlReader
LOGGER.info(className + ": Loaded " + transferSkillTreeCount + " transfer skills for " + _transferSkillTrees.size() + " transfer skill trees."); LOGGER.info(className + ": Loaded " + transferSkillTreeCount + " transfer skills for " + _transferSkillTrees.size() + " transfer skill trees.");
LOGGER.info(className + ": Loaded " + raceSkillTreeCount + " race skills for " + _raceSkillTree.size() + " race skill trees."); LOGGER.info(className + ": Loaded " + raceSkillTreeCount + " race skills for " + _raceSkillTree.size() + " race skill trees.");
LOGGER.info(className + ": Loaded " + _fishingSkillTree.size() + " fishing skills, " + dwarvenOnlyFishingSkillCount + " Dwarven only fishing skills."); LOGGER.info(className + ": Loaded " + _fishingSkillTree.size() + " fishing skills, " + dwarvenOnlyFishingSkillCount + " Dwarven only fishing skills.");
LOGGER.info(className + ": Loaded " + _collectSkillTree.size() + " collect skills."); LOGGER.info(className + ": Loaded " + _certificationSkillTree.size() + " certification skills.");
LOGGER.info(className + ": Loaded " + _pledgeSkillTree.size() + " clan skills, " + (_pledgeSkillTree.size() - resSkillCount) + " for clan and " + resSkillCount + " residential."); LOGGER.info(className + ": Loaded " + _pledgeSkillTree.size() + " clan skills, " + (_pledgeSkillTree.size() - resSkillCount) + " for clan and " + resSkillCount + " residential.");
LOGGER.info(className + ": Loaded " + _subPledgeSkillTree.size() + " sub-pledge skills."); LOGGER.info(className + ": Loaded " + _subPledgeSkillTree.size() + " sub-pledge skills.");
LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills."); LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills.");

View File

@@ -29,7 +29,7 @@ public enum AcquireSkillType
TRANSFORM(4), TRANSFORM(4),
TRANSFER(5), TRANSFER(5),
SUBCLASS(6), SUBCLASS(6),
COLLECT(7), CERTIFICATION(7),
DUMMY2(8), DUMMY2(8),
DUMMY3(9), DUMMY3(9),
FISHING(10), FISHING(10),

View File

@@ -63,12 +63,12 @@ public class Folk extends Npc
public static void showSkillList(Player player, Npc npc, ClassId classId) public static void showSkillList(Player player, Npc npc, ClassId classId)
{ {
final int npcId = npc.getTemplate().getId(); final int npcId = npc.getTemplate().getId();
if (npcId == 32611) // Tolonis (Officer) if (npcId == 30840) // Lorenzo
{ {
final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailableCollectSkills(player); final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailableCertificationSkills(player);
if (skills.isEmpty()) // No more skills to learn, come back when you level. if (skills.isEmpty()) // No more skills to learn, come back when you level.
{ {
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCollectSkillTree()); final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCertificationSkillTree());
if (minLevel > 0) if (minLevel > 0)
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1);
@@ -82,7 +82,7 @@ public class Folk extends Npc
} }
else else
{ {
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.COLLECT)); player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.CERTIFICATION));
} }
return; return;
} }

View File

@@ -276,8 +276,8 @@ public class Transform implements IIdentifiable
} }
} }
// Add collection skills. // Add certification skills.
for (SkillLearn s : SkillTreeData.getInstance().getCollectSkillTree().values()) for (SkillLearn s : SkillTreeData.getInstance().getCertificationSkillTree().values())
{ {
final Skill skill = player.getKnownSkill(s.getSkillId()); final Skill skill = player.getKnownSkill(s.getSkillId());
if (skill != null) if (skill != null)

View File

@@ -365,7 +365,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
break; break;
} }
case COLLECT: case CERTIFICATION:
{ {
if (checkPlayerSkill(player, trainer, s)) if (checkPlayerSkill(player, trainer, s))
{ {

View File

@@ -90,7 +90,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
case TRANSFORM: case TRANSFORM:
case FISHING: case FISHING:
case SUBCLASS: case SUBCLASS:
case COLLECT: case CERTIFICATION:
case TRANSFER: case TRANSFER:
case DUALCLASS: case DUALCLASS:
{ {

View File

@@ -2,7 +2,8 @@
Hm, Lately there have been rumor about a limited opening of a border with Elmore, but it's not clear whether it's misheard talks from bigwigs or they're going to tighten the crews even more instead.....<br> Hm, Lately there have been rumor about a limited opening of a border with Elmore, but it's not clear whether it's misheard talks from bigwigs or they're going to tighten the crews even more instead.....<br>
You see, my brother moved to Elmore hoping to start a trading business there..... And I'm worried that I won't be able to see him again even once.<br> You see, my brother moved to Elmore hoping to start a trading business there..... And I'm worried that I won't be able to see him again even once.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3084001">Purchase Spellbooks, Amulets and Blueprints</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3084001">Purchase Spellbooks, Amulets and Blueprints</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3084002">Exchange a Spellbook (avaiable after 3rd CLass Tranfer)</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3084002">Exchange 3rd Class Spellbooks</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_SkillList">Learn certification skills</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_TerritoryStatus">Learn about the local governor and taxes</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_TerritoryStatus">Learn about the local governor and taxes</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button> <Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html> </body></html>

View File

@@ -2,6 +2,7 @@
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd"> <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd">
<skillTree type="classSkillTree"> <skillTree type="classSkillTree">
<skill skillName="Lucky" skillId="194" skillLevel="1" getLevel="1" autoGet="true" /> <skill skillName="Lucky" skillId="194" skillLevel="1" getLevel="1" autoGet="true" />
<skill skillName="Pirate" skillId="1800" skillLevel="1" getLevel="45" autoGet="true" /> <skill skillName="Pirate" skillId="1800" skillLevel="1" getLevel="45" autoGet="true" />
<skill skillName="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" autoGet="true" /> <skill skillName="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" autoGet="true" />
<skill skillName="White Assassin" skillId="1802" skillLevel="1" getLevel="70" autoGet="true" /> <skill skillName="White Assassin" skillId="1802" skillLevel="1" getLevel="70" autoGet="true" />

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd">
<skillTree type="certificationSkillTree">
<skill skillName="Warpaint" skillId="51271" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Warpaint" skillId="51271" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Warpaint" skillId="51271" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Warpaint" skillId="51271" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Warpaint" skillId="51271" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Didactic" skillId="51272" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Courage Mastery" skillId="51273" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="30" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Honor Recovery" skillId="51274" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="45" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resistance" skillId="51275" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resistance" skillId="51275" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resistance" skillId="51275" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resistance" skillId="51275" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Sword Resistance" skillId="51275" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Blunt Resistance" skillId="51276" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Spear Resistance" skillId="51277" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resistance" skillId="51278" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resistance" skillId="51278" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resistance" skillId="51278" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resistance" skillId="51278" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Fist Weapon Resistance" skillId="51278" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resistance" skillId="51279" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resistance" skillId="51279" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resistance" skillId="51279" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resistance" skillId="51279" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dagger Resistance" skillId="51279" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resistance" skillId="51280" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resistance" skillId="51280" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resistance" skillId="51280" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resistance" skillId="51280" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Bow Resistance" skillId="51280" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resistance" skillId="51281" skillLevel="1" getLevel="1" learnedByNpc="true">
<item id="91481" count="1" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resistance" skillId="51281" skillLevel="2" getLevel="1" learnedByNpc="true">
<item id="91481" count="3" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resistance" skillId="51281" skillLevel="3" getLevel="1" learnedByNpc="true">
<item id="91481" count="5" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resistance" skillId="51281" skillLevel="4" getLevel="1" learnedByNpc="true">
<item id="91481" count="10" /> <!-- Soul Crystal -->
</skill>
<skill skillName="Dual Sword Resistance" skillId="51281" skillLevel="5" getLevel="1" learnedByNpc="true">
<item id="91481" count="15" /> <!-- Soul Crystal -->
</skill>
</skillTree>
</list>

View File

@@ -19,7 +19,7 @@ parentClassId = CLASS ID PARENT
type = SKILL TREE types like: type = SKILL TREE types like:
- classSkillTree - classSkillTree
- collectSkillTree - certificationSkillTree
- fishingSkillTree - fishingSkillTree
- gameMasterAuraSkillTree - gameMasterAuraSkillTree
- gameMasterSkillTree - gameMasterSkillTree

View File

@@ -617,6 +617,15 @@
<value level="5">30</value> <value level="5">30</value>
</amount> </amount>
</effect> </effect>
<effect name="SpModify">
<amount>
<value level="1">5</value>
<value level="2">7</value>
<value level="3">12</value>
<value level="4">20</value>
<value level="5">30</value>
</amount>
</effect>
</effects> </effects>
</skill> </skill>
<skill id="51273" toLevel="5" name="Courage Mastery"> <skill id="51273" toLevel="5" name="Courage Mastery">
@@ -645,11 +654,11 @@
<effects> <effects>
<effect name="ReduceDropPenalty"> <effect name="ReduceDropPenalty">
<exp> <exp>
<value level="1">0</value> <value level="1">-5</value>
<value level="2">0</value> <value level="2">-10</value>
<value level="3">0</value> <value level="3">-15</value>
<value level="4">0</value> <value level="4">-20</value>
<value level="5">0</value> <value level="5">-25</value>
</exp> </exp>
<deathPenalty> <deathPenalty>
<value level="1">-5</value> <value level="1">-5</value>
@@ -659,7 +668,7 @@
<value level="5">-25</value> <value level="5">-25</value>
</deathPenalty> </deathPenalty>
<mode>PER</mode> <mode>PER</mode>
<type>PK</type> <type>ANY</type>
</effect> </effect>
</effects> </effects>
</skill> </skill>

View File

@@ -143,7 +143,7 @@
<xs:enumeration value="alchemySkillTree" /> <xs:enumeration value="alchemySkillTree" />
<xs:enumeration value="awakeningSaveSkillTree" /> <xs:enumeration value="awakeningSaveSkillTree" />
<xs:enumeration value="classSkillTree" /> <xs:enumeration value="classSkillTree" />
<xs:enumeration value="collectSkillTree" /> <xs:enumeration value="certificationSkillTree" />
<xs:enumeration value="dualClassSkillTree" /> <xs:enumeration value="dualClassSkillTree" />
<xs:enumeration value="fishingSkillTree" /> <xs:enumeration value="fishingSkillTree" />
<xs:enumeration value="gameMasterAuraSkillTree" /> <xs:enumeration value="gameMasterAuraSkillTree" />

View File

@@ -61,7 +61,7 @@ import org.l2jmobius.gameserver.model.skill.Skill;
* <ul> * <ul>
* <li>Class skill trees: player skill trees for each class.</li> * <li>Class skill trees: player skill trees for each class.</li>
* <li>Transfer skill trees: player skill trees for each healer class.</li> * <li>Transfer skill trees: player skill trees for each healer class.</li>
* <li>Collect skill tree: player skill tree for Gracia related skills.</li> * <li>Certification skill tree: player skill tree for certification-related skills.</li>
* <li>Fishing skill tree: player skill tree for fishing related skills.</li> * <li>Fishing skill tree: player skill tree for fishing related skills.</li>
* <li>Transform skill tree: player skill tree for transformation related skills.</li> * <li>Transform skill tree: player skill tree for transformation related skills.</li>
* <li>Sub-Class skill tree: player skill tree for sub-class related skills.</li> * <li>Sub-Class skill tree: player skill tree for sub-class related skills.</li>
@@ -87,7 +87,7 @@ public class SkillTreeData implements IXmlReader
private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>(); private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>();
private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>(); private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>();
// Skill Hash Code, SkillLearn // Skill Hash Code, SkillLearn
private static final Map<Long, SkillLearn> _collectSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _certificationSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _fishingSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _fishingSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _pledgeSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _pledgeSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>(); private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>();
@@ -128,7 +128,7 @@ public class SkillTreeData implements IXmlReader
{ {
_loading = true; _loading = true;
_classSkillTrees.clear(); _classSkillTrees.clear();
_collectSkillTree.clear(); _certificationSkillTree.clear();
_fishingSkillTree.clear(); _fishingSkillTree.clear();
_pledgeSkillTree.clear(); _pledgeSkillTree.clear();
_subClassSkillTree.clear(); _subClassSkillTree.clear();
@@ -298,9 +298,9 @@ public class SkillTreeData implements IXmlReader
transferSkillTree.put(skillHashCode, skillLearn); transferSkillTree.put(skillHashCode, skillLearn);
break; break;
} }
case "collectSkillTree": case "certificationSkillTree":
{ {
_collectSkillTree.put(skillHashCode, skillLearn); _certificationSkillTree.put(skillHashCode, skillLearn);
break; break;
} }
case "raceSkillTree": case "raceSkillTree":
@@ -484,12 +484,12 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Gets the collect skill tree. * Gets the Certification skill tree.
* @return the complete Collect Skill Tree * @return the complete Certification Skill Tree
*/ */
public Map<Long, SkillLearn> getCollectSkillTree() public Map<Long, SkillLearn> getCertificationSkillTree()
{ {
return _collectSkillTree; return _certificationSkillTree;
} }
/** /**
@@ -964,14 +964,14 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Used in Gracia continent. * Implemented in Secret of Empire
* @param player the collecting skill learning player * @param player the certification skill learning player
* @return all the available Collecting skills for a given {@code player} * @return all the available Certification skills for a given {@code player}
*/ */
public List<SkillLearn> getAvailableCollectSkills(Player player) public List<SkillLearn> getAvailableCertificationSkills(Player player)
{ {
final List<SkillLearn> result = new ArrayList<>(); final List<SkillLearn> result = new ArrayList<>();
for (SkillLearn skill : _collectSkillTree.values()) for (SkillLearn skill : _certificationSkillTree.values())
{ {
final Skill oldSkill = player.getSkills().get(skill.getSkillId()); final Skill oldSkill = player.getSkills().get(skill.getSkillId());
if (oldSkill != null) if (oldSkill != null)
@@ -1234,9 +1234,9 @@ public class SkillTreeData implements IXmlReader
sl = getSubClassSkill(id, lvl); sl = getSubClassSkill(id, lvl);
break; break;
} }
case COLLECT: case CERTIFICATION:
{ {
sl = getCollectSkill(id, lvl); sl = getCertificationSkill(id, lvl);
break; break;
} }
case REVELATION: case REVELATION:
@@ -1410,14 +1410,14 @@ public class SkillTreeData implements IXmlReader
} }
/** /**
* Gets the collect skill. * Gets the certification skill.
* @param id the collect skill Id * @param id the certification skill Id
* @param lvl the collect skill level * @param lvl the certification skill level
* @return the collect skill from the Collect Skill Tree for a given {@code id} and {@code lvl} * @return the certification skill from the Certification Skill Tree for a given {@code id} and {@code lvl}
*/ */
public SkillLearn getCollectSkill(int id, int lvl) public SkillLearn getCertificationSkill(int id, int lvl)
{ {
return _collectSkillTree.get(SkillData.getSkillHashCode(id, lvl)); return _certificationSkillTree.get(SkillData.getSkillHashCode(id, lvl));
} }
/** /**
@@ -1741,7 +1741,7 @@ public class SkillTreeData implements IXmlReader
} }
} }
for (SkillLearn s : _collectSkillTree.values()) for (SkillLearn s : _certificationSkillTree.values())
{ {
list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel())); list.add(SkillData.getSkillHashCode(s.getSkillId(), s.getSkillLevel()));
} }
@@ -1876,7 +1876,7 @@ public class SkillTreeData implements IXmlReader
LOGGER.info(className + ": Loaded " + transferSkillTreeCount + " transfer skills for " + _transferSkillTrees.size() + " transfer skill trees."); LOGGER.info(className + ": Loaded " + transferSkillTreeCount + " transfer skills for " + _transferSkillTrees.size() + " transfer skill trees.");
LOGGER.info(className + ": Loaded " + raceSkillTreeCount + " race skills for " + _raceSkillTree.size() + " race skill trees."); LOGGER.info(className + ": Loaded " + raceSkillTreeCount + " race skills for " + _raceSkillTree.size() + " race skill trees.");
LOGGER.info(className + ": Loaded " + _fishingSkillTree.size() + " fishing skills, " + dwarvenOnlyFishingSkillCount + " Dwarven only fishing skills."); LOGGER.info(className + ": Loaded " + _fishingSkillTree.size() + " fishing skills, " + dwarvenOnlyFishingSkillCount + " Dwarven only fishing skills.");
LOGGER.info(className + ": Loaded " + _collectSkillTree.size() + " collect skills."); LOGGER.info(className + ": Loaded " + _certificationSkillTree.size() + " certification skills.");
LOGGER.info(className + ": Loaded " + _pledgeSkillTree.size() + " clan skills, " + (_pledgeSkillTree.size() - resSkillCount) + " for clan and " + resSkillCount + " residential."); LOGGER.info(className + ": Loaded " + _pledgeSkillTree.size() + " clan skills, " + (_pledgeSkillTree.size() - resSkillCount) + " for clan and " + resSkillCount + " residential.");
LOGGER.info(className + ": Loaded " + _subPledgeSkillTree.size() + " sub-pledge skills."); LOGGER.info(className + ": Loaded " + _subPledgeSkillTree.size() + " sub-pledge skills.");
LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills."); LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills.");

View File

@@ -29,7 +29,7 @@ public enum AcquireSkillType
TRANSFORM(4), TRANSFORM(4),
TRANSFER(5), TRANSFER(5),
SUBCLASS(6), SUBCLASS(6),
COLLECT(7), CERTIFICATION(7),
DUMMY2(8), DUMMY2(8),
DUMMY3(9), DUMMY3(9),
FISHING(10), FISHING(10),

View File

@@ -63,12 +63,12 @@ public class Folk extends Npc
public static void showSkillList(Player player, Npc npc, ClassId classId) public static void showSkillList(Player player, Npc npc, ClassId classId)
{ {
final int npcId = npc.getTemplate().getId(); final int npcId = npc.getTemplate().getId();
if (npcId == 32611) // Tolonis (Officer) if (npcId == 30840) // Lorenzo
{ {
final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailableCollectSkills(player); final List<SkillLearn> skills = SkillTreeData.getInstance().getAvailableCertificationSkills(player);
if (skills.isEmpty()) // No more skills to learn, come back when you level. if (skills.isEmpty()) // No more skills to learn, come back when you level.
{ {
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCollectSkillTree()); final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCertificationSkillTree());
if (minLevel > 0) if (minLevel > 0)
{ {
final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1); final SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1);
@@ -82,7 +82,7 @@ public class Folk extends Npc
} }
else else
{ {
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.COLLECT)); player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.CERTIFICATION));
} }
return; return;
} }

View File

@@ -276,8 +276,8 @@ public class Transform implements IIdentifiable
} }
} }
// Add collection skills. // Add certification skills.
for (SkillLearn s : SkillTreeData.getInstance().getCollectSkillTree().values()) for (SkillLearn s : SkillTreeData.getInstance().getCertificationSkillTree().values())
{ {
final Skill skill = player.getKnownSkill(s.getSkillId()); final Skill skill = player.getKnownSkill(s.getSkillId());
if (skill != null) if (skill != null)

View File

@@ -356,7 +356,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
break; break;
} }
case COLLECT: case CERTIFICATION:
{ {
if (checkPlayerSkill(player, trainer, s)) if (checkPlayerSkill(player, trainer, s))
{ {

View File

@@ -89,7 +89,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
case TRANSFORM: case TRANSFORM:
case FISHING: case FISHING:
case SUBCLASS: case SUBCLASS:
case COLLECT: case CERTIFICATION:
case TRANSFER: case TRANSFER:
case DUALCLASS: case DUALCLASS:
{ {