Change channel transition patch

Solved an issue where players were being unable to return to the game once changing channels.
This commit is contained in:
ronancpl
2019-03-28 17:09:18 -03:00
parent 16deacb426
commit 0b6951527d
6 changed files with 14 additions and 4 deletions

View File

@@ -1769,3 +1769,6 @@ Corrigido bug na CPQ em tempo estendido não mostrando devidamente o efeito visu
27 Março 2019, 27 Março 2019,
Corrigido possibilidade de bloqueio de volta do jogador ao jogo, ao utilizar o sistema de MTS/Cash Shop. Problema ocorria devido a mudanças concorrentes de login states ao fazer a transição de volta ao jogo. Corrigido possibilidade de bloqueio de volta do jogador ao jogo, ao utilizar o sistema de MTS/Cash Shop. Problema ocorria devido a mudanças concorrentes de login states ao fazer a transição de volta ao jogo.
28 Março 2019,
Corrigido possibilidade de congelamento de tela ao tentar trocar de canais. Problema ocorria devido a mudanças concorrentes de login states ao fazer a transição de volta ao jogo.

View File

@@ -487,7 +487,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
} }
public void setAwayFromChannelWorld() { public void setAwayFromChannelWorld() {
client.getSession().setAttribute(MapleClient.CLIENT_CASH_SHOP);
setAwayFromChannelWorld(false); setAwayFromChannelWorld(false);
} }
@@ -505,6 +504,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
} }
} }
public void setSessionTransitionState() {
client.getSession().setAttribute(MapleClient.CLIENT_TRANSITION);
}
public long getPetLootCd() { public long getPetLootCd() {
return petLootCd; return petLootCd;
} }

View File

@@ -91,7 +91,7 @@ public class MapleClient {
public static final String CLIENT_HWID = "HWID"; public static final String CLIENT_HWID = "HWID";
public static final String CLIENT_NIBBLEHWID = "HWID2"; public static final String CLIENT_NIBBLEHWID = "HWID2";
public static final String CLIENT_REMOTE_ADDRESS = "REMOTE_IP"; public static final String CLIENT_REMOTE_ADDRESS = "REMOTE_IP";
public static final String CLIENT_CASH_SHOP = "CASH_SHOP"; public static final String CLIENT_TRANSITION = "TRANSITION";
private MapleAESOFB send; private MapleAESOFB send;
private MapleAESOFB receive; private MapleAESOFB receive;
private final IoSession session; private final IoSession session;
@@ -1474,6 +1474,7 @@ public class MapleClient {
player.unregisterChairBuff(); player.unregisterChairBuff();
server.getPlayerBuffStorage().addBuffsToStorage(player.getId(), player.getAllBuffs()); server.getPlayerBuffStorage().addBuffsToStorage(player.getId(), player.getAllBuffs());
server.getPlayerBuffStorage().addDiseasesToStorage(player.getId(), player.getAllDiseases()); server.getPlayerBuffStorage().addDiseasesToStorage(player.getId(), player.getAllDiseases());
player.setSessionTransitionState();
player.setDisconnectedFromChannelWorld(); player.setDisconnectedFromChannelWorld();
player.notifyMapTransferToPartner(-1); player.notifyMapTransferToPartner(-1);
player.removeIncomingInvites(); player.removeIncomingInvites();

View File

@@ -150,7 +150,8 @@ public class MapleServerHandler extends IoHandlerAdapter {
MapleClient client = (MapleClient) session.getAttribute(MapleClient.CLIENT_KEY); MapleClient client = (MapleClient) session.getAttribute(MapleClient.CLIENT_KEY);
if (client != null) { if (client != null) {
try { try {
if (!session.containsAttribute(MapleClient.CLIENT_CASH_SHOP)) { // client freeze issues on session transition states found thanks to yolinlin, Omo Oppa, Nozphex
if (!session.containsAttribute(MapleClient.CLIENT_TRANSITION)) {
client.disconnect(false, false); client.disconnect(false, false);
} }
} catch (Throwable t) { } catch (Throwable t) {

View File

@@ -65,6 +65,7 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler {
mc.unregisterChairBuff(); mc.unregisterChairBuff();
Server.getInstance().getPlayerBuffStorage().addBuffsToStorage(mc.getId(), mc.getAllBuffs()); Server.getInstance().getPlayerBuffStorage().addBuffsToStorage(mc.getId(), mc.getAllBuffs());
Server.getInstance().getPlayerBuffStorage().addDiseasesToStorage(mc.getId(), mc.getAllDiseases()); Server.getInstance().getPlayerBuffStorage().addDiseasesToStorage(mc.getId(), mc.getAllDiseases());
mc.setSessionTransitionState();
mc.setAwayFromChannelWorld(); mc.setAwayFromChannelWorld();
mc.notifyMapTransferToPartner(-1); mc.notifyMapTransferToPartner(-1);
mc.removeIncomingInvites(); mc.removeIncomingInvites();

View File

@@ -91,6 +91,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
chr.unregisterChairBuff(); chr.unregisterChairBuff();
Server.getInstance().getPlayerBuffStorage().addBuffsToStorage(chr.getId(), chr.getAllBuffs()); Server.getInstance().getPlayerBuffStorage().addBuffsToStorage(chr.getId(), chr.getAllBuffs());
Server.getInstance().getPlayerBuffStorage().addDiseasesToStorage(chr.getId(), chr.getAllDiseases()); Server.getInstance().getPlayerBuffStorage().addDiseasesToStorage(chr.getId(), chr.getAllDiseases());
chr.setSessionTransitionState();
chr.setAwayFromChannelWorld(); chr.setAwayFromChannelWorld();
chr.notifyMapTransferToPartner(-1); chr.notifyMapTransferToPartner(-1);
chr.removeIncomingInvites(); chr.removeIncomingInvites();