diff --git a/Horse Isle Server/Horse Isle Server/Game/Meta.cs b/Horse Isle Server/Horse Isle Server/Game/Meta.cs index 167c9fb..e00b174 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Meta.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Meta.cs @@ -596,9 +596,9 @@ namespace HISP.Game private static string buildBank(User user) { - string messages = Messages.FormatBankCarryingMeta(user.Money, user.BankMoney); + string messages = Messages.FormatBankCarryingMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney))); messages += Messages.BankWhatToDo; - messages += Messages.FormatBankOptionsMeta(user.Money, user.BankMoney); + messages += Messages.FormatBankOptionsMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney))); messages += Messages.ExitThisPlace; messages += Messages.MetaTerminator; return messages; diff --git a/Horse Isle Server/Horse Isle Server/Player/User.cs b/Horse Isle Server/Horse Isle Server/Player/User.cs index 6bb6afa..69cf16b 100644 --- a/Horse Isle Server/Horse Isle Server/Player/User.cs +++ b/Horse Isle Server/Horse Isle Server/Player/User.cs @@ -183,7 +183,22 @@ namespace HISP.Player } } - public UInt64 BankMoney + public double BankInterest + { + get + { + return bankInterest; + } + set + { + if (value > 9999999999.9999) + value = 9999999999.9999; + + Database.SetPlayerBankInterest(value, Id); + BankInterest = value; + } + } + public double BankMoney { get { @@ -191,8 +206,8 @@ namespace HISP.Player } set { - if (value > 9999999999) - value = 9999999999; + if (value > 9999999999.9999) + value = 9999999999.9999; Database.SetPlayerBankMoney(value, Id); bankMoney = value; @@ -302,7 +317,8 @@ namespace HISP.Player private int y; private int money; private int questPoints; - private UInt64 bankMoney; + private double bankMoney; + private double bankInterest; private int experience; private int hunger; private int thirst; @@ -406,6 +422,7 @@ namespace HISP.Player privateNotes = Database.GetPlayerNotes(UserId); hunger = Database.GetPlayerHunger(UserId); thirst = Database.GetPlayerThirst(UserId); + bankInterest = Database.GetPlayerBankInterest(UserId); tired = Database.GetPlayerTiredness(UserId); Gender = Database.GetGender(UserId); diff --git a/Horse Isle Server/Horse Isle Server/Resources/server.properties b/Horse Isle Server/Horse Isle Server/Resources/server.properties index e971ad8..a7f55f0 100644 --- a/Horse Isle Server/Horse Isle Server/Resources/server.properties +++ b/Horse Isle Server/Horse Isle Server/Resources/server.properties @@ -38,6 +38,10 @@ enable_corrections=true # Wether or not to consider all users "Subscribers" all_users_subscribed=false +# Equation is: BANK_BALANCE * (1/INTREST_RATE); +# on All servers except Black its 8, on black its 3. +# but of course you can make it whatever you want +intrest_rate=8 # Should print extra debug logs debug=false \ No newline at end of file diff --git a/Horse Isle Server/Horse Isle Server/Server/ConfigReader.cs b/Horse Isle Server/Horse Isle Server/Server/ConfigReader.cs index 34008ee..35310e5 100644 --- a/Horse Isle Server/Horse Isle Server/Server/ConfigReader.cs +++ b/Horse Isle Server/Horse Isle Server/Server/ConfigReader.cs @@ -14,7 +14,7 @@ namespace HISP.Server public static string DatabaseName; public static string DatabasePassword; public static int DatabasePort; - + public static int IntrestRate; public static string Motd; public static string MapFile; public static string GameDataFile; @@ -102,6 +102,9 @@ namespace HISP.Server case "enable_word_filter": DoCorrections = data == "true"; break; + case "intrest_rate": + IntrestRate = int.Parse(data); + break; case "debug": Debug = data == "true"; break; diff --git a/Horse Isle Server/Horse Isle Server/Server/Database.cs b/Horse Isle Server/Horse Isle Server/Server/Database.cs index 5c9142c..b885e00 100644 --- a/Horse Isle Server/Horse Isle Server/Server/Database.cs +++ b/Horse Isle Server/Horse Isle Server/Server/Database.cs @@ -17,7 +17,7 @@ namespace HISP.Server { db.Open(); string UserTable = "CREATE TABLE Users(Id INT, Username TEXT(16),Email TEXT(128),Country TEXT(128),SecurityQuestion Text(128),SecurityAnswerHash TEXT(128),Age INT,PassHash TEXT(128), Salt TEXT(128),Gender TEXT(16), Admin TEXT(3), Moderator TEXT(3))"; - string ExtTable = "CREATE TABLE UserExt(Id INT, X INT, Y INT, LastLogin INT, Money INT, QuestPoints INT, BankBalance BIGINT, ProfilePage Text(1028),PrivateNotes Text(1028), CharId INT, ChatViolations INT,Subscriber TEXT(3), SubscribedUntil INT, Experience INT, Tiredness INT, Hunger INT, Thirst INT, FreeMinutes INT)"; + string ExtTable = "CREATE TABLE UserExt(Id INT, X INT, Y INT, LastLogin INT, Money INT, QuestPoints INT, BankBalance DOUBLE, BankInterest DOUBLE, ProfilePage Text(1028),PrivateNotes Text(1028), CharId INT, ChatViolations INT,Subscriber TEXT(3), SubscribedUntil INT, Experience INT, Tiredness INT, Hunger INT, Thirst INT, FreeMinutes INT)"; string MailTable = "CREATE TABLE Mailbox(IdTo INT, PlayerFrom TEXT(16),Subject TEXT(128), Message Text(1028), TimeSent INT)"; string BuddyTable = "CREATE TABLE BuddyList(Id INT, IdFriend INT, Pending BOOL)"; string WorldTable = "CREATE TABLE World(Time INT,Day INT, Year INT, Weather TEXT(64))"; @@ -1444,7 +1444,7 @@ namespace HISP.Server throw new Exception("Userid " + id + " Allready in userext."); MySqlCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO UserExt VALUES(@id,@x,@y,@timestamp,0,0,0,'','',0,0,'NO',0,0,1000,1000,1000, 180)"; + sqlCommand.CommandText = "INSERT INTO UserExt VALUES(@id,@x,@y,@timestamp,0,0,0,0,'','',0,0,'NO',0,0,1000,1000,1000, 180)"; sqlCommand.Parameters.AddWithValue("@id", id); sqlCommand.Parameters.AddWithValue("@timestamp", Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds())); sqlCommand.Parameters.AddWithValue("@x", Map.NewUserStartX); @@ -2129,7 +2129,7 @@ namespace HISP.Server } } - public static UInt64 GetPlayerBankMoney(int userId) + public static double GetPlayerBankMoney(int userId) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) { @@ -2140,7 +2140,7 @@ namespace HISP.Server sqlCommand.CommandText = "SELECT BankBalance FROM UserExt WHERE Id=@id"; sqlCommand.Parameters.AddWithValue("@id", userId); sqlCommand.Prepare(); - UInt64 BankMoney = Convert.ToUInt64(sqlCommand.ExecuteScalar()); + double BankMoney = Convert.ToDouble(sqlCommand.ExecuteScalar()); sqlCommand.Dispose(); return BankMoney; @@ -2152,7 +2152,66 @@ namespace HISP.Server } } - public static void SetPlayerBankMoney(UInt64 bankMoney, int id) + public static double GetPlayerBankInterest(int userId) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT BankInterest FROM UserExt WHERE Id=@id"; + sqlCommand.Parameters.AddWithValue("@id", userId); + sqlCommand.Prepare(); + double BankInterest = Convert.ToDouble(sqlCommand.ExecuteScalar()); + + sqlCommand.Dispose(); + return BankInterest; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void DoIntrestPayments() + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET BankBalance=BankBalance * (1/@interestRate) AND NOT BankBalance * (1/@interestRate) > 9999999999.9999"; + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + sqlCommand.Dispose(); + } + } + + public static void SetPlayerBankInterest(double interest, int id) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + if (CheckUserExist(id)) + { + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET BankInterest=@interest WHERE Id=@id"; + sqlCommand.Parameters.AddWithValue("@interest", interest); + sqlCommand.Parameters.AddWithValue("@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + sqlCommand.Dispose(); + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + public static void SetPlayerBankMoney(double bankMoney, int id) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) {