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>
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%_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="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</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 A" skillId="239" skillLevel="4" getLevel="61" 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="Dark Assassin" skillId="1801" skillLevel="1" getLevel="60" 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:
- classSkillTree
- collectSkillTree
- certificationSkillTree
- fishingSkillTree
- gameMasterAuraSkillTree
- gameMasterSkillTree

View File

@ -298,26 +298,88 @@
<skill id="51247" toLevel="1" name="Disarm">
<!-- For 5 sec. makes target's and nearby enemies' weapon useless, P./ M. Atk. -30%, Speed -10%. -->
<icon>icon.skill0485</icon>
<operateType>A1</operateType>
<isDebuff>true</isDebuff>
<castRange>600</castRange>
<abnormalLevel>1</abnormalLevel>
<abnormalTime>5</abnormalTime>
<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>
<coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay>
<effectPoint>-341</effectPoint>
<icon>icon.skill0794</icon>
<isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<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 id="51248" toLevel="1" name="Armor Break">
<!-- For 5 sec. makes target's and nearby enemies' armor useless, P./ M. Def. -30%, Speed -10%. -->
<icon>icon.skill10703</icon>
<operateType>A1</operateType>
<isDebuff>true</isDebuff>
<castRange>600</castRange>
<abnormalLevel>1</abnormalLevel>
<abnormalTime>5</abnormalTime>
<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>
<coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay>
<effectPoint>-341</effectPoint>
<icon>icon.skill0794</icon>
<isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<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 id="51249" toLevel="1" name="Spell Break">
<!-- For 5 sec. makes target's and nearby enemies' Skills useless. -->
@ -355,11 +417,42 @@
<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. -->
<icon>icon.skill10274</icon>
<operateType>A1</operateType>
<hitTime>2000</hitTime>
<reuseDelay>300000</reuseDelay>
<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 id="51253" toLevel="1" name="Elmoreden XP Scroll">
<!-- 500,000 XP. -->
@ -516,6 +609,15 @@
<value level="5">30</value>
</amount>
</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>
</skill>
<skill id="51273" toLevel="5" name="Courage Mastery">
@ -544,11 +646,11 @@
<effects>
<effect name="ReduceDropPenalty">
<exp>
<value level="1">0</value>
<value level="2">0</value>
<value level="3">0</value>
<value level="4">0</value>
<value level="5">0</value>
<value level="1">-5</value>
<value level="2">-10</value>
<value level="3">-15</value>
<value level="4">-20</value>
<value level="5">-25</value>
</exp>
<deathPenalty>
<value level="1">-5</value>
@ -558,7 +660,7 @@
<value level="5">-25</value>
</deathPenalty>
<mode>PER</mode>
<type>PK</type>
<type>ANY</type>
</effect>
</effects>
</skill>

View File

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

View File

@ -61,7 +61,7 @@ import org.l2jmobius.gameserver.model.skill.Skill;
* <ul>
* <li>Class skill trees: player skill trees for each 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>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>
@ -87,7 +87,7 @@ public class SkillTreeData implements IXmlReader
private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>();
private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>();
// 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> _pledgeSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>();
@ -128,7 +128,7 @@ public class SkillTreeData implements IXmlReader
{
_loading = true;
_classSkillTrees.clear();
_collectSkillTree.clear();
_certificationSkillTree.clear();
_fishingSkillTree.clear();
_pledgeSkillTree.clear();
_subClassSkillTree.clear();
@ -298,9 +298,9 @@ public class SkillTreeData implements IXmlReader
transferSkillTree.put(skillHashCode, skillLearn);
break;
}
case "collectSkillTree":
case "certificationSkillTree":
{
_collectSkillTree.put(skillHashCode, skillLearn);
_certificationSkillTree.put(skillHashCode, skillLearn);
break;
}
case "raceSkillTree":
@ -484,12 +484,12 @@ public class SkillTreeData implements IXmlReader
}
/**
* Gets the collect skill tree.
* @return the complete Collect Skill Tree
* Gets the Certification 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.
* @param player the collecting skill learning player
* @return all the available Collecting skills for a given {@code player}
* Implemented in Secret of Empire
* @param player the certification skill learning 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<>();
for (SkillLearn skill : _collectSkillTree.values())
for (SkillLearn skill : _certificationSkillTree.values())
{
final Skill oldSkill = player.getSkills().get(skill.getSkillId());
if (oldSkill != null)
@ -1229,9 +1229,9 @@ public class SkillTreeData implements IXmlReader
sl = getSubClassSkill(id, lvl);
break;
}
case COLLECT:
case CERTIFICATION:
{
sl = getCollectSkill(id, lvl);
sl = getCertificationSkill(id, lvl);
break;
}
case REVELATION:
@ -1405,14 +1405,14 @@ public class SkillTreeData implements IXmlReader
}
/**
* Gets the collect skill.
* @param id the collect skill Id
* @param lvl the collect skill level
* @return the collect skill from the Collect Skill Tree for a given {@code id} and {@code lvl}
* Gets the certification skill.
* @param id the certification skill Id
* @param lvl the certification skill level
* @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()));
}
@ -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 " + 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 " + _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 " + _subPledgeSkillTree.size() + " sub-pledge skills.");
LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills.");

View File

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

View File

@ -63,12 +63,12 @@ public class Folk extends Npc
public static void showSkillList(Player player, Npc npc, ClassId classId)
{
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.
{
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCollectSkillTree());
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCertificationSkillTree());
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);
@ -82,7 +82,7 @@ public class Folk extends Npc
}
else
{
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.COLLECT));
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.CERTIFICATION));
}
return;
}

View File

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

View File

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

View File

@ -90,7 +90,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
case TRANSFORM:
case FISHING:
case SUBCLASS:
case COLLECT:
case CERTIFICATION:
case TRANSFER:
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>
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%_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="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -7,7 +7,7 @@
<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 S" skillId="239" skillLevel="5" getLevel="76" 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="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:
- classSkillTree
- collectSkillTree
- certificationSkillTree
- fishingSkillTree
- gameMasterAuraSkillTree
- gameMasterSkillTree

View File

@ -298,26 +298,88 @@
<skill id="51247" toLevel="1" name="Disarm">
<!-- For 5 sec. makes target's and nearby enemies' weapon useless, P./ M. Atk. -30%, Speed -10%. -->
<icon>icon.skill0485</icon>
<operateType>A1</operateType>
<isDebuff>true</isDebuff>
<castRange>600</castRange>
<abnormalLevel>1</abnormalLevel>
<abnormalTime>5</abnormalTime>
<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>
<coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay>
<effectPoint>-341</effectPoint>
<icon>icon.skill0794</icon>
<isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<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 id="51248" toLevel="1" name="Armor Break">
<!-- For 5 sec. makes target's and nearby enemies' armor useless, P./ M. Def. -30%, Speed -10%. -->
<icon>icon.skill10703</icon>
<operateType>A1</operateType>
<isDebuff>true</isDebuff>
<castRange>600</castRange>
<abnormalLevel>1</abnormalLevel>
<abnormalTime>5</abnormalTime>
<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>
<coolTime>500</coolTime>
<reuseDelay>120000</reuseDelay>
<effectPoint>-341</effectPoint>
<icon>icon.skill0794</icon>
<isDebuff>true</isDebuff>
<lvlBonusRate>20</lvlBonusRate>
<magicLevel>79</magicLevel>
<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 id="51249" toLevel="1" name="Spell Break">
<!-- For 5 sec. makes target's and nearby enemies' Skills useless. -->
@ -355,11 +417,42 @@
<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. -->
<icon>icon.skill10274</icon>
<operateType>A1</operateType>
<hitTime>2000</hitTime>
<reuseDelay>300000</reuseDelay>
<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 id="51253" toLevel="1" name="Elmoreden XP Scroll">
<!-- 500,000 XP. -->
@ -516,6 +609,15 @@
<value level="5">30</value>
</amount>
</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>
</skill>
<skill id="51273" toLevel="5" name="Courage Mastery">
@ -544,11 +646,11 @@
<effects>
<effect name="ReduceDropPenalty">
<exp>
<value level="1">0</value>
<value level="2">0</value>
<value level="3">0</value>
<value level="4">0</value>
<value level="5">0</value>
<value level="1">-5</value>
<value level="2">-10</value>
<value level="3">-15</value>
<value level="4">-20</value>
<value level="5">-25</value>
</exp>
<deathPenalty>
<value level="1">-5</value>
@ -558,7 +660,7 @@
<value level="5">-25</value>
</deathPenalty>
<mode>PER</mode>
<type>PK</type>
<type>ANY</type>
</effect>
</effects>
</skill>

View File

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

View File

@ -61,7 +61,7 @@ import org.l2jmobius.gameserver.model.skill.Skill;
* <ul>
* <li>Class skill trees: player skill trees for each 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>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>
@ -87,7 +87,7 @@ public class SkillTreeData implements IXmlReader
private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>();
private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>();
// 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> _pledgeSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>();
@ -128,7 +128,7 @@ public class SkillTreeData implements IXmlReader
{
_loading = true;
_classSkillTrees.clear();
_collectSkillTree.clear();
_certificationSkillTree.clear();
_fishingSkillTree.clear();
_pledgeSkillTree.clear();
_subClassSkillTree.clear();
@ -298,9 +298,9 @@ public class SkillTreeData implements IXmlReader
transferSkillTree.put(skillHashCode, skillLearn);
break;
}
case "collectSkillTree":
case "certificationSkillTree":
{
_collectSkillTree.put(skillHashCode, skillLearn);
_certificationSkillTree.put(skillHashCode, skillLearn);
break;
}
case "raceSkillTree":
@ -484,12 +484,12 @@ public class SkillTreeData implements IXmlReader
}
/**
* Gets the collect skill tree.
* @return the complete Collect Skill Tree
* Gets the Certification 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.
* @param player the collecting skill learning player
* @return all the available Collecting skills for a given {@code player}
* Implemented in Secret of Empire
* @param player the certification skill learning 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<>();
for (SkillLearn skill : _collectSkillTree.values())
for (SkillLearn skill : _certificationSkillTree.values())
{
final Skill oldSkill = player.getSkills().get(skill.getSkillId());
if (oldSkill != null)
@ -1229,9 +1229,9 @@ public class SkillTreeData implements IXmlReader
sl = getSubClassSkill(id, lvl);
break;
}
case COLLECT:
case CERTIFICATION:
{
sl = getCollectSkill(id, lvl);
sl = getCertificationSkill(id, lvl);
break;
}
case REVELATION:
@ -1405,14 +1405,14 @@ public class SkillTreeData implements IXmlReader
}
/**
* Gets the collect skill.
* @param id the collect skill Id
* @param lvl the collect skill level
* @return the collect skill from the Collect Skill Tree for a given {@code id} and {@code lvl}
* Gets the certification skill.
* @param id the certification skill Id
* @param lvl the certification skill level
* @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()));
}
@ -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 " + 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 " + _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 " + _subPledgeSkillTree.size() + " sub-pledge skills.");
LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills.");

View File

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

View File

@ -63,12 +63,12 @@ public class Folk extends Npc
public static void showSkillList(Player player, Npc npc, ClassId classId)
{
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.
{
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCollectSkillTree());
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCertificationSkillTree());
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);
@ -82,7 +82,7 @@ public class Folk extends Npc
}
else
{
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.COLLECT));
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.CERTIFICATION));
}
return;
}

View File

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

View File

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

View File

@ -90,7 +90,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
case TRANSFORM:
case FISHING:
case SUBCLASS:
case COLLECT:
case CERTIFICATION:
case TRANSFER:
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>
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%_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="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@ -2,6 +2,7 @@
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/skillTrees.xsd">
<skillTree type="classSkillTree">
<skill skillName="Lucky" skillId="194" skillLevel="1" getLevel="1" 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="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:
- classSkillTree
- collectSkillTree
- certificationSkillTree
- fishingSkillTree
- gameMasterAuraSkillTree
- gameMasterSkillTree

View File

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

View File

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

View File

@ -61,7 +61,7 @@ import org.l2jmobius.gameserver.model.skill.Skill;
* <ul>
* <li>Class skill trees: player skill trees for each 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>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>
@ -87,7 +87,7 @@ public class SkillTreeData implements IXmlReader
private static final Map<SubclassType, Map<Long, SkillLearn>> _revelationSkillTree = new ConcurrentHashMap<>();
private static final Map<ClassId, Set<Integer>> _awakeningSaveSkillTree = new ConcurrentHashMap<>();
// 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> _pledgeSkillTree = new ConcurrentHashMap<>();
private static final Map<Long, SkillLearn> _subClassSkillTree = new ConcurrentHashMap<>();
@ -128,7 +128,7 @@ public class SkillTreeData implements IXmlReader
{
_loading = true;
_classSkillTrees.clear();
_collectSkillTree.clear();
_certificationSkillTree.clear();
_fishingSkillTree.clear();
_pledgeSkillTree.clear();
_subClassSkillTree.clear();
@ -298,9 +298,9 @@ public class SkillTreeData implements IXmlReader
transferSkillTree.put(skillHashCode, skillLearn);
break;
}
case "collectSkillTree":
case "certificationSkillTree":
{
_collectSkillTree.put(skillHashCode, skillLearn);
_certificationSkillTree.put(skillHashCode, skillLearn);
break;
}
case "raceSkillTree":
@ -484,12 +484,12 @@ public class SkillTreeData implements IXmlReader
}
/**
* Gets the collect skill tree.
* @return the complete Collect Skill Tree
* Gets the Certification 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.
* @param player the collecting skill learning player
* @return all the available Collecting skills for a given {@code player}
* Implemented in Secret of Empire
* @param player the certification skill learning 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<>();
for (SkillLearn skill : _collectSkillTree.values())
for (SkillLearn skill : _certificationSkillTree.values())
{
final Skill oldSkill = player.getSkills().get(skill.getSkillId());
if (oldSkill != null)
@ -1234,9 +1234,9 @@ public class SkillTreeData implements IXmlReader
sl = getSubClassSkill(id, lvl);
break;
}
case COLLECT:
case CERTIFICATION:
{
sl = getCollectSkill(id, lvl);
sl = getCertificationSkill(id, lvl);
break;
}
case REVELATION:
@ -1410,14 +1410,14 @@ public class SkillTreeData implements IXmlReader
}
/**
* Gets the collect skill.
* @param id the collect skill Id
* @param lvl the collect skill level
* @return the collect skill from the Collect Skill Tree for a given {@code id} and {@code lvl}
* Gets the certification skill.
* @param id the certification skill Id
* @param lvl the certification skill level
* @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()));
}
@ -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 " + 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 " + _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 " + _subPledgeSkillTree.size() + " sub-pledge skills.");
LOGGER.info(className + ": Loaded " + _transformSkillTree.size() + " transform skills.");

View File

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

View File

@ -63,12 +63,12 @@ public class Folk extends Npc
public static void showSkillList(Player player, Npc npc, ClassId classId)
{
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.
{
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCollectSkillTree());
final int minLevel = SkillTreeData.getInstance().getMinLevelForNewSkill(player, SkillTreeData.getInstance().getCertificationSkillTree());
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);
@ -82,7 +82,7 @@ public class Folk extends Npc
}
else
{
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.COLLECT));
player.sendPacket(new ExAcquirableSkillListByClass(skills, AcquireSkillType.CERTIFICATION));
}
return;
}

View File

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

View File

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

View File

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