|
|
@ -332,14 +332,6 @@ public class MobileFSM { |
|
|
|
public static void DetermineAction(Mob mob) { |
|
|
|
public static void DetermineAction(Mob mob) { |
|
|
|
if (mob == null) |
|
|
|
if (mob == null) |
|
|
|
return; |
|
|
|
return; |
|
|
|
//pet cleanup for errant pets
|
|
|
|
|
|
|
|
if(mob.BehaviourType.ordinal() == Enum.MobBehaviourType.Pet1.ordinal() && mob.getOwner() == null && mob.isSiege() == false){ |
|
|
|
|
|
|
|
mob.despawn(); |
|
|
|
|
|
|
|
DbManager.removeFromCache(mob); |
|
|
|
|
|
|
|
WorldGrid.removeObject(mob); |
|
|
|
|
|
|
|
ZoneManager.getSeaFloor().zoneMobSet.remove(mob); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (mob.despawned && mob.getMobBase().getLoadID() == 13171) { |
|
|
|
if (mob.despawned && mob.getMobBase().getLoadID() == 13171) { |
|
|
|
//trebuchet spawn handler
|
|
|
|
//trebuchet spawn handler
|
|
|
|
CheckForRespawn(mob); |
|
|
|
CheckForRespawn(mob); |
|
|
@ -358,7 +350,9 @@ public class MobileFSM { |
|
|
|
} |
|
|
|
} |
|
|
|
CheckForRespawn(mob); |
|
|
|
CheckForRespawn(mob); |
|
|
|
//check to send mob home for player guards to prevent exploit of dragging guards away and then teleporting
|
|
|
|
//check to send mob home for player guards to prevent exploit of dragging guards away and then teleporting
|
|
|
|
CheckToSendMobHome(mob); |
|
|
|
if(mob.BehaviourType.ordinal() != Enum.MobBehaviourType.Pet1.ordinal()){ |
|
|
|
|
|
|
|
CheckToSendMobHome(mob); |
|
|
|
|
|
|
|
} |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (!mob.isAlive()) { |
|
|
|
if (!mob.isAlive()) { |
|
|
@ -382,6 +376,7 @@ public class MobileFSM { |
|
|
|
if (mob.combatTarget != null && mob.combatTarget.isAlive() == false) { |
|
|
|
if (mob.combatTarget != null && mob.combatTarget.isAlive() == false) { |
|
|
|
mob.setCombatTarget(null); |
|
|
|
mob.setCombatTarget(null); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
mob.updateLocation(); |
|
|
|
switch (mob.BehaviourType) { |
|
|
|
switch (mob.BehaviourType) { |
|
|
|
case GuardCaptain: |
|
|
|
case GuardCaptain: |
|
|
|
GuardCaptainLogic(mob); |
|
|
|
GuardCaptainLogic(mob); |
|
|
@ -440,6 +435,9 @@ public class MobileFSM { |
|
|
|
return; |
|
|
|
return; |
|
|
|
switch (mob.BehaviourType) { |
|
|
|
switch (mob.BehaviourType) { |
|
|
|
case Pet1: |
|
|
|
case Pet1: |
|
|
|
|
|
|
|
if(mob.getOwner() == null){ |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
if (!mob.playerAgroMap.containsKey(mob.getOwner().getObjectUUID())) { |
|
|
|
if (!mob.playerAgroMap.containsKey(mob.getOwner().getObjectUUID())) { |
|
|
|
//mob no longer has its owner loaded, translocate pet to owner
|
|
|
|
//mob no longer has its owner loaded, translocate pet to owner
|
|
|
|
MovementManager.translocate(mob, mob.getOwner().getLoc(), null); |
|
|
|
MovementManager.translocate(mob, mob.getOwner().getLoc(), null); |
|
|
@ -640,6 +638,11 @@ public class MobileFSM { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static void PetLogic(Mob mob) { |
|
|
|
private static void PetLogic(Mob mob) { |
|
|
|
|
|
|
|
if(mob.getOwner() == null && mob.isNecroPet() == false && mob.isSiege() == false){ |
|
|
|
|
|
|
|
if(ZoneManager.getSeaFloor().zoneMobSet.contains(mob)){ |
|
|
|
|
|
|
|
mob.killCharacter("no owner"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
if (mob.getCombatTarget() != null && !mob.getCombatTarget().isAlive()) |
|
|
|
if (mob.getCombatTarget() != null && !mob.getCombatTarget().isAlive()) |
|
|
|
mob.setCombatTarget(null); |
|
|
|
mob.setCombatTarget(null); |
|
|
|
if (MovementUtilities.canMove(mob) && mob.BehaviourType.canRoam) |
|
|
|
if (MovementUtilities.canMove(mob) && mob.BehaviourType.canRoam) |
|
|
|