From 36cc23457ab809a694052fecfd5639597ccb55c0 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Sun, 27 Aug 2023 21:26:00 -0500 Subject: [PATCH] optimized slot for siege engines --- src/engine/gameManager/NPCManager.java | 11 ++++++++--- src/engine/jobs/EndFearJob.java | 4 ++-- src/engine/objects/AbstractCharacter.java | 1 + src/engine/objects/Mob.java | 8 ++------ src/engine/powers/poweractions/FearPowerAction.java | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/engine/gameManager/NPCManager.java b/src/engine/gameManager/NPCManager.java index b112fe17..c9e22d57 100644 --- a/src/engine/gameManager/NPCManager.java +++ b/src/engine/gameManager/NPCManager.java @@ -341,9 +341,14 @@ public enum NPCManager { if (abstractCharacter.building.getBlueprint() != null && abstractCharacter.building.getBlueprint().getBuildingGroup().equals(Enum.BuildingGroup.TOL) && abstractCharacter.building.getRank() == 8) buildingSlot = BuildingManager.getLastAvailableSlot(abstractCharacter.building); - else - buildingSlot = BuildingManager.getAvailableSlot(abstractCharacter.building); - + else { + if(abstractCharacter.getObjectType().equals(Enum.GameObjectType.Mob) && ((Mob)abstractCharacter).behaviourType.equals(Enum.MobBehaviourType.SiegeEngine)) { + Mob mob = (Mob)abstractCharacter; + buildingSlot = mob.guardCaptain.siegeMinionMap.size() + 1; + }else { + buildingSlot = BuildingManager.getAvailableSlot(abstractCharacter.building); + } + } if (buildingSlot == -1) Logger.error("No available slot for NPC: " + abstractCharacter.getObjectUUID()); diff --git a/src/engine/jobs/EndFearJob.java b/src/engine/jobs/EndFearJob.java index fef762d5..f88a4850 100644 --- a/src/engine/jobs/EndFearJob.java +++ b/src/engine/jobs/EndFearJob.java @@ -29,7 +29,7 @@ public class EndFearJob extends AbstractEffectJob { if (this.target == null || (!(this.target instanceof Mob))) return; - ((Mob) this.target).setFearedObject(null); + ((Mob) this.target).fearedObject = null; } @Override @@ -40,6 +40,6 @@ public class EndFearJob extends AbstractEffectJob { if (this.target == null || (!(this.target instanceof Mob))) return; - ((Mob) this.target).setFearedObject(null); + ((Mob) this.target).fearedObject = null; } } diff --git a/src/engine/objects/AbstractCharacter.java b/src/engine/objects/AbstractCharacter.java index 8f4ffcf8..e890b809 100644 --- a/src/engine/objects/AbstractCharacter.java +++ b/src/engine/objects/AbstractCharacter.java @@ -120,6 +120,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject { private float hateValue = 0; private long lastHateUpdate = 0; private byte aoecntr = 0; + public final ConcurrentHashMap siegeMinionMap = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); public AbstractCharacter() { super(); diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index 1cfcdeaa..fc66914e 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -48,7 +48,7 @@ public class Mob extends AbstractIntelligenceAgent { private static int staticID = 0; //mob specific public final ConcurrentHashMap playerAgroMap = new ConcurrentHashMap<>(); - public final ConcurrentHashMap siegeMinionMap = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); + public final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public long nextCastTime = 0; public long nextCallForHelp = 0; @@ -73,7 +73,7 @@ public class Mob extends AbstractIntelligenceAgent { private int currentID; - private AbstractWorldObject fearedObject = null; + public AbstractWorldObject fearedObject = null; private long lastAttackTime = 0; private int lastMobPowerToken = 0; private HashMap equip = null; @@ -737,10 +737,6 @@ public class Mob extends AbstractIntelligenceAgent { return this.guild.getObjectUUID(); } - public void setFearedObject(AbstractWorldObject awo) { - this.fearedObject = awo; - } - @Override public Vector3fImmutable getBindLoc() { diff --git a/src/engine/powers/poweractions/FearPowerAction.java b/src/engine/powers/poweractions/FearPowerAction.java index c1bae2ed..da352aa5 100644 --- a/src/engine/powers/poweractions/FearPowerAction.java +++ b/src/engine/powers/poweractions/FearPowerAction.java @@ -59,7 +59,7 @@ public class FearPowerAction extends AbstractPowerAction { int duration = 10 + ((int) (trains * 0.5)); String stackType = ab.getStackType(); EndFearJob efj = new EndFearJob(source, awo, stackType, trains, ab, pb, null); - ((Mob) awo).setFearedObject(source); + ((Mob) awo).fearedObject = source; JobScheduler.getInstance().scheduleJob(efj, duration * 1000); }