using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ExitGames.Client.Photon;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Omniscye.RepoDex;
using Photon.Pun;
using Photon.Realtime;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Omniscye")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a1f7578798bef3223b874192b5811a336e1f9a04")]
[assembly: AssemblyProduct("RepoDex")]
[assembly: AssemblyTitle("RepoDex")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Omniscye.RepoDex
{
[BepInPlugin("Omniscye.RepoDex", "RepoDex", "1.2.0")]
public class RepoDexPlugin : BaseUnityPlugin, IOnEventCallback
{
private struct CaptureEntry
{
public int Seq;
public string Kind;
public string Name;
public DateTime TimeUtc;
}
private const byte RepoDexEventCode = 187;
private readonly List<CaptureEntry> _entries = new List<CaptureEntry>();
private readonly HashSet<string> _seen = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private string _savePath = "";
private GameObject _canvasRoot;
private Canvas _canvas;
private GameObject _panelRoot;
private TMP_InputField _search;
private TMP_Dropdown _kindDropdown;
private RectTransform _contentRect;
private ScrollRect _scroll;
private bool _uiVisible;
private bool _active;
private GameObject _receiverGo;
private ConfigEntry<KeyCode> _toggleKey;
private ConfigEntry<Vector2> _uiPosition;
private ConfigEntry<float> _uiScale;
private readonly Color _bg = new Color(0.03f, 0.05f, 0.12f, 0.96f);
private readonly Color _text = new Color(0.98f, 0.97f, 1f, 1f);
private readonly Color _muted = new Color(0.75f, 0.8f, 0.92f, 1f);
private readonly Color _accentRed = new Color(0.75f, 0.1f, 0.2f, 1f);
private readonly Color _accentBlue = new Color(0.14f, 0.25f, 0.7f, 1f);
private readonly Color _rowDark = new Color(0.05f, 0.08f, 0.16f, 0.95f);
private readonly Color _rowLight = new Color(0.07f, 0.11f, 0.2f, 0.95f);
private CursorLockMode _prevLock;
private bool _prevVisible;
internal static RepoDexPlugin Instance { get; private set; }
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
internal static bool UIActive => (Object)(object)Instance != (Object)null && Instance._uiVisible;
private void Awake()
{
//IL_009a: 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_00fe: Expected O, but got Unknown
//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_0048: Expected O, but got Unknown
//IL_004d: Expected O, but got Unknown
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll();
_toggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("UI", "ToggleKey", (KeyCode)289, "Toggle RepoDex");
_uiPosition = ((BaseUnityPlugin)this).Config.Bind<Vector2>("UI", "Position", new Vector2(0f, 0f), (ConfigDescription)null);
_uiScale = ((BaseUnityPlugin)this).Config.Bind<float>("UI", "Scale", 1f, (ConfigDescription)null);
string text = Path.Combine(Paths.ConfigPath, "RepoDex");
Directory.CreateDirectory(text);
_savePath = Path.Combine(text, "repodex.dat");
GameObject val3 = new GameObject("__RepoDex_Runtime");
((Object)val3).hideFlags = (HideFlags)61;
Object.DontDestroyOnLoad((Object)(object)val3);
val3.AddComponent<RepoDexRuntime>();
LoadEntries();
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} loaded");
}
private void OnDestroy()
{
DeactivateRuntime();
SaveEntries();
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
private void Update()
{
//IL_0016: 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_003c: Invalid comparison between Unknown and I4
if (!_active)
{
return;
}
if (Input.GetKeyDown(_toggleKey.Value))
{
ToggleUI();
}
if (_uiVisible)
{
if ((int)Cursor.lockState > 0)
{
Cursor.lockState = (CursorLockMode)0;
}
if (!Cursor.visible)
{
Cursor.visible = true;
}
}
}
public void OnEvent(EventData photonEvent)
{
if (!_active || photonEvent.Code != 187)
{
return;
}
try
{
if (!(photonEvent.CustomData is object[] array) || array.Length < 2)
{
return;
}
string text = ((array[0] as string) ?? string.Empty).Trim();
string text2 = ((array[1] as string) ?? string.Empty).Trim();
long ticks = ((array.Length >= 3 && array[2] is long num) ? num : DateTime.UtcNow.Ticks);
string kind = text;
string text3 = text2;
if (array.Length >= 5)
{
string text4 = (array[3] as string) ?? string.Empty;
string text5 = (array[4] as string) ?? string.Empty;
if (!string.IsNullOrEmpty(text4))
{
kind = text4.Trim();
}
if (!string.IsNullOrEmpty(text5))
{
text3 = text5.Trim();
}
}
if (LooksLikeCapturer(text3) && TryExtractTargetFromPayload(array, 0, out string targetKind, out string targetName) && !LooksLikeCapturer(targetName))
{
kind = targetKind;
text3 = targetName;
}
if (string.IsNullOrWhiteSpace(text3))
{
text3 = "Unknown";
}
AddEntry(kind, text3, new DateTime(ticks, DateTimeKind.Utc));
}
catch (Exception arg)
{
Logger.LogWarning((object)$"RepoDex OnEvent parse failed: {arg}");
}
}
private static bool LooksLikeCapturer(string s)
{
if (string.IsNullOrEmpty(s))
{
return false;
}
string text = s.ToLowerInvariant();
return text.Contains("repoball") || text.Contains("captureball") || text.Contains("trapball");
}
private bool TryExtractTargetFromPayload(object[] data, int startIndex, out string targetKind, out string targetName)
{
targetKind = string.Empty;
targetName = string.Empty;
for (int i = Math.Max(3, startIndex); i < data.Length; i++)
{
object obj = data[i];
if (obj == null)
{
continue;
}
if (obj is IDictionary dictionary)
{
if (TryExtractFromDictionary(dictionary, out targetKind, out targetName))
{
return true;
}
if (TryFindPhotonViewInDictionary(dictionary, out PhotonView pv) && TryResolveKindAndName(pv, out targetKind, out targetName))
{
return true;
}
foreach (DictionaryEntry item in dictionary)
{
if (item.Value is IDictionary dict && TryExtractFromDictionary(dict, out targetKind, out targetName))
{
return true;
}
}
}
if (obj is int num && num != 0)
{
PhotonView val = PhotonView.Find(num);
if (Object.op_Implicit((Object)(object)val) && TryResolveKindAndName(val, out targetKind, out targetName))
{
return true;
}
}
if (obj is long num2 && num2 > 0 && num2 <= int.MaxValue)
{
PhotonView val2 = PhotonView.Find((int)num2);
if (Object.op_Implicit((Object)(object)val2) && TryResolveKindAndName(val2, out targetKind, out targetName))
{
return true;
}
}
PhotonView val3 = (PhotonView)((obj is PhotonView) ? obj : null);
if (val3 != null && Object.op_Implicit((Object)(object)val3) && TryResolveKindAndName(val3, out targetKind, out targetName))
{
return true;
}
GameObject val4 = (GameObject)((obj is GameObject) ? obj : null);
if (val4 != null && Object.op_Implicit((Object)(object)val4) && TryResolveKindAndName(val4, out targetKind, out targetName))
{
return true;
}
Component val5 = (Component)((obj is Component) ? obj : null);
if (val5 != null && Object.op_Implicit((Object)(object)val5) && TryResolveKindAndName(val5.gameObject, out targetKind, out targetName))
{
return true;
}
}
return false;
}
private bool TryExtractFromDictionary(IDictionary dict, out string targetKind, out string targetName)
{
targetKind = string.Empty;
targetName = string.Empty;
try
{
string[] array = new string[6] { "targetKind", "kind", "tKind", "k", "type", "category" };
string[] array2 = new string[6] { "targetName", "name", "tName", "n", "label", "title" };
string[] array3 = array;
foreach (string key in array3)
{
if (dict.Contains(key) && dict[key] is string text && !string.IsNullOrEmpty(text))
{
targetKind = text;
}
}
string[] array4 = array2;
foreach (string key2 in array4)
{
if (dict.Contains(key2) && dict[key2] is string text2 && !string.IsNullOrEmpty(text2))
{
targetName = text2;
}
}
if (!string.IsNullOrEmpty(targetKind) && !string.IsNullOrEmpty(targetName))
{
return true;
}
foreach (DictionaryEntry item in dict)
{
if ((item.Key is byte || item.Key is sbyte || item.Key is short || item.Key is int) && item.Value is string text3 && string.IsNullOrEmpty(targetName) && !LooksLikeCapturer(text3))
{
targetName = text3;
}
}
if (!string.IsNullOrEmpty(targetName) && string.IsNullOrEmpty(targetKind))
{
if (TryFindPhotonViewInDictionary(dict, out PhotonView pv) && Object.op_Implicit((Object)(object)pv) && TryResolveKindAndName(pv, out string kind, out string name))
{
targetKind = kind;
if (!string.IsNullOrEmpty(name) && !LooksLikeCapturer(name))
{
targetName = name;
}
return true;
}
targetKind = GuessKindFromName(targetName);
return true;
}
}
catch
{
}
return false;
}
private bool TryFindPhotonViewInDictionary(IDictionary dict, out PhotonView pv)
{
pv = null;
try
{
object[] array = new object[12]
{
"targetViewId",
"viewId",
"pvId",
"photonViewId",
"vid",
"id",
"targetId",
(byte)0,
(byte)1,
(byte)2,
(byte)3,
(byte)4
};
object[] array2 = array;
foreach (object key in array2)
{
if (!dict.Contains(key))
{
continue;
}
object obj = dict[key];
if (obj is int num && num != 0)
{
pv = PhotonView.Find(num);
if (Object.op_Implicit((Object)(object)pv))
{
return true;
}
}
if (obj is long num2 && num2 > 0 && num2 <= int.MaxValue)
{
pv = PhotonView.Find((int)num2);
if (Object.op_Implicit((Object)(object)pv))
{
return true;
}
}
}
foreach (DictionaryEntry item in dict)
{
if (item.Value is int num3 && num3 != 0)
{
PhotonView val = PhotonView.Find(num3);
if (Object.op_Implicit((Object)(object)val))
{
pv = val;
return true;
}
}
if (item.Value is long num4 && num4 > 0 && num4 <= int.MaxValue)
{
PhotonView val2 = PhotonView.Find((int)num4);
if (Object.op_Implicit((Object)(object)val2))
{
pv = val2;
return true;
}
}
}
}
catch
{
}
return (Object)(object)pv != (Object)null;
}
private string GuessKindFromName(string n)
{
if (string.IsNullOrEmpty(n))
{
return "Object";
}
string text = n.ToLowerInvariant();
if (text.Contains("player") || text.Contains("(you)"))
{
return "Player";
}
if (text.Contains("duck") || text.Contains("predator") || text.Contains("enemy"))
{
return "Enemy";
}
if (text.Contains("potion") || text.Contains("gun") || text.Contains("key") || text.Contains("item"))
{
return "Item";
}
if (text.Contains("valuable") || text.Contains("$") || text.Contains("gold"))
{
return "Valuable";
}
return "Object";
}
private bool TryResolveKindAndName(GameObject go, out string kind, out string name)
{
kind = string.Empty;
name = string.Empty;
if (!Object.op_Implicit((Object)(object)go))
{
return false;
}
PlayerAvatar componentInParent = go.GetComponentInParent<PlayerAvatar>();
if (Object.op_Implicit((Object)(object)componentInParent))
{
kind = "Player";
try
{
name = SemiFunc.PlayerGetName(componentInParent);
}
catch
{
name = ((Object)go).name;
}
return true;
}
EnemyParent componentInParent2 = go.GetComponentInParent<EnemyParent>();
if (Object.op_Implicit((Object)(object)componentInParent2))
{
kind = "Enemy";
try
{
name = componentInParent2.enemyName;
}
catch
{
name = ((Object)go).name;
}
if (string.IsNullOrWhiteSpace(name))
{
name = ((Object)go).name;
}
return true;
}
ItemAttributes componentInParent3 = go.GetComponentInParent<ItemAttributes>();
if (Object.op_Implicit((Object)(object)componentInParent3))
{
kind = "Item";
try
{
if ((Object)(object)componentInParent3.item != (Object)null && !string.IsNullOrEmpty(componentInParent3.item.itemName))
{
name = componentInParent3.item.itemName;
}
else if (!string.IsNullOrEmpty(componentInParent3.itemName))
{
name = componentInParent3.itemName;
}
else
{
name = ((Object)go).name;
}
}
catch
{
name = ((Object)go).name;
}
return true;
}
ValuableObject componentInParent4 = go.GetComponentInParent<ValuableObject>();
if (Object.op_Implicit((Object)(object)componentInParent4))
{
kind = "Valuable";
name = ((Object)go).name;
return true;
}
kind = "Object";
name = ((Object)go).name;
return true;
}
private bool TryResolveKindAndName(PhotonView pv, out string kind, out string name)
{
if (Object.op_Implicit((Object)(object)pv) && TryResolveKindAndName(((Component)pv).gameObject, out kind, out name))
{
return true;
}
kind = string.Empty;
name = string.Empty;
return false;
}
internal void ActivateRuntime()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
if (!_active)
{
PhotonNetwork.AddCallbackTarget((object)this);
BuildCanvas();
BuildPanel();
_receiverGo = new GameObject("RepoDexReceiver_EMPRESS");
((Object)_receiverGo).hideFlags = (HideFlags)61;
Object.DontDestroyOnLoad((Object)(object)_receiverGo);
_receiverGo.AddComponent<RepoDexReceiver>();
_active = true;
RefreshList();
}
}
internal void DeactivateRuntime()
{
if (_active)
{
PhotonNetwork.RemoveCallbackTarget((object)this);
if (_uiVisible)
{
RestoreCursor();
}
if (Object.op_Implicit((Object)(object)_panelRoot))
{
Object.Destroy((Object)(object)_panelRoot);
}
if (Object.op_Implicit((Object)(object)_canvasRoot))
{
Object.Destroy((Object)(object)_canvasRoot);
}
if (Object.op_Implicit((Object)(object)_receiverGo))
{
Object.Destroy((Object)(object)_receiverGo);
}
_panelRoot = null;
_canvasRoot = null;
_canvas = null;
_receiverGo = null;
_uiVisible = false;
_active = false;
}
}
internal void AddEntry(string kind, string name, DateTime utc)
{
switch (kind)
{
case "Enemies":
kind = "Enemy";
break;
case "Players":
kind = "Player";
break;
case "Valuables":
kind = "Valuable";
break;
}
kind = (string.IsNullOrWhiteSpace(kind) ? "Object" : kind.Trim());
name = (string.IsNullOrWhiteSpace(name) ? "Unknown" : name.Trim());
string item = kind + "|" + name;
if (!_seen.Contains(item))
{
CaptureEntry captureEntry = default(CaptureEntry);
captureEntry.Seq = _entries.Count + 1;
captureEntry.Kind = kind;
captureEntry.Name = name;
captureEntry.TimeUtc = utc;
CaptureEntry item2 = captureEntry;
_entries.Add(item2);
_seen.Add(item);
SaveEntries();
RefreshList();
}
}
private void ToggleUI()
{
_uiVisible = !_uiVisible;
if (Object.op_Implicit((Object)(object)_panelRoot))
{
_panelRoot.SetActive(_uiVisible);
}
if (_uiVisible)
{
TakeCursor();
RefreshList();
}
else
{
RestoreCursor();
}
}
private void BuildCanvas()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
_canvasRoot = new GameObject("RepoDexCanvas_EMPRESS");
Object.DontDestroyOnLoad((Object)(object)_canvasRoot);
_canvasRoot.layer = LayerMask.NameToLayer("UI");
_canvas = _canvasRoot.AddComponent<Canvas>();
_canvas.renderMode = (RenderMode)0;
_canvas.sortingOrder = 32766;
_canvas.overrideSorting = true;
CanvasScaler val = _canvasRoot.AddComponent<CanvasScaler>();
val.uiScaleMode = (ScaleMode)1;
val.referenceResolution = new Vector2(1920f, 1080f);
val.matchWidthOrHeight = 1f;
_canvasRoot.AddComponent<GraphicRaycaster>();
if ((Object)(object)EventSystem.current == (Object)null)
{
GameObject val2 = new GameObject("EventSystem");
val2.AddComponent<EventSystem>();
val2.AddComponent<StandaloneInputModule>();
Object.DontDestroyOnLoad((Object)(object)val2);
}
}
private void BuildPanel()
{
//IL_0041: 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_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: 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_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: Unknown result type (might be due to invalid IL or missing references)
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
//IL_0206: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Expected O, but got Unknown
//IL_0231: Unknown result type (might be due to invalid IL or missing references)
//IL_02d4: Unknown result type (might be due to invalid IL or missing references)
//IL_0302: Unknown result type (might be due to invalid IL or missing references)
//IL_035a: Unknown result type (might be due to invalid IL or missing references)
//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
//IL_03e7: Expected O, but got Unknown
//IL_0415: Unknown result type (might be due to invalid IL or missing references)
//IL_042c: Unknown result type (might be due to invalid IL or missing references)
//IL_0443: Unknown result type (might be due to invalid IL or missing references)
//IL_045a: Unknown result type (might be due to invalid IL or missing references)
//IL_0471: Unknown result type (might be due to invalid IL or missing references)
//IL_049b: Unknown result type (might be due to invalid IL or missing references)
//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
//IL_04d7: Expected O, but got Unknown
//IL_0504: Unknown result type (might be due to invalid IL or missing references)
//IL_054d: Unknown result type (might be due to invalid IL or missing references)
//IL_05a3: Unknown result type (might be due to invalid IL or missing references)
//IL_05ec: Unknown result type (might be due to invalid IL or missing references)
//IL_0648: Unknown result type (might be due to invalid IL or missing references)
//IL_065f: Unknown result type (might be due to invalid IL or missing references)
//IL_0676: Unknown result type (might be due to invalid IL or missing references)
//IL_068d: Unknown result type (might be due to invalid IL or missing references)
//IL_06a4: Unknown result type (might be due to invalid IL or missing references)
//IL_06ce: Unknown result type (might be due to invalid IL or missing references)
//IL_0700: Unknown result type (might be due to invalid IL or missing references)
//IL_070a: Expected O, but got Unknown
//IL_084f: Unknown result type (might be due to invalid IL or missing references)
//IL_0866: Unknown result type (might be due to invalid IL or missing references)
//IL_087d: Unknown result type (might be due to invalid IL or missing references)
//IL_0894: Unknown result type (might be due to invalid IL or missing references)
//IL_08ab: Unknown result type (might be due to invalid IL or missing references)
//IL_090e: Unknown result type (might be due to invalid IL or missing references)
//IL_094a: Unknown result type (might be due to invalid IL or missing references)
//IL_0965: Unknown result type (might be due to invalid IL or missing references)
//IL_0980: Unknown result type (might be due to invalid IL or missing references)
//IL_099b: Unknown result type (might be due to invalid IL or missing references)
//IL_09b6: Unknown result type (might be due to invalid IL or missing references)
//IL_0a0a: Unknown result type (might be due to invalid IL or missing references)
//IL_0a14: Expected O, but got Unknown
_panelRoot = CreateUIElement("Panel", _canvasRoot.transform);
RectTransform component = _panelRoot.GetComponent<RectTransform>();
component.anchorMin = new Vector2(0.5f, 0.5f);
component.anchorMax = new Vector2(0.5f, 0.5f);
component.pivot = new Vector2(0.5f, 0.5f);
component.sizeDelta = new Vector2(900f, 640f);
component.anchoredPosition = _uiPosition.Value;
((Transform)component).localScale = new Vector3(_uiScale.Value, _uiScale.Value, 1f);
Image val = _panelRoot.AddComponent<Image>();
((Graphic)val).color = _bg;
Outline val2 = _panelRoot.AddComponent<Outline>();
((Shadow)val2).effectColor = new Color(0f, 0f, 0f, 0.9f);
((Shadow)val2).effectDistance = new Vector2(3f, -3f);
GameObject val3 = CreateUIElement("TopBar", _panelRoot.transform);
RectTransform component2 = val3.GetComponent<RectTransform>();
component2.anchorMin = new Vector2(0f, 1f);
component2.anchorMax = new Vector2(1f, 1f);
component2.pivot = new Vector2(0.5f, 1f);
component2.sizeDelta = new Vector2(-20f, 56f);
component2.anchoredPosition = new Vector2(0f, -10f);
Image val4 = val3.AddComponent<Image>();
((Graphic)val4).color = _accentRed;
HorizontalLayoutGroup val5 = val3.AddComponent<HorizontalLayoutGroup>();
((LayoutGroup)val5).childAlignment = (TextAnchor)3;
((HorizontalOrVerticalLayoutGroup)val5).childForceExpandWidth = false;
((HorizontalOrVerticalLayoutGroup)val5).childControlWidth = false;
((HorizontalOrVerticalLayoutGroup)val5).spacing = 10f;
((LayoutGroup)val5).padding = new RectOffset(14, 14, 6, 6);
GameObject val6 = CreateUIElement("BadgeLeft", val3.transform);
Image val7 = val6.AddComponent<Image>();
((Graphic)val7).color = _accentBlue;
LayoutElement val8 = val6.AddComponent<LayoutElement>();
val8.minWidth = 20f;
val8.minHeight = 20f;
GameObject val9 = CreateUIElement("TitleContainer", val3.transform);
LayoutElement val10 = val9.AddComponent<LayoutElement>();
val10.minWidth = 260f;
VerticalLayoutGroup val11 = val9.AddComponent<VerticalLayoutGroup>();
((LayoutGroup)val11).childAlignment = (TextAnchor)3;
((HorizontalOrVerticalLayoutGroup)val11).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)val11).childControlWidth = true;
((HorizontalOrVerticalLayoutGroup)val11).spacing = -4f;
TMP_Text val12 = CreateText("REPODEX", 30, val9.transform, (FontStyles)1);
((Graphic)val12).color = _text;
val12.enableWordWrapping = false;
TMP_Text val13 = CreateText("Capture Index", 16, val9.transform, (FontStyles)2);
((Graphic)val13).color = _muted;
val13.enableWordWrapping = false;
GameObject val14 = CreateUIElement("TopSpacer", val3.transform);
LayoutElement val15 = val14.AddComponent<LayoutElement>();
val15.flexibleWidth = 1f;
TMP_Text val16 = CreateText("Entries: 0", 18, val3.transform, (FontStyles)1);
((Graphic)val16).color = _text;
val16.alignment = (TextAlignmentOptions)516;
val16.enableWordWrapping = false;
LayoutElement val17 = ((Component)val16).gameObject.AddComponent<LayoutElement>();
val17.minWidth = 140f;
Button val18 = CreateButton("X", 22, val3.transform);
LayoutElement component3 = ((Component)val18).GetComponent<LayoutElement>();
component3.minWidth = 42f;
component3.minHeight = 32f;
((UnityEvent)val18.onClick).AddListener((UnityAction)delegate
{
ToggleUI();
});
GameObject val19 = CreateUIElement("StatsBar", _panelRoot.transform);
RectTransform component4 = val19.GetComponent<RectTransform>();
component4.anchorMin = new Vector2(0f, 1f);
component4.anchorMax = new Vector2(1f, 1f);
component4.pivot = new Vector2(0.5f, 1f);
component4.sizeDelta = new Vector2(-20f, 42f);
component4.anchoredPosition = new Vector2(0f, -72f);
Image val20 = val19.AddComponent<Image>();
((Graphic)val20).color = new Color(0.04f, 0.07f, 0.18f, 0.95f);
HorizontalLayoutGroup val21 = val19.AddComponent<HorizontalLayoutGroup>();
((LayoutGroup)val21).childAlignment = (TextAnchor)3;
((HorizontalOrVerticalLayoutGroup)val21).spacing = 10f;
((LayoutGroup)val21).padding = new RectOffset(14, 14, 4, 4);
((HorizontalOrVerticalLayoutGroup)val21).childControlWidth = false;
((HorizontalOrVerticalLayoutGroup)val21).childForceExpandWidth = false;
TMP_Text val22 = CreateText("No.", 16, val19.transform, (FontStyles)1);
((Graphic)val22).color = _muted;
val22.enableWordWrapping = false;
LayoutElement val23 = ((Component)val22).gameObject.AddComponent<LayoutElement>();
val23.minWidth = 60f;
TMP_Text val24 = CreateText("Name", 16, val19.transform, (FontStyles)1);
((Graphic)val24).color = _muted;
val24.enableWordWrapping = false;
LayoutElement val25 = ((Component)val24).gameObject.AddComponent<LayoutElement>();
val25.minWidth = 230f;
val25.flexibleWidth = 1f;
TMP_Text val26 = CreateText("Kind", 16, val19.transform, (FontStyles)1);
((Graphic)val26).color = _muted;
val26.enableWordWrapping = false;
LayoutElement val27 = ((Component)val26).gameObject.AddComponent<LayoutElement>();
val27.minWidth = 120f;
TMP_Text val28 = CreateText("Captured", 16, val19.transform, (FontStyles)1);
((Graphic)val28).color = _muted;
val28.enableWordWrapping = false;
LayoutElement val29 = ((Component)val28).gameObject.AddComponent<LayoutElement>();
val29.minWidth = 170f;
GameObject val30 = CreateUIElement("Tools", _panelRoot.transform);
RectTransform component5 = val30.GetComponent<RectTransform>();
component5.anchorMin = new Vector2(0f, 1f);
component5.anchorMax = new Vector2(1f, 1f);
component5.pivot = new Vector2(0.5f, 1f);
component5.sizeDelta = new Vector2(-20f, 48f);
component5.anchoredPosition = new Vector2(0f, -122f);
Image val31 = val30.AddComponent<Image>();
((Graphic)val31).color = new Color(0.02f, 0.03f, 0.1f, 0.85f);
HorizontalLayoutGroup val32 = val30.AddComponent<HorizontalLayoutGroup>();
((LayoutGroup)val32).childAlignment = (TextAnchor)3;
((HorizontalOrVerticalLayoutGroup)val32).spacing = 8f;
((LayoutGroup)val32).padding = new RectOffset(14, 14, 6, 6);
((HorizontalOrVerticalLayoutGroup)val32).childControlWidth = true;
((HorizontalOrVerticalLayoutGroup)val32).childForceExpandWidth = true;
_search = CreateInput("Search name or kind", val30.transform);
LayoutElement component6 = ((Component)_search).gameObject.GetComponent<LayoutElement>();
component6.minWidth = 380f;
component6.preferredWidth = 500f;
component6.flexibleWidth = 1f;
((UnityEvent<string>)(object)_search.onValueChanged).AddListener((UnityAction<string>)delegate
{
RefreshList();
});
_kindDropdown = CreateDropdown(new string[5] { "All", "Enemy", "Player", "Valuable", "Item" }, val30.transform);
LayoutElement component7 = ((Component)_kindDropdown).gameObject.GetComponent<LayoutElement>();
component7.minWidth = 190f;
component7.preferredWidth = 210f;
component7.flexibleWidth = 0f;
((UnityEvent<int>)(object)_kindDropdown.onValueChanged).AddListener((UnityAction<int>)delegate
{
RefreshList();
});
GameObject val33 = CreateUIElement("Body", _panelRoot.transform);
RectTransform component8 = val33.GetComponent<RectTransform>();
component8.anchorMin = new Vector2(0f, 0f);
component8.anchorMax = new Vector2(1f, 1f);
component8.pivot = new Vector2(0.5f, 0.5f);
component8.offsetMin = new Vector2(10f, 10f);
component8.offsetMax = new Vector2(-10f, -176f);
_scroll = val33.AddComponent<ScrollRect>();
_scroll.horizontal = false;
_scroll.movementType = (MovementType)2;
Mask val34 = val33.AddComponent<Mask>();
val34.showMaskGraphic = false;
Image val35 = val33.AddComponent<Image>();
((Graphic)val35).color = new Color(0f, 0f, 0f, 0.25f);
GameObject val36 = CreateUIElement("Content", val33.transform);
_contentRect = val36.GetComponent<RectTransform>();
_contentRect.anchorMin = new Vector2(0f, 1f);
_contentRect.anchorMax = new Vector2(1f, 1f);
_contentRect.pivot = new Vector2(0.5f, 1f);
_contentRect.offsetMin = new Vector2(4f, 0f);
_contentRect.offsetMax = new Vector2(-4f, 0f);
VerticalLayoutGroup val37 = val36.AddComponent<VerticalLayoutGroup>();
((LayoutGroup)val37).childAlignment = (TextAnchor)0;
((HorizontalOrVerticalLayoutGroup)val37).childControlHeight = false;
((HorizontalOrVerticalLayoutGroup)val37).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)val37).childControlWidth = true;
((HorizontalOrVerticalLayoutGroup)val37).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)val37).spacing = 4f;
((LayoutGroup)val37).padding = new RectOffset(4, 4, 6, 6);
ContentSizeFitter val38 = val36.AddComponent<ContentSizeFitter>();
val38.verticalFit = (FitMode)2;
_scroll.content = _contentRect;
_scroll.viewport = component8;
TMP_Text countBinding = val16;
RepoDexRuntime.OnEntriesChanged = delegate
{
if (Object.op_Implicit((Object)(object)countBinding))
{
countBinding.text = "Entries: " + _entries.Count;
}
};
_panelRoot.SetActive(false);
}
private void RefreshList()
{
//IL_0217: Unknown result type (might be due to invalid IL or missing references)
//IL_023a: Unknown result type (might be due to invalid IL or missing references)
//IL_0232: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: Unknown result type (might be due to invalid IL or missing references)
//IL_027b: 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_02c9: Expected O, but got Unknown
//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Unknown result type (might be due to invalid IL or missing references)
//IL_0451: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)_panelRoot) || !Object.op_Implicit((Object)(object)_contentRect))
{
return;
}
for (int num = ((Transform)_contentRect).childCount - 1; num >= 0; num--)
{
Object.Destroy((Object)(object)((Component)((Transform)_contentRect).GetChild(num)).gameObject);
}
string q = (Object.op_Implicit((Object)(object)_search) ? _search.text : "");
int num2 = (Object.op_Implicit((Object)(object)_kindDropdown) ? _kindDropdown.value : 0);
IEnumerable<CaptureEntry> enumerable = _entries.OrderByDescending((CaptureEntry e) => e.Seq);
if (!string.IsNullOrEmpty(q))
{
enumerable = enumerable.Where((CaptureEntry e) => e.Name.IndexOf(q, StringComparison.OrdinalIgnoreCase) >= 0 || e.Kind.IndexOf(q, StringComparison.OrdinalIgnoreCase) >= 0);
}
switch (num2)
{
case 1:
enumerable = enumerable.Where((CaptureEntry e) => e.Kind == "Enemy");
break;
case 2:
enumerable = enumerable.Where((CaptureEntry e) => e.Kind == "Player");
break;
case 3:
enumerable = enumerable.Where((CaptureEntry e) => e.Kind == "Valuable");
break;
case 4:
enumerable = enumerable.Where((CaptureEntry e) => e.Kind == "Item");
break;
}
int num3 = 0;
foreach (CaptureEntry item in enumerable)
{
bool flag = num3 % 2 == 0;
num3++;
GameObject val = CreateUIElement("Row", (Transform)(object)_contentRect);
RectTransform component = val.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(0f, 44f);
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = (flag ? _rowDark : _rowLight);
Outline val3 = val.AddComponent<Outline>();
((Shadow)val3).effectColor = new Color(0f, 0f, 0f, 0.75f);
((Shadow)val3).effectDistance = new Vector2(1f, -1f);
HorizontalLayoutGroup val4 = val.AddComponent<HorizontalLayoutGroup>();
((HorizontalOrVerticalLayoutGroup)val4).childControlWidth = true;
((HorizontalOrVerticalLayoutGroup)val4).childForceExpandWidth = false;
((LayoutGroup)val4).childAlignment = (TextAnchor)3;
((HorizontalOrVerticalLayoutGroup)val4).spacing = 8f;
((LayoutGroup)val4).padding = new RectOffset(10, 10, 4, 4);
TMP_Text val5 = CreateText(item.Seq.ToString("D3"), 18, val.transform, (FontStyles)1);
((Graphic)val5).color = _accentBlue;
val5.alignment = (TextAlignmentOptions)4097;
val5.enableWordWrapping = false;
val5.overflowMode = (TextOverflowModes)1;
LayoutElement val6 = ((Component)val5).gameObject.AddComponent<LayoutElement>();
val6.minWidth = 60f;
val6.flexibleWidth = 0f;
TMP_Text val7 = CreateText(item.Name, 20, val.transform, (FontStyles)1);
((Graphic)val7).color = _text;
val7.alignment = (TextAlignmentOptions)4097;
val7.enableWordWrapping = false;
val7.overflowMode = (TextOverflowModes)1;
LayoutElement val8 = ((Component)val7).gameObject.AddComponent<LayoutElement>();
val8.minWidth = 230f;
val8.flexibleWidth = 1f;
TMP_Text val9 = CreateTag(item.Kind, val.transform);
val9.enableWordWrapping = false;
val9.overflowMode = (TextOverflowModes)1;
LayoutElement component2 = ((Component)val9.transform.parent).GetComponent<LayoutElement>();
if ((Object)(object)component2 != (Object)null)
{
component2.minWidth = 120f;
component2.preferredWidth = 120f;
component2.flexibleWidth = 0f;
}
TMP_Text val10 = CreateText(item.TimeUtc.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"), 16, val.transform, (FontStyles)0);
((Graphic)val10).color = _muted;
val10.alignment = (TextAlignmentOptions)4097;
val10.enableWordWrapping = false;
val10.overflowMode = (TextOverflowModes)1;
LayoutElement val11 = ((Component)val10).gameObject.AddComponent<LayoutElement>();
val11.minWidth = 170f;
val11.flexibleWidth = 0f;
}
LayoutRebuilder.ForceRebuildLayoutImmediate(_contentRect);
if (RepoDexRuntime.OnEntriesChanged != null)
{
RepoDexRuntime.OnEntriesChanged();
}
}
private GameObject CreateUIElement(string name, Transform parent)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
GameObject val = new GameObject(name);
val.transform.SetParent(parent, false);
val.AddComponent<RectTransform>();
return val;
}
private TMP_Text CreateText(string s, int size, Transform parent, FontStyles style)
{
//IL_0027: 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)
GameObject val = CreateUIElement("Text", parent);
TextMeshProUGUI val2 = val.AddComponent<TextMeshProUGUI>();
((TMP_Text)val2).text = s;
((TMP_Text)val2).fontSize = size;
((TMP_Text)val2).fontStyle = style;
((Graphic)val2).color = _text;
return (TMP_Text)(object)val2;
}
private Button CreateButton(string s, int size, Transform parent)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
GameObject val = CreateUIElement("Button", parent);
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = new Color(0.2f, 0.1f, 0.3f, 0.8f);
Button result = val.AddComponent<Button>();
LayoutElement val3 = val.AddComponent<LayoutElement>();
val3.minWidth = 40f;
val3.minHeight = 34f;
TMP_Text val4 = CreateText(s, size, val.transform, (FontStyles)1);
val4.alignment = (TextAlignmentOptions)514;
val4.enableWordWrapping = false;
RectTransform rectTransform = val4.rectTransform;
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.offsetMin = Vector2.zero;
rectTransform.offsetMax = Vector2.zero;
return result;
}
private TMP_InputField CreateInput(string placeholder, Transform parent)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: 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_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
GameObject val = CreateUIElement("Input", parent);
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = new Color(0f, 0f, 0f, 0.4f);
LayoutElement val3 = val.AddComponent<LayoutElement>();
val3.minWidth = 300f;
val3.minHeight = 34f;
TMP_InputField val4 = val.AddComponent<TMP_InputField>();
GameObject val5 = CreateUIElement("Text", val.transform);
TextMeshProUGUI val6 = val5.AddComponent<TextMeshProUGUI>();
((TMP_Text)val6).fontSize = 20f;
((Graphic)val6).color = _text;
((Graphic)val6).raycastTarget = true;
((TMP_Text)val6).enableWordWrapping = false;
((TMP_Text)val6).overflowMode = (TextOverflowModes)1;
GameObject val7 = CreateUIElement("Placeholder", val.transform);
TextMeshProUGUI val8 = val7.AddComponent<TextMeshProUGUI>();
((TMP_Text)val8).text = placeholder;
((TMP_Text)val8).fontSize = 20f;
((Graphic)val8).color = _muted;
((Graphic)val8).raycastTarget = true;
((TMP_Text)val8).enableWordWrapping = false;
((TMP_Text)val8).overflowMode = (TextOverflowModes)1;
val4.textComponent = (TMP_Text)(object)val6;
val4.placeholder = (Graphic)(object)val8;
RectTransform rectTransform = ((TMP_Text)val6).rectTransform;
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.offsetMin = new Vector2(8f, 4f);
rectTransform.offsetMax = new Vector2(-8f, -4f);
RectTransform rectTransform2 = ((TMP_Text)val8).rectTransform;
rectTransform2.anchorMin = Vector2.zero;
rectTransform2.anchorMax = Vector2.one;
rectTransform2.offsetMin = new Vector2(8f, 4f);
rectTransform2.offsetMax = new Vector2(-8f, -4f);
return val4;
}
private TMP_Dropdown CreateDropdown(IEnumerable<string> options, Transform parent)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: 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_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_0191: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_021b: Unknown result type (might be due to invalid IL or missing references)
//IL_0232: Unknown result type (might be due to invalid IL or missing references)
//IL_025e: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Expected O, but got Unknown
//IL_02fe: 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_0374: Unknown result type (might be due to invalid IL or missing references)
GameObject val = CreateUIElement("Dropdown", parent);
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = new Color(0f, 0f, 0f, 0.4f);
LayoutElement val3 = val.AddComponent<LayoutElement>();
val3.minWidth = 180f;
val3.minHeight = 34f;
TMP_Dropdown val4 = val.AddComponent<TMP_Dropdown>();
GameObject val5 = CreateUIElement("Label", val.transform);
TextMeshProUGUI val6 = val5.AddComponent<TextMeshProUGUI>();
((TMP_Text)val6).fontSize = 20f;
((Graphic)val6).color = _text;
((TMP_Text)val6).alignment = (TextAlignmentOptions)4097;
((TMP_Text)val6).enableWordWrapping = false;
((TMP_Text)val6).overflowMode = (TextOverflowModes)1;
GameObject val7 = CreateUIElement("Template", val.transform);
RectTransform component = val7.GetComponent<RectTransform>();
component.anchorMin = new Vector2(0f, 0f);
component.anchorMax = new Vector2(1f, 0f);
component.pivot = new Vector2(0.5f, 1f);
component.sizeDelta = new Vector2(0f, 150f);
Image val8 = val7.AddComponent<Image>();
((Graphic)val8).color = new Color(0f, 0f, 0f, 0.6f);
ScrollRect val9 = val7.AddComponent<ScrollRect>();
val9.horizontal = false;
GameObject val10 = CreateUIElement("Viewport", val7.transform);
RectTransform component2 = val10.GetComponent<RectTransform>();
component2.anchorMin = Vector2.zero;
component2.anchorMax = Vector2.one;
component2.sizeDelta = Vector2.zero;
val10.AddComponent<RectMask2D>();
Image val11 = val10.AddComponent<Image>();
((Graphic)val11).color = new Color(0f, 0f, 0f, 0.2f);
GameObject val12 = CreateUIElement("Content", val10.transform);
RectTransform component3 = val12.GetComponent<RectTransform>();
component3.anchorMin = new Vector2(0f, 1f);
component3.anchorMax = new Vector2(1f, 1f);
component3.pivot = new Vector2(0.5f, 1f);
VerticalLayoutGroup val13 = val12.AddComponent<VerticalLayoutGroup>();
((HorizontalOrVerticalLayoutGroup)val13).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)val13).childControlHeight = true;
((LayoutGroup)val13).padding = new RectOffset(4, 4, 4, 4);
((HorizontalOrVerticalLayoutGroup)val13).spacing = 2f;
val12.AddComponent<ContentSizeFitter>().verticalFit = (FitMode)2;
val9.content = component3;
val9.viewport = component2;
GameObject val14 = CreateUIElement("Item", val12.transform);
Toggle val15 = val14.AddComponent<Toggle>();
LayoutElement val16 = val14.AddComponent<LayoutElement>();
val16.minHeight = 24f;
GameObject val17 = CreateUIElement("Item Background", val14.transform);
Image val18 = val17.AddComponent<Image>();
((Graphic)val18).color = new Color(0.1f, 0.12f, 0.2f, 0.8f);
((Selectable)val15).targetGraphic = (Graphic)(object)val18;
GameObject val19 = CreateUIElement("Item Checkmark", val17.transform);
Image val20 = val19.AddComponent<Image>();
((Graphic)val20).color = _accentBlue;
val15.graphic = (Graphic)(object)val20;
GameObject val21 = CreateUIElement("Item Label", val14.transform);
TextMeshProUGUI val22 = val21.AddComponent<TextMeshProUGUI>();
((TMP_Text)val22).fontSize = 18f;
((Graphic)val22).color = _text;
((TMP_Text)val22).alignment = (TextAlignmentOptions)513;
((TMP_Text)val22).enableWordWrapping = false;
((TMP_Text)val22).overflowMode = (TextOverflowModes)1;
val4.captionText = (TMP_Text)(object)val6;
val4.template = component;
val4.itemText = (TMP_Text)(object)val22;
val4.options = options.Select((Func<string, OptionData>)((string o) => new OptionData(o))).ToList();
val7.SetActive(false);
return val4;
}
private TMP_Text CreateTag(string s, Transform parent)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
GameObject val = CreateUIElement("Tag", parent);
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = _accentBlue;
LayoutElement val3 = val.AddComponent<LayoutElement>();
val3.minWidth = 100f;
val3.minHeight = 22f;
TMP_Text val4 = CreateText(s.ToUpperInvariant(), 14, val.transform, (FontStyles)1);
val4.alignment = (TextAlignmentOptions)514;
val4.enableWordWrapping = false;
val4.overflowMode = (TextOverflowModes)1;
RectTransform rectTransform = val4.rectTransform;
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.offsetMin = Vector2.zero;
rectTransform.offsetMax = Vector2.zero;
return val4;
}
private void TakeCursor()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
_prevLock = Cursor.lockState;
_prevVisible = Cursor.visible;
Cursor.lockState = (CursorLockMode)0;
Cursor.visible = true;
}
private void RestoreCursor()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
Cursor.lockState = _prevLock;
Cursor.visible = _prevVisible;
}
private static string ToB64(string s)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(s ?? ""));
}
private static string FromB64(string s)
{
try
{
return Encoding.UTF8.GetString(Convert.FromBase64String(s));
}
catch
{
return s ?? "";
}
}
private void SaveEntries()
{
try
{
using StreamWriter streamWriter = new StreamWriter(_savePath, append: false, Encoding.UTF8);
streamWriter.WriteLine("v2");
for (int i = 0; i < _entries.Count; i++)
{
CaptureEntry captureEntry = _entries[i];
streamWriter.Write(captureEntry.Seq);
streamWriter.Write('|');
streamWriter.Write(ToB64(captureEntry.Kind));
streamWriter.Write('|');
streamWriter.Write(ToB64(captureEntry.Name));
streamWriter.Write('|');
streamWriter.Write(captureEntry.TimeUtc.Ticks);
streamWriter.Write('\n');
}
}
catch (Exception arg)
{
Logger.LogWarning((object)$"RepoDex save failed: {arg}");
}
}
private void LoadEntries()
{
try
{
if (!File.Exists(_savePath))
{
return;
}
string[] array = File.ReadAllLines(_savePath, Encoding.UTF8);
int num = 0;
if (array.Length != 0 && array[0].Trim().Equals("v2", StringComparison.OrdinalIgnoreCase))
{
num = 1;
}
_entries.Clear();
_seen.Clear();
for (int i = num; i < array.Length; i++)
{
string text = array[i];
if (!string.IsNullOrWhiteSpace(text))
{
string[] array2 = text.Split('|');
if (array2.Length >= 4 && int.TryParse(array2[0], out var result) && long.TryParse(array2[3], out var result2))
{
string text2 = FromB64(array2[1]);
string text3 = FromB64(array2[2]);
CaptureEntry captureEntry = default(CaptureEntry);
captureEntry.Seq = result;
captureEntry.Kind = (string.IsNullOrEmpty(text2) ? "Object" : text2);
captureEntry.Name = (string.IsNullOrEmpty(text3) ? "Unknown" : text3);
captureEntry.TimeUtc = new DateTime(result2, DateTimeKind.Utc);
CaptureEntry item = captureEntry;
_entries.Add(item);
_seen.Add(item.Kind + "|" + item.Name);
}
}
}
_entries.Sort((CaptureEntry a, CaptureEntry b) => a.Seq.CompareTo(b.Seq));
}
catch (Exception arg)
{
Logger.LogWarning((object)$"RepoDex load failed: {arg}");
}
}
}
internal sealed class RepoDexRuntime : MonoBehaviour
{
private static RepoDexRuntime _inst;
private bool _wasActive;
internal static Action OnEntriesChanged;
private void Awake()
{
if (Object.op_Implicit((Object)(object)_inst) && (Object)(object)_inst != (Object)(object)this)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
return;
}
_inst = this;
Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
SceneManager.activeSceneChanged += OnSceneChanged;
}
private void OnDestroy()
{
SceneManager.activeSceneChanged -= OnSceneChanged;
FullDeactivate();
}
private static void OnSceneChanged(Scene a, Scene b)
{
FullDeactivate();
}
private void OnDisable()
{
FullDeactivate();
}
private void Update()
{
RepoDexPlugin instance = RepoDexPlugin.Instance;
if (!Object.op_Implicit((Object)(object)instance))
{
return;
}
if (!RuntimeReady())
{
if (_wasActive)
{
FullDeactivate();
}
}
else if (!_wasActive)
{
TryActivate();
}
}
internal static bool RuntimeReady()
{
if (!PhotonNetwork.IsConnected || !PhotonNetwork.InRoom)
{
return false;
}
if (SemiFunc.MenuLevel())
{
return false;
}
if (!Object.op_Implicit((Object)(object)LevelGenerator.Instance) || !LevelGenerator.Instance.Generated)
{
return false;
}
if (!Object.op_Implicit((Object)(object)PlayerAvatar.instance))
{
return false;
}
return true;
}
internal static void TryActivate()
{
RepoDexPlugin instance = RepoDexPlugin.Instance;
if (Object.op_Implicit((Object)(object)instance))
{
instance.ActivateRuntime();
if (Object.op_Implicit((Object)(object)_inst))
{
_inst._wasActive = true;
}
OnEntriesChanged?.Invoke();
}
}
internal static void FullDeactivate()
{
RepoDexPlugin instance = RepoDexPlugin.Instance;
if (Object.op_Implicit((Object)(object)instance))
{
instance.DeactivateRuntime();
if (Object.op_Implicit((Object)(object)_inst))
{
_inst._wasActive = false;
}
}
}
}
public class RepoDexReceiver : MonoBehaviour
{
public void AddLocal(string kind, string name)
{
if (Object.op_Implicit((Object)(object)RepoDexPlugin.Instance))
{
RepoDexPlugin.Instance.AddEntry(kind, string.IsNullOrWhiteSpace(name) ? "Unknown" : name.Trim(), DateTime.UtcNow);
}
}
public void AddLocalDetailed(string usedKind, string usedName, string targetKind, string targetName)
{
if (Object.op_Implicit((Object)(object)RepoDexPlugin.Instance))
{
string kind = (string.IsNullOrWhiteSpace(targetKind) ? usedKind : targetKind);
string name = (string.IsNullOrWhiteSpace(targetName) ? "Unknown" : targetName.Trim());
RepoDexPlugin.Instance.AddEntry(kind, name, DateTime.UtcNow);
}
}
}
}
namespace Omniscye.RepoBall
{
[BepInPlugin("Omniscye.RepoBall", "RepoBall", "1.0.5")]
public class RepoBallPlugin : BaseUnityPlugin
{
internal const byte RepoDexEventCode = 187;
internal static RepoBallPlugin Instance { get; private set; }
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
private void Awake()
{
//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_0048: Expected O, but got Unknown
//IL_004d: Expected O, but got Unknown
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll();
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} loaded");
}
private void OnDestroy()
{
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
private void Update()
{
RepoDexBridge.FlushPending();
}
internal static void BroadcastRepoDex(string kind, string name)
{
BroadcastRepoDexDetailed("Item", "RepoBall", kind, name);
}
internal static void BroadcastRepoDexDetailed(string kind, string usedName, string targetKind, string targetName)
{
//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_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
if (SemiFunc.IsMultiplayer())
{
object[] array = new object[5]
{
kind,
usedName,
DateTime.UtcNow.Ticks,
string.IsNullOrWhiteSpace(targetKind) ? "Object" : targetKind.Trim(),
string.IsNullOrWhiteSpace(targetName) ? "Unknown" : targetName.Trim()
};
RaiseEventOptions val = new RaiseEventOptions
{
Receivers = (ReceiverGroup)1
};
PhotonNetwork.RaiseEvent((byte)187, (object)array, val, SendOptions.SendReliable);
}
}
}
public class RepoPokeball : Trap
{
private struct RepoTarget
{
public GameObject Target;
public RepoTargetKind Kind;
public RepoTarget(GameObject go, RepoTargetKind k)
{
Target = go;
Kind = k;
}
}
private class TargetState
{
public GameObject Target;
public RepoTargetKind Kind;
public Transform Transform;
public Transform Parent;
public Vector3 LocalPos;
public Quaternion LocalRot;
public Vector3 LocalScale;
public Vector3 WorldPos;
public Quaternion WorldRot;
public PhotonView PV;
public Enemy Enemy;
public PlayerAvatar Player;
public ValuableObject Valuable;
public PhysGrabObject Phys;
public EnemyParent EnemyParent;
public EnemyOnScreen EnemyOnScreen;
public EnemyPlayerDistance EnemyPlayerDistance;
public bool EnemyParentEnabled;
public bool EnemyOnScreenEnabled;
public bool EnemyPlayerDistanceEnabled;
public List<Behaviour> DisabledBehaviours;
}
private enum RepoTargetKind
{
None,
Enemy,
Player,
Valuable,
Item
}
[CompilerGenerated]
private sealed class <CaptureRoutine>d__29 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public RepoTarget target;
public RepoPokeball <>4__this;
private Vector3 <ballPos>5__1;
private Vector3 <floatPos>5__2;
private TargetState <info>5__3;
private bool <success>5__4;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <CaptureRoutine>d__29(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<info>5__3 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: 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)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>4__this._busy = true;
<>4__this._armTimer = 0f;
if (Object.op_Implicit((Object)(object)<>4__this.hitSound))
{
<>4__this._audio.PlayOneShot(<>4__this.hitSound, Mathf.Clamp01(<>4__this.volume));
}
<ballPos>5__1 = ((Component)<>4__this).transform.position;
<floatPos>5__2 = <ballPos>5__1 + Vector3.up * <>4__this.floatHeight;
if (Object.op_Implicit((Object)(object)<>4__this._rb))
{
<>4__this._rb.isKinematic = true;
<>4__this._rb.velocity = Vector3.zero;
<>4__this._rb.angularVelocity = Vector3.zero;
}
((Component)<>4__this).transform.position = <floatPos>5__2;
if (<>4__this.suckTime > 0f)
{
<>2__current = (object)new WaitForSeconds(<>4__this.suckTime);
<>1__state = 1;
return true;
}
goto IL_0182;
case 1:
<>1__state = -1;
goto IL_0182;
case 2:
<>1__state = -1;
<>2__current = <>4__this.ShakeBall();
<>1__state = 3;
return true;
case 3:
<>1__state = -1;
((Trap)<>4__this).photonView.RPC("RPC_CaptureResult", (RpcTarget)1, new object[1] { <success>5__4 });
if (<success>5__4)
{
if (Object.op_Implicit((Object)(object)<>4__this.captureSound))
{
<>4__this._audio.PlayOneShot(<>4__this.captureSound, Mathf.Clamp01(<>4__this.volume));
}
<>4__this.FinalizeSuccess(<info>5__3, target);
break;
}
if (Object.op_Implicit((Object)(object)<>4__this.breakSound))
{
<>4__this._audio.PlayOneShot(<>4__this.breakSound, Mathf.Clamp01(<>4__this.volume));
}
<>2__current = <>4__this.ReleaseTarget(<info>5__3);
<>1__state = 4;
return true;
case 4:
{
<>1__state = -1;
break;
}
IL_0182:
<info>5__3 = <>4__this.PrepareTarget(target);
<success>5__4 = Random.Range(0, 2) == 0;
<>2__current = <>4__this.SuckTarget(<info>5__3);
<>1__state = 2;
return true;
}
if (Object.op_Implicit((Object)(object)<>4__this._rb))
{
<>4__this._rb.isKinematic = false;
}
<>4__this._busy = false;
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <ReleaseTarget>d__36 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public TargetState st;
public RepoPokeball <>4__this;
private Vector3 <endPos>5__1;
private Quaternion <endRot>5__2;
private Vector3 <endScale>5__3;
private int <i>5__4;
private Behaviour <b>5__5;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ReleaseTarget>d__36(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<b>5__5 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: 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_0040: 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_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: 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_00c7: Expected O, but got Unknown
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<endPos>5__1 = st.WorldPos;
<endRot>5__2 = st.WorldRot;
<endScale>5__3 = st.LocalScale;
st.Transform.position = <endPos>5__1;
st.Transform.rotation = <endRot>5__2;
st.Transform.localScale = <endScale>5__3;
if (<>4__this.suckTime > 0f)
{
<>2__current = (object)new WaitForSeconds(<>4__this.suckTime);
<>1__state = 1;
return true;
}
break;
case 1:
<>1__state = -1;
break;
}
if (SemiFunc.IsMultiplayer())
{
((Trap)<>4__this).photonView.RPC("RPC_SetScale", (RpcTarget)1, new object[2]
{
Object.op_Implicit((Object)(object)st.PV) ? st.PV.ViewID : (-1),
st.LocalScale
});
}
st.Transform.SetParent(st.Parent, true);
st.Transform.localScale = st.LocalScale;
if (Object.op_Implicit((Object)(object)st.Phys) && Object.op_Implicit((Object)(object)st.Phys.rb))
{
st.Phys.rb.isKinematic = false;
}
if (Object.op_Implicit((Object)(object)st.EnemyParent))
{
((Behaviour)st.EnemyParent).enabled = st.EnemyParentEnabled;
}
if (Object.op_Implicit((Object)(object)st.EnemyOnScreen))
{
((Behaviour)st.EnemyOnScreen).enabled = st.EnemyOnScreenEnabled;
}
if (Object.op_Implicit((Object)(object)st.EnemyPlayerDistance))
{
((Behaviour)st.EnemyPlayerDistance).enabled = st.EnemyPlayerDistanceEnabled;
}
if (st.DisabledBehaviours != null)
{
<i>5__4 = 0;
while (<i>5__4 < st.DisabledBehaviours.Count)
{
<b>5__5 = st.DisabledBehaviours[<i>5__4];
if (Object.op_Implicit((Object)(object)<b>5__5))
{
<b>5__5.enabled = true;
}
<b>5__5 = null;
<i>5__4++;
}
}
if (Object.op_Implicit((Object)(object)st.Enemy))
{
((Behaviour)st.Enemy).enabled = true;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <ShakeBall>d__34 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public RepoPokeball <>4__this;
private Quaternion <baseRot>5__1;
private int <i>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ShakeBall>d__34(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Expected O, but got Unknown
//IL_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Expected O, but got Unknown
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<baseRot>5__1 = ((Component)<>4__this).transform.rotation;
<i>5__2 = 0;
goto IL_01a8;
case 1:
<>1__state = -1;
goto IL_00cf;
case 2:
<>1__state = -1;
goto IL_0142;
case 3:
{
<>1__state = -1;
goto IL_0195;
}
IL_01a8:
if (<i>5__2 < 3)
{
((Component)<>4__this).transform.rotation = <baseRot>5__1 * Quaternion.Euler(0f, 0f, <>4__this.tiltAngle);
if (<>4__this.tiltTime > 0f)
{
<>2__current = (object)new WaitForSeconds(<>4__this.tiltTime);
<>1__state = 1;
return true;
}
goto IL_00cf;
}
((Component)<>4__this).transform.rotation = <baseRot>5__1;
return false;
IL_0195:
<i>5__2++;
goto IL_01a8;
IL_0142:
((Component)<>4__this).transform.rotation = <baseRot>5__1;
if (<>4__this.tiltTime > 0f)
{
<>2__current = (object)new WaitForSeconds(<>4__this.tiltTime);
<>1__state = 3;
return true;
}
goto IL_0195;
IL_00cf:
((Component)<>4__this).transform.rotation = <baseRot>5__1 * Quaternion.Euler(0f, 0f, 0f - <>4__this.tiltAngle);
if (<>4__this.tiltTime > 0f)
{
<>2__current = (object)new WaitForSeconds(<>4__this.tiltTime);
<>1__state = 2;
return true;
}
goto IL_0142;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <SuckTarget>d__33 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public TargetState st;
public RepoPokeball <>4__this;
private Vector3 <endPos>5__1;
private Quaternion <endRot>5__2;
private Vector3 <endScale>5__3;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <SuckTarget>d__33(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//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_003a: 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)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: 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)
//IL_0065: 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_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Expected O, but got Unknown
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<endPos>5__1 = ((Component)<>4__this).transform.position;
<endRot>5__2 = Quaternion.identity;
<endScale>5__3 = Vector3.one * 0.01f;
st.Transform.position = <endPos>5__1;
st.Transform.rotation = <endRot>5__2;
st.Transform.localScale = <endScale>5__3;
st.Transform.SetParent(((Component)<>4__this).transform, true);
if (SemiFunc.IsMultiplayer())
{
((Trap)<>4__this).photonView.RPC("RPC_SetScale", (RpcTarget)1, new object[2]
{
Object.op_Implicit((Object)(object)st.PV) ? st.PV.ViewID : (-1),
<endScale>5__3
});
}
if (<>4__this.suckTime > 0f)
{
<>2__current = (object)new WaitForSeconds(<>4__this.suckTime);
<>1__state = 1;
return true;
}
break;
case 1:
<>1__state = -1;
break;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public AudioClip hitSound;
public AudioClip breakSound;
public AudioClip captureSound;
public float volume = 0.2f;
public float captureChance = 0.5f;
public float armTime = 2f;
public float floatHeight = 1.2f;
public float suckTime = 0.4f;
public float tiltAngle = 18f;
public float tiltTime = 0.35f;
public float targetCooldown = 1f;
public float rpcMinInterval = 0.12f;
private AudioSource _audio;
private bool _grabbedPrev;
private float _armTimer;
private bool _busy;
private Rigidbody _rb;
private float _nextRpcTime;
private static readonly Dictionary<int, float> GlobalCooldown = new Dictionary<int, float>();
private static readonly object GlobalLock = new object();
private readonly Dictionary<int, float> _localCooldown = new Dictionary<int, float>();
public override void Start()
{
((Trap)this).Start();
_audio = ((Component)this).GetComponent<AudioSource>();
if (!Object.op_Implicit((Object)(object)_audio))
{
_audio = ((Component)this).gameObject.AddComponent<AudioSource>();
}
_audio.playOnAwake = false;
_audio.loop = false;
_audio.spatialBlend = 1f;
_audio.rolloffMode = (AudioRolloffMode)0;
_audio.minDistance = 4f;
_audio.maxDistance = 28f;
_rb = ((Component)this).GetComponent<Rigidbody>();
}
public override void Update()
{
((Trap)this).Update();
_armTimer -= Time.deltaTime;
bool flag = (Object)(object)base.physGrabObject != (Object)null && base.physGrabObject.grabbed;
if (!flag && _grabbedPrev)
{
_armTimer = armTime;
}
_grabbedPrev = flag;
}
private void OnCollisionEnter(Collision c)
{
if (!_busy && (!((Object)(object)base.physGrabObject != (Object)null) || !base.physGrabObject.grabbed) && !(_armTimer <= 0f))
{
Transform transform = c.transform;
if (Object.op_Implicit((Object)(object)transform) && !((Object)(object)transform == (Object)(object)((Component)this).transform))
{
TryBeginCapture(((Component)transform).gameObject);
}
}
}
private int GetTargetKey(GameObject go)
{
if (!Object.op_Implicit((Object)(object)go))
{
return 0;
}
PhotonView componentInParent = go.GetComponentInParent<PhotonView>();
return Object.op_Implicit((Object)(object)componentInParent) ? componentInParent.ViewID : ((Object)go).GetInstanceID();
}
private bool IsCooling(int key)
{
if (key == 0)
{
return false;
}
float unscaledTime = Time.unscaledTime;
if (_localCooldown.TryGetValue(key, out var value) && value > unscaledTime)
{
return true;
}
lock (GlobalLock)
{
if (GlobalCooldown.TryGetValue(key, out var value2) && value2 > unscaledTime)
{
return true;
}
}
return false;
}
private void ArmCooldown(int key)
{
if (key == 0)
{
return;
}
float num = Time.unscaledTime + Mathf.Max(0.01f, targetCooldown);
_localCooldown[key] = num;
lock (GlobalLock)
{
if (!GlobalCooldown.TryGetValue(key, out var value) || value < num)
{
GlobalCooldown[key] = num;
}
}
}
private void TryBeginCapture(GameObject hit)
{
if (_busy)
{
return;
}
RepoTarget target = ResolveTarget(hit);
if ((Object)(object)target.Target == (Object)null)
{
return;
}
int targetKey = GetTargetKey(target.Target);
if (IsCooling(targetKey))
{
return;
}
if (SemiFunc.IsMultiplayer() && !PhotonNetwork.IsMasterClient)
{
if (!(Time.unscaledTime < _nextRpcTime))
{
_nextRpcTime = Time.unscaledTime + Mathf.Max(0.01f, rpcMinInterval);
PhotonView componentInParent = target.Target.GetComponentInParent<PhotonView>();
ArmCooldown(targetKey);
base.photonView.RPC("RPC_BeginCapture", (RpcTarget)2, new object[2]
{
Object.op_Implicit((Object)(object)componentInParent) ? componentInParent.ViewID : (-1),
(int)target.Kind
});
}
}
else
{
ArmCooldown(targetKey);
((MonoBehaviour)this).StartCoroutine(CaptureRoutine(target));
}
}
[PunRPC]
private void RPC_BeginCapture(int viewID, int kindInt)
{
if (_busy || viewID == -1)
{
return;
}
PhotonView val = PhotonView.Find(viewID);
if (Object.op_Implicit((Object)(object)val))
{
if (!IsCooling(viewID))
{
ArmCooldown(viewID);
((MonoBehaviour)this).StartCoroutine(CaptureRoutine(new RepoTarget(((Component)val).gameObject, (RepoTargetKind)kindInt)));
}
}
}
[IteratorStateMachine(typeof(<CaptureRoutine>d__29))]
private IEnumerator CaptureRoutine(RepoTarget target)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <CaptureRoutine>d__29(0)
{
<>4__this = this,
target = target
};
}
[PunRPC]
private void RPC_CaptureResult(bool success)
{
if (success)
{
if (Object.op_Implicit((Object)(object)captureSound))
{
_audio.PlayOneShot(captureSound, Mathf.Clamp01(volume));
}
}
else if (Object.op_Implicit((Object)(object)breakSound))
{
_audio.PlayOneShot(breakSound, Mathf.Clamp01(volume));
}
}
private RepoTarget ResolveTarget(GameObject hit)
{
EnemyParent componentInParent = hit.GetComponentInParent<EnemyParent>();
if (Object.op_Implicit((Object)(object)componentInParent))
{
return new RepoTarget(((Component)componentInParent).gameObject, RepoTargetKind.Enemy);
}
Enemy componentInParent2 = hit.GetComponentInParent<Enemy>();
if (Object.op_Implicit((Object)(object)componentInParent2))
{
return new RepoTarget(((Component)componentInParent2).gameObject, RepoTargetKind.Enemy);
}
PlayerAvatar componentInParent3 = hit.GetComponentInParent<PlayerAvatar>();
if (Object.op_Implicit((Object)(object)componentInParent3))
{
return new RepoTarget(((Component)componentInParent3).gameObject, RepoTargetKind.Player);
}
ValuableObject componentInParent4 = hit.GetComponentInParent<ValuableObject>();
if (Object.op_Implicit((Object)(object)componentInParent4))
{
return new RepoTarget(((Component)componentInParent4).gameObject, RepoTargetKind.Valuable);
}
PhysGrabObject componentInParent5 = hit.GetComponentInParent<PhysGrabObject>();
if (Object.op_Implicit((Object)(object)componentInParent5))
{
return new RepoTarget(((Component)componentInParent5).gameObject, RepoTargetKind.Item);
}
return new RepoTarget(null, RepoTargetKind.None);
}
private TargetState PrepareTarget(RepoTarget target)
{
//IL_0051: 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)
//IL_0067: 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)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: 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_01f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0206: Unknown result type (might be due to invalid IL or missing references)
TargetState targetState = new TargetState
{
Target = target.Target,
Kind = target.Kind,
Transform = target.Target.transform,
Parent = target.Target.transform.parent,
LocalPos = target.Target.transform.localPosition,
LocalRot = target.Target.transform.localRotation,
LocalScale = target.Target.transform.localScale,
WorldPos = target.Target.transform.position,
WorldRot = target.Target.transform.rotation,
PV = target.Target.GetComponentInParent<PhotonView>(),
Enemy = target.Target.GetComponentInParent<Enemy>(),
Player = target.Target.GetComponentInParent<PlayerAvatar>(),
Valuable = target.Target.GetComponentInParent<ValuableObject>(),
Phys = target.Target.GetComponentInParent<PhysGrabObject>(),
EnemyParent = target.Target.GetComponentInParent<EnemyParent>(),
EnemyOnScreen = target.Target.GetComponentInParent<EnemyOnScreen>(),
EnemyPlayerDistance = target.Target.GetComponentInParent<EnemyPlayerDistance>()
};
if (Object.op_Implicit((Object)(object)targetState.Phys))
{
if (targetState.Phys.playerGrabbing != null)
{
for (int i = 0; i < targetState.Phys.playerGrabbing.Count; i++)
{
PhysGrabber val = targetState.Phys.playerGrabbing[i];
if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)targetState.PV))
{
val.ReleaseObject(targetState.PV.ViewID, 0.05f);
}
}
}
if (Object.op_Implicit((Object)(object)targetState.Phys.rb))
{
targetState.Phys.rb.velocity = Vector3.zero;
targetState.Phys.rb.angularVelocity = Vector3.zero;
targetState.Phys.rb.isKinematic = true;
}
}
if (Object.op_Implicit((Object)(object)targetState.Enemy))
{
targetState.Enemy.FreezeTimer = 2f;
}
if (Object.op_Implicit((Object)(object)targetState.EnemyParent))
{
targetState.EnemyParentEnabled = ((Behaviour)targetState.EnemyParent).enabled;
((Behaviour)targetState.EnemyParent).enabled = false;
((MonoBehaviour)targetState.EnemyParent).StopAllCoroutines();
}
if (Object.op_Implicit((Object)(object)targetState.EnemyOnScreen))
{
targetState.EnemyOnScreenEnabled = ((Behaviour)targetState.EnemyOnScreen).enabled;
((Behaviour)targetState.EnemyOnScreen).enabled = false;
((MonoBehaviour)targetState.EnemyOnScreen).StopAllCoroutines();
}
if (Object.op_Implicit((Object)(object)targetState.EnemyPlayerDistance))
{
targetState.EnemyPlayerDistanceEnabled = ((Behaviour)targetState.EnemyPlayerDistance).enabled;
((Behaviour)targetState.EnemyPlayerDistance).enabled = false;
((MonoBehaviour)targetState.EnemyPlayerDistance).StopAllCoroutines();
}
if (Object.op_Implicit((Object)(object)targetState.Player))
{
PlayerHealth playerHealth = targetState.Player.playerHealth;
if (Object.op_Implicit((Object)(object)playerHealth))
{
playerHealth.HurtFreezeOverride(1.5f);
}
}
if (Object.op_Implicit((Object)(object)targetState.Enemy))
{
((Behaviour)targetState.Enemy).enabled = false;
((MonoBehaviour)targetState.Enemy).StopAllCoroutines();
targetState.DisabledBehaviours = new List<Behaviour>();
Behaviour[] componentsInChildren = targetState.Target.GetComponentsInChildren<Behaviour>(true);
foreach (Behaviour val2 in componentsInChildren)
{
if (Object.op_Implicit((Object)(object)val2) && val2 != targetState.Enemy && !(val2 is PhotonView) && val2.enabled)
{
val2.enabled = false;
targetState.DisabledBehaviours.Add(val2);
}
}
}
return targetState;
}
[IteratorStateMachine(typeof(<SuckTarget>d__33))]
private IEnumerator SuckTarget(TargetState st)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <SuckTarget>d__33(0)
{
<>4__this = this,
st = st
};
}
[IteratorStateMachine(typeof(<ShakeBall>d__34))]
private IEnumerator ShakeBall()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ShakeBall>d__34(0)
{
<>4__this = this
};
}
private void FinalizeSuccess(TargetState st, RepoTarget target)
{
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Expected O, but got Unknown
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
string text = target.Kind.ToString();
string targetNameStrict = GetTargetNameStrict(st, target.Kind);
RepoDexBridge.AddLocalDetailed("Item", "RepoBall", text, targetNameStrict);
if (SemiFunc.IsMultiplayer())
{
object[] array = new object[5]
{
"Item",
"RepoBall",
DateTime.UtcNow.Ticks,
string.IsNullOrWhiteSpace(text) ? "Object" : text.Trim(),
string.IsNullOrWhiteSpace(targetNameStrict) ? "Unknown" : targetNameStrict.Trim()
};
RaiseEventOptions val = new RaiseEventOptions
{
Receivers = (ReceiverGroup)0
};
PhotonNetwork.RaiseEvent((byte)187, (object)array, val, SendOptions.SendReliable);
}
if (Object.op_Implicit((Object)(object)st.PV) && PhotonNetwork.IsMasterClient)
{
PhotonNetwork.Destroy(st.PV);
}
else
{
Object.Destroy((Object)(object)st.Target);
}
}
[IteratorStateMachine(typeof(<ReleaseTarget>d__36))]
private IEnumerator ReleaseTarget(TargetState st)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ReleaseTarget>d__36(0)
{
<>4__this = this,
st = st
};
}
private string GetTargetNameStrict(TargetState st, RepoTargetKind kind)
{
switch (kind)
{
case RepoTargetKind.Player:
if (Object.op_Implicit((Object)(object)st.Player) && Object.op_Implicit((Object)(object)st.Player.photonView) && st.Player.photonView.Owner != null)
{
return st.Player.photonView.Owner.NickName;
}
return ((Object)st.Target).name;
case RepoTargetKind.Item:
{
ItemAttributes componentInParent2 = st.Target.GetComponentInParent<ItemAttributes>();
if (Object.op_Implicit((Object)(object)componentInParent2))
{
if ((Object)(object)componentInParent2.item != (Object)null && !string.IsNullOrEmpty(componentInParent2.item.itemName))
{
return componentInParent2.item.itemName;
}
if (!string.IsNullOrEmpty(componentInParent2.itemName))
{
return componentInParent2.itemName;
}
}
return ((Object)st.Target).name;
}
case RepoTargetKind.Enemy:
if (Object.op_Implicit((Object)(object)st.EnemyParent) && !string.IsNullOrEmpty(st.EnemyParent.enemyName))
{
return st.EnemyParent.enemyName;
}
return ((Object)st.Target).name;
default:
{
ValuableObject componentInParent = st.Target.GetComponentInParent<ValuableObject>();
if (Object.op_Implicit((Object)(object)componentInParent))
{
return ((Object)st.Target).name;
}
return ((Object)st.Target).name;
}
}
}
[PunRPC]
private void RPC_SetScale(int viewID, Vector3 scale)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
if (viewID != -1)
{
PhotonView val = PhotonView.Find(viewID);
if (Object.op_Implicit((Object)(object)val))
{
((Component)val).transform.localScale = scale;
}
}
}
}
public static class RepoDexBridge
{
private struct Pending
{
public string UsedKind;
public string UsedName;
public string TargetKind;
public string TargetName;
}
private static readonly List<Pending> _pending = new List<Pending>();
private static GameObject FindReceiver()
{
return GameObject.Find("RepoDexReceiver_EMPRESS");
}
public static void AddLocal(string kind, string name)
{
GameObject val = FindReceiver();
if (!Object.op_Implicit((Object)(object)val))
{
_pending.Add(new Pending
{
UsedKind = kind,
UsedName = name,
TargetKind = kind,
TargetName = name
});
return;
}
RepoDexReceiver component = val.GetComponent<RepoDexReceiver>();
if (!Object.op_Implicit((Object)(object)component))
{
_pending.Add(new Pending
{
UsedKind = kind,
UsedName = name,
TargetKind = kind,
TargetName = name
});
}
else
{
component.AddLocal(kind, name);
}
}
public static void AddLocalDetailed(string usedKind, string usedName, string targetKind, string targetName)
{
GameObject val = FindReceiver();
if (!Object.op_Implicit((Object)(object)val))
{
_pending.Add(new Pending
{
UsedKind = usedKind,
UsedName = usedName,
TargetKind = targetKind,
TargetName = targetName
});
return;
}
RepoDexReceiver component = val.GetComponent<RepoDexReceiver>();
if (!Object.op_Implicit((Object)(object)component))
{
_pending.Add(new Pending
{
UsedKind = usedKind,
UsedName = usedName,
TargetKind = targetKind,
TargetName = targetName
});
}
else
{
component.AddLocalDetailed(usedKind, usedName, targetKind, targetName);
}
}
public static void FlushPending()
{
if (_pending.Count == 0)
{
return;
}
GameObject val = FindReceiver();
if (!Object.op_Implicit((Object)(object)val))
{
return;
}
RepoDexReceiver component = val.GetComponent<RepoDexReceiver>();
if (Object.op_Implicit((Object)(object)component))
{
for (int i = 0; i < _pending.Count; i++)
{
Pending pending = _pending[i];
component.AddLocalDetailed(pending.UsedKind, pending.UsedName, pending.TargetKind, pending.TargetName);
}
_pending.Clear();
}
}
}
}