本文整理汇总了C#中fCraft.PlayerInfo.Where方法的典型用法代码示例。如果您正苦于以下问题:C# PlayerInfo.Where方法的具体用法?C# PlayerInfo.Where怎么用?C# PlayerInfo.Where使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类fCraft.PlayerInfo
的用法示例。
在下文中一共展示了PlayerInfo.Where方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DumpPlayerGroupStats
static void DumpPlayerGroupStats( TextWriter writer, PlayerInfo[] infos, string groupName ) {
RankStats stat = new RankStats();
foreach( Rank rank2 in RankManager.Ranks ) {
stat.PreviousRank.Add( rank2, 0 );
}
infos = infos.Where( info => (info.TimeSinceLastLogin.TotalDays < 30 && !info.Banned) ).ToArray();
if( infos.Length == 0 ) {
writer.WriteLine( "{0}: 0 players, 0 banned", groupName );
writer.WriteLine();
return;
}
for( int i = 0; i < infos.Length; i++ ) {
stat.TimeSinceFirstLogin += infos[i].TimeSinceFirstLogin;
stat.TimeSinceLastLogin += infos[i].TimeSinceLastLogin;
stat.TotalTime += infos[i].TotalTime;
stat.BlocksBuilt += infos[i].BlocksBuilt;
stat.BlocksDeleted += infos[i].BlocksDeleted;
stat.TimesVisited += infos[i].TimesVisited;
stat.MessagesWritten += infos[i].LinesWritten;
stat.TimesKicked += infos[i].TimesKicked;
stat.TimesKickedOthers += infos[i].TimesKickedOthers;
stat.TimesBannedOthers += infos[i].TimesBannedOthers;
if( infos[i].Banned ) stat.Banned++;
if( infos[i].PreviousRank != null ) stat.PreviousRank[infos[i].PreviousRank]++;
}
stat.BlockRatio = stat.BlocksBuilt / (double)Math.Max( stat.BlocksDeleted, 1 );
stat.BlocksChanged = stat.BlocksDeleted + stat.BlocksBuilt;
stat.TimeSinceFirstLoginMedian = DateTime.UtcNow.Subtract( infos.OrderByDescending( info => info.FirstLoginDate )
.ElementAt( infos.Length / 2 ).FirstLoginDate );
stat.TimeSinceLastLoginMedian = DateTime.UtcNow.Subtract( infos.OrderByDescending( info => info.LastLoginDate )
.ElementAt( infos.Length / 2 ).LastLoginDate );
stat.TotalTimeMedian = infos.OrderByDescending( info => info.TotalTime ).ElementAt( infos.Length / 2 ).TotalTime;
stat.BlocksBuiltMedian = infos.OrderByDescending( info => info.BlocksBuilt ).ElementAt( infos.Length / 2 ).BlocksBuilt;
stat.BlocksDeletedMedian = infos.OrderByDescending( info => info.BlocksDeleted ).ElementAt( infos.Length / 2 ).BlocksDeleted;
PlayerInfo medianBlocksChangedPlayerInfo = infos.OrderByDescending( info => (info.BlocksDeleted + info.BlocksBuilt) ).ElementAt( infos.Length / 2 );
stat.BlocksChangedMedian = medianBlocksChangedPlayerInfo.BlocksDeleted + medianBlocksChangedPlayerInfo.BlocksBuilt;
PlayerInfo medianBlockRatioPlayerInfo = infos.OrderByDescending( info => (info.BlocksBuilt / (double)Math.Max( info.BlocksDeleted, 1 )) )
.ElementAt( infos.Length / 2 );
stat.BlockRatioMedian = medianBlockRatioPlayerInfo.BlocksBuilt / (double)Math.Max( medianBlockRatioPlayerInfo.BlocksDeleted, 1 );
stat.TimesVisitedMedian = infos.OrderByDescending( info => info.TimesVisited ).ElementAt( infos.Length / 2 ).TimesVisited;
stat.MessagesWrittenMedian = infos.OrderByDescending( info => info.LinesWritten ).ElementAt( infos.Length / 2 ).LinesWritten;
stat.TimesKickedMedian = infos.OrderByDescending( info => info.TimesKicked ).ElementAt( infos.Length / 2 ).TimesKicked;
stat.TimesKickedOthersMedian = infos.OrderByDescending( info => info.TimesKickedOthers ).ElementAt( infos.Length / 2 ).TimesKickedOthers;
stat.TimesBannedOthersMedian = infos.OrderByDescending( info => info.TimesBannedOthers ).ElementAt( infos.Length / 2 ).TimesBannedOthers;
stat.TopTimeSinceFirstLogin = infos.OrderBy( info => info.FirstLoginDate ).ToArray();
stat.TopTimeSinceLastLogin = infos.OrderBy( info => info.LastLoginDate ).ToArray();
stat.TopTotalTime = infos.OrderByDescending( info => info.TotalTime ).ToArray();
stat.TopBlocksBuilt = infos.OrderByDescending( info => info.BlocksBuilt ).ToArray();
stat.TopBlocksDeleted = infos.OrderByDescending( info => info.BlocksDeleted ).ToArray();
stat.TopBlocksChanged = infos.OrderByDescending( info => (info.BlocksDeleted + info.BlocksBuilt) ).ToArray();
stat.TopBlockRatio = infos.OrderByDescending( info => (info.BlocksBuilt / (double)Math.Max( info.BlocksDeleted, 1 )) ).ToArray();
stat.TopTimesVisited = infos.OrderByDescending( info => info.TimesVisited ).ToArray();
stat.TopMessagesWritten = infos.OrderByDescending( info => info.LinesWritten ).ToArray();
stat.TopTimesKicked = infos.OrderByDescending( info => info.TimesKicked ).ToArray();
stat.TopTimesKickedOthers = infos.OrderByDescending( info => info.TimesKickedOthers ).ToArray();
stat.TopTimesBannedOthers = infos.OrderByDescending( info => info.TimesBannedOthers ).ToArray();
writer.WriteLine( "{0}: {1} players, {2} banned", groupName, infos.Length, stat.Banned );
writer.WriteLine( " TimeSinceFirstLogin: {0} mean, {1} median, {2} total",
TimeSpan.FromTicks( stat.TimeSinceFirstLogin.Ticks / infos.Length ).ToCompactString(),
stat.TimeSinceFirstLoginMedian.ToCompactString(),
stat.TimeSinceFirstLogin.ToCompactString() );
if( infos.Count() > TopPlayersToList * 2 + 1 ) {
foreach( PlayerInfo info in stat.TopTimeSinceFirstLogin.Take( TopPlayersToList ) ) {
writer.WriteLine( " {0,20} {1}", info.TimeSinceFirstLogin.ToCompactString(), info.Name );
}
writer.WriteLine( " ...." );
foreach( PlayerInfo info in stat.TopTimeSinceFirstLogin.Reverse().Take( TopPlayersToList ).Reverse() ) {
writer.WriteLine( " {0,20} {1}", info.TimeSinceFirstLogin.ToCompactString(), info.Name );
}
} else {
foreach( PlayerInfo info in stat.TopTimeSinceFirstLogin ) {
writer.WriteLine( " {0,20} {1}", info.TimeSinceFirstLogin.ToCompactString(), info.Name );
}
}
writer.WriteLine();
writer.WriteLine( " TimeSinceLastLogin: {0} mean, {1} median, {2} total",
TimeSpan.FromTicks( stat.TimeSinceLastLogin.Ticks / infos.Length ).ToCompactString(),
stat.TimeSinceLastLoginMedian.ToCompactString(),
stat.TimeSinceLastLogin.ToCompactString() );
if( infos.Count() > TopPlayersToList * 2 + 1 ) {
foreach( PlayerInfo info in stat.TopTimeSinceLastLogin.Take( TopPlayersToList ) ) {
writer.WriteLine( " {0,20} {1}", info.TimeSinceLastLogin.ToCompactString(), info.Name );
}
writer.WriteLine( " ...." );
foreach( PlayerInfo info in stat.TopTimeSinceLastLogin.Reverse().Take( TopPlayersToList ).Reverse() ) {
writer.WriteLine( " {0,20} {1}", info.TimeSinceLastLogin.ToCompactString(), info.Name );
}
//.........这里部分代码省略.........