forked from MagicBane/Server
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.3 KiB
118 lines
3.3 KiB
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; |
|
} |
|
|
|
}
|
|
|