New henna pattern potential system.
Thanks to Serenitty and Index.
This commit is contained in:
8
L2J_Mobius_Essence_6.0_BattleChronicle/dist/db_installer/sql/game/character_potens.sql
vendored
Normal file
8
L2J_Mobius_Essence_6.0_BattleChronicle/dist/db_installer/sql/game/character_potens.sql
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
DROP TABLE IF EXISTS `character_potens`;
|
||||
CREATE TABLE IF NOT EXISTS `character_potens` (
|
||||
`charId` INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`enchant_level` INT,
|
||||
`enchant_exp` INT,
|
||||
`poten_id` INT,
|
||||
PRIMARY KEY (`charId`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
@@ -241,6 +241,7 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("MpShield", MpShield::new);
|
||||
EffectHandler.getInstance().registerHandler("MpVampiricAttack", MpVampiricAttack::new);
|
||||
EffectHandler.getInstance().registerHandler("Mute", Mute::new);
|
||||
EffectHandler.getInstance().registerHandler("HennaSlotsAdd", NewHennaSlotsAdd::new);
|
||||
EffectHandler.getInstance().registerHandler("NoblesseBless", NoblesseBless::new);
|
||||
EffectHandler.getInstance().registerHandler("OpenChest", OpenChest::new);
|
||||
EffectHandler.getInstance().registerHandler("OpenCommonRecipeBook", OpenCommonRecipeBook::new);
|
||||
|
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Serenitty
|
||||
*/
|
||||
public class NewHennaSlotsAdd extends AbstractStatPercentEffect
|
||||
{
|
||||
public NewHennaSlotsAdd(StatSet params)
|
||||
{
|
||||
super(params, Stat.HENNA_SLOTS_AVAILABLE);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
67
L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/stats/hennaPatternPotential.xml
vendored
Normal file
67
L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/stats/hennaPatternPotential.xml
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/hennaPatternPotential.xsd">
|
||||
<enchantFees>
|
||||
<fee step="1">
|
||||
<requiredItem id="57" count="500000" />
|
||||
<dailyCount>5</dailyCount>
|
||||
<enchantExp count="0" chance="50" />
|
||||
<enchantExp count="1" chance="50" />
|
||||
</fee>
|
||||
<fee step="2">
|
||||
<requiredItem id="57" count="2000000" />
|
||||
<dailyCount>5</dailyCount>
|
||||
<enchantExp count="1" chance="90" />
|
||||
<enchantExp count="2" chance="29" />
|
||||
<enchantExp count="3" chance="1" />
|
||||
</fee>
|
||||
<fee step="3">
|
||||
<requiredItem id="96623" count="1" />
|
||||
<dailyCount>10</dailyCount>
|
||||
<enchantExp count="1" chance="10" />
|
||||
<enchantExp count="2" chance="75" />
|
||||
<enchantExp count="3" chance="12" />
|
||||
<enchantExp count="4" chance="2" />
|
||||
<enchantExp count="5" chance="1" />
|
||||
</fee>
|
||||
</enchantFees>
|
||||
<experiencePoints>
|
||||
<hiddenPower level="1" exp="20" /> <!-- 1 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="2" exp="30" /> <!-- 2 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="3" exp="40" /> <!-- 3 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="4" exp="50" /> <!-- 4 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="5" exp="100" /> <!-- 5 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="6" exp="110" /> <!-- 6 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="7" exp="120" /> <!-- 7 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="8" exp="130" /> <!-- 8 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="9" exp="140" /> <!-- 9 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="10" exp="150" /> <!-- 10 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="11" exp="170" /> <!-- 11 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="12" exp="190" /> <!-- 12 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="13" exp="210" /> <!-- 13 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="14" exp="230" /> <!-- 14 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="15" exp="250" /> <!-- 15 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="16" exp="300" /> <!-- 16 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="17" exp="350" /> <!-- 17 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="18" exp="400" /> <!-- 18 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="19" exp="450" /> <!-- 19 window, how many points do you need to fill a skillbonus. -->
|
||||
<hiddenPower level="20" exp="500" /> <!-- 20 window, how many points do you need to fill a skillbonus. -->
|
||||
</experiencePoints>
|
||||
<hiddenPotentials>
|
||||
<poten id="1" slotId="1" maxSkillLevel="20" skillId="83001" /> <!-- P and M. Atk. -->
|
||||
<poten id="2" slotId="1" maxSkillLevel="20" skillId="83002" /> <!-- P and M. Def. -->
|
||||
<poten id="3" slotId="1" maxSkillLevel="20" skillId="83003" /> <!-- Atk Spdeed and Casting Spdpeed. -->
|
||||
<poten id="4" slotId="2" maxSkillLevel="20" skillId="83004" /> <!-- Skill damage bonus in PvE -->
|
||||
<poten id="5" slotId="2" maxSkillLevel="20" skillId="83005" /> <!-- You Received skill damage in PvE -->
|
||||
<poten id="6" slotId="2" maxSkillLevel="20" skillId="83006" /> <!-- Skill Damage Bonus in PvP -->
|
||||
<poten id="7" slotId="2" maxSkillLevel="20" skillId="83007" /> <!-- Received skill damage in PvP -->
|
||||
<poten id="8" slotId="3" maxSkillLevel="20" skillId="83008" /> <!-- Skill Critical Damage -->
|
||||
<poten id="9" slotId="3" maxSkillLevel="20" skillId="83009" /> <!-- Skill Critical Rate -->
|
||||
<poten id="10" slotId="3" maxSkillLevel="20" skillId="83010" /> <!-- You Received Skill Critical Damage -->
|
||||
<poten id="11" slotId="3" maxSkillLevel="20" skillId="83011" /> <!-- You Received Skill Critical Rate -->
|
||||
<poten id="12" slotId="4" maxSkillLevel="20" skillId="83012" /> <!-- Soulshot and Spiritshot damage -->
|
||||
<poten id="13" slotId="4" maxSkillLevel="20" skillId="83013" /> <!-- Soulshot and Spiritshot Damage Resistance -->
|
||||
<poten id="14" slotId="4" maxSkillLevel="20" skillId="83014" /> <!-- Damage decrease -->
|
||||
<poten id="15" slotId="4" maxSkillLevel="20" skillId="83015" /> <!-- Damage decrease ignore -->
|
||||
<poten id="16" slotId="4" maxSkillLevel="20" skillId="83016" /> <!-- Anomaly Atk Rate -->
|
||||
</hiddenPotentials>
|
||||
</list>
|
@@ -570,496 +570,541 @@
|
||||
<item id="96355" name="STR Dye" additionalName="Lv. 1" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +2 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 1. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96356" name="STR Dye" additionalName="Lv. 2" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +3 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 2. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96357" name="STR Dye" additionalName="Lv. 3" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +25 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 3. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96358" name="STR Dye" additionalName="Lv. 4" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +50 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 4. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96359" name="STR Dye" additionalName="Lv. 5" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +75 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 5. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96360" name="STR Dye" additionalName="Lv. 6" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +100 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 6. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96361" name="STR Dye" additionalName="Lv. 7" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +125 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 7. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96362" name="STR Dye" additionalName="Lv. 8" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +150 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 8. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96363" name="STR Dye" additionalName="Lv. 9" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +175 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 9. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96364" name="STR Dye" additionalName="Lv. 10" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +4 <Additional effect> P. Atk. +200 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 10. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96365" name="STR Dye" additionalName="Lv. 11" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +225 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 11. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96366" name="STR Dye" additionalName="Lv. 12" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +250 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 12. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96367" name="STR Dye" additionalName="Lv. 13" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +275 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 13. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96368" name="STR Dye" additionalName="Lv. 14" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +300 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 14. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96369" name="STR Dye" additionalName="Lv. 15" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +325 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 15. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96370" name="STR Dye" additionalName="Lv. 16" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +350 P. Skill Critical Rate +0.5% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 16. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96371" name="STR Dye" additionalName="Lv. 17" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +375 P. Skill Critical Rate +1% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 17. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96372" name="STR Dye" additionalName="Lv. 18" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +400 P. Skill Critical Rate +1.5% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 18. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96373" name="STR Dye" additionalName="Lv. 19" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +425 P. Skill Critical Rate +2% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 19. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96374" name="STR Dye" additionalName="Lv. 20" type="EtcItem">
|
||||
<!-- Required for applying STR Pattern. Applying the pattern requires 1 dye. <Effect> STR +5 <Additional effect> P. Atk. +450 P. Skill Critical Rate +3% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon1.g_premium_dye_attribute_unholy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96375" name="CON Dye" additionalName="Lv. 1" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +2 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 1. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96376" name="CON Dye" additionalName="Lv. 2" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +3 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 2. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96377" name="CON Dye" additionalName="Lv. 3" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +32 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 3. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96378" name="CON Dye" additionalName="Lv. 4" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +65 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 4. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96379" name="CON Dye" additionalName="Lv. 5" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +97 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 5. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96380" name="CON Dye" additionalName="Lv. 6" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +130 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 6. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96381" name="CON Dye" additionalName="Lv. 7" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +162 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 7. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96382" name="CON Dye" additionalName="Lv. 8" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +195 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 8. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96383" name="CON Dye" additionalName="Lv. 9" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +227 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 9. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96384" name="CON Dye" additionalName="Lv. 10" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +4 <Additional effect> P. Def. +260 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 10. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96385" name="CON Dye" additionalName="Lv. 11" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +292 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 11. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96386" name="CON Dye" additionalName="Lv. 12" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +325 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 12. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96387" name="CON Dye" additionalName="Lv. 13" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +357 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 13. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96388" name="CON Dye" additionalName="Lv. 14" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +390 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 14. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96389" name="CON Dye" additionalName="Lv. 15" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +422 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 15. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96390" name="CON Dye" additionalName="Lv. 16" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +455 Received P. Skill Damage -1% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 16. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96391" name="CON Dye" additionalName="Lv. 17" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +487 Received P. Skill Damage -1.5% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 17. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96392" name="CON Dye" additionalName="Lv. 18" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +520 Received P. Skill Damage -2% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 18. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96393" name="CON Dye" additionalName="Lv. 19" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +552 Received P. Skill Damage -3% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 19. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96394" name="CON Dye" additionalName="Lv. 20" type="EtcItem">
|
||||
<!-- Required for applying CON Pattern. Applying the pattern requires 1 dye. <Effect> CON +5 <Additional effect> P. Def. +585 Received P. Skill Damage -5% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon5.g_premium_dye_attribute_fire" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96395" name="DEX Dye" additionalName="Lv. 1" type="EtcItem">
|
||||
<!-- Required for applying DEX Pattern. Applying the pattern requires 1 dye. <Effect> DEX +2 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 1. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. -->
|
||||
<set name="icon" val="BranchSys3.icon3.g_premium_dye_attribute_holy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96396" name="DEX Dye" additionalName="Lv. 2" type="EtcItem">
|
||||
<!-- Required for applying DEX Pattern. Applying the pattern requires 1 dye. <Effect> DEX +3 <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 2. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. -->
|
||||
<set name="icon" val="BranchSys3.icon3.g_premium_dye_attribute_holy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96397" name="DEX Dye" additionalName="Lv. 3" type="EtcItem">
|
||||
<!-- Required for applying DEX Pattern. Applying the pattern requires 1 dye. <Effect> DEX +4 <Additional effect> Received P. Skill Critical Rate -0.4% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 3. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon3.g_premium_dye_attribute_holy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96398" name="DEX Dye" additionalName="Lv. 4" type="EtcItem">
|
||||
<!-- Required for applying DEX Pattern. Applying the pattern requires 1 dye. <Effect> DEX +4 <Additional effect> Received P. Skill Critical Rate -0.8% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 4. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon3.g_premium_dye_attribute_holy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="96399" name="DEX Dye" additionalName="Lv. 5" type="EtcItem">
|
||||
<!-- Required for applying DEX Pattern. Applying the pattern requires 1 dye. <Effect> DEX +4 <Additional effect> Received P. Skill Critical Rate -1.2% <font color=ff6666>Note!</font> Requirements: all classes after the 1st class change. Hidden power: Lv. 5. Patterns and dyes can be upgraded through compounding. Costs for upgrading patterns and dyes differ. <font color=eeaa22>Additional effects of similar applied patterns do not stack.</font> -->
|
||||
<set name="icon" val="BranchSys3.icon3.g_premium_dye_attribute_holy" />
|
||||
<set name="default_action" val="NONE" />
|
||||
<set name="etcitem_type" val="DYE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="weight" val="1" />
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="price" val="21000" />
|
||||
<set name="commissionItemType" val="DYES" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
</list>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,49 +1,467 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
|
||||
<skill id="83001" toLevel="20" name="P./ M. Atk.">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>
|
||||
<value level="1">20</value>
|
||||
<value level="2">30</value>
|
||||
<value level="3">40</value>
|
||||
<value level="4">50</value>
|
||||
<value level="5">100</value>
|
||||
<value level="6">200</value>
|
||||
<value level="7">300</value>
|
||||
<value level="8">400</value>
|
||||
<value level="9">500</value>
|
||||
<value level="10">700</value>
|
||||
<value level="11">900</value>
|
||||
<value level="12">1000</value>
|
||||
<value level="13">1100</value>
|
||||
<value level="14">1200</value>
|
||||
<value level="15">1400</value>
|
||||
<value level="16">1500</value>
|
||||
<value level="17">1600</value>
|
||||
<value level="18">1700</value>
|
||||
<value level="19">1800</value>
|
||||
<value level="20">2000</value>
|
||||
</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>
|
||||
<value level="1">20</value>
|
||||
<value level="2">30</value>
|
||||
<value level="3">40</value>
|
||||
<value level="4">50</value>
|
||||
<value level="5">100</value>
|
||||
<value level="6">200</value>
|
||||
<value level="7">300</value>
|
||||
<value level="8">400</value>
|
||||
<value level="9">500</value>
|
||||
<value level="10">700</value>
|
||||
<value level="11">900</value>
|
||||
<value level="12">1000</value>
|
||||
<value level="13">1100</value>
|
||||
<value level="14">1200</value>
|
||||
<value level="15">1400</value>
|
||||
<value level="16">1500</value>
|
||||
<value level="17">1600</value>
|
||||
<value level="18">1700</value>
|
||||
<value level="19">1800</value>
|
||||
<value level="20">2000</value>
|
||||
</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83002" toLevel="20" name="P./ M. Def.">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>
|
||||
<value level="1">20</value>
|
||||
<value level="2">30</value>
|
||||
<value level="3">40</value>
|
||||
<value level="4">50</value>
|
||||
<value level="5">100</value>
|
||||
<value level="6">200</value>
|
||||
<value level="7">300</value>
|
||||
<value level="8">400</value>
|
||||
<value level="9">500</value>
|
||||
<value level="10">700</value>
|
||||
<value level="11">900</value>
|
||||
<value level="12">1000</value>
|
||||
<value level="13">1100</value>
|
||||
<value level="14">1200</value>
|
||||
<value level="15">1400</value>
|
||||
<value level="16">1500</value>
|
||||
<value level="17">1600</value>
|
||||
<value level="18">1700</value>
|
||||
<value level="19">1800</value>
|
||||
<value level="20">2000</value>
|
||||
</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>
|
||||
<value level="1">20</value>
|
||||
<value level="2">30</value>
|
||||
<value level="3">40</value>
|
||||
<value level="4">50</value>
|
||||
<value level="5">100</value>
|
||||
<value level="6">200</value>
|
||||
<value level="7">300</value>
|
||||
<value level="8">400</value>
|
||||
<value level="9">500</value>
|
||||
<value level="10">700</value>
|
||||
<value level="11">900</value>
|
||||
<value level="12">1000</value>
|
||||
<value level="13">1100</value>
|
||||
<value level="14">1200</value>
|
||||
<value level="15">1400</value>
|
||||
<value level="16">1500</value>
|
||||
<value level="17">1600</value>
|
||||
<value level="18">1700</value>
|
||||
<value level="19">1800</value>
|
||||
<value level="20">2000</value>
|
||||
</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83003" toLevel="20" name="Atk. Spd./ Casting Spd.">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PhysicalAttackSpeed">
|
||||
<amount>
|
||||
<value level="1">4</value>
|
||||
<value level="2">6</value>
|
||||
<value level="3">8</value>
|
||||
<value level="4">10</value>
|
||||
<value level="5">20</value>
|
||||
<value level="6">40</value>
|
||||
<value level="7">60</value>
|
||||
<value level="8">80</value>
|
||||
<value level="9">100</value>
|
||||
<value level="10">140</value>
|
||||
<value level="11">180</value>
|
||||
<value level="12">200</value>
|
||||
<value level="13">220</value>
|
||||
<value level="14">240</value>
|
||||
<value level="15">280</value>
|
||||
<value level="16">300</value>
|
||||
<value level="17">320</value>
|
||||
<value level="18">340</value>
|
||||
<value level="19">360</value>
|
||||
<value level="20">400</value>
|
||||
</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalAttackSpeed">
|
||||
<amount>
|
||||
<value level="1">4</value>
|
||||
<value level="2">6</value>
|
||||
<value level="3">8</value>
|
||||
<value level="4">10</value>
|
||||
<value level="5">20</value>
|
||||
<value level="6">40</value>
|
||||
<value level="7">60</value>
|
||||
<value level="8">80</value>
|
||||
<value level="9">100</value>
|
||||
<value level="10">140</value>
|
||||
<value level="11">180</value>
|
||||
<value level="12">200</value>
|
||||
<value level="13">220</value>
|
||||
<value level="14">240</value>
|
||||
<value level="15">280</value>
|
||||
<value level="16">300</value>
|
||||
<value level="17">320</value>
|
||||
<value level="18">340</value>
|
||||
<value level="19">360</value>
|
||||
<value level="20">400</value>
|
||||
</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83004" toLevel="20" name="Skill damage bonus in PvE">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83005" toLevel="20" name="Received skill damage in PvE">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PvePhysicalSkillDefenceBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDefenceBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83006" toLevel="20" name="Skill Damage Bonus in PvP">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PvpPhysicalSkillDamageBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDamageBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83007" toLevel="20" name="Received skill damage in PvP">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="PvpPhysicalSkillDefenceBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDefenceBonus">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83008" toLevel="20" name="Skill Critical Damage">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="SkillCriticalDamage">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83009" toLevel="20" name="Skill Critical Rate">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<operateType>P</operateType>
|
||||
<magicCriticalRate>5</magicCriticalRate>
|
||||
<effects>
|
||||
<effect name="CriticalRate">
|
||||
<amount>
|
||||
<value level="1">0.1</value>
|
||||
<value level="2">0.2</value>
|
||||
<value level="3">0.3</value>
|
||||
<value level="4">0.4</value>
|
||||
<value level="5">0.6</value>
|
||||
<value level="6">1.2</value>
|
||||
<value level="7">1.8</value>
|
||||
<value level="8">2.4</value>
|
||||
<value level="9">3</value>
|
||||
<value level="10">4.2</value>
|
||||
<value level="11">5.4</value>
|
||||
<value level="12">6</value>
|
||||
<value level="13">6.6</value>
|
||||
<value level="14">7.2</value>
|
||||
<value level="15">8.4</value>
|
||||
<value level="16">9</value>
|
||||
<value level="17">9.6</value>
|
||||
<value level="18">10.2</value>
|
||||
<value level="19">10.8</value>
|
||||
<value level="20">12</value>
|
||||
</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="83010" toLevel="20" name="Received Skill Critical Damage">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
|
@@ -43,10 +43,7 @@
|
||||
</xs:element>
|
||||
<xs:element name="classId" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:nonNegativeInteger">
|
||||
<xs:minInclusive value="0" />
|
||||
<xs:maxInclusive value="211" />
|
||||
</xs:restriction>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
@@ -54,6 +51,7 @@
|
||||
<xs:attribute name="dyeName" type="xs:token" />
|
||||
<xs:attribute name="dyeItemId" type="xs:positiveInteger" />
|
||||
<xs:attribute name="dyeLevel" type="xs:positiveInteger" />
|
||||
<xs:attribute name="patternLevel" type="xs:nonNegativeInteger" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
61
L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/xsd/hennaPatternPotential.xsd
vendored
Normal file
61
L2J_Mobius_Essence_6.0_BattleChronicle/dist/game/data/xsd/hennaPatternPotential.xsd
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="1" maxOccurs="1">
|
||||
<xs:element name="enchantFees">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="1" maxOccurs="1">
|
||||
<xs:element name="fee" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="1" maxOccurs="1">
|
||||
<xs:element name="requiredItem" minOccurs="0" maxOccurs="1">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="id" type="xs:positiveInteger" />
|
||||
<xs:attribute name="count" type="xs:long" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="dailyCount" minOccurs="1" maxOccurs="1" />
|
||||
<xs:element name="enchantExp" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="count" type="xs:int" />
|
||||
<xs:attribute name="chance" type="xs:double" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="step" type="xs:positiveInteger" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="experiencePoints">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="1" maxOccurs="1">
|
||||
<xs:element name="hiddenPower" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="level" type="xs:positiveInteger" />
|
||||
<xs:attribute name="exp" type="xs:positiveInteger" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="hiddenPotentials">
|
||||
<xs:complexType>
|
||||
<xs:sequence minOccurs="1" maxOccurs="1">
|
||||
<xs:element name="poten" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:attribute name="id" type="xs:int" />
|
||||
<xs:attribute name="slotId" type="xs:int" />
|
||||
<xs:attribute name="maxSkillLevel" type="xs:positiveInteger" />
|
||||
<xs:attribute name="skillId" type="xs:positiveInteger" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
@@ -28,9 +28,9 @@ import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.enums.ClassId;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
@@ -44,7 +44,8 @@ public class HennaData implements IXmlReader
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(HennaData.class.getName());
|
||||
|
||||
private final Map<Integer, Henna> _hennaList = new HashMap<>();
|
||||
private final Map<Integer, Henna> _hennaDyeIdList = new HashMap<>();
|
||||
private final Map<Integer, Henna> _hennaItemIdList = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Instantiates a new henna data.
|
||||
@@ -57,9 +58,10 @@ public class HennaData implements IXmlReader
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
_hennaList.clear();
|
||||
_hennaItemIdList.clear();
|
||||
_hennaDyeIdList.clear();
|
||||
parseDatapackFile("data/stats/hennaList.xml");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _hennaList.size() + " henna data.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _hennaDyeIdList.size() + " henna data.");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,12 +84,12 @@ public class HennaData implements IXmlReader
|
||||
|
||||
/**
|
||||
* Parses the henna.
|
||||
* @param d the d
|
||||
* @param d the node
|
||||
*/
|
||||
private void parseHenna(Node d)
|
||||
{
|
||||
final StatSet set = new StatSet();
|
||||
final List<ClassId> wearClassIds = new ArrayList<>();
|
||||
final List<Integer> wearClassIds = new ArrayList<>();
|
||||
final List<Skill> skills = new ArrayList<>();
|
||||
NamedNodeMap attrs = d.getAttributes();
|
||||
Node attr;
|
||||
@@ -141,15 +143,20 @@ public class HennaData implements IXmlReader
|
||||
}
|
||||
case "classId":
|
||||
{
|
||||
wearClassIds.add(ClassId.getClassId(Integer.parseInt(c.getTextContent())));
|
||||
for (String s : c.getTextContent().split(","))
|
||||
{
|
||||
wearClassIds.add(Integer.parseInt(s));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final Henna henna = new Henna(set);
|
||||
henna.setSkills(skills);
|
||||
henna.setWearClassIds(wearClassIds);
|
||||
_hennaList.put(henna.getDyeId(), henna);
|
||||
_hennaDyeIdList.put(henna.getDyeId(), henna);
|
||||
_hennaItemIdList.put(henna.getDyeItemId(), henna);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -159,20 +166,30 @@ public class HennaData implements IXmlReader
|
||||
*/
|
||||
public Henna getHenna(int id)
|
||||
{
|
||||
return _hennaList.get(id);
|
||||
return _hennaDyeIdList.get(id);
|
||||
}
|
||||
|
||||
public Henna getHennaByDyeId(int id)
|
||||
{
|
||||
return _hennaDyeIdList.get(id);
|
||||
}
|
||||
|
||||
public Henna getHennaByItemId(int id)
|
||||
{
|
||||
return _hennaItemIdList.get(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the henna list.
|
||||
* @param classId the player's class Id.
|
||||
* @param player the player's class Id.
|
||||
* @return the list with all the allowed dyes.
|
||||
*/
|
||||
public List<Henna> getHennaList(ClassId classId)
|
||||
public List<Henna> getHennaList(Player player)
|
||||
{
|
||||
final List<Henna> list = new ArrayList<>();
|
||||
for (Henna henna : _hennaList.values())
|
||||
for (Henna henna : _hennaDyeIdList.values())
|
||||
{
|
||||
if (henna.isAllowedClass(classId))
|
||||
if (henna.isAllowedClass(player))
|
||||
{
|
||||
list.add(henna);
|
||||
}
|
||||
|
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.data.xml;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.item.henna.DyePotential;
|
||||
import org.l2jmobius.gameserver.model.item.henna.DyePotentialFee;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
* @author Serenitty
|
||||
*/
|
||||
public class HennaPatternPotentialData implements IXmlReader
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(HennaPatternPotentialData.class.getName());
|
||||
|
||||
private final Map<Integer, Integer> _potenExpTable = new HashMap<>();
|
||||
private final Map<Integer, DyePotentialFee> _potenFees = new HashMap<>();
|
||||
private final Map<Integer, DyePotential> _potentials = new HashMap<>();
|
||||
|
||||
private int MAX_POTEN_LEVEL = 0;
|
||||
|
||||
protected HennaPatternPotentialData()
|
||||
{
|
||||
load();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
_potenFees.clear();
|
||||
_potenExpTable.clear();
|
||||
_potentials.clear();
|
||||
parseDatapackFile("data/stats/hennaPatternPotential.xml");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _potenFees.size() + " dye pattern fee data.");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseDocument(Document doc, File f)
|
||||
{
|
||||
for (Node m = doc.getFirstChild(); m != null; m = m.getNextSibling())
|
||||
{
|
||||
if ("list".equals(m.getNodeName()))
|
||||
{
|
||||
for (Node k = m.getFirstChild(); k != null; k = k.getNextSibling())
|
||||
{
|
||||
switch (k.getNodeName())
|
||||
{
|
||||
case "enchantFees":
|
||||
{
|
||||
for (Node n = k.getFirstChild(); n != null; n = n.getNextSibling())
|
||||
{
|
||||
if ("fee".equals(n.getNodeName()))
|
||||
{
|
||||
NamedNodeMap attrs = n.getAttributes();
|
||||
Node att;
|
||||
final StatSet set = new StatSet();
|
||||
for (int i = 0; i < attrs.getLength(); i++)
|
||||
{
|
||||
att = attrs.item(i);
|
||||
set.set(att.getNodeName(), att.getNodeValue());
|
||||
}
|
||||
|
||||
final int step = parseInteger(attrs, "step");
|
||||
int itemId = 0;
|
||||
long itemCount = 0;
|
||||
int dailyCount = 0;
|
||||
final Map<Integer, Double> enchantExp = new HashMap<>();
|
||||
for (Node b = n.getFirstChild(); b != null; b = b.getNextSibling())
|
||||
{
|
||||
attrs = b.getAttributes();
|
||||
switch (b.getNodeName())
|
||||
{
|
||||
case "requiredItem":
|
||||
{
|
||||
itemId = parseInteger(attrs, "id");
|
||||
itemCount = parseLong(attrs, "count", 1L);
|
||||
break;
|
||||
}
|
||||
case "dailyCount":
|
||||
{
|
||||
dailyCount = Integer.parseInt(b.getTextContent());
|
||||
break;
|
||||
}
|
||||
case "enchantExp":
|
||||
{
|
||||
enchantExp.put(parseInteger(attrs, "count"), parseDouble(attrs, "chance"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
_potenFees.put(step, new DyePotentialFee(step, new ItemHolder(itemId, itemCount), dailyCount, enchantExp));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "experiencePoints":
|
||||
{
|
||||
for (Node n = k.getFirstChild(); n != null; n = n.getNextSibling())
|
||||
{
|
||||
if ("hiddenPower".equals(n.getNodeName()))
|
||||
{
|
||||
NamedNodeMap attrs = n.getAttributes();
|
||||
Node att;
|
||||
final StatSet set = new StatSet();
|
||||
for (int i = 0; i < attrs.getLength(); i++)
|
||||
{
|
||||
att = attrs.item(i);
|
||||
set.set(att.getNodeName(), att.getNodeValue());
|
||||
}
|
||||
|
||||
final int level = parseInteger(attrs, "level");
|
||||
final int exp = parseInteger(attrs, "exp");
|
||||
_potenExpTable.put(level, exp);
|
||||
if (MAX_POTEN_LEVEL < level)
|
||||
{
|
||||
MAX_POTEN_LEVEL = level;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "hiddenPotentials":
|
||||
{
|
||||
for (Node n = k.getFirstChild(); n != null; n = n.getNextSibling())
|
||||
{
|
||||
if ("poten".equals(n.getNodeName()))
|
||||
{
|
||||
NamedNodeMap attrs = n.getAttributes();
|
||||
Node att;
|
||||
final StatSet set = new StatSet();
|
||||
for (int i = 0; i < attrs.getLength(); i++)
|
||||
{
|
||||
att = attrs.item(i);
|
||||
set.set(att.getNodeName(), att.getNodeValue());
|
||||
}
|
||||
|
||||
final int id = parseInteger(attrs, "id");
|
||||
final int slotId = parseInteger(attrs, "slotId");
|
||||
final int maxSkillLevel = parseInteger(attrs, "maxSkillLevel");
|
||||
final int skillId = parseInteger(attrs, "skillId");
|
||||
_potentials.put(id, new DyePotential(id, slotId, skillId, maxSkillLevel));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DyePotentialFee getFee(int step)
|
||||
{
|
||||
return _potenFees.get(step);
|
||||
}
|
||||
|
||||
public int getMaxPotenEnchantStep()
|
||||
{
|
||||
return _potenFees.size();
|
||||
}
|
||||
|
||||
public int getExpForLevel(int level)
|
||||
{
|
||||
return _potenExpTable.get(level);
|
||||
}
|
||||
|
||||
public int getMaxPotenLevel()
|
||||
{
|
||||
return MAX_POTEN_LEVEL;
|
||||
}
|
||||
|
||||
public DyePotential getPotential(int potenId)
|
||||
{
|
||||
return _potentials.get(potenId);
|
||||
}
|
||||
|
||||
public Skill getPotentialSkill(int potenId, int slotId, int level)
|
||||
{
|
||||
final DyePotential potential = _potentials.get(potenId);
|
||||
if (potential == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (potential.getSlotId() == slotId)
|
||||
{
|
||||
return potential.getSkill(level);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Collection<Integer> getSkillIdsBySlotId(int slotId)
|
||||
{
|
||||
final List<Integer> skillIds = new ArrayList<>();
|
||||
for (DyePotential potential : _potentials.values())
|
||||
{
|
||||
if (potential.getSlotId() == slotId)
|
||||
{
|
||||
skillIds.add(potential.getSkillId());
|
||||
}
|
||||
}
|
||||
return skillIds;
|
||||
}
|
||||
|
||||
public static HennaPatternPotentialData getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final HennaPatternPotentialData INSTANCE = new HennaPatternPotentialData();
|
||||
}
|
||||
}
|
@@ -73,6 +73,7 @@ import org.l2jmobius.gameserver.data.xml.AttendanceRewardData;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.data.xml.ClassListData;
|
||||
import org.l2jmobius.gameserver.data.xml.CollectionData;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaPatternPotentialData;
|
||||
import org.l2jmobius.gameserver.data.xml.ElementalSpiritData;
|
||||
import org.l2jmobius.gameserver.data.xml.ExperienceData;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaData;
|
||||
@@ -251,9 +252,10 @@ import org.l2jmobius.gameserver.model.holders.TrainingHolder;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.interfaces.ILocational;
|
||||
import org.l2jmobius.gameserver.model.item.Armor;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.ItemTemplate;
|
||||
import org.l2jmobius.gameserver.model.item.Weapon;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.HennaPoten;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.item.type.ActionType;
|
||||
import org.l2jmobius.gameserver.model.item.type.ArmorType;
|
||||
@@ -437,7 +439,9 @@ public class Player extends Playable
|
||||
private static final String RESTORE_CHAR_HENNAS = "SELECT slot,symbol_id FROM character_hennas WHERE charId=? AND class_index=?";
|
||||
private static final String ADD_CHAR_HENNA = "INSERT INTO character_hennas (charId,symbol_id,slot,class_index) VALUES (?,?,?,?)";
|
||||
private static final String DELETE_CHAR_HENNA = "DELETE FROM character_hennas WHERE charId=? AND slot=? AND class_index=?";
|
||||
private static final String DELETE_CHAR_HENNAS = "DELETE FROM character_hennas WHERE charId=? AND class_index=?";
|
||||
private static final String ADD_CHAR_HENNA_POTENS = "REPLACE INTO character_potens (charId,enchant_level,enchant_exp,poten_id) VALUES (?,?,?,?)";
|
||||
// private static final String RESTORE_CHAR_HENNAS_POTENS = "SELECT poten_id,enchant_level,enchant_exp FROM character_potens WHERE charId=?";
|
||||
// private static final String UPDATE_CHAR_HENNAS_POTENS = "UPDATE character_potens SET enchant_level=?,enchant_exp=?,poten_id=?,class_id=?,dual_class=? WHERE charId=?";
|
||||
|
||||
// Character Shortcut SQL String Definitions:
|
||||
private static final String DELETE_CHAR_SHORTCUTS = "DELETE FROM character_shortcuts WHERE charId=? AND class_index=?";
|
||||
@@ -675,10 +679,12 @@ public class Player extends Playable
|
||||
private final Set<Player> _snoopedPlayer = ConcurrentHashMap.newKeySet();
|
||||
|
||||
/** Hennas */
|
||||
private final Henna[] _henna = new Henna[3];
|
||||
private final HennaPoten[] _hennaPoten = new HennaPoten[4];
|
||||
private final Map<BaseStat, Integer> _hennaBaseStats = new ConcurrentHashMap<>();
|
||||
private final Map<Integer, ScheduledFuture<?>> _hennaRemoveSchedules = new ConcurrentHashMap<>(3);
|
||||
|
||||
/** Hennas Potential */
|
||||
|
||||
/** The Pet of the Player */
|
||||
private Pet _pet = null;
|
||||
/** Servitors of the Player */
|
||||
@@ -2470,7 +2476,7 @@ public class Player extends Playable
|
||||
for (int slot = 1; slot < 4; slot++)
|
||||
{
|
||||
final Henna henna = getHenna(slot);
|
||||
if ((henna != null) && !henna.isAllowedClass(getClassId()))
|
||||
if ((henna != null) && !henna.isAllowedClass(getActingPlayer()))
|
||||
{
|
||||
removeHenna(slot);
|
||||
}
|
||||
@@ -7208,6 +7214,8 @@ public class Player extends Playable
|
||||
storeCharSub();
|
||||
storeEffect(storeActiveEffects);
|
||||
storeItemReuseDelay();
|
||||
storeDyePoten();
|
||||
|
||||
if (Config.STORE_RECIPE_SHOPLIST)
|
||||
{
|
||||
storeRecipeShopList();
|
||||
@@ -7911,9 +7919,9 @@ public class Player extends Playable
|
||||
*/
|
||||
private void restoreHenna()
|
||||
{
|
||||
for (int i = 1; i < 4; i++)
|
||||
for (int i = 1; i < 5; i++)
|
||||
{
|
||||
_henna[i - 1] = null;
|
||||
_hennaPoten[i - 1] = new HennaPoten();
|
||||
}
|
||||
|
||||
// Cancel and remove existing running tasks.
|
||||
@@ -7940,7 +7948,7 @@ public class Player extends Playable
|
||||
while (rset.next())
|
||||
{
|
||||
slot = rset.getInt("slot");
|
||||
if ((slot < 1) || (slot > 3))
|
||||
if ((slot < 1) || (slot > getAvailableHennaSlots()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -7951,7 +7959,8 @@ public class Player extends Playable
|
||||
continue;
|
||||
}
|
||||
|
||||
final Henna henna = HennaData.getInstance().getHenna(symbolId);
|
||||
// retail mobius final Henna henna = HennaData.getInstance().getHenna(symbolId);
|
||||
final Henna henna = HennaData.getInstance().getHennaByDyeId(symbolId);
|
||||
|
||||
// Task for henna duration
|
||||
if (henna.getDuration() > 0)
|
||||
@@ -7967,7 +7976,7 @@ public class Player extends Playable
|
||||
_hennaRemoveSchedules.put(slot, ThreadPool.schedule(new HennaDurationTask(this, slot), currentTime + remainingTime));
|
||||
}
|
||||
|
||||
_henna[slot - 1] = henna;
|
||||
_hennaPoten[slot - 1].setHenna(henna);
|
||||
|
||||
// Reward henna skills
|
||||
for (Skill skill : henna.getSkills())
|
||||
@@ -7998,12 +8007,12 @@ public class Player extends Playable
|
||||
}
|
||||
else if (getClassId().level() > 1)
|
||||
{
|
||||
totalSlots = 3;
|
||||
totalSlots = getAvailableHennaSlots();
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
for (int i = 0; i < _hennaPoten.length; i++)
|
||||
{
|
||||
if (_henna[i] != null)
|
||||
if (_hennaPoten[i].getHenna() != null)
|
||||
{
|
||||
totalSlots--;
|
||||
}
|
||||
@@ -8024,18 +8033,18 @@ public class Player extends Playable
|
||||
*/
|
||||
public boolean removeHenna(int slot)
|
||||
{
|
||||
if ((slot < 1) || (slot > 3))
|
||||
if ((slot < 1) || (slot > _hennaPoten.length))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final Henna henna = _henna[slot - 1];
|
||||
final Henna henna = _hennaPoten[slot - 1].getHenna();
|
||||
if (henna == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_henna[slot - 1] = null;
|
||||
_hennaPoten[slot - 1].setHenna(null);
|
||||
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement statement = con.prepareStatement(DELETE_CHAR_HENNA))
|
||||
@@ -8053,9 +8062,6 @@ public class Player extends Playable
|
||||
// Calculate Henna modifiers of this Player
|
||||
recalcHennaStats();
|
||||
|
||||
// Send Server->Client HennaInfo packet to this Player
|
||||
sendPacket(new HennaInfo(this));
|
||||
|
||||
// Send Server->Client UserInfo packet to this Player
|
||||
broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.STAT_POINTS, UserInfoType.STAT_ABILITIES, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED);
|
||||
|
||||
@@ -8102,16 +8108,20 @@ public class Player extends Playable
|
||||
|
||||
/**
|
||||
* Add a Henna to the Player, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this Player.
|
||||
* @param slotId
|
||||
* @param henna the henna to add to the player.
|
||||
* @return {@code true} if the henna is added to the player, {@code false} otherwise.
|
||||
*/
|
||||
public boolean addHenna(Henna henna)
|
||||
public boolean addHenna(int slotId, Henna henna)
|
||||
{
|
||||
for (int i = 1; i < 4; i++)
|
||||
if (slotId > getAvailableHennaSlots())
|
||||
{
|
||||
if (_henna[i - 1] == null)
|
||||
return false;
|
||||
}
|
||||
{
|
||||
if (_hennaPoten[slotId - 1].getHenna() == null)
|
||||
{
|
||||
_henna[i - 1] = henna;
|
||||
_hennaPoten[slotId - 1].setHenna(henna);
|
||||
|
||||
// Calculate Henna modifiers of this Player
|
||||
recalcHennaStats();
|
||||
@@ -8121,7 +8131,7 @@ public class Player extends Playable
|
||||
{
|
||||
statement.setInt(1, getObjectId());
|
||||
statement.setInt(2, henna.getDyeId());
|
||||
statement.setInt(3, i);
|
||||
statement.setInt(3, slotId);
|
||||
statement.setInt(4, _classIndex);
|
||||
statement.execute();
|
||||
}
|
||||
@@ -8133,19 +8143,20 @@ public class Player extends Playable
|
||||
// Task for henna duration
|
||||
if (henna.getDuration() > 0)
|
||||
{
|
||||
getVariables().set("HennaDuration" + i, Chronos.currentTimeMillis() + (henna.getDuration() * 60000));
|
||||
_hennaRemoveSchedules.put(i, ThreadPool.schedule(new HennaDurationTask(this, i), Chronos.currentTimeMillis() + (henna.getDuration() * 60000)));
|
||||
getVariables().set("HennaDuration" + slotId, Chronos.currentTimeMillis() + (henna.getDuration() * 60000));
|
||||
_hennaRemoveSchedules.put(slotId, ThreadPool.schedule(new HennaDurationTask(this, slotId), Chronos.currentTimeMillis() + (henna.getDuration() * 60000)));
|
||||
}
|
||||
|
||||
// Reward henna skills
|
||||
for (Skill skill : henna.getSkills())
|
||||
{
|
||||
addSkill(skill, false);
|
||||
if (skill.getLevel() > getSkillLevel(skill.getId()))
|
||||
|
||||
{
|
||||
addSkill(skill, false);
|
||||
}
|
||||
}
|
||||
|
||||
// Send Server->Client HennaInfo packet to this Player
|
||||
sendPacket(new HennaInfo(this));
|
||||
|
||||
// Send Server->Client UserInfo packet to this Player
|
||||
broadcastUserInfo(UserInfoType.BASE_STATS, UserInfoType.STAT_ABILITIES, UserInfoType.STAT_POINTS, UserInfoType.MAX_HPCPMP, UserInfoType.STATS, UserInfoType.SPEED);
|
||||
|
||||
@@ -8154,6 +8165,7 @@ public class Player extends Playable
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -8163,8 +8175,9 @@ public class Player extends Playable
|
||||
private void recalcHennaStats()
|
||||
{
|
||||
_hennaBaseStats.clear();
|
||||
for (Henna henna : _henna)
|
||||
for (HennaPoten hennaPoten : _hennaPoten)
|
||||
{
|
||||
final Henna henna = hennaPoten.getHenna();
|
||||
if (henna == null)
|
||||
{
|
||||
continue;
|
||||
@@ -8177,17 +8190,71 @@ public class Player extends Playable
|
||||
}
|
||||
}
|
||||
|
||||
private void storeDyePoten()
|
||||
{
|
||||
if (_hennaPoten[0] == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final HennaPoten hennaPoten = new HennaPoten();
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement statement = con.prepareStatement(ADD_CHAR_HENNA_POTENS))
|
||||
{
|
||||
statement.setInt(1, getObjectId());
|
||||
statement.setInt(2, hennaPoten.getEnchantLevel());
|
||||
statement.setInt(3, hennaPoten.getEnchantExp());
|
||||
statement.setInt(4, hennaPoten.getPotenId());
|
||||
statement.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, "Failed saving character henna Potential.", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void applyDyePotenSkills()
|
||||
{
|
||||
for (int i = 1; i <= _hennaPoten.length; i++)
|
||||
{
|
||||
final HennaPoten hennaPoten = _hennaPoten[i - 1];
|
||||
for (int skillId : HennaPatternPotentialData.getInstance().getSkillIdsBySlotId(i))
|
||||
{
|
||||
removeSkill(skillId);
|
||||
}
|
||||
if ((hennaPoten.getPotenId() > 0) && hennaPoten.isPotentialAvailable() && (hennaPoten.getActiveStep() > 0))
|
||||
{
|
||||
final Skill hennaSkill = HennaPatternPotentialData.getInstance().getPotentialSkill(hennaPoten.getPotenId(), i, hennaPoten.getActiveStep());
|
||||
if (hennaSkill.getLevel() > getSkillLevel(hennaSkill.getId()))
|
||||
{
|
||||
addSkill(hennaSkill, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public HennaPoten getHennaPoten(int slot)
|
||||
{
|
||||
if ((slot < 1) || (slot > _hennaPoten.length))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return _hennaPoten[slot - 1];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param slot the character inventory henna slot.
|
||||
* @return the Henna of this Player corresponding to the selected slot.
|
||||
*/
|
||||
public Henna getHenna(int slot)
|
||||
{
|
||||
if ((slot < 1) || (slot > 3))
|
||||
if ((slot < 1) || (slot > getAvailableHennaSlots()))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return _henna[slot - 1];
|
||||
|
||||
return _hennaPoten[slot - 1].getHenna();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -8195,8 +8262,9 @@ public class Player extends Playable
|
||||
*/
|
||||
public boolean hasHennas()
|
||||
{
|
||||
for (Henna henna : _henna)
|
||||
for (HennaPoten hennaPoten : _hennaPoten)
|
||||
{
|
||||
final Henna henna = hennaPoten.getHenna();
|
||||
if (henna != null)
|
||||
{
|
||||
return true;
|
||||
@@ -8208,9 +8276,9 @@ public class Player extends Playable
|
||||
/**
|
||||
* @return the henna holder for this player.
|
||||
*/
|
||||
public Henna[] getHennaList()
|
||||
public HennaPoten[] getHennaPotenList()
|
||||
{
|
||||
return _henna;
|
||||
return _hennaPoten;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -8222,6 +8290,51 @@ public class Player extends Playable
|
||||
return _hennaBaseStats.getOrDefault(stat, 0);
|
||||
}
|
||||
|
||||
public int getAvailableHennaSlots()
|
||||
{
|
||||
return (int) getStat().getValue(Stat.HENNA_SLOTS_AVAILABLE, 3);
|
||||
}
|
||||
|
||||
public void setDyePotentialDailyStep(int dailyStep)
|
||||
{
|
||||
getVariables().set(PlayerVariables.DYE_POTENTIAL_DAILY_STEP, dailyStep);
|
||||
}
|
||||
|
||||
public void setDyePotentialDailyCount(int dailyCount)
|
||||
{
|
||||
getVariables().set(PlayerVariables.DYE_POTENTIAL_DAILY_COUNT, dailyCount);
|
||||
}
|
||||
|
||||
public int getDyePotentialDailyStep()
|
||||
{
|
||||
return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_STEP, 1);
|
||||
}
|
||||
|
||||
public int getDyePotentialDailyCount()
|
||||
{
|
||||
return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_COUNT, 5);
|
||||
}
|
||||
|
||||
public void setDyePotentialDailyExp(int dailyExp)
|
||||
{
|
||||
getVariables().set(PlayerVariables.DYE_POTENTIAL_DAILY_EXP, dailyExp);
|
||||
}
|
||||
|
||||
public int getDyePotentialDailyExp()
|
||||
{
|
||||
return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_EXP, 0);
|
||||
}
|
||||
|
||||
public void setDyePotentialenchantStep(int enchantlvl)
|
||||
{
|
||||
getVariables().set(PlayerVariables.DYE_POTENTIAL_DAILY_LVL, enchantlvl);
|
||||
}
|
||||
|
||||
public int getDyePotentialenchantStep()
|
||||
{
|
||||
return getVariables().getInt(PlayerVariables.DYE_POTENTIAL_DAILY_LVL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return map of all henna base stats bonus
|
||||
*/
|
||||
@@ -9788,7 +9901,7 @@ public class Player extends Playable
|
||||
getSubClasses().remove(classIndex);
|
||||
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement deleteHennas = con.prepareStatement(DELETE_CHAR_HENNAS);
|
||||
PreparedStatement deleteHennas = con.prepareStatement(DELETE_CHAR_HENNA);
|
||||
PreparedStatement deleteShortcuts = con.prepareStatement(DELETE_CHAR_SHORTCUTS);
|
||||
PreparedStatement deleteSkillReuse = con.prepareStatement(DELETE_SKILL_SAVE);
|
||||
PreparedStatement deleteSkills = con.prepareStatement(DELETE_CHAR_SKILLS);
|
||||
@@ -10062,7 +10175,7 @@ public class Player extends Playable
|
||||
sendPacket(new EtcStatusUpdate(this));
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
_henna[i] = null;
|
||||
_hennaPoten[i] = null;
|
||||
}
|
||||
|
||||
restoreHenna();
|
||||
|
@@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.events.impl.creature.player;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
|
@@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.model.events.impl.creature.player;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
|
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.item.henna;
|
||||
|
||||
import org.l2jmobius.gameserver.data.xml.SkillData;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
* @author Serenitty
|
||||
*/
|
||||
public class DyePotential
|
||||
{
|
||||
private final int _id;
|
||||
private final int _slotId;
|
||||
private final int _skillId;
|
||||
private final Skill[] _skills;
|
||||
private final int _maxSkillLevel;
|
||||
|
||||
public DyePotential(int id, int slotId, int skillId, int maxSkillLevel)
|
||||
{
|
||||
_id = id;
|
||||
_slotId = slotId;
|
||||
_skillId = skillId;
|
||||
_skills = new Skill[maxSkillLevel];
|
||||
for (int i = 1; i <= maxSkillLevel; i++)
|
||||
{
|
||||
_skills[i - 1] = SkillData.getInstance().getSkill(skillId, i);
|
||||
}
|
||||
_maxSkillLevel = maxSkillLevel;
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
public int getSlotId()
|
||||
{
|
||||
return _slotId;
|
||||
}
|
||||
|
||||
public int getSkillId()
|
||||
{
|
||||
return _skillId;
|
||||
}
|
||||
|
||||
public Skill getSkill(int level)
|
||||
{
|
||||
return _skills[level - 1];
|
||||
}
|
||||
|
||||
public int getMaxSkillLevel()
|
||||
{
|
||||
return _maxSkillLevel;
|
||||
}
|
||||
}
|
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.item.henna;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
|
||||
/**
|
||||
* @author Serenitty
|
||||
*/
|
||||
public class DyePotentialFee
|
||||
{
|
||||
private final int _step;
|
||||
private final ItemHolder _item;
|
||||
private final int _dailyCount;
|
||||
private final Map<Integer, Double> _enchantExp;
|
||||
|
||||
public DyePotentialFee(int step, ItemHolder item, int dailyCount, Map<Integer, Double> enchantExp)
|
||||
{
|
||||
_step = step;
|
||||
_item = item;
|
||||
_dailyCount = dailyCount;
|
||||
_enchantExp = enchantExp;
|
||||
}
|
||||
|
||||
public int getStep()
|
||||
{
|
||||
return _step;
|
||||
}
|
||||
|
||||
public ItemHolder getItem()
|
||||
{
|
||||
return _item;
|
||||
}
|
||||
|
||||
public int getDailyCount()
|
||||
{
|
||||
return _dailyCount;
|
||||
}
|
||||
|
||||
public Map<Integer, Double> getEnchantExp()
|
||||
{
|
||||
return _enchantExp;
|
||||
}
|
||||
}
|
@@ -14,15 +14,15 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.item;
|
||||
package org.l2jmobius.gameserver.model.item.henna;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.ClassId;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.BaseStat;
|
||||
|
||||
@@ -34,6 +34,7 @@ public class Henna
|
||||
{
|
||||
private final int _dyeId;
|
||||
private final int _dyeItemId;
|
||||
private final int _patternLevel;
|
||||
private final Map<BaseStat, Integer> _baseStats = new HashMap<>();
|
||||
private final int _wearFee;
|
||||
private final int _wearCount;
|
||||
@@ -41,12 +42,13 @@ public class Henna
|
||||
private final int _cancelCount;
|
||||
private final int _duration;
|
||||
private final List<Skill> _skills;
|
||||
private final List<ClassId> _wearClass;
|
||||
private final List<Integer> _wearClass;
|
||||
|
||||
public Henna(StatSet set)
|
||||
{
|
||||
_dyeId = set.getInt("dyeId");
|
||||
_dyeItemId = set.getInt("dyeItemId");
|
||||
_patternLevel = set.getInt("patternLevel", -1);
|
||||
_baseStats.put(BaseStat.STR, set.getInt("str", 0));
|
||||
_baseStats.put(BaseStat.CON, set.getInt("con", 0));
|
||||
_baseStats.put(BaseStat.DEX, set.getInt("dex", 0));
|
||||
@@ -147,25 +149,30 @@ public class Henna
|
||||
/**
|
||||
* @return the list with the allowed classes to wear this dye.
|
||||
*/
|
||||
public List<ClassId> getAllowedWearClass()
|
||||
public List<Integer> getAllowedWearClass()
|
||||
{
|
||||
return _wearClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param classId the class trying to wear this dye.
|
||||
* @param c the class trying to wear this dye.
|
||||
* @return {@code true} if the player is allowed to wear this dye, {@code false} otherwise.
|
||||
*/
|
||||
public boolean isAllowedClass(ClassId classId)
|
||||
public boolean isAllowedClass(Player c)
|
||||
{
|
||||
return _wearClass.contains(classId);
|
||||
return _wearClass.contains(c.getClassId().level());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param wearClassIds the list of classes that can wear this dye.
|
||||
*/
|
||||
public void setWearClassIds(List<ClassId> wearClassIds)
|
||||
public void setWearClassIds(List<Integer> wearClassIds)
|
||||
{
|
||||
_wearClass.addAll(wearClassIds);
|
||||
}
|
||||
}
|
||||
|
||||
public int getPatternLevel()
|
||||
{
|
||||
return _patternLevel;
|
||||
}
|
||||
}
|
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.model.item.henna;
|
||||
|
||||
/**
|
||||
* @author Serenitty
|
||||
*/
|
||||
public class HennaPoten
|
||||
{
|
||||
private Henna _henna;
|
||||
private int _potenId;
|
||||
private int _enchantLevel = 1;
|
||||
private int _enchantExp;
|
||||
|
||||
public HennaPoten()
|
||||
{
|
||||
}
|
||||
|
||||
public void setHenna(Henna henna)
|
||||
{
|
||||
_henna = henna;
|
||||
}
|
||||
|
||||
public Henna getHenna()
|
||||
{
|
||||
return _henna;
|
||||
}
|
||||
|
||||
public void setPotenId(int val)
|
||||
{
|
||||
_potenId = val;
|
||||
}
|
||||
|
||||
public int getPotenId()
|
||||
{
|
||||
return _potenId;
|
||||
}
|
||||
|
||||
public void setEnchantLevel(int val)
|
||||
{
|
||||
_enchantLevel = val;
|
||||
}
|
||||
|
||||
public int getEnchantLevel()
|
||||
{
|
||||
return _enchantLevel;
|
||||
}
|
||||
|
||||
public void setEnchantExp(int val)
|
||||
{
|
||||
_enchantExp = val;
|
||||
}
|
||||
|
||||
public int getEnchantExp()
|
||||
{
|
||||
return _enchantExp;
|
||||
}
|
||||
|
||||
public boolean isPotentialAvailable()
|
||||
{
|
||||
return (_henna != null) && (_henna.getPatternLevel() > 0);
|
||||
}
|
||||
|
||||
public int getActiveStep()
|
||||
{
|
||||
if (!isPotentialAvailable())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return Math.min(_enchantLevel, _henna.getPatternLevel());
|
||||
}
|
||||
}
|
@@ -273,6 +273,9 @@ public enum Stat
|
||||
// Magic Lamp
|
||||
MAGIC_LAMP_EXP_RATE("magicLampExpRate"),
|
||||
|
||||
// Henna
|
||||
HENNA_SLOTS_AVAILABLE("hennaSlots"),
|
||||
|
||||
// Souls
|
||||
MAX_SOULS("maxSouls"),
|
||||
|
||||
|
@@ -78,6 +78,14 @@ public class PlayerVariables extends AbstractVariables
|
||||
public static final String STAT_WIT = "STAT_WIT";
|
||||
public static final String STAT_MEN = "STAT_MEN";
|
||||
public static final String CLAN_JOIN_TIME = "CLAN_JOIN_TIME";
|
||||
public static final String HENNA1_DURATION = "HENNA1_DURATION";
|
||||
public static final String HENNA2_DURATION = "HENNA2_DURATION";
|
||||
public static final String HENNA3_DURATION = "HENNA3_DURATION";
|
||||
public static final String HENNA4_DURATION = "HENNA4_DURATION";
|
||||
public static final String DYE_POTENTIAL_DAILY_STEP = "DYE_POTENTIAL_DAILY_STEP";
|
||||
public static final String DYE_POTENTIAL_DAILY_COUNT = "DYE_POTENTIAL_DAILY_COUNT";
|
||||
public static final String DYE_POTENTIAL_DAILY_EXP = "DYE_POTENTIAL_DAILY_EXP";
|
||||
public static final String DYE_POTENTIAL_DAILY_LVL = "DYE_POTENTIAL_DAILY_LVL";
|
||||
|
||||
private final int _objectId;
|
||||
|
||||
|
@@ -99,6 +99,12 @@ import org.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMenteeAdd
|
||||
import org.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMenteeWaitingList;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMentorCancel;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMentorList;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.newhenna.RequestNewHennaCompose;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.newhenna.RequestNewHennaEquip;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.newhenna.RequestNewHennaList;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.newhenna.RequestNewHennaPotenEnchant;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.newhenna.RequestNewHennaPotenSelect;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.newhenna.RequestNewHennaUnequip;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pet.ExEvolvePet;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pet.ExPetEquipItem;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.pet.ExPetUnequipItem;
|
||||
@@ -707,12 +713,12 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
EX_WORLDCASTLEWAR_HOST_CASTLE_SIEGE_RANKING_INFO(0x215, null, ConnectionState.IN_GAME),
|
||||
EX_WORLDCASTLEWAR_CASTLE_SIEGE_RANKING_INFO(0x216, null, ConnectionState.IN_GAME),
|
||||
EX_WORLDCASTLEWAR_SIEGE_MAINBATTLE_HUD_INFO(0x217, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_LIST(0x218, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_EQUIP(0x219, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_UNEQUIP(0x21A, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_POTEN_SELECT(0x21B, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_POTEN_ENCHANT(0x21C, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_COMPOSE(0x21D, null, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_LIST(0x218, RequestNewHennaList::new, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_EQUIP(0x219, RequestNewHennaEquip::new, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_UNEQUIP(0x21A, RequestNewHennaUnequip::new, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_POTEN_SELECT(0x21B, RequestNewHennaPotenSelect::new, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_POTEN_ENCHANT(0x21C, RequestNewHennaPotenEnchant::new, ConnectionState.IN_GAME),
|
||||
EX_NEW_HENNA_COMPOSE(0x21D, RequestNewHennaCompose::new, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_INVITE_PARTY(0x21E, null, ConnectionState.IN_GAME),
|
||||
EX_ITEM_USABLE_LIST(0x21F, null, ConnectionState.IN_GAME),
|
||||
EX_PACKETREADCOUNTPERSECOND(0x220, null, ConnectionState.IN_GAME),
|
||||
|
@@ -123,10 +123,10 @@ public enum IncomingPackets implements IIncomingPackets<GameClient>
|
||||
REQUEST_SEND_FRIEND_MSG(0x6B, RequestSendFriendMsg::new, ConnectionState.IN_GAME),
|
||||
REQUEST_SHOW_MINI_MAP(0x6C, RequestShowMiniMap::new, ConnectionState.IN_GAME),
|
||||
REQUEST_RECORD_INFO(0x6E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_HENNA_EQUIP(0x6F, RequestHennaEquip::new, ConnectionState.IN_GAME),
|
||||
REQUEST_HENNA_EQUIP(0x6F, null, ConnectionState.IN_GAME),
|
||||
REQUEST_HENNA_REMOVE_LIST(0x70, RequestHennaRemoveList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_HENNA_ITEM_REMOVE_INFO(0x71, RequestHennaItemRemoveInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_HENNA_REMOVE(0x72, RequestHennaRemove::new, ConnectionState.IN_GAME),
|
||||
REQUEST_HENNA_REMOVE(0x72, null, ConnectionState.IN_GAME),
|
||||
REQUEST_ACQUIRE_SKILL_INFO(0x73, RequestAcquireSkillInfo::new, ConnectionState.IN_GAME),
|
||||
SEND_BYPASS_BUILD_CMD(0x74, SendBypassBuildCmd::new, ConnectionState.IN_GAME),
|
||||
REQUEST_MOVE_TO_LOCATION_IN_VEHICLE(0x75, RequestMoveToLocationInVehicle::new, ConnectionState.IN_GAME),
|
||||
|
@@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaData;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.PacketLogger;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||
@@ -48,7 +48,7 @@ public class RequestHennaItemInfo implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
final Henna henna = HennaData.getInstance().getHenna(_symbolId);
|
||||
final Henna henna = HennaData.getInstance().getHennaByDyeId(_symbolId);
|
||||
if (henna == null)
|
||||
{
|
||||
if (_symbolId != 0)
|
||||
|
@@ -19,7 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaData;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.PacketLogger;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||
|
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaPotenCompose;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class RequestNewHennaCompose implements IClientIncomingPacket
|
||||
{
|
||||
@SuppressWarnings("unused")
|
||||
private int _slotOneIndex;
|
||||
private int _slotOneItemId;
|
||||
private int _slotTwoItemId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_slotOneIndex = packet.readC();
|
||||
_slotOneItemId = packet.readC();
|
||||
_slotTwoItemId = packet.readC();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
player.sendPacket(new NewHennaPotenCompose(_slotTwoItemId, _slotOneItemId, true));
|
||||
}
|
||||
}
|
@@ -14,32 +14,36 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets;
|
||||
package org.l2jmobius.gameserver.network.clientpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaData;
|
||||
import org.l2jmobius.gameserver.enums.PlayerCondOverride;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.PacketLogger;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaEquip;
|
||||
import org.l2jmobius.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* @author Zoey76
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class RequestHennaEquip implements IClientIncomingPacket
|
||||
public class RequestNewHennaEquip implements IClientIncomingPacket
|
||||
{
|
||||
private int _slotId;
|
||||
private int _symbolId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_slotId = packet.readC();
|
||||
_symbolId = packet.readD();
|
||||
return true;
|
||||
}
|
||||
@@ -60,38 +64,49 @@ public class RequestHennaEquip implements IClientIncomingPacket
|
||||
|
||||
if (player.getHennaEmptySlots() == 0)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_HAVE_NO_FREE_PATTERN_SLOTS);
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
PacketLogger.warning(player + ": Invalid Henna error 0 Id " + _symbolId + _slotId);
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_MAKE_A_PATTERN);
|
||||
client.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
}
|
||||
|
||||
final Henna henna = HennaData.getInstance().getHenna(_symbolId);
|
||||
final Item item = player.getInventory().getItemByObjectId(_symbolId);
|
||||
if (item == null)
|
||||
{
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
player.sendPacket(new NewHennaEquip(_slotId, 0, false));
|
||||
return;
|
||||
}
|
||||
|
||||
final Henna henna = HennaData.getInstance().getHennaByItemId(item.getId());
|
||||
if (henna == null)
|
||||
{
|
||||
PacketLogger.warning("Invalid Henna Id: " + _symbolId + " from " + player);
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
PacketLogger.warning(player + ": Invalid Henna SymbolId " + _symbolId + _slotId + item.getTemplate());
|
||||
client.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_MAKE_A_PATTERN);
|
||||
return;
|
||||
}
|
||||
|
||||
final long _count = player.getInventory().getInventoryItemCount(henna.getDyeItemId(), -1);
|
||||
if (henna.isAllowedClass(player.getClassId()) && (_count >= henna.getWearCount()) && (player.getAdena() >= henna.getWearFee()) && player.addHenna(henna))
|
||||
final long count = player.getInventory().getInventoryItemCount(henna.getDyeItemId(), -1);
|
||||
if (henna.isAllowedClass(player) && (count >= henna.getWearCount()) && (player.getAdena() >= henna.getWearFee()) && player.addHenna(_slotId, henna))
|
||||
{
|
||||
player.destroyItemByItemId("Henna", henna.getDyeItemId(), henna.getWearCount(), player, true);
|
||||
player.getInventory().reduceAdena("Henna", henna.getWearFee(), player, player.getLastFolkNPC());
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(player.getInventory().getAdenaInstance());
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.sendPacket(new HennaEquipList(player));
|
||||
player.sendPacket(new NewHennaEquip(_slotId, henna.getDyeId(), true));
|
||||
player.sendPacket(SystemMessageId.PATTERN_ADDED);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_MAKE_A_PATTERN);
|
||||
if (!player.canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !henna.isAllowedClass(player.getClassId()))
|
||||
if (!player.canOverrideCond(PlayerCondOverride.ITEM_CONDITIONS) && !henna.isAllowedClass(player))
|
||||
{
|
||||
Util.handleIllegalPlayerAction(player, "Exploit attempt: Character " + player.getName() + " of account " + player.getAccountName() + " tryed to add a forbidden henna.", Config.DEFAULT_PUNISH);
|
||||
}
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
PacketLogger.warning(player + ": Invalid Henna error 2 " + _symbolId + _slotId + item.getTemplate());
|
||||
client.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaList;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class RequestNewHennaList implements IClientIncomingPacket
|
||||
{
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendPacket(new NewHennaList(player));
|
||||
}
|
||||
}
|
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets.newhenna;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaPatternPotentialData;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.henna.DyePotentialFee;
|
||||
import org.l2jmobius.gameserver.model.item.henna.HennaPoten;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaPotenEnchant;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class RequestNewHennaPotenEnchant implements IClientIncomingPacket
|
||||
{
|
||||
private int _slotId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_slotId = packet.readC();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((_slotId < 1) || (_slotId > 4))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int dailyStep = player.getDyePotentialDailyStep();
|
||||
final DyePotentialFee currentFee = HennaPatternPotentialData.getInstance().getFee(dailyStep);
|
||||
int dailyCount = player.getDyePotentialDailyCount();
|
||||
if ((currentFee == null) || (dailyCount <= 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player.destroyItemByItemId(getClass().getSimpleName(), currentFee.getItem().getId(), currentFee.getItem().getCount(), player, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
dailyCount -= 1;
|
||||
if ((dailyCount <= 0) && (dailyStep != HennaPatternPotentialData.getInstance().getMaxPotenEnchantStep()))
|
||||
{
|
||||
dailyStep += 1;
|
||||
final DyePotentialFee newFee = HennaPatternPotentialData.getInstance().getFee(dailyStep);
|
||||
if (newFee != null)
|
||||
{
|
||||
dailyCount = newFee.getDailyCount();
|
||||
}
|
||||
player.setDyePotentialDailyCount(dailyCount);
|
||||
player.setDyePotentialDailyStep(dailyStep);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.setDyePotentialDailyCount(dailyCount);
|
||||
}
|
||||
double totalChance = 0;
|
||||
double random = Rnd.nextDouble() * 100;
|
||||
for (Entry<Integer, Double> entry : currentFee.getEnchantExp().entrySet())
|
||||
{
|
||||
totalChance += entry.getValue();
|
||||
if (random <= totalChance)
|
||||
{
|
||||
final HennaPoten poten = player.getHennaPoten(_slotId);
|
||||
final int increase = entry.getKey();
|
||||
int newEnchantExp = poten.getEnchantExp() + increase;
|
||||
final int tatooExpNeeded = HennaPatternPotentialData.getInstance().getExpForLevel(poten.getEnchantLevel());
|
||||
if (newEnchantExp >= tatooExpNeeded)
|
||||
{
|
||||
newEnchantExp -= tatooExpNeeded;
|
||||
if (poten.getEnchantLevel() < HennaPatternPotentialData.getInstance().getMaxPotenLevel())
|
||||
{
|
||||
poten.setEnchantLevel(poten.getEnchantLevel() + 1);
|
||||
player.applyDyePotenSkills();
|
||||
}
|
||||
}
|
||||
poten.setEnchantExp(newEnchantExp);
|
||||
player.sendPacket(new NewHennaPotenEnchant(_slotId, poten.getEnchantLevel(), poten.getEnchantExp(), dailyStep, dailyCount, poten.getActiveStep(), true));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaPatternPotentialData;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.henna.DyePotential;
|
||||
import org.l2jmobius.gameserver.model.item.henna.HennaPoten;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaPotenSelect;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class RequestNewHennaPotenSelect implements IClientIncomingPacket
|
||||
{
|
||||
private int _slotId;
|
||||
private int _potenId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_slotId = packet.readC();
|
||||
_potenId = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final Player player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((_slotId < 1) || (_slotId > player.getHennaPotenList().length))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final DyePotential potential = HennaPatternPotentialData.getInstance().getPotential(_potenId);
|
||||
final HennaPoten hennaPoten = player.getHennaPoten(_slotId);
|
||||
if ((potential == null) || (potential.getSlotId() != _slotId))
|
||||
{
|
||||
player.sendPacket(new NewHennaPotenSelect(_slotId, _potenId, hennaPoten.getActiveStep(), false));
|
||||
return;
|
||||
}
|
||||
|
||||
hennaPoten.setPotenId(_potenId);
|
||||
player.sendPacket(new NewHennaPotenSelect(_slotId, _potenId, hennaPoten.getActiveStep(), true));
|
||||
player.applyDyePotenSkills();
|
||||
}
|
||||
}
|
@@ -14,27 +14,29 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.clientpackets;
|
||||
package org.l2jmobius.gameserver.network.clientpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.PacketLogger;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.newhenna.NewHennaUnequip;
|
||||
|
||||
/**
|
||||
* @author Zoey76
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class RequestHennaRemove implements IClientIncomingPacket
|
||||
public class RequestNewHennaUnequip implements IClientIncomingPacket
|
||||
{
|
||||
private int _symbolId;
|
||||
private int _slotId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_symbolId = packet.readD();
|
||||
_slotId = packet.readC();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -50,34 +52,31 @@ public class RequestHennaRemove implements IClientIncomingPacket
|
||||
if (!client.getFloodProtectors().canPerformTransaction())
|
||||
{
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
player.sendPacket(new NewHennaUnequip(_slotId, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
Henna henna;
|
||||
boolean found = false;
|
||||
for (int i = 1; i <= 3; i++)
|
||||
if ((_slotId == 1) || (_slotId == 2) || (_slotId == 3) || (_slotId == 4))
|
||||
{
|
||||
henna = player.getHenna(i);
|
||||
if ((henna != null) && (henna.getDyeId() == _symbolId))
|
||||
henna = player.getHenna(_slotId);
|
||||
if (player.getAdena() >= henna.getCancelFee())
|
||||
{
|
||||
if (player.getAdena() >= henna.getCancelFee())
|
||||
{
|
||||
player.removeHenna(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
player.removeHenna(_slotId);
|
||||
player.sendPacket(new NewHennaUnequip(_slotId, 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA);
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
player.sendPacket(new NewHennaUnequip(_slotId, 0));
|
||||
}
|
||||
}
|
||||
// TODO: Test.
|
||||
if (!found)
|
||||
else
|
||||
{
|
||||
PacketLogger.warning(getClass().getSimpleName() + ": " + player + " requested Henna Draw remove without any henna.");
|
||||
player.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
player.sendPacket(new NewHennaUnequip(_slotId, 0));
|
||||
}
|
||||
}
|
||||
}
|
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.HennaPoten;
|
||||
import org.l2jmobius.gameserver.model.stats.BaseStat;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
@@ -32,12 +32,12 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
public class GMHennaInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final Player _player;
|
||||
private final List<Henna> _hennas = new ArrayList<>();
|
||||
private final List<HennaPoten> _hennas = new ArrayList<>();
|
||||
|
||||
public GMHennaInfo(Player player)
|
||||
{
|
||||
_player = player;
|
||||
for (Henna henna : _player.getHennaList())
|
||||
for (HennaPoten henna : _player.getHennaPotenList())
|
||||
{
|
||||
if (henna != null)
|
||||
{
|
||||
@@ -60,9 +60,9 @@ public class GMHennaInfo implements IClientOutgoingPacket
|
||||
packet.writeH(0); // equip CHA
|
||||
packet.writeD(3); // Slots
|
||||
packet.writeD(_hennas.size()); // Size
|
||||
for (Henna henna : _hennas)
|
||||
for (HennaPoten henna : _hennas)
|
||||
{
|
||||
packet.writeD(henna.getDyeId());
|
||||
packet.writeD(henna.getPotenId());
|
||||
packet.writeD(1);
|
||||
}
|
||||
packet.writeD(0);
|
||||
|
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.data.xml.HennaData;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
/**
|
||||
@@ -35,7 +35,7 @@ public class HennaEquipList implements IClientOutgoingPacket
|
||||
public HennaEquipList(Player player)
|
||||
{
|
||||
_player = player;
|
||||
_hennaEquipList = HennaData.getInstance().getHennaList(player.getClassId());
|
||||
_hennaEquipList = HennaData.getInstance().getHennaList(player);
|
||||
}
|
||||
|
||||
public HennaEquipList(Player player, List<Henna> list)
|
||||
@@ -61,7 +61,7 @@ public class HennaEquipList implements IClientOutgoingPacket
|
||||
packet.writeD(henna.getDyeItemId()); // item Id of the dye
|
||||
packet.writeQ(henna.getWearCount()); // amount of dyes required
|
||||
packet.writeQ(henna.getWearFee()); // amount of Adena required
|
||||
packet.writeD(henna.isAllowedClass(_player.getClassId()) ? 1 : 0); // meet the requirement or not
|
||||
packet.writeD(henna.isAllowedClass(_player) ? 1 : 0); // meet the requirement or not
|
||||
// packet.writeD(0); // Does not exist in Classic.
|
||||
}
|
||||
}
|
||||
|
@@ -21,7 +21,8 @@ import java.util.List;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.HennaPoten;
|
||||
import org.l2jmobius.gameserver.model.stats.BaseStat;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
@@ -37,8 +38,9 @@ public class HennaInfo implements IClientOutgoingPacket
|
||||
public HennaInfo(Player player)
|
||||
{
|
||||
_player = player;
|
||||
for (Henna henna : _player.getHennaList())
|
||||
for (HennaPoten hennaPoten : _player.getHennaPotenList())
|
||||
{
|
||||
final Henna henna = hennaPoten.getHenna();
|
||||
if (henna != null)
|
||||
{
|
||||
_hennas.add(henna);
|
||||
@@ -63,7 +65,7 @@ public class HennaInfo implements IClientOutgoingPacket
|
||||
for (Henna henna : _hennas)
|
||||
{
|
||||
packet.writeD(henna.getDyeId());
|
||||
packet.writeD(henna.isAllowedClass(_player.getClassId()) ? 1 : 0);
|
||||
packet.writeD(henna.isAllowedClass(_player) ? 1 : 0);
|
||||
}
|
||||
packet.writeD(0); // Premium Slot Dye ID
|
||||
packet.writeD(0); // Premium Slot Dye Time Left
|
||||
|
@@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.stats.BaseStat;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
@@ -44,7 +44,7 @@ public class HennaItemDrawInfo implements IClientOutgoingPacket
|
||||
packet.writeD(_henna.getDyeItemId()); // item id of dye
|
||||
packet.writeQ(_henna.getWearCount()); // total amount of dye require
|
||||
packet.writeQ(_henna.getWearFee()); // total amount of Adena require to draw symbol
|
||||
packet.writeD(_henna.isAllowedClass(_player.getClassId()) ? 1 : 0); // able to draw or not 0 is false and 1 is true
|
||||
packet.writeD(_henna.isAllowedClass(_player) ? 1 : 0); // able to draw or not 0 is false and 1 is true
|
||||
packet.writeQ(_player.getAdena());
|
||||
packet.writeD(_player.getINT()); // current INT
|
||||
packet.writeH(_player.getINT() + _player.getHennaValue(BaseStat.INT)); // equip INT
|
||||
|
@@ -18,7 +18,7 @@ package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.stats.BaseStat;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
@@ -44,7 +44,7 @@ public class HennaItemRemoveInfo implements IClientOutgoingPacket
|
||||
packet.writeD(_henna.getDyeItemId()); // item id of dye
|
||||
packet.writeQ(_henna.getCancelCount()); // total amount of dye require
|
||||
packet.writeQ(_henna.getCancelFee()); // total amount of Adena require to remove symbol
|
||||
packet.writeD(_henna.isAllowedClass(_player.getClassId()) ? 1 : 0); // able to remove or not
|
||||
packet.writeD(_henna.isAllowedClass(_player) ? 1 : 0); // able to remove or not
|
||||
packet.writeQ(_player.getAdena());
|
||||
packet.writeD(_player.getINT()); // current INT
|
||||
packet.writeH(_player.getINT() - _player.getHennaValue(BaseStat.INT)); // equip INT
|
||||
|
@@ -18,7 +18,6 @@ package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.Henna;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
/**
|
||||
@@ -26,6 +25,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
*/
|
||||
public class HennaRemoveList implements IClientOutgoingPacket
|
||||
{
|
||||
@SuppressWarnings("unused")
|
||||
private final Player _player;
|
||||
|
||||
public HennaRemoveList(Player player)
|
||||
@@ -37,20 +37,20 @@ public class HennaRemoveList implements IClientOutgoingPacket
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.HENNA_UNEQUIP_LIST.writeId(packet);
|
||||
packet.writeQ(_player.getAdena());
|
||||
packet.writeD(3); // seems to be max size
|
||||
packet.writeD(3 - _player.getHennaEmptySlots());
|
||||
for (Henna henna : _player.getHennaList())
|
||||
{
|
||||
if (henna != null)
|
||||
{
|
||||
packet.writeD(henna.getDyeId());
|
||||
packet.writeD(henna.getDyeItemId());
|
||||
packet.writeQ(henna.getCancelCount());
|
||||
packet.writeQ(henna.getCancelFee());
|
||||
packet.writeD(0);
|
||||
}
|
||||
}
|
||||
// packet.writeQ(_player.getAdena());
|
||||
// packet.writeD(3); // seems to be max size
|
||||
// packet.writeD(3 - _player.getHennaEmptySlots());
|
||||
// for (Henna henna : _player.getHennaList())
|
||||
// {
|
||||
// if (henna != null)
|
||||
// {
|
||||
// packet.writeD(henna.getDyeId());
|
||||
// packet.writeD(henna.getDyeItemId());
|
||||
// packet.writeQ(henna.getCancelCount());
|
||||
// packet.writeQ(henna.getCancelFee());
|
||||
// packet.writeD(0);
|
||||
// }
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class NewHennaEquip implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _slotId;
|
||||
private final int _hennaId;
|
||||
private final boolean _success;
|
||||
|
||||
public NewHennaEquip(int slotId, int hennaId, boolean success)
|
||||
{
|
||||
_slotId = slotId;
|
||||
_hennaId = hennaId;
|
||||
_success = success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_NEW_HENNA_EQUIP.writeId(packet);
|
||||
packet.writeC(_slotId);
|
||||
packet.writeD(_hennaId);
|
||||
packet.writeD(_success ? 1 : 0);
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.l2jmobius.gameserver.network.serverpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.henna.Henna;
|
||||
import org.l2jmobius.gameserver.model.item.henna.HennaPoten;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class NewHennaList implements IClientOutgoingPacket
|
||||
{
|
||||
private final HennaPoten[] _hennaId;
|
||||
private final int _activeslots;
|
||||
private final int _dailyStep;
|
||||
private final int _dailyCount;
|
||||
@SuppressWarnings("unused")
|
||||
private final int _enchantExp;
|
||||
|
||||
public NewHennaList(Player player)
|
||||
{
|
||||
_dailyStep = player.getDyePotentialDailyStep();
|
||||
_dailyCount = player.getDyePotentialDailyCount();
|
||||
_hennaId = player.getHennaPotenList();
|
||||
_activeslots = player.getAvailableHennaSlots();
|
||||
_enchantExp = player.getDyePotentialDailyExp();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_NEW_HENNA_LIST.writeId(packet);
|
||||
packet.writeH(_dailyStep);
|
||||
packet.writeH(_dailyCount);
|
||||
packet.writeD(_hennaId.length);
|
||||
for (int i = 1; i <= _hennaId.length; i++)
|
||||
{
|
||||
final HennaPoten hennaPoten = _hennaId[i - 1];
|
||||
final Henna henna = _hennaId[i - 1].getHenna();
|
||||
int isactiveStep = hennaPoten.getActiveStep();
|
||||
packet.writeD(henna != null ? henna.getDyeId() : 0x00);
|
||||
packet.writeD(isactiveStep == 0 ? 0 : hennaPoten.getPotenId());
|
||||
packet.writeC(_activeslots);
|
||||
packet.writeH(hennaPoten.getEnchantLevel());
|
||||
packet.writeD(hennaPoten.getEnchantExp());
|
||||
packet.writeH(isactiveStep);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class NewHennaPotenCompose implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _resultHennaId;
|
||||
private final int _resultItemId;
|
||||
private final boolean _success;
|
||||
|
||||
public NewHennaPotenCompose(int resultHennaId, int resultItemId, boolean success)
|
||||
{
|
||||
_resultHennaId = resultHennaId;
|
||||
_resultItemId = resultItemId;
|
||||
_success = success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_NEW_HENNA_COMPOSE.writeId(packet);
|
||||
packet.writeD(_resultHennaId);
|
||||
packet.writeD(_resultItemId);
|
||||
packet.writeC(_success ? 1 : 0);
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class NewHennaPotenEnchant implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _slotId;
|
||||
private final int _enchantStep;
|
||||
private final int _enchantExp;
|
||||
private final int _dailyStep;
|
||||
private final int _dailyCount;
|
||||
private final int _activeStep;
|
||||
private final boolean _success;
|
||||
|
||||
public NewHennaPotenEnchant(int slotId, int enchantStep, int enchantExp, int dailyStep, int dailyCount, int activeStep, boolean success)
|
||||
{
|
||||
_slotId = slotId;
|
||||
_enchantStep = enchantStep;
|
||||
_enchantExp = enchantExp;
|
||||
_dailyStep = dailyStep;
|
||||
_dailyCount = dailyCount;
|
||||
_activeStep = activeStep;
|
||||
_success = success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_NEW_HENNA_POTEN_ENCHANT.writeId(packet);
|
||||
packet.writeC(_slotId);
|
||||
packet.writeH(_enchantStep);
|
||||
packet.writeD(_enchantExp);
|
||||
packet.writeH(_dailyStep);
|
||||
packet.writeH(_dailyCount);
|
||||
packet.writeH(_activeStep);
|
||||
packet.writeC(_success ? 1 : 0);
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class NewHennaPotenSelect implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _slotId;
|
||||
private final int _potenId;
|
||||
private final int _activeStep;
|
||||
private final boolean _success;
|
||||
|
||||
public NewHennaPotenSelect(int slotId, int potenId, int activeStep, boolean success)
|
||||
{
|
||||
_slotId = slotId;
|
||||
_potenId = potenId;
|
||||
_activeStep = activeStep;
|
||||
_success = success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_NEW_HENNA_POTEN_SELECT.writeId(packet);
|
||||
packet.writeC(_slotId);
|
||||
packet.writeD(_potenId);
|
||||
packet.writeH(_activeStep);
|
||||
packet.writeC(_success ? 1 : 0);
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets.newhenna;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Index, Serenitty
|
||||
*/
|
||||
public class NewHennaUnequip implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _slotId;
|
||||
private final int _success;
|
||||
|
||||
public NewHennaUnequip(int slotId, int success)
|
||||
{
|
||||
_slotId = slotId;
|
||||
_success = success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_NEW_HENNA_UNEQUIP.writeId(packet);
|
||||
packet.writeC(_slotId);
|
||||
packet.writeC(_success);
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -136,7 +136,7 @@ Frost Lord: https://eu.4game.com/patchnotes/lineage2essence/329/
|
||||
-Frost Lord castle
|
||||
|
||||
Battle Chronicle: https://eu.4game.com/patchnotes/lineage2essence/353/
|
||||
-Client support
|
||||
-New henna pattern potential system
|
||||
|
||||
Customs:
|
||||
-Newbie Helper NPC location info
|
||||
|
Reference in New Issue
Block a user