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.
159 lines
4.9 KiB
159 lines
4.9 KiB
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . |
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· |
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ |
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ |
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ |
|
// 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; |
|
} |
|
|
|
}
|
|
|