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 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.1.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("/"))
{
return true;
}
string[] array = _message.Split(new char[1] { ' ' });
string text = array[0].ToLower();
switch (text)
{
case "/diceandcolor":
case "/diceandcolorhelp":
case "/ccolorhelp":
case "/crollhelp":
case "/diceandcolour":
case "/diceandcolourhelp":
case "/ccolourhelp":
Help(__instance, text);
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 CRollCheckValid(__instance, array);
case "/crollclient":
CRollClient(__instance, array);
return false;
default:
return true;
}
}
private static void Help(ChatBehaviour chat, string command)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<color=yellow>cUtils.DiceAndColor 1.1.0</color> " + command + ":");
stringBuilder.AppendLine("type <color=green>/croll</color> to roll a d20.");
stringBuilder.AppendLine("type <color=green>/croll [nr]</color> to roll a d[nr].");
stringBuilder.AppendLine("valid dice numbers go from <color=yellow>1</color> to <color=yellow>2147483646</color>.");
stringBuilder.AppendLine("the dice gets rolled by the server, to detect cheaters.");
stringBuilder.AppendLine("valid rolls will display in <color=#ff7f50>orange</color> and <color=#9acd32>green</color>.");
stringBuilder.AppendLine("if the host doesn't have the mod, you can use <color=green>/crollclient</color> instead.");
stringBuilder.AppendLine("type <color=green>/ccolor</color> to set a random chatcolor.");
stringBuilder.AppendLine("type <color=green>/ccolor [name]</color> to set a CSS color as chatcolor.");
stringBuilder.AppendLine("type <color=green>/ccolorlist</color> to list all CSS colors.");
stringBuilder.AppendLine("type <color=green>/ccolorget</color> 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("<color=" + text + ">" + text + "</color>");
}
private static void CColorGet(ChatBehaviour chat)
{
string nickname = Player._mainPlayer._nickname;
string text = "[" + nickname + "]</color>";
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("<color=#"))
{
text = text.Substring(text.IndexOf("#"), 7);
chat.New_ChatMessage("<color=" + text + ">" + text + "</color>");
}
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("<color=" + text + ">" + key + "</color> ");
}
chat.New_ChatMessage(stringBuilder.ToString());
}
private static bool CRollCheckValid(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)
{
chat.New_ChatMessage(GetInvalidMessage());
return false;
}
return true;
}
private static void CRollClient(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)
{
chat.New_ChatMessage(GetInvalidMessage());
return;
}
int num = Random.Range(1, result + 1);
string text = $"cRollClient d{result} #{num}";
chat.Send_ChatMessage(text);
}
private static string GetInvalidMessage()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<color=red>invalid command</color>");
stringBuilder.AppendLine("type <color=green>/diceandcolor</color> for more info");
return stringBuilder.ToString();
}
}
[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("/"))
{
return true;
}
string[] array = message.Split(new char[1] { ' ' });
string text = array[0].ToLower();
string text2 = text;
string text3 = text2;
if (text3 == "/croll")
{
CRollServer(array, ref message);
return true;
}
return true;
}
private static void CRollServer(string[] inputArray, ref string message)
{
if (inputArray.Length > 2)
{
message = "<color=red>I JUST TRIED TO CHEAT AT /CROLL</color>";
return;
}
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 <color=#ff7f50>d{result}</color> <color=#9acd32>#{num}</color>";
}
}
private const string PLUGIN_GUID = "cUtils.DiceAndColor";
private const string PLUGIN_NAME = "DiceAndColor";
private const string PLUGIN_VERSION = "1.1.0";
private readonly Harmony harmony = new Harmony("cUtils.DiceAndColor");
protected static Dictionary<string, string> cssColors;
private void Awake()
{
cssColors = BuildCssColors();
harmony.PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin DiceAndColor is loaded!");
}
private Dictionary<string, string> BuildCssColors()
{
return new Dictionary<string, string>
{
{ "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" }
};
}
}