Ejemplo n.º 1
0
        public AccountInfo(BinaryReader reader)
        {
            Index = reader.ReadInt32();

            AccountID = reader.ReadString();
            if (Envir.LoadVersion < 94)
            {
                Password = reader.ReadString();
            }
            else
            {
                password = reader.ReadString();
            }

            if (Envir.LoadVersion > 93)
            {
                Salt = reader.ReadBytes(reader.ReadInt32());
            }

            if (Envir.LoadVersion > 97)
            {
                RequirePasswordChange = reader.ReadBoolean();
            }

            UserName       = reader.ReadString();
            BirthDate      = DateTime.FromBinary(reader.ReadInt64());
            SecretQuestion = reader.ReadString();
            SecretAnswer   = reader.ReadString();
            EMailAddress   = reader.ReadString();

            CreationIP   = reader.ReadString();
            CreationDate = DateTime.FromBinary(reader.ReadInt64());

            Banned     = reader.ReadBoolean();
            BanReason  = reader.ReadString();
            ExpiryDate = DateTime.FromBinary(reader.ReadInt64());

            LastIP   = reader.ReadString();
            LastDate = DateTime.FromBinary(reader.ReadInt64());

            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var info = new CharacterInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion)
                {
                    AccountInfo = this
                };

                if (info.Deleted && info.DeleteDate.AddMonths(Settings.ArchiveDeletedCharacterAfterMonths) <= Envir.Now)
                {
                    MessageQueue.Enqueue($"Player {info.Name} has been archived due to {Settings.ArchiveDeletedCharacterAfterMonths} month deletion.");
                    Envir.SaveArchivedCharacter(info);
                    continue;
                }

                if (info.LastLoginDate.AddMonths(Settings.ArchiveInactiveCharacterAfterMonths) <= Envir.Now)
                {
                    MessageQueue.Enqueue($"Player {info.Name} has been archived due to {Settings.ArchiveInactiveCharacterAfterMonths} months inactivity.");
                    Envir.SaveArchivedCharacter(info);
                    continue;
                }

                Characters.Add(info);
            }

            if (Envir.LoadVersion > 75)
            {
                HasExpandedStorage        = reader.ReadBoolean();
                ExpandedStorageExpiryDate = DateTime.FromBinary(reader.ReadInt64());
            }

            Gold = reader.ReadUInt32();
            if (Envir.LoadVersion >= 63)
            {
                Credit = reader.ReadUInt32();
            }

            count = reader.ReadInt32();

            Array.Resize(ref Storage, count);

            for (int i = 0; i < count; i++)
            {
                if (!reader.ReadBoolean())
                {
                    continue;
                }
                UserItem item = new UserItem(reader, Envir.LoadVersion, Envir.LoadCustomVersion);
                if (Envir.BindItem(item) && i < Storage.Length)
                {
                    Storage[i] = item;
                }
            }

            if (Envir.LoadVersion >= 10)
            {
                AdminAccount = reader.ReadBoolean();
            }
            if (!AdminAccount)
            {
                for (int i = 0; i < Characters.Count; i++)
                {
                    if (Characters[i] == null)
                    {
                        continue;
                    }
                    if (Characters[i].Deleted)
                    {
                        continue;
                    }
                    if ((Envir.Now - Characters[i].LastLogoutDate).TotalDays > 13)
                    {
                        continue;
                    }
                    if ((Characters[i].Level >= Envir.RankBottomLevel[0]) || (Characters[i].Level >= Envir.RankBottomLevel[(byte)Characters[i].Class + 1]))
                    {
                        Envir.CheckRankUpdate(Characters[i]);
                    }
                }
            }
        }