public void ClientLogin(uint id, ulong guid)
 {
     WorldServiceLocator._WorldServer.Log.WriteLine(LogType.NETWORK, "[{0:000000}] Client login [0x{1:X}]", id, guid);
     try
     {
         ClientClass client = WorldServiceLocator._WorldServer.CLIENTs[id];
         WS_PlayerData.CharacterObject Character = new WS_PlayerData.CharacterObject(ref client, guid);
         WorldServiceLocator._WorldServer.CHARACTERs_Lock.AcquireWriterLock(WorldServiceLocator._Global_Constants.DEFAULT_LOCK_TIMEOUT);
         WorldServiceLocator._WorldServer.CHARACTERs[guid] = Character;
         WorldServiceLocator._WorldServer.CHARACTERs_Lock.ReleaseWriterLock();
         WorldServiceLocator._Functions.SendCorpseReclaimDelay(ref client, ref Character);
         WorldServiceLocator._WS_PlayerHelper.InitializeTalentSpells(Character);
         Character.Login();
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.USER, "[{0}:{1}] Player login complete [0x{2:X}]", client.IP, client.Port, guid);
     }
     catch (Exception ex)
     {
         ProjectData.SetProjectError(ex);
         Exception e = ex;
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "Error on login: {0}", e.ToString());
         ProjectData.ClearProjectError();
     }
 }