mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-10 10:20:41 -07:00
Disconnecting while dying no longer results in improper death handling in safe zones (e.g. fight caves)
This commit is contained in:
parent
0546d7e8b9
commit
b6fa73d94c
4 changed files with 12 additions and 10 deletions
|
|
@ -353,8 +353,11 @@ public class Player extends Entity {
|
|||
public void clear(boolean force) {
|
||||
if (!isActive())
|
||||
return;
|
||||
if (force) {
|
||||
if (!force) {
|
||||
Repository.getDisconnectionQueue().remove(getName());
|
||||
Repository.getDisconnectionQueue().add(this, true);
|
||||
details.save();
|
||||
return;
|
||||
}
|
||||
if (!isArtificial())
|
||||
GameWorld.getLogoutListeners().forEach((it) -> it.logout(this));
|
||||
|
|
@ -372,9 +375,7 @@ public class Player extends Entity {
|
|||
getZoneMonitor().clear();
|
||||
HouseManager.leave(this);
|
||||
UpdateSequence.getRenderablePlayers().remove(this);
|
||||
details.save();
|
||||
sendLogoutEvents();
|
||||
Repository.getDisconnectionQueue().add(this);
|
||||
checkForWealthUpdate(true);
|
||||
}
|
||||
|
||||
|
|
@ -913,7 +914,7 @@ public class Player extends Entity {
|
|||
* @return {@code True} if so.
|
||||
*/
|
||||
public boolean allowRemoval() {
|
||||
return inCombat() || getSkills().getLifepoints() < 1 || DeathTask.isDead(this);
|
||||
return !(inCombat() || getSkills().getLifepoints() < 1 || DeathTask.isDead(this));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -48,12 +48,12 @@ class DisconnectionQueue {
|
|||
*/
|
||||
private fun finish(entry: DisconnectionEntry?, force: Boolean): Boolean {
|
||||
val player = entry!!.player
|
||||
if (!force && player.allowRemoval()) {
|
||||
if (!force && !player.allowRemoval()) {
|
||||
return false
|
||||
}
|
||||
if (entry.isClear) {
|
||||
log(this::class.java, Log.FINE, "Clearing player...")
|
||||
player.clear()
|
||||
player.clear(true)
|
||||
}
|
||||
Repository.removePlayer(player)
|
||||
log(this::class.java, Log.INFO, "Player cleared. Removed ${player.details.username}")
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public class IoEventHandler {
|
|||
try {
|
||||
if (channel.read(buffer) == -1) {
|
||||
if (session != null && session.getPlayer() != null) {
|
||||
Repository.getDisconnectionQueue().add(session.getPlayer());
|
||||
Repository.getDisconnectionQueue().add(session.getPlayer(), false);
|
||||
}
|
||||
key.cancel();
|
||||
return;
|
||||
|
|
@ -71,7 +71,7 @@ public class IoEventHandler {
|
|||
if (e.getMessage().contains("reset by peer") && session != null) {
|
||||
session.disconnect();
|
||||
if (session.getPlayer() != null)
|
||||
session.getPlayer().clear(true);
|
||||
Repository.getDisconnectionQueue().add(session.getPlayer(), false);
|
||||
} else {
|
||||
key.cancel();
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,9 @@ class MajorUpdateWorker {
|
|||
fun handleTickActions(skipPulseUpdate: Boolean = false) {
|
||||
PacketProcessor.processQueue()
|
||||
|
||||
//disconnect all players waiting to be disconnected
|
||||
Repository.disconnectionQueue.update()
|
||||
|
||||
if (!skipPulseUpdate) {
|
||||
GameWorld.Pulser.updateAll()
|
||||
}
|
||||
|
|
@ -98,8 +101,6 @@ class MajorUpdateWorker {
|
|||
}
|
||||
//increment global ticks variable
|
||||
GameWorld.pulse()
|
||||
//disconnect all players waiting to be disconnected
|
||||
Repository.disconnectionQueue.update()
|
||||
//tick all manager plugins
|
||||
Managers.tick()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue