diff --git a/src/engine/objects/AbstractCharacter.java b/src/engine/objects/AbstractCharacter.java index 7b441f70..7c584148 100644 --- a/src/engine/objects/AbstractCharacter.java +++ b/src/engine/objects/AbstractCharacter.java @@ -50,7 +50,9 @@ public abstract class AbstractCharacter extends AbstractWorldObject { private final ReentrantReadWriteLock teleportLock = new ReentrantReadWriteLock(); public short level; public AbstractWorldObject combatTarget; + public int contractUUID; public Contract contract; + protected String firstName; protected String lastName; protected short statStrCurrent; diff --git a/src/engine/objects/NPC.java b/src/engine/objects/NPC.java index 111ce0f5..82e4d1b5 100644 --- a/src/engine/objects/NPC.java +++ b/src/engine/objects/NPC.java @@ -125,37 +125,18 @@ public class NPC extends AbstractCharacter { this.dbID = rs.getInt(1); this.currentID = this.dbID; this.setObjectTypeMask(MBServerStatics.MASK_NPC); - int contractID = rs.getInt("npc_contractID"); - this.contract = DbManager.ContractQueries.GET_CONTRACT(contractID); + this.contractUUID = rs.getInt("npc_contractID"); this.parentZoneID = rs.getInt("parent"); - this.gridObjectType = GridObjectType.STATIC; this.equipmentSetID = rs.getInt("equipmentSet"); this.runeSetID = rs.getInt("runeSet"); - if (this.equipmentSetID == 0 && this.contract != null) - this.equipmentSetID = this.contract.equipmentSet; - this.loadID = rs.getInt("npc_raceID"); - // Default to contract load ID - - if (loadID == 0) { - - if (this.contract != null) - loadID = this.contract.getMobbaseID(); - else { - Logger.error("Invalid contract for NPC: " + this.getObjectUUID()); - loadID = 2100; // Default human male - } - } - - this.mobBase = MobBase.getMobBase(this.loadID); this.level = rs.getByte("npc_level"); this.isMob = false; - int buildingID = rs.getInt("npc_buildingID"); - this.building = BuildingManager.getBuilding(buildingID); + buildingUUID = rs.getInt("npc_buildingID"); // Most objects from the cache have a default buy // percentage of 100% which was a dupe source due @@ -172,20 +153,7 @@ public class NPC extends AbstractCharacter { this.statAlt = rs.getFloat("npc_spawnY"); this.statLon = rs.getFloat("npc_spawnZ"); - int guildID = rs.getInt("npc_guildID"); - - if (this.building != null) - this.guild = this.building.getGuild(); - else - this.guild = Guild.getGuild(guildID); - - if (guildID != 0 && (this.guild == null || this.guild.isEmptyGuild())) - NPC.Oprhans.add(currentID); - else if (this.building == null && buildingID > 0) - NPC.Oprhans.add(currentID); - - if (this.guild == null) - this.guild = Guild.getErrantGuild(); + this.guildUUID = rs.getInt("npc_guildID"); // Set upgrade date JodaTime DateTime object // if one exists in the database. @@ -1054,6 +1022,40 @@ public class NPC extends AbstractCharacter { if (ConfigManager.serverType.equals(ServerType.LOGINSERVER)) return; + this.contract = DbManager.ContractQueries.GET_CONTRACT(this.contractUUID); + + if (this.equipmentSetID == 0 && this.contract != null) + this.equipmentSetID = this.contract.equipmentSet; + + // Default to contract load ID + + if (loadID == 0) { + + if (this.contract != null) + loadID = this.contract.getMobbaseID(); + else { + Logger.error("Invalid contract for NPC: " + this.getObjectUUID()); + loadID = 2100; // Default human male + } + } + + this.mobBase = MobBase.getMobBase(this.loadID); + + this.building = BuildingManager.getBuilding(this.buildingUUID); + + if (this.building != null) + this.guild = this.building.getGuild(); + else + this.guild = Guild.getGuild(this.guildUUID); + + if (this.guildUUID != 0 && (this.guild == null || this.guild.isEmptyGuild())) + NPC.Oprhans.add(currentID); + else if (this.building == null && this.buildingUUID > 0) + NPC.Oprhans.add(currentID); + + if (this.guild == null) + this.guild = Guild.getErrantGuild(); + if (this.contract == null) return; // Early exit for npc guild owners