Esempio n. 1
0
 public void AccountInfoRequest(LoginClient client, Packet packet)
 {
     if (client.Account != null)
     {
         Send.AccountInfoRequestR(client, true);
     }
     else
     {
         Send.AccountInfoRequestR(client, false);
     }
 }
Esempio n. 2
0
        public void Delete(LoginClient client, Packet packet)
        {
            var serverName = packet.GetString();
            var id         = packet.GetLong();

            var isPet     = (packet.Op >= Op.DeletePetRequest);
            var character = (isPet ? client.Account.GetPet(id) : client.Account.GetCharacter(id));
            var now       = DateTime.Now;

            var isRequest = (packet.Op == Op.DeleteCharacterRequest || packet.Op == Op.DeletePetRequest);
            var isRecover = (packet.Op == Op.RecoverCharacter || packet.Op == Op.RecoverPet);
            var isDelete  = (packet.Op == Op.DeleteCharacter || packet.Op == Op.DeletePet);

            var conf = LoginServer.Instance.Conf.Login;

            // The response op is always +1.
            var op = packet.Op + 1;

            // Check creature and whether it can be deleted already,
            // if we got a delete request.
            if (character == null || (isDelete && character.DeletionFlag != DeletionFlag.Ready))
            {
                Send.DeleteR_Fail(client, op);
                return;
            }

            // If character is supposed to be deleted, or it's a request, and there is no delay configured
            if (isDelete || (isRequest && conf.DeletionWait == 0))
            {
                if (!isPet)
                {
                    client.Account.Characters.Remove(character);
                }
                else
                {
                    client.Account.Pets.Remove(character);
                }

                // Mark for deletion, will be done on UpdateDeletionTime.
                character.DeletionTime = DateTime.MaxValue;

                // Send account info, to remove char on client side
                Send.AccountInfoRequestR(client, true);
            }
            // If character is being recovered
            else if (isRecover)
            {
                // Reset time
                character.DeletionTime = DateTime.MinValue;
            }
            // Op.DeleteCharRequest || Op.DeletePetRequest || Error?
            else
            {
                // Set time at which the character can be deleted for good.
                // Below 100 means x hours, above 100 tomorrow at x.
                if (conf.DeletionWait > 100)
                {
                    character.DeletionTime = (now.AddDays(1).Date + new TimeSpan(conf.DeletionWait - 100, 0, 0));
                }
                else
                {
                    character.DeletionTime = now.AddHours(conf.DeletionWait);
                }
            }

            LoginServer.Instance.Database.UpdateDeletionTime(character);

            // Successful response
            Send.DeleteR(client, op, serverName, id);
        }