From d4d6fc9311ec5b08595d072ce408346b804bd23b Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Mon, 2 Oct 2023 05:51:53 -0700 Subject: [PATCH] Fix avatars having 0 hp after retreating from a battle --- .../lunarcore/game/battle/BattleService.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/battle/BattleService.java b/src/main/java/emu/lunarcore/game/battle/BattleService.java index fca3ef2..fd49fbf 100644 --- a/src/main/java/emu/lunarcore/game/battle/BattleService.java +++ b/src/main/java/emu/lunarcore/game/battle/BattleService.java @@ -186,6 +186,8 @@ public class BattleService extends BaseGameService { // Get battle object and setup variables Battle battle = player.getBattle(); int minimumHp = 0; + + boolean updateStatus = true; boolean teleportToAnchor = false; // Handle result @@ -203,28 +205,32 @@ public class BattleService extends BaseGameService { } case BATTLE_END_QUIT -> { teleportToAnchor = true; + updateStatus = false; } default -> { - + updateStatus = false; } } - // Set health/energy for player avatars - for (var battleAvatar : battleAvatars) { - GameAvatar avatar = player.getAvatarById(battleAvatar.getId()); - if (avatar == null) continue; + // Check if avatar hp/sp should be updated after a battle + if (updateStatus) { + // Set health/energy for player avatars + for (var battleAvatar : battleAvatars) { + GameAvatar avatar = player.getAvatarById(battleAvatar.getId()); + if (avatar == null) continue; - AvatarProperty prop = battleAvatar.getAvatarStatus(); - int currentHp = (int) Math.round((prop.getLeftHp() / prop.getMaxHp()) * 100); - int currentSp = (int) prop.getLeftSp() * 100; + AvatarProperty prop = battleAvatar.getAvatarStatus(); + int currentHp = (int) Math.round((prop.getLeftHp() / prop.getMaxHp()) * 100); + int currentSp = (int) prop.getLeftSp() * 100; - avatar.setCurrentHp(Math.max(currentHp, minimumHp)); - avatar.setCurrentSp(Math.max(currentSp, 0)); - avatar.save(); + avatar.setCurrentHp(Math.max(currentHp, minimumHp)); + avatar.setCurrentSp(Math.max(currentSp, 0)); + avatar.save(); + } + + // Sync with player + player.sendPacket(new PacketSyncLineupNotify(battle.getLineup())); } - - // Sync with player - player.sendPacket(new PacketSyncLineupNotify(battle.getLineup())); // Teleport to anchor if player has lost/retreated. On official servers, the player party is teleported to the nearest anchor. if (teleportToAnchor) {