forked from MagicBane/Server
Mobile implements Delayed interface
This commit is contained in:
@@ -42,7 +42,7 @@ public class dbMobHandler extends dbHandlerBase {
|
||||
preparedStatement.setFloat(6, toAdd.bindLoc.z);
|
||||
preparedStatement.setInt(7, 0);
|
||||
preparedStatement.setFloat(8, toAdd.spawnRadius);
|
||||
preparedStatement.setInt(9, toAdd.spawnTime);
|
||||
preparedStatement.setInt(9, toAdd.spawnDelay);
|
||||
preparedStatement.setInt(10, toAdd.contractUUID);
|
||||
preparedStatement.setInt(11, toAdd.buildingUUID);
|
||||
preparedStatement.setInt(12, toAdd.level);
|
||||
|
||||
@@ -813,7 +813,7 @@ public class MobAI {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (System.currentTimeMillis() > (aiAgent.deathTime + (aiAgent.spawnTime * 1000))) {
|
||||
} else if (System.currentTimeMillis() > (aiAgent.deathTime + (aiAgent.spawnDelay * 1000))) {
|
||||
|
||||
if (Zone.respawnQue.contains(aiAgent) == false) {
|
||||
Zone.respawnQue.add(aiAgent);
|
||||
|
||||
@@ -727,9 +727,9 @@ public class ManageCityAssetsMsg extends ClientNetMsg {
|
||||
|
||||
if (!npcHire.isAlive()) {
|
||||
writer.put((byte) 1); // 1 SHOWs respawning
|
||||
int respawnRemaining = (int) (((Mob) npcHire).deathTime + ((Mob) npcHire).spawnTime * 1000 - System.currentTimeMillis()) / 1000;
|
||||
int respawnRemaining = (int) (((Mob) npcHire).deathTime + ((Mob) npcHire).spawnDelay * 1000 - System.currentTimeMillis()) / 1000;
|
||||
writer.putInt(respawnRemaining); // Seconds in respawn remaining.
|
||||
writer.putInt(((Mob) npcHire).spawnTime); // max seconds for respawn
|
||||
writer.putInt(((Mob) npcHire).spawnDelay); // max seconds for respawn
|
||||
} else
|
||||
writer.put((byte) 0);
|
||||
|
||||
|
||||
@@ -364,14 +364,14 @@ public class ManageNPCMsg extends ClientNetMsg {
|
||||
writer.putInt(1);
|
||||
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
long upgradeTime = (mob.deathTime + (mob.spawnTime * 1000)) / 1000;
|
||||
long upgradeTime = (mob.deathTime + (mob.spawnDelay * 1000)) / 1000;
|
||||
long timeLife = upgradeTime - curTime;
|
||||
|
||||
if (upgradeTime * 1000 > System.currentTimeMillis()) {
|
||||
if (mob.guardCaptain.isAlive()) {
|
||||
writer.put((byte) 0);//shows respawning timer
|
||||
writer.putInt(mob.spawnTime);
|
||||
writer.putInt(mob.spawnTime);
|
||||
writer.putInt(mob.spawnDelay);
|
||||
writer.putInt(mob.spawnDelay);
|
||||
writer.putInt((int) timeLife); //time remaining for mob that is dead
|
||||
writer.putInt(0);
|
||||
writer.put((byte) 0);
|
||||
@@ -688,14 +688,14 @@ public class ManageNPCMsg extends ClientNetMsg {
|
||||
writer.putInt(1);
|
||||
|
||||
long curTime = System.currentTimeMillis() / 1000;
|
||||
long upgradeTime = (mob.deathTime + (mob.spawnTime * 1000)) / 1000;
|
||||
long upgradeTime = (mob.deathTime + (mob.spawnDelay * 1000)) / 1000;
|
||||
long timeLife = upgradeTime - curTime;
|
||||
|
||||
if (upgradeTime * 1000 > System.currentTimeMillis()) {
|
||||
if (mob.guardCaptain.isAlive()) {
|
||||
writer.put((byte) 0);//shows respawning timer
|
||||
writer.putInt(mob.spawnTime);
|
||||
writer.putInt(mob.spawnTime);
|
||||
writer.putInt(mob.spawnDelay);
|
||||
writer.putInt(mob.spawnDelay);
|
||||
writer.putInt((int) timeLife); //time remaining for mob that is dead
|
||||
writer.putInt(0);
|
||||
writer.put((byte) 0);
|
||||
|
||||
+28
-12
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user