瀏覽代碼

Sorry Dr.House for wrong report it was corrupted db record, not concurrency issue, adding check to prevent.

JIV 15 年之前
父節點
當前提交
663b9d7025

+ 13 - 5
L2_GameServer/java/com/l2jserver/gameserver/datatables/CharNameTable.java

@@ -44,8 +44,8 @@ public class CharNameTable
 
 	private CharNameTable()
 	{
-		_chars = new FastMap<Integer, String>().setShared(true);
-		_accessLevels = new FastMap<Integer, Integer>().setShared(true);
+		_chars = new FastMap<Integer, String>();
+		_accessLevels = new FastMap<Integer, Integer>();
 		if (Config.CACHE_CHAR_NAMES)
 			loadAll();
 	}
@@ -64,7 +64,7 @@ public class CharNameTable
 		}
 	}
 
-	public final void addName(int objId, String name)
+	private final void addName(int objId, String name)
 	{
 		if (name != null)
 		{
@@ -80,6 +80,9 @@ public class CharNameTable
 
 	public final int getIdByName(String name)
 	{
+		if (name == null || name.isEmpty())
+			return -1;
+		
 		Iterator<Entry<Integer, String>> it = _chars.entrySet().iterator();
 		
 		Map.Entry<Integer, String> pair;
@@ -131,13 +134,17 @@ public class CharNameTable
 		{
 			_chars.put(id, name);
 			_accessLevels.put(id, accessLevel);
+			return id;
 		}
 
-		return id;
+		return -1; // not found
 	}
 
 	public final String getNameById(int id)
 	{
+		if (id <= 0)
+			return null;
+		
 		String name = _chars.get(id);
 		if (name != null)
 			return name;
@@ -182,9 +189,10 @@ public class CharNameTable
 		{
 			_chars.put(id, name);
 			_accessLevels.put(id, accessLevel);
+			return name;
 		}
 
-		return name;
+		return null; //not found
 	}
 
 	public final int getAccessLevelById(int objectId)

+ 2 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -6553,7 +6553,8 @@ public abstract class L2Character extends L2Object
 		catch (Exception e)
 		{
 			_log.info(getClass().getSimpleName()+": callSkill() failed. "+ e);
-			e.printStackTrace();
+			if (Config.DEBUG)
+				e.printStackTrace();
 		}
 	}
 	

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestSendPost.java

@@ -197,7 +197,7 @@ public final class RequestSendPost extends L2GameClientPacket
 		}
 
 		final int receiverId = CharNameTable.getInstance().getIdByName(_receiver);
-		if (receiverId < 0)
+		if (receiverId <= 0)
 		{
 			activeChar.sendPacket(new SystemMessage(SystemMessageId.RECIPIENT_NOT_EXIST));
 			return;