Browse Source

method to check if zone has players inside it

mob ai check if zone has no players mobs need not perform actions
master
FatBoy-DOTC 2 years ago
parent
commit
113d74cffe
  1. 12
      src/engine/ai/MobileFSMManager.java
  2. 12
      src/engine/objects/Zone.java

12
src/engine/ai/MobileFSMManager.java

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
package engine.ai;
import engine.gameManager.SessionManager;
import engine.gameManager.ZoneManager;
import engine.objects.Mob;
import engine.objects.Zone;
@ -67,7 +68,10 @@ public class MobileFSMManager { @@ -67,7 +68,10 @@ public class MobileFSMManager {
private void execution() {
//Load zone threshold once.
//no players online means no mob action required
if(SessionManager.getActivePlayerCharacterCount() <= 0){
return;
}
long mobPulse = System.currentTimeMillis() + MBServerStatics.AI_PULSE_MOB_THRESHOLD;
@ -79,7 +83,11 @@ public class MobileFSMManager { @@ -79,7 +83,11 @@ public class MobileFSMManager {
if (System.currentTimeMillis() > mobPulse) {
for (Zone zone : ZoneManager.getAllZones()) {
//check if any players are in the zone
if(zone.hasPlayers() == false){
//if zone has no players no need for mobs to do anything
return;
}
for (Mob mob : zone.zoneMobSet) {
try {

12
src/engine/objects/Zone.java

@ -13,6 +13,7 @@ import engine.Enum; @@ -13,6 +13,7 @@ import engine.Enum;
import engine.InterestManagement.HeightMap;
import engine.db.archive.DataWarehouse;
import engine.gameManager.DbManager;
import engine.gameManager.SessionManager;
import engine.gameManager.ZoneManager;
import engine.math.Bounds;
import engine.math.Vector2f;
@ -25,6 +26,7 @@ import java.sql.ResultSet; @@ -25,6 +26,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@ -509,5 +511,15 @@ public class Zone extends AbstractGameObject { @@ -509,5 +511,15 @@ public class Zone extends AbstractGameObject {
public float getWorldAltitude() {
return worldAltitude;
}
public boolean hasPlayers(){
for(PlayerCharacter pc : SessionManager.getAllActivePlayers()){
for(Zone zone : ZoneManager.getAllZonesIn(pc.getLoc())) {
if(zone.equals(this)){
return true;
}
}
}
return false;
}
}

Loading…
Cancel
Save