From 76553a34213d5478bf19f47a480153226d7f4e6a Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Mon, 9 Oct 2023 03:38:22 -0700 Subject: [PATCH] Re-add spawn command --- .../command/commands/GiveCommand.java | 11 +-- .../command/commands/SpawnCommand.java | 92 +++++++++++++++++++ .../lunarcore/data/config/MonsterInfo.java | 1 + 3 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 src/main/java/emu/lunarcore/command/commands/SpawnCommand.java diff --git a/src/main/java/emu/lunarcore/command/commands/GiveCommand.java b/src/main/java/emu/lunarcore/command/commands/GiveCommand.java index f29db5f..d681dcc 100644 --- a/src/main/java/emu/lunarcore/command/commands/GiveCommand.java +++ b/src/main/java/emu/lunarcore/command/commands/GiveCommand.java @@ -21,12 +21,11 @@ public class GiveCommand implements CommandHandler { if (args.getTarget() == null) { this.sendMessage(sender, "Error: Targeted player not found or offline"); return; - } else if (args.getCount() <= 0) { - this.sendMessage(sender, "Error: Amount must be higher than 0"); - return; } int itemId = Utils.parseSafeInt(args.get(0)); + int amount = Math.max(args.getCount(), 1); + ItemExcel itemData = GameData.getItemExcelMap().get(itemId); if (itemData == null) { @@ -36,16 +35,16 @@ public class GiveCommand implements CommandHandler { if (itemData.isEquippable()) { List items = new LinkedList<>(); - for (int i = 0; i < args.getCount(); i++) { + for (int i = 0; i < amount; i++) { items.add(new GameItem(itemData)); } args.getTarget().getInventory().addItems(items); } else { - GameItem item = new GameItem(itemData, args.getCount()); + GameItem item = new GameItem(itemData, amount); args.getTarget().getInventory().addItem(item); } - args.getTarget().sendMessage("Giving " + args.getTarget().getName() + " " + args.getCount() + " of " + itemId); + args.getTarget().sendMessage("Giving " + args.getTarget().getName() + " " + amount + " of " + itemId); } } diff --git a/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java b/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java new file mode 100644 index 0000000..923f896 --- /dev/null +++ b/src/main/java/emu/lunarcore/command/commands/SpawnCommand.java @@ -0,0 +1,92 @@ +package emu.lunarcore.command.commands; + +import emu.lunarcore.command.Command; +import emu.lunarcore.command.CommandArgs; +import emu.lunarcore.command.CommandHandler; +import emu.lunarcore.data.GameData; +import emu.lunarcore.data.config.MonsterInfo; +import emu.lunarcore.data.excel.NpcMonsterExcel; +import emu.lunarcore.game.player.Player; +import emu.lunarcore.game.scene.entity.EntityMonster; +import emu.lunarcore.util.Position; +import emu.lunarcore.util.Utils; + +@Command(label = "spawn") +public class SpawnCommand implements CommandHandler { + + @Override + public void execute(Player sender, CommandArgs args) { + // Check target + if (args.getTarget() == null) { + this.sendMessage(sender, "Error: Targeted player not found or offline"); + return; + } + + Player target = args.getTarget(); + + if (target.getScene() == null) { + this.sendMessage(sender, "Error: Target is not in scene"); + return; + } + + // Get id + int id = Utils.parseSafeInt(args.get(0)); + int stage = Math.max(Utils.parseSafeInt(args.get(1)), 1); + int amount = Math.max(args.getCount(), 1); + int radius = Math.max(args.getRank(), 5) * 1000; + + // Spawn monster + NpcMonsterExcel monsterExcel = GameData.getNpcMonsterExcelMap().get(id); + if (monsterExcel != null) { + // Try to find monster config + int groupId = 0; + MonsterInfo monsterInfo = null; + + for (var group : target.getScene().getFloorInfo().getGroups().values()) { + if (group.getMonsterList().size() == 0) continue; + + for (var m : group.getMonsterList()) { + if (m.getFarmElementID() == 0) { + groupId = group.getId(); + monsterInfo = group.getMonsterList().get(0); + break; + } + } + + if (monsterInfo != null) { + break; + } + } + + if (monsterInfo == null) { + this.sendMessage(sender, "Error: No monster config found in this scene"); + return; + } + + // Spawn monster + for (int i = 0; i < amount; i++) { + Position pos = target.getPos().clone().add(Utils.randomRange(-radius, radius), 0, Utils.randomRange(-radius, radius)); + EntityMonster monster = new EntityMonster(target.getScene(), monsterExcel, pos); + monster.setGroupId(groupId); + monster.setInstId(monsterInfo.getID()); + monster.setEventId(monsterInfo.getEventID()); + monster.setOverrideStageId(stage); + + target.getScene().addEntity(monster, true); + } + + this.sendMessage(sender, "Spawning " + amount + " monsters"); + return; + } + + /* + PropExcel propExcel = GameData.getPropExcelMap().get(id); + if (propExcel != null) { + return; + } + */ + + this.sendMessage(sender, "Error: Invalid id"); + } + +} diff --git a/src/main/java/emu/lunarcore/data/config/MonsterInfo.java b/src/main/java/emu/lunarcore/data/config/MonsterInfo.java index db3bb7e..05e119c 100644 --- a/src/main/java/emu/lunarcore/data/config/MonsterInfo.java +++ b/src/main/java/emu/lunarcore/data/config/MonsterInfo.java @@ -6,4 +6,5 @@ import lombok.Getter; public class MonsterInfo extends ObjectInfo { private int NPCMonsterID; private int EventID; + private int FarmElementID; }