From 5f921952530d6ae255435deff5a74c5f1b2c2447 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sun, 8 Oct 2023 05:29:29 -0700 Subject: [PATCH] Seperate mp from LineupManager for extra lineups --- .../lunarcore/game/player/LineupManager.java | 8 +++-- .../lunarcore/game/player/PlayerLineup.java | 36 ++++++++++++++++++- .../game/scene/entity/EntityProp.java | 2 +- .../recv/HandlerSceneCastSkillCsReq.java | 2 +- 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/player/LineupManager.java b/src/main/java/emu/lunarcore/game/player/LineupManager.java index 9d906f2..72344b8 100644 --- a/src/main/java/emu/lunarcore/game/player/LineupManager.java +++ b/src/main/java/emu/lunarcore/game/player/LineupManager.java @@ -35,12 +35,16 @@ public class LineupManager { this.validate(player); } - public void addMp(int i) { + protected void addMp(int i) { this.mp = Math.min(this.mp + i, GameConstants.MAX_MP); this.getPlayer().sendPacket(new PacketSyncLineupNotify(player.getCurrentLineup())); } - public void removeMp(int i) { + protected void setMp(int i) { + this.mp = i; + } + + protected void removeMp(int i) { this.mp = Math.max(this.mp - i, 0); } diff --git a/src/main/java/emu/lunarcore/game/player/PlayerLineup.java b/src/main/java/emu/lunarcore/game/player/PlayerLineup.java index 20a730f..1858d04 100644 --- a/src/main/java/emu/lunarcore/game/player/PlayerLineup.java +++ b/src/main/java/emu/lunarcore/game/player/PlayerLineup.java @@ -16,6 +16,7 @@ public class PlayerLineup { private transient Player owner; private transient int index; private transient int extraLineupType; + private transient int mp; private String name; private List avatars; @@ -61,6 +62,39 @@ public class PlayerLineup { return getAvatars().size(); } + public void addMp(int i) { + if (this.getExtraLineupType() > 0) { + this.mp = Math.min(this.mp + i, GameConstants.MAX_MP); + this.getOwner().sendPacket(new PacketSyncLineupNotify(this.getOwner().getCurrentLineup())); + } else { + this.getOwner().getLineupManager().addMp(i); + } + } + + public void setMp(int i) { + if (this.getExtraLineupType() > 0) { + this.mp = i; + } else { + this.getOwner().getLineupManager().setMp(i); + } + } + + public void removeMp(int i) { + if (this.getExtraLineupType() > 0) { + this.mp = Math.max(this.mp - i, 0); + } else { + this.getOwner().getLineupManager().removeMp(i); + } + } + + public int getMp() { + if (this.getExtraLineupType() > 0) { + return this.mp; + } else { + return this.getOwner().getLineupManager().getMp(); + } + } + public void heal(int heal) { // Flag to set if at least one avatar in the team has been healed boolean hasHealed = false; @@ -88,7 +122,7 @@ public class PlayerLineup { .setIndex(index) .setName(this.getName()) .setLeaderSlot(this.getOwner().getLineupManager().getCurrentLeader()) - .setMp(this.getOwner().getLineupManager().getMp()) + .setMp(this.getMp()) .setMaxMp(GameConstants.MAX_MP) .setExtraLineupTypeValue(this.getExtraLineupType()); diff --git a/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java b/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java index 914e7ff..a346c43 100644 --- a/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java +++ b/src/main/java/emu/lunarcore/game/scene/entity/EntityProp.java @@ -51,7 +51,7 @@ public class EntityProp implements GameEntity { @Override public void onRemove() { if (excel.isRecoverMp()) { - scene.getPlayer().getLineupManager().addMp(2); + scene.getPlayer().getCurrentLineup().addMp(2); } else if (excel.isRecoverHp()) { scene.getPlayer().getCurrentLineup().heal(2500); } diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerSceneCastSkillCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerSceneCastSkillCsReq.java index dcd3044..c8815b8 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerSceneCastSkillCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerSceneCastSkillCsReq.java @@ -22,7 +22,7 @@ public class HandlerSceneCastSkillCsReq extends PacketHandler { // Check if player casted a maze skill if (req.getSkillIndex() > 0 && session.getPlayer().getScene().getAvatarEntityIds().contains(req.getAttackerId())) { // Spend one skill point - session.getPlayer().getLineupManager().removeMp(1); + session.getPlayer().getCurrentLineup().removeMp(1); session.send(new PacketSceneCastSkillMpUpdateScNotify(req.getAttackedGroupId(), session.getPlayer().getLineupManager().getMp())); // Cast skill effects GameAvatar caster = session.getPlayer().getLineupManager().getCurrentLeaderAvatar();