fCraft.FlatfilePlayerDBProvider.LoadFormat0 C# (CSharp) Method

LoadFormat0() private method

private LoadFormat0 ( [ fields ) : PlayerInfo
fields [
return PlayerInfo
        internal PlayerInfo LoadFormat0( [NotNull] string[] fields ) {
            if( fields == null ) throw new ArgumentNullException( "fields" );
            DateTime tempDate;

            // get ID
            int id;
            if( fields.Length > 29 ) {
                if( !Int32.TryParse( fields[29], out id ) || id < 256 ) {
                    id = GetNextID();
                }
            } else {
                id = GetNextID();
            }

            PlayerInfo info = new PlayerInfo( id ) {
                Name = fields[0]
            };

            if( fields[1].Length > 1 ) {
                IPAddress lastIP;
                IPAddress.TryParse( fields[1], out lastIP );
                info.LastIP = lastIP;
            }

            info.Rank = Rank.Parse( fields[2] ) ?? RankManager.DefaultRank;
            TryParseLocalDate( fields[3], out tempDate );
            info.RankChangeDate = tempDate;
            if( fields[4].Length > 0 ) {
                info.RankChangedBy = UnescapeOldFormat( fields[4] );
                if( info.RankChangedBy == "-" ) info.RankChangedBy = null;
            }

            switch( fields[5] ) {
                case "b":
                    info.BanStatus = BanStatus.Banned;
                    break;
                case "x":
                    info.BanStatus = BanStatus.BanExempt;
                    break;
                default:
                    info.BanStatus = BanStatus.NotBanned;
                    break;
            }

            // ban information
            if( TryParseLocalDate( fields[6], out tempDate ) ) {
                if( fields[7].Length > 0 ) info.BannedBy = fields[7];
                if( fields[10].Length > 0 ) {
                    info.BanReason = UnescapeOldFormat( fields[10] );
                    if( info.BanReason == "-" ) info.BanReason = null;
                }
            }
            info.BanDate = tempDate;

            // unban information
            if( TryParseLocalDate( fields[8], out tempDate ) ) {
                if( fields[9].Length > 0 ) info.UnbannedBy = fields[9];
                if( fields[11].Length > 0 ) {
                    info.UnbanReason = UnescapeOldFormat( fields[11] );
                    if( info.UnbanReason == "-" ) info.UnbanReason = null;
                }
            }
            info.UnbanDate = tempDate;

            // failed logins
            if( fields[12].Length > 1 ) {
                TryParseLocalDate( fields[12], out tempDate );
                info.LastFailedLoginDate = tempDate;
            }
            if( fields[13].Length > 1 ) {
                IPAddress lastFailedLoginIP;
                IPAddress.TryParse( fields[13], out lastFailedLoginIP );
                info.LastFailedLoginIP = lastFailedLoginIP;
            }
            // skip 14

            // login/logout times
            TryParseLocalDate( fields[15], out tempDate );
            info.FirstLoginDate = tempDate;
            TryParseLocalDate( fields[16], out tempDate );
            info.LastLoginDate = tempDate;
            TimeSpan totalTime;
            TimeSpan.TryParse( fields[17], out totalTime );
            info.TotalTime = totalTime;

            // stats
            int tempInt;
            if( fields[18].Length > 0 ) {
                Int32.TryParse( fields[18], out tempInt );
                info.BlocksBuilt = tempInt;
            }
            if( fields[19].Length > 0 ) {
                Int32.TryParse( fields[19], out tempInt );
                info.BlocksDeleted = tempInt;
            }
            Int32.TryParse( fields[20], out tempInt );
            info.TimesVisited = tempInt;
            if( fields[20].Length > 0 ) {
                Int32.TryParse( fields[21], out tempInt );
                info.MessagesWritten = tempInt;
            }
            // fields 22-23 are no longer in use

            if( fields.Length > MinFieldCount ) {
                if( fields[24].Length > 0 ) info.PreviousRank = Rank.Parse( fields[24] );
                if( fields[25].Length > 0 ) info.RankChangeReason = UnescapeOldFormat( fields[25] );
                Int32.TryParse( fields[26], out tempInt );
                info.TimesKicked = tempInt;
                Int32.TryParse( fields[27], out tempInt );
                info.TimesKickedOthers = tempInt;
                Int32.TryParse( fields[28], out tempInt );
                info.TimesBannedOthers = tempInt;
                // fields[29] (id) already read/assigned by this point
                if( fields.Length > 29 ) {
                    byte rankChangeTypeCode;
                    if( Byte.TryParse( fields[30], out rankChangeTypeCode ) ) {
                        info.RankChangeType = (RankChangeType)rankChangeTypeCode;
                        if( !Enum.IsDefined( typeof( RankChangeType ), rankChangeTypeCode ) ) {
                            GuessRankChangeType( info );
                        }
                    } else {
                        GuessRankChangeType( info );
                    }
                    TryParseLocalDate( fields[31], out tempDate );
                    info.LastKickDate = tempDate;
                    if( !TryParseLocalDate( fields[32], out tempDate ) ) {
                        tempDate = info.LastLoginDate;
                    }
                    info.LastSeen = tempDate;
                    long blocksDrawn;
                    Int64.TryParse( fields[33], out blocksDrawn );
                    info.BlocksDrawn = blocksDrawn;

                    if( fields[34].Length > 0 ) info.LastKickBy = UnescapeOldFormat( fields[34] );
                    if( fields[35].Length > 0 ) info.LastKickReason = UnescapeOldFormat( fields[35] );

                } else {
                    GuessRankChangeType( info );
                    info.LastSeen = info.LastLoginDate;
                }

                if( fields.Length > 36 ) {
                    TryParseLocalDate( fields[36], out tempDate );
                    info.BannedUntil = tempDate;
                    info.IsFrozen = (fields[37] == "f");
                    if( fields[38].Length > 0 ) info.FrozenBy = UnescapeOldFormat( fields[38] );
                    TryParseLocalDate( fields[39], out tempDate );
                    info.FrozenOn = tempDate;
                    TryParseLocalDate( fields[40], out tempDate );
                    info.MutedUntil = tempDate;
                    if( fields[41].Length > 0 ) info.MutedBy = UnescapeOldFormat( fields[41] );
                    info.Password = UnescapeOldFormat( fields[42] );
                    // fields[43] is "online", and is ignored
                }

                if( fields.Length > 44 ) {
                    ParseBandwidthUseMode( info, fields[44] );
                }
            }

            if( info.LastLoginDate < info.FirstLoginDate ) {
                info.LastLoginDate = info.FirstLoginDate;
            }
            if( info.LastSeen < info.LastLoginDate ) {
                info.LastSeen = info.LastLoginDate;
            }

            return info;
        }