Move some Client#forceDisconnect calls to TransitionService

This commit is contained in:
P0nk
2023-08-11 22:00:33 +02:00
parent cd75e85bec
commit f33df59f49
7 changed files with 53 additions and 27 deletions

View File

@@ -21,13 +21,19 @@
*/
package net.server.handlers.login;
import client.Character;
import client.Client;
import client.DefaultDates;
import config.YamlConfig;
import constants.game.GameConstants;
import net.PacketHandler;
import net.packet.InPacket;
import net.server.Server;
import net.server.coordinator.session.Hwid;
import net.server.world.World;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import service.TransitionService;
import tools.BCrypt;
import tools.DatabaseConnection;
import tools.HexTool;
@@ -41,6 +47,12 @@ import java.sql.*;
import java.util.Calendar;
public final class LoginPasswordHandler implements PacketHandler {
private static final Logger log = LoggerFactory.getLogger(LoginPasswordHandler.class);
private final TransitionService transitionService;
public LoginPasswordHandler(TransitionService transitionService) {
this.transitionService = transitionService;
}
@Override
public boolean validateState(Client c) {
@@ -124,13 +136,30 @@ public final class LoginPasswordHandler implements PacketHandler {
return;
}
if (c.finishLogin()) {
c.checkChar(c.getAccID());
checkChar(c);
login(c);
} else {
c.sendPacket(PacketCreator.getLoginFailed(7));
}
}
private void checkChar(Client c) { // issue with multiple chars from same account login found by shavit, resinate
if (!YamlConfig.config.server.USE_CHARACTER_ACCOUNT_CHECK) {
return;
}
final int accId = c.getAccID();
for (World w : Server.getInstance().getWorlds()) {
for (Character chr : w.getPlayerStorage().getAllCharacters()) {
if (accId == chr.getAccountID()) {
log.warn("Chr {} has been removed from world {}. Possible Dupe attempt.", chr.getName(), GameConstants.WORLD_NAMES[w.getId()]);
transitionService.forceDisconnect(c);
w.getPlayerStorage().removePlayer(chr.getId());
}
}
}
}
private static void login(Client c) {
c.sendPacket(PacketCreator.getAuthSuccess(c));//why the fk did I do c.getAccountName()?
Server.getInstance().registerLoginState(c);