mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-14 14:24:37 +01:00
Re-add spawn command
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,4 +6,5 @@ import lombok.Getter;
|
||||
public class MonsterInfo extends ObjectInfo {
|
||||
private int NPCMonsterID;
|
||||
private int EventID;
|
||||
private int FarmElementID;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user