Przeglądaj źródła

Prevent double login of the same character.

_DS_ 14 lat temu
rodzic
commit
ac6933413a

+ 10 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/L2GameClient.java

@@ -504,8 +504,17 @@ public final class L2GameClient extends MMOClient<MMOConnection<L2GameClient>>
 
 	public L2PcInstance loadCharFromDisk(int charslot)
 	{
-		L2PcInstance character = L2PcInstance.load(getObjectIdForSlot(charslot));
+		final int objId = getObjectIdForSlot(charslot);
+		L2PcInstance character = L2World.getInstance().getPlayer(objId);
+		if (character != null)
+		{
+			// exploit prevention, should not happens in normal way
+			_log.severe("Attempt of double login: " + character.getName()+"("+objId+") "+getAccountName());
+			character.logout(true);
+			return null;
+		}
 
+		character = L2PcInstance.load(objId);
         if (character != null)
 		{
 

+ 2 - 6
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/CharacterSelect.java

@@ -23,7 +23,6 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.CharNameTable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
-import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.CharSelected;
 import com.l2jserver.gameserver.network.serverpackets.SSQInfo;
 
@@ -86,11 +85,8 @@ public class CharacterSelect extends L2GameClientPacket
 					//load up character from disk
 					L2PcInstance cha = getClient().loadCharFromDisk(_charSlot);
 					if (cha == null)
-					{
-						_log.severe("Character could not be loaded (slot:"+_charSlot+")");
-						sendPacket(ActionFailed.STATIC_PACKET);
-						return;
-					}
+						return; // handled in L2GameClient
+
 					if (cha.getAccessLevel().getLevel() < 0)
 					{
 						cha.logout();