package admincommands; import com.aionemu.gameserver.model.base.Base; import com.aionemu.gameserver.model.base.BaseOccupier; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.services.BaseService; import com.aionemu.gameserver.spawnengine.SpawnHandlerType; import com.aionemu.gameserver.utils.PacketSendUtility; import com.aionemu.gameserver.utils.chathandlers.AdminCommand; public class BaseCommand extends AdminCommand { private static final String COMMAND_LIST = "list"; private static final String COMMAND_START = "start"; private static final String COMMAND_STOP = "stop"; private static final String COMMAND_CAPTURE = "capture"; private static final String COMMAND_ASSAULT = "assault"; public BaseCommand() { super("base"); // @formatter:off setSyntaxInfo( " - Lists all available base locations with their respective occupier", " [id] [occupier] - Captures the specified base with the specified new occupier.", " [id] - Spawns attacker NPCs for the specified base if available." ); // @formatter:on } @Override public void execute(Player player, String... params) { if (params.length == 0) { sendInfo(player, "Not enough parameters."); return; } switch (params[0].toLowerCase()) { case COMMAND_LIST -> showBaseLocationList(player, params); case COMMAND_START -> startBase(player, params); case COMMAND_STOP -> stopBase(player, params); case COMMAND_CAPTURE -> captureBase(player, params); case COMMAND_ASSAULT -> assaultBase(player, params); } } protected void showBaseLocationList(Player player, String[] params) { BaseService.getInstance().getBaseLocations().values() .forEach(loc -> PacketSendUtility.sendMessage(player, "Base: %d belongs to %s".formatted(loc.getId(), loc.getOccupier()))); } private void startBase(Player player, String[] params) { int baseId = parseBaseId(player, params); if (baseId == 0) return; if (BaseService.getInstance().isActive(baseId)) { sendInfo(player, "Unnecessary, it is already active. [id=%d]".formatted(baseId)); return; } BaseService.getInstance().start(baseId); } private void stopBase(Player player, String[] params) { int baseId = parseBaseId(player, params); if (baseId == 0) return; if (!BaseService.getInstance().isActive(baseId)) { sendInfo(player, "Unnecessary, it is not active. [id=%d]".formatted(baseId)); return; } BaseService.getInstance().stop(baseId); } protected void captureBase(Player player, String[] params) { int baseId = parseBaseId(player, params); if (baseId == 0) return; if (!BaseService.getInstance().isActive(baseId)) { sendInfo(player, "[id=%d] cannot only be captured if it is active".formatted(baseId)); return; } BaseOccupier occupier = getOccupier(params[2].toUpperCase()); if (occupier == null) { sendInfo(player, params[2] + " is not a valid occupier"); return; } BaseService.getInstance().capture(baseId, occupier); } protected void assaultBase(Player player, String[] params) { int baseId = parseBaseId(player, params); if (baseId == 0) return; if (!BaseService.getInstance().isActive(baseId)) { sendInfo(player, "[id=%d] cannot only be assaulted if it is active".formatted(baseId)); return; } BaseOccupier occupier = getOccupier(params[2].toUpperCase()); if (occupier == null) { sendInfo(player, params[2] + " is not a valid occupier"); return; } // assault Base base = BaseService.getInstance().getActiveBase(baseId); if (base != null) { if (base.isUnderAssault()) PacketSendUtility.sendMessage(player, "Assault is already active!"); else base.spawnBySpawnHandler(SpawnHandlerType.ATTACKER, occupier); } } private int parseBaseId(Player admin, String[] params) { if (params.length < 2) { sendInfo(admin, "Not enough parameters"); return 0; } int baseId; try { baseId = Integer.parseInt(params[1]); } catch (NumberFormatException e) { sendInfo(admin, "This baseId is not a number."); return 0; } if (!BaseService.getInstance().getBaseLocations().containsKey(baseId)) { sendInfo(admin, "This baseId does not exist."); return 0; } return baseId; } private BaseOccupier getOccupier(String param) { try { return BaseOccupier.valueOf(param); } catch (IllegalArgumentException e) { return null; } } }