|
|
|
package engine.devcmd.cmds;
|
|
|
|
|
|
|
|
import engine.InterestManagement.WorldGrid;
|
|
|
|
import engine.devcmd.AbstractDevCmd;
|
|
|
|
import engine.gameManager.DbManager;
|
|
|
|
import engine.gameManager.ZoneManager;
|
|
|
|
import engine.math.Vector3fImmutable;
|
|
|
|
import engine.objects.*;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Dev command to move mobile and it's spawn location
|
|
|
|
* to the player's current location
|
|
|
|
*/
|
|
|
|
public class PullCmd extends AbstractDevCmd {
|
|
|
|
|
|
|
|
public PullCmd() {
|
|
|
|
super("pull");
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void MoveMobile(Mob targetMobile, PlayerCharacter pcSender, Vector3fImmutable newLoc, Zone serverZone) {
|
|
|
|
|
|
|
|
Vector3fImmutable localCoords;
|
|
|
|
|
|
|
|
localCoords = ZoneManager.worldToLocal(newLoc, serverZone);
|
|
|
|
|
|
|
|
DbManager.MobQueries.MOVE_MOB(targetMobile.getObjectUUID(), serverZone.getObjectUUID(), localCoords.x, localCoords.y, localCoords.z);
|
|
|
|
targetMobile.setBindLoc(newLoc);
|
|
|
|
targetMobile.setLoc(newLoc);
|
|
|
|
targetMobile.refresh();
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void MoveBuilding(Building targetBuilding, PlayerCharacter pcSender, Vector3fImmutable newLoc, Zone serverZone) {
|
|
|
|
|
|
|
|
Vector3fImmutable localCoords;
|
|
|
|
|
|
|
|
localCoords = ZoneManager.worldToLocal(newLoc, serverZone);
|
|
|
|
|
|
|
|
DbManager.BuildingQueries.MOVE_BUILDING(targetBuilding.getObjectUUID(), serverZone.getObjectUUID(), localCoords.x, localCoords.y, localCoords.z);
|
|
|
|
targetBuilding.setLoc(newLoc);
|
|
|
|
targetBuilding.getBounds().setBounds(targetBuilding);
|
|
|
|
targetBuilding.refresh(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void MoveNPC(NPC targetNPC, PlayerCharacter pcSender, Vector3fImmutable newLoc, Zone serverZone) {
|
|
|
|
|
|
|
|
Vector3fImmutable localCoords;
|
|
|
|
|
|
|
|
localCoords = ZoneManager.worldToLocal(newLoc, serverZone);
|
|
|
|
|
|
|
|
DbManager.NPCQueries.MOVE_NPC(targetNPC.getObjectUUID(), serverZone.getObjectUUID(), localCoords.x, localCoords.y, localCoords.z);
|
|
|
|
targetNPC.setBindLoc(newLoc);
|
|
|
|
targetNPC.setLoc(newLoc);
|
|
|
|
WorldGrid.updateObject(targetNPC, pcSender);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void _doCmd(PlayerCharacter pcSender, String[] args,
|
|
|
|
AbstractGameObject target) {
|
|
|
|
|
|
|
|
Mob targetMobile;
|
|
|
|
Vector3fImmutable targetLoc;
|
|
|
|
Zone serverZone;
|
|
|
|
|
|
|
|
if (validateUserInput(pcSender, target, args) == false) {
|
|
|
|
this.sendUsage(pcSender);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
targetLoc = pcSender.getLoc();
|
|
|
|
serverZone = ZoneManager.findSmallestZone(targetLoc);
|
|
|
|
switch (target.getObjectType()) {
|
|
|
|
case Mob:
|
|
|
|
MoveMobile((Mob) target, pcSender, targetLoc, serverZone);
|
|
|
|
break;
|
|
|
|
case Building:
|
|
|
|
MoveBuilding((Building) target, pcSender, targetLoc, serverZone);
|
|
|
|
break;
|
|
|
|
case NPC:
|
|
|
|
MoveNPC((NPC) target, pcSender, targetLoc, serverZone);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected String _getUsageString() {
|
|
|
|
return "/pull";
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected String _getHelpString() {
|
|
|
|
return "Moves mobile (and spawn) to player's location";
|
|
|
|
}
|
|
|
|
|
|
|
|
private boolean validateUserInput(PlayerCharacter pcSender, AbstractGameObject currTarget, String[] userInput) {
|
|
|
|
|
|
|
|
// No target
|
|
|
|
if (currTarget == null) {
|
|
|
|
throwbackError(pcSender, "Requires a Mobile be targeted");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|