Browse Source

Tower captains don't use slot 1.

master
MagicBot 2 years ago
parent
commit
3b69c8c267
  1. 45
      src/engine/objects/NPC.java

45
src/engine/objects/NPC.java

@ -353,19 +353,18 @@ public class NPC extends AbstractCharacter {
} }
// Add this npc to building hireling list if not there yet. // Add this npc to building hireling list if not there yet.
// For some reason the mob is initialized twice when // For some reason the npc is created and initialized twice when
// createMobWithNoID() is called. // createMobWithNoID() is called.
if (this.building != null && if (this.building != null &&
this.loadID == 0) { this.loadID == 0) {
int maxSlots = 10; // Artillery Tower Captains use a hardcoded slot not first available
for (int slot = 1; slot < maxSlots + 1; slot++) if (this.contract != null && this.contract.getContractID() == 650)
if (!this.building.getHirelings().containsValue(slot)) { this.building.getHirelings().put(this, 2);
this.building.getHirelings().put(this, slot); else
break; slotMobInBuilding();
}
} }
//TODO set these correctly later //TODO set these correctly later
@ -383,6 +382,16 @@ public class NPC extends AbstractCharacter {
this.charItemManager.load(); this.charItemManager.load();
} }
private void slotMobInBuilding() {
int maxSlots = 10;
for (int slot = 1; slot < maxSlots + 1; slot++)
if (!this.building.getHirelings().containsValue(slot)) {
this.building.getHirelings().put(this, slot);
break;
}
}
public static NPC getFromCache(int id) { public static NPC getFromCache(int id) {
return (NPC) DbManager.getFromCache(GameObjectType.NPC, id); return (NPC) DbManager.getFromCache(GameObjectType.NPC, id);
} }
@ -891,13 +900,15 @@ public class NPC extends AbstractCharacter {
} }
public void setParentZone(Zone zone) { public void setParentZone(Zone zone) {
if (ConfigManager.serverType.equals(ServerType.LOGINSERVER)) {
if (ConfigManager.serverType.equals(ServerType.LOGINSERVER))
return; return;
}
if (this.contract == null) if (this.contract == null)
return; return;
//update ZoneManager's zone building list
//update ZoneManager's zone mpc set
if (zone != null) { if (zone != null) {
if (this.parentZone != null) { if (this.parentZone != null) {
if (zone.getObjectUUID() != this.parentZone.getObjectUUID()) { if (zone.getObjectUUID() != this.parentZone.getObjectUUID()) {
@ -925,8 +936,7 @@ public class NPC extends AbstractCharacter {
Vector3fImmutable slotLocation = Vector3fImmutable.ZERO; Vector3fImmutable slotLocation = Vector3fImmutable.ZERO;
if (buildingModel != null){ if (buildingModel != null){
int putSlot; int putSlot;
BuildingLocation buildingLocation = null; BuildingLocation buildingLocation = null;
@ -935,8 +945,7 @@ public class NPC extends AbstractCharacter {
putSlot = this.slot; putSlot = this.slot;
else else
putSlot = NPC.getBuildingSlot(this); putSlot = NPC.getBuildingSlot(this);
buildingLocation = buildingModel.getSlotLocation(putSlot); buildingLocation = buildingModel.getSlotLocation(putSlot);
if (buildingLocation != null){ if (buildingLocation != null){
@ -951,8 +960,7 @@ public class NPC extends AbstractCharacter {
} }
} }
} }
Vector3fImmutable buildingWorldLoc = ZoneManager.convertLocalToWorld(this.building, slotLocation); Vector3fImmutable buildingWorldLoc = ZoneManager.convertLocalToWorld(this.building, slotLocation);
//Set floor and level here after building World Location. //Set floor and level here after building World Location.
@ -961,8 +969,7 @@ public class NPC extends AbstractCharacter {
if (this.region != null){ if (this.region != null){
this.buildingFloor = region.getRoom(); this.buildingFloor = region.getRoom();
this.buildingLevel = region.getLevel(); this.buildingLevel = region.getLevel();
this.inBuildingLoc = ZoneManager.convertWorldToLocal(building, this.getLoc()); this.inBuildingLoc = ZoneManager.convertWorldToLocal(building, this.getLoc());

Loading…
Cancel
Save