Beispiel #1
0
        public static void ProcessTicketResponce(WorldClient Client, string Ticket)
        {
            var a_ticket = TicketController.GetTicket(Ticket);

            lock (ticketProcess)
            {
                if (a_ticket == null)
                {
                    Client.Send(new AccountTicketErrorMessage());
                    return;
                }
                else
                {
                    Client.Account = a_ticket.Account;
                    if (CharacterTable.myCharacterById.Values.Where(x => x.Account != null && x.Account.ID == Client.Account.ID).Count() > 0)
                    {
                        CharacterTable.myCharacterById.Values.Where(x => x.Account != null && x.GetClient() != null && x.Account.ID == Client.Account.ID).ToList().ForEach(x => x.Client.Disconnect());
                        Client.Send(new AccountTicketErrorMessage());
                        return;
                    }
                    AccountTable.UpdateLogged(Client.Account.ID, true);
                    Client.Account.Characters = CharacterTable.FindAll(Client.Account.ID);
                    Client.Account.Characters.Values.ToList().ForEach(x => x.Account = Client.Account);
                    Client.SetState(WorldState.STATE_AUTHENTIFIED);
                    Client.Send(new AccountTicketSuccessMessage());
                    TicketController.DestroyTicket(a_ticket);
                    Client.Account.loadData();
                }
            }
        }