From b64c9cf98e415970a096dfd7a5ec7103eaf2ecd3 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 27 Nov 2020 07:31:36 +0000 Subject: [PATCH] Properly display death point values. Thanks to Mode. --- .../gameserver/enums/StatusUpdateType.java | 5 +++- .../gameserver/model/actor/Creature.java | 4 +++ .../model/actor/instance/PlayerInstance.java | 26 ++++++++++++++----- .../network/clientpackets/EnterWorld.java | 8 ++++++ .../network/serverpackets/StatusUpdate.java | 1 + 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/StatusUpdateType.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/StatusUpdateType.java index a5b06e478c..f3c785c01c 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/StatusUpdateType.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/StatusUpdateType.java @@ -52,7 +52,10 @@ public enum StatusUpdateType REPUTATION(0x1B, creature -> creature.isPlayer() ? creature.getActingPlayer().getReputation() : 0), CUR_CP(0x21, creature -> (int) creature.getCurrentCp()), - MAX_CP(0x22, Creature::getMaxCp); + MAX_CP(0x22, Creature::getMaxCp), + + CUR_DP(0x28, creature -> creature.isPlayer() ? creature.getActingPlayer().getDeathPoints() : 0), + MAX_DP(0x29, creature -> creature.isPlayer() ? creature.getActingPlayer().getMaxDeathPoints() : 0); private int _clientId; private Function _valueSupplier; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java index 904203f80d..66f06b61e8 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -5408,6 +5408,10 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe if ((oldValue == null) || (oldValue != newValue)) { su.addUpdate(type, newValue); + if ((type == StatusUpdateType.MAX_DP) && isPlayer()) + { + su.addUpdate(StatusUpdateType.CUR_DP, getActingPlayer().getDeathPoints()); + } return newValue; } return oldValue; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index bd663bb624..2809a4fa7b 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -677,6 +677,7 @@ public class PlayerInstance extends Playable private final static int DEATH_POINTS_PASSIVE = 45352; private final static int DEVASTATING_MIND = 45300; private int _deathPoints = 0; + private int _maxDeathPoints = 0; // WorldPosition used by TARGET_SIGNET_GROUND private Location _currentSkillWorldPosition; @@ -11317,30 +11318,34 @@ public class PlayerInstance extends Playable return _deathPoints; } + public int getMaxDeathPoints() + { + return _maxDeathPoints; + } + public void setDeathPoints(int value) { - // Find current max points. - int maxPoints = 0; + // Check current death points passive level. switch (getAffectedSkillLevel(DEATH_POINTS_PASSIVE)) { case 1: { - maxPoints = 500; + _maxDeathPoints = 500; break; } case 2: { - maxPoints = 700; + _maxDeathPoints = 700; break; } case 3: { - maxPoints = 1000; + _maxDeathPoints = 1000; break; } } // Set current points. - _deathPoints = Math.min(maxPoints, Math.max(0, value)); + _deathPoints = Math.min(_maxDeathPoints, Math.max(0, value)); // Apply devastating mind. final int expectedLevel = _deathPoints / 100; if (expectedLevel > 0) @@ -11355,6 +11360,11 @@ public class PlayerInstance extends Playable { getEffectList().stopSkillEffects(true, DEVASTATING_MIND); } + // Send StatusUpdate. + final StatusUpdate su = new StatusUpdate(this); + computeStatusUpdate(su, StatusUpdateType.MAX_DP); + computeStatusUpdate(su, StatusUpdateType.CUR_DP); + sendPacket(su); } @Override @@ -13920,6 +13930,10 @@ public class PlayerInstance extends Playable addStatusUpdateValue(StatusUpdateType.LEVEL); addStatusUpdateValue(StatusUpdateType.MAX_CP); addStatusUpdateValue(StatusUpdateType.CUR_CP); + if (isPlayer() && (getActingPlayer().getClassId().getId() > 195)) + { + addStatusUpdateValue(StatusUpdateType.CUR_DP); + } } public TrainingHolder getTraingCampInfo() diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 6faf6b0adc..d6de28a4bd 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -648,6 +648,14 @@ public class EnterWorld implements IClientIncomingPacket player.updateAbnormalVisualEffects(); } + // Death Knight death points init. + if (player.getClassId().getId() > 195) + { + // Send twice. + player.setDeathPoints(500); + player.setDeathPoints(0); // TODO: Store death point values? + } + if (Config.ENABLE_ATTENDANCE_REWARDS) { ThreadPool.schedule(() -> diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/StatusUpdate.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/StatusUpdate.java index 928b54aa48..c1a90dbcf0 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/StatusUpdate.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/StatusUpdate.java @@ -54,6 +54,7 @@ public class StatusUpdate implements IClientOutgoingPacket case CUR_HP: case CUR_MP: case CUR_CP: + case CUR_DP: { _isVisible = true; }