From 3f2c76f960275193176674a81e70490b96020044 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 14 Oct 2019 16:05:02 +0000 Subject: [PATCH] Addition of symbol seal data. Contributed by NviX. --- .../dist/game/config/Character.ini | 10 + .../dist/game/data/SymbolSealData.xml | 183 ++ .../scripts/handlers/EffectMasterHandler.java | 1 + .../handlers/effecthandlers/ClassChange.java | 1 + .../effecthandlers/RestoreSymbolSeal.java | 82 + .../game/data/stats/items/80700-80799.xml | 18 +- .../game/data/stats/skills/35400-35499.xml | 1832 +++++++++++++++-- .../game/data/stats/skills/39400-39499.xml | 12 + .../dist/game/data/xsd/SymbolSealData.xsd | 21 + .../dist/game/data/xsd/items.xsd | 1 + .../java/org/l2jmobius/Config.java | 4 + .../data/xml/impl/SymbolSealData.java | 95 + .../gameserver/engines/DocumentBase.java | 7 + .../org/l2jmobius/gameserver/model/Party.java | 8 + .../gameserver/model/actor/Attackable.java | 8 + .../model/actor/instance/PlayerInstance.java | 72 +- .../ConditionPlayerSymbolSealPoints.java | 46 + .../model/holders/SymbolSealHolder.java | 44 + .../network/clientpackets/EnterWorld.java | 2 + .../clientpackets/RequestHennaEquip.java | 1 + .../clientpackets/RequestHennaRemove.java | 1 + .../network/serverpackets/UserInfo.java | 3 +- 22 files changed, 2250 insertions(+), 202 deletions(-) create mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/SymbolSealData.xml create mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/RestoreSymbolSeal.java create mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SymbolSealData.xsd create mode 100644 L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SymbolSealData.java create mode 100644 L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/conditions/ConditionPlayerSymbolSealPoints.java create mode 100644 L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/SymbolSealHolder.java diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/Character.ini b/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/Character.ini index b091b9ac5f..e649fb8638 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/Character.ini +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/config/Character.ini @@ -295,6 +295,16 @@ StartingVitalityPoints = 140000 # Default: False RaidbossUseVitality = False +# --------------------------------------------------------------------------- +# Symbol Seal configuration +# --------------------------------------------------------------------------- + +# Maximum symbol seal gauge points +# Default: 7800 +MaxSymbolSealPoints = 7800 + +# Consume symbol seal points speed per kill +ConsumeSymbolSealPoints = 1 # --------------------------------------------------------------------------- # Limits diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/SymbolSealData.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/SymbolSealData.xml new file mode 100644 index 0000000000..5d9ed6cc71 --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/SymbolSealData.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java index 7e258c6bdd..8357840939 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/EffectMasterHandler.java @@ -293,6 +293,7 @@ public class EffectMasterHandler EffectHandler.getInstance().registerHandler("ResistSkill", ResistSkill::new); EffectHandler.getInstance().registerHandler("Restoration", Restoration::new); EffectHandler.getInstance().registerHandler("RestorationRandom", RestorationRandom::new); + EffectHandler.getInstance().registerHandler("RestoreSymbolSeal", RestoreSymbolSeal::new); EffectHandler.getInstance().registerHandler("Resurrection", Resurrection::new); EffectHandler.getInstance().registerHandler("ResurrectionSpecial", ResurrectionSpecial::new); EffectHandler.getInstance().registerHandler("Reuse", Reuse::new); diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java index 2c0c9396ca..b98dde2b49 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/ClassChange.java @@ -84,6 +84,7 @@ public class ClassChange extends AbstractEffect msg.addClassId(player.getClassId().getId()); player.sendPacket(msg); + player.updateSymbolSealSkills(); player.broadcastUserInfo(); player.sendPacket(new AcquireSkillList(player)); player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED)); diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/RestoreSymbolSeal.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/RestoreSymbolSeal.java new file mode 100644 index 0000000000..3154bb8c52 --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/effecthandlers/RestoreSymbolSeal.java @@ -0,0 +1,82 @@ +/* + * 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 . + */ +package handlers.effecthandlers; + +import org.l2jmobius.Config; +import org.l2jmobius.gameserver.enums.StatModifierType; +import org.l2jmobius.gameserver.model.StatsSet; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.items.instance.ItemInstance; +import org.l2jmobius.gameserver.model.skills.Skill; + +/** + * @author NviX + */ +public class RestoreSymbolSeal extends AbstractEffect +{ + private final int _amount; + private final StatModifierType _mode; + + public RestoreSymbolSeal(StatsSet params) + { + _amount = params.getInt("amount", 0); + _mode = params.getEnum("mode", StatModifierType.class, StatModifierType.PER); + } + + @Override + public boolean isInstant() + { + return true; + } + + @Override + public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) + { + if (effected.isDead() || effected.isDoor()) + { + return; + } + + PlayerInstance player = effected.getActingPlayer(); + int basicAmount = _amount; + double amount = 0; + switch (_mode) + { + case DIFF: + { + amount = Math.min(basicAmount, Config.MAX_SYMBOL_SEAL_POINTS - player.getSymbolSealPoints()); + break; + } + case PER: + { + amount = Math.min((Config.MAX_SYMBOL_SEAL_POINTS * basicAmount) / 100, Config.MAX_SYMBOL_SEAL_POINTS - player.getSymbolSealPoints()); + break; + } + } + + if (amount > 0) + { + final double newSymbolSealPoints = amount + effected.getActingPlayer().getSymbolSealPoints(); + player.setSymbolSealPoints((int) newSymbolSealPoints); + player.updateSymbolSealSkills(); + player.sendSkillList(); + player.broadcastUserInfo(); + } + } +} diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80700-80799.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80700-80799.xml index 4222e80304..13d239bb61 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80700-80799.xml +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/items/80700-80799.xml @@ -1206,14 +1206,24 @@ - - - + + + - + + + + + + + + + + + diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/35400-35499.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/35400-35499.xml index b0e8873483..78f7493d03 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/35400-35499.xml +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/35400-35499.xml @@ -171,463 +171,1927 @@ - - icon.dyeeffect_tw_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_tw_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_sK_slot_01 + P + + + 1427 + DIFF + + + 499 + DIFF + + + 1403 + DIFF + + - - icon.dyeeffect_sK_slot_01 + P + + + 1427 + DIFF + + + 499 + DIFF + + + 1403 + DIFF + + - - icon.dyeeffect_or_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_ya_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_fw_slot_01 + P + + + 1241 + DIFF + + + 548 + DIFF + + + 1220 + DIFF + + - - icon.dyeeffect_fw_slot_01 + P + + + 1241 + DIFF + + + 548 + DIFF + + + 1220 + DIFF + + - - icon.dyeeffect_ws_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_eh_slot_01 + P + + + 1272 + DIFF + + + 548 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_ie_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_sK_slot_01 + P + + + 1427 + DIFF + + + 499 + DIFF + + + 1403 + DIFF + + - - icon.dyeeffect_ie_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_or_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_ya_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_fw_slot_01 + P + + + 1241 + DIFF + + + 548 + DIFF + + + 1220 + DIFF + + - - icon.dyeeffect_ws_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_eh_slot_01 + P + + + 1272 + DIFF + + + 548 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_sK_slot_01 + P + + + 1427 + DIFF + + + 499 + DIFF + + + 1403 + DIFF + + - - icon.dyeeffect_ie_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_or_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_ya_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_fw_slot_01 + P + + + 1241 + DIFF + + + 548 + DIFF + + + 1220 + DIFF + + - - icon.dyeeffect_ws_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_eh_slot_01 + P + + + 1272 + DIFF + + + 548 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_tw_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_tw_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_ie_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_ie_slot_01 + P + + + 1272 + DIFF + + + 523 + DIFF + + + 1250 + DIFF + + - - icon.dyeeffect_or_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_tw_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_tw_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_fw_slot_01 + P + + + 1241 + DIFF + + + 548 + DIFF + + + 1220 + DIFF + + - - icon.dyeeffect_ya_slot_01 + P + + + 1303 + DIFF + + + 499 + DIFF + + + 1281 + DIFF + + - - icon.dyeeffect_gr_slot_01 + P + + + 1365 + DIFF + + + 499 + DIFF + + + 1342 + DIFF + + - - icon.dyeeffect_ss_slot_01 + P + + + 1241 + DIFF + + + 548 + DIFF + + + 1220 + DIFF + + - - icon.dyeeffect_tw_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_tw_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_sK_slot_02 + P + + + 2656 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_sK_slot_02 + P + + + 2656 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_or_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ya_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_fw_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_fw_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ws_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_eh_slot_02 + P + + + 2435 + DIFF + + + 2424 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ie_slot_02 + P + + + 2435 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_sK_slot_02 + P + + + 2656 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ie_slot_02 + P + + + 2435 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_or_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ya_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_fw_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ws_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_eh_slot_02 + P + + + 2435 + DIFF + + + 2424 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_sK_slot_02 + P + + + 2656 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ie_slot_02 + P + + + 2435 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_or_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ya_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_fw_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ws_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_eh_slot_02 + P + + + 2435 + DIFF + + + 2424 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_tw_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_tw_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ie_slot_02 + P + + + 2435 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ie_slot_02 + P + + + 2435 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_or_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_tw_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_tw_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_fw_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ya_slot_02 + P + + + 2324 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_gr_slot_02 + P + + + 2435 + DIFF + + + 2204 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_ss_slot_02 + P + + + 2324 + DIFF + + + 2314 + DIFF + + + 3 + PER + + + 3 + + + 3 + + - - icon.dyeeffect_tw_slot_03 + P + + + 2226 + DIFF + + + 3 + PER + + - - icon.dyeeffect_tw_slot_03 + P + + + 2226 + DIFF + + + 3 + PER + + - - icon.dyeeffect_sK_slot_03 + P + + + 1884 + DIFF + + + 2 + PER + + + 2 + PER + + + 1 + PER + + + 1 + PER + + - - icon.dyeeffect_sK_slot_03 + P + + + 1884 + DIFF + + + 2 + PER + + + 2 + PER + + + 1 + PER + + + 1 + PER + + - - icon.dyeeffect_or_slot_03 + P + + + 2483 + DIFF + + + 1 + PER + + + 2 + PER + + - - icon.dyeeffect_ya_slot_03 + P + + + 2483 + DIFF + + + 1 + PER + + + 2 + PER + + - - icon.dyeeffect_fw_slot_03 + P + + + 1309 + DIFF + + + 3 + PER + + - - icon.dyeeffect_fw_slot_03 + P + + + 1309 + DIFF + + + 3 + PER + + - - icon.dyeeffect_ws_slot_03 + P + + + 1199 + DIFF + + + 2 + PER + + + 654 + DIFF + + + 2 + PER + + + 1 + PER + + + 2 + PER + + - - icon.dyeeffect_eh_slot_03 + P + + + 1168 + DIFF + + + 2 + PER + + + 1 + PER + + + 1 + PER + + + 5 + PER + + - - icon.dyeeffect_ie_slot_03 + P + + + 2312 + DIFF + + + 2 + PER + + + 1 + PER + + - - icon.dyeeffect_sK_slot_03 + P + + + 1884 + DIFF + + + 2 + PER + + + 2 + PER + + + 1 + PER + + + 1 + PER + + - - icon.dyeeffect_ie_slot_03 + P + + + 2312 + DIFF + + + 2 + PER + + + 1 + PER + + - - icon.dyeeffect_or_slot_03 + P + + + 2483 + DIFF + + + 1 + PER + + + 2 + PER + + - - icon.dyeeffect_ya_slot_03 + P + + + 2483 + DIFF + + + 1 + PER + + + 2 + PER + + - - icon.dyeeffect_fw_slot_03 + P + + + 1309 + DIFF + + + 3 + PER + + - - icon.dyeeffect_ws_slot_03 + P + + + 1199 + DIFF + + + 2 + PER + + + 654 + DIFF + + + 2 + PER + + + 1 + PER + + + 2 + PER + + - - icon.dyeeffect_eh_slot_03 + P + + + 1168 + DIFF + + + 2 + PER + + + 1 + PER + + + 1 + PER + + + 5 + PER + + - - icon.dyeeffect_sK_slot_03 + P + + + 1884 + DIFF + + + 2 + PER + + + 2 + PER + + + 1 + PER + + + 1 + PER + + - - icon.dyeeffect_ie_slot_03 + P + + + 2312 + DIFF + + + 2 + PER + + + 1 + PER + + diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml index 7e51fd690c..6ea6c81e13 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/skills/39400-39499.xml @@ -989,7 +989,19 @@ 60000 + 2 + 1 A1 + 5 + 0 + SELF + SINGLE + + + 25 + PER + + diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SymbolSealData.xsd b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SymbolSealData.xsd new file mode 100644 index 0000000000..8bbfe6308b --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/SymbolSealData.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/items.xsd b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/items.xsd index 7fdde48ccb..7f07c42a10 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/items.xsd +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/xsd/items.xsd @@ -186,6 +186,7 @@ + diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/Config.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/Config.java index d16b65e288..bf398c4d0c 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/Config.java @@ -785,6 +785,8 @@ public class Config public static int PVP_PVP_TIME; public static int MAX_REPUTATION; public static int REPUTATION_INCREASE; + public static int MAX_SYMBOL_SEAL_POINTS; + public static int CONSUME_SYMBOL_SEAL_POINTS; public static IdFactoryType IDFACTORY_TYPE; public static boolean BAD_ID_CHECKING; @@ -1762,6 +1764,8 @@ public class Config ENABLE_VITALITY = Character.getBoolean("EnableVitality", true); STARTING_VITALITY_POINTS = Character.getInt("StartingVitalityPoints", 140000); RAIDBOSS_USE_VITALITY = Character.getBoolean("RaidbossUseVitality", true); + MAX_SYMBOL_SEAL_POINTS = Character.getInt("MaxSymbolSealPoints", 7800); + CONSUME_SYMBOL_SEAL_POINTS = Character.getInt("ConsumeSymbolSealPoints", 1); MAX_BONUS_EXP = Character.getDouble("MaxExpBonus", 0); MAX_BONUS_SP = Character.getDouble("MaxSpBonus", 0); MAX_RUN_SPEED = Character.getInt("MaxRunSpeed", 300); diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SymbolSealData.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SymbolSealData.java new file mode 100644 index 0000000000..71820cff96 --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/data/xml/impl/SymbolSealData.java @@ -0,0 +1,95 @@ +/* + * 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 . + */ +package org.l2jmobius.gameserver.data.xml.impl; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; + +import org.l2jmobius.commons.util.IXmlReader; +import org.l2jmobius.gameserver.model.holders.SymbolSealHolder; +import org.l2jmobius.gameserver.model.skills.Skill; + +/** + * @author NviX + */ +public class SymbolSealData implements IXmlReader +{ + private final Map> _data = new HashMap<>(); + + protected SymbolSealData() + { + load(); + } + + @Override + public void load() + { + parseDatapackFile("data/SymbolSealData.xml"); + + } + + @Override + public void parseDocument(Document doc, File f) + { + for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + { + if ("list".equalsIgnoreCase(n.getNodeName())) + { + for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) + { + if ("class".equalsIgnoreCase(d.getNodeName())) + { + final int classId = parseInteger(d.getAttributes(), "id"); + if (!_data.containsKey(classId)) + { + _data.put(classId, new ArrayList<>()); + } + for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling()) + { + if ("symbol".equalsIgnoreCase(cd.getNodeName())) + { + final int symbolId = parseInteger(cd.getAttributes(), "id"); + final int skillId = parseInteger(cd.getAttributes(), "skillId"); + _data.get(classId).add(new SymbolSealHolder(symbolId, SkillData.getInstance().getSkill(skillId, 1))); + } + } + } + } + } + } + } + + public Skill getSkill(int classId, int symbolId) + { + return _data.get(classId).get(symbolId).getSkill(); + } + + public static SymbolSealData getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final SymbolSealData INSTANCE = new SymbolSealData(); + } +} diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/engines/DocumentBase.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/engines/DocumentBase.java index 97cb61ff9f..204108c2c0 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/engines/DocumentBase.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/engines/DocumentBase.java @@ -108,6 +108,7 @@ import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSiegeSide; import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSouls; import org.l2jmobius.gameserver.model.conditions.ConditionPlayerState; import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSubclass; +import org.l2jmobius.gameserver.model.conditions.ConditionPlayerSymbolSealPoints; import org.l2jmobius.gameserver.model.conditions.ConditionPlayerTransformationId; import org.l2jmobius.gameserver.model.conditions.ConditionPlayerVehicleMounted; import org.l2jmobius.gameserver.model.conditions.ConditionPlayerWeight; @@ -895,6 +896,12 @@ public abstract class DocumentBase cond = joinAnd(cond, new ConditionMinimumVitalityPoints(count)); break; } + case "symbolsealpoints": + { + final int points = Integer.decode(getValue(a.getNodeValue(), template)); + cond = joinAnd(cond, new ConditionPlayerSymbolSealPoints(points)); + break; + } } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Party.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Party.java index 5ae390a948..7103645e59 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Party.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/Party.java @@ -888,6 +888,14 @@ public class Party extends AbstractPlayerGroup { member.updateVitalityPoints(target.getVitalityPoints(member.getLevel(), exp, target.isRaid()), true, false); PcCafePointsManager.getInstance().givePcCafePoint(member, exp); + if (member.getSymbolSealPoints() > 0) + { + member.setSymbolSealPoints(member.getSymbolSealPoints() - Config.CONSUME_SYMBOL_SEAL_POINTS); + if (member.getSymbolSealPoints() == 0) + { + member.removeSymbolSealSkills(); + } + } } } else diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java index 7425c20494..c5d9311f6d 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/Attackable.java @@ -507,6 +507,14 @@ public class Attackable extends Npc { attacker.updateVitalityPoints(getVitalityPoints(attacker.getLevel(), exp, _isRaid), true, false); PcCafePointsManager.getInstance().givePcCafePoint(attacker, exp); + if (attacker.getSymbolSealPoints() > 0) + { + attacker.setSymbolSealPoints(attacker.getSymbolSealPoints() - Config.CONSUME_SYMBOL_SEAL_POINTS); + if (attacker.getSymbolSealPoints() == 0) + { + attacker.removeSymbolSealSkills(); + } + } } } } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 86af8981c1..2af3019050 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -76,6 +76,7 @@ import org.l2jmobius.gameserver.data.xml.impl.RecipeData; import org.l2jmobius.gameserver.data.xml.impl.SendMessageLocalisationData; import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.data.xml.impl.SkillTreesData; +import org.l2jmobius.gameserver.data.xml.impl.SymbolSealData; import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.enums.AdminTeleportType; import org.l2jmobius.gameserver.enums.BroochJewel; @@ -599,6 +600,8 @@ public class PlayerInstance extends Playable private final Map _hennaBaseStats = new ConcurrentHashMap<>(); private final Map> _hennaRemoveSchedules = new ConcurrentHashMap<>(4); + private static final String SYMBOL_POINTS_VAR = "SYMBOL_POINTS"; + /** The Pet of the PlayerInstance */ private PetInstance _pet = null; /** Servitors of the PlayerInstance */ @@ -6733,9 +6736,63 @@ public class PlayerInstance extends Playable return player; } - /** - * @return - */ + public void setSymbolSealPoints(int value) + { + getVariables().set(SYMBOL_POINTS_VAR, Math.min(value, Config.MAX_SYMBOL_SEAL_POINTS)); + } + + public int getSymbolSealPoints() + { + return getVariables().getInt(SYMBOL_POINTS_VAR, 0); + } + + public void removeSymbolSealSkills() + { + final int classId = getClassId().getId(); + if (((classId >= 148) && (classId <= 181)) || (classId == 188) || (classId == 189)) + { + for (int i = 0; i < 3; i++) + { + removeSkill(SymbolSealData.getInstance().getSkill(classId, i)); + } + } + } + + public void updateSymbolSealSkills() + { + final int classId = getClassId().getId(); + if (((classId >= 148) && (classId <= 181)) || (classId == 188) || (classId == 189)) + { + removeSymbolSealSkills(); + if (getSymbolSealPoints() > 0) + { + int usedSlots = 0; + switch (getHennaEmptySlots()) + { + case 0: + { + usedSlots = 3; + break; + } + case 1: + { + usedSlots = 2; + break; + } + case 2: + { + usedSlots = 1; + break; + } + } + for (int i = 0; i < usedSlots; i++) + { + addSkill(SymbolSealData.getInstance().getSkill(classId, i)); + } + } + } + } + public Forum getMail() { if (_forumMail == null) @@ -6752,17 +6809,11 @@ public class PlayerInstance extends Playable return _forumMail; } - /** - * @param forum - */ public void setMail(Forum forum) { _forumMail = forum; } - /** - * @return - */ public Forum getMemo() { if (_forumMemo == null) @@ -6779,9 +6830,6 @@ public class PlayerInstance extends Playable return _forumMemo; } - /** - * @param forum - */ public void setMemo(Forum forum) { _forumMemo = forum; diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/conditions/ConditionPlayerSymbolSealPoints.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/conditions/ConditionPlayerSymbolSealPoints.java new file mode 100644 index 0000000000..4fd1d66dd4 --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/conditions/ConditionPlayerSymbolSealPoints.java @@ -0,0 +1,46 @@ +/* + * 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 . + */ +package org.l2jmobius.gameserver.model.conditions; + +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; +import org.l2jmobius.gameserver.model.items.Item; +import org.l2jmobius.gameserver.model.skills.Skill; + +/** + * @author NviX + */ +public class ConditionPlayerSymbolSealPoints extends Condition +{ + private final int _points; + + /** + * Instantiates a new condition player Symbol Seal points. + * @param points the Symbol Seal Points + */ + public ConditionPlayerSymbolSealPoints(int points) + { + _points = points; + } + + @Override + public boolean testImpl(Creature effector, Creature effected, Skill skill, Item item) + { + PlayerInstance player = effector.getActingPlayer(); + return (player != null) && (player.getSymbolSealPoints() < _points); + } +} diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/SymbolSealHolder.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/SymbolSealHolder.java new file mode 100644 index 0000000000..e78531ae95 --- /dev/null +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/holders/SymbolSealHolder.java @@ -0,0 +1,44 @@ +/* + * 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 . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.skills.Skill; + +/** + * @author NviX + */ +public class SymbolSealHolder +{ + private final int _symbolId; + private final Skill _skill; + + public SymbolSealHolder(int symbolId, Skill skill) + { + _symbolId = symbolId; + _skill = skill; + } + + public int getSymbolId() + { + return _symbolId; + } + + public Skill getSkill() + { + return _skill; + } +} diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 6c86d6fd6a..9f95cd92db 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -612,6 +612,8 @@ public class EnterWorld implements IClientIncomingPacket OfflineTradersTable.onTransaction(player, true, false); } + player.updateSymbolSealSkills(); + player.broadcastUserInfo(); if (BeautyShopData.getInstance().hasBeautyData(player.getRace(), player.getAppearance().getSexType())) diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java index c3800575d8..03268af5c3 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java @@ -98,6 +98,7 @@ public class RequestHennaEquip implements IClientIncomingPacket iu.addModifiedItem(player.getInventory().getAdenaInstance()); player.sendInventoryUpdate(iu); player.sendPacket(new HennaEquipList(player)); + player.updateSymbolSealSkills(); player.sendPacket(SystemMessageId.THE_SYMBOL_HAS_BEEN_ADDED); } else diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java index b3c4919723..3a260aff87 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java @@ -62,6 +62,7 @@ public class RequestHennaRemove implements IClientIncomingPacket if (player.getAdena() >= henna.getCancelFee()) { player.removeHenna(i); + player.updateSymbolSealSkills(); } else { diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java index 8af333ae39..66faa6c31d 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java @@ -324,8 +324,7 @@ public class UserInfo extends AbstractMaskPacket packet.writeD(_player.getFame()); packet.writeD(_player.getRaidbossPoints()); packet.writeC(0x00); // 196 - packet.writeC(0x00); // 196 - packet.writeC(0x00); // 196 + packet.writeH(_player.getSymbolSealPoints()); // Henna Seal Engraving Gauge packet.writeC(0x00); // 196 }