From 1cb158f7b0b7e58aede1cdc35e9bd80e4df78853 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sat, 6 Nov 2021 22:01:21 -0400 Subject: [PATCH 1/8] Fix ability to DM every user --- HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs | 10 +++++++++- HorseIsleServer/HorseIsleServer/Server/GameServer.cs | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs index 37a5003..b161eed 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs @@ -439,15 +439,23 @@ namespace HISP.Game.Chat if(channel == ChatChannel.Dm) { - if (to != null) + if (to != null && to != "") { List recipiants = new List(); foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) + { if (!client.LoggedinUser.MutePrivateMessage && !client.LoggedinUser.MuteAll) + { if (client.LoggedinUser.Username.ToLower().StartsWith(to.ToLower())) + { recipiants.Add(client); + break; + } + + } + } } return recipiants.ToArray(); } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index a452665..34fdc30 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -7553,11 +7553,13 @@ namespace HISP.Server List usersNearby = new List(); foreach (GameClient client in GameClient.ConnectedClients) + { if (client.LoggedIn) { if (startX <= client.LoggedinUser.X && endX >= client.LoggedinUser.X && startY <= client.LoggedinUser.Y && endY >= client.LoggedinUser.Y) usersNearby.Add(client.LoggedinUser); } + } return usersNearby.ToArray(); } @@ -7602,6 +7604,7 @@ namespace HISP.Server List usersNearby = new List(); foreach (GameClient client in GameClient.ConnectedClients) + { if (client.LoggedIn) { if (!includeStealth && client.LoggedinUser.Stealth) @@ -7611,6 +7614,7 @@ namespace HISP.Server if (startX <= client.LoggedinUser.X && endX >= client.LoggedinUser.X && startY <= client.LoggedinUser.Y && endY >= client.LoggedinUser.Y) usersNearby.Add(client.LoggedinUser); } + } return usersNearby.ToArray(); } From d837b3d8ea6a176bb843305a33391fdcd8335713 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sat, 6 Nov 2021 22:40:13 -0400 Subject: [PATCH 2/8] Fix weird probably toc/tou crash' --- .../HorseIsleServer/Game/Inventory/PlayerInventory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Inventory/PlayerInventory.cs b/HorseIsleServer/HorseIsleServer/Game/Inventory/PlayerInventory.cs index a36953f..d333517 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Inventory/PlayerInventory.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Inventory/PlayerInventory.cs @@ -59,7 +59,7 @@ namespace HISP.Game.Inventory public InventoryItem[] GetItemList() { - return inventoryItems.OrderBy(o => o.ItemInstances[0].GetItemInfo().SortBy).ToArray(); + return inventoryItems.OrderBy(o => Item.GetItemById(o.ItemId).SortBy).ToArray(); } From c58326ffba7b7117e0601227222e22c06b24c83d Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sat, 6 Nov 2021 22:53:06 -0400 Subject: [PATCH 3/8] fix camel gear not being equipable by anyone --- HorseIsleServer/HorseIsleServer/Game/Items/Item.cs | 4 +++- HorseIsleServer/HorseIsleServer/Game/Meta.cs | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs b/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs index 754269c..735dac5 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs @@ -43,7 +43,9 @@ namespace HISP.Game.Items public int GetMiscFlag(int no) { - if (MiscFlags.Length <= no) + if (no < 0) + return 0; + if (no >= MiscFlags.Length) return 0; else return MiscFlags[no]; diff --git a/HorseIsleServer/HorseIsleServer/Game/Meta.cs b/HorseIsleServer/HorseIsleServer/Game/Meta.cs index 0ce47a6..4bd3b16 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Meta.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Meta.cs @@ -2512,14 +2512,14 @@ namespace HISP.Game foreach(InventoryItem item in user.Inventory.GetItemList()) { - Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); + Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); if (itemInfo.Type == "TACK") { - if (horse.Breed.Type == "camel" && itemInfo.GetMiscFlag(2) != 1) + if (horse.Breed.Type == "camel" && itemInfo.GetMiscFlag(1) != 1) continue; - else if (horse.Breed.Type == "llama" && itemInfo.GetMiscFlag(2) != 2) + else if (horse.Breed.Type == "llama" && itemInfo.GetMiscFlag(1) != 2) continue; - else if (itemInfo.GetMiscFlag(2) != 0) + else if (itemInfo.GetMiscFlag(1) != 0) continue; message += Messages.FormatHorseEquip(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, itemInfo.Id); } From ab62c65f13c10324182895790898615d7b6da06a Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:24:29 -0400 Subject: [PATCH 4/8] Fix arena EXP Rewards --- HorseIsleData | 2 +- HorseIsleServer/HorseIsleServer/Game/Arena.cs | 20 +++---------------- .../HorseIsleServer/Server/GameClient.cs | 2 -- .../HorseIsleServer/Server/GameDataJson.cs | 14 +++++++------ 4 files changed, 12 insertions(+), 26 deletions(-) diff --git a/HorseIsleData b/HorseIsleData index 82cffb5..0f92689 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit 82cffb522d1ebdb3d4c00da52087461a8068fa36 +Subproject commit 0f9268907fb3cd9d0da9c8ab1cba8308de0e5656 diff --git a/HorseIsleServer/HorseIsleServer/Game/Arena.cs b/HorseIsleServer/HorseIsleServer/Game/Arena.cs index 46dc6f2..43be3a9 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Arena.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Arena.cs @@ -16,7 +16,7 @@ namespace HISP.Game private static List arenas = new List(); private List entries; private Timer arenaTimeout; - + public static int[] ExpRewards; public int Id; public string Type; public int EntryCost; @@ -247,23 +247,9 @@ namespace HISP.Game if(Mode == "COMPETING") { string chatMessage = Messages.ArenaResultsMessage; - + string[] avaliblePlacings = new string[6] { Messages.ArenaFirstPlace, Messages.ArenaSecondPlace, Messages.ArenaThirdPlace, Messages.ArenaFourthPlace, Messages.ArenaFifthPlace, Messages.ArenaSixthPlace }; - - int[] expRewards = new int[Entries.Length]; - expRewards[0] = 1; - int expAwardMul = 1; - for(int i = 1; i < Entries.Length; i++) - { - expRewards[i] = 2 * expAwardMul; - - if (expAwardMul == 1) - expAwardMul = 2; - else - expAwardMul += 2; - } - - expRewards = expRewards.ToArray().Reverse().ToArray(); + int[] expRewards = ExpRewards.ToArray().Reverse().ToArray(); int place = 0; ArenaEntry[] winners = Entries.OrderByDescending(o => o.SubmitScore).ToArray(); diff --git a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs index 628cec2..d6da593 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs @@ -514,8 +514,6 @@ namespace HISP.Server } catch (Exception e) { - if(!(e is SocketException)) - Logger.ErrorPrint("Exception occured: " + e.Message); Disconnect(); } } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs index b701692..1bb77a9 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs @@ -734,16 +734,18 @@ namespace HISP.Server int totalArenas = gameData.arena.Count; for (int i = 0; i < totalArenas; i++) { - int arenaId = gameData.arena[i].arena_id; - string arenaType = gameData.arena[i].arena_type; - int arenaEntryCost = gameData.arena[i].entry_cost; - int raceEvery = gameData.arena[i].race_every; - int slots = gameData.arena[i].slots; - int timeout = gameData.arena[i].timeout; + int arenaId = gameData.arena.arena_list[i].arena_id; + string arenaType = gameData.arena.arena_list[i].arena_type; + int arenaEntryCost = gameData.arena.arena_list[i].entry_cost; + int raceEvery = gameData.arena.arena_list[i].race_every; + int slots = gameData.arena.arena_list[i].slots; + int timeout = gameData.arena.arena_list[i].timeout; Arena arena = new Arena(arenaId, arenaType, arenaEntryCost, raceEvery, slots, timeout); Logger.DebugPrint("Registered Arena: " + arena.Id.ToString() + " as " + arena.Type); } + Arena.ExpRewards = gameData.arena.arena_exp.ToObject(); + // Register Leaser int totalLeasers = gameData.leaser.Count; for (int i = 0; i < totalLeasers; i++) From 163b181eac242d110300423f28390e392edb16eb Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:45:35 -0400 Subject: [PATCH 5/8] Fix time-based minigames saying best time was worst time --- HorseIsleServer/HorseIsleServer/Game/Meta.cs | 8 ++++---- HorseIsleServer/HorseIsleServer/Server/Database.cs | 7 +++++-- HorseIsleServer/HorseIsleServer/Server/GameClient.cs | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Meta.cs b/HorseIsleServer/HorseIsleServer/Game/Meta.cs index 4bd3b16..70cd8aa 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Meta.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Meta.cs @@ -864,7 +864,7 @@ namespace HISP.Game { Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20); if (scores.Length <= 0) - return "ERROR: No scores recorded."; + return "ERROR: No scores recorded." + Messages.BackToMap + Messages.MetaTerminator; string message = ""; message += Messages.FormatHighscoreHeader(gameName); @@ -881,7 +881,7 @@ namespace HISP.Game { Highscore.HighscoreTableEntry[] scores = Database.GetTopWinners(gameName, 20); if (scores.Length <= 0) - return "No wins recorded."; + return "ERROR: No wins recorded." + Messages.BackToMap + Messages.MetaTerminator; string message = ""; message += Messages.FormatWinlooseHeader(gameName); @@ -896,9 +896,9 @@ namespace HISP.Game } public static string BuildTopTimes(string gameName) { - Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20); + Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20, false); if (scores.Length <= 0) - return "No times recorded."; + return "ERROR: No times recorded. "+Messages.BackToMap+Messages.MetaTerminator; string message = ""; message += Messages.FormatBestTimeHeader(gameName); diff --git a/HorseIsleServer/HorseIsleServer/Server/Database.cs b/HorseIsleServer/HorseIsleServer/Server/Database.cs index fe58358..0b39bf5 100644 --- a/HorseIsleServer/HorseIsleServer/Server/Database.cs +++ b/HorseIsleServer/HorseIsleServer/Server/Database.cs @@ -5447,14 +5447,17 @@ namespace HISP.Server } } - public static Highscore.HighscoreTableEntry[] GetTopScores(string gameTitle, int limit) + public static Highscore.HighscoreTableEntry[] GetTopScores(string gameTitle, int limit, bool scores=true) { List entires = new List(); using (MySqlConnection db = new MySqlConnection(ConnectionString)) { db.Open(); MySqlCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC LIMIT @limit"; + if(scores) + sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC LIMIT @limit"; + else + sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score ASC LIMIT @limit"; sqlCommand.Parameters.AddWithValue("@gameTitle", gameTitle); sqlCommand.Parameters.AddWithValue("@limit", limit); sqlCommand.Prepare(); diff --git a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs index d6da593..1f13172 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs @@ -512,7 +512,7 @@ namespace HISP.Server { ClientSocket.Send(PacketData); } - catch (Exception e) + catch (Exception) { Disconnect(); } From a383a67b4be0da1b9603c3878a28bb752a0b9dbb Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 05:13:49 -0500 Subject: [PATCH 6/8] Fix crash at startup --- HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs | 2 +- HorseIsleServer/HorseIsleServer/Server/GameServer.cs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs index 1bb77a9..adb74fe 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs @@ -731,7 +731,7 @@ namespace HISP.Server } // Register Arenas - int totalArenas = gameData.arena.Count; + int totalArenas = gameData.arena.arena_list.Count; for (int i = 0; i < totalArenas; i++) { int arenaId = gameData.arena.arena_list[i].arena_id; diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index 34fdc30..40fc464 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -1642,31 +1642,31 @@ namespace HISP.Server Arena arena = Arena.GetAreaById(arenaId); if (!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) { - if (horseInstance.BasicStats.Thirst <= 300) + if (horseInstance.BasicStats.Thirst <= 200) { byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(tooThirsty); break; } - else if (horseInstance.BasicStats.Hunger <= 300) + else if (horseInstance.BasicStats.Hunger <= 200) { byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(tooHungry); break; } - else if (horseInstance.BasicStats.Shoes <= 300) + else if (horseInstance.BasicStats.Shoes <= 200) { byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(needsFarrier); break; } - else if (horseInstance.BasicStats.Tiredness <= 300) + else if (horseInstance.BasicStats.Tiredness <= 200) { byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(tooTired); break; } - else if (horseInstance.BasicStats.Health <= 300) + else if (horseInstance.BasicStats.Health <= 200) { byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(needsVet); From d32ce1c73f2ff2cbbb6b44775a1b16aea1b4ec66 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 05:28:29 -0500 Subject: [PATCH 7/8] Acturally stop keep alive packet timer --- HorseIsleServer/HorseIsleServer/Server/GameClient.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs index 1f13172..ac57c57 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs @@ -114,6 +114,8 @@ namespace HISP.Server // Stop Timers if (timeoutTimer != null) timeoutTimer.Dispose(); + if (keepAliveTimer != null) + keepAliveTimer.Dispose(); if (warnTimer != null) warnTimer.Dispose(); if (kickTimer != null) @@ -126,8 +128,11 @@ namespace HISP.Server LoggedIn = false; // Close Socket - ClientSocket.Close(); - ClientSocket.Dispose(); + if(ClientSocket != null) + { + ClientSocket.Close(); + ClientSocket.Dispose(); + } } From f3e80cad74e6eaacba5f7ce8e2d3c041bec34f28 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 05:53:05 -0500 Subject: [PATCH 8/8] Fix items not removed from stores --- .../HorseIsleServer/Server/GameServer.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index 40fc464..ef5ba38 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -7954,12 +7954,26 @@ namespace HISP.Server foreach (GameClient connectedClient in GameClient.ConnectedClients) { if (connectedClient.LoggedIn) + { if (connectedClient.LoggedinUser.Inventory.HasItemId(id)) { InventoryItem invItm = connectedClient.LoggedinUser.Inventory.GetItemByItemId(id); foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) connectedClient.LoggedinUser.Inventory.Remove(itm); } + } + } + + // Remove from shops + foreach(Shop shop in Shop.ShopList) + { + if (shop.Inventory.HasItemId(id)) + { + InventoryItem invItm = shop.Inventory.GetItemByItemId(id); + foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) + shop.Inventory.Remove(itm); + } + } DroppedItems.DeleteAllItemsWithId(id); // Delete all dropped items Database.DeleteAllItemsFromUsers(id); // Delete from offline players