Re-add spawn command

This commit is contained in:
Melledy
2023-10-09 03:38:22 -07:00
parent 0d9730c498
commit 76553a3421
3 changed files with 98 additions and 6 deletions

View File

@@ -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<GameItem> 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);
}
}

View File

@@ -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");
}
}

View File

@@ -6,4 +6,5 @@ import lombok.Getter;
public class MonsterInfo extends ObjectInfo {
private int NPCMonsterID;
private int EventID;
private int FarmElementID;
}