Rename and clean up MapleMonsterAggroCoordinator

This commit is contained in:
P0nk
2021-09-09 21:32:52 +02:00
parent 4c803b62a8
commit e75139e5e6
3 changed files with 77 additions and 69 deletions

View File

@@ -36,21 +36,20 @@ import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
/**
*
* @author Ronan
*/
public class MapleMonsterAggroCoordinator {
public class MonsterAggroCoordinator {
private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO);
private MonitoredReentrantLock idleLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO_IDLE, true);
private final MonitoredReentrantLock idleLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MAP_AGGRO_IDLE, true);
private long lastStopTime = Server.getInstance().getCurrentTime();
private ScheduledFuture<?> aggroMonitor = null;
private Map<MapleMonster, Map<Integer, PlayerAggroEntry>> mobAggroEntries = new HashMap<>();
private Map<MapleMonster, List<PlayerAggroEntry>> mobSortedAggros = new HashMap<>();
private final Map<MapleMonster, Map<Integer, PlayerAggroEntry>> mobAggroEntries = new HashMap<>();
private final Map<MapleMonster, List<PlayerAggroEntry>> mobSortedAggros = new HashMap<>();
private Set<Integer> mapPuppetEntries = new HashSet<>();
private final Set<Integer> mapPuppetEntries = new HashSet<>();
private class PlayerAggroEntry {
protected int cid;
@@ -71,7 +70,9 @@ public class MapleMonsterAggroCoordinator {
public void stopAggroCoordinator() {
idleLock.lock();
try {
if (aggroMonitor == null) return;
if (aggroMonitor == null) {
return;
}
aggroMonitor.cancel(false);
aggroMonitor = null;
@@ -85,7 +86,9 @@ public class MapleMonsterAggroCoordinator {
public void startAggroCoordinator() {
idleLock.lock();
try {
if (aggroMonitor != null) return;
if (aggroMonitor != null) {
return;
}
aggroMonitor = TimerManager.getInstance().register(() -> {
runAggroUpdate(1);
@@ -142,7 +145,9 @@ public class MapleMonsterAggroCoordinator {
}
public void addAggroDamage(MapleMonster mob, int cid, int damage) { // assumption: should not trigger after dispose()
if (!mob.isAlive()) return;
if (!mob.isAlive()) {
return;
}
List<PlayerAggroEntry> sortedAggro = mobSortedAggros.get(mob);
Map<Integer, PlayerAggroEntry> mobAggro = mobAggroEntries.get(mob);
@@ -215,8 +220,11 @@ public class MapleMonsterAggroCoordinator {
for (PlayerAggroEntry pae : mobAggro.values()) {
if (expiredAfterUpdateEntryDamage(pae, deltaTime)) {
toRemove.add(pae.cid);
if (pae.entryRank > -1) toRemoveIdx.add(pae.entryRank);
else toRemoveByFetch.add(pae.cid);
if (pae.entryRank > -1) {
toRemoveIdx.add(pae.entryRank);
} else {
toRemoveByFetch.add(pae.cid);
}
}
}

View File

@@ -33,7 +33,7 @@ import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.channel.Channel;
import net.server.coordinator.world.MapleMonsterAggroCoordinator;
import net.server.coordinator.world.MonsterAggroCoordinator;
import net.server.services.task.channel.MobAnimationService;
import net.server.services.task.channel.MobClearSkillService;
import net.server.services.task.channel.MobStatusService;
@@ -1417,7 +1417,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
return map;
}
public MapleMonsterAggroCoordinator getMapAggroCoordinator() {
public MonsterAggroCoordinator getMapAggroCoordinator() {
return map.getAggroCoordinator();
}
@@ -1927,7 +1927,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
}
public void aggroAddPuppet(Character player) {
MapleMonsterAggroCoordinator mmac = map.getAggroCoordinator();
MonsterAggroCoordinator mmac = map.getAggroCoordinator();
mmac.addPuppetAggro(player);
aggroUpdatePuppetController(player);
@@ -1938,7 +1938,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
}
public void aggroRemovePuppet(Character player) {
MapleMonsterAggroCoordinator mmac = map.getAggroCoordinator();
MonsterAggroCoordinator mmac = map.getAggroCoordinator();
mmac.removePuppetAggro(player.getId());
aggroUpdatePuppetController(null);
@@ -1985,7 +1985,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
}
if (newController == null || !isCharacterPuppetInVicinity(newController)) {
MapleMonsterAggroCoordinator mmac = map.getAggroCoordinator();
MonsterAggroCoordinator mmac = map.getAggroCoordinator();
List<Integer> puppetOwners = mmac.getPuppetAggroList();
List<Integer> toRemovePuppets = new LinkedList<>();
@@ -2074,7 +2074,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
*
*/
public void aggroMonsterDamage(Character attacker, int damage) {
MapleMonsterAggroCoordinator mmac = this.getMapAggroCoordinator();
MonsterAggroCoordinator mmac = this.getMapAggroCoordinator();
mmac.addAggroDamage(this, attacker.getId(), damage);
Character chrController = this.getController(); // aggro based on DPS rather than first-come-first-served, now live after suggestions thanks to MedicOP, Thora, Vcoc

View File

@@ -44,7 +44,7 @@ import net.server.audit.locks.factory.MonitoredReadLockFactory;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.audit.locks.factory.MonitoredWriteLockFactory;
import net.server.channel.Channel;
import net.server.coordinator.world.MapleMonsterAggroCoordinator;
import net.server.coordinator.world.MonsterAggroCoordinator;
import net.server.services.task.channel.FaceExpressionService;
import net.server.services.task.channel.MobMistService;
import net.server.services.task.channel.OverallService;
@@ -130,7 +130,7 @@ public class MapleMap {
private int fieldType;
private int fieldLimit = 0;
private int mobCapacity = -1;
private MapleMonsterAggroCoordinator aggroMonitor = null; // aggroMonitor activity in sync with itemMonitor
private MonsterAggroCoordinator aggroMonitor = null; // aggroMonitor activity in sync with itemMonitor
private ScheduledFuture<?> itemMonitor = null;
private ScheduledFuture<?> expireItemsTask = null;
private ScheduledFuture<?> mobSpawnLootTask = null;
@@ -183,7 +183,7 @@ public class MapleMap {
objectRLock = MonitoredReadLockFactory.createLock(objectLock);
objectWLock = MonitoredWriteLockFactory.createLock(objectLock);
aggroMonitor = new MapleMonsterAggroCoordinator();
aggroMonitor = new MonsterAggroCoordinator();
}
public void setEventInstance(EventInstanceManager eim) {
@@ -3052,7 +3052,7 @@ public class MapleMap {
mapArea.setBounds(vrLeft, vrTop, vrRight - vrLeft, vrBottom - vrTop);
}
public MapleMonsterAggroCoordinator getAggroCoordinator() {
public MonsterAggroCoordinator getAggroCoordinator() {
return aggroMonitor;
}