From 1ad0783f8f7bc918befa57cedb0267444cc6b491 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Fri, 14 May 2021 12:18:11 +1200 Subject: [PATCH] add %RULES command, fix bugs in random events --- DataCollection/gamedata.json | 6 ++++ .../HorseIsleServer/Game/Chat/Chat.cs | 2 ++ .../HorseIsleServer/Game/Chat/Command.cs | 28 +++++++++++++++++++ .../Game/Events/RandomEvent.cs | 7 ++++- Horse Isle Server/HorseIsleServer/Game/Map.cs | 7 +++-- .../HorseIsleServer/Game/Messages.cs | 10 +++++++ .../HorseIsleServer/Server/GameDataJson.cs | 6 ++++ 7 files changed, 62 insertions(+), 4 deletions(-) diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index 0f85f21..4505951 100755 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -224,6 +224,12 @@ "only_unicorn":"Only a ridden unicorn can respond to such a request.", "location_unknown":"Unicorn Failed to understand location or player name to warp to." }, + "rules_isle":{ + "x":17, + "y":17, + "message":"You have been sent to Review the game rules by a Moderator. Please take the time to seriously review the rules so you have a more enjoyable game experience. Your chat has been blocked for 20 minutes to help you focus on the rules.", + "command_msg":"%USERNAME% muted for 20 minutes and Sent to Study Rules." + }, "mod_isle":{ "x":165, "y":465, diff --git a/Horse Isle Server/HorseIsleServer/Game/Chat/Chat.cs b/Horse Isle Server/HorseIsleServer/Game/Chat/Chat.cs index 3c2e8ec..adc22a1 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Chat/Chat.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Chat/Chat.cs @@ -61,6 +61,8 @@ namespace HISP.Game.Chat return Command.Goto(message, args, user); if (message.ToUpper().StartsWith("%KICK")) return Command.Kick(message, args, user); + if (message.ToUpper().StartsWith("%RULES")) + return Command.Rules(message, args, user); if (message.ToUpper().StartsWith("%NOCLIP")) return Command.NoClip(message, args, user); if (message.ToUpper().StartsWith("%BAN")) diff --git a/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs b/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs index 0b7e0f6..020a843 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Chat/Command.cs @@ -159,6 +159,31 @@ namespace HISP.Game.Chat return true; } + public static bool Rules(string message, string[] args, User user) + { + if (!user.Administrator || !user.Moderator) + return false; + if (args.Length <= 0) + return false; + + try + { + User toSend = GameServer.GetUserByName(args[0]); + + toSend.Teleport(Map.RulesIsleX, Map.RulesIsleY); + byte[] studyTheRulesMsg = PacketBuilder.CreateChat(Messages.RulesIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + toSend.LoggedinClient.SendPacket(studyTheRulesMsg); + } + catch (KeyNotFoundException) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1))+Messages.FormatRulesCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + public static bool Kick(string message, string[] args, User user) { if (!user.Administrator || !user.Moderator) @@ -358,6 +383,9 @@ namespace HISP.Game.Chat public static bool CallHorse(string message, string[] args, User user) { + if (!user.Administrator) + return false; + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); WildHorse horse = WildHorse.WildHorses[GameServer.RandomNumberGenerator.Next(0, WildHorse.WildHorses.Length)]; diff --git a/Horse Isle Server/HorseIsleServer/Game/Events/RandomEvent.cs b/Horse Isle Server/HorseIsleServer/Game/Events/RandomEvent.cs index 38f62b5..6807f25 100644 --- a/Horse Isle Server/HorseIsleServer/Game/Events/RandomEvent.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Events/RandomEvent.cs @@ -26,14 +26,19 @@ namespace HISP.Game.Events if (rngEvent.Text.Contains("%HORSENAME%") && user.HorseInventory.HorseList.Length <= 0) continue; - int moneyEarned = 0; + int moneyEarned = 0; if (rngEvent.MinMoney != 0 || rngEvent.MaxMoney != 0) moneyEarned = GameServer.RandomNumberGenerator.Next(rngEvent.MinMoney, rngEvent.MaxMoney); + if (moneyEarned < 0) + if (user.Money + moneyEarned < 0) + continue; + if (rngEvent.GiveObject != 0) user.Inventory.AddIgnoringFull(new ItemInstance(rngEvent.GiveObject)); + if(moneyEarned != 0) user.AddMoney(moneyEarned); diff --git a/Horse Isle Server/HorseIsleServer/Game/Map.cs b/Horse Isle Server/HorseIsleServer/Game/Map.cs index e19756a..3981fe4 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Map.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Map.cs @@ -28,6 +28,10 @@ namespace HISP.Game public static int ModIsleX; public static int ModIsleY; + + public static int RulesIsleX; + public static int RulesIsleY; + public static int GetTileId(int x, int y, bool overlay) { int pos = ((x * Height) + y); @@ -94,9 +98,6 @@ namespace HISP.Game if (!passable && overlayPassable) passable = true; - - - return passable; } diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs index ddf0ba2..8075978 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs @@ -17,6 +17,10 @@ namespace HISP.Game public static string PlaytimeMessageFormat; public static string[] RngMessages; + // Rules Isle + public static string RulesIsleSentMessage; + public static string RulesIsleCommandMessageFormat; + // Mod public static string ModIsleMessage; public static string ModSplatterballEarnedYouFormat; @@ -1244,6 +1248,12 @@ namespace HISP.Game return EventWonRealTimeRiddleForYouFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); } + // Rules Command + public static string FormatRulesCommandMessage(string username) + { + return RulesIsleCommandMessageFormat.Replace("%USERNAME%", username.ToUpper()); + } + // Mute Command public static string FormatStoppedMutingPlayer(string username) { diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs index f176a64..89cfb8e 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs @@ -968,6 +968,12 @@ namespace HISP.Server Map.ModIsleX = gameData.messages.commands.mod_isle.x; Map.ModIsleY = gameData.messages.commands.mod_isle.y; + // Rules Isle + Map.RulesIsleX = gameData.messages.commands.rules_isle.x; + Map.RulesIsleY = gameData.messages.commands.rules_isle.y; + Messages.RulesIsleSentMessage = gameData.messages.commands.rules_isle.message; + Messages.RulesIsleCommandMessageFormat = gameData.messages.commands.rules_isle.command_msg; + // Tag Messages.TagYourItFormat = gameData.messages.meta.player_interaction.tag.tag_player;