PlayerInfo LoadBinaryFormat0( [NotNull] BinaryReader reader ) {
if( reader == null ) throw new ArgumentNullException( "reader" );
int id = Read7BitEncodedInt( reader );
// ReSharper disable UseObjectOrCollectionInitializer
PlayerInfo info = new PlayerInfo( id );
// ReSharper restore UseObjectOrCollectionInitializer
// General
info.Name = reader.ReadString();
info.DisplayedName = ReadString( reader );
info.LastSeen = DateTimeUtil.ToDateTime( reader.ReadUInt32() );
// Rank
int rankIndex = Read7BitEncodedInt( reader );
info.Rank = GetRankByIndex( rankIndex );
{
bool hasPrevRank = reader.ReadBoolean();
if( hasPrevRank ) {
int prevRankIndex = Read7BitEncodedInt( reader );
info.PreviousRank = GetRankByIndex( prevRankIndex );
}
}
info.RankChangeType = (RankChangeType)reader.ReadByte();
if( info.RankChangeType != RankChangeType.Default ) {
info.RankChangeDate = ReadDate( reader );
info.RankChangedBy = ReadString( reader );
info.RankChangeReason = ReadString( reader );
}
// Bans
info.BanStatus = (BanStatus)reader.ReadByte();
info.BanDate = ReadDate( reader );
info.BannedBy = ReadString( reader );
info.BanReason = ReadString( reader );
if( info.BanStatus == BanStatus.Banned ) {
info.BannedUntil = ReadDate( reader );
info.LastFailedLoginDate = ReadDate( reader );
info.LastFailedLoginIP = ReadIPAddress( reader );
} else {
info.UnbanDate = ReadDate( reader );
info.UnbannedBy = ReadString( reader );
info.UnbanReason = ReadString( reader );
}
// Stats
info.FirstLoginDate = ReadDate( reader );
info.LastLoginDate = ReadDate( reader );
info.TotalTime = ReadTimeSpan( reader );
info.BlocksBuilt = Read7BitEncodedInt( reader );
info.BlocksDeleted = Read7BitEncodedInt( reader );
if( reader.ReadBoolean() ) {
info.BlocksDrawn = reader.ReadInt64();
}
info.TimesVisited = Read7BitEncodedInt( reader );
info.MessagesWritten = Read7BitEncodedInt( reader );
info.TimesKickedOthers = Read7BitEncodedInt( reader );
info.TimesBannedOthers = Read7BitEncodedInt( reader );
// Kicks
info.TimesKicked = Read7BitEncodedInt( reader );
if( info.TimesKicked > 0 ) {
info.LastKickDate = ReadDate( reader );
info.LastKickBy = ReadString( reader );
info.LastKickReason = ReadString( reader );
}
// Freeze/Mute
info.IsFrozen = reader.ReadBoolean();
if( info.IsFrozen ) {
info.FrozenOn = ReadDate( reader );
info.FrozenBy = ReadString( reader );
}
info.MutedUntil = ReadDate( reader );
if( info.MutedUntil != DateTime.MinValue ) {
info.MutedBy = ReadString( reader );
}
// Misc
info.Password = ReadString( reader );
info.LastModified = ReadDate( reader );
reader.ReadBoolean(); // info.IsOnline - skip
info.IsHidden = reader.ReadBoolean();
info.LastIP = ReadIPAddress(reader );
info.LeaveReason = (LeaveReason)reader.ReadByte();
info.BandwidthUseMode = (BandwidthUseMode)reader.ReadByte();
return info;
}