package engine.devcmd.cmds; import engine.Enum.DbObjectType; import engine.Enum.GameObjectType; import engine.devcmd.AbstractDevCmd; import engine.gameManager.DbManager; import engine.objects.*; /** * @author Dev command to set the owner of targeted building. * Argument is a valid guild UID */ public class SetOwnerCmd extends AbstractDevCmd { Building _targetBuilding = null; DbObjectType _newOwnerType; AbstractCharacter outOwner; public SetOwnerCmd() { super("setowner"); } @Override protected void _doCmd(PlayerCharacter pcSender, String[] args, AbstractGameObject target) { if (validateUserInput(pcSender, target, args) == false) { this.sendUsage(pcSender); return; } // Valid arguments, attempt to set owner of Building. _targetBuilding = getTargetAsBuilding(pcSender); // if it's a tol change ownership of the city if (_targetBuilding.getBlueprint() != null && _targetBuilding.getBlueprint().getBuildingGroup().equals(engine.Enum.BuildingGroup.TOL)) { City city = _targetBuilding.getCity(); if (city != null) { city.claim(outOwner); return; } } _targetBuilding.setOwner(outOwner); DbManager.BuildingQueries.SET_PROPERTY(_targetBuilding, "ownerUUID", args[0]); _targetBuilding.refreshGuild(); } @Override protected String _getUsageString() { return "' /setowner [UID]"; } @Override protected String _getHelpString() { return "Assigns new owner to building"; } private boolean validateUserInput(PlayerCharacter pcSender, AbstractGameObject currTarget, String[] userInput) { // Incorrect number of arguments if (userInput.length != 1) return false; // No target if (currTarget == null) { throwbackError(pcSender, "Requires a Building to be targeted"); return false; } // Target must be an Building if (currTarget.getObjectType() != GameObjectType.Building) { throwbackError(pcSender, "Invalid target. Must be a Building"); return false; } // Argument must parse to a long. try { Long.parseLong(userInput[0]); } catch (NumberFormatException | NullPointerException e) { return false; } // Argument must return a valid NPC or PlayerCharacter _newOwnerType = DbManager.BuildingQueries.GET_UID_ENUM(Long.parseLong(userInput[0])); switch (_newOwnerType) { case NPC: outOwner = (AbstractCharacter) DbManager.getObject(GameObjectType.NPC, Integer.parseInt(userInput[0])); break; case CHARACTER: outOwner = (AbstractCharacter) DbManager.getObject(GameObjectType.PlayerCharacter, Integer.parseInt(userInput[0])); break; } if (outOwner == null) { throwbackError(pcSender, "Invalid Owner UID"); return false; } return true; } }