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