From 1ed964aacf356de52e72a10223d3d651e082659b Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Tue, 22 Dec 2020 12:54:59 +1300 Subject: [PATCH] Add distinciton between subscribed and non subscribed users. --- DataCollection/gamedata.json | 19 ++++++ .../Horse Isle Server/Player/User.cs | 26 +++++++- .../Horse Isle Server/Server/Database.cs | 61 +++++++++++++++++-- .../Horse Isle Server/Server/GameServer.cs | 3 +- 4 files changed, 101 insertions(+), 8 deletions(-) diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index eea7c10..94ea8b5 100644 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -76,6 +76,25 @@ "end_of_meta":"^Z", "back_to_map":"^M", "long_full_line":"^L", + "stats_page":{ + "stats_bar_format":"^ATPlayer %USERNAME%'s Details^H", + "stats_area_format":"Currently in %AREA%", + "stats_money_format":"
Money: $%MONEY%", + "stats_freetime_format":"
Today's Free Time Remaining: %FREEMINUTES% minutes.", + "stats_description_format":"
Description: %PLAYERDESC%", + "stats_experience":"
^HExperience: %EXPERIENCE%", + "stats_questpoints":"
Quest Points: %QUESTPOINTS%", + "stats_hunger":"
Hunger: %HUNGER%", + "stats_thisrt":"
Thirst: %THIRST%", + "stats_tiredness":"
Tiredness: %TIRED%", + "stats_gender":"
Gender: %GENDER%", + "stats_equipped":"
%JEWELFORMAT%", + "stats_competion_gear":"
%GEARFORMAT%" + "msg":{ + "no_jewelry_equipped":"You have no Jewelry on.", + "no_competition_gear":"^LYou have nothing interesting for special competition gear.", + } + }, "shop":{ "selling":"^LThings I am selling:", "sell_me":"^LThings you can SELL to me:", diff --git a/Horse Isle Server/Horse Isle Server/Player/User.cs b/Horse Isle Server/Horse Isle Server/Player/User.cs index 242aadc..6acdcc7 100644 --- a/Horse Isle Server/Horse Isle Server/Player/User.cs +++ b/Horse Isle Server/Horse Isle Server/Player/User.cs @@ -35,6 +35,25 @@ namespace HISP.Player public Npc.NpcEntry LastTalkedToNpc; public Shop LastShoppedAt; public PlayerQuests Quests; + public bool Subscribed + { + get + { + int Timestamp = Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()); + if(Timestamp > subscribedUntil) // sub expired. + { + Logger.InfoPrint(Username + "'s Subscription expired. (timestamp now: " + Timestamp + " exp date: " + subscribedUntil+" )"); + Database.SetUserSubscriptionStatus(this.Id, false); + subscribed = false; + } + + return subscribed; + } + set + { + Database.SetUserSubscriptionStatus(this.Id, value); + } + } public bool Stealth { get @@ -46,7 +65,7 @@ namespace HISP.Player if (value) Database.RemoveOnlineUser(this.Id); else - Database.AddOnlineUser(this.Id, this.Administrator, this.Moderator); + Database.AddOnlineUser(this.Id, this.Administrator, this.Moderator, this.Subscribed); stealth = value; } @@ -156,6 +175,8 @@ namespace HISP.Player private int chatViolations; private int charId; + private int subscribedUntil; + private bool subscribed; private string profilePage; private int x; private bool stealth = false; @@ -225,7 +246,8 @@ namespace HISP.Player money = Database.GetPlayerMoney(UserId); bankMoney = Database.GetPlayerBankMoney(UserId); questPoints = Database.GetPlayerQuestPoints(UserId); - + subscribed = Database.IsUserSubscribed(UserId); + subscribedUntil = Database.GetUserSubscriptionExpireDate(UserId); profilePage = Database.GetPlayerProfile(UserId); MailBox = new Mailbox(this); diff --git a/Horse Isle Server/Horse Isle Server/Server/Database.cs b/Horse Isle Server/Horse Isle Server/Server/Database.cs index 48ce5d5..f65e3e4 100644 --- a/Horse Isle Server/Horse Isle Server/Server/Database.cs +++ b/Horse Isle Server/Horse Isle Server/Server/Database.cs @@ -16,7 +16,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, Money INT, QuestPoints INT, BankBalance BIGINT,ProfilePage Text(1028), CharId INT, ChatViolations INT)"; + string ExtTable = "CREATE TABLE UserExt(Id INT, X INT, Y INT, Money INT, QuestPoints INT, BankBalance BIGINT,ProfilePage 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))"; @@ -24,7 +24,7 @@ namespace HISP.Server string ShopInventory = "CREATE TABLE ShopInventory(ShopID INT, RandomID INT, ItemID INT)"; string DroppedItems = "CREATE TABLE DroppedItems(X INT, Y INT, RandomID INT, ItemID INT, DespawnTimer INT)"; string TrackedQuest = "CREATE TABLE TrackedQuest(playerId INT, questId INT, timesCompleted INT)"; - string OnlineUsers = "CREATE TABLE OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3))"; + string OnlineUsers = "CREATE TABLE OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3))"; string DeleteOnlineUsers = "DELETE FROM OnlineUsers"; @@ -389,6 +389,56 @@ namespace HISP.Server } } + public static bool SetUserSubscriptionStatus(int playerId, bool subscribed) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE userExt SET Subscriber=@subscribed WHERE Id=@playerId"; + sqlCommand.Parameters.AddWithValue("@subscribed", subscribed ? "YES" : "NO"); + sqlCommand.Parameters.AddWithValue("@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + sqlCommand.Dispose(); + + return subscribed; + } + } + public static int GetUserSubscriptionExpireDate(int playerId) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT SubscribedUntil FROM userExt WHERE Id=@playerId"; + sqlCommand.Parameters.AddWithValue("@playerId", playerId); + sqlCommand.Prepare(); + int subscribedUntil = Convert.ToInt32(sqlCommand.ExecuteScalar()); + sqlCommand.Dispose(); + + return subscribedUntil; + } + } + public static bool IsUserSubscribed(int playerId) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT Subscriber FROM userExt WHERE Id=@playerId"; + sqlCommand.Parameters.AddWithValue("@playerId", playerId); + sqlCommand.Prepare(); + bool subscribed = (string)(sqlCommand.ExecuteScalar()) == "YES"; + sqlCommand.Dispose(); + + return subscribed; + } + } public static void AddNewTrackedQuest(int playerId, int questId, int timesCompleted) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) @@ -405,17 +455,18 @@ namespace HISP.Server sqlCommand.Dispose(); } } - public static void AddOnlineUser(int playerId, bool Admin, bool Moderator) + public static void AddOnlineUser(int playerId, bool Admin, bool Moderator, bool Subscribed) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) { db.Open(); MySqlCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO OnlineUsers VALUES(@playerId, @admin, @moderator)"; + sqlCommand.CommandText = "INSERT INTO OnlineUsers VALUES(@playerId, @admin, @moderator, @subscribed)"; sqlCommand.Parameters.AddWithValue("@playerId", playerId); sqlCommand.Parameters.AddWithValue("@admin", Admin ? "YES" : "NO"); sqlCommand.Parameters.AddWithValue("@moderator", Moderator ? "YES" : "NO"); + sqlCommand.Parameters.AddWithValue("@subscribed", Subscribed ? "YES" : "NO"); sqlCommand.Prepare(); sqlCommand.ExecuteNonQuery(); sqlCommand.Dispose(); @@ -842,7 +893,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,0,0,0,'',0,0)"; + sqlCommand.CommandText = "INSERT INTO UserExt VALUES(@id,@x,@y,0,0,0,'',0,0,'NO',0,0,1000,1000,1000, 360)"; sqlCommand.Parameters.AddWithValue("@id", id); sqlCommand.Parameters.AddWithValue("@x", Map.NewUserStartX); sqlCommand.Parameters.AddWithValue("@y", Map.NewUserStartY); diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs index b5015b8..767f439 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs @@ -65,7 +65,8 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); return; } - Database.AddOnlineUser(sender.LoggedinUser.Id, sender.LoggedinUser.Administrator, sender.LoggedinUser.Moderator); + Database.AddOnlineUser(sender.LoggedinUser.Id, sender.LoggedinUser.Administrator, sender.LoggedinUser.Moderator, sender.LoggedinUser.Subscribed); + Logger.DebugPrint(sender.LoggedinUser.Username + " Requested user information."); User user = sender.LoggedinUser;