From a204527ebbefc1eaf6b40ff90872d98ab1969e40 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 2 Sep 2016 14:56:27 +1000 Subject: [PATCH] Start rewriting economy database table structure - store money in Players table instead, with economy table only tracking players who have performed transactions. --- Economy/Economy.cs | 31 +++++++++++++++---------------- Player/Player.cs | 6 ------ Player/PlayerData.cs | 9 +-------- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/Economy/Economy.cs b/Economy/Economy.cs index 9b745c51d..13bbf6e94 100644 --- a/Economy/Economy.cs +++ b/Economy/Economy.cs @@ -55,21 +55,15 @@ PRIMARY KEY(player) } public static void LoadDatabase() { - retry: - Database.Execute(createTable); //create database - DataTable eco = Database.Fill("SELECT * FROM Economy"); - try { - DataTable players = Database.Fill("SELECT * FROM Players"); - if (players.Rows.Count == eco.Rows.Count) { } //move along, nothing to do here - else if (eco.Rows.Count == 0) { //if first time, copy content from player to economy - Database.Execute("INSERT INTO Economy (player, money) SELECT Players.Name, Players.Money FROM Players"); - } else { - //this will only be needed when the server shuts down while it was copying content (or some other error) - Database.Backend.DeleteTable("Economy"); - goto retry; - } - players.Dispose(); eco.Dispose(); - } catch { } + Database.Execute(createTable); + DataTable eco = Database.Fill("SELECT (player, money) FROM Economy"); + foreach (DataRow row in eco) { + int money = PlayerData.ParseInt(row["money"].ToString()); + if (money == 0) continue; + + UpdateMoney(row["player"].ToString(), money); + // TODO: remove zero money in Economy table + } } public static void Load() { @@ -109,7 +103,7 @@ PRIMARY KEY(player) public static void Save() { using (StreamWriter w = new StreamWriter("properties/economy.properties", false)) { - w.WriteLine("enabled:" + Enabled); + w.WriteLine("enabled:" + Enabled); foreach (Item item in Items) { w.WriteLine(); item.Serialise(w); @@ -143,6 +137,11 @@ PRIMARY KEY(player) Database.Execute(type + " Economy (player, money, total, purchase, payment, salary, fine) " + "VALUES (@0, @1, @2, @3, @4, @5, @6)", es.playerName, es.money, es.totalSpent, es.purchase, es.payment, es.salary, es.fine); + UpdateMoney(es.playerName, es.money); + } + + public static void UpdateMoney(string name, int money) { + Database.Execute("UPDATE Players SET Money=@0 WHERE Name=@1", name, money); } public static Item[] Items = { new ColorItem(), new TitleColorItem(), diff --git a/Player/Player.cs b/Player/Player.cs index 457da54ee..cfd6f879f 100644 --- a/Player/Player.cs +++ b/Player/Player.cs @@ -118,12 +118,6 @@ namespace MCGalaxy { totalLogins, overallDeath, money, blocks, cuboided, totalKicked, time.ToDBTime(), name); - if (Economy.Enabled && loginMoney != money) { - Economy.EcoStats ecos = Economy.RetrieveEcoStats(name); - ecos.money = money; - Economy.UpdateEcoStats(ecos); - } - Server.zombie.SaveZombieStats(this); SaveUndo(this); } diff --git a/Player/PlayerData.cs b/Player/PlayerData.cs index 272b8b794..6b894e024 100644 --- a/Player/PlayerData.cs +++ b/Player/PlayerData.cs @@ -46,11 +46,6 @@ namespace MCGalaxy { ", Money, totalBlocks, totalKicked, TimeSpent) VALUES (@0, @1, @2, @2, @3, @4, @5, @5, @5, @5, @6)"; Database.Execute(query, p.name, p.ip, now, 1, "", 0, p.time.ToDBTime()); - - const string ecoQuery = "INSERT INTO Economy (player, money, total, purchase, payment, salary, fine) " + - "VALUES (@0, @1, @2, @3, @3, @3, @3)"; - Database.Execute(ecoQuery, - p.name, p.money, 0, "%cNone"); } internal static void Load(DataTable playerDb, Player p) { @@ -74,9 +69,7 @@ namespace MCGalaxy { p.TotalPlaced = data.TotalPlaced; p.TotalDeleted = data.TotalDeleted; - //money = int.Parse(data.money); - p.money = Economy.RetrieveEcoStats(p.name).money; - p.loginMoney = p.money; + p.money = data.Money; p.totalKicked = data.Kicks; }