|
|
|
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
|
|
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
|
|
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
|
|
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
|
|
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
|
|
|
// Magicbane Emulator Project © 2013 - 2022
|
|
|
|
// www.magicbane.com
|
|
|
|
|
|
|
|
|
|
|
|
package engine.devcmd.cmds;
|
|
|
|
|
|
|
|
import engine.Enum.BuildingGroup;
|
|
|
|
import engine.devcmd.AbstractDevCmd;
|
|
|
|
import engine.gameManager.ChatManager;
|
|
|
|
import engine.gameManager.DbManager;
|
|
|
|
import engine.objects.*;
|
|
|
|
import engine.util.StringUtils;
|
|
|
|
import org.pmw.tinylog.Logger;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Summary: Game designer utility command to add or
|
|
|
|
* remove building slot access for contracts
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class SlotNpcCmd extends AbstractDevCmd {
|
|
|
|
|
|
|
|
public SlotNpcCmd() {
|
|
|
|
super("slotnpc");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// AbstractDevCmd Overridden methods
|
|
|
|
|
|
|
|
private static boolean validateUserInput(String[] userInput) {
|
|
|
|
|
|
|
|
int stringIndex;
|
|
|
|
BuildingGroup testGroup;
|
|
|
|
|
|
|
|
testGroup = BuildingGroup.FORGE;
|
|
|
|
|
|
|
|
String commandSet = "onoff";
|
|
|
|
|
|
|
|
// incorrect number of arguments test
|
|
|
|
|
|
|
|
if (userInput.length > 2)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
// Test of toggle argument
|
|
|
|
|
|
|
|
stringIndex = commandSet.indexOf(userInput[1].toLowerCase());
|
|
|
|
|
|
|
|
if (stringIndex == -1)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
// Validate we have a corrent building group name
|
|
|
|
|
|
|
|
for (BuildingGroup group : BuildingGroup.values()) {
|
|
|
|
if (group.name().equals(userInput[0].toUpperCase()))
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void _doCmd(PlayerCharacter pc, String[] args,
|
|
|
|
AbstractGameObject target) {
|
|
|
|
|
|
|
|
Contract contract;
|
|
|
|
BuildingGroup buildingGroup;
|
|
|
|
NPC npc;
|
|
|
|
Mob mob;
|
|
|
|
|
|
|
|
String outString;
|
|
|
|
|
|
|
|
switch (target.getObjectType()) {
|
|
|
|
|
|
|
|
case NPC:
|
|
|
|
npc = (NPC) target;
|
|
|
|
contract = npc.getContract();
|
|
|
|
break;
|
|
|
|
case Mob:
|
|
|
|
mob = (Mob) target;
|
|
|
|
contract = mob.getContract();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
throwbackInfo(pc, "NpcSlot: target must be an NPC");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// User requests list of current groups.
|
|
|
|
|
|
|
|
if (args[0].equalsIgnoreCase("LIST")) {
|
|
|
|
|
|
|
|
outString = "Current: " + contract.getAllowedBuildings();
|
|
|
|
|
|
|
|
throwbackInfo(pc, outString);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (validateUserInput(args) == false) {
|
|
|
|
this.sendUsage(pc);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Extract the building group flag from user input
|
|
|
|
|
|
|
|
buildingGroup = BuildingGroup.valueOf(args[0].toUpperCase());
|
|
|
|
|
|
|
|
switch (args[1].toUpperCase()) {
|
|
|
|
|
|
|
|
case "ON":
|
|
|
|
contract.getAllowedBuildings().add(buildingGroup);
|
|
|
|
|
|
|
|
if (!DbManager.ContractQueries.updateAllowedBuildings(contract, contract.getAllowedBuildings().toLong())) {
|
|
|
|
Logger.error("Failed to update Database for Contract Allowed buildings");
|
|
|
|
ChatManager.chatSystemError(pc, "Failed to update Database for Contract Allowed buildings. " +
|
|
|
|
"Contact A CCR, oh wait, you are a CCR. You're Fubared.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
throwbackInfo(pc, "SlotNpc " + buildingGroup.name() + " added to npc");
|
|
|
|
break;
|
|
|
|
case "OFF":
|
|
|
|
contract.getAllowedBuildings().remove(buildingGroup);
|
|
|
|
if (!DbManager.ContractQueries.updateAllowedBuildings(contract, contract.getAllowedBuildings().toLong())) {
|
|
|
|
Logger.error("Failed to update Database for Contract Allowed buildings");
|
|
|
|
ChatManager.chatSystemError(pc, "Failed to update Database for Contract Allowed buildings. " +
|
|
|
|
"Contact A CCR, oh wait, you are a CCR. You're Fubared.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
throwbackInfo(pc, "SlotNpc " + buildingGroup.name() + " removed from npc");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected String _getHelpString() {
|
|
|
|
return "Sets a building slot on a targeted npc";
|
|
|
|
}
|
|
|
|
|
|
|
|
// Class methods
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected String _getUsageString() {
|
|
|
|
String usage = "/npcslot [BuildingType] on-off \n";
|
|
|
|
|
|
|
|
for (BuildingGroup group : BuildingGroup.values()) {
|
|
|
|
usage += group.name() + ' ';
|
|
|
|
}
|
|
|
|
|
|
|
|
usage = StringUtils.wordWrap(usage, 30);
|
|
|
|
|
|
|
|
return usage;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|