Add per-arena setting clear-wave-leeway.
Introduces a new arena setting that changes the "emptiness check" for `clear-wave-before-next`, `clear-wave-before-boss`, and the final wave check, allowing for a customizable _leeway_. By default, the leeway is 0, which means the monster set has to be completely empty for the checks to pass. With a value of 2, the set may contain up to two monsters for the checks to pass, and so on. The leeway should help alleviate some of the issues some people have with their arena sessions when monsters "disappear" behind terrain or end up in hard-to-reach areas. This is by no means a real "solution" to the underlying problem, since the build-up of monsters in longer sessions will just result in the issue being pushed to later waves. We'll see if the setting leaves any additional customization to be desired and perhaps defer any such requests to the Sessions Rework. Closes #706
This commit is contained in:
@@ -42,6 +42,7 @@ public class MASpawnThread implements Runnable
|
||||
|
||||
private int playerCount, monsterLimit;
|
||||
private boolean waveClear, bossClear, preBossClear, wavesAsLevel;
|
||||
private int clearLeeway;
|
||||
private int waveInterval;
|
||||
private int nextWaveDelay;
|
||||
|
||||
@@ -76,6 +77,7 @@ public class MASpawnThread implements Runnable
|
||||
waveClear = arena.getSettings().getBoolean("clear-wave-before-next", false);
|
||||
bossClear = arena.getSettings().getBoolean("clear-boss-before-next", false);
|
||||
preBossClear = arena.getSettings().getBoolean("clear-wave-before-boss", false);
|
||||
clearLeeway = arena.getSettings().getInt("clear-wave-leeway", 0);
|
||||
wavesAsLevel = arena.getSettings().getBoolean("display-waves-as-level", false);
|
||||
waveInterval = arena.getSettings().getInt("wave-interval", 3);
|
||||
nextWaveDelay = arena.getSettings().getInt("next-wave-delay", 0);
|
||||
@@ -308,18 +310,18 @@ public class MASpawnThread implements Runnable
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for wave and pre boss clear
|
||||
if (waveClear && !monsterManager.getMonsters().isEmpty()) {
|
||||
// Check for wave clear
|
||||
if (waveClear && monsterManager.getMonsters().size() > clearLeeway) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for pre boss clear
|
||||
if (preBossClear && waveManager.getNext().getType() == WaveType.BOSS && !monsterManager.getMonsters().isEmpty()) {
|
||||
if (preBossClear && waveManager.getNext().getType() == WaveType.BOSS && monsterManager.getMonsters().size() > clearLeeway) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for final wave
|
||||
if (!monsterManager.getMonsters().isEmpty() && waveManager.getWaveNumber() == waveManager.getFinalWave()) {
|
||||
if (monsterManager.getMonsters().size() > clearLeeway && waveManager.getWaveNumber() == waveManager.getFinalWave()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ default-class: ''
|
||||
clear-wave-before-next: false
|
||||
clear-boss-before-next: false
|
||||
clear-wave-before-boss: false
|
||||
clear-wave-leeway: 0
|
||||
soft-restore: false
|
||||
soft-restore-drops: false
|
||||
require-empty-inv-join: false
|
||||
|
||||
Reference in New Issue
Block a user