From a5c06065ca418f4daf55c89b9e8eb14f330d969f Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 31 Jul 2016 14:02:54 +1000 Subject: [PATCH] Start tracking total blocks drawn in /whois. --- Commands/Information/CmdWhois.cs | 6 +++- Commands/Information/WhoInfo.cs | 19 ++++++----- Commands/Moderation/CmdInfoSwap.cs | 16 ++++----- Commands/Moderation/CmdPlayerEditDB.cs | 2 +- Drawing/DrawOps/DrawOp.Performer.cs | 5 +-- Drawing/DrawOps/RedoDrawOp.cs | 2 +- Levels/Level.Blocks.cs | 47 ++++++++++++++------------ Player/Player.Fields.cs | 3 +- Player/Player.Timers.cs | 1 - Player/Player.cs | 11 +++--- Player/PlayerInfo.cs | 10 ++++-- Player/Undo/UndoFile.cs | 2 +- 12 files changed, 70 insertions(+), 54 deletions(-) diff --git a/Commands/Information/CmdWhois.cs b/Commands/Information/CmdWhois.cs index e3333d8c5..f8c65fc8d 100644 --- a/Commands/Information/CmdWhois.cs +++ b/Commands/Information/CmdWhois.cs @@ -60,7 +60,9 @@ namespace MCGalaxy.Commands { info.Name = who.name; info.Group = who.group; info.Money = who.money; info.Deaths = who.overallDeath; - info.TotalBlocks = who.overallBlocks; info.LoginBlocks = who.loginBlocks; + info.TotalBlocks = who.overallBlocks; info.TotalDrawn = who.TotalBlocksDrawn; + info.LoginBlocks = who.loginBlocks; + info.TimeSpent = who.time; info.TimeOnline = DateTime.Now - who.timeLogged; info.First = who.firstLogin; info.Logins = who.totalLogins; info.Kicks = who.totalKicked; @@ -85,6 +87,8 @@ namespace MCGalaxy.Commands { info.Group = group; info.Money = int.Parse(target.money); info.Deaths = int.Parse(target.deaths); info.TotalBlocks = long.Parse(target.blocks); info.LoginBlocks = -1; + info.TotalDrawn = long.Parse(target.cuboided); + info.TimeSpent = target.totalTime.ParseDBTime(); info.First = DateTime.Parse(target.firstLogin); info.Last = DateTime.Parse(target.lastLogin); diff --git a/Commands/Information/WhoInfo.cs b/Commands/Information/WhoInfo.cs index b5efb5ac0..ebd82427f 100644 --- a/Commands/Information/WhoInfo.cs +++ b/Commands/Information/WhoInfo.cs @@ -23,7 +23,7 @@ namespace MCGalaxy.Commands { public string FullName, Name; public Group Group; public int Money, Deaths; - public long TotalBlocks, LoginBlocks; + public long TotalBlocks, LoginBlocks, TotalDrawn; public TimeSpan TimeSpent, TimeOnline; public DateTime First, Last; public int Logins, Kicks; @@ -38,20 +38,23 @@ namespace MCGalaxy.Commands { Player.Message(p, " Rank of " + who.Group.ColoredName); if (Economy.Enabled) - Player.Message(p, " &a" + who.Deaths + " &cdeaths%S, &a" + who.Money + - " %S" + Server.moneys +", " + Awards.AwardAmount(who.Name) + " awards"); + Player.Message(p, " &a{0} &cdeaths%S, &a{2} %S{3}, {1} %Sawards", + who.Deaths, Awards.AwardAmount(who.Name), who.Money, Server.moneys); else - Player.Message(p, " &a" + who.Deaths + " &cdeaths%S, " + Awards.AwardAmount(who.Name) + " awards"); + Player.Message(p, " &a{0} &cdeaths%S, {1} %Sawards", + who.Deaths, Awards.AwardAmount(who.Name)); if (who.LoginBlocks >= 0) - Player.Message(p, " &bModified &a{0} &eblocks, &a{1} &esince login", who.TotalBlocks, who.LoginBlocks); + Player.Message(p, " Modified &a{0} %Sblocks, &a{1} %Ssince login", who.TotalBlocks, who.LoginBlocks); else - Player.Message(p, " &bModified &a{0} &eblocks", who.TotalBlocks); + Player.Message(p, " Modified &a{0} %Sblocks", who.TotalBlocks); + Player.Message(p, " &a0 %Splaced, &a0 %Sdeleted, &a{0} %Sdrawn", who.TotalDrawn); if (who.TimeOnline.Ticks > 0) - Player.Message(p, " Spent {0} on the server, {1} this session", who.TimeSpent.Shorten(), who.TimeOnline.Shorten()); + Player.Message(p, " Spent &a{0}%S on the server, &a{1}%S this session", + who.TimeSpent.Shorten(), who.TimeOnline.Shorten()); else - Player.Message(p, " Spent {0} on the server", who.TimeSpent.Shorten()); + Player.Message(p, " Spent &a{0}%S on the server", who.TimeSpent.Shorten()); if (who.Last.Ticks > 0) Player.Message(p, " First login &a" + who.First.ToString("yyyy-MM-dd") diff --git a/Commands/Moderation/CmdInfoSwap.cs b/Commands/Moderation/CmdInfoSwap.cs index b02840691..eb3d22064 100644 --- a/Commands/Moderation/CmdInfoSwap.cs +++ b/Commands/Moderation/CmdInfoSwap.cs @@ -35,19 +35,19 @@ namespace MCGalaxy.Commands { if (!ValidName(p, args[1], "player")) return; if (PlayerInfo.FindExact(args[0]) != null) { - Player.SendMessage(p, "\"" + args[0] + "\" must be offline to use /infoswap."); return; + Player.Message(p, "\"{0}\" must be offline to use /infoswap.", args[0]); return; } if (PlayerInfo.FindExact(args[1]) != null) { - Player.SendMessage(p, "\"" + args[1] + "\" must be offline to use /infoswap."); return; + Player.Message(p, "\"{0}\" must be offline to use /infoswap.", args[1]); return; } OfflinePlayer src = PlayerInfo.Find(args[0], true); if (src == null) { - Player.SendMessage(p, "\"" + args[0] + "\" was not found in the database."); return; + Player.Message(p, "\"{0}\" was not found in the database.", args[0]); return; } OfflinePlayer dst = PlayerInfo.Find(args[1], true); if (dst == null) { - Player.SendMessage(p, "\"" + args[1] + "\" was not found in the database."); return; + Player.Message(p, "\"{0}\" was not found in the database.", args[1]); return; } Swap(src, dst); Swap(dst, src); @@ -58,11 +58,11 @@ namespace MCGalaxy.Commands { void Swap(OfflinePlayer src, OfflinePlayer dst) { string first = DateTime.Parse(src.firstLogin).ToString(format); string last = DateTime.Parse(src.lastLogin).ToString(format); - const string syntax = "UPDATE Players SET totalBlocks=@0, color=@1, totalDeaths=@2" - + ", FirstLogin=@3, IP=@4, totalKicked=@5, LastLogin=@6, totalLogin=@7" - + ", Money=@8, Title=@9, title_color=@10, TimeSpent=@11 WHERE Name=@12"; + const string syntax = "UPDATE Players SET totalBlocks=@0, totalCuboided=@1" + + ", color=@2, totalDeaths=@3, FirstLogin=@4, IP=@5, totalKicked=@6, LastLogin=@7" + + ", totalLogin=@8, Money=@9, Title=@10, title_color=@11, TimeSpent=@12 WHERE Name=@13"; - Database.Execute(syntax, src.blocks, src.color, src.deaths, + Database.Execute(syntax, src.blocks, src.cuboided, src.color, src.deaths, first, src.ip, src.kicks, last, src.logins, src.money, src.title, src.titleColor, src.totalTime, dst.name); } diff --git a/Commands/Moderation/CmdPlayerEditDB.cs b/Commands/Moderation/CmdPlayerEditDB.cs index 30eae1a62..3be1b763e 100644 --- a/Commands/Moderation/CmdPlayerEditDB.cs +++ b/Commands/Moderation/CmdPlayerEditDB.cs @@ -72,7 +72,7 @@ namespace MCGalaxy.Commands { SetInteger(p, args, "totalBlocks", int.MaxValue, who, v => who.overallBlocks = v); break; case "totalcuboided": case "totalcuboid": - SetInteger(p, args, "totalCuboided", int.MaxValue, who, v => {}); break; + SetInteger(p, args, "totalCuboided", int.MaxValue, who, v => who.TotalBlocksDrawn = v); break; case "totalkicked": SetInteger(p, args, "totalKicked", 1000000000, who, v => who.totalKicked = v); break; case "timespent": diff --git a/Drawing/DrawOps/DrawOp.Performer.cs b/Drawing/DrawOps/DrawOp.Performer.cs index 70897045f..ba276bc9f 100644 --- a/Drawing/DrawOps/DrawOp.Performer.cs +++ b/Drawing/DrawOps/DrawOp.Performer.cs @@ -140,11 +140,12 @@ namespace MCGalaxy.Drawing.Ops { lvl.SetTile(b.X, b.Y, b.Z, b.Block, p, b.ExtBlock); p.loginBlocks++; p.overallBlocks++; + p.TotalBlocksDrawn++; } } else if (item.Level.bufferblocks) { foreach (var b in item.Op.Perform(item.Marks, p, lvl, item.Brush)) { if (b.Block == Block.Zero) continue; - if (!lvl.DoBlockchange(p, b.X, b.Y, b.Z, b.Block, b.ExtBlock)) continue; + if (!lvl.DoBlockchange(p, b.X, b.Y, b.Z, b.Block, b.ExtBlock, true)) continue; bP.name = p.name; bP.index = lvl.PosToInt(b.X, b.Y, b.Z); bP.SetData(b.Block, b.ExtBlock, b.Block == 0); @@ -156,7 +157,7 @@ namespace MCGalaxy.Drawing.Ops { } else { foreach (var b in item.Op.Perform(item.Marks, p, item.Level, item.Brush)) { if (b.Block == Block.Zero) continue; - if (!lvl.DoBlockchange(p, b.X, b.Y, b.Z, b.Block, b.ExtBlock)) continue; + if (!lvl.DoBlockchange(p, b.X, b.Y, b.Z, b.Block, b.ExtBlock, true)) continue; bP.name = p.name; bP.index = lvl.PosToInt(b.X, b.Y, b.Z); diff --git a/Drawing/DrawOps/RedoDrawOp.cs b/Drawing/DrawOps/RedoDrawOp.cs index 7bef07228..a4b209c52 100644 --- a/Drawing/DrawOps/RedoDrawOp.cs +++ b/Drawing/DrawOps/RedoDrawOp.cs @@ -60,7 +60,7 @@ namespace MCGalaxy.Drawing.Ops { byte tile, extTile; item.GetBlock(out tile, out extTile); - if (lvl.DoBlockchange(p, x, y, z, tile, extTile)) { + if (lvl.DoBlockchange(p, x, y, z, tile, extTile, true)) { buffer.Add(lvl.PosToInt(x, y, z), tile, extTile); buffer.CheckIfSend(false); } diff --git a/Levels/Level.Blocks.cs b/Levels/Level.Blocks.cs index be25dc5d3..c1eb97432 100644 --- a/Levels/Level.Blocks.cs +++ b/Levels/Level.Blocks.cs @@ -263,12 +263,14 @@ namespace MCGalaxy { return true; } - public void Blockchange(Player p, ushort x, ushort y, ushort z, byte type, byte extType = 0) { - if (DoBlockchange(p, x, y, z, type, extType)) - Player.GlobalBlockchange(this, x, y, z, type, extType); + public void Blockchange(Player p, ushort x, ushort y, ushort z, + byte block, byte extBlock = 0) { + if (DoBlockchange(p, x, y, z, block, extBlock)) + Player.GlobalBlockchange(this, x, y, z, block, extBlock); } - public bool DoBlockchange(Player p, ushort x, ushort y, ushort z, byte type, byte extType = 0) { + public bool DoBlockchange(Player p, ushort x, ushort y, ushort z, + byte block, byte extBlock = 0, bool drawn = false) { string errorLocation = "start"; retry: try @@ -279,13 +281,13 @@ namespace MCGalaxy { if (b == Block.custom_block) extB = GetExtTile(x, y, z); errorLocation = "Permission checking"; - if (!CheckAffectPermissions(p, x, y, z, b, type, extType)) { + if (!CheckAffectPermissions(p, x, y, z, b, block, extBlock)) { p.RevertBlock(x, y, z); return false; } - if (b == Block.sponge && physics > 0 && type != Block.sponge) + if (b == Block.sponge && physics > 0 && block != Block.sponge) OtherPhysics.DoSpongeRemoved(this, PosToInt(x, y, z)); - if (b == Block.lava_sponge && physics > 0 && type != Block.lava_sponge) + if (b == Block.lava_sponge && physics > 0 && block != Block.lava_sponge) OtherPhysics.DoSpongeRemoved(this, PosToInt(x, y, z), true); errorLocation = "Undo buffer filling"; @@ -293,27 +295,29 @@ namespace MCGalaxy { Pos.x = x; Pos.y = y; Pos.z = z; Pos.mapName = name; Pos.type = b; Pos.extType = extB; - Pos.newtype = type; Pos.newExtType = extType; + Pos.newtype = block; Pos.newExtType = extBlock; Pos.timeDelta = (int)DateTime.UtcNow.Subtract(Server.StartTime).TotalSeconds; p.UndoBuffer.Add(this, Pos); errorLocation = "Setting tile"; p.loginBlocks++; p.overallBlocks++; - SetTile(x, y, z, type); - if (b == Block.custom_block && type != Block.custom_block) + if (drawn) p.TotalBlocksDrawn++; + + SetTile(x, y, z, block); + if (b == Block.custom_block && block != Block.custom_block) RevertExtTileNoCheck(x, y, z); - if (type == Block.custom_block) - SetExtTileNoCheck(x, y, z, extType); + if (block == Block.custom_block) + SetExtTileNoCheck(x, y, z, extBlock); errorLocation = "Adding physics"; - if (p.PlayingTntWars && type == Block.smalltnt) AddTntCheck(PosToInt(x, y, z), p); - if (physics > 0 && Block.Physics(type)) AddCheck(PosToInt(x, y, z)); + if (p.PlayingTntWars && block == Block.smalltnt) AddTntCheck(PosToInt(x, y, z), p); + if (physics > 0 && Block.Physics(block)) AddCheck(PosToInt(x, y, z)); changed = true; backedup = false; - bool diffBlock = b == Block.custom_block ? extB != extType : - Block.Convert(b) != Block.Convert(type); + bool diffBlock = b == Block.custom_block ? extB != extBlock : + Block.Convert(b) != Block.Convert(block); return diffBlock; } catch (OutOfMemoryException) { Player.Message(p, "Undo buffer too big! Cleared!"); @@ -436,19 +440,20 @@ namespace MCGalaxy { return pos.X < Width && pos.Y < Height && pos.Z < Length; } - public void UpdateBlock(Player p, ushort x, ushort y, ushort z, byte type, byte extType) { - if (!DoBlockchange(p, x, y, z, type, extType)) return; + public void UpdateBlock(Player p, ushort x, ushort y, ushort z, + byte block, byte extBlock, bool drawn = false) { + if (!DoBlockchange(p, x, y, z, block, extBlock, drawn)) return; BlockPos bP = default(BlockPos); bP.name = p.name; bP.index = PosToInt(x, y, z); - bP.SetData(type, extType, type == 0); + bP.SetData(block, extBlock, block == 0); if (UseBlockDB) blockCache.Add(bP); if (bufferblocks) - BlockQueue.Addblock(p, bP.index, type, extType); + BlockQueue.Addblock(p, bP.index, block, extBlock); else - Player.GlobalBlockchange(this, x, y, z, type, extType); + Player.GlobalBlockchange(this, x, y, z, block, extBlock); } } } diff --git a/Player/Player.Fields.cs b/Player/Player.Fields.cs index 70ca56569..ab3475f68 100644 --- a/Player/Player.Fields.cs +++ b/Player/Player.Fields.cs @@ -151,8 +151,7 @@ namespace MCGalaxy { public bool canBuild = true; public int money = 0, loginMoney = 0; - public long overallBlocks = 0; - + public long overallBlocks = 0, TotalBlocksDrawn = 0; public int loginBlocks = 0; public DateTime timeLogged; diff --git a/Player/Player.Timers.cs b/Player/Player.Timers.cs index 786c09441..84a7ccf4d 100644 --- a/Player/Player.Timers.cs +++ b/Player/Player.Timers.cs @@ -82,7 +82,6 @@ namespace MCGalaxy { } Player[] players = PlayerInfo.Online.Items; - SendMessage("You have modified &a" + overallBlocks + " %Sblocks!"); string prefix = players.Length == 1 ? "There is" : "There are"; string suffix = players.Length == 1 ? " player online" : " players online"; SendMessage(prefix + " currently &a" + players.Length + suffix); diff --git a/Player/Player.cs b/Player/Player.cs index e4f66cc45..dad97647d 100644 --- a/Player/Player.cs +++ b/Player/Player.cs @@ -86,16 +86,16 @@ namespace MCGalaxy { public void save() { - const string query = "UPDATE Players SET IP=@0, LastLogin=@1, totalLogin=@2, " + - "totalDeaths=@3, Money=@4, totalBlocks=@5, totalKicked=@6, TimeSpent=@7 WHERE Name=@8"; + const string query = "UPDATE Players SET IP=@0, LastLogin=@1, totalLogin=@2, totalDeaths=@3, " + + "Money=@4, totalBlocks=@5, totalCuboided=@6, totalKicked=@7, TimeSpent=@8 WHERE Name=@9"; if (MySQLSave != null) MySQLSave(this, query); OnMySQLSaveEvent.Call(this, query); if (cancelmysql) { cancelmysql = false; return; } Database.Execute(query, ip, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - totalLogins, overallDeath, money, overallBlocks, - totalKicked, time.ToDBTime(), name); + totalLogins, overallDeath, money, overallBlocks, + TotalBlocksDrawn, totalKicked, time.ToDBTime(), name); if (Economy.Enabled && loginMoney != money) { Economy.EcoStats ecos = Economy.RetrieveEcoStats(name); @@ -120,7 +120,8 @@ namespace MCGalaxy { GlobalBlockchange(level, x, y, z, block, extBlock); } - public static void GlobalBlockchange(Level level, ushort x, ushort y, ushort z, byte block, byte extBlock) { + public static void GlobalBlockchange(Level level, ushort x, ushort y, ushort z, + byte block, byte extBlock) { Player[] players = PlayerInfo.Online.Items; foreach (Player p in players) { if (p.level == level) p.SendBlockchange(x, y, z, block, extBlock); diff --git a/Player/PlayerInfo.cs b/Player/PlayerInfo.cs index 96eb28d07..c702cea8e 100644 --- a/Player/PlayerInfo.cs +++ b/Player/PlayerInfo.cs @@ -102,6 +102,7 @@ namespace MCGalaxy { p.totalKicked = 0; p.overallDeath = 0; p.overallBlocks = 0; + p.TotalBlocksDrawn = 0; string now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); const string query = "INSERT INTO Players (Name, IP, FirstLogin, LastLogin, totalLogin, Title, totalDeaths" + @@ -109,8 +110,8 @@ namespace MCGalaxy { Database.Execute(query, p.name, p.ip, now, now, 1, "", 0, 0, 0, 0, p.time.ToDBTime()); const string ecoQuery = "INSERT INTO Economy (player, money, total, purchase, payment, salary, fine) " + - "VALUES (@0, @1, @2, @3, @4, @5, @6)"; - Database.Execute(ecoQuery, p.name, p.money, 0, "%cNone", "%cNone", "%cNone", "%cNone"); + "VALUES (@0, @1, @2, @3, @3, @3, @3)"; + Database.Execute(ecoQuery, p.name, p.money, 0, "%cNone"); } internal static void LoadInfo(DataTable playerDb, Player p) { @@ -131,6 +132,8 @@ namespace MCGalaxy { p.overallDeath = int.Parse(row["TotalDeaths"].ToString()); p.overallBlocks = long.Parse(row["totalBlocks"].ToString().Trim()); + p.TotalBlocksDrawn = long.Parse(row["totalCuboided"].ToString().Trim()); + //money = int.Parse(playerDb.Rows[0]["Money"].ToString()); p.money = Economy.RetrieveEcoStats(p.name).money; p.loginMoney = p.money; @@ -221,6 +224,7 @@ namespace MCGalaxy { pl.money = row["Money"].ToString(); pl.deaths = row["TotalDeaths"].ToString(); pl.blocks = row["totalBlocks"].ToString(); + pl.cuboided = row["totalCuboided"].ToString(); pl.logins = row["totalLogin"].ToString(); pl.kicks = row["totalKicked"].ToString(); return pl; @@ -239,7 +243,7 @@ namespace MCGalaxy { public class OfflinePlayer { public string name, color, title, titleColor; - public string money, deaths, blocks, logins, kicks; + public string money, deaths, blocks, cuboided, logins, kicks; public string totalTime, firstLogin, lastLogin, ip; } } diff --git a/Player/Undo/UndoFile.cs b/Player/Undo/UndoFile.cs index 545067ade..3a061a358 100644 --- a/Player/Undo/UndoFile.cs +++ b/Player/Undo/UndoFile.cs @@ -124,7 +124,7 @@ namespace MCGalaxy.Util { P.timeDelta = timeDelta; if (pl != null) { - if (lvl.DoBlockchange(pl, P.x, P.y, P.z, P.newtype, P.newExtType)) { + if (lvl.DoBlockchange(pl, P.x, P.y, P.z, P.newtype, P.newExtType, true)) { buffer.Add(lvl.PosToInt(P.x, P.y, P.z), P.newtype, P.newExtType); buffer.CheckIfSend(false); }