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.
112 lines
3.2 KiB
112 lines
3.2 KiB
3 years ago
|
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||
|
// Magicbane Emulator Project © 2013 - 2022
|
||
|
// www.magicbane.com
|
||
|
|
||
|
|
||
|
package engine.devcmd.cmds;
|
||
|
|
||
|
import engine.Enum.GameObjectType;
|
||
|
import engine.InterestManagement.WorldGrid;
|
||
|
import engine.devcmd.AbstractDevCmd;
|
||
|
import engine.gameManager.BuildingManager;
|
||
|
import engine.gameManager.ChatManager;
|
||
|
import engine.gameManager.DbManager;
|
||
|
import engine.gameManager.ZoneManager;
|
||
|
import engine.objects.*;
|
||
|
import org.pmw.tinylog.Logger;
|
||
|
|
||
|
/**
|
||
|
* @author Eighty
|
||
|
*
|
||
|
*/
|
||
|
public class AddNPCCmd extends AbstractDevCmd {
|
||
|
|
||
|
public AddNPCCmd() {
|
||
|
super("npc");
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void _doCmd(PlayerCharacter pc, String[] words,
|
||
|
AbstractGameObject target) {
|
||
|
int contractID;
|
||
|
String name = "";
|
||
|
int level = 0;
|
||
|
|
||
|
if (words.length < 2) {
|
||
|
this.sendUsage(pc);
|
||
|
return;
|
||
|
}
|
||
|
try {
|
||
|
contractID = Integer.parseInt(words[0]);
|
||
|
level = Integer.parseInt(words[1]);
|
||
|
|
||
|
for (int i = 2; i < words.length; i++) {
|
||
|
name += words[i];
|
||
|
if (i + 1 < words.length)
|
||
|
name += "";
|
||
|
}
|
||
|
|
||
|
} catch (NumberFormatException e) {
|
||
|
throwbackError(pc,
|
||
|
"Failed to parse supplied contractID or level to an Integer.");
|
||
|
return; // NaN
|
||
|
}
|
||
|
|
||
|
Contract contract = DbManager.ContractQueries.GET_CONTRACT(contractID);
|
||
|
|
||
|
if (contract == null || level < 1 || level > 75) {
|
||
|
throwbackError(pc,
|
||
|
"Invalid addNPC Command. Need contract ID, and level");
|
||
|
return; // NaN
|
||
|
}
|
||
|
|
||
|
// Pick a random name
|
||
|
if (name.isEmpty())
|
||
|
name = NPC.getPirateName(contract.getMobbaseID());
|
||
|
|
||
|
Zone zone = ZoneManager.findSmallestZone(pc.getLoc());
|
||
|
|
||
|
if (zone == null) {
|
||
|
throwbackError(pc, "Failed to find zone to place npc in.");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (target != null)
|
||
|
if (target.getObjectType() == GameObjectType.Building){
|
||
|
Building parentBuilding = (Building)target;
|
||
|
BuildingManager.addHirelingForWorld(parentBuilding, pc, parentBuilding.getLoc(), parentBuilding.getParentZone(), contract, level);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
NPC npc = NPC.createNPC(name, contractID,
|
||
|
pc.getLoc(), null, true, zone, (short)level, true, null);
|
||
|
|
||
|
if (npc != null) {
|
||
|
WorldGrid.addObject(npc, pc);
|
||
|
ChatManager.chatSayInfo(pc,
|
||
|
"NPC with ID " + npc.getDBID() + " added");
|
||
|
this.setResult(String.valueOf(npc.getDBID()));
|
||
|
} else {
|
||
|
throwbackError(pc, "Failed to create npc of contract type "
|
||
|
+ contractID);
|
||
|
Logger.error(
|
||
|
"Failed to create npc of contract type " + contractID);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected String _getHelpString() {
|
||
|
return "Creates an NPC of type 'npcID' at the location your character is standing";
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected String _getUsageString() {
|
||
|
return "' /npc npcID level name'";
|
||
|
}
|
||
|
|
||
|
}
|