private BaseResponse Login(int clientId, BasePacket packet) { PUserLogin pUserLogin = (PUserLogin)packet; User user = new User(pUserLogin.UserName, pUserLogin.Password); pUserLogin.SessionToken = BasePacket.NewSessionToken(); Player player = Player.Create(user.UserName); ShortPoint?startPoint = World.MapFindPlayerStartPoint(player); if (!startPoint.HasValue) { BaseResponse.Throw("Cannot get start point for the player", ECGeneral.ServerError); return(null); } player.Position = startPoint.Value.ToPoint(ConstMap.PIXEL_SIZE); lock (_loggedPlayers) { _loggedPlayers.Add(pUserLogin.SessionToken, player.Id); } lock (_tcpClients) { _tcpClients.Add(clientId, pUserLogin.SessionToken); _playerClients.Add(player.Id, clientId); } World.PlayerAdd(pUserLogin.SessionToken, player); _validators.RegisterSession(pUserLogin.SessionToken); return(new RUserLogin(pUserLogin) { SessionToken = pUserLogin.SessionToken }); }