Mobile implements Delayed interface

This commit is contained in:
2023-10-23 00:07:48 -04:00
parent 7b70b680f0
commit 8bd406bcf4
5 changed files with 38 additions and 22 deletions
+28 -12
View File
@@ -26,6 +26,7 @@ import engine.net.DispatchMessage;
import engine.net.client.msg.PetMsg;
import engine.net.client.msg.PlaceAssetMsg;
import engine.server.MBServerStatics;
import org.jetbrains.annotations.NotNull;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
@@ -34,11 +35,14 @@ import java.sql.SQLException;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import static engine.net.client.msg.ErrorPopupMsg.sendErrorPopup;
import static java.lang.Math.toIntExact;
public class Mob extends AbstractIntelligenceAgent {
public class Mob extends AbstractIntelligenceAgent implements Delayed {
private static int staticID = 0;
//mob specific
@@ -51,10 +55,11 @@ public class Mob extends AbstractIntelligenceAgent {
public boolean despawned = false;
public Vector3fImmutable destination = Vector3fImmutable.ZERO;
public MobBase mobBase;
public int spawnTime;
public int spawnDelay;
public Zone parentZone;
public boolean hasLoot = false;
public long deathTime = 0;
public long respawnTime = 0;
public int equipmentSetID = 0;
public int runeSet = 0;
public int bootySet = 0;
@@ -104,7 +109,7 @@ public class Mob extends AbstractIntelligenceAgent {
this.agentType = AIAgentType.MOBILE;
this.spawnRadius = rs.getFloat("mob_spawnRadius");
this.spawnTime = rs.getInt("mob_spawnTime");
this.spawnDelay = rs.getInt("mob_spawnTime");
statLat = rs.getFloat("mob_spawnX");
statAlt = rs.getFloat("mob_spawnY");
@@ -135,8 +140,8 @@ public class Mob extends AbstractIntelligenceAgent {
if (this.upgradeDateTime != null)
Mob.submitUpgradeJob(this);
if (this.mobBase != null && this.spawnTime == 0)
this.spawnTime = this.mobBase.getSpawnTime();
if (this.mobBase != null && this.spawnDelay == 0)
this.spawnDelay = this.mobBase.getSpawnTime();
this.runeSet = rs.getInt("runeSet");
this.bootySet = rs.getInt("bootySet");
@@ -450,7 +455,7 @@ public class Mob extends AbstractIntelligenceAgent {
minionMobile.deathTime = System.currentTimeMillis();
minionMobile.guardCaptain = guardCaptain;
minionMobile.spawnTime = (int) (-2.500 * guardCaptain.building.getRank() + 22.5) * 60;
minionMobile.spawnDelay = (int) (-2.500 * guardCaptain.building.getRank() + 22.5) * 60;
minionMobile.behaviourType = Enum.MobBehaviourType.GuardMinion;
minionMobile.agentType = AIAgentType.GUARDMINION;
minionMobile.guardedCity = guardCaptain.guardedCity;
@@ -509,7 +514,7 @@ public class Mob extends AbstractIntelligenceAgent {
siegeMinion.behaviourType = MobBehaviourType.SiegeEngine;
siegeMinion.agentType = AIAgentType.SIEGEENGINE;
siegeMinion.bindLoc = Vector3fImmutable.ZERO;
siegeMinion.spawnTime = (60 * 15);
siegeMinion.spawnDelay = (60 * 15);
siegeMinion.runAfterLoad();
@@ -650,10 +655,10 @@ public class Mob extends AbstractIntelligenceAgent {
}
public String getSpawnTimeAsString() {
if (this.spawnTime == 0)
if (this.spawnDelay == 0)
return MBServerStatics.DEFAULT_SPAWN_TIME_MS / 1000 + " seconds (Default)";
else
return this.spawnTime + " seconds";
return this.spawnDelay + " seconds";
}
@@ -875,7 +880,7 @@ public class Mob extends AbstractIntelligenceAgent {
this.playerAgroMap.clear();
if (this.behaviourType.ordinal() == Enum.MobBehaviourType.GuardMinion.ordinal())
this.spawnTime = (int) (-2.500 * this.guardCaptain.building.getRank() + 22.5) * 60;
this.spawnDelay = (int) (-2.500 * this.guardCaptain.building.getRank() + 22.5) * 60;
if (this.isPet()) {
@@ -1547,12 +1552,12 @@ public class Mob extends AbstractIntelligenceAgent {
switch (this.behaviourType) {
case GuardCaptain:
this.agentType = AIAgentType.GUARDCAPTAIN;
this.spawnTime = 600;
this.spawnDelay = 600;
this.guardedCity = ZoneManager.getCityAtLocation(this.building.getLoc());
break;
case GuardWallArcher:
this.agentType = AIAgentType.GUARDWALLARCHER;
this.spawnTime = 450;
this.spawnDelay = 450;
this.guardedCity = ZoneManager.getCityAtLocation(this.building.getLoc());
break;
}
@@ -1883,4 +1888,15 @@ public class Mob extends AbstractIntelligenceAgent {
lock.writeLock().unlock();
}
}
@Override
public long getDelay(@NotNull TimeUnit unit) {
long timeRemaining = this.respawnTime - System.currentTimeMillis();
return unit.convert(timeRemaining, TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(@NotNull Delayed o) {
return toIntExact(this.respawnTime - ((Mob) o).respawnTime);
}
}