Browse Source

Auto-leveling camp modifications

NovaTest
kevin 3 months ago
parent
commit
96387aa4f4
  1. 77
      src/engine/mobileAI/Threads/MobRespawnThread.java
  2. 2
      src/engine/objects/Zone.java
  3. 1
      src/engine/util/ZoneLevel.java

77
src/engine/mobileAI/Threads/MobRespawnThread.java

@ -26,7 +26,6 @@ import org.pmw.tinylog.Logger;
public class MobRespawnThread implements Runnable { public class MobRespawnThread implements Runnable {
public MobRespawnThread() { public MobRespawnThread() {
Logger.info(" MobRespawnThread thread has started!"); Logger.info(" MobRespawnThread thread has started!");
@ -35,9 +34,14 @@ public class MobRespawnThread implements Runnable {
@Override @Override
public void run() { public void run() {
long startTime = System.currentTimeMillis();
long rollingKeepFraction = (Zone.rollingAvgMobsAliveDepth - 1) / Zone.rollingAvgMobsAliveDepth;
long rollingAddFraction = 1 / Zone.rollingAvgMobsAliveDepth;
while (true) { while (true) {
try { try {
for (Zone zone : ZoneManager.getAllZones()) { for (Zone zone : ZoneManager.getAllZones()) {
/* /*
@ -51,53 +55,64 @@ public class MobRespawnThread implements Runnable {
} }
*/ */
int aliveCount = 0;
int deadCount = 0; int deadCount = 0;
for (Mob mob : zone.zoneMobSet) { for (Mob mob : zone.zoneMobSet) {
if (!mob.isAlive()) { if (mob.isAlive()) {
aliveCount = aliveCount + 1;
}
else {
deadCount = deadCount + 1; deadCount = deadCount + 1;
} }
} }
if (deadCount > Math.floor(zone.zoneMobSet.size() / 2.0)) { zone.rollingAvgMobsAlive =
if (zone.levelUpTimer == 0) { ((zone.rollingAvgMobsAlive * (Zone.rollingAvgMobsAliveDepth - 1) + aliveCount) / Zone.rollingAvgMobsAliveDepth);
zone.levelUpTimer = System.currentTimeMillis();
}
else if (zone.levelUpTimer + ZoneLevel.msTolevelUp < System.currentTimeMillis()) {
zone.setCampLvl(zone.getCampLvl() + 1);
zone.levelUpTimer = 0;
}
}
else if (deadCount == 0) {
if (zone.levelDownTimer == 0) { /*
zone.levelDownTimer = System.currentTimeMillis(); if (startTime + ZoneLevel.msDelayToCampLevel < System.currentTimeMillis()) {
} if (aliveCount > Math.floor(zone.zoneMobSet.size() / 2.0)) {
else if (zone.levelDownTimer + ZoneLevel.msToLevelDown < System.currentTimeMillis()) { if (zone.levelUpTimer == 0) {
if (zone.getCampLvl() > 0) { zone.levelUpTimer = System.currentTimeMillis();
} else if (zone.levelUpTimer + ZoneLevel.msTolevelUp < System.currentTimeMillis()) {
zone.setCampLvl(zone.getCampLvl() + 1); zone.setCampLvl(zone.getCampLvl() + 1);
zone.levelDownTimer = 0; zone.levelUpTimer = 0;
} }
} else if (aliveCount == 0) {
if (zone.levelDownTimer == 0) {
zone.levelDownTimer = System.currentTimeMillis();
} else if (zone.levelDownTimer + ZoneLevel.msToLevelDown < System.currentTimeMillis()) {
if (zone.getCampLvl() > 0) {
zone.setCampLvl(zone.getCampLvl() + 1);
zone.levelDownTimer = 0;
}
}
} else {
zone.levelUpTimer = 0;
zone.levelDownTimer = 0;
} }
} }
else { */
zone.levelUpTimer = 0; }
zone.levelDownTimer = 0;
}
if (zone.respawnQue.isEmpty() == false && zone.lastRespawn + 100 < System.currentTimeMillis()) { // --------------------------------------------------------------------------------------------------------------------
// Manage mob respawn
// --------------------------------------------------------------------------------------------------------------------
if (!Zone.respawnQue.isEmpty() && Zone.lastRespawn + 100 < System.currentTimeMillis()) {
Mob respawner = zone.respawnQue.iterator().next(); Mob respawner = Zone.respawnQue.iterator().next();
if (respawner == null) if (respawner == null)
continue; continue;
respawner.respawn(); respawner.respawn();
zone.respawnQue.remove(respawner); Zone.respawnQue.remove(respawner);
zone.lastRespawn = System.currentTimeMillis(); Zone.lastRespawn = System.currentTimeMillis();
}
} }
} catch (Exception e) { } catch (Exception e) {
Logger.error(e); Logger.error(e);
} }

2
src/engine/objects/Zone.java

@ -68,6 +68,8 @@ public class Zone extends AbstractGameObject {
private int campLvl = 0; private int campLvl = 0;
public long levelUpTimer = 0; public long levelUpTimer = 0;
public long levelDownTimer = 0; public long levelDownTimer = 0;
public int rollingAvgMobsAlive = 0;
public static final int rollingAvgMobsAliveDepth = 100;
/** /**
* ResultSet Constructor * ResultSet Constructor

1
src/engine/util/ZoneLevel.java

@ -16,6 +16,7 @@ public class ZoneLevel {
public static final int queueLengthToLevelUp = 5; public static final int queueLengthToLevelUp = 5;
public static final int msToLevelDown = 60 * 1000; public static final int msToLevelDown = 60 * 1000;
public static final int msTolevelUp = 60 * 1000; public static final int msTolevelUp = 60 * 1000;
public static final long msDelayToCampLevel = 60 * 1000;
private static final String[] nameMap = private static final String[] nameMap =
{ {

Loading…
Cancel
Save