diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json
index 8b53545..dee5886 100644
--- a/DataCollection/gamedata.json
+++ b/DataCollection/gamedata.json
@@ -21,7 +21,10 @@
 	},
 	"sec_code":{
 		"invalid_sec_code":"Data Code Error. You did not get the bonus. You should reconnect if you get this message again.",
-		"item_earned":"You Earned a %ITEM%!"
+		"item_earned":"You Earned a %ITEM%!",
+		"money_earned":"You Earned $%MONEY%!",
+		"highscore_beaten":"You just beat your best score! New high score: %SCORE%.",
+		"best_time_beaten":"Your new best time: %TIME%."
 	},
 	"dropped_items":{
 		"grab_message":"You grabbed an object off the ground.",
diff --git a/Horse Isle Server/Horse Isle Server/Game/Messages.cs b/Horse Isle Server/Horse Isle Server/Game/Messages.cs
index 0790f85..e2c8bb0 100644
--- a/Horse Isle Server/Horse Isle Server/Game/Messages.cs	
+++ b/Horse Isle Server/Horse Isle Server/Game/Messages.cs	
@@ -190,6 +190,10 @@ namespace HISP.Game
         // Sec Codes
         public static string InvalidSecCodeError;
         public static string YouEarnedAnItemFormat;
+        public static string YouEarnedMoneyFormat;
+        public static string BeatHighscoreFormat;
+        public static string BeatBestTimeFormat;
+
 
         // Meta
         public static string IsleFormat;
@@ -225,6 +229,18 @@ namespace HISP.Game
         // Click
         public static string NothingInterestingHere;
 
+        public static string FormatMoneyEarnedMessage(int money)
+        {
+            return YouEarnedMoneyFormat.Replace("%MONEY%", money.ToString("N0"));
+        }
+        public static string FormatTimeBeatenMessage(int time)
+        {
+            return BeatBestTimeFormat.Replace("%TIME%", time.ToString());
+        }
+        public static string FormatHighscoreBeatenMessage(int score)
+        {
+            return BeatHighscoreFormat.Replace("%SCORE%", score.ToString());
+        }
         public static string FormatQuestFooter(int totalQuestsComplete, int totalQuests, int questPoints, int totalQuestPoints)
         {
             return QuestFooterFormat.Replace("%TOTALCOMPLETED%", totalQuestsComplete.ToString("N0")).Replace("%TOTALQUESTS%", totalQuests.ToString("N0")).Replace("%TOTALPERCENT%", ((totalQuestsComplete / totalQuests) * 100).ToString()).Replace("%YOURQP%", questPoints.ToString("N0")).Replace("%YOURQP%", totalQuestPoints.ToString("N0")).Replace("%QPERCENT%", ((totalQuestsComplete / totalQuests) * 100).ToString()).Replace("%MAXQP%", totalQuestPoints.ToString("N0"));
diff --git a/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj b/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj
index 0bf263e..4e97b61 100644
--- a/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj	
+++ b/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj	
@@ -83,6 +83,7 @@
     <Compile Include="Game\Inventory\ShopInventory.cs" />
     <Compile Include="Player\Equips\Jewelry.cs" />
     <Compile Include="Player\Equips\CompetitionGear.cs" />
+    <Compile Include="Player\Highscore.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
       <DesignTime>True</DesignTime>
diff --git a/Horse Isle Server/Horse Isle Server/Player/Highscore.cs b/Horse Isle Server/Horse Isle Server/Player/Highscore.cs
new file mode 100644
index 0000000..50caf9b
--- /dev/null
+++ b/Horse Isle Server/Horse Isle Server/Player/Highscore.cs	
@@ -0,0 +1,31 @@
+using HISP.Server;
+
+
+namespace HISP.Player
+{
+    class Highscore
+    {
+        public static bool RegisterHighscore(int playerId, string gameTitle, int score, bool time)
+        {
+            bool isNewScore = true;
+
+            if (!Database.PlayerHasHighscore(playerId, gameTitle))
+            {
+                Database.AddNewHighscore(playerId, gameTitle, score, time ? "TIME" : "SCORE");
+                return isNewScore;
+            }
+            else
+            {
+                int currentScore = Database.GetHighscore(playerId, gameTitle);
+                if (score < currentScore)
+                {
+                    score = currentScore;
+                    isNewScore = false;
+                }
+
+                Database.UpdateHighscore(playerId, gameTitle, score);
+                return isNewScore;
+            }
+        }
+    }
+}
diff --git a/Horse Isle Server/Horse Isle Server/Player/User.cs b/Horse Isle Server/Horse Isle Server/Player/User.cs
index 6a2d093..d15b4d3 100644
--- a/Horse Isle Server/Horse Isle Server/Player/User.cs	
+++ b/Horse Isle Server/Horse Isle Server/Player/User.cs	
@@ -383,7 +383,6 @@ namespace HISP.Player
             SecCodeSeeds[2] = (byte)GameServer.RandomNumberGenerator.Next(40, 60);
             SecCodeInc = (byte)GameServer.RandomNumberGenerator.Next(40, 60);
 
-            // Make some friends! (Get a life!)
 
             Friends = new Friends(this);
 
diff --git a/Horse Isle Server/Horse Isle Server/Server/Database.cs b/Horse Isle Server/Horse Isle Server/Server/Database.cs
index a49ef48..296014d 100644
--- a/Horse Isle Server/Horse Isle Server/Server/Database.cs	
+++ b/Horse Isle Server/Horse Isle Server/Server/Database.cs	
@@ -27,6 +27,7 @@ namespace HISP.Server
                 string OnlineUsers = "CREATE TABLE OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3))";
                 string CompetitionGear = "CREATE TABLE CompetitionGear(playerId INT, headItem INT, bodyItem INT, legItem INT, feetItem INT)";
                 string Jewelry = "CREATE TABLE Jewelry(playerId INT, slot1 INT, slot2 INT, slot3 INT, slot4 INT)";
+                string Leaderboards = "CREATE TABLE Leaderboards(playerId INT, minigame TEXT(128), wins INT, looses INT, timesplayed INT, score INT, type TEXT(128))";
                 string DeleteOnlineUsers = "DELETE FROM OnlineUsers";
 
 
@@ -191,6 +192,20 @@ namespace HISP.Server
                 {
                     Logger.WarnPrint(e.Message);
                 };
+
+                try
+                {
+
+                    MySqlCommand sqlCommand = db.CreateCommand();
+                    sqlCommand.CommandText = Leaderboards;
+                    sqlCommand.ExecuteNonQuery();
+                    sqlCommand.Dispose();
+                }
+                catch (Exception e)
+                {
+                    Logger.WarnPrint(e.Message);
+                };
+
                 try
                 {
 
@@ -816,7 +831,7 @@ namespace HISP.Server
                 db.Open();
                 MySqlCommand sqlCommand = db.CreateCommand();
 
-                sqlCommand.CommandText = "UPDATE userExt SET FreeMinutes=FreeMinutes+@minutes";
+                sqlCommand.CommandText = "UPDATE userExt SET FreeMinutes=FreeMinutes+@minutes WHERE NOT FreeMinutes+@minutes > 360";
                 sqlCommand.Parameters.AddWithValue("@minutes", minutes);
                 sqlCommand.Prepare();
                 sqlCommand.ExecuteNonQuery();
@@ -1673,6 +1688,92 @@ namespace HISP.Server
             }
         }
 
+        public static bool PlayerHasHighscore(int playerId, string gameTitle)
+        {
+            using (MySqlConnection db = new MySqlConnection(ConnectionString))
+            {
+                db.Open();
+                MySqlCommand sqlCommand = db.CreateCommand();
+                sqlCommand.CommandText = "SELECT COUNT(1) FROM Leaderboards WHERE playerId=@playerId AND minigame=@gameTitle";
+                sqlCommand.Parameters.AddWithValue("@playerId", playerId);
+                sqlCommand.Parameters.AddWithValue("@gameTitle", gameTitle);
+                sqlCommand.Prepare();
+                int count = Convert.ToInt32(sqlCommand.ExecuteScalar());
+
+                sqlCommand.Dispose();
+                return count >= 1;
+            }
+        }
+        public static void AddNewHighscore(int playerId, string gameTitle, int score, string type)
+        {
+            using (MySqlConnection db = new MySqlConnection(ConnectionString))
+            {
+                
+                db.Open();
+                MySqlCommand sqlCommand = db.CreateCommand();
+                sqlCommand.CommandText = "INSERT INTO Leaderboards VALUES(@playerId,@gameTitle,0,0,1,@score,@type)";
+                sqlCommand.Parameters.AddWithValue("@playerId", playerId);
+                sqlCommand.Parameters.AddWithValue("@gameTitle", gameTitle);
+                sqlCommand.Parameters.AddWithValue("@score", score);
+                sqlCommand.Parameters.AddWithValue("@type", type);
+                sqlCommand.Prepare();
+                sqlCommand.ExecuteNonQuery();
+
+                sqlCommand.Dispose();
+                return;
+            }
+        }
+
+        public static int GetHighscore(int playerId, string gameTitle)
+        {
+            using (MySqlConnection db = new MySqlConnection(ConnectionString))
+            {
+                db.Open();
+                MySqlCommand sqlCommand = db.CreateCommand();
+                sqlCommand.CommandText = "SELECT score FROM Leaderboards WHERE playerId=@playerId AND minigame=@gameTitle";
+                sqlCommand.Parameters.AddWithValue("@playerId", playerId);
+                sqlCommand.Parameters.AddWithValue("@gameTitle", gameTitle);
+                sqlCommand.Prepare();
+                int score = Convert.ToInt32(sqlCommand.ExecuteScalar());
+
+                sqlCommand.Dispose();
+                return score;
+            }
+        }
+        public static void UpdateHighscore(int playerId, string gameTitle, int score)
+        {
+            using (MySqlConnection db = new MySqlConnection(ConnectionString))
+            {
+
+                db.Open();
+                MySqlCommand sqlCommand = db.CreateCommand();
+                sqlCommand.CommandText = "UPDATE Leaderboards SET score=@score, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle";
+                sqlCommand.Parameters.AddWithValue("@playerId", playerId);
+                sqlCommand.Parameters.AddWithValue("@gameTitle", gameTitle);
+                sqlCommand.Parameters.AddWithValue("@score", score);
+                sqlCommand.Prepare();
+                sqlCommand.ExecuteNonQuery();
+
+                sqlCommand.Dispose();
+                return;
+            }
+        }
+
+
+        public static void IncPlayerTirednessForOfflineUsers()
+        {
+            using (MySqlConnection db = new MySqlConnection(ConnectionString))
+            {
+                db.Open();
+                MySqlCommand sqlCommand = db.CreateCommand();
+                sqlCommand.CommandText = "UPDATE userext SET tiredness = tiredness + 1 WHERE id NOT IN (SELECT playerId FROM onlineusers) AND NOT tiredness +1 > 1000";
+                sqlCommand.Prepare();
+                sqlCommand.ExecuteNonQuery();
+
+                sqlCommand.Dispose();
+                return;
+            }
+        }
 
         public static int GetPlayerTiredness(int userId)
         {
diff --git a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs
index 13d564e..c63b615 100644
--- a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs	
+++ b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs	
@@ -356,7 +356,7 @@ namespace HISP.Server
                 if (gameData.quest_list[i].chained_questid != null)
                     quest.ChainedQuestId = gameData.quest_list[i].chained_questid;
                 quest.Minigame = gameData.quest_list[i].minigame;
-                Logger.DebugPrint("Registered Quest: " + quest.Id);
+                Logger.DebugPrint("Registered Quest: " + quest.Id +" - "+ quest.Title);
                 Quest.QuestList.Add(quest);
             }
 
@@ -555,6 +555,9 @@ namespace HISP.Server
 
             Messages.InvalidSecCodeError = gameData.messages.sec_code.invalid_sec_code;
             Messages.YouEarnedAnItemFormat = gameData.messages.sec_code.item_earned;
+            Messages.YouEarnedMoneyFormat = gameData.messages.sec_code.money_earned;
+            Messages.BeatHighscoreFormat = gameData.messages.sec_code.highscore_beaten;
+            Messages.BeatBestTimeFormat = gameData.messages.sec_code.best_time_beaten;
 
             // Inventory
 
diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs
index 0f0ce05..4df020d 100644
--- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs	
+++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs	
@@ -53,6 +53,7 @@ namespace HISP.Server
             {
                 Database.IncAllUsersFreeTime(1);
             }
+            Database.IncPlayerTirednessForOfflineUsers();
 
             DroppedItems.Update();
             minuteTimer.Change(oneMinute, oneMinute);
@@ -267,7 +268,7 @@ namespace HISP.Server
             }
 
             byte method = packet[1];
-            if(method == PacketBuilder.PACKET_CLIENT_TERMINATOR)
+            if (method == PacketBuilder.PACKET_CLIENT_TERMINATOR)
             {
                 UpdateStats(sender);
             }
@@ -307,6 +308,130 @@ namespace HISP.Server
                 UpdateArea(sender);
                 UpdateUserInfo(sender.LoggedinUser);
             }
+            else if (method == PacketBuilder.SECCODE_SCORE || method == PacketBuilder.SECCODE_TIME)
+            {
+                bool time = (method == PacketBuilder.SECCODE_TIME);
+
+                byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode();
+                byte[] GotSecCode = new byte[4];
+                Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length);
+                Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " "));
+                if (ExpectedSecCode.SequenceEqual(GotSecCode))
+                {
+                    if (packet.Length < 6)
+                    {
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode score request with invalid size");
+                        return;
+                    }
+
+                    string packetStr = Encoding.UTF8.GetString(packet);
+                    string gameInfoStr = packetStr.Substring(6, packetStr.Length - 6 - 2);
+                    if(gameInfoStr.Contains("|"))
+                    {
+                        string[] gameInfo = gameInfoStr.Split('|');
+                        if(gameInfo.Length < 2)
+                        {
+                            Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a invalid seccode score request");
+                            return;
+                        }
+
+                        string gameTitle = gameInfo[0];
+                        string gameScoreStr = gameInfo[1];
+                        
+                        int value = -1;
+                        try
+                        {
+                            value = int.Parse(gameScoreStr);
+                        }
+                        catch (FormatException)
+                        {
+                            Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid score value");
+                            return;
+                        }
+
+                        bool newHighscore = Highscore.RegisterHighscore(sender.LoggedinUser.Id, gameTitle, value, time);
+                        if (newHighscore && !time)
+                        {
+                            byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatHighscoreBeatenMessage(value), PacketBuilder.CHAT_BOTTOM_RIGHT);
+                            sender.SendPacket(chatPacket);
+                        }
+                        else
+                        {
+                            byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatTimeBeatenMessage(value), PacketBuilder.CHAT_BOTTOM_RIGHT);
+                            sender.SendPacket(chatPacket);
+                        }
+                    }
+                    else
+                    {
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " didnt send a game name AND a score.");
+                        return;
+                    }
+
+                }
+                else
+                {
+                    byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT);
+                    sender.SendPacket(errorMessage);
+                    Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code");
+                    return;
+                }
+            } 
+            else if (method == PacketBuilder.SECCODE_MONEY)
+            {
+
+                byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode();
+                byte[] GotSecCode = new byte[4];
+                Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length);
+                Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " "));
+                if (ExpectedSecCode.SequenceEqual(GotSecCode))
+                {
+                    if (packet.Length < 6)
+                    {
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode money request with invalid size");
+                        return;
+                    }
+
+                    string packetStr = Encoding.UTF8.GetString(packet);
+                    string gameInfoStr = packetStr.Substring(6, packetStr.Length - 6 - 2);
+                    if (gameInfoStr.Contains("|"))
+                    {
+                        string[] moneyInfo = gameInfoStr.Split('|');
+                        if (moneyInfo.Length < 2)
+                        {
+                            Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a invalid money score request");
+                            return;
+                        }
+
+                        string id = moneyInfo[0]; // not sure what this is for?
+
+                        string moneyStr = moneyInfo[1];
+                        int value = -1;
+                        try
+                        {
+                            value = int.Parse(moneyStr);
+                        }
+                        catch (FormatException)
+                        {
+                            Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid money value");
+                            return;
+                        }
+
+                        int moneyEarned = value * 10;
+                        Logger.InfoPrint(sender.LoggedinUser.Username + " Earned $" + moneyEarned + " In: " + id);
+
+                        sender.LoggedinUser.Money += moneyEarned;
+                        byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatMoneyEarnedMessage(moneyEarned), PacketBuilder.CHAT_BOTTOM_RIGHT);
+                        sender.SendPacket(chatPacket);
+
+                    }
+                    else
+                    {
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " didnt send a game name AND a score.");
+                        return;
+                    }
+
+                }
+            }
             else if (method == PacketBuilder.SECCODE_ITEM)
             {
                 byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode();
@@ -315,6 +440,11 @@ namespace HISP.Server
                 Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " "));
                 if (ExpectedSecCode.SequenceEqual(GotSecCode))
                 {
+                    if (packet.Length < 6)
+                    {
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode item request with invalid size");
+                        return;
+                    }
                     string packetStr = Encoding.UTF8.GetString(packet);
                     string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2);
                     int value = -1;
@@ -322,9 +452,9 @@ namespace HISP.Server
                     {
                         value = int.Parse(intStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
-                        Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value");
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value");
                         return;
                     }
 
@@ -360,6 +490,11 @@ namespace HISP.Server
                 Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " "));
                 if (ExpectedSecCode.SequenceEqual(GotSecCode))
                 {
+                    if (packet.Length < 6)
+                    {
+                        Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode quest request with invalid size");
+                        return;
+                    }
                     string packetStr = Encoding.UTF8.GetString(packet);
                     string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2);
                     int value = -1;
@@ -367,7 +502,7 @@ namespace HISP.Server
                     {
                         value = int.Parse(intStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value");
                         return;
@@ -389,7 +524,7 @@ namespace HISP.Server
                 }
                 else
                 {
-                    byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError,PacketBuilder.CHAT_BOTTOM_RIGHT);
+                    byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT);
                     sender.SendPacket(errorMessage);
                     Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code");
                     return;
@@ -409,9 +544,9 @@ namespace HISP.Server
             User loggedInUser = sender.LoggedinUser;
             byte movementDirection = packet[1];
 
-            if (loggedInUser.Thirst <= 25 || loggedInUser.Hunger == 25 || loggedInUser.Tiredness == 25)
+            if (loggedInUser.Thirst <= 25 || loggedInUser.Hunger <= 25 || loggedInUser.Tiredness <= 25)
             {
-                if (RandomNumberGenerator.Next(0, 15) == 10)
+                if (RandomNumberGenerator.Next(0, 10) == 7)
                 {
                     byte[] possibleDirections = new byte[] { PacketBuilder.MOVE_UP, PacketBuilder.MOVE_DOWN, PacketBuilder.MOVE_RIGHT, PacketBuilder.MOVE_LEFT };
 
@@ -600,7 +735,7 @@ namespace HISP.Server
                 {
                     chatId = int.Parse(number);
                 }
-                catch (InvalidOperationException)
+                catch (FormatException)
                 {
                     Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to start talking to an NPC with id that is NaN.");
                     return;
@@ -622,7 +757,7 @@ namespace HISP.Server
                 {
                     replyId = int.Parse(number);
                 }
-                catch (InvalidOperationException)
+                catch (FormatException)
                 {
                     Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to reply to an NPC with replyid that is NaN.");
                     return;
@@ -674,7 +809,7 @@ namespace HISP.Server
             {
                 transportid =  Int32.Parse(number);
             }
-            catch(InvalidOperationException)
+            catch(FormatException)
             {
                 Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to use a transport with id that is NaN.");
                 return;
@@ -900,7 +1035,7 @@ namespace HISP.Server
                     {
                         randomId = Int32.Parse(randomIdStr);
                     }
-                    catch(InvalidOperationException)
+                    catch(FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet.");
                         return;
@@ -1062,7 +1197,7 @@ namespace HISP.Server
                     {
                         randomId = Int32.Parse(randomIdStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet.");
                         return;
@@ -1183,7 +1318,7 @@ namespace HISP.Server
                     {
                         randomId = Int32.Parse(randomIdStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet.");
                         return;
@@ -1252,7 +1387,7 @@ namespace HISP.Server
                     {
                         randomId = Int32.Parse(randomIdStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object sell packet.");
                         return;
@@ -1276,7 +1411,7 @@ namespace HISP.Server
                     {
                         itemId = Int32.Parse(itemIdStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object sell packet.");
                         return;
@@ -1355,7 +1490,7 @@ namespace HISP.Server
                     {
                         itemId = Int32.Parse(itemIdStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object buy packet.");
                         return;
@@ -1473,7 +1608,7 @@ namespace HISP.Server
                     {
                         value = Int32.Parse(valueStr);
                     }
-                    catch (InvalidOperationException)
+                    catch (FormatException)
                     {
                         Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet.");
                         return;
diff --git a/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs b/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs
index ca3f2df..089a1fa 100644
--- a/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs	
+++ b/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs	
@@ -29,6 +29,7 @@ namespace HISP.Server
         public const byte PACKET_KEEP_ALIVE = 0x7C;
         public const byte PACKET_DYNAMIC_BUTTON = 0x45;
         public const byte PACKET_DYNAMIC_INPUT = 0x46;
+        
         public const byte PACKET_PLAYER = 0x18;
         public const byte PACKET_INVENTORY = 0x17;
         public const byte PACKET_TRANSPORT = 0x29;
@@ -41,6 +42,9 @@ namespace HISP.Server
 
         public const byte SECCODE_QUEST = 0x32;
         public const byte SECCODE_ITEM = 0x28;
+        public const byte SECCODE_SCORE = 0x3D;
+        public const byte SECCODE_TIME = 0x3E;
+        public const byte SECCODE_MONEY = 0x1E; 
 
         public const byte NPC_START_CHAT = 0x14;
         public const byte NPC_CONTINUE_CHAT = 0x15;