From db9c9734777f9fcf37a19a245adf2f2e34ff0a88 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Wed, 24 Nov 2021 21:27:08 -0500 Subject: [PATCH] Fix crashing when loading an inventory with more than max horses --- HorseIsleServer/HorseIsleServer/Game/Ranch.cs | 6 ++++++ HorseIsleServer/HorseIsleServer/Server/Database.cs | 3 +-- HorseIsleServer/HorseIsleServer/Server/GameServer.cs | 7 ++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Ranch.cs b/HorseIsleServer/HorseIsleServer/Game/Ranch.cs index 9c6f8a8..346485d 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Ranch.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Ranch.cs @@ -314,6 +314,12 @@ namespace HISP.Game } public RanchBuilding GetBuilding(int buildingId) { + if (buildingId < 0) + return null; + + if (buildingId >= buildings.Length) + return null; + return buildings[buildingId]; } public void SetBuilding(int buildingId, RanchBuilding value) diff --git a/HorseIsleServer/HorseIsleServer/Server/Database.cs b/HorseIsleServer/HorseIsleServer/Server/Database.cs index 3f6c3e1..f7e69f5 100644 --- a/HorseIsleServer/HorseIsleServer/Server/Database.cs +++ b/HorseIsleServer/HorseIsleServer/Server/Database.cs @@ -1932,8 +1932,7 @@ namespace HISP.Server while (reader.Read()) { - inv.AddHorse(ReadHorseInstance(reader), false); - + inv.AddHorse(ReadHorseInstance(reader), false, true); } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index 13ef5d2..05a641e 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -5531,7 +5531,7 @@ namespace HISP.Server { Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding; - if (ranchBuild == 0) + if (ranchBuild <= 0) return; if (sender.LoggedinUser.OwnedRanch != null) { @@ -5540,7 +5540,12 @@ namespace HISP.Server Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to remove more buildings than the limit."); return; } + Ranch.RanchBuilding ranchBuilding = sender.LoggedinUser.OwnedRanch.GetBuilding(ranchBuild - 1); + + if (ranchBuilding == null) + return; + if (ranchBuilding.Id == buildingId) { sender.LoggedinUser.OwnedRanch.SetBuilding(ranchBuild - 1, null);