From c68fcc96c6a9345f0f12e0820cdfae4d38d543f7 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Fri, 1 Dec 2023 04:59:56 -0800 Subject: [PATCH] Add optional level param to `/spawn` Doesnt work for all battle stages yet --- .../emu/lunarcore/command/commands/SpawnCommand.java | 6 +++++- .../java/emu/lunarcore/game/battle/BattleService.java | 10 +++++++++- .../emu/lunarcore/game/scene/entity/EntityMonster.java | 5 +++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java b/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java index 8bae1e8..e83e967 100644 --- a/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java +++ b/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java @@ -16,7 +16,7 @@ import emu.lunarcore.game.scene.entity.EntityProp; import emu.lunarcore.util.Position; import emu.lunarcore.util.Utils; -@Command(label = "spawn", permission = "player.spawn", requireTarget = true, desc = "/spawn [monster/prop id] x[amount] s[stage id]. Spawns a monster or prop near the targeted player.") +@Command(label = "spawn", permission = "player.spawn", requireTarget = true, desc = "/spawn [monster/prop id] [stage id] x[amount] lv[level] r[radius]. Spawns a monster or prop near the targeted player.") public class SpawnCommand implements CommandHandler { @Override @@ -68,6 +68,10 @@ public class SpawnCommand implements CommandHandler { monster.setEventId(monsterInfo.getEventID()); monster.setOverrideStageId(stage); + if (args.getLevel() > 0) { + monster.setOverrideLevel(Math.min(args.getLevel(), 100)); + } + target.getScene().addEntity(monster, true); } diff --git a/src/main/java/emu/lunarcore/game/battle/BattleService.java b/src/main/java/emu/lunarcore/game/battle/BattleService.java index 8e771d5..951f21b 100644 --- a/src/main/java/emu/lunarcore/game/battle/BattleService.java +++ b/src/main/java/emu/lunarcore/game/battle/BattleService.java @@ -106,7 +106,15 @@ public class BattleService extends BaseGameService { // Create battle and add npc monsters to it Battle battle = new Battle(player, player.getLineupManager().getCurrentLineup(), stages); - battle.getNpcMonsters().addAll(monsters); + + // Add npc monsters + for (var npcMonster : monsters) { + battle.getNpcMonsters().add(npcMonster); + + if (npcMonster.getOverrideLevel() > 0) { + battle.setLevelOverride(npcMonster.getOverrideLevel()); + } + } // Add buffs to battle if (isPlayerCaster) { diff --git a/src/main/java/emu/lunarcore/game/scene/entity/EntityMonster.java b/src/main/java/emu/lunarcore/game/scene/entity/EntityMonster.java index 9904140..5d4953b 100644 --- a/src/main/java/emu/lunarcore/game/scene/entity/EntityMonster.java +++ b/src/main/java/emu/lunarcore/game/scene/entity/EntityMonster.java @@ -14,19 +14,20 @@ import lombok.Setter; @Getter public class EntityMonster implements GameEntity { + @Setter private NpcMonsterExcel excel; @Setter private int entityId; @Setter private int worldLevel; @Setter private int groupId; @Setter private int instId; @Setter private int eventId; - @Setter private int overrideStageId; - @Setter private NpcMonsterExcel excel; private final Scene scene; private final Position pos; private final Position rot; private int farmElementId; + @Setter private int overrideStageId; + @Setter private int overrideLevel; public EntityMonster(Scene scene, NpcMonsterExcel excel, GroupInfo group, MonsterInfo monsterInfo) { this.scene = scene;