From a7173bad0009c319357262f5b9a2451687011f2f Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Mon, 16 Oct 2023 08:10:24 -0700 Subject: [PATCH] Set starting health and energy for avatars before starting a challenge --- .../game/challenge/ChallengeData.java | 10 +++------- .../game/challenge/ChallengeManager.java | 20 ++++++++++++------- .../lunarcore/game/player/PlayerLineup.java | 10 ++++++++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/challenge/ChallengeData.java b/src/main/java/emu/lunarcore/game/challenge/ChallengeData.java index f4d185e..007abe9 100644 --- a/src/main/java/emu/lunarcore/game/challenge/ChallengeData.java +++ b/src/main/java/emu/lunarcore/game/challenge/ChallengeData.java @@ -5,7 +5,6 @@ import emu.lunarcore.data.config.GroupInfo; import emu.lunarcore.data.config.MonsterInfo; import emu.lunarcore.data.excel.ChallengeExcel; import emu.lunarcore.data.excel.NpcMonsterExcel; -import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.battle.Battle; import emu.lunarcore.game.player.Player; import emu.lunarcore.game.scene.Scene; @@ -124,14 +123,11 @@ public class ChallengeData { public void onBattleFinish(Battle battle, BattleEndStatus result, BattleStatistics stats) { if (result == BattleEndStatus.BATTLE_END_WIN) { // Check if any avatar in the lineup has died - for (int avatarId : player.getCurrentLineup().getAvatars()) { - GameAvatar avatar = player.getAvatarById(avatarId); - if (avatar == null) continue; - + player.getCurrentLineup().forEachAvatar(avatar -> { if (!avatar.isAlive()) { - this.hasAvatarDied = true; + hasAvatarDied = true; } - } + }); // Get monster count in stage long monsters = player.getScene().getEntities().values().stream().filter(e -> e instanceof EntityMonster).count(); diff --git a/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java b/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java index eac9ac3..db40b1a 100644 --- a/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java +++ b/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java @@ -5,7 +5,6 @@ import java.util.stream.Stream; import emu.lunarcore.LunarRail; import emu.lunarcore.data.GameData; import emu.lunarcore.data.excel.ChallengeExcel; -import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.player.BasePlayerManager; import emu.lunarcore.game.player.Player; import emu.lunarcore.game.player.PlayerLineup; @@ -34,20 +33,27 @@ public class ChallengeManager extends BasePlayerManager { // Sanity check lineups if (excel.getStageNum() >= 1) { + // Get lineup PlayerLineup lineup = getPlayer().getLineupManager().getLineupByIndex(0, ExtraLineupType.LINEUP_CHALLENGE_VALUE); // Make sure this lineup has avatars set - if (lineup.getAvatars().size() == 0) { - return; - } + if (lineup.getAvatars().size() == 0) return; + // Reset hp/sp + lineup.forEachAvatar(avatar -> { + avatar.setCurrentHp(10000); + avatar.setCurrentSp(avatar.getMaxSp() / 2); + }); // Set technique points lineup.setMp(5); } if (excel.getStageNum() >= 2) { PlayerLineup lineup = getPlayer().getLineupManager().getLineupByIndex(0, ExtraLineupType.LINEUP_CHALLENGE_2_VALUE); // Make sure this lineup has avatars set - if (lineup.getAvatars().size() == 0) { - return; - } + if (lineup.getAvatars().size() == 0) return; + // Reset hp/sp + lineup.forEachAvatar(avatar -> { + avatar.setCurrentHp(10000); + avatar.setCurrentSp(avatar.getMaxSp() / 2); + }); // Set technique points lineup.setMp(5); } diff --git a/src/main/java/emu/lunarcore/game/player/PlayerLineup.java b/src/main/java/emu/lunarcore/game/player/PlayerLineup.java index 025bf9d..1c39bd6 100644 --- a/src/main/java/emu/lunarcore/game/player/PlayerLineup.java +++ b/src/main/java/emu/lunarcore/game/player/PlayerLineup.java @@ -2,6 +2,7 @@ package emu.lunarcore.game.player; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import dev.morphia.annotations.Entity; import emu.lunarcore.GameConstants; @@ -120,6 +121,15 @@ public class PlayerLineup { getOwner().sendPacket(new PacketSyncLineupNotify(this)); } } + + public void forEachAvatar(Consumer consumer) { + for (int avatarId : this.getAvatars()) { + GameAvatar avatar = this.getOwner().getAvatarById(avatarId); + if (avatar == null) continue; + + consumer.accept(avatar); + } + } public LineupInfo toProto() { var proto = LineupInfo.newInstance()