From 129aff909cd3a590b28319b45126145e56262bff Mon Sep 17 00:00:00 2001 From: MagicBot Date: Sat, 29 Apr 2023 14:25:36 -0400 Subject: [PATCH] Update; mobile offsets within buildings. --- src/engine/objects/Mob.java | 54 +++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index b0f35c06..dd0f0340 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -804,7 +804,8 @@ public class Mob extends AbstractIntelligenceAgent { int slot; Vector3fImmutable slotLocation; - if (ConfigManager.serverType.equals(ServerType.LOGINSERVER)) return; + if (ConfigManager.serverType.equals(ServerType.LOGINSERVER)) + return; // Configure parent zone adding this NPC to the // zone collection @@ -822,27 +823,39 @@ public class Mob extends AbstractIntelligenceAgent { // Handle Mobiles within buildings - if (this.building != null && this.contract != null) { + if (this.building != null) { + + // Mobiles inside buildings are offset from it not the zone - // Get next available slot for this Mobile and then - // add it to the building's hireling list + this.bindLoc = new Vector3fImmutable(this.statLat, this.statAlt, this.statLon); + this.bindLoc = this.building.getLoc().add(this.bindLoc); + this.loc = new Vector3fImmutable(bindLoc); + this.endLoc = new Vector3fImmutable(bindLoc); + + if (this.contract != null) { - slot = BuildingManager.getAvailableSlot(building); + // Get next available slot for this Mobile and then + // add it to the building's hireling list - if (slot == -1) Logger.error("No available slot for Mobile: " + this.getObjectUUID()); + slot = BuildingManager.getAvailableSlot(building); - building.getHirelings().put(this, slot); + if (slot == -1) + Logger.error("No available slot for Mobile: " + this.getObjectUUID()); - // Override bind and location for this npc derived - // from BuildingManager slot location data. + building.getHirelings().put(this, slot); - slotLocation = BuildingManager.getSlotLocation(building, slot); + // Override bind and location for this Mobile derived + // from BuildingManager slot location data. - this.bindLoc = building.getLoc().add(slotLocation); - this.loc = building.getLoc().add(slotLocation); - this.endLoc = bindLoc; + slotLocation = BuildingManager.getSlotLocation(building, slot); - // Configure region and floor/level for this Mobile + this.bindLoc = building.getLoc().add(slotLocation); + this.loc = building.getLoc().add(slotLocation); + this.endLoc = bindLoc; + + } + + // Configure building region and floor/level for this Mobile this.region = BuildingManager.GetRegion(this.building, bindLoc.x, bindLoc.y, bindLoc.z); } @@ -856,15 +869,16 @@ public class Mob extends AbstractIntelligenceAgent { this.mana.set(this.manaMax); this.stamina.set(this.staminaMax); - if (!this.nameOverride.isEmpty()) this.firstName = this.nameOverride; - else this.firstName = this.mobBase.getFirstName(); + if (!this.nameOverride.isEmpty()) + this.firstName = this.nameOverride; + else + this.firstName = this.mobBase.getFirstName(); - if (isPet) { + if (isPet) this.setObjectTypeMask(MBServerStatics.MASK_PET | this.getTypeMasks()); - if (ConfigManager.serverType.equals(ServerType.LOGINSERVER)) this.setLoc(this.getLoc()); - } - if (this.contract == null) this.level = (short) this.mobBase.getLevel(); + if (this.contract == null) + this.level = (short) this.mobBase.getLevel(); } //set bonuses