사이트 로그인
2019.09.23 01:36
C_LoginToServer.java
String charName = readS();
L1PcInstance pc = L1PcInstance.load(charName); //검색
//** 2케릭 버그 방지 **// by 도우너
L1PcInstance OtherPc = L1World.getInstance().getPlayer(pc.getName());
if (OtherPc != null ) {
client.kick();
OtherPc.sendPackets(new S_Disconnect());
return;
}
serchPc(pc, client);
//** 2케릭 버그 방지 **// by 도우너
if (pc.getHellTime() > 0) {
pc.beginHell(false);
}
} //검색
// ** 2케릭 로긴 버그 방지 **// By 도우너
private void serchPc(L1PcInstance pc, ClientThread client) {
Connection con = null;
PreparedStatement pstm = null;
PreparedStatement pstm2 = null;
ResultSet find = null;
ResultSet find2 = null;
String[] FindPc = null;
int PcCount = 0;
try {
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con.prepareStatement("SELECT COUNT(account_name) FROM characters WHERE account_name=?");
pstm.setString(1, pc.getAccountName());
find = pstm.executeQuery();
if (find.next()) {
PcCount = find.getInt(1);
}
pstm2 = con.prepareStatement("SELECT char_name FROM characters WHERE account_name=?");
pstm2.setString(1, pc.getAccountName());
find2 = pstm2.executeQuery();
if (find2.next()){
FindPc = new String[PcCount];
for (int i = 0; i < PcCount; i++) {
FindPc[i] = find2.getString(1);
L1PcInstance OtherPc = L1World.getInstance().getPlayer(FindPc[i]);
if (OtherPc != null) {
client.kick();
OtherPc.sendPackets(new S_Disconnect());
break;
}
find2.next();
}
}
} catch (SQLException e) {
client.kick();
_log.info("2케릭 버그 체크 오류!");
} finally {
SQLUtil.close(find2);
SQLUtil.close(find);
SQLUtil.close(pstm2);
SQLUtil.close(pstm);
SQLUtil.close(con);
}
}
// ** 2케릭 로긴 버그 방지 **// By 도우너
ClientThread.java
private String _hostname;
private Socket _csocket; //검색
public int ReturnToLogin = 0; //** 2케릭 버그 수정 **// By 도우너
while (true) {
doAutoSave();
byte data[] = null;
try {
data = readPacket();
} catch (Exception e) {
break;
}
// _log.finest("[C]\n" + new
// ByteArrayUtil(data).dumpToString());
int opcode = data[0] & 0xFF; //검색
//** 2케릭 버그 수정 **// By 도우너
if (opcode == Opcodes.C_OPCODE_COMMONCLICK) {
ReturnToLogin =1;
}
if (opcode == Opcodes.C_OPCODE_LOGINTOSERVEROK) {
ReturnToLogin =0;
}
if (opcode == Opcodes.C_OPCODE_RETURNTOLOGIN) {
ReturnToLogin++;
if (ReturnToLogin == 2) {
LoginController.getInstance().logout(this);
ReturnToLogin = 0;
}
}
//** 2케릭 버그 수정 **// By 도우너
LoginController.java
public synchronized boolean logout(ClientThread client) {
if (client.getAccountName() == null) {
return false;
}
//** 2케릭 버그 방지 **//
if(_accounts.containsKey(client.getAccountName())){
kickClient(_accounts.remove(client.getAccountName()));
return false;
}
//** 2케릭 버그 방지 **//