Rename and clean up MapleDoor

This commit is contained in:
P0nk
2021-09-09 22:18:16 +02:00
parent ca4162cb82
commit 584e626ed5
5 changed files with 60 additions and 61 deletions

View File

@@ -194,7 +194,7 @@ public class Character extends AbstractCharacterObject {
private final EnumMap<Disease, Pair<DiseaseValueHolder, MobSkill>> diseases = new EnumMap<>(Disease.class); private final EnumMap<Disease, Pair<DiseaseValueHolder, MobSkill>> diseases = new EnumMap<>(Disease.class);
private byte[] m_aQuickslotLoaded; private byte[] m_aQuickslotLoaded;
private QuickslotBinding m_pQuickslotKeyMapped; private QuickslotBinding m_pQuickslotKeyMapped;
private MapleDoor pdoor = null; private Door pdoor = null;
private Map<MapleQuest, Long> questExpirations = new LinkedHashMap<>(); private Map<MapleQuest, Long> questExpirations = new LinkedHashMap<>();
private ScheduledFuture<?> dragonBloodSchedule; private ScheduledFuture<?> dragonBloodSchedule;
private ScheduledFuture<?> hpDecreaseTask; private ScheduledFuture<?> hpDecreaseTask;
@@ -889,7 +889,7 @@ public class Character extends AbstractCharacterObject {
} }
public boolean canDoor() { public boolean canDoor() {
MapleDoor door = getPlayerDoor(); Door door = getPlayerDoor();
return door == null || (door.isActive() && door.getElapsedDeployTime() > 5000); return door == null || (door.isActive() && door.getElapsedDeployTime() > 5000);
} }
@@ -1523,7 +1523,7 @@ public class Character extends AbstractCharacterObject {
} }
private static void addPartyPlayerDoor(Character target) { private static void addPartyPlayerDoor(Character target) {
MapleDoor targetDoor = target.getPlayerDoor(); Door targetDoor = target.getPlayerDoor();
if (targetDoor != null) { if (targetDoor != null) {
target.applyPartyDoor(targetDoor, true); target.applyPartyDoor(targetDoor, true);
} }
@@ -1540,18 +1540,18 @@ public class Character extends AbstractCharacterObject {
addPartyPlayerDoor(target); addPartyPlayerDoor(target);
} }
Map<Integer, MapleDoor> partyDoors = null; Map<Integer, Door> partyDoors = null;
if (!partyMembers.isEmpty()) { if (!partyMembers.isEmpty()) {
partyDoors = party.getDoors(); partyDoors = party.getDoors();
for (Character pchr : partyMembers) { for (Character pchr : partyMembers) {
MapleDoor door = partyDoors.get(pchr.getId()); Door door = partyDoors.get(pchr.getId());
if (door != null) { if (door != null) {
door.updateDoorPortal(pchr); door.updateDoorPortal(pchr);
} }
} }
for (MapleDoor door : partyDoors.values()) { for (Door door : partyDoors.values()) {
for (Character pchar : partyMembers) { for (Character pchar : partyMembers) {
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
mdo.sendDestroyData(pchar.getClient(), true); mdo.sendDestroyData(pchar.getClient(), true);
@@ -1560,8 +1560,8 @@ public class Character extends AbstractCharacterObject {
} }
if (partyLeaver != null) { if (partyLeaver != null) {
Collection<MapleDoor> leaverDoors = partyLeaver.getDoors(); Collection<Door> leaverDoors = partyLeaver.getDoors();
for (MapleDoor door : leaverDoors) { for (Door door : leaverDoors) {
for (Character pchar : partyMembers) { for (Character pchar : partyMembers) {
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
mdo.sendDestroyData(pchar.getClient(), true); mdo.sendDestroyData(pchar.getClient(), true);
@@ -1572,7 +1572,7 @@ public class Character extends AbstractCharacterObject {
List<Integer> histMembers = party.getMembersSortedByHistory(); List<Integer> histMembers = party.getMembersSortedByHistory();
for (Integer chrid : histMembers) { for (Integer chrid : histMembers) {
MapleDoor door = partyDoors.get(chrid); Door door = partyDoors.get(chrid);
if (door != null) { if (door != null) {
for (Character pchar : partyMembers) { for (Character pchar : partyMembers) {
@@ -1585,23 +1585,23 @@ public class Character extends AbstractCharacterObject {
} }
if (partyLeaver != null) { if (partyLeaver != null) {
Collection<MapleDoor> leaverDoors = partyLeaver.getDoors(); Collection<Door> leaverDoors = partyLeaver.getDoors();
if (partyDoors != null) { if (partyDoors != null) {
for (MapleDoor door : partyDoors.values()) { for (Door door : partyDoors.values()) {
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
mdo.sendDestroyData(partyLeaver.getClient(), true); mdo.sendDestroyData(partyLeaver.getClient(), true);
partyLeaver.removeVisibleMapObject(mdo); partyLeaver.removeVisibleMapObject(mdo);
} }
} }
for (MapleDoor door : leaverDoors) { for (Door door : leaverDoors) {
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
mdo.sendDestroyData(partyLeaver.getClient(), true); mdo.sendDestroyData(partyLeaver.getClient(), true);
partyLeaver.removeVisibleMapObject(mdo); partyLeaver.removeVisibleMapObject(mdo);
} }
for (MapleDoor door : leaverDoors) { for (Door door : leaverDoors) {
door.updateDoorPortal(partyLeaver); door.updateDoorPortal(partyLeaver);
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
@@ -3775,7 +3775,7 @@ public class Character extends AbstractCharacterObject {
effLock.lock(); effLock.lock();
try { try {
if (!hasBuffFromSourceid(Priest.MYSTIC_DOOR)) { if (!hasBuffFromSourceid(Priest.MYSTIC_DOOR)) {
MapleDoor.attemptRemoveDoor(this); Door.attemptRemoveDoor(this);
} }
} finally { } finally {
effLock.unlock(); effLock.unlock();
@@ -4672,16 +4672,16 @@ public class Character extends AbstractCharacterObject {
return dojoStage; return dojoStage;
} }
public Collection<MapleDoor> getDoors() { public Collection<Door> getDoors() {
prtLock.lock(); prtLock.lock();
try { try {
return (party != null ? Collections.unmodifiableCollection(party.getDoors().values()) : (pdoor != null ? Collections.singleton(pdoor) : new LinkedHashSet<MapleDoor>())); return (party != null ? Collections.unmodifiableCollection(party.getDoors().values()) : (pdoor != null ? Collections.singleton(pdoor) : new LinkedHashSet<Door>()));
} finally { } finally {
prtLock.unlock(); prtLock.unlock();
} }
} }
public MapleDoor getPlayerDoor() { public Door getPlayerDoor() {
prtLock.lock(); prtLock.lock();
try { try {
return pdoor; return pdoor;
@@ -4690,8 +4690,8 @@ public class Character extends AbstractCharacterObject {
} }
} }
public MapleDoor getMainTownDoor() { public Door getMainTownDoor() {
for (MapleDoor door : getDoors()) { for (Door door : getDoors()) {
if (door.getTownPortal().getId() == 0x80) { if (door.getTownPortal().getId() == 0x80) {
return door; return door;
} }
@@ -4700,7 +4700,7 @@ public class Character extends AbstractCharacterObject {
return null; return null;
} }
public void applyPartyDoor(MapleDoor door, boolean partyUpdate) { public void applyPartyDoor(Door door, boolean partyUpdate) {
Party chrParty; Party chrParty;
prtLock.lock(); prtLock.lock();
try { try {
@@ -4719,8 +4719,8 @@ public class Character extends AbstractCharacterObject {
silentPartyUpdateInternal(chrParty); silentPartyUpdateInternal(chrParty);
} }
public MapleDoor removePartyDoor(boolean partyUpdate) { public Door removePartyDoor(boolean partyUpdate) {
MapleDoor ret = null; Door ret = null;
Party chrParty; Party chrParty;
prtLock.lock(); prtLock.lock();

View File

@@ -31,7 +31,7 @@ import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.coordinator.matchchecker.MatchCheckerCoordinator; import net.server.coordinator.matchchecker.MatchCheckerCoordinator;
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType; import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
import scripting.event.EventInstanceManager; import scripting.event.EventInstanceManager;
import server.maps.MapleDoor; import server.maps.Door;
import server.maps.MapleMap; import server.maps.MapleMap;
import server.partyquest.MonsterCarnival; import server.partyquest.MonsterCarnival;
import tools.PacketCreator; import tools.PacketCreator;
@@ -50,7 +50,7 @@ public class Party {
private final Map<Integer, Integer> histMembers = new HashMap<>(); private final Map<Integer, Integer> histMembers = new HashMap<>();
private int nextEntry = 0; private int nextEntry = 0;
private final Map<Integer, MapleDoor> doors = new HashMap<>(); private final Map<Integer, Door> doors = new HashMap<>();
private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.PARTY, true); private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.PARTY, true);
@@ -234,7 +234,7 @@ public class Party {
return slot; return slot;
} }
public void addDoor(Integer owner, MapleDoor door) { public void addDoor(Integer owner, Door door) {
lock.lock(); lock.lock();
try { try {
this.doors.put(owner, door); this.doors.put(owner, door);
@@ -252,7 +252,7 @@ public class Party {
} }
} }
public Map<Integer, MapleDoor> getDoors() { public Map<Integer, Door> getDoors() {
lock.lock(); lock.lock();
try { try {
return Collections.unmodifiableMap(doors); return Collections.unmodifiableMap(doors);

View File

@@ -1007,7 +1007,7 @@ public class MapleStatEffect {
y = applyto.getMap().getGroundBelow(applyto.getPosition()).y; // thanks Lame for pointing out unusual cases of doors sending players on ground below y = applyto.getMap().getGroundBelow(applyto.getPosition()).y; // thanks Lame for pointing out unusual cases of doors sending players on ground below
} }
Point doorPosition = new Point(applyto.getPosition().x, y); Point doorPosition = new Point(applyto.getPosition().x, y);
MapleDoor door = new MapleDoor(applyto, doorPosition); Door door = new Door(applyto, doorPosition);
if (door.getOwnerId() >= 0) { if (door.getOwnerId() >= 0) {
applyto.applyPartyDoor(door, false); applyto.applyPartyDoor(door, false);

View File

@@ -31,38 +31,37 @@ import java.awt.*;
import java.util.Collection; import java.util.Collection;
/** /**
*
* @author Matze * @author Matze
* @author Ronan * @author Ronan
*/ */
public class MapleDoor { public class Door {
private int ownerId; private int ownerId;
private MapleMap town; private MapleMap town;
private MaplePortal townPortal; private MaplePortal townPortal;
private MapleMap target; private final MapleMap target;
private Pair<String, Integer> posStatus = null; private Pair<String, Integer> posStatus = null;
private long deployTime; private long deployTime;
private boolean active; private boolean active;
private MapleDoorObject townDoor; private MapleDoorObject townDoor;
private MapleDoorObject areaDoor; private MapleDoorObject areaDoor;
public MapleDoor(Character owner, Point targetPosition) { public Door(Character owner, Point targetPosition) {
this.ownerId = owner.getId(); this.ownerId = owner.getId();
this.target = owner.getMap(); this.target = owner.getMap();
if(target.canDeployDoor(targetPosition)) { if (target.canDeployDoor(targetPosition)) {
if(YamlConfig.config.server.USE_ENFORCE_MDOOR_POSITION) { if (YamlConfig.config.server.USE_ENFORCE_MDOOR_POSITION) {
posStatus = target.getDoorPositionStatus(targetPosition); posStatus = target.getDoorPositionStatus(targetPosition);
} }
if(posStatus == null) { if (posStatus == null) {
this.town = this.target.getReturnMap(); this.town = this.target.getReturnMap();
this.townPortal = getTownDoorPortal(owner.getDoorSlot()); this.townPortal = getTownDoorPortal(owner.getDoorSlot());
this.deployTime = System.currentTimeMillis(); this.deployTime = System.currentTimeMillis();
this.active = true; this.active = true;
if(townPortal != null) { if (townPortal != null) {
this.areaDoor = new MapleDoorObject(ownerId, town, target, townPortal.getId(), targetPosition, townPortal.getPosition()); this.areaDoor = new MapleDoorObject(ownerId, town, target, townPortal.getId(), targetPosition, townPortal.getPosition());
this.townDoor = new MapleDoorObject(ownerId, target, town, -1, townPortal.getPosition(), targetPosition); this.townDoor = new MapleDoorObject(ownerId, target, town, -1, townPortal.getPosition(), targetPosition);
@@ -78,17 +77,17 @@ public class MapleDoor {
this.ownerId = -2; this.ownerId = -2;
} }
} }
public void updateDoorPortal(Character owner) { public void updateDoorPortal(Character owner) {
int slot = owner.fetchDoorSlot(); int slot = owner.fetchDoorSlot();
MaplePortal nextTownPortal = getTownDoorPortal(slot); MaplePortal nextTownPortal = getTownDoorPortal(slot);
if(nextTownPortal != null) { if (nextTownPortal != null) {
townPortal = nextTownPortal; townPortal = nextTownPortal;
areaDoor.update(nextTownPortal.getId(), nextTownPortal.getPosition()); areaDoor.update(nextTownPortal.getId(), nextTownPortal.getPosition());
} }
} }
private void broadcastRemoveDoor(Character owner) { private void broadcastRemoveDoor(Character owner) {
MapleDoorObject areaDoor = this.getAreaDoor(); MapleDoorObject areaDoor = this.getAreaDoor();
MapleDoorObject townDoor = this.getTownDoor(); MapleDoorObject townDoor = this.getTownDoor();
@@ -98,7 +97,7 @@ public class MapleDoor {
Collection<Character> targetChars = target.getCharacters(); Collection<Character> targetChars = target.getCharacters();
Collection<Character> townChars = town.getCharacters(); Collection<Character> townChars = town.getCharacters();
target.removeMapObject(areaDoor); target.removeMapObject(areaDoor);
town.removeMapObject(townDoor); town.removeMapObject(townDoor);
@@ -111,12 +110,12 @@ public class MapleDoor {
townDoor.sendDestroyData(chr.getClient()); townDoor.sendDestroyData(chr.getClient());
chr.removeVisibleMapObject(townDoor); chr.removeVisibleMapObject(townDoor);
} }
owner.removePartyDoor(false); owner.removePartyDoor(false);
if (this.getTownPortal().getId() == 0x80) { if (this.getTownPortal().getId() == 0x80) {
for (Character chr : townChars) { for (Character chr : townChars) {
MapleDoor door = chr.getMainTownDoor(); Door door = chr.getMainTownDoor();
if (door != null) { if (door != null) {
townDoor.sendSpawnData(chr.getClient()); townDoor.sendSpawnData(chr.getClient());
chr.addVisibleMapObject(townDoor); chr.addVisibleMapObject(townDoor);
@@ -124,14 +123,14 @@ public class MapleDoor {
} }
} }
} }
public static void attemptRemoveDoor(final Character owner) { public static void attemptRemoveDoor(final Character owner) {
final MapleDoor destroyDoor = owner.getPlayerDoor(); final Door destroyDoor = owner.getPlayerDoor();
if (destroyDoor != null && destroyDoor.dispose()) { if (destroyDoor != null && destroyDoor.dispose()) {
long effectTimeLeft = 3000 - destroyDoor.getElapsedDeployTime(); // portal deployment effect duration long effectTimeLeft = 3000 - destroyDoor.getElapsedDeployTime(); // portal deployment effect duration
if (effectTimeLeft > 0) { if (effectTimeLeft > 0) {
MapleMap town = destroyDoor.getTown(); MapleMap town = destroyDoor.getTown();
OverallService service = (OverallService) town.getChannelServer().getServiceAccess(ChannelServices.OVERALL); OverallService service = (OverallService) town.getChannelServer().getServiceAccess(ChannelServices.OVERALL);
service.registerOverallAction(town.getId(), () -> { service.registerOverallAction(town.getId(), () -> {
destroyDoor.broadcastRemoveDoor(owner); // thanks BHB88 for noticing doors crashing players when instantly cancelling buff destroyDoor.broadcastRemoveDoor(owner); // thanks BHB88 for noticing doors crashing players when instantly cancelling buff
@@ -141,11 +140,11 @@ public class MapleDoor {
} }
} }
} }
private MaplePortal getTownDoorPortal(int doorid) { private MaplePortal getTownDoorPortal(int doorid) {
return town.getDoorPortal(doorid); return town.getDoorPortal(doorid);
} }
public int getOwnerId() { public int getOwnerId() {
return ownerId; return ownerId;
} }
@@ -153,11 +152,11 @@ public class MapleDoor {
public MapleDoorObject getTownDoor() { public MapleDoorObject getTownDoor() {
return townDoor; return townDoor;
} }
public MapleDoorObject getAreaDoor() { public MapleDoorObject getAreaDoor() {
return areaDoor; return areaDoor;
} }
public MapleMap getTown() { public MapleMap getTown() {
return town; return town;
} }
@@ -173,11 +172,11 @@ public class MapleDoor {
public Pair<String, Integer> getDoorStatus() { public Pair<String, Integer> getDoorStatus() {
return posStatus; return posStatus;
} }
public long getElapsedDeployTime() { public long getElapsedDeployTime() {
return System.currentTimeMillis() - deployTime; return System.currentTimeMillis() - deployTime;
} }
private boolean dispose() { private boolean dispose() {
if (active) { if (active) {
active = false; active = false;
@@ -186,7 +185,7 @@ public class MapleDoor {
return false; return false;
} }
} }
public boolean isActive() { public boolean isActive() {
return active; return active;
} }

View File

@@ -3687,9 +3687,9 @@ public class PacketCreator {
p.writeByte(8); p.writeByte(8);
p.writeInt(party.getId()); p.writeInt(party.getId());
Map<Integer, MapleDoor> partyDoors = party.getDoors(); Map<Integer, Door> partyDoors = party.getDoors();
if (partyDoors.size() > 0) { if (partyDoors.size() > 0) {
MapleDoor door = partyDoors.get(partycharid); Door door = partyDoors.get(partycharid);
if (door != null) { if (door != null) {
MapleDoorObject mdo = door.getAreaDoor(); MapleDoorObject mdo = door.getAreaDoor();
@@ -3797,11 +3797,11 @@ public class PacketCreator {
} }
} }
Map<Integer, MapleDoor> partyDoors = party.getDoors(); Map<Integer, Door> partyDoors = party.getDoors();
for (PartyCharacter partychar : partymembers) { for (PartyCharacter partychar : partymembers) {
if (partychar.getChannel() == forchannel && !leaving) { if (partychar.getChannel() == forchannel && !leaving) {
if (partyDoors.size() > 0) { if (partyDoors.size() > 0) {
MapleDoor door = partyDoors.get(partychar.getId()); Door door = partyDoors.get(partychar.getId());
if (door != null) { if (door != null) {
MapleDoorObject mdo = door.getTownDoor(); MapleDoorObject mdo = door.getTownDoor();
p.writeInt(mdo.getTown().getId()); p.writeInt(mdo.getTown().getId());