From 4165b01e00fb96df12a5a39bc8e73ad59b8f749a Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Fri, 26 Nov 2021 21:29:45 -0500 Subject: [PATCH] Fix MULTIROOM priority shenanigans --- .../HorseIsleServer/Game/Chat/Chat.cs | 4 +- .../HorseIsleServer/Game/Chat/Command.cs | 86 ++++++++++++++++--- .../HorseIsleServer/Game/Items/Item.cs | 14 +++ .../HorseIsleServer/Game/Multiroom.cs | 2 +- 4 files changed, 92 insertions(+), 14 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs index 324a43e..0474323 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Chat.cs @@ -92,6 +92,8 @@ namespace HISP.Game.Chat { if (message.ToUpper().StartsWith("%GIVE")) return Command.Give(message, args, user); + if (message.ToUpper().StartsWith("%SWF")) + return Command.Swf(message, args, user); if (message.ToUpper().StartsWith("%GOTO")) return Command.Goto(message, args, user); if (message.ToUpper().StartsWith("%JUMP")) @@ -492,7 +494,7 @@ namespace HISP.Game.Chat } public static string EscapeMessage(string message) { - return message.Replace("&", "&").Replace("<", "<"); + return message.Replace("<", "<"); } public static string FormatChatForOthers(User user, ChatChannel channel, string message, bool autoReply=false) diff --git a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs index 4c5b8a0..cbf3332 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Chat/Command.cs @@ -76,20 +76,48 @@ namespace HISP.Game.Chat int itemId = 0; try { - itemId = int.Parse(args[1]); - Item.GetItemById(itemId); - ItemInstance newItemInstance = new ItemInstance(itemId); - - if(args.Length >= 3) + if(args[1] != "RANDOM") { - findNamePartial(args[2]).Inventory.AddIgnoringFull(newItemInstance); + itemId = int.Parse(args[1]); + } + else + { + itemId = Item.GetRandomItem(false).Id; + } + + Item.GetItemById(itemId); // Calling this makes sure this item id exists. + + ItemInstance newItemInstance = new ItemInstance(itemId); + + if (itemId == Item.Present) + newItemInstance.Data = Item.GetRandomItem(false).Id; + + if (args.Length >= 3) + { + if(args[2] == "ALL") + { + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + ItemInstance itmInstance = new ItemInstance(itemId); + + if (itemId == Item.Present) + itmInstance.Data = Item.GetRandomItem(false).Id; + + client.LoggedinUser.Inventory.AddIgnoringFull(itmInstance); + } + } + } + else + { + findNamePartial(args[2]).Inventory.AddIgnoringFull(newItemInstance); + } } else { user.Inventory.AddIgnoringFull(newItemInstance); } - - } catch(Exception) { @@ -112,8 +140,6 @@ namespace HISP.Game.Chat { user.HorseInventory.AddHorse(horse); } - - } catch (Exception) { @@ -155,8 +181,6 @@ namespace HISP.Game.Chat { user.AddMoney(money); } - - } catch (Exception) { @@ -194,6 +218,44 @@ namespace HISP.Game.Chat return true; } + public static bool Swf(string message, string[] args, User user) + { + if (args.Length <= 2) + return false; + + if (!(user.Administrator || user.Moderator)) + return false; + + try + { + string swfName = args[0]; + string swfUser = args[1]; + byte[] packetBytes = PacketBuilder.CreateSwfModulePacket(swfName, PacketBuilder.PACKET_SWF_MODULE_FORCE); + if (swfUser.ToUpper() == "ALL") + { + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + client.SendPacket(packetBytes); + } + } + else + { + User player = findNamePartial(args[2]); + player.LoggedinClient.SendPacket(packetBytes); + } + } + 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 UnBan(string message, string[] args, User user) { if(args.Length <= 0) diff --git a/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs b/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs index 477be45..92a0101 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Items/Item.cs @@ -121,6 +121,20 @@ namespace HISP.Game.Items public int ItemId; public int ItemCount; } + + public static ItemInformation GetRandomItem(bool allowQuest) + { + while (true) + { + Item.ItemInformation itm = Items[GameServer.RandomNumberGenerator.Next(0, Items.Length)]; + + if(!allowQuest) + if (itm.Type == "QUEST") + continue; + + return itm; + } + } public static void UseItem(User user, ItemInstance item) { if (user.Inventory.HasItem(item.RandomId)) diff --git a/HorseIsleServer/HorseIsleServer/Game/Multiroom.cs b/HorseIsleServer/HorseIsleServer/Game/Multiroom.cs index e1cac7e..effc7b3 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Multiroom.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Multiroom.cs @@ -64,7 +64,6 @@ namespace HISP.Game } } } - public Multiroom(int x, int y) { this.x = x; @@ -72,6 +71,7 @@ namespace HISP.Game multirooms.Add(this); } + public void Join(User user) { if (!JoinedUsers.Contains(user))