From 7e25875fa2632505584f19b0966d5bb7d5f26076 Mon Sep 17 00:00:00 2001 From: FatBoy-DOTC Date: Sat, 22 Jul 2023 08:26:55 -0500 Subject: [PATCH] mobs respawn, mob location sync, mobs attack --- src/engine/ai/MobileFSM.java | 17 +++++++++-------- src/engine/objects/Mob.java | 10 +++++----- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/engine/ai/MobileFSM.java b/src/engine/ai/MobileFSM.java index 1b25d37d..d06386e7 100644 --- a/src/engine/ai/MobileFSM.java +++ b/src/engine/ai/MobileFSM.java @@ -80,7 +80,7 @@ public class MobileFSM { if (System.currentTimeMillis() < mob.getLastAttackTime()) return; // ranged mobs cant attack while running. skip until they finally stop. - if (mob.isMoving()) + if (mob.isMoving() && mob.getRange() > 20) return; // add timer for last attack. ItemBase mainHand = mob.getWeaponItemBase(true); @@ -378,18 +378,19 @@ public class MobileFSM { rwss.setPlayer(mob); DispatchMessage.sendToAllInRange(mob, rwss); } - //mob.updateLocation(); - if(mob.isMoving() == true){ - mob.setLoc(mob.getMovementLoc()); - } if(mob.BehaviourType.ordinal() != Enum.MobBehaviourType.Pet1.ordinal()) { CheckToSendMobHome(mob); } if (mob.combatTarget != null && mob.combatTarget.isAlive() == false) { mob.setCombatTarget(null); } - //mob.updateLocation(); - if(mob.isMoving()){ + mob.updateLocation(); + if(mob.getTimestamps().containsKey("MOVEMENTSYNC") == false){ + mob.getTimestamps().put("MOVEMENTSYNC",System.currentTimeMillis()); + } + if(mob.getTimeStamp("MOVEMENTSYNC") < System.currentTimeMillis() + 1000){ + mob.getTimestamps().put("MOVEMENTSYNC",System.currentTimeMillis()); + mob.setLoc(mob.getMovementLoc()); } switch (mob.BehaviourType) { @@ -735,7 +736,7 @@ public class MobileFSM { if (mob.BehaviourType.canRoam) CheckMobMovement(mob); //check if mob can attack if it isn't wimpy - if (!mob.BehaviourType.isWimpy && !mob.isMoving() && mob.combatTarget != null) + if (!mob.BehaviourType.isWimpy && mob.combatTarget != null) CheckForAttack(mob); } diff --git a/src/engine/objects/Mob.java b/src/engine/objects/Mob.java index 798286fb..d97a0003 100644 --- a/src/engine/objects/Mob.java +++ b/src/engine/objects/Mob.java @@ -1299,6 +1299,8 @@ public class Mob extends AbstractIntelligenceAgent { Dispatch dispatch; try { + //resync corpses + this.setLoc(this.getMovementLoc()); if (this.isSiege) { this.deathTime = System.currentTimeMillis(); //this.state = STATE.Dead; @@ -1375,8 +1377,7 @@ public class Mob extends AbstractIntelligenceAgent { this.combat = false; this.walkMode = true; this.combatTarget = null; - //resync corpses - this.setLoc(this.loc); + this.hasLoot = this.charItemManager.getInventoryCount() > 0; } catch (Exception e) { Logger.error(e); @@ -1385,6 +1386,7 @@ public class Mob extends AbstractIntelligenceAgent { public void respawn() { //Commenting out Mob ID rotation. + this.despawned = false; this.playerAgroMap.clear(); this.setCombatTarget(null); this.setHealth(this.healthMax); @@ -1396,8 +1398,7 @@ public class Mob extends AbstractIntelligenceAgent { this.isAlive.set(true); this.deathTime = 0; this.lastBindLoc = this.bindLoc; - //this.setLoc(this.lastBindLoc); - this.setLoc(bindLoc); + this.setLoc(this.lastBindLoc); this.stopMovement(this.lastBindLoc); NPCManager.applyRuneSetEffects(this); this.recalculateStats(); @@ -1410,7 +1411,6 @@ public class Mob extends AbstractIntelligenceAgent { //MovementManager.translocate(this, this.bindLoc, this.region); if (!this.isSiege && !this.isPlayerGuard && contract == null) loadInventory(); - this.despawned = false; } public void despawn() {