mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 04:32:50 -04:00
Now /top supports timespent
This commit is contained in:
parent
2c9441b9ed
commit
651268bce1
@ -47,10 +47,9 @@ namespace MCGalaxy.Commands.Info {
|
||||
return;
|
||||
}
|
||||
|
||||
string order = stat.Ascending ? "asc" : "desc";
|
||||
string strLimit = " LIMIT " + offset + "," + limit;
|
||||
DataTable db = Database.Backend.GetRows(stat.Table, "DISTINCT Name, " + stat.Column,
|
||||
"ORDER BY " + stat.Column + " " + order + strLimit);
|
||||
"ORDER BY " + stat.OrderBy + strLimit);
|
||||
|
||||
Player.Message(p, "&a{0}:", stat.Title());
|
||||
for (int i = 0; i < db.Rows.Count; i++) {
|
||||
|
@ -24,19 +24,22 @@ namespace MCGalaxy.DB {
|
||||
/// <summary> Outputs ordered stats from a column in a database table. </summary>
|
||||
public sealed class TopStat {
|
||||
|
||||
public readonly string Identifier, Table, Column;
|
||||
public readonly bool Ascending;
|
||||
public readonly string Identifier, Table, Column, OrderBy;
|
||||
public readonly Func<string> Title;
|
||||
public readonly Func<string, string> Formatter;
|
||||
|
||||
public TopStat(string identifier, string table, string col, Func<string> title,
|
||||
Func<string, string> formatter, bool ascending = false) {
|
||||
Func<string, string> formatter, bool ascending = false, string orderBy = null) {
|
||||
Identifier = identifier;
|
||||
Table = table;
|
||||
Column = col;
|
||||
Title = title;
|
||||
Formatter = formatter;
|
||||
Ascending = ascending;
|
||||
|
||||
OrderBy = orderBy;
|
||||
if (OrderBy == null)
|
||||
OrderBy = " " + col + " ";
|
||||
OrderBy += (ascending ? " asc" : " desc");
|
||||
}
|
||||
|
||||
/// <summary> List of stats that can be ordered. </summary>
|
||||
@ -79,6 +82,10 @@ namespace MCGalaxy.DB {
|
||||
new TopStat("Deleted", PlayerData.DBTable,
|
||||
PlayerData.ColumnTotalCuboided + " >> " + PlayerData.LowerBits,
|
||||
() => "Most blocks deleted", FormatInteger),
|
||||
new TopStat("TimeSpent", PlayerData.DBTable,
|
||||
PlayerData.ColumnTimeSpent,
|
||||
() => "Most time spent", FormatTimespan,
|
||||
false, " CAST(TimeSpent as BIGINT) "),
|
||||
};
|
||||
|
||||
public static string FormatInteger(string input) {
|
||||
@ -86,6 +93,11 @@ namespace MCGalaxy.DB {
|
||||
return value.ToString("N0");
|
||||
}
|
||||
|
||||
public static string FormatTimespan(string input) {
|
||||
long value = PlayerData.ParseLong(input);
|
||||
return TimeSpan.FromSeconds(value).Shorten(true, true);
|
||||
}
|
||||
|
||||
public static string FormatDate(string input) {
|
||||
DateTime time = DateTime.Parse(input);
|
||||
TimeSpan delta = DateTime.Now - time;
|
||||
|
@ -172,7 +172,7 @@ namespace MCGalaxy.Tasks {
|
||||
static void DumpPlayerTimeSpents() {
|
||||
playerIds = new List<int>();
|
||||
playerSeconds = new List<long>();
|
||||
Database.ExecuteReader("SELECT ID, TimeSpent FROM Players", AddPlayerTimeSpent);
|
||||
Database.ExecuteReader("SELECT ID, TimeSpent FROM Players", AddPlayerTimeSpent);
|
||||
}
|
||||
|
||||
static void AddPlayerTimeSpent(IDataReader reader) {
|
||||
@ -193,14 +193,16 @@ namespace MCGalaxy.Tasks {
|
||||
using (BulkTransaction bulk = Database.Backend.CreateBulk()) {
|
||||
IDataParameter idParam = bulk.CreateParam("@0", DbType.Int32);
|
||||
IDataParameter secsParam = bulk.CreateParam("@1", DbType.Int64);
|
||||
IDbCommand cmd = bulk.CreateCommand("UPDATE Players SET TimeSpent = @1 WHERE ID = @0");
|
||||
cmd.Parameters.Add(idParam);
|
||||
cmd.Parameters.Add(secsParam);
|
||||
|
||||
for (int i = 0; i < playerIds.Count; i++) {
|
||||
idParam.Value = playerIds[i];
|
||||
secsParam.Value = playerSeconds[i];
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
using (IDbCommand cmd = bulk.CreateCommand("UPDATE Players SET TimeSpent = @1 WHERE ID = @0")) {
|
||||
cmd.Parameters.Add(idParam);
|
||||
cmd.Parameters.Add(secsParam);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
bulk.Commit();
|
||||
|
Loading…
x
Reference in New Issue
Block a user