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
}