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) {
|
if (args.getTarget() == null) {
|
||||||
this.sendMessage(sender, "Error: Targeted player not found or offline");
|
this.sendMessage(sender, "Error: Targeted player not found or offline");
|
||||||
return;
|
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 itemId = Utils.parseSafeInt(args.get(0));
|
||||||
|
int amount = Math.max(args.getCount(), 1);
|
||||||
|
|
||||||
ItemExcel itemData = GameData.getItemExcelMap().get(itemId);
|
ItemExcel itemData = GameData.getItemExcelMap().get(itemId);
|
||||||
|
|
||||||
if (itemData == null) {
|
if (itemData == null) {
|
||||||
@@ -36,16 +35,16 @@ public class GiveCommand implements CommandHandler {
|
|||||||
|
|
||||||
if (itemData.isEquippable()) {
|
if (itemData.isEquippable()) {
|
||||||
List<GameItem> items = new LinkedList<>();
|
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));
|
items.add(new GameItem(itemData));
|
||||||
}
|
}
|
||||||
args.getTarget().getInventory().addItems(items);
|
args.getTarget().getInventory().addItems(items);
|
||||||
} else {
|
} else {
|
||||||
GameItem item = new GameItem(itemData, args.getCount());
|
GameItem item = new GameItem(itemData, amount);
|
||||||
args.getTarget().getInventory().addItem(item);
|
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 {
|
public class MonsterInfo extends ObjectInfo {
|
||||||
private int NPCMonsterID;
|
private int NPCMonsterID;
|
||||||
private int EventID;
|
private int EventID;
|
||||||
|
private int FarmElementID;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user