From 90c324b3633fd18f267daa1bd2846f4967568dcf Mon Sep 17 00:00:00 2001
From: MagicBot <MagicBot@magicbane.com>
Date: Fri, 21 Jul 2023 12:50:52 -0400
Subject: [PATCH] NPC/Mob slotting work.

---
 src/engine/gameManager/BuildingManager.java |  2 ++
 src/engine/objects/NPC.java                 | 21 ++++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/engine/gameManager/BuildingManager.java b/src/engine/gameManager/BuildingManager.java
index b945c5a5..3bac612f 100644
--- a/src/engine/gameManager/BuildingManager.java
+++ b/src/engine/gameManager/BuildingManager.java
@@ -548,6 +548,7 @@ public enum BuildingManager {
             return true;
         }
         if (contract.getContractID() == 910) {
+
             //guard dog
             mob = Mob.createMob(contract.getMobbaseID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), true, zone, building, contract.getContractID(), pirateName, rank);
 
@@ -558,6 +559,7 @@ public enum BuildingManager {
 
             return true;
         }
+
         npc = NPC.createNPC(pirateName, contract.getObjectUUID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), false, zone, (short) rank, building);
 
         if (npc == null)
diff --git a/src/engine/objects/NPC.java b/src/engine/objects/NPC.java
index 44e91e76..3cb6868a 100644
--- a/src/engine/objects/NPC.java
+++ b/src/engine/objects/NPC.java
@@ -569,14 +569,22 @@ public class NPC extends AbstractCharacter {
 
         npcWithoutID.setLevel(level);
 
-        if (npcWithoutID.mobBase == null) {
+        if (npcWithoutID.mobBase == null)
             return null;
-        }
-        if (parent != null) {
-            npcWithoutID.setRelPos(parent, spawn.x - parent.absX, spawn.y - parent.absY, spawn.z - parent.absZ);
-        }
-        npcWithoutID.setLoc(new Vector3fImmutable(npcWithoutID.statLat,npcWithoutID.statAlt,npcWithoutID.statLon));
+
+        // Parent zone is required by dbhandler.  Can likely
+        // refactor that out and just use the id.
+
+        npcWithoutID.parentZone = parent;
+        npcWithoutID.parentZoneID = parent.getObjectUUID();
+
+        // NPC in a Building derives position from slot
+
+        if (npcWithoutID.building != null)
+            npcWithoutID.bindLoc = Vector3fImmutable.ZERO;
+
         NPC npc;
+
         try {
             npc = DbManager.NPCQueries.ADD_NPC(npcWithoutID, isMob);
             npc.setObjectTypeMask(MBServerStatics.MASK_NPC);
@@ -585,7 +593,6 @@ public class NPC extends AbstractCharacter {
             npc = null;
         }
 
-
         return npc;
     }