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(); } }