From 84250eb17e19c34905096e7afbb9702407cd8341 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 18:42:36 -0500 Subject: [PATCH 1/9] Fix awards and icons --- HorseIsleData | 2 +- HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs | 6 ++++++ HorseIsleServer/HorseIsleServer/Game/Messages.cs | 5 +++++ HorseIsleServer/HorseIsleServer/Game/Meta.cs | 8 +++++--- HorseIsleServer/HorseIsleServer/Player/User.cs | 4 ++-- HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs | 1 + 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/HorseIsleData b/HorseIsleData index 0f92689..a044032 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit 0f9268907fb3cd9d0da9c8ab1cba8308de0e5656 +Subproject commit a044032daca22e2d76d54d1e5e073e6527eb43de diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index 11a5a85..f8d54b1 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -511,6 +511,12 @@ namespace HISP.Game.Chat case "PERSONALITY": instance.AdvancedStats.Personality = amount; break; + case "HEIGHT": + instance.AdvancedStats.Height = amount; + break; + case "COLOR": + instance.Color = args[2].ToLower(); + break; case "EXPERIENCE": instance.BasicStats.Experience = amount; break; diff --git a/HorseIsleServer/HorseIsleServer/Game/Messages.cs b/HorseIsleServer/HorseIsleServer/Game/Messages.cs index 52b9520..1137099 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Messages.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Messages.cs @@ -997,6 +997,7 @@ namespace HISP.Game // Awards + public static string AwardOthersFormat; public static string AwardHeader; public static string NoAwards; public static string AwardFormat; @@ -2514,6 +2515,10 @@ namespace HISP.Game { return ConsumeItemFormat.Replace("%ITEM%", itemName); } + public static string FormatAwardHeaderOthers(string username) + { + return AwardOthersFormat.Replace("%USERNAME%", username); + } public static string FormatAwardEntry(int iconId, string title, int moneyBonus) { return AwardFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", title).Replace("%BONUS%", moneyBonus.ToString("N0", CultureInfo.InvariantCulture)); diff --git a/HorseIsleServer/HorseIsleServer/Game/Meta.cs b/HorseIsleServer/HorseIsleServer/Game/Meta.cs index 70cd8aa..d014830 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Meta.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Meta.cs @@ -1056,6 +1056,11 @@ namespace HISP.Game message += Messages.FormatOtherHorsesMeta(pronoun); message += buildHorseList(user, false); + + message += Messages.FormatAwardHeaderOthers(user.Username); + foreach (Award.AwardEntry award in user.Awards.AwardsEarned) + message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus); + } @@ -1089,9 +1094,6 @@ namespace HISP.Game foreach (Award.AwardEntry award in user.Awards.AwardsEarned) message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus); - - - message += Messages.BackToMap; message += Messages.MetaTerminator; return message; diff --git a/HorseIsleServer/HorseIsleServer/Player/User.cs b/HorseIsleServer/HorseIsleServer/Player/User.cs index adfb16e..a31df82 100644 --- a/HorseIsleServer/HorseIsleServer/Player/User.cs +++ b/HorseIsleServer/HorseIsleServer/Player/User.cs @@ -525,12 +525,12 @@ namespace HISP.Player icon = Messages.NewUserIcon; if (Subscribed) { - int months = (DateTime.UtcNow.Month - SubscribedUntil.Month) + 12 * (DateTime.UtcNow.Year - SubscribedUntil.Year); + int months = (SubscribedUntil.Month - DateTime.UtcNow.Month) + ((SubscribedUntil.Year - DateTime.UtcNow.Year) * 12); if (months <= 1) icon = Messages.MonthSubscriptionIcon; else if (months <= 3) icon = Messages.ThreeMonthSubscripitionIcon; - else + else if(months <= (12+3)) icon = Messages.YearSubscriptionIcon; } if (Moderator) diff --git a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs index adb74fe..47c8008 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs @@ -2042,6 +2042,7 @@ namespace HISP.Server // Awards Messages.AwardHeader = gameData.messages.meta.awards_page.awards_header; + Messages.AwardOthersFormat = gameData.messages.meta.awards_page.awards_head; Messages.NoAwards = gameData.messages.meta.awards_page.no_awards; Messages.AwardFormat = gameData.messages.meta.awards_page.award_format; From 763b3ec9e30c72a5bd085440c0c2fc8401c5b1c2 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 18:44:48 -0500 Subject: [PATCH 2/9] Fix icons --- HorseIsleServer/HorseIsleServer/Player/User.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Player/User.cs b/HorseIsleServer/HorseIsleServer/Player/User.cs index a31df82..de9b72f 100644 --- a/HorseIsleServer/HorseIsleServer/Player/User.cs +++ b/HorseIsleServer/HorseIsleServer/Player/User.cs @@ -526,12 +526,12 @@ namespace HISP.Player if (Subscribed) { int months = (SubscribedUntil.Month - DateTime.UtcNow.Month) + ((SubscribedUntil.Year - DateTime.UtcNow.Year) * 12); - if (months <= 1) - icon = Messages.MonthSubscriptionIcon; - else if (months <= 3) + if (months >= 3) icon = Messages.ThreeMonthSubscripitionIcon; - else if(months <= (12+3)) + else if(months >= (12+3)) icon = Messages.YearSubscriptionIcon; + else + icon = Messages.MonthSubscriptionIcon; } if (Moderator) icon = Messages.ModeratorIcon; From 0df62c80c6f1094677e3d5381c70cbbb0f28466f Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 22:41:36 -0500 Subject: [PATCH 3/9] Various fixes --- HorseIsleData | 2 +- .../HorseIsleServer/Game/Chat/Chat.cs | 4 +- .../HorseIsleServer/Game/Chat/Command.cs | 53 +++++- .../Game/Events/RealTimeRiddle.cs | 13 +- .../HorseIsleServer/Game/Messages.cs | 1 + HorseIsleServer/HorseIsleServer/Game/Meta.cs | 15 +- .../HorseIsleServer/Player/Trade.cs | 8 +- .../HorseIsleServer/Server/GameClient.cs | 179 ++++++++++-------- .../HorseIsleServer/Server/GameDataJson.cs | 3 +- .../HorseIsleServer/Server/GameServer.cs | 14 ++ HorseIsleWeb | 2 +- 11 files changed, 181 insertions(+), 113 deletions(-) diff --git a/HorseIsleData b/HorseIsleData index a044032..d44f610 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit a044032daca22e2d76d54d1e5e073e6527eb43de +Subproject commit d44f6107e607e3e23c137f4678235c12965af533 diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs index b161eed..d027129 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs @@ -101,7 +101,7 @@ namespace HISP.Game.Chat if (message.ToUpper().StartsWith("%RULES")) return Command.Rules(message, args, user); if (message.ToUpper().StartsWith("%PRISON")) - return Command.Prision(message, args, user); + return Command.Prison(message, args, user); if (message.ToUpper().StartsWith("%NOCLIP")) return Command.NoClip(message, args, user); if (message.ToUpper().StartsWith("%STEALTH")) @@ -114,6 +114,8 @@ namespace HISP.Game.Chat return Command.Escape(message, args, user); if (message.ToUpper().StartsWith("%MODHORSE")) return Command.ModHorse(message, args, user); + if (message.ToUpper().StartsWith("%DELITEM")) + return Command.DelItem(message, args, user); if (message.ToUpper().StartsWith("%CALL HORSE")) return Command.CallHorse(message, args, user); return false; diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index f8d54b1..fff1882 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using HISP.Game.Events; using HISP.Game.Horse; using System.Linq; +using HISP.Game.Inventory; namespace HISP.Game.Chat { @@ -20,7 +21,7 @@ namespace HISP.Game.Chat continue; if (client.LoggedIn) { - if (client.LoggedinUser.Username.ToLower().Contains(name.ToLower())) + if (client.LoggedinUser.Username.ToLower().StartsWith(name.ToLower())) { return client.LoggedinUser; } @@ -286,7 +287,7 @@ namespace HISP.Game.Chat return true; } - public static bool Prision(string message, string[] args, User user) + public static bool Prison(string message, string[] args, User user) { if (!(user.Administrator || user.Moderator)) return false; @@ -368,7 +369,41 @@ namespace HISP.Game.Chat return true; } + public static bool DelItem(string message, string[] args, User user) + { + if (args.Length <= 0) + return false; + if (!user.Administrator) + return false; + int itemId = 0; + try + { + itemId = int.Parse(args[0]); + User target = user; + if (args.Length > 1) + target = findNamePartial(args[1]); + + if (target.Inventory.HasItemId(itemId)) + { + InventoryItem itm = target.Inventory.GetItemByItemId(itemId); + + foreach (ItemInstance instance in itm.ItemInstances) + { + itm.RemoveItem(instance); + } + } + } + catch (Exception) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } public static bool Goto(string message, string[] args, User user) { if (args.Length <= 0) @@ -464,7 +499,6 @@ namespace HISP.Game.Chat byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); user.LoggedinClient.SendPacket(chatPacket); - return true; } @@ -483,7 +517,8 @@ namespace HISP.Game.Chat try { id = int.Parse(args[0]); - amount = int.Parse(args[2]); + if(args[1].ToUpper() == "COLOR") + amount = int.Parse(args[2]); } catch (Exception) { @@ -546,6 +581,7 @@ namespace HISP.Game.Chat user.LoggedinClient.SendPacket(chatPacket); return true; } + public static bool Warp(string message, string[] args, User user) { @@ -577,10 +613,13 @@ namespace HISP.Game.Chat } else { - string areaName = string.Join(" ", args).ToLower(); + string areaName = string.Join(" ", args).ToLower(); + areaName = areaName.Trim(); + if (areaName == "") + areaName = "Horse Isle"; try { - User tp = findNamePartial(areaName); + User tp = GameServer.GetUserByName(areaName); user.Teleport(tp.X, tp.Y); formattedmessage += Messages.SuccessfullyWarpedToPlayer; @@ -591,7 +630,7 @@ namespace HISP.Game.Chat { foreach (World.Waypoint waypoint in World.Waypoints) { - if (waypoint.Name.ToLower().Contains(areaName)) + if (waypoint.Name.ToLower().StartsWith(areaName)) { user.Teleport(waypoint.PosX, waypoint.PosY); formattedmessage += Messages.SuccessfullyWarpedToLocation; diff --git a/HorseIsleServer/HorseIsleServer/Game/Events/RealTimeRiddle.cs b/HorseIsleServer/HorseIsleServer/Game/Events/RealTimeRiddle.cs index d38a56c..0049830 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Events/RealTimeRiddle.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Events/RealTimeRiddle.cs @@ -57,7 +57,11 @@ namespace HISP.Game.Events return; if (Database.HasPlayerCompletedRealTimeRiddle(RiddleId, winner.Id)) + { + byte[] alreadyWonRiddleMessage = PacketBuilder.CreateChat(Messages.EventAlreadySovledRealTimeRiddle, PacketBuilder.CHAT_BOTTOM_RIGHT); + winner.LoggedinClient.SendPacket(alreadyWonRiddleMessage); return; + } LastWon = true; @@ -86,10 +90,13 @@ namespace HISP.Game.Events } public void EndEvent() { - Active = false; + if(Active) + { + Active = false; - riddleTimeout.Dispose(); - riddleTimeout = null; + riddleTimeout.Dispose(); + riddleTimeout = null; + } } private void riddleTimedOut(object state) diff --git a/HorseIsleServer/HorseIsleServer/Game/Messages.cs b/HorseIsleServer/HorseIsleServer/Game/Messages.cs index 1137099..bf2d2d8 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Messages.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Messages.cs @@ -119,6 +119,7 @@ namespace HISP.Game public static string EventEndRealTimeRiddle; public static string EventWonRealTimeRiddleForOthersFormat; public static string EventWonRealTimeRiddleForYouFormat; + public static string EventAlreadySovledRealTimeRiddle; // Events : Tack Shop Giveaway public static string EventStartTackShopGiveawayFormat; diff --git a/HorseIsleServer/HorseIsleServer/Game/Meta.cs b/HorseIsleServer/HorseIsleServer/Game/Meta.cs index d014830..4bcff3c 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Meta.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Meta.cs @@ -525,7 +525,7 @@ namespace HISP.Game message += Messages.FormatTradeOfferHorse(horse.Name, tacked, horse.RandomId); } - if(trade.Trader.Inventory.Count >= trade.Trader.MaxItems) + if(trade.OtherTrade.Trader.Inventory.Count >= trade.OtherTrade.Trader.MaxItems) { message += Messages.TradeOfferItemOtherPlayerInvFull; } @@ -1762,6 +1762,7 @@ namespace HISP.Game if (mine) // This is My DS. { + GameServer.CheckMail(user); user.DoRanchActions(); string title = ranch.Title; @@ -2799,17 +2800,7 @@ namespace HISP.Game } private static string buildTownHall(User user) { - if(user.MailBox.UnreadMailCount > 0) - { - - byte[] RipOffAOLSound = PacketBuilder.CreatePlaysoundPacket(Messages.MailSe); - user.LoggedinClient.SendPacket(RipOffAOLSound); - - byte[] mailReceivedText = PacketBuilder.CreateChat(Messages.MailReceivedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.LoggedinClient.SendPacket(mailReceivedText); - - user.MailBox.ReadAllMail(); - } + GameServer.CheckMail(user); string message = Messages.CityHallMenu; message += Messages.ExitThisPlace; diff --git a/HorseIsleServer/HorseIsleServer/Player/Trade.cs b/HorseIsleServer/HorseIsleServer/Player/Trade.cs index e7b67b2..f4afeb0 100644 --- a/HorseIsleServer/HorseIsleServer/Player/Trade.cs +++ b/HorseIsleServer/HorseIsleServer/Player/Trade.cs @@ -112,13 +112,13 @@ namespace HISP.Player Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses); fail = true; } - if(OtherTrade.Trader.Money + MoneyOffered > 2100000000) + if(MoneyOffered > 0 && OtherTrade.Trader.Money + MoneyOffered > 2100000000) { byte[] tradeOtherHasTooMuchMoney = PacketBuilder.CreateChat(Messages.TradeWillGiveOtherTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeOtherHasTooMuchMoney); fail = true; } - if(Trader.Money + OtherTrade.MoneyOffered > 2100000000) + if(OtherTrade.MoneyOffered > 0 && Trader.Money + OtherTrade.MoneyOffered > 2100000000) { byte[] tradeYouHasTooMuchMoney = PacketBuilder.CreateChat(Messages.TradeWillGiveYouTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeYouHasTooMuchMoney); @@ -135,7 +135,7 @@ namespace HISP.Player if (Trader.Inventory.HasItemId(inst[0].ItemId)) { InventoryItem items = Trader.Inventory.GetItemByItemId(inst[0].ItemId); - if (items.ItemInstances.Length + inst.Length >= ConfigReader.MAX_STACK) + if (items.ItemInstances.Length + inst.Length > ConfigReader.MAX_STACK) { itemYouFail = true; } @@ -155,7 +155,7 @@ namespace HISP.Player if (OtherTrade.Trader.Inventory.HasItemId(inst[0].ItemId)) { InventoryItem items = OtherTrade.Trader.Inventory.GetItemByItemId(inst[0].ItemId); - if (items.ItemInstances.Length + inst.Length >= ConfigReader.MAX_STACK) + if (items.ItemInstances.Length + inst.Length > ConfigReader.MAX_STACK) { itemOtherFail = true; } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs index ac57c57..25ae302 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs @@ -409,96 +409,109 @@ namespace HISP.Server if (warnTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) warnTimer.Change(warnInterval, warnInterval); - if (!LoggedIn) // Must be either login or policy-file-request + try { - if (Encoding.UTF8.GetString(Packet).StartsWith("")) // Policy File Request + if (!LoggedIn) // Must be either login or policy-file-request { - GameServer.OnCrossdomainPolicyRequest(this); + if (Encoding.UTF8.GetString(Packet).StartsWith("")) // Policy File Request + { + GameServer.OnCrossdomainPolicyRequest(this); + } + switch (identifier) + { + case PacketBuilder.PACKET_LOGIN: + GameServer.OnLoginRequest(this, Packet); + break; + } } - switch (identifier) + else { - case PacketBuilder.PACKET_LOGIN: - GameServer.OnLoginRequest(this, Packet); - break; + switch (identifier) + { + case PacketBuilder.PACKET_LOGIN: + GameServer.OnUserInfoRequest(this, Packet); + break; + case PacketBuilder.PACKET_MOVE: + GameServer.OnMovementPacket(this, Packet); + break; + case PacketBuilder.PACKET_PLAYERINFO: + GameServer.OnPlayerInfoPacket(this, Packet); + break; + case PacketBuilder.PACKET_PLAYER: + GameServer.OnProfilePacket(this, Packet); + break; + case PacketBuilder.PACKET_CHAT: + GameServer.OnChatPacket(this, Packet); + break; + case PacketBuilder.PACKET_CLICK: + GameServer.OnClickPacket(this, Packet); + break; + case PacketBuilder.PACKET_KEEP_ALIVE: + GameServer.OnKeepAlive(this, Packet); + break; + case PacketBuilder.PACKET_TRANSPORT: + GameServer.OnTransportUsed(this, Packet); + break; + case PacketBuilder.PACKET_INVENTORY: + GameServer.OnInventoryRequested(this, Packet); + break; + case PacketBuilder.PACKET_DYNAMIC_BUTTON: + GameServer.OnDynamicButtonPressed(this, Packet); + break; + case PacketBuilder.PACKET_DYNAMIC_INPUT: + GameServer.OnDynamicInputReceived(this, Packet); + break; + case PacketBuilder.PACKET_ITEM_INTERACTION: + GameServer.OnItemInteraction(this, Packet); + break; + case PacketBuilder.PACKET_ARENA_SCORE: + GameServer.OnArenaScored(this, Packet); + break; + case PacketBuilder.PACKET_QUIT: + GameServer.OnQuitPacket(this, Packet); + break; + case PacketBuilder.PACKET_NPC: + GameServer.OnNpcInteraction(this, Packet); + break; + case PacketBuilder.PACKET_BIRDMAP: + GameServer.OnBirdMapRequested(this, Packet); + break; + case PacketBuilder.PACKET_SWFMODULE: + GameServer.OnSwfModuleCommunication(this, Packet); + break; + case PacketBuilder.PACKET_HORSE: + GameServer.OnHorseInteraction(this, Packet); + break; + case PacketBuilder.PACKET_WISH: + GameServer.OnWish(this, Packet); + break; + case PacketBuilder.PACKET_RANCH: + GameServer.OnRanchPacket(this, Packet); + break; + case PacketBuilder.PACKET_AUCTION: + GameServer.OnAuctionPacket(this, Packet); + break; + case PacketBuilder.PACKET_PLAYER_INTERACTION: + GameServer.OnPlayerInteration(this, Packet); + break; + case PacketBuilder.PACKET_SOCIALS: + GameServer.OnSocialPacket(this, Packet); + break; + default: + Logger.ErrorPrint("Unimplemented Packet: " + BitConverter.ToString(Packet).Replace('-', ' ')); + break; + } } + } - else + catch(Exception e) { - switch (identifier) - { - case PacketBuilder.PACKET_LOGIN: - GameServer.OnUserInfoRequest(this, Packet); - break; - case PacketBuilder.PACKET_MOVE: - GameServer.OnMovementPacket(this, Packet); - break; - case PacketBuilder.PACKET_PLAYERINFO: - GameServer.OnPlayerInfoPacket(this, Packet); - break; - case PacketBuilder.PACKET_PLAYER: - GameServer.OnProfilePacket(this, Packet); - break; - case PacketBuilder.PACKET_CHAT: - GameServer.OnChatPacket(this, Packet); - break; - case PacketBuilder.PACKET_CLICK: - GameServer.OnClickPacket(this, Packet); - break; - case PacketBuilder.PACKET_KEEP_ALIVE: - GameServer.OnKeepAlive(this, Packet); - break; - case PacketBuilder.PACKET_TRANSPORT: - GameServer.OnTransportUsed(this, Packet); - break; - case PacketBuilder.PACKET_INVENTORY: - GameServer.OnInventoryRequested(this, Packet); - break; - case PacketBuilder.PACKET_DYNAMIC_BUTTON: - GameServer.OnDynamicButtonPressed(this, Packet); - break; - case PacketBuilder.PACKET_DYNAMIC_INPUT: - GameServer.OnDynamicInputReceived(this, Packet); - break; - case PacketBuilder.PACKET_ITEM_INTERACTION: - GameServer.OnItemInteraction(this,Packet); - break; - case PacketBuilder.PACKET_ARENA_SCORE: - GameServer.OnArenaScored(this, Packet); - break; - case PacketBuilder.PACKET_QUIT: - GameServer.OnQuitPacket(this, Packet); - break; - case PacketBuilder.PACKET_NPC: - GameServer.OnNpcInteraction(this, Packet); - break; - case PacketBuilder.PACKET_BIRDMAP: - GameServer.OnBirdMapRequested(this, Packet); - break; - case PacketBuilder.PACKET_SWFMODULE: - GameServer.OnSwfModuleCommunication(this, Packet); - break; - case PacketBuilder.PACKET_HORSE: - GameServer.OnHorseInteraction(this, Packet); - break; - case PacketBuilder.PACKET_WISH: - GameServer.OnWish(this, Packet); - break; - case PacketBuilder.PACKET_RANCH: - GameServer.OnRanchPacket(this, Packet); - break; - case PacketBuilder.PACKET_AUCTION: - GameServer.OnAuctionPacket(this, Packet); - break; - case PacketBuilder.PACKET_PLAYER_INTERACTION: - GameServer.OnPlayerInteration(this, Packet); - break; - case PacketBuilder.PACKET_SOCIALS: - GameServer.OnSocialPacket(this, Packet); - break; - default: - Logger.ErrorPrint("Unimplemented Packet: " + BitConverter.ToString(Packet).Replace('-', ' ')); - break; - } + Logger.ErrorPrint("Unhandled Exception: " + e.ToString()); + Logger.ErrorPrint(e.Message); + Logger.ErrorPrint(""); + Logger.ErrorPrint(e.StackTrace); + + Kick("Unhandled Exception: " + e.ToString()); } } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs index 47c8008..310d846 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs @@ -1048,6 +1048,7 @@ namespace HISP.Server Messages.EventEndRealTimeRiddle = gameData.messages.events.real_time_riddle.event_end; Messages.EventWonRealTimeRiddleForOthersFormat = gameData.messages.events.real_time_riddle.event_won_others; Messages.EventWonRealTimeRiddleForYouFormat = gameData.messages.events.real_time_riddle.event_won_you; + Messages.EventAlreadySovledRealTimeRiddle = gameData.messages.events.real_time_riddle.event_solved_already; // Events : Tack Shop Giveaway @@ -2042,7 +2043,7 @@ namespace HISP.Server // Awards Messages.AwardHeader = gameData.messages.meta.awards_page.awards_header; - Messages.AwardOthersFormat = gameData.messages.meta.awards_page.awards_head; + Messages.AwardOthersFormat = gameData.messages.meta.awards_page.awards_others_header; Messages.NoAwards = gameData.messages.meta.awards_page.no_awards; Messages.AwardFormat = gameData.messages.meta.awards_page.award_format; diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index ef5ba38..8511384 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -7688,6 +7688,20 @@ namespace HISP.Server return count; } + public static void CheckMail(User user) + { + if (user.MailBox.UnreadMailCount > 0) + { + + byte[] RipOffAOLSound = PacketBuilder.CreatePlaysoundPacket(Messages.MailSe); + user.LoggedinClient.SendPacket(RipOffAOLSound); + + byte[] mailReceivedText = PacketBuilder.CreateChat(Messages.MailReceivedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(mailReceivedText); + + user.MailBox.ReadAllMail(); + } + } public static int GetNumberOfModsOnline() { int count = 0; diff --git a/HorseIsleWeb b/HorseIsleWeb index 007bccc..66bbfd7 160000 --- a/HorseIsleWeb +++ b/HorseIsleWeb @@ -1 +1 @@ -Subproject commit 007bccccbc19fe4469ad7ac4aba63effeb520128 +Subproject commit 66bbfd79136875e04822171c5b755f0129b23061 From 0fc3582ae15b040dcd4a2a6d290e43d89202ad5d Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 23:03:52 -0500 Subject: [PATCH 4/9] Add %SHUTDOWN command --- HorseIsleData | 2 +- .../HorseIsleServer/Game/Chat/Chat.cs | 2 ++ .../HorseIsleServer/Game/Chat/Command.cs | 34 ++++++++++++++++++- .../HorseIsleServer/Game/Items/Item.cs | 1 + HorseIsleServer/HorseIsleServer/Program.cs | 3 +- .../HorseIsleServer/Server/GameDataJson.cs | 1 + 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/HorseIsleData b/HorseIsleData index d44f610..9540f98 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit d44f6107e607e3e23c137f4678235c12965af533 +Subproject commit 9540f98ef9180dca80bcb27599e939a767ba92eb diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs index d027129..9c3cba1 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs @@ -116,6 +116,8 @@ namespace HISP.Game.Chat return Command.ModHorse(message, args, user); if (message.ToUpper().StartsWith("%DELITEM")) return Command.DelItem(message, args, user); + if (message.ToUpper().StartsWith("%SHUTDOWN")) + return Command.Shutdown(message, args, user); if (message.ToUpper().StartsWith("%CALL HORSE")) return Command.CallHorse(message, args, user); return false; diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index fff1882..ef5c844 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -30,6 +30,38 @@ namespace HISP.Game.Chat throw new KeyNotFoundException("name not found"); } + public static bool Shutdown(string message, string[] args, User user) + { + if (!user.Administrator) + return false; + + try + { + foreach(GameClient client in GameClient.ConnectedClients) + { + + if (client.LoggedIn) + { + for(int i = 0; i < 2; i++) + { + ItemInstance rubyItem = new ItemInstance(Item.Ruby); + client.LoggedinUser.Inventory.AddIgnoringFull(rubyItem); + } + + client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; + } + + client.Kick("Server was closed by an Administrator."); + + } + } + catch (Exception) { }; + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + Program.ShuttingDown = true; + return true; + } public static bool Give(string message, string[] args, User user) { if (args.Length <= 0) @@ -390,7 +422,7 @@ namespace HISP.Game.Chat foreach (ItemInstance instance in itm.ItemInstances) { - itm.RemoveItem(instance); + target.Inventory.Remove(instance); } } } diff --git a/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs b/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs index 735dac5..477be45 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs @@ -101,6 +101,7 @@ namespace HISP.Game.Items public static int BirthdayToken; public static int MagicBean; public static int MagicDroplet; + public static int Ruby; public static int StallionTradingCard; public static int MareTradingCard; diff --git a/HorseIsleServer/HorseIsleServer/Program.cs b/HorseIsleServer/HorseIsleServer/Program.cs index b7bf3a4..e580faf 100644 --- a/HorseIsleServer/HorseIsleServer/Program.cs +++ b/HorseIsleServer/HorseIsleServer/Program.cs @@ -12,6 +12,7 @@ namespace HISP { public class Program { + public static bool ShuttingDown = false; static void Main(string[] args) { #if (!DEBUG) @@ -54,7 +55,7 @@ namespace HISP Logger.ErrorPrint(""); Logger.ErrorPrint(execpt.StackTrace); - while (true) { }; + while (!ShuttingDown) { /*Allow asyncronous operations to happen.*/ }; } } } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs index 310d846..1a2c395 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs @@ -903,6 +903,7 @@ namespace HISP.Server Item.ModSplatterball = gameData.item.special.mod_splatterball; Item.MagicBean = gameData.item.special.magic_bean; Item.MagicDroplet = gameData.item.special.magic_droplet; + Item.Ruby = gameData.item.special.ruby; Item.StallionTradingCard = gameData.item.special.stallion_trading_card; Item.MareTradingCard = gameData.item.special.mare_trading_card; From 6c3cb0e9eadcf66f3b440f8a385e58e42611b2fd Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Sun, 7 Nov 2021 23:34:10 -0500 Subject: [PATCH 5/9] Fix modhorse --- HorseIsleData | 2 +- HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HorseIsleData b/HorseIsleData index 9540f98..2135825 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit 9540f98ef9180dca80bcb27599e939a767ba92eb +Subproject commit 2135825724166a05c6fabc0d7550f712aeada1fc diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index ef5c844..740c464 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -549,7 +549,7 @@ namespace HISP.Game.Chat try { id = int.Parse(args[0]); - if(args[1].ToUpper() == "COLOR") + if(args[1].ToUpper() != "COLOR") amount = int.Parse(args[2]); } catch (Exception) From 7815ffc630ea55c5cae319d0b9f0de9f31c88c16 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Mon, 8 Nov 2021 00:15:31 -0500 Subject: [PATCH 6/9] Fix some issues --- HorseIsleServer/HorseIsleServer/Game/Meta.cs | 27 +++++++++++++------ .../HorseIsleServer/Server/Database.cs | 7 +++-- .../HorseIsleServer/Server/GameServer.cs | 2 +- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Meta.cs b/HorseIsleServer/HorseIsleServer/Game/Meta.cs index 4bcff3c..24a590a 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Meta.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Meta.cs @@ -258,13 +258,18 @@ namespace HISP.Game // Insert LGBT Patch here string pronoun = ""; + if (other) { if (user.Gender == "FEMALE") + { pronoun = Messages.PronounFemaleShe; + } if (user.Gender == "MALE") + { pronoun = Messages.PronounMaleHe; + } } if (!other) @@ -363,13 +368,19 @@ namespace HISP.Game // Insert LGBT Patch Here string pronoun = Messages.PronounYouYour; - if(other) + string pronoun2 = Messages.PronounYouYour; + if (other) { if (user.Gender == "FEMALE") + { pronoun = Messages.PronounFemaleShe; - - if (user.Gender == "MALE") + pronoun2 = Messages.PronounFemaleHer; + } + else if (user.Gender == "MALE") + { pronoun = Messages.PronounMaleHe; + pronoun2 = Messages.PronounMaleHis; + } message = Messages.FormatOtherCompetitionGear(pronoun); } @@ -378,22 +389,22 @@ namespace HISP.Game if (user.EquipedCompetitionGear.Head != null) { - message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, pronoun, user.EquipedCompetitionGear.Head.IconId, other); + message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, pronoun2, user.EquipedCompetitionGear.Head.IconId, other); hasMsg = true; } if (user.EquipedCompetitionGear.Body != null) { - message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, pronoun, user.EquipedCompetitionGear.Body.IconId, other); + message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, pronoun2, user.EquipedCompetitionGear.Body.IconId, other); hasMsg = true; } if (user.EquipedCompetitionGear.Legs != null) { - message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, pronoun, user.EquipedCompetitionGear.Legs.IconId, other); + message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, pronoun2, user.EquipedCompetitionGear.Legs.IconId, other); hasMsg = true; } if (user.EquipedCompetitionGear.Feet != null) { - message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, pronoun, user.EquipedCompetitionGear.Feet.IconId, other); + message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, pronoun2, user.EquipedCompetitionGear.Feet.IconId, other); hasMsg = true; } @@ -919,7 +930,7 @@ namespace HISP.Game if (highscore.Type == "SCORE") message += Messages.FormatHighscoreStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName), highscore.Score, highscore.TimesPlayed); else if (highscore.Type == "TIME") - message += Messages.FormatBestTimeStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName), highscore.Score, highscore.TimesPlayed); + message += Messages.FormatBestTimeStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName, true), highscore.Score, highscore.TimesPlayed); } message += Messages.BackToMap; message += Messages.MetaTerminator; diff --git a/HorseIsleServer/HorseIsleServer/Server/Database.cs b/HorseIsleServer/HorseIsleServer/Server/Database.cs index 0b39bf5..214fdfe 100644 --- a/HorseIsleServer/HorseIsleServer/Server/Database.cs +++ b/HorseIsleServer/HorseIsleServer/Server/Database.cs @@ -5482,14 +5482,17 @@ namespace HISP.Server } } - public static int GetRanking(int score, string gameTitle) + public static int GetRanking(int score, string gameTitle, bool time=false) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) { db.Open(); MySqlCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC"; + if(time) + sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score ASC"; + else + sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC"; sqlCommand.Parameters.AddWithValue("@gameTitle", gameTitle); sqlCommand.Prepare(); MySqlDataReader reader = sqlCommand.ExecuteReader(); diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index 8511384..f4b0a35 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -4594,7 +4594,7 @@ namespace HISP.Server Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid score value"); return; } - Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameTitle, 5); + Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameTitle, 5, !time); bool bestScoreEver = false; if (scores.Length >= 1) bestScoreEver = scores[0].Score <= value; From b4350d1e5fd453655cf8d0e4e474300329e47f33 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Mon, 8 Nov 2021 01:52:58 -0500 Subject: [PATCH 7/9] Add arena failed to join text --- HorseIsleData | 2 +- HorseIsleServer/HorseIsleServer/Game/Arena.cs | 18 +++++++++++++++++- .../HorseIsleServer/Game/Messages.cs | 1 + .../HorseIsleServer/Server/GameDataJson.cs | 2 ++ .../HorseIsleServer/Server/GameServer.cs | 5 ----- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/HorseIsleData b/HorseIsleData index 2135825..98f385f 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit 2135825724166a05c6fabc0d7550f712aeada1fc +Subproject commit 98f385f4adaad7e58d265001f4f109869ca9c88d diff --git a/HorseIsleServer/HorseIsleServer/Game/Arena.cs b/HorseIsleServer/HorseIsleServer/Game/Arena.cs index 43be3a9..18668d7 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Arena.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Arena.cs @@ -348,7 +348,15 @@ namespace HISP.Game public void AddEntry(User user, HorseInstance horse) { if (Entries.Length + 1 > Slots) - return; + { + if (Entries.Length + 1 > Slots) + { + byte[] enterFailed = PacketBuilder.CreateChat(Messages.ArenaFullErrorMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(enterFailed); + GameServer.UpdateArea(user.LoggedinClient); + return; + } + } if(!UserHasHorseEntered(user)) { @@ -357,6 +365,14 @@ namespace HISP.Game arenaEntry.EnteredHorse = horse; entries.Add(arenaEntry); } + + user.TakeMoney(EntryCost); + + byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(enteredIntoCompetition); + GameServer.UpdateAreaForAll(user.X, user.Y, true); + + return; } public static Arena GetArenaUserEnteredIn(User user) diff --git a/HorseIsleServer/HorseIsleServer/Game/Messages.cs b/HorseIsleServer/HorseIsleServer/Game/Messages.cs index bf2d2d8..69488f8 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Messages.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Messages.cs @@ -333,6 +333,7 @@ namespace HISP.Game public static string ArenaNeedsVet; public static string ArenaEventNameFormat; + public static string ArenaFullErrorMessage; public static string ArenaCurrentlyTakingEntriesFormat; public static string ArenaCompetitionInProgress; diff --git a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs index 1a2c395..e740d8b 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameDataJson.cs @@ -1255,6 +1255,8 @@ namespace HISP.Server Messages.ArenaYouHaveHorseEntered = gameData.messages.meta.arena.horse_entered; Messages.ArenaCompetitionFull = gameData.messages.meta.arena.competiton_full; + Messages.ArenaFullErrorMessage = gameData.messages.meta.arena.arena_join_fail_full; + Messages.ArenaEnterHorseFormat = gameData.messages.meta.arena.enter_horse; Messages.ArenaCurrentCompetitors = gameData.messages.meta.arena.current_competitors; Messages.ArenaCompetingHorseFormat = gameData.messages.meta.arena.competing_horses; diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index f4b0a35..ddd2003 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -1678,11 +1678,6 @@ namespace HISP.Server if (sender.LoggedinUser.Money >= arena.EntryCost) { arena.AddEntry(sender.LoggedinUser, horseInstance); - sender.LoggedinUser.TakeMoney(arena.EntryCost); - - byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(enteredIntoCompetition); - UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); break; } else From 0b6359f1dd349acf06c5d5da9166e333d432c25d Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Mon, 8 Nov 2021 14:42:05 -0500 Subject: [PATCH 8/9] fix crashes --- HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs | 4 +++- HorseIsleServer/HorseIsleServer/Player/Trade.cs | 2 +- HorseIsleServer/HorseIsleServer/Server/GameClient.cs | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index 740c464..7b8bd48 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -51,7 +51,7 @@ namespace HISP.Game.Chat client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; } - client.Kick("Server was closed by an Administrator."); + client.Kick("%SHUTDOWN Command Executed by an Administrator (Probably a server restart)"); } } @@ -60,6 +60,8 @@ namespace HISP.Game.Chat byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); user.LoggedinClient.SendPacket(chatPacket); Program.ShuttingDown = true; + Thread.Sleep(1000); // give it a few seconds to shut down, if it doesnt force exit + Environment.Exit(0); return true; } public static bool Give(string message, string[] args, User user) diff --git a/HorseIsleServer/HorseIsleServer/Player/Trade.cs b/HorseIsleServer/HorseIsleServer/Player/Trade.cs index f4afeb0..eb99ce7 100644 --- a/HorseIsleServer/HorseIsleServer/Player/Trade.cs +++ b/HorseIsleServer/HorseIsleServer/Player/Trade.cs @@ -218,7 +218,7 @@ namespace HISP.Player foreach (ItemInstance itm in item) { Trader.Inventory.Remove(itm); - OtherTrade.Trader.Inventory.Add(itm); + OtherTrade.Trader.Inventory.AddIgnoringFull(itm); } } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs index 25ae302..5df89ec 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameClient.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameClient.cs @@ -181,7 +181,8 @@ namespace HISP.Server Logger.DebugPrint("Sending keep-alive packet to " + LoggedinUser.Username); byte[] updatePacket = PacketBuilder.CreateKeepAlive(); SendPacket(updatePacket); - keepAliveTimer.Change(oneMinute, oneMinute); + if(keepAliveTimer != null) + keepAliveTimer.Change(oneMinute, oneMinute); } private void minuteTimerTick(object state) { From 6d2a16cbaa9725778ab98171dac70c10c5ed5049 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Mon, 8 Nov 2021 14:44:07 -0500 Subject: [PATCH 9/9] fix build --- HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index 7b8bd48..ffe8961 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -7,6 +7,7 @@ using HISP.Game.Events; using HISP.Game.Horse; using System.Linq; using HISP.Game.Inventory; +using System.Threading; namespace HISP.Game.Chat {