using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using BepInEx;
using BepInEx.Configuration;
using Bounce.ManagedCollections;
using Bounce.Singletons;
using GameChat.UI;
using HarmonyLib;
using Newtonsoft.Json;
using TMPro;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("CustomDicePackPlugin")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CustomDicePackPlugin")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("CustomDicePackPlugin")]
[assembly: ComVisible(false)]
[assembly: Guid("c303405d-e66c-4316-9cdb-4e3ca15c6360")]
[assembly: AssemblyFileVersion("3.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("3.0.0.0")]
namespace LordAshes;
[BepInPlugin("org.lordashes.plugins.customdicepack", "Custom Dice Pack Plug-In", "3.0.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class CustomDicePackPlugin : BaseUnityPlugin
{
public class VisualPart
{
public string type { get; set; }
public GameObject reference { get; set; }
}
private class Patches
{
[HarmonyPatch(typeof(LocalConnectionManager), "ProcessDiceUrl")]
public static class PatchProcessTaleSpireUrl
{
public static bool Prefix(string[] urlParts)
{
if (urlParts[0].ToUpper() == "DICE")
{
urlParts[1] = HttpUtility.UrlDecode(urlParts[1]);
if (urlParts[1].Contains("#"))
{
string text = "";
string text2 = "";
string text3 = "";
if (urlParts[1].Contains(":"))
{
text = urlParts[1].Substring(0, urlParts[1].IndexOf(":"));
text2 = urlParts[1].Substring(urlParts[1].IndexOf(":") + 1);
text3 = text2.Substring(text2.IndexOf("#") + 1);
text2 = text2.Substring(0, text2.IndexOf("#"));
}
else
{
text = "";
text2 = urlParts[1].Substring(0, urlParts[1].IndexOf("#"));
text3 = urlParts[1].Substring(urlParts[1].IndexOf("#") + 1);
}
urlParts[1] = text + "<size=0>" + text3 + ":" + text2;
activeCustomization = text3;
expecting = uint.Parse(text2.Substring(0, text2.ToUpper().IndexOf("D")));
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Adjusted Talespire Protocol Request: " + HttpUtility.UrlDecode(JsonConvert.SerializeObject((object)urlParts)) + " (Expecting = " + expecting + ")"));
}
}
return true;
}
}
[HarmonyPatch(typeof(Die), "Spawn")]
public static class PatchSpawn
{
public static void Postfix(DieKind kind, float3 pos, quaternion rot, RollId rollId, byte groupId, bool gmOnlyDie, bool showResult, ref Die __result)
{
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Die Spawn (Expecting " + expecting + " For Customization)"));
}
if (expecting != 0)
{
if (activeCustomization == "")
{
throw new Exception("Expecting With No Active Customization Set");
}
lock (padlock)
{
expecting--;
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Getting Customization Information");
}
CustomDiceInfo customDiceInfo = customDice[activeCustomization];
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Loading Custom Dice Asset Bundle File '" + customDiceInfo.dicePack + "'"));
}
AssetBundle val = AssetBundle.LoadFromFile(File.Find(customDiceInfo.dicePack, (CacheType)999)[0]);
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Creating Prefab '" + customDiceInfo.diceBase + "'"));
}
GameObject val2 = val.LoadAsset<GameObject>(customDiceInfo.diceBase);
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Creating Prefab Instance");
}
GameObject val3 = Object.Instantiate<GameObject>(val2, Vector3.zero, Quaternion.identity);
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Positioning Instance");
}
val3.transform.position = ((Component)__result).gameObject.transform.position;
val3.transform.rotation = ((Component)__result).gameObject.transform.rotation;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Parenting Instance");
}
val3.transform.SetParent(((Component)__result).gameObject.transform);
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Cleanup");
}
Object.Destroy((Object)(object)val2);
val.Unload(false);
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Applying Texture");
}
Renderer component = val3.GetComponent<Renderer>();
component.material.mainTexture = (Texture)(object)Image.LoadTexture(customDiceInfo.diceTexture, (CacheType)999);
}
}
}
[HarmonyPatch(typeof(UIChatMessageManager), "AddDiceResultMessage")]
public static class PatchAddDiceResultMessage
{
public static bool Prefix(RollResults diceResult, ResultsOrigin origin, ClientGuid sender, ref bool hidden)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
Enumerator<RollResultsGroup> enumerator = diceResult.ResultsGroups.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
RollResultsGroup current = enumerator.Current;
if (current.Name != null && current.Name.Contains("<size=0>="))
{
flag = true;
}
}
}
finally
{
((IDisposable)enumerator).Dispose();
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Process Chat Dice Result (isSummary=" + flag + ", showDiceRolls=" + showDiceRolls.Value.ToString() + ", showDiceSummary=" + showDiceSummary.Value.ToString() + ")"));
}
if ((flag && showDiceSummary.Value == ShowDiceResult.hidden) || (!flag && showDiceRolls.Value == ShowDiceResult.hidden))
{
hidden = true;
}
else
{
hidden = false;
}
return (flag && showDiceSummary.Value != 0) || (!flag && showDiceRolls.Value != ShowDiceResult.none);
}
}
[HarmonyPatch(typeof(UIDiceRollResult), "DisplayResult")]
public static class PatchDisplayResult
{
public static bool Prefix(RollResults rollResultData, ClientGuid sender)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
Enumerator<RollResultsGroup> enumerator = rollResultData.ResultsGroups.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
RollResultsGroup current = enumerator.Current;
string text = ((current.Name == null) ? "(None)" : current.Name);
Debug.Log((object)("Custom Dice Pack Plug-In: Display Result: Group Name = '" + text + "'"));
if (text.Contains("<size=0>="))
{
Debug.Log((object)"Custom Dice Pack Plug-In: Display Result: Supressing Display Result For Summary");
return false;
}
}
}
finally
{
((IDisposable)enumerator).Dispose();
}
Debug.Log((object)"Custom Dice Pack Plug-In: Display Result: Allowing Display Result For Result Roll");
return true;
}
public static void Postfix(RollResults rollResultData, ClientGuid sender)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Display Result: Executing Postfix");
}
string text = "";
Enumerator<RollResultsGroup> enumerator = rollResultData.ResultsGroups.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
RollResultsGroup current = enumerator.Current;
string text2 = ((current.Name == null) ? "(None)" : current.Name);
if (text2.Contains("<size=0>"))
{
text = text2.Substring(current.Name.IndexOf("<size=0>") + "<size=0>".Length);
break;
}
}
}
finally
{
((IDisposable)enumerator).Dispose();
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Display Result: Customization = '" + text + "'"));
}
if (!text.StartsWith("=") && text != "")
{
CustomizeDisplay(text);
}
}
}
}
private class SimpleDiceResult
{
public string customization { get; set; } = "";
public int count { get; set; } = 0;
public int icon { get; set; } = 0;
}
public static class Utility
{
public static bool isBoardLoaded()
{
return SimpleSingletonBehaviour<CameraController>.HasInstance && SingletonStateMBehaviour<BoardSessionManager, State<BoardSessionManager>>.HasInstance && !BoardSessionManager.IsLoading;
}
public static bool StrictKeyCheck(KeyboardShortcut check)
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
if (!((KeyboardShortcut)(ref check)).IsUp())
{
return false;
}
KeyCode[] array = new KeyCode[6];
RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
KeyCode[] array2 = (KeyCode[])(object)array;
foreach (KeyCode val in array2)
{
if (Input.GetKey(val) != ((KeyboardShortcut)(ref check)).Modifiers.Contains(val))
{
return false;
}
}
return true;
}
public static Guid GuidFromString(string input)
{
using MD5 mD = MD5.Create();
byte[] b = mD.ComputeHash(Encoding.Default.GetBytes(input));
return new Guid(b);
}
public static GameObject GetBaseLoader(CreatureGuid cid)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
try
{
CreatureBoardAsset val = null;
CreaturePresenter.TryGetAsset(cid, ref val);
if ((Object)(object)val != (Object)null)
{
Transform match = null;
Traverse(((Component)val).transform, "BaseLoader", 0, 10, ref match);
if ((Object)(object)match != (Object)null)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Base Loader '" + ((Object)match.GetChild(0)).name + "' Found"));
return ((Component)match.GetChild(0)).gameObject;
}
Debug.LogWarning((object)"Custom Dice Pack Plugin: Could Not Find Base Loader");
return null;
}
return null;
}
catch
{
return null;
}
}
public static GameObject GetAssetLoader(CreatureGuid cid)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
try
{
CreatureBoardAsset val = null;
CreaturePresenter.TryGetAsset(cid, ref val);
if ((Object)(object)val != (Object)null)
{
Transform match = null;
Traverse(((Component)val).transform, "AssetLoader", 0, 10, ref match);
if ((Object)(object)match != (Object)null)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Asset Loader '" + ((Object)match.GetChild(0)).name + "' Found"));
return ((Component)match.GetChild(0)).gameObject;
}
Debug.LogWarning((object)"Custom Dice Pack Plugin: Could Not Find Asset Loader");
return null;
}
return null;
}
catch
{
return null;
}
}
public static void Traverse(Transform root, string seek, int depth, int depthMax, ref Transform match)
{
try
{
if ((Object)(object)match != (Object)null)
{
return;
}
if (((Object)root).name == seek)
{
match = root;
return;
}
foreach (Transform item in ExtensionMethods.Children(root))
{
if (depth < depthMax)
{
Traverse(item, seek, depth + 1, depthMax, ref match);
}
}
}
catch
{
}
}
public static float ParseFloat(string value)
{
return float.Parse(value, CultureInfo.InvariantCulture);
}
public static string GetCreatureName(string nameBlock)
{
if (nameBlock == null)
{
return "(Unknown)";
}
if (!nameBlock.Contains("<size=0>"))
{
return nameBlock;
}
return nameBlock.Substring(0, nameBlock.IndexOf("<size=0>")).Trim();
}
public static void PostOnMainPage(MemberInfo plugin)
{
SceneManager.sceneLoaded += delegate(Scene scene, LoadSceneMode mode)
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Expected O, but got Unknown
try
{
if (((Scene)(ref scene)).name == "UI")
{
TextMeshProUGUI uITextByName = GetUITextByName("BETA");
if (Object.op_Implicit((Object)(object)uITextByName))
{
((TMP_Text)uITextByName).text = "INJECTED BUILD - unstable mods";
}
}
else
{
TextMeshProUGUI uITextByName2 = GetUITextByName("TextMeshPro Text");
if (Object.op_Implicit((Object)(object)uITextByName2))
{
BepInPlugin val = (BepInPlugin)Attribute.GetCustomAttribute(plugin, typeof(BepInPlugin));
if (((TMP_Text)uITextByName2).text.EndsWith("</size>"))
{
((TMP_Text)uITextByName2).text = ((TMP_Text)uITextByName2).text + "\n\nMods Currently Installed:\n";
}
TextMeshProUGUI val2 = uITextByName2;
((TMP_Text)val2).text = ((TMP_Text)val2).text + "\nLord Ashes' " + val.Name + " - " + val.Version;
}
}
}
catch (Exception ex)
{
Debug.Log((object)ex);
}
};
}
private static TextMeshProUGUI GetUITextByName(string name)
{
TextMeshProUGUI[] array = Object.FindObjectsOfType<TextMeshProUGUI>();
for (int i = 0; i < array.Length; i++)
{
if (((Object)array[i]).name == name)
{
return array[i];
}
}
return null;
}
}
public enum DiagnosticLevel
{
none,
error,
warning,
info,
debug,
ultra
}
public enum ShowDiceResult
{
none,
hidden,
normal
}
public enum ShowDiceResultStyle
{
text,
image
}
public class CustomDiceInfo
{
public string dicePack { get; set; } = "basedice";
public string diceBase { get; set; } = "d4";
public string diceCollection { get; set; } = "Lava";
public string diceTexture { get; set; } = "D4_Lava.png";
public int diceModifier { get; set; } = 1;
public Dictionary<string, string> sides { get; set; } = new Dictionary<string, string>();
public Dictionary<string, string> images { get; set; } = new Dictionary<string, string>();
public Dictionary<string, Texture2D> textures { get; set; } = new Dictionary<string, Texture2D>();
}
private static Texture2D baseTexture = Image.LoadTexture("org.lordashes.plugins.customdicepack.baseIconTexture.png", (CacheType)999);
private Dictionary<string, SimpleDiceResult> rollResults = new Dictionary<string, SimpleDiceResult>();
private static GuiMenu customDiceTrayMenu = null;
private static string customDiceTrayMenuNode = "";
public const string Name = "Custom Dice Pack Plug-In";
public const string Guid = "org.lordashes.plugins.customdicepack";
public const string Version = "3.0.0.0";
private static BaseUnityPlugin _self;
private static object padlock = new object();
public static string activeCustomization = "";
public static uint expecting = 0u;
public static bool cooldownActive = false;
public static float cooldownTime = 0.1f;
private static Dictionary<string, Texture2D> defaultIcons = new Dictionary<string, Texture2D>();
public static Dictionary<string, CustomDiceInfo> customDice = new Dictionary<string, CustomDiceInfo>();
private static ConfigEntry<DiagnosticLevel> diagnostics { get; set; }
private static ConfigEntry<MenuStyle> diceTrayStyle { get; set; }
public static ConfigEntry<ShowDiceResult> showDiceRolls { get; set; }
public static ConfigEntry<ShowDiceResult> showDiceSummary { get; set; }
public static ConfigEntry<ShowDiceResultStyle> showDiceRollsStyle { get; set; }
public static ConfigEntry<float> checkInterval { get; set; }
public static ConfigEntry<float> delayChatCustomization { get; set; }
public static ConfigEntry<float> delayDisplayCustomization { get; set; }
public static ConfigEntry<KeyboardShortcut> triggerOpenCustomDiceTray { get; set; }
public static void CustomizeChat()
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat");
}
bool flag = true;
GameObject[] array = (from g in Object.FindObjectsOfType<GameObject>()
where ((Object)g).name.Contains("ChatSection(Clone)")
select g).ToArray();
foreach (GameObject val in array)
{
flag = true;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Chat Customization: Found ChatSection(Clone) With " + val.transform.childCount + " Sections"));
}
foreach (Transform item in ExtensionMethods.Children(val.transform))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Process Chat Section With " + ((Component)item).gameObject.GetComponentsInChildren<TextMeshProUGUI>().Count() + " Text Parts"));
}
if (((Component)item).gameObject.GetComponentsInChildren<TextMeshProUGUI>().Count() <= 0)
{
continue;
}
List<VisualPart> list = new List<VisualPart>();
Transform parent = ((Component)((Component)item).gameObject.GetComponentsInChildren<TextMeshProUGUI>().ElementAt(1)).gameObject.transform.parent;
for (int j = 0; j < ExtensionMethods.Children(parent).Count(); j++)
{
if (((Object)parent.GetChild(j)).name.Contains("Header"))
{
list.Add(new VisualPart
{
type = "Header",
reference = ((Component)parent.GetChild(j)).gameObject
});
}
else if (((Object)parent.GetChild(j)).name.Contains("Rolled"))
{
list.Add(new VisualPart
{
type = "Header",
reference = ((Component)parent.GetChild(j)).gameObject
});
}
else if (((Object)parent.GetChild(j)).name.Contains("SingleDiceResult"))
{
list.Add(new VisualPart
{
type = "Result",
reference = ((Component)parent.GetChild(j)).gameObject
});
}
else if (((Object)parent.GetChild(j)).name.Contains("Operator"))
{
list.Add(new VisualPart
{
type = "Operator",
reference = ((Component)parent.GetChild(j)).gameObject
});
}
else if (((Object)parent.GetChild(j)).name.Contains("Total"))
{
list.Add(new VisualPart
{
type = "Total",
reference = ((Component)parent.GetChild(j)).gameObject
});
}
}
bool flag2 = false;
for (int num = list.Count() - 1; num >= 0; num--)
{
if (list[num].type == "Total")
{
if (!flag2)
{
flag2 = true;
}
else
{
list[num].type = "Mod";
flag2 = false;
}
}
}
CustomizeChatSection(list);
}
}
if (!flag)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Chat Section Not Fouind");
}
}
public static void CustomizeChatSection(List<VisualPart> parts)
{
string text = "";
bool flag = false;
bool flag2 = false;
TextMeshProUGUI componentInChildren = parts.ElementAt(0).reference.GetComponentInChildren<TextMeshProUGUI>();
if ((Object)(object)componentInChildren != (Object)null && ((TMP_Text)componentInChildren).text != null && ((TMP_Text)componentInChildren).text.Contains("<size=0>"))
{
text = ((TMP_Text)componentInChildren).text.Substring(((TMP_Text)componentInChildren).text.IndexOf("<size=0>") + "<size=0>".Length);
}
if (text.StartsWith("="))
{
flag = true;
text = text.Substring(1);
}
int result = 0;
try
{
if (text == "")
{
flag2 = true;
}
else if (customDice.ContainsKey(text) && customDice[text].sides.Count > 0 && int.TryParse(customDice[text].sides.ElementAt(0).Value, out result))
{
flag2 = true;
}
}
catch
{
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Customization=" + text + ", isSummary=" + flag + ", isNumeric=" + flag2 + " (Test with " + ((text != "" && customDice.ContainsKey(text)) ? customDice[text].sides.ElementAt(0).Value : "N/A") + ")"));
}
switch (((text != "") ? "C" : "-") + (flag ? "S" : "-") + (flag2 ? "N" : "-"))
{
case "CSN":
case "CS-":
case "-SN":
case "-S-":
CustomizeChatSectionCustomSummary(text, parts);
break;
case "C-N":
case "--N":
CustomizeChatSectionCustomNonSummaryNumeric(text, parts);
break;
case "C--":
case "---":
CustomizeChatSectionCustomNonSummaryNonNumeric(text, parts);
break;
}
}
private static void CustomizeChatSectionCustomSummary(string customization, List<VisualPart> parts)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Customizing Summary Section (Customization = '" + customization + "')"));
}
string text = "";
foreach (VisualPart part in parts)
{
TextMeshProUGUI componentInChildren = part.reference.GetComponentInChildren<TextMeshProUGUI>();
switch (part.type)
{
case "Header":
if (((TMP_Text)componentInChildren).text != null && ((TMP_Text)componentInChildren).text.Contains("\u00a0"))
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Previously Completed. Skip.");
return;
}
if (((TMP_Text)componentInChildren).text.StartsWith("Rolled "))
{
((TMP_Text)componentInChildren).text = ((TMP_Text)componentInChildren).text.Substring("Rolled ".Length);
}
if (((TMP_Text)componentInChildren).text.StartsWith("And "))
{
((TMP_Text)componentInChildren).text = ((TMP_Text)componentInChildren).text.Substring("And ".Length);
}
text = ((TMP_Text)componentInChildren).text;
if (text.Contains("<size=0>"))
{
text = text.Substring(0, text.IndexOf("<size=0>"));
}
((TMP_Text)componentInChildren).text = "\u00a0";
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Header Element (Section Name = '" + text + "', Customization = '" + customization + "')"));
}
break;
case "Result":
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element (Customization = '" + customization + "')"));
}
RawImage componentInChildren2 = part.reference.GetComponentInChildren<RawImage>();
if ((Object)(object)componentInChildren2 != (Object)null && customDice.ContainsKey(customization) && customDice[customization].sides.ContainsKey(((TMP_Text)componentInChildren).text) && customDice[customization].textures.ContainsKey(customDice[customization].sides[((TMP_Text)componentInChildren).text]))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Side Based Icon '" + customDice[customization].sides[((TMP_Text)componentInChildren).text] + "' (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures[customDice[customization].sides[((TMP_Text)componentInChildren).text]];
}
else if ((Object)(object)componentInChildren2 != (Object)null && customDice.ContainsKey(customization) && customDice[customization].textures.ContainsKey("base"))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Base Icon (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures["base"];
}
else if ((Object)(object)componentInChildren2 != (Object)null)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Default Icon (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)baseTexture;
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = "";
}
break;
}
case "Operator":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Operator Element: Clear Text");
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = "";
}
break;
case "Mod":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Operator Element: Keep Text");
}
break;
case "Total":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Operator Element: Change To '" + text + "'"));
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = text;
}
break;
}
}
}
private static void CustomizeChatSectionCustomNonSummaryNumeric(string customization, List<VisualPart> parts)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Customizing Numeric NonSummary Section (Customization = '" + customization + "')"));
}
string text = "";
int num = 0;
foreach (VisualPart part in parts)
{
TextMeshProUGUI componentInChildren = part.reference.GetComponentInChildren<TextMeshProUGUI>();
switch (part.type)
{
case "Header":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Header Element: No Action");
}
if (((TMP_Text)componentInChildren).text != null && ((TMP_Text)componentInChildren).text.Contains("\u00a0"))
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Previously Completed. Skip.");
return;
}
if (((TMP_Text)componentInChildren).text != null && ((TMP_Text)componentInChildren).text.Contains("<size=0>"))
{
((TMP_Text)componentInChildren).text = ((TMP_Text)componentInChildren).text.Substring(0, ((TMP_Text)componentInChildren).text.IndexOf("<size=0>")) + "\u00a0";
}
if (((TMP_Text)componentInChildren).text.StartsWith("Rolled "))
{
((TMP_Text)componentInChildren).text = ((TMP_Text)componentInChildren).text.Substring("Rolled ".Length);
}
break;
case "Result":
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element (Customization = '" + customization + "')"));
}
RawImage componentInChildren2 = part.reference.GetComponentInChildren<RawImage>();
if ((Object)(object)componentInChildren2 != (Object)null && customDice.ContainsKey(customization) && customDice[customization].sides.ContainsKey(((TMP_Text)componentInChildren).text) && customDice[customization].textures.ContainsKey(customDice[customization].sides[((TMP_Text)componentInChildren).text]))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Side Based Icon '" + customDice[customization].sides[((TMP_Text)componentInChildren).text] + "' (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures[customDice[customization].sides[((TMP_Text)componentInChildren).text]];
}
else if ((Object)(object)componentInChildren2 != (Object)null && customDice.ContainsKey(customization) && customDice[customization].textures.ContainsKey("base"))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Base Icon (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures["base"];
}
else if ((Object)(object)componentInChildren2 != (Object)null && diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Keeping Core Die Icon (Customization = '" + customization + "')"));
}
if (customDice.ContainsKey(customization) && customDice[customization].sides.ContainsKey(((TMP_Text)componentInChildren).text))
{
((TMP_Text)componentInChildren).text = customDice[customization].sides[((TMP_Text)componentInChildren).text];
}
int result = 0;
int.TryParse(((TMP_Text)componentInChildren).text, out result);
num += result;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Modifying Total By " + result + " To " + num + " (Customization = '" + customization + "')"));
}
break;
}
case "Operator":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Operator Element: Clear Text (Customization = '" + customization + "')"));
}
if (((TMP_Text)componentInChildren).text != null)
{
text = ((TMP_Text)componentInChildren).text;
}
break;
case "Mod":
{
int result2 = 0;
int.TryParse(((TMP_Text)componentInChildren).text, out result2);
if (text == "-")
{
result2 *= -1;
}
num += result2;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Modifying Total By Mod " + result2 + " To " + num + " (Customization = '" + customization + "')"));
}
break;
}
case "Total":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Total Element: Setting Total To " + num + " (Customization = '" + customization + "')"));
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = num.ToString();
}
break;
}
}
}
private static void CustomizeChatSectionCustomNonSummaryNonNumeric(string customization, List<VisualPart> parts)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Customizing NonNumeric NonSummary Section (Customization = '" + customization + "')"));
}
foreach (VisualPart part in parts)
{
TextMeshProUGUI componentInChildren = part.reference.GetComponentInChildren<TextMeshProUGUI>();
switch (part.type)
{
case "Header":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Header Element: No Action");
}
if (((TMP_Text)componentInChildren).text != null && ((TMP_Text)componentInChildren).text.Contains("\u00a0"))
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Chat: Previously Completed. Skip.");
return;
}
if (((TMP_Text)componentInChildren).text != null && ((TMP_Text)componentInChildren).text.Contains("<size=0>"))
{
((TMP_Text)componentInChildren).text = ((TMP_Text)componentInChildren).text.Substring(0, ((TMP_Text)componentInChildren).text.IndexOf("<size=0>")) + "\u00a0";
}
break;
case "Result":
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element (Customization = '" + customization + "')"));
}
RawImage componentInChildren2 = part.reference.GetComponentInChildren<RawImage>();
if ((Object)(object)componentInChildren2 != (Object)null && customDice.ContainsKey(customization) && customDice[customization].sides.ContainsKey(((TMP_Text)componentInChildren).text) && customDice[customization].textures.ContainsKey(customDice[customization].sides[((TMP_Text)componentInChildren).text]))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Side Based Icon '" + customDice[customization].sides[((TMP_Text)componentInChildren).text] + "' (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures[customDice[customization].sides[((TMP_Text)componentInChildren).text]];
}
else if ((Object)(object)componentInChildren2 != (Object)null && customDice.ContainsKey(customization) && customDice[customization].textures.ContainsKey("base"))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Using Base Icon (Customization = '" + customization + "')"));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures["base"];
}
else if ((Object)(object)componentInChildren2 != (Object)null && diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Result Element: Keeping Core Die Icon (Customization = '" + customization + "')"));
}
break;
}
case "Operator":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Operator Element: Clear Text (Customization = '" + customization + "')"));
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = "";
}
break;
case "Mod":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Mod Element: Clear Text (Customization = '" + customization + "')"));
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = "";
}
break;
case "Total":
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Chat: Total Element: Clear Text (Customization = '" + customization + "')"));
}
if (((TMP_Text)componentInChildren).text != null)
{
((TMP_Text)componentInChildren).text = "";
}
break;
}
}
}
public static void CustomizeDisplay(string customization)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display (Customization='" + customization + "')"));
}
if (customization == "" || !customDice.ContainsKey(customization))
{
return;
}
try
{
Transform val = null;
bool flag = false;
foreach (Transform item in ExtensionMethods.Children((from g in Object.FindObjectsOfType<GameObject>()
where ((Object)g).name == "Roll"
select g).ElementAt(0).transform))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Found '" + ((Object)item).name + "' (Active: " + ((Component)item).gameObject.activeSelf + ")"));
}
if (((Component)item).gameObject.activeSelf)
{
val = item;
}
if (((Component)item).gameObject.activeSelf && ((Object)item).name.Contains("Multi"))
{
flag = true;
}
}
if (flag)
{
if ((from g in Object.FindObjectsOfType<GameObject>()
where ((Object)g).name == "Root"
select g).Count() > 0)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Setting Multi Parent Via Root");
}
val = (from g in Object.FindObjectsOfType<GameObject>()
where ((Object)g).name == "Root"
select g).ElementAt(0).transform;
}
else
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Setting Multi Parent Via Parent Of Text");
}
val = ((Component)((Component)val).GetComponentInChildren<TextMeshProUGUI>()).gameObject.transform.parent;
}
}
bool flag2 = true;
if ((Object)(object)val != (Object)null && customDice[customization].sides.Count() > 0)
{
int result = 0;
if (!int.TryParse(customDice[customization].sides.ElementAt(0).Value, out result))
{
flag2 = false;
}
}
int num = 0;
string text = "";
foreach (Transform item2 in ExtensionMethods.Children(val))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Found '" + ((Object)item2).name + "' (Customization='" + customization + "', IsNumeric='" + flag2 + "', IsMulti='" + flag + "')"));
}
TextMeshProUGUI componentInChildren = ((Component)item2).GetComponentInChildren<TextMeshProUGUI>();
if (((Object)item2).name.Contains("SingleDiceResult"))
{
if (flag2)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Result: Numeric Result Found.");
}
if (customDice[customization].sides.ContainsKey(((TMP_Text)componentInChildren).text))
{
((TMP_Text)componentInChildren).text = customDice[customization].sides[((TMP_Text)componentInChildren).text];
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Result: Updating Numeric Value To " + ((TMP_Text)componentInChildren).text));
}
}
num += int.Parse(((TMP_Text)componentInChildren).text);
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Result: Running Total " + num));
}
continue;
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Result: Non-Numeric Result Found.");
}
RawImage componentInChildren2 = ((Component)item2).GetComponentInChildren<RawImage>();
if (customDice[customization].sides.ContainsKey(((TMP_Text)componentInChildren).text) && customDice[customization].textures.ContainsKey(customDice[customization].sides[((TMP_Text)componentInChildren).text]))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Result: Using Side Based Image Of " + customDice[customization].sides[((TMP_Text)componentInChildren).text]));
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures[customDice[customization].sides[((TMP_Text)componentInChildren).text]];
}
else if (customDice[customization].textures.ContainsKey("base"))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Result: Using Based Image");
}
componentInChildren2.texture = (Texture)(object)customDice[customization].textures["base"];
}
else
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Result: Using Default Image");
}
componentInChildren2.texture = (Texture)(object)baseTexture;
}
}
else if (((Object)item2).name.Contains("Operator"))
{
if (flag2)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Operator: Numeric Result Found.");
}
if (((TMP_Text)componentInChildren).text == "+" || ((TMP_Text)componentInChildren).text == "+" || ((TMP_Text)componentInChildren).text == "=")
{
text = ((TMP_Text)componentInChildren).text;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Operator: Storing Operation " + text));
}
continue;
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customize Display: Operator: Processing " + text + ((TMP_Text)componentInChildren).text));
}
if (text == "+")
{
num += int.Parse(((TMP_Text)componentInChildren).text);
}
if (text == "-")
{
num -= int.Parse(((TMP_Text)componentInChildren).text);
}
}
else
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Operator: Non-Numeric Result Found.");
}
((TMP_Text)componentInChildren).text = "";
}
}
else
{
if (!((Object)item2).name.Contains("Total"))
{
continue;
}
if (flag2)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Total: Numeric Result Found.");
}
((TMP_Text)componentInChildren).text = num.ToString();
}
else
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Customize Display: Total: Non-Numeric Result Found.");
}
((TMP_Text)componentInChildren).text = "";
}
}
}
}
catch (Exception ex)
{
if (diagnostics.Value >= DiagnosticLevel.error)
{
Debug.LogWarning((object)("Custom Dice Pack Plug-In: Unable To Get Display Result Reference. (" + ex.Message + ")"));
}
}
}
private void rollResultsHandler(string evt)
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Event: " + evt));
}
evt = evt.Substring(evt.IndexOf("\"payload\":") + "\"payload\":".Length);
string text = "";
string text2 = "+";
string text3 = "0";
string text4 = "";
if (evt.IndexOf("\"name\":\"") > -1)
{
text = evt.Substring(evt.IndexOf("\"name\":\"") + "\"name\":\"".Length).Trim();
text = text.Substring(0, text.IndexOf("\""));
if (text.IndexOf("<size=0>") > -1)
{
text4 = text.Substring(text.IndexOf("<size=0>") + "<size=0>".Length);
text = text.Substring(0, text.IndexOf("<size=0>"));
}
else
{
text4 = "";
}
}
if (evt.IndexOf("\"operator\":\"") > -1)
{
text2 = evt.Substring(evt.IndexOf("\"operator\":\"") + "\"operator\":\"".Length).Trim();
text2 = text2.Substring(0, text2.IndexOf("\""));
if (evt.IndexOf("\"value\":") > -1)
{
text3 = evt.Substring(evt.IndexOf("\"value\":") + "\"value\":".Length).Trim();
text3 = text2 + text3.Substring(0, text3.IndexOf("}"));
}
else
{
text3 = "+0";
}
}
string text5 = evt.Substring(evt.IndexOf("\"results\":") + "\"results\":".Length);
text5 = text5.Substring(0, text5.IndexOf("}")).Replace("[", "").Replace("]", "")
.Trim();
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Name = '" + text + "'"));
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Mod = '" + text3 + "'"));
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Customization = '" + text4 + "'"));
}
if (text.Trim() == "")
{
text = "Roll";
}
if (text3.Trim() == "+" || text3.Trim() == "-")
{
text3 = "+0";
}
int num = 0;
string[] array = text5.Split(new char[1] { ',' });
foreach (string text6 in array)
{
num++;
if (text4 != "")
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Processing Custom Die Property List '" + customDice[text4].sides[text6] + "'"));
}
string[] array2 = customDice[text4].sides[text6].Split(new char[1] { ',' });
foreach (string text7 in array2)
{
int result = 1;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Checking If '" + text7 + "' Is Numeric"));
}
if (int.TryParse(text7, out result))
{
if (!rollResults.ContainsKey(text))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Custom Die Side Is Numeric. Setting '" + text + "' To " + result));
}
rollResults.Add(text, new SimpleDiceResult
{
count = result,
icon = 0,
customization = text4
});
}
else
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Custom Die Side Is Numeric. Increasing '" + text + "' By " + result));
}
rollResults[text].count += result;
rollResults[text].customization = text4;
}
if (num == 1)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Custom Die Side Is Numeric. Adding Modifier " + text3));
}
rollResults[text].count += int.Parse(text3);
}
continue;
}
if (!rollResults.ContainsKey(text7))
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Custom Die Side Is Not Numeric. Setting '" + text7 + "' To " + (1 + int.Parse(text3))));
}
rollResults.Add(text7, new SimpleDiceResult
{
count = 1 + int.Parse(text3),
customization = text4
});
foreach (KeyValuePair<string, string> side in customDice[text4].sides)
{
if (side.Value == text7)
{
rollResults[text7].icon = int.Parse(side.Key);
break;
}
}
continue;
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Custom Die Side Is Not Numeric. Increasing '" + text7 + "' By " + (1 + int.Parse(text3))));
}
rollResults[text7].count += 1 + int.Parse(text3);
rollResults[text7].customization = text4;
if (rollResults[text7].icon != 0)
{
continue;
}
foreach (KeyValuePair<string, string> side2 in customDice[text4].sides)
{
if (side2.Value == text7)
{
rollResults[text7].icon = int.Parse(side2.Key);
break;
}
}
}
continue;
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Processing Regular Die Contribution To '" + text + "'"));
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Regular Die Side Is Numeric. Increasing '" + text + "' By " + int.Parse(text6)));
}
if (!rollResults.ContainsKey(text))
{
rollResults.Add(text, new SimpleDiceResult
{
count = int.Parse(text6),
icon = 0,
customization = text4
});
}
else
{
rollResults[text].count += int.Parse(text6);
}
if (num == 1)
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Regular Die Side Is Numeric. Adding Modifier " + text3));
}
rollResults[text].count += int.Parse(text3);
}
}
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Results Stack: " + JsonConvert.SerializeObject((object)rollResults)));
}
if (!cooldownActive)
{
((MonoBehaviour)_self).StartCoroutine(CoolDown(cooldownTime));
}
}
private IEnumerator CoolDown(float cooldownTime)
{
cooldownActive = true;
yield return (object)new WaitForSeconds(cooldownTime);
string js3 = "TS.extra.sendSimpleDiceResult([";
foreach (KeyValuePair<string, SimpleDiceResult> entry in rollResults)
{
js3 = js3 + "{ 'name': '" + entry.Key + "<size=0>=" + entry.Value.customization + "', 'roll': '1D20+" + entry.Value.count + "', 'results': [" + entry.Value.icon + "] },";
}
js3 = js3.Substring(0, js3.Length - 1);
js3 += "],false,false);";
cooldownActive = false;
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Generating Summary Command: " + js3));
}
SymbioteApiPlugin.Symbiote_API(js3);
rollResults.Clear();
}
private void OnGUI()
{
if (customDiceTrayMenu != null)
{
customDiceTrayMenuNode = customDiceTrayMenu.GetCurrentNode().name;
customDiceTrayMenu.Draw();
}
}
private static void OpenCustomDiceTray()
{
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
//IL_032e: Unknown result type (might be due to invalid IL or missing references)
//IL_0333: Unknown result type (might be due to invalid IL or missing references)
//IL_0341: Unknown result type (might be due to invalid IL or missing references)
//IL_0342: Unknown result type (might be due to invalid IL or missing references)
//IL_034d: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0492: Unknown result type (might be due to invalid IL or missing references)
//IL_049c: Expected O, but got Unknown
//IL_039d: Unknown result type (might be due to invalid IL or missing references)
//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
//IL_03d3: Expected O, but got Unknown
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Expected O, but got Unknown
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Expected O, but got Unknown
//IL_0200: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Unknown result type (might be due to invalid IL or missing references)
//IL_023b: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_0276: Expected O, but got Unknown
//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02ee: Expected O, but got Unknown
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Building Custom Dice Tray");
}
Dictionary<string, MenuNode> dictionary = new Dictionary<string, MenuNode>();
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Building Root Node");
}
dictionary.Add("Root", null);
MenuNode val = new MenuNode();
foreach (KeyValuePair<string, CustomDiceInfo> customDie in customDice)
{
string text = ((customDie.Value.diceCollection != "") ? customDie.Value.diceCollection : "Default");
if (!dictionary.ContainsKey(text))
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Adding Collection Link '" + text + "'"));
}
val.AddLink(new MenuLink
{
title = text,
color = Color.white,
icon = (customDie.Value.images.ContainsKey("collection") ? Image.LoadTexture(customDie.Value.images["collection"], (CacheType)999) : Image.LoadTexture("CustomDiceCollection.png", (CacheType)999)),
gmOnly = false,
link = text
});
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Setting Menu Style");
}
val.style = diceTrayStyle.Value;
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Creating New Menu Node");
}
dictionary.Add(text, new MenuNode());
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Setting Menu Node Tray Style");
}
dictionary[text].style = diceTrayStyle.Value;
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Creating Menu Selection For Cancel");
}
dictionary[text].AddSelection(new MenuSelection
{
title = "Cancel",
icon = Image.LoadTexture("CustomDiceCancel.png", (CacheType)999),
gmOnly = false,
selection = "Cancel"
});
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Creating Menu Selection For Back");
}
dictionary[text].AddLink(new MenuLink
{
title = "Back",
color = Color.white,
icon = Image.LoadTexture("CustomDiceBack.png", (CacheType)999),
gmOnly = false,
link = "Root"
});
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Adding Dice Collection '" + text + "' Die " + customDie.Key));
}
dictionary[text].AddSelection(new MenuSelection
{
title = customDie.Key,
color = Color.white,
icon = (customDie.Value.images.ContainsKey("icon") ? Image.LoadTexture(customDie.Value.images["icon"], (CacheType)999) : Image.LoadTexture("CustomDie.png", (CacheType)999)),
gmOnly = false,
selection = "1" + customDie.Value.diceBase + "#" + customDie.Key
});
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Setting Root Node");
}
dictionary["Root"] = val;
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Creating Root Node Cancel");
}
dictionary["Root"].AddSelection("Cancel", "Cancel", Image.LoadTexture("CustomDiceCancel.png", (CacheType)999));
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Creating GUI Menu");
}
customDiceTrayMenu = new GuiMenu();
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Addding Menu Nodes To GUI Menu");
}
foreach (KeyValuePair<string, MenuNode> item in dictionary)
{
IMenuItem[] items = item.Value.GetItems();
foreach (IMenuItem val2 in items)
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Node '" + item.Key + "' has '" + val2.title));
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Node '" + item.Key + "' is '" + JsonConvert.SerializeObject((object)item.Value)));
}
}
item.Value.name = item.Key;
customDiceTrayMenu.AddNode(item.Value);
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Opening Custom Dice Tray");
}
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Adding Menu Callbacks");
}
customDiceTrayMenu.Open("Root", (Action<string>)delegate(string selection)
{
if (selection == "Cancel")
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Closing Custom Dice Tray");
}
customDiceTrayMenu.Close();
customDiceTrayMenu = null;
}
else
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Spawning Selection " + selection));
}
if (Input.GetKey((KeyCode)304))
{
SystemMessage.AskForTextInput("Custom Dice", "How Many Dice?", "OK", (Action<string>)delegate(string s)
{
Process process2 = new Process();
process2.StartInfo = new ProcessStartInfo
{
FileName = "talespire://dice/" + s + selection.Substring(1),
UseShellExecute = true,
CreateNoWindow = true
};
process2.Start();
}, (Action)null, "Cancel", (Action)null, "001");
}
else
{
Process process = new Process();
process.StartInfo = new ProcessStartInfo
{
FileName = "talespire://dice/" + selection,
UseShellExecute = true,
CreateNoWindow = true
};
process.Start();
}
customDiceTrayMenu.Open(customDiceTrayMenuNode);
}
});
}
private void Awake()
{
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0359: Unknown result type (might be due to invalid IL or missing references)
//IL_035f: Expected O, but got Unknown
_self = (BaseUnityPlugin)(object)this;
diagnostics = ((BaseUnityPlugin)this).Config.Bind<DiagnosticLevel>("Settings", "Include Diagnostics In Logs", DiagnosticLevel.info, (ConfigDescription)null);
Debug.Log((object)("Custom Dice Pack Plug-In: " + ((object)this).GetType().AssemblyQualifiedName + " Active. (Diagnostics=" + diagnostics.Value.ToString() + ")"));
triggerOpenCustomDiceTray = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Hotkeys", "Open Custom Dice Menu", new KeyboardShortcut((KeyCode)292, Array.Empty<KeyCode>()), (ConfigDescription)null);
diceTrayStyle = ((BaseUnityPlugin)this).Config.Bind<MenuStyle>("Settings", "Dice Tray Style", (MenuStyle)1, (ConfigDescription)null);
showDiceRolls = ((BaseUnityPlugin)this).Config.Bind<ShowDiceResult>("Settings", "Show Dice Rolls", ShowDiceResult.hidden, (ConfigDescription)null);
showDiceSummary = ((BaseUnityPlugin)this).Config.Bind<ShowDiceResult>("Settings", "Show Dice Summary", ShowDiceResult.normal, (ConfigDescription)null);
showDiceRollsStyle = ((BaseUnityPlugin)this).Config.Bind<ShowDiceResultStyle>("Settings", "Show Dice Rolls Style", ShowDiceResultStyle.text, (ConfigDescription)null);
checkInterval = ((BaseUnityPlugin)this).Config.Bind<float>("Settings", "Interval For Detecting Chat Changes", 3f, (ConfigDescription)null);
delayChatCustomization = ((BaseUnityPlugin)this).Config.Bind<float>("Tweaks", "Delay For Chat Customiztion", 0.25f, (ConfigDescription)null);
delayDisplayCustomization = ((BaseUnityPlugin)this).Config.Bind<float>("Tweaks", "Delay For Display Customization", 0.25f, (ConfigDescription)null);
foreach (string item in from s in File.Find("org.lordashes.plugins.customdicepack", (CacheType)999)
where s.Contains("org.lordashes.plugins.customdicepack/")
select s)
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Loading Default Icon '" + Path.GetFileNameWithoutExtension(item) + "' From '" + item + "'"));
}
defaultIcons.Add(Path.GetFileNameWithoutExtension(item), Image.LoadTexture(item, (CacheType)999));
}
customDice = JsonConvert.DeserializeObject<Dictionary<string, CustomDiceInfo>>(File.ReadAllText("CustomDicePacks.json", (CacheType)999));
foreach (KeyValuePair<string, CustomDiceInfo> customDie in customDice)
{
foreach (KeyValuePair<string, string> image in customDie.Value.images)
{
if (!image.Key.StartsWith("tex"))
{
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Loading Custon Image Texture '" + image.Value.ToString() + "'"));
}
customDie.Value.textures.Add(image.Key, Image.LoadTexture(image.Value.ToString(), (CacheType)999));
}
}
}
Harmony val = new Harmony("org.lordashes.plugins.customdicepack");
val.PatchAll();
SymbioteApiPlugin.Initialized((Action)delegate
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Symbiote API Initialized");
}
SymbioteApiPlugin.Subscribe(new List<string> { "rollResults" }, (Action<string>)rollResultsHandler);
});
if (Type.GetType("LordAshes.ProximityRollerPlugin, ProximityRollerPlugin") == null)
{
cooldownTime = 0.1f;
if (diagnostics.Value >= DiagnosticLevel.info)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Proximity Roller Plugin Not Detected. Setting cooldown to " + cooldownTime));
}
}
else
{
cooldownTime = 1.25f;
if (diagnostics.Value >= DiagnosticLevel.debug)
{
Debug.Log((object)("Custom Dice Pack Plug-In: Proximity Roller Plugin Detected. Setting cooldown to " + cooldownTime));
}
(from m in Type.GetType("LordAshes.ProximityRollerPlugin, ProximityRollerPlugin").GetRuntimeMethods()
where m.Name == "Summarize"
select m).ElementAt(0).Invoke(null, new object[1] { false });
}
((MonoBehaviour)_self).StartCoroutine(UpdateChatCustomization(checkInterval.Value));
Utility.PostOnMainPage(((object)this).GetType());
}
private void Update()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
if (Input.GetKey((KeyCode)304))
{
return;
}
KeyboardShortcut value = triggerOpenCustomDiceTray.Value;
if (((KeyboardShortcut)(ref value)).IsUp())
{
if (diagnostics.Value >= DiagnosticLevel.ultra)
{
Debug.Log((object)"Custom Dice Pack Plug-In: Opening Custom Dice Menu");
}
OpenCustomDiceTray();
}
}
private IEnumerator UpdateChatCustomization(float checkInterval)
{
while (true)
{
yield return (object)new WaitForSeconds(checkInterval);
if (Utility.isBoardLoaded())
{
CustomizeChat();
}
}
}
}