using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using System.Text.RegularExpressions; using BepInEx; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("DiceAndColor")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("DiceAndColor")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e59b3713-dbff-4d0e-bb86-544e8b81ca53")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace DiceAndColor; [BepInPlugin("cUtils.DiceAndColor", "DiceAndColor", "1.2.0")] [BepInProcess("atlyss.exe")] public class Plugin : BaseUnityPlugin { [HarmonyPatch(typeof(ChatBehaviour), "Cmd_SendChatMessage")] public class Cmd_SendChatMessage_Patch { public static bool Prefix(ChatBehaviour __instance, ref string _message) { if (_message == null || !_message.StartsWith("/") || _message.StartsWith("//")) { return true; } string[] array = _message.Split(new char[1] { ' ' }); string input = array[0].ToLower(); input = Regex.Replace(input, "<.*?>", ""); switch (input) { case "/diceandcolor": case "/diceandcolorhelp": case "/ccolorhelp": case "/crollhelp": case "/diceandcolour": case "/diceandcolourhelp": case "/ccolourhelp": Help(__instance, input); return false; case "/ccolor": case "/ccolour": CColor(__instance, array); return false; case "/ccolorget": case "/ccolourget": CColorGet(__instance); return false; case "/ccolorlist": case "/ccolourlist": CColorList(__instance); return false; case "/croll": return !IsZero(CRollValidateDice(__instance, array)); case "/crollclient": CRollClient(__instance, array); return false; case "/crollpipe": CRollPipe(__instance, array); return false; default: return true; } } private static void Help(ChatBehaviour chat, string command) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("cUtils.DiceAndColor 1.2.0 " + command + ":"); stringBuilder.AppendLine("type /croll to roll a d20."); stringBuilder.AppendLine("type /croll [nr] to roll a d[nr]."); stringBuilder.AppendLine("valid dice numbers go from 1 to 2147483646."); stringBuilder.AppendLine("the dice gets rolled by the server, to detect cheaters."); stringBuilder.AppendLine("valid rolls will display in orange and green."); stringBuilder.AppendLine("if the host doesn't have the mod, you can use /crollclient instead."); stringBuilder.AppendLine("type /crollpipe [message] to send a message like [message] [result]"); stringBuilder.AppendLine("type /crollpipe [nr] [message] to send a message like [message] [result]"); stringBuilder.AppendLine("type /ccolor to set a random chatcolor."); stringBuilder.AppendLine("type /ccolor [name] to set a CSS color as chatcolor."); stringBuilder.AppendLine("type /ccolorlist to list all CSS colors."); stringBuilder.AppendLine("type /ccolorget to display your last messages hexcolor."); chat.New_ChatMessage(stringBuilder.ToString()); } private static void CColor(ChatBehaviour chat, string[] inputArray) { string text = ""; if (inputArray.Length < 2) { text = $"#{Random.Range(0, 16777216):X6}"; } else { string key = inputArray[1].ToLower(); if (!cssColors.ContainsKey(key)) { chat.New_ChatMessage("color not found"); return; } text = cssColors[key]; } chat.Send_ChatMessage("/chatcolor " + text); chat.New_ChatMessage("" + text + ""); } private static void CColorGet(ChatBehaviour chat) { string nickname = Player._mainPlayer._nickname; string text = "[" + nickname + "]"; bool flag = false; for (int num = chat._chatMessages.Count - 1; num >= 0; num--) { if (chat._chatMessages[num].Contains(text)) { text = chat._chatMessages[num]; flag = true; break; } } if (!flag) { chat.New_ChatMessage("you need to send a message first"); return; } text = text.Substring(text.IndexOf("#") + 1); if (text.Contains("" + text + ""); } else { chat.New_ChatMessage("default color"); } } private static void CColorList(ChatBehaviour chat) { StringBuilder stringBuilder = new StringBuilder(); string text = ""; foreach (string key in cssColors.Keys) { text = cssColors[key]; stringBuilder.Append("" + key + " "); } chat.New_ChatMessage(stringBuilder.ToString()); } private static int CRollValidateDice(ChatBehaviour chat, string[] inputArray) { int result = 20; if (inputArray.Length > 1) { int.TryParse(inputArray[1], out result); result = ((result <= 2147483646) ? result : 0); } if (result < 1 || inputArray.Length > 2) { SendErrorMessage(chat); return 0; } return result; } private static void CRollClient(ChatBehaviour chat, string[] inputArray) { int num = CRollValidateDice(chat, inputArray); if (num != 0) { int num2 = Random.Range(1, num + 1); string text = $"cRollClient d{num} #{num2}"; chat.Send_ChatMessage(text); DisplayRoll(num2); } } private static void SendErrorMessage(ChatBehaviour chat) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("invalid command"); stringBuilder.AppendLine("type /diceandcolor for more info"); chat.New_ChatMessage(stringBuilder.ToString()); } private static void CRollPipe(ChatBehaviour chat, string[] inputArray) { int result; bool flag = int.TryParse(inputArray[1], out result); if (inputArray.Length == 1 || (inputArray.Length == 2 && flag)) { SendErrorMessage(chat); return; } string[] inputArray2 = ((!flag) ? new string[1] { inputArray[0] } : new string[2] { inputArray[0], inputArray[1] }); int num = CRollValidateDice(chat, inputArray2); if (num != 0) { int num2 = Random.Range(1, num + 1); string text = string.Join(" ", inputArray); text = text.Substring(text.IndexOf(" ") + 1); if (int.TryParse(inputArray[1], out result)) { text = text.Substring(text.IndexOf(" ") + 1); } text = text + " " + num2; chat.New_ChatMessage(text); chat.Send_ChatMessage(text); } } } [HarmonyPatch(typeof(ChatBehaviour), "Rpc_RecieveChatMessage")] public static class ChatBehaviour_Rpc_RecieveChatMessage { public static bool Prefix(ref ChatBehaviour __instance, ref string message) { if (message == null || !message.StartsWith("/") || message.StartsWith("//")) { return true; } string[] array = message.Split(new char[1] { ' ' }); string input = array[0].ToLower(); input = Regex.Replace(input, "<.*?>", ""); string text = input; string text2 = text; if (text2 == "/croll") { return CRollServer(array, ref message); } return true; } private static bool CRollServer(string[] inputArray, ref string message) { if (inputArray.Length > 2) { return false; } int result = 20; if (inputArray.Length == 2) { int.TryParse(inputArray[1], out result); result = ((result <= 2147483646) ? result : 0); result = ((result < 1) ? 20 : result); } int num = Random.Range(1, result + 1); message = $"/cRoll d{result} #{num}"; DisplayRoll(num); return true; } } private const string PLUGIN_GUID = "cUtils.DiceAndColor"; private const string PLUGIN_NAME = "DiceAndColor"; private const string PLUGIN_VERSION = "1.2.0"; private readonly Harmony harmony = new Harmony("cUtils.DiceAndColor"); protected static Dictionary cssColors; private void Awake() { cssColors = BuildCssColors(); harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin DiceAndColor is loaded!"); } protected static bool IsZero(int number) { return number == 0; } protected static void DisplayRoll(int roll) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) string[] names = Enum.GetNames(typeof(FloatTextColor)); int num = names.Length; int num2 = Random.Range(0, num); string text = names[num2]; if (!Enum.TryParse(text, out FloatTextColor result) || text == "EXPERIENCE") { result = (FloatTextColor)0; } StatusEntity statusEntity = Player._mainPlayer._statusEntity; statusEntity._statusEntityGUI.Target_Display_FloatingNumber(statusEntity, result, roll, 0, 0); } private Dictionary BuildCssColors() { return new Dictionary { { "aliceblue", "#f0f8ff" }, { "antiquewhite", "#faebd7" }, { "aqua", "#00ffff" }, { "aquamarine", "#7fffd4" }, { "azure", "#f0ffff" }, { "beige", "#f5f5dc" }, { "bisque", "#ffe4c4" }, { "black", "#000000" }, { "blanchedalmond", "#ffebcd" }, { "blue", "#0000ff" }, { "blueviolet", "#8a2be2" }, { "brown", "#a52a2a" }, { "burlywood", "#deb887" }, { "cadetblue", "#5f9ea0" }, { "chartreuse", "#7fff00" }, { "chocolate", "#d2691e" }, { "coral", "#ff7f50" }, { "cornflowerblue", "#6495ed" }, { "cornsilk", "#fff8dc" }, { "crimson", "#dc143c" }, { "cyan", "#00ffff" }, { "darkblue", "#00008b" }, { "darkcyan", "#008b8b" }, { "darkgoldenrod", "#b8860b" }, { "darkgray", "#a9a9a9" }, { "darkgreen", "#006400" }, { "darkgrey", "#a9a9a9" }, { "darkkhaki", "#bdb76b" }, { "darkmagenta", "#8b008b" }, { "darkolivegreen", "#556b2f" }, { "darkorange", "#ff8c00" }, { "darkorchid", "#9932cc" }, { "darkred", "#8b0000" }, { "darksalmon", "#e9967a" }, { "darkseagreen", "#8fbc8f" }, { "darkslateblue", "#483d8b" }, { "darkslategray", "#2f4f4f" }, { "darkslategrey", "#2f4f4f" }, { "darkturquoise", "#00ced1" }, { "darkviolet", "#9400d3" }, { "deeppink", "#ff1493" }, { "deepskyblue", "#00bfff" }, { "dimgray", "#696969" }, { "dimgrey", "#696969" }, { "dodgerblue", "#1e90ff" }, { "firebrick", "#b22222" }, { "floralwhite", "#fffaf0" }, { "forestgreen", "#228b22" }, { "fuchsia", "#ff00ff" }, { "gainsboro", "#dcdcdc" }, { "ghostwhite", "#f8f8ff" }, { "goldenrod", "#daa520" }, { "gold", "#ffd700" }, { "gray", "#808080" }, { "green", "#008000" }, { "greenyellow", "#adff2f" }, { "grey", "#808080" }, { "honeydew", "#f0fff0" }, { "hotpink", "#ff69b4" }, { "indianred", "#cd5c5c" }, { "indigo", "#4b0082" }, { "ivory", "#fffff0" }, { "khaki", "#f0e68c" }, { "lavenderblush", "#fff0f5" }, { "lavender", "#e6e6fa" }, { "lawngreen", "#7cfc00" }, { "lemonchiffon", "#fffacd" }, { "lightblue", "#add8e6" }, { "lightcoral", "#f08080" }, { "lightcyan", "#e0ffff" }, { "lightgoldenrodyellow", "#fafad2" }, { "lightgray", "#d3d3d3" }, { "lightgreen", "#90ee90" }, { "lightgrey", "#d3d3d3" }, { "lightpink", "#ffb6c1" }, { "lightsalmon", "#ffa07a" }, { "lightseagreen", "#20b2aa" }, { "lightskyblue", "#87cefa" }, { "lightslategray", "#778899" }, { "lightslategrey", "#778899" }, { "lightsteelblue", "#b0c4de" }, { "lightyellow", "#ffffe0" }, { "lime", "#00ff00" }, { "limegreen", "#32cd32" }, { "linen", "#faf0e6" }, { "magenta", "#ff00ff" }, { "maroon", "#800000" }, { "mediumaquamarine", "#66cdaa" }, { "mediumblue", "#0000cd" }, { "mediumorchid", "#ba55d3" }, { "mediumpurple", "#9370db" }, { "mediumseagreen", "#3cb371" }, { "mediumslateblue", "#7b68ee" }, { "mediumspringgreen", "#00fa9a" }, { "mediumturquoise", "#48d1cc" }, { "mediumvioletred", "#c71585" }, { "midnightblue", "#191970" }, { "mintcream", "#f5fffa" }, { "mistyrose", "#ffe4e1" }, { "moccasin", "#ffe4b5" }, { "navajowhite", "#ffdead" }, { "navy", "#000080" }, { "oldlace", "#fdf5e6" }, { "olive", "#808000" }, { "olivedrab", "#6b8e23" }, { "orange", "#ffa500" }, { "orangered", "#ff4500" }, { "orchid", "#da70d6" }, { "palegoldenrod", "#eee8aa" }, { "palegreen", "#98fb98" }, { "paleturquoise", "#afeeee" }, { "palevioletred", "#db7093" }, { "papayawhip", "#ffefd5" }, { "peachpuff", "#ffdab9" }, { "peru", "#cd853f" }, { "pink", "#ffc0cb" }, { "plum", "#dda0dd" }, { "powderblue", "#b0e0e6" }, { "purple", "#800080" }, { "rebeccapurple", "#663399" }, { "red", "#ff0000" }, { "rosybrown", "#bc8f8f" }, { "royalblue", "#4169e1" }, { "saddlebrown", "#8b4513" }, { "salmon", "#fa8072" }, { "sandybrown", "#f4a460" }, { "seagreen", "#2e8b57" }, { "seashell", "#fff5ee" }, { "sienna", "#a0522d" }, { "silver", "#c0c0c0" }, { "skyblue", "#87ceeb" }, { "slateblue", "#6a5acd" }, { "slategray", "#708090" }, { "slategrey", "#708090" }, { "snow", "#fffafa" }, { "springgreen", "#00ff7f" }, { "steelblue", "#4682b4" }, { "tan", "#d2b48c" }, { "teal", "#008080" }, { "thistle", "#d8bfd8" }, { "tomato", "#ff6347" }, { "turquoise", "#40e0d0" }, { "violet", "#ee82ee" }, { "wheat", "#f5deb3" }, { "white", "#ffffff" }, { "whitesmoke", "#f5f5f5" }, { "yellow", "#ffff00" }, { "yellowgreen", "#9acd32" } }; } }