Browse Source

SetParentZone removed from NPC.

master
MagicBot 2 years ago
parent
commit
123f9eb588
  1. 80
      src/engine/devcmd/cmds/SetNPCSlotCmd.java
  2. 12
      src/engine/gameManager/BuildingManager.java
  3. 1
      src/engine/gameManager/DevCmdManager.java
  4. 150
      src/engine/objects/NPC.java
  5. 1
      src/engine/server/world/WorldServer.java

80
src/engine/devcmd/cmds/SetNPCSlotCmd.java

@ -1,80 +0,0 @@ @@ -1,80 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.objects.AbstractGameObject;
import engine.objects.NPC;
import engine.objects.PlayerCharacter;
public class SetNPCSlotCmd extends AbstractDevCmd {
public SetNPCSlotCmd() {
super("updateNPCSlot");
this.addCmdString("changeslot");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
// Arg Count Check
if (words.length != 1) {
this.sendUsage(pc);
return;
}
if (target.getObjectType() != GameObjectType.NPC){
this.sendUsage(pc);
return;
}
NPC npc = (NPC)target;
int slot = 0;
try {
slot = Integer.parseInt(words[0]);
if (!NPC.UpdateSlot(npc, slot)){
this.throwbackError(pc, "Failed to Update Slot");
return;
}
npc.setParentZone(npc.getParentZone());
WorldGrid.updateObject(npc);
this.setTarget(pc); //for logging
// Update all surrounding clients.
} catch (NumberFormatException e) {
this.throwbackError(pc, "Supplied data: " + words[0]
+ " failed to parse to an Integer.");
} catch (Exception e) {
this.throwbackError(pc,
"An unknown exception occurred while attempting to setSlot to "
+ words[0]);
}
}
@Override
protected String _getHelpString() {
return "Sets slot position for an NPC to 'slot'";
}
@Override
protected String _getUsageString() {
return "' /changeslot slot'";
}
}

12
src/engine/gameManager/BuildingManager.java

@ -472,9 +472,7 @@ public enum BuildingManager { @@ -472,9 +472,7 @@ public enum BuildingManager {
if (npc == null)
return false;
npc.setBuilding(building);
npc.setParentZone(zone);
WorldGrid.addObject(npc, contractOwner);
return true;
@ -530,16 +528,6 @@ public enum BuildingManager { @@ -530,16 +528,6 @@ public enum BuildingManager {
if (npc == null)
return false;
npc.setBindLoc(NpcLoc.x - zone.getAbsX(), NpcLoc.y - zone.getAbsY(), NpcLoc.z - zone.getAbsZ());
npc.setBuilding(building);
npc.setParentZone(zone);
if (NPC.GetNPCProfits(npc) == null)
NPCProfits.CreateProfits(npc);
WorldGrid.addObject(npc, contractOwner);
return true;
}

1
src/engine/gameManager/DevCmdManager.java

@ -135,7 +135,6 @@ public enum DevCmdManager { @@ -135,7 +135,6 @@ public enum DevCmdManager {
DevCmdManager.registerDevCmd(new MBDropCmd());
DevCmdManager.registerDevCmd(new AuditHeightMapCmd());
DevCmdManager.registerDevCmd(new UnloadFurnitureCmd());
DevCmdManager.registerDevCmd(new SetNPCSlotCmd());
DevCmdManager.registerDevCmd(new SetNpcEquipSetCmd());
DevCmdManager.registerDevCmd(new SetBuildingAltitudeCmd());
DevCmdManager.registerDevCmd(new ResetLevelCmd());

150
src/engine/objects/NPC.java

@ -265,8 +265,6 @@ public class NPC extends AbstractCharacter { @@ -265,8 +265,6 @@ public class NPC extends AbstractCharacter {
this.buildingFloor = (rs.getInt("npc_buildingFloor"));
this.buildingLevel = (rs.getInt("npc_buildingLevel"));
this.setParentZone(ZoneManager.getZoneByUUID(this.parentZoneID));
if (this.contract != null)
this.nameOverride = rs.getString("npc_name") + " the " + this.getContract().getName();
else
@ -342,6 +340,48 @@ public class NPC extends AbstractCharacter { @@ -342,6 +340,48 @@ public class NPC extends AbstractCharacter {
private void initializeNPC() {
int slot;
Vector3fImmutable slotLocation = Vector3fImmutable.ZERO;
if (ConfigManager.serverType.equals(ServerType.LOGINSERVER))
return;
// NPC Guild owners have no contract
if (this.contract == null)
return;
// Configure parent zone adding this NPC to the
// zone collection
this.parentZone = ZoneManager.getZoneByUUID(this.parentZoneID);
this.parentZone.zoneNPCSet.remove(this);
this.parentZone.zoneNPCSet.add(this);
// Add this npc to the hireling list.
// if slotted within a building
if (this.building != null) {
slot = BuildingManager.getAvailableSlot(building);
if (slot == -1)
Logger.error("No available slot for NPC: " + this.getObjectUUID());
building.getHirelings().put(this, slot);
this.bindLoc = BuildingManager.getSlotLocation(building, slot);
this.loc = BuildingManager.getSlotLocation(building, slot);
this.region = BuildingManager.GetRegion(this.building, bindLoc.x, bindLoc.y, bindLoc.z);
if (this.region != null) {
this.buildingFloor = region.getRoom();
this.buildingLevel = region.getLevel();
} else {
this.buildingFloor = -1;
this.buildingLevel = -1;
}
}
if (this.mobBase != null) {
this.healthMax = this.mobBase.getHealthMax();
this.manaMax = 0;
@ -351,12 +391,9 @@ public class NPC extends AbstractCharacter { @@ -351,12 +391,9 @@ public class NPC extends AbstractCharacter {
this.stamina.set(this.staminaMax);
}
// Add this npc to building hireling list if not there yet.
// For some reason the npc is created and initialized twice when
// createMobWithNoID() is called.
if (this.building != null)
slotNPCinBuilding(); // picks first available free slot
if (this.parentZone.isPlayerCity())
if (NPC.GetNPCProfits(this) == null)
NPCProfits.CreateProfits(this);
//TODO set these correctly later
this.rangeHandOne = 8;
@ -372,15 +409,6 @@ public class NPC extends AbstractCharacter { @@ -372,15 +409,6 @@ public class NPC extends AbstractCharacter {
this.charItemManager.load();
}
private void slotNPCinBuilding() {
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) {
return (NPC) DbManager.getFromCache(GameObjectType.NPC, id);
@ -389,9 +417,6 @@ public class NPC extends AbstractCharacter { @@ -389,9 +417,6 @@ public class NPC extends AbstractCharacter {
/*
* Getters
*/
public int getLoadID() {
return loadID;
}
public boolean isMob() {
return this.isMob;
@ -860,91 +885,6 @@ public class NPC extends AbstractCharacter { @@ -860,91 +885,6 @@ public class NPC extends AbstractCharacter {
return 0;
}
public void setParentZone(Zone zone) {
if (ConfigManager.serverType.equals(ServerType.LOGINSERVER))
return;
if (this.contract == null)
return;
//update ZoneManager's zone mpc set
if (zone != null) {
if (this.parentZone != null) {
if (zone.getObjectUUID() != this.parentZone.getObjectUUID()) {
this.parentZone.zoneNPCSet.remove(this);
zone.zoneNPCSet.add(this);
}
} else {
zone.zoneNPCSet.add(this);
}
} else if (this.parentZone != null) {
this.parentZone.zoneNPCSet.remove(this);
}
if (this.parentZone == null)
this.parentZone = zone;
if (!this.parentZone.isPlayerCity())
this.sellPercent = 1;
if (this.building != null) {
BuildingModelBase buildingModel = BuildingModelBase.getModelBase(this.building.getMeshUUID());
Vector3fImmutable slotLocation = Vector3fImmutable.ZERO;
if (buildingModel != null){
int putSlot;
BuildingLocation buildingLocation = null;
//-1 slot means no slot available in building.
putSlot = NPC.getBuildingSlot(this);
buildingLocation = buildingModel.getSlotLocation(putSlot);
if (buildingLocation != null){
slotLocation = buildingLocation.getLoc();
this.setRot(new Vector3f(buildingLocation.getRot()));
}
else if (this.building.getHirelings().containsKey(this) && putSlot != -1)
Logger.error("could not slot npc : " + currentID + " in slot " + putSlot + " for building Mesh " + this.building.getMeshUUID());
}
Vector3fImmutable buildingWorldLoc = ZoneManager.convertLocalToWorld(this.building, slotLocation);
//Set floor and level here after building World Location.
this.region = BuildingManager.GetRegion(this.building, buildingWorldLoc.x, buildingWorldLoc.y, buildingWorldLoc.z);
if (this.region != null){
this.buildingFloor = region.getRoom();
this.buildingLevel = region.getLevel();
}else{
this.buildingFloor = -1;
this.buildingLevel = -1;
}
this.setBindLoc(new Vector3fImmutable(buildingWorldLoc.x, buildingWorldLoc.y, buildingWorldLoc.z));
if (ConfigManager.serverType.equals(ServerType.WORLDSERVER))
this.setLoc(new Vector3fImmutable(buildingWorldLoc.x, buildingWorldLoc.y, buildingWorldLoc.z));
}else{
this.setBindLoc(new Vector3fImmutable(this.statLat + zone.absX, this.statAlt + zone.absY, this.statLon + zone.absZ));
if (ConfigManager.serverType.equals(ServerType.WORLDSERVER))
this.setLoc(new Vector3fImmutable(this.statLat + zone.absX, this.statAlt + zone.absY, this.statLon + zone.absZ));
}
//create npc profits
if (this.parentZone != null){
if (this.parentZone.isPlayerCity())
if (NPC.GetNPCProfits(this) == null)
NPCProfits.CreateProfits(this);
}
}
@Override
public Vector3fImmutable getLoc() {

1
src/engine/server/world/WorldServer.java

@ -565,7 +565,6 @@ public class WorldServer { @@ -565,7 +565,6 @@ public class WorldServer {
try {
n.setObjectTypeMask(MBServerStatics.MASK_NPC);
n.setLoc(n.getLoc());
n.setParentZone(zone);
} catch (Exception e) {
Logger.error( n.getObjectUUID() + " returned an Error Message :" + e.getMessage());
}

Loading…
Cancel
Save