using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using Bounce.Unmanaged;
using CharacterRuler;
using DataModel;
using HarmonyLib;
using ModdingTales;
using RadialUI;
using Unity.Collections;
using Unity.Mathematics;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Character Ruler")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HolloFox")]
[assembly: AssemblyProduct("IDL")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e4deb5e-97f9-4901-bf67-6748a9c1229a")]
[assembly: AssemblyFileVersion("1.2.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.2.0.0")]
namespace CharacterRulerPlugin
{
[HarmonyPatch(typeof(CreatureManager), "OnOp", new Type[]
{
typeof(DropCreatureOp),
typeof(MessageInfo)
})]
public class CreatureManagerDropCreatureOpPatche
{
private static void Postfix(DropCreatureOp op, MessageInfo msgInfo)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
if (LocalClient.IsInGmMode)
{
CharacterRuler.CharacterRulerPlugin.MoveUpdate(op.CreatureId);
}
}
}
[HarmonyPatch(typeof(CreatureManager), "OnOp", new Type[]
{
typeof(DropCreaturesOp),
typeof(MessageInfo)
})]
public class CreatureManagerDropCreaturesOpPatche
{
private static void Postfix(DropCreaturesOp op, MessageInfo msgInfo)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
if (LocalClient.IsInGmMode)
{
CreatureGuid[] creatureIds = op.CreatureIds;
for (int i = 0; i < creatureIds.Length; i++)
{
CharacterRuler.CharacterRulerPlugin.MoveUpdate(creatureIds[i]);
}
}
}
}
}
namespace CharacterRuler
{
[BepInPlugin("org.hollofox.plugins.CharacterRulerPlugin", "Character Ruler Plugin", "1.2.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class CharacterRulerPlugin : BaseUnityPlugin
{
public const string PluginName = "Character Ruler Plugin";
public const string Guid = "org.hollofox.plugins.CharacterRulerPlugin";
public const string Version = "1.2.0.0";
internal static DictionaryList<Ruler, List<CreatureGuid>> Rulers = new DictionaryList<Ruler, List<CreatureGuid>>();
internal static DictionaryList<CreatureGuid, List<Ruler>> ActiveRulers = new DictionaryList<CreatureGuid, List<Ruler>>();
private void Awake()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: 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_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Expected O, but got Unknown
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
Debug.Log((object)"Character Ruler loaded");
ModdingUtils.AddPluginToMenuList((BaseUnityPlugin)(object)this);
new Harmony("org.hollofox.plugins.CharacterRulerPlugin").PatchAll();
RadialUIPlugin.AddCustomButtonAttacksSubmenu("org.hollofox.plugins.CharacterRulerPlugin.AddRuler", new ItemArgs
{
Title = "Measure Distance",
Action = CreateLineRuler,
CloseMenuOnActivate = true
}, (Func<NGuid, NGuid, bool>)NoRulerBetween);
RadialUIPlugin.AddCustomButtonAttacksSubmenu("org.hollofox.plugins.CharacterRulerPlugin.RemoveRuler", new ItemArgs
{
Title = "Remove Ruler",
Action = RemoveLineRuler,
CloseMenuOnActivate = true
}, (Func<NGuid, NGuid, bool>)HasRulerBetween);
}
private void RemoveLineRuler(MapMenuItem arg1, object arg2)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: 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_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: 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_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
_ = LocalClient.SelectedCreatureId;
CreatureGuid[] array = default(CreatureGuid[]);
if (LocalClient.HasLassoedCreatures)
{
LocalClient.TryGetLassoedCreatureIds(ref array);
}
else
{
array = (CreatureGuid[])(object)new CreatureGuid[1] { LocalClient.SelectedCreatureId };
}
CreatureGuid targetId = new CreatureGuid(RadialUIPlugin.GetLastRadialTargetCreature());
CreatureGuid[] array2 = array;
foreach (CreatureGuid val in array2)
{
Ruler[] array3 = ActiveRulers[val].Where((Ruler r) => ActiveRulers[targetId].Contains(r)).ToArray();
foreach (Ruler obj in array3)
{
RemoveRulerTracking(obj);
obj.Dispose();
}
}
}
private void CreateLineRuler(MapMenuItem arg1, object arg2)
{
//IL_0000: 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)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: 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_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
_ = LocalClient.SelectedCreatureId;
CreaturePerceptionManager.OnLineOfSightUpdated -= LOSUpdate;
CreaturePerceptionManager.OnLineOfSightUpdated += LOSUpdate;
CreatureGuid[] array = default(CreatureGuid[]);
if (LocalClient.HasLassoedCreatures)
{
LocalClient.TryGetLassoedCreatureIds(ref array);
}
else
{
array = (CreatureGuid[])(object)new CreatureGuid[1] { LocalClient.SelectedCreatureId };
}
CreatureBoardAsset val = default(CreatureBoardAsset);
CreaturePresenter.TryGetAsset(new CreatureGuid(RadialUIPlugin.GetLastRadialTargetCreature()), ref val);
CreatureGuid val2 = default(CreatureGuid);
((CreatureGuid)(ref val2))..ctor(RadialUIPlugin.GetLastRadialTargetCreature());
CreatureGuid[] array2 = array;
CreatureBoardAsset val4 = default(CreatureBoardAsset);
NativeArray<float3> val5 = default(NativeArray<float3>);
foreach (CreatureGuid val3 in array2)
{
CreaturePresenter.TryGetAsset(val3, ref val4);
float3[] array3 = (float3[])(object)new float3[2] { val4.LastPlacedPosition, val.LastPlacedPosition };
val5..ctor(array3, (Allocator)3);
Ruler val6 = Ruler.Spawn("Rulers/PhotonRuler", 1, val5.AsReadOnly());
val5.Dispose();
if (ActiveRulers.ContainsKey(val3))
{
ActiveRulers[val3].Add(val6);
}
else
{
ActiveRulers[val3] = new List<Ruler> { val6 };
}
if (ActiveRulers.ContainsKey(val2))
{
ActiveRulers[val2].Add(val6);
}
else
{
ActiveRulers[val2] = new List<Ruler> { val6 };
}
Rulers[val6] = new List<CreatureGuid> { val2, val3 };
}
}
internal static bool NoRulerBetween(NGuid first, NGuid second)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return !HasRulerBetween(first, second);
}
internal static bool HasRulerBetween(NGuid first, NGuid second)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
CreatureGuid val = default(CreatureGuid);
((CreatureGuid)(ref val))..ctor(first);
CreatureGuid item = default(CreatureGuid);
((CreatureGuid)(ref item))..ctor(second);
List<Ruler> list = default(List<Ruler>);
if (!ActiveRulers.TryGetValue(val, ref list))
{
return false;
}
List<CreatureGuid> list2 = default(List<CreatureGuid>);
foreach (Ruler item2 in list)
{
if (Rulers.TryGetValue(item2, ref list2) && list2.Contains(item))
{
return true;
}
}
return false;
}
internal static void MoveUpdate(CreatureGuid id)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
List<Ruler> list = default(List<Ruler>);
if (!ActiveRulers.TryGetValue(id, ref list))
{
return;
}
Dictionary<Ruler, List<CreatureGuid>> dictionary = new Dictionary<Ruler, List<CreatureGuid>>();
foreach (Ruler item in list)
{
List<CreatureGuid> value = Rulers[item];
dictionary.Add(item, value);
}
UpdateRulers(id, dictionary);
}
internal static void LOSUpdate(CreatureGuid id, LineOfSightResult result)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
List<Ruler> list = default(List<Ruler>);
if (LocalClient.IsInGmMode || !ActiveRulers.TryGetValue(id, ref list))
{
return;
}
HashSet<Ruler> hashSet = new HashSet<Ruler>();
Dictionary<Ruler, List<CreatureGuid>> dictionary = new Dictionary<Ruler, List<CreatureGuid>>();
CreatureBoardAsset val = default(CreatureBoardAsset);
foreach (Ruler item in list)
{
List<CreatureGuid> list2 = Rulers[item];
bool flag = false;
foreach (CreatureGuid item2 in list2)
{
if (!(item2 == id) && (!CreaturePresenter.TryGetAsset(item2, ref val) || !result.HasLineOfSightTo(val)))
{
flag = true;
break;
}
}
if (flag)
{
hashSet.Add(item);
}
else
{
dictionary.Add(item, list2);
}
}
foreach (Ruler item3 in hashSet)
{
RemoveRulerTracking(item3);
item3.Dispose();
}
UpdateRulers(id, dictionary);
}
internal static void UpdateRulers(CreatureGuid id, Dictionary<Ruler, List<CreatureGuid>> rulersToUpdate)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
NativeArray<float3> val = default(NativeArray<float3>);
List<Ruler> list = default(List<Ruler>);
foreach (KeyValuePair<Ruler, List<CreatureGuid>> item in rulersToUpdate)
{
Ruler key = item.Key;
List<CreatureGuid> value = item.Value;
Debug.Log((object)$"Updating ruler for {id} assets moved");
float3[] array = value.Select(delegate(CreatureGuid g)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
CreatureBoardAsset val3 = default(CreatureBoardAsset);
CreaturePresenter.TryGetAsset(g, ref val3);
return val3.LastPlacedPosition;
}).ToArray();
val..ctor(array, (Allocator)3);
Ruler val2 = Ruler.Spawn("Rulers/PhotonRuler", key.CurrentModeIndex, val.AsReadOnly());
val.Dispose();
RemoveRulerTracking(key);
Rulers[val2] = value;
foreach (CreatureGuid item2 in value)
{
if (!ActiveRulers.TryGetValue(item2, ref list))
{
list = new List<Ruler>();
ActiveRulers[item2] = list;
}
list.Add(val2);
}
key.Dispose();
}
}
private static void RemoveRulerTracking(Ruler ruler)
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: 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_0050: Unknown result type (might be due to invalid IL or missing references)
List<CreatureGuid> list = default(List<CreatureGuid>);
if (!Rulers.TryGetValue(ruler, ref list))
{
return;
}
Rulers.Remove(ruler);
List<Ruler> list2 = default(List<Ruler>);
foreach (CreatureGuid item in list)
{
if (ActiveRulers.TryGetValue(item, ref list2))
{
list2.Remove(ruler);
if (list2.Count == 0)
{
ActiveRulers.Remove(item);
}
}
}
}
}
}
namespace CharacterRuler.Properties
{
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class Resources
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (resourceMan == null)
{
resourceMan = new ResourceManager("CharacterRuler.Properties.Resources", typeof(Resources).Assembly);
}
return resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
internal Resources()
{
}
}
}