From 26d24c11133b421abaa86f951126d2d2e4dec9d1 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Sun, 28 Feb 2021 00:39:51 +1300 Subject: [PATCH] Fix bugs and more bugs --- .../Game/Items/DroppedItems.cs | 2 +- .../HorseIsleServer/Game/Meta.cs | 13 +++++-- .../HorseIsleServer/Player/Trade.cs | 8 +++- .../HorseIsleServer/Server/Database.cs | 14 +++++++ .../HorseIsleServer/Server/GameServer.cs | 37 +++++++++++++++---- 5 files changed, 59 insertions(+), 15 deletions(-) diff --git a/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs b/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs index 18e776e..e5ce356 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Items/DroppedItems.cs @@ -334,7 +334,7 @@ namespace HISP.Game.Items public static void Init() { ReadFromDatabase(); - GenerateItems(true); + GenerateItems(Database.GetDroppedItemsCount() <= 0); } } diff --git a/Horse Isle Server/HorseIsleServer/Game/Meta.cs b/Horse Isle Server/HorseIsleServer/Game/Meta.cs index d93caf6..460c423 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Meta.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Meta.cs @@ -417,6 +417,9 @@ namespace HISP.Game if (horse.Leaser > 0) continue; + if (horse.Category != "TRADING") + continue; + bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null); message += Messages.FormatTradeOfferHorse(horse.Name, tacked, horse.RandomId); } @@ -463,6 +466,8 @@ namespace HISP.Game string message = ""; message += Messages.FormatTradeWithPlayer(trade.OtherTrade.Trader.Username); + + if (trade.Stage == "DONE" && trade.OtherTrade.Stage == "DONE") message += Messages.TradeFinalReview; else if (trade.Stage == "DONE") @@ -976,7 +981,7 @@ namespace HISP.Game if (icon != -1) iconFormat = Messages.FormatIconFormat(icon); - message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, (DateTime.UtcNow - nearbyUser.LoginTime).Minutes, nearbyUser.X, nearbyUser.Y, nearbyUser.Idle); + message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - nearbyUser.LoginTime).TotalMinutes)), nearbyUser.X, nearbyUser.Y, nearbyUser.Idle); } message += Messages.PlayerListIconInformation; @@ -1012,7 +1017,7 @@ namespace HISP.Game if (icon != -1) iconFormat = Messages.FormatIconFormat(icon); - message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, (DateTime.UtcNow - onlineUser.LoginTime).Minutes, onlineUser.X, onlineUser.Y, onlineUser.Idle); + message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - onlineUser.LoginTime).TotalMinutes)), onlineUser.X, onlineUser.Y, onlineUser.Idle); } message += Messages.PlayerListIconInformation; @@ -1038,7 +1043,7 @@ namespace HISP.Game if (icon != -1) iconFormat = Messages.FormatIconFormat(icon); - message += Messages.FormatPlayerEntry(iconFormat, client.LoggedinUser.Username, client.LoggedinUser.Id, (DateTime.UtcNow - client.LoggedinUser.LoginTime).Minutes, client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Idle); + message += Messages.FormatPlayerEntry(iconFormat, client.LoggedinUser.Username, client.LoggedinUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - client.LoggedinUser.LoginTime).TotalMinutes)), client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Idle); } } @@ -1065,7 +1070,7 @@ namespace HISP.Game if (icon != -1) iconFormat = Messages.FormatIconFormat(icon); - message += Messages.FormatOnlineBuddyEntry(iconFormat, friend.Username, friend.Id, (DateTime.UtcNow - friend.LoginTime).Minutes, friend.X, friend.Y); + message += Messages.FormatOnlineBuddyEntry(iconFormat, friend.Username, friend.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - friend.LoginTime).TotalMinutes)), friend.X, friend.Y); } catch (KeyNotFoundException) { } diff --git a/Horse Isle Server/HorseIsleServer/Player/Trade.cs b/Horse Isle Server/HorseIsleServer/Player/Trade.cs index bd087bd..c86231b 100644 --- a/Horse Isle Server/HorseIsleServer/Player/Trade.cs +++ b/Horse Isle Server/HorseIsleServer/Player/Trade.cs @@ -181,11 +181,15 @@ namespace HISP.Player return; cancelTrade:; + InteruptTrade(); + return; + + } + public void InteruptTrade() + { byte[] tradeCanceled = PacketBuilder.CreateChat(Messages.TradeCanceledInterupted, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeCanceled); endTrade(); - return; - } public void AcceptTrade() { diff --git a/Horse Isle Server/HorseIsleServer/Server/Database.cs b/Horse Isle Server/HorseIsleServer/Server/Database.cs index 55caacc..4f1555b 100755 --- a/Horse Isle Server/HorseIsleServer/Server/Database.cs +++ b/Horse Isle Server/HorseIsleServer/Server/Database.cs @@ -3919,6 +3919,20 @@ namespace HISP.Server } } + public static int GetDroppedItemsCount() + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(1) FROM DroppedItems"; + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + sqlCommand.Dispose(); + return count; + } + } public static int GetNpcStartPoint(int playerId, int npcId) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs index 3ba847b..7494958 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs @@ -257,8 +257,10 @@ namespace HISP.Server sender.LoggedinUser.TradingWith.HorsesOffered.Add(horse); UpdateArea(sender); - if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + + if (sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); break; case '1': // Item @@ -1905,8 +1907,9 @@ namespace HISP.Server sender.LoggedinUser.TradingWith.MoneyOffered = amountMoney; UpdateArea(sender); - if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + if(sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); break; } @@ -1959,8 +1962,9 @@ namespace HISP.Server sender.LoggedinUser.TradingWith.ItemsOffered.Add(items); UpdateArea(sender); - if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + if (sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); } break; } @@ -2514,8 +2518,9 @@ namespace HISP.Server { sender.LoggedinUser.TradingWith.Stage = "DONE"; - if (sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority == false) - UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + if (sender.LoggedinUser.TradingWith != null) + if (sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority == false) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); UpdateArea(sender); } @@ -6060,6 +6065,10 @@ namespace HISP.Server Database.RemoveOnlineUser(sender.LoggedinUser.Id); + // Remove Trade Reference + sender.LoggedinUser.TradingWith = null; + sender.LoggedinUser.PendingTradeTo = 0; + // Delete Arena Entries if(Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) { @@ -6446,6 +6455,18 @@ namespace HISP.Server if(forClient.LoggedinUser.TradingWith != null) { + if (!forClient.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient.LoggedIn) + { + forClient.LoggedinUser.TradingWith.InteruptTrade(); + return; + } + + if (forClient.LoggedinUser.TradingWith.OtherTrade.Trader.TradingWith == null) + { + forClient.LoggedinUser.TradingWith.InteruptTrade(); + return; + } + forClient.LoggedinUser.MetaPriority = true; forClient.LoggedinUser.TradeMenuPriority = false; byte[] tradeMeta = PacketBuilder.CreateMetaPacket(Meta.BuildTrade(forClient.LoggedinUser.TradingWith));