Decompiled source of Pacman Gamemode v1.0.0
EmpressGhosts.dll
Decompiled 2 days agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; [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")] [assembly: AssemblyProduct("EmpressGhosts")] [assembly: AssemblyTitle("EmpressGhosts")] [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 EmpressMods.GhostizePlayersOnly { [BepInPlugin("com.empress.repo.ghostize_players", "GhostizePlayersOnly", "1.0.0")] public class GhostizePlugin : BaseUnityPlugin { public const string PluginGuid = "com.empress.repo.ghostize_players"; public const string PluginName = "GhostizePlayersOnly"; public const string PluginVersion = "1.0.0"; internal static ManualLogSource Log = null; internal static Harmony Harmony = null; internal static AssetBundle Bundle; internal static readonly GameObject[] Avatars = (GameObject[])(object)new GameObject[6]; internal const bool ReplaceMenuAvatarsToo = true; internal const bool HideLocalInGameplay = true; internal const float PlayerYOffset = 0.9f; private void Awake() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Harmony = new Harmony("com.empress.repo.ghostize_players"); try { Harmony.PatchAll(Assembly.GetExecutingAssembly()); Log.LogInfo((object)"GhostizePlayersOnly 1.0.0 loaded. Players only—no enemies, no nonsense."); } catch (Exception arg) { Log.LogError((object)$"Harmony patching failed: {arg}"); } } private void OnDestroy() { try { Harmony harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } catch { } } internal static bool EnsureBundle() { if ((Object)(object)Bundle != (Object)null && (Object)(object)Avatars[0] != (Object)null) { return true; } try { string location = Assembly.GetExecutingAssembly().Location; string text = Path.GetDirectoryName(location) ?? "."; string text2 = Path.Combine(text, "ghosts"); if ((Object)(object)Bundle == (Object)null) { if (File.Exists(text2)) { Bundle = AssetBundle.LoadFromFile(text2); } else { string[] files = Directory.GetFiles(text, "ghosts.*", SearchOption.TopDirectoryOnly); string[] array = files; foreach (string text3 in array) { Bundle = AssetBundle.LoadFromFile(text3); if ((Object)(object)Bundle != (Object)null) { Log.LogInfo((object)("[Ghosts] Loaded bundle '" + Path.GetFileName(text3) + "'.")); break; } } } } if ((Object)(object)Bundle == (Object)null) { Log.LogError((object)"[Ghosts] Could not load AssetBundle 'ghosts' (or ghosts.*). Place it next to the DLL."); return false; } string[] allAssetNames = Bundle.GetAllAssetNames(); if (allAssetNames == null || allAssetNames.Length == 0) { Log.LogError((object)"[Ghosts] Bundle is empty."); return false; } for (int j = 0; j < 6; j++) { string text4 = $"avatar{j + 1}"; GameObject val = null; try { val = Bundle.LoadAsset<GameObject>(text4); } catch { } if ((Object)(object)val == (Object)null) { string[] array2 = allAssetNames; foreach (string text5 in array2) { string text6 = Path.GetFileNameWithoutExtension(text5)?.ToLowerInvariant(); if (text6 == text4) { try { val = Bundle.LoadAsset<GameObject>(text5); } catch { } if ((Object)(object)val != (Object)null) { break; } } } } if ((Object)(object)val == (Object)null) { Log.LogError((object)("[Ghosts] Missing prefab '" + text4 + "' in bundle.")); return false; } Avatars[j] = val; } Log.LogInfo((object)"[Ghosts] Loaded avatar1..avatar6."); return true; } catch (Exception arg) { Log.LogError((object)$"[Ghosts] Error loading bundle: {arg}"); return false; } } internal static void DisableAllRenderers(GameObject root) { if (Object.op_Implicit((Object)(object)root)) { Renderer[] componentsInChildren = root.GetComponentsInChildren<Renderer>(true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].enabled = false; } } } internal static int PickIndexForActor(PhotonView pv) { int num = 1; try { num = ((!((Object)(object)pv != (Object)null) || pv.OwnerActorNr <= 0) ? 1 : pv.OwnerActorNr); } catch { num = 1; } return (num - 1) % 6; } } public sealed class GhostMarker : MonoBehaviour { } [HarmonyPatch(typeof(PlayerAvatarVisuals), "Start")] public static class PlayerAvatarVisuals_Start_Patch { private static void Postfix(PlayerAvatarVisuals __instance) { //IL_0082: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) try { if (!GhostizePlugin.EnsureBundle()) { return; } bool isMenuAvatar = __instance.isMenuAvatar; bool flag = false; if ((Object)(object)((Component)((Component)__instance).transform).GetComponentInChildren<GhostMarker>(true) != (Object)null) { return; } float num = 0f; Bounds bounds; if ((Object)(object)__instance.meshParent != (Object)null) { Renderer[] componentsInChildren = __instance.meshParent.GetComponentsInChildren<Renderer>(true); if (componentsInChildren != null && componentsInChildren.Length != 0) { bounds = componentsInChildren[0].bounds; Vector3 center = ((Bounds)(ref bounds)).center; bounds = componentsInChildren[0].bounds; Bounds val = default(Bounds); ((Bounds)(ref val))..ctor(center, ((Bounds)(ref bounds)).size); for (int i = 1; i < componentsInChildren.Length; i++) { ((Bounds)(ref val)).Encapsulate(componentsInChildren[i].bounds); } num = ((Bounds)(ref val)).size.y; } GhostizePlugin.DisableAllRenderers(__instance.meshParent); if (!__instance.meshParent.activeSelf) { __instance.meshParent.SetActive(true); } } PhotonView val2 = (((Object)(object)__instance.playerAvatar != (Object)null) ? __instance.playerAvatar.photonView : null); int num2 = GhostizePlugin.PickIndexForActor(val2); GameObject val3 = ((num2 >= 0 && num2 < GhostizePlugin.Avatars.Length) ? GhostizePlugin.Avatars[num2] : null); if ((Object)(object)val3 == (Object)null) { GhostizePlugin.Log.LogError((object)"[Ghosts] Prefab selection failed."); return; } GameObject val4 = Object.Instantiate<GameObject>(val3, ((Object)(object)__instance.meshParent != (Object)null) ? __instance.meshParent.transform : ((Component)__instance).transform); ((Object)val4).name = $"Empress_Ghost_{num2 + 1}"; Transform transform = val4.transform; transform.localPosition = Vector3.up * 0.9f; transform.localRotation = Quaternion.identity; transform.localScale = Vector3.one; float num3 = 0f; Renderer[] componentsInChildren2 = val4.GetComponentsInChildren<Renderer>(true); if (componentsInChildren2 != null && componentsInChildren2.Length != 0) { bounds = componentsInChildren2[0].bounds; Vector3 center2 = ((Bounds)(ref bounds)).center; bounds = componentsInChildren2[0].bounds; Bounds val5 = default(Bounds); ((Bounds)(ref val5))..ctor(center2, ((Bounds)(ref bounds)).size); for (int j = 1; j < componentsInChildren2.Length; j++) { ((Bounds)(ref val5)).Encapsulate(componentsInChildren2[j].bounds); } num3 = ((Bounds)(ref val5)).size.y; } if (num > 0f && num3 > 0f) { float num4 = num / num3; transform.localScale *= num4; } val4.AddComponent<GhostMarker>(); bool flag2 = !((Object)(object)val2 != (Object)null) || !val2.IsMine || isMenuAvatar; Renderer[] array = componentsInChildren2; foreach (Renderer val6 in array) { val6.enabled = flag2; } if (!flag2) { GhostizePlugin.Log.LogDebug((object)"[Ghosts] Hid local player's ghost (camera safety)."); } } catch (Exception ex) { GhostizePlugin.Log.LogWarning((object)("[Ghosts] Player replacement failed: " + ex)); } } } }
EmpressPacman.dll
Decompiled 2 days ago
The result has been truncated due to the large size, download it to view full contents!
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 BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Empress.KittyCurse; using ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using TMPro; using UnityEngine; using UnityEngine.AI; using UnityEngine.SceneManagement; [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")] [assembly: AssemblyProduct("EmpressPacman")] [assembly: AssemblyTitle("EmpressPacman")] [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 Empress.Pacman { public class PacDot : MonoBehaviour { private int _id; private bool _collected; public void Init(int id) { _id = id; } private void OnTriggerEnter(Collider other) { if (_collected) { return; } PlayerAvatar val = ((Component)other).GetComponentInParent<PlayerAvatar>(); if (!Object.op_Implicit((Object)(object)val)) { PlayerController componentInParent = ((Component)other).GetComponentInParent<PlayerController>(); if (Object.op_Implicit((Object)(object)componentInParent)) { val = componentInParent.playerAvatarScript; } } if (Object.op_Implicit((Object)(object)val)) { _collected = true; PacmanEventRouter.BroadcastDotCollected(_id); } } } public static class PacDotsManager { private class DotHost : MonoBehaviour { } [CompilerGenerated] private sealed class <DelayedWin>d__12 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float delay; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedWin>d__12(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(delay); <>1__state = 1; return true; case 1: <>1__state = -1; PacmanPlugin.AdvanceLevelOrWinRound(); 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(); } } private static readonly Dictionary<int, GameObject> _dots = new Dictionary<int, GameObject>(); private static int _nextId; private static bool _built; private static Material _mat; public static int RemainingDots => _dots.Count; public static int TotalDots { get; private set; } public static void CreateOrRebuild(float spacing, float scale, int layer, bool usePathPoints) { ClearAll(); _nextId = 0; TotalDots = 0; try { if (usePathPoints) { BuildFromPathPoints(spacing, scale, layer); } else { BuildAroundTruck(spacing, scale, layer); } _built = true; TotalDots = _dots.Count; ManualLogSource log = PacmanPlugin.Log; if (log != null) { log.LogInfo((object)$"[PacDots] Built {_dots.Count} reachable dots."); } } catch (Exception arg) { ManualLogSource log2 = PacmanPlugin.Log; if (log2 != null) { log2.LogError((object)$"PacDots build failed: {arg}"); } } } public static void LocalDotCollected(int dotId) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) if (_dots.TryGetValue(dotId, out GameObject value)) { Vector3 position = value.transform.position; Object.Destroy((Object)(object)value); _dots.Remove(dotId); if (Object.op_Implicit((Object)(object)PacmanPlugin.DotCollectClip)) { AudioSource.PlayClipAtPoint(PacmanPlugin.DotCollectClip, position, PacmanPlugin.DotCollectVolume.Value); } if (_dots.Count <= 0 && KittyManager.IsAuthority()) { PacmanEventRouter.BroadcastRoundWin(); DotHost dotHost = EnsureHost(); ((MonoBehaviour)dotHost).StartCoroutine(DelayedWin((PacmanPlugin.Log != null) ? PacmanPlugin.WinSwitchDelay.Value : 1f)); } } } [IteratorStateMachine(typeof(<DelayedWin>d__12))] private static IEnumerator DelayedWin(float delay) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedWin>d__12(0) { delay = delay }; } private static void ClearAll() { foreach (KeyValuePair<int, GameObject> dot in _dots) { if (Object.op_Implicit((Object)(object)dot.Value)) { Object.Destroy((Object)(object)dot.Value); } } _dots.Clear(); } private static void BuildFromPathPoints(float spacing, float scale, int layer) { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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_00d0: 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_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) LevelGenerator instance = LevelGenerator.Instance; if ((Object)(object)instance == (Object)null || !instance.Generated || instance.LevelPathPoints == null || instance.LevelPathPoints.Count == 0) { return; } Vector3? val = null; float num = 0f; for (int i = 0; i < instance.LevelPathPoints.Count; i++) { LevelPoint val2 = instance.LevelPathPoints[i]; if (!Object.op_Implicit((Object)(object)val2)) { continue; } Vector3 position = ((Component)val2).transform.position; if (!val.HasValue) { TrySpawnDot(position, scale, layer); val = position; continue; } float num2 = Vector3.Distance(val.Value, position) + num; Vector3 val3 = position - val.Value; Vector3 normalized = ((Vector3)(ref val3)).normalized; float num3 = num2; float num4 = spacing - num; while (num3 >= spacing) { Vector3 position2 = val.Value + normalized * num4; TrySpawnDot(position2, scale, layer); num4 += spacing; num3 -= spacing; } num = num3; val = position; } } private static void BuildAroundTruck(float spacing, float scale, int layer) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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) LevelGenerator instance = LevelGenerator.Instance; if (!((Object)(object)instance == (Object)null) && instance.Generated && !((Object)(object)instance.LevelPathTruck == (Object)null)) { Vector3 position = ((Component)instance.LevelPathTruck).transform.position; for (float num = 0f; num < 360f; num += 10f) { Vector3 val = Quaternion.Euler(0f, num, 0f) * Vector3.forward; Vector3 position2 = position + val * spacing * 2f; TrySpawnDot(position2, scale, layer); } } } private static void TrySpawnDot(Vector3 position, float scale, int layer) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(position, ref val, 0.6f, -1)) { position = ((NavMeshHit)(ref val)).position; GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)val2).name = $"pacdot_{_nextId}"; val2.layer = layer; val2.transform.position = position + Vector3.up * 0.7f; float num = Mathf.Max(0.05f, scale); val2.transform.localScale = Vector3.one * num; SphereCollider component = val2.GetComponent<SphereCollider>(); if (Object.op_Implicit((Object)(object)component)) { ((Collider)component).isTrigger = true; component.radius = 1.2f / num; } Rigidbody val3 = val2.AddComponent<Rigidbody>(); val3.isKinematic = true; val3.useGravity = false; if ((Object)(object)_mat == (Object)null) { Shader val4 = Shader.Find("Standard"); _mat = new Material(val4); _mat.color = Color.cyan; _mat.EnableKeyword("_EMISSION"); _mat.SetColor("_EmissionColor", new Color(0.1f, 0.4f, 1f, 1f)); } Renderer component2 = val2.GetComponent<Renderer>(); if (Object.op_Implicit((Object)(object)component2)) { component2.sharedMaterial = _mat; } val2.AddComponent<PacDot>().Init(_nextId); _dots[_nextId] = val2; _nextId++; } } private static DotHost EnsureHost() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown DotHost dotHost = Object.FindObjectOfType<DotHost>(); if (!Object.op_Implicit((Object)(object)dotHost)) { GameObject val = new GameObject("PacDots_Host"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)52; dotHost = val.AddComponent<DotHost>(); } return dotHost; } } [BepInPlugin("empress.repo.pacman.blockspawns", "PacmanBlockEnemySpawns", "1.0.1")] public class PacmanBlockEnemySpawns : BaseUnityPlugin { internal static ManualLogSource Log; private Harmony _h = null; private void Awake() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; _h = new Harmony("empress.repo.pacman.blockspawns"); _h.PatchAll(); Log.LogInfo((object)"[PacmanBlockEnemySpawns] loaded"); } private void OnDestroy() { Harmony h = _h; if (h != null) { h.UnpatchSelf(); } } } [HarmonyPatch] internal static class Patch_LevelGenerator_EnemySetup { [CompilerGenerated] private sealed class <Empty>d__2 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Empty>d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; 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(); } } private static MethodBase TargetMethod() { return AccessTools.Method(typeof(LevelGenerator), "EnemySetup", (Type[])null, (Type[])null); } private static bool Prefix(ref IEnumerator __result) { __result = Empty(); return false; } [IteratorStateMachine(typeof(<Empty>d__2))] private static IEnumerator Empty() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Empty>d__2(0); } } [RequireComponent(typeof(NavMeshAgent))] [DisallowMultipleComponent] public class PacmanController : MonoBehaviour { public static PacmanController Instance; private NavMeshAgent _agent; private LayerMask _visionMask; private PlayerAvatar _target; private float _poseSendTimer; private const float PoseSendInterval = 0.2f; private Vector3 _netPos; private Quaternion _netRot; private bool _hasNetPose; private const float PoseSnapDist = 5f; private const float PoseLerpRate = 10f; private float _repathTimer; private Transform[] _levelPoints; private Transform _nextPatrol; private Animator _anim; private Vector3 _animLastPos; private bool _hasWalkBool; private AudioSource _moveLoop; private float _scaredTimer; public void Setup(LayerMask visionMask) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) _visionMask = visionMask; } public void Scare(float duration) { _scaredTimer = duration; } private void Awake() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) Instance = this; _agent = ((Component)this).GetComponent<NavMeshAgent>(); if (Object.op_Implicit((Object)(object)_agent)) { _agent.stoppingDistance = 1.2f; _agent.speed = 3.6f; _agent.acceleration = 10f; _agent.angularSpeed = 540f; } _anim = ((Component)this).GetComponent<Animator>(); _animLastPos = ((Component)this).transform.position; if (Object.op_Implicit((Object)(object)PacmanPlugin.PacmanMoveClip)) { _moveLoop = ((Component)this).gameObject.AddComponent<AudioSource>(); _moveLoop.clip = PacmanPlugin.PacmanMoveClip; _moveLoop.loop = true; _moveLoop.playOnAwake = false; _moveLoop.spatialBlend = 1f; _moveLoop.volume = PacmanPlugin.PacmanMoveVolume.Value * 0.4f; _moveLoop.dopplerLevel = 0f; _moveLoop.rolloffMode = (AudioRolloffMode)0; _moveLoop.minDistance = 2f; _moveLoop.maxDistance = 12f; } } private void Start() { //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Invalid comparison between Unknown and I4 LevelGenerator instance = LevelGenerator.Instance; if ((Object)(object)instance != (Object)null && instance.Generated && instance.LevelPathPoints != null) { _levelPoints = (from p in instance.LevelPathPoints where (Object)(object)p != (Object)null select ((Component)p).transform).ToArray(); } if ((Object)(object)_anim != (Object)null) { for (int i = 0; i < _anim.parameterCount; i++) { AnimatorControllerParameter parameter = _anim.GetParameter(i); if (parameter.name == "Walk" && (int)parameter.type == 4) { _hasWalkBool = true; } } } if (!KittyManager.IsAuthority() && Object.op_Implicit((Object)(object)_agent) && ((Behaviour)_agent).enabled) { ((Behaviour)_agent).enabled = false; } } private void OnDestroy() { if ((Object)(object)Instance == (Object)(object)this) { Instance = null; } } private void Update() { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: 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_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0195: 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_00de: Unknown result type (might be due to invalid IL or missing references) if (KittyManager.IsAuthority()) { HostTick(); if (KittyManager.CanStreamPose()) { _poseSendTimer += Time.deltaTime; if (_poseSendTimer >= 0.2f) { _poseSendTimer = 0f; PacmanEventRouter.BroadcastPose(((Component)this).transform.position, ((Component)this).transform.rotation); } } } else { ClientTick(); } Vector3 val; if (Object.op_Implicit((Object)(object)_anim) && _hasWalkBool) { bool flag = false; if (KittyManager.IsAuthority()) { if (Object.op_Implicit((Object)(object)_agent) && _agent.isOnNavMesh) { int num; if (!_agent.isStopped) { val = _agent.velocity; num = ((((Vector3)(ref val)).sqrMagnitude > 0.0001f) ? 1 : 0); } else { num = 0; } flag = (byte)num != 0; } } else { val = ((Component)this).transform.position - _animLastPos; flag = ((Vector3)(ref val)).sqrMagnitude > 0.0001f; } _anim.SetBool("Walk", flag); _animLastPos = ((Component)this).transform.position; } if (!Object.op_Implicit((Object)(object)_moveLoop)) { return; } bool flag2 = false; if (KittyManager.IsAuthority()) { if (Object.op_Implicit((Object)(object)_agent) && _agent.isOnNavMesh) { val = _agent.velocity; flag2 = ((Vector3)(ref val)).sqrMagnitude > 0.01f; } } else { val = ((Component)this).transform.position - _animLastPos; flag2 = ((Vector3)(ref val)).sqrMagnitude > 0.0001f; } if (flag2) { if (!_moveLoop.isPlaying) { _moveLoop.Play(); } } else if (_moveLoop.isPlaying) { _moveLoop.Pause(); } _moveLoop.volume = PacmanPlugin.PacmanMoveVolume.Value * 0.4f; } private void HostTick() { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_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_00b8: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) if (_scaredTimer > 0f) { _scaredTimer -= Time.deltaTime; if (!Object.op_Implicit((Object)(object)_agent) || !_agent.isOnNavMesh) { return; } _agent.speed = 2f; IReadOnlyList<PlayerAvatar> players = KittyManager.AllPlayersCached(); PlayerAvatar val = ChooseNearest(players); if (Object.op_Implicit((Object)(object)val)) { Vector3 val2 = ((Component)this).transform.position - ((Component)val).transform.position; Vector3 val3 = ((Component)this).transform.position + ((Vector3)(ref val2)).normalized * 6f; NavMeshHit val4 = default(NavMeshHit); if (NavMesh.SamplePosition(val3, ref val4, 5f, -1)) { _agent.SetDestination(((NavMeshHit)(ref val4)).position); } } return; } if (Object.op_Implicit((Object)(object)_agent)) { _agent.speed = 3.6f; } IReadOnlyList<PlayerAvatar> players2 = KittyManager.AllPlayersCached(); _target = ChooseNearestVisible(players2); if (!Object.op_Implicit((Object)(object)_agent) || !_agent.isOnNavMesh) { return; } if ((Object)(object)_target != (Object)null) { _repathTimer -= Time.deltaTime; if (_repathTimer <= 0f) { _repathTimer = 0.12f; _agent.isStopped = false; _agent.SetDestination(((Component)_target).transform.position); } } else { Patrol(); } } private PlayerAvatar ChooseNearest(IReadOnlyList<PlayerAvatar> players) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar result = null; float num = float.PositiveInfinity; for (int i = 0; i < players.Count; i++) { PlayerAvatar val = players[i]; if (Object.op_Implicit((Object)(object)val)) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); if (num2 < num) { result = val; num = num2; } } } return result; } private PlayerAvatar ChooseNearestVisible(IReadOnlyList<PlayerAvatar> players) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar result = null; float num = float.PositiveInfinity; for (int i = 0; i < players.Count; i++) { PlayerAvatar val = players[i]; if (Object.op_Implicit((Object)(object)val)) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); if (num2 < num && HasLineOfSight(val)) { result = val; num = num2; } } } return result; } private bool HasLineOfSight(PlayerAvatar player) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_006f: 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_007d: 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_0082: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)player)) { return false; } Vector3 val = ((Component)this).transform.position + Vector3.up * 1.2f; Transform val2 = null; try { val2 = (((Object)(object)player.PlayerVisionTarget != (Object)null) ? player.PlayerVisionTarget.VisionTransform : null); } catch { } Vector3 val3 = (((Object)(object)val2 != (Object)null) ? val2.position : ((Component)player).transform.position); RaycastHit val4 = default(RaycastHit); if (Physics.Linecast(val, val3, ref val4, LayerMask.op_Implicit(_visionMask))) { return (Object)(object)((Component)((RaycastHit)(ref val4)).collider).GetComponentInParent<PlayerAvatar>() == (Object)(object)player; } return true; } private void Patrol() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_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_00af: 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_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) if (_levelPoints == null || _levelPoints.Length == 0) { return; } if ((Object)(object)_nextPatrol == (Object)null || Vector3.Distance(((Component)this).transform.position, _nextPatrol.position) <= 1f) { _nextPatrol = _levelPoints[Random.Range(0, _levelPoints.Length)]; } if (Object.op_Implicit((Object)(object)_agent) && _agent.isOnNavMesh) { _agent.isStopped = false; Vector3 position = _nextPatrol.position; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(position, ref val, 3f, -1)) { position = ((NavMeshHit)(ref val)).position; } _agent.SetDestination(position); } } public void ApplyNetworkPose(Vector3 pos, Quaternion rot) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: 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) //IL_000a: Unknown result type (might be due to invalid IL or missing references) _netPos = pos; _netRot = rot; _hasNetPose = true; } private void ClientTick() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_0041: Unknown result type (might be due to invalid IL or missing references) if (_hasNetPose) { if (Vector3.Distance(((Component)this).transform.position, _netPos) > 5f) { ((Component)this).transform.SetPositionAndRotation(_netPos, _netRot); return; } ((Component)this).transform.position = Vector3.Lerp(((Component)this).transform.position, _netPos, Time.deltaTime * 10f); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, _netRot, Time.deltaTime * 10f); } } } public class PacmanEventRouter : MonoBehaviourPunCallbacks, IOnEventCallback { public enum Ev : byte { Spawn = 51, Pose, Despawn, SpawnRoll, DotCollected, RoundWin, PowerUpCollected } private static bool _callbackHooked; private static GameObject _active; private static PacmanController _ctrl; private static GameObject _prefab; internal static void SetPrefab(GameObject prefab) { _prefab = prefab; } private void OnEnable() { SceneManager.sceneLoaded += OnSceneLoaded; } private void OnDisable() { SceneManager.sceneLoaded -= OnSceneLoaded; if (_callbackHooked) { PhotonNetwork.RemoveCallbackTarget((object)this); } _callbackHooked = false; } public override void OnJoinedRoom() { EnsureCallbackHooked(); } public override void OnLeftRoom() { if (_callbackHooked) { PhotonNetwork.RemoveCallbackTarget((object)this); _callbackHooked = false; } LocalDespawn(); } private void OnSceneLoaded(Scene s, LoadSceneMode m) { LocalDespawn(); if (PhotonNetwork.InRoom) { EnsureCallbackHooked(); } } private void EnsureCallbackHooked() { if (!_callbackHooked) { PhotonNetwork.AddCallbackTarget((object)this); _callbackHooked = true; } } internal static void BroadcastSpawnRoll(bool passed, float chance) { //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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { object[] array = new object[2] { passed, chance }; PhotonNetwork.RaiseEvent((byte)54, (object)array, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } } internal static void BroadcastSpawn(Vector3 pos, Quaternion rot, int visionMask, int seed) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown CreateLocal(pos, rot, visionMask); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { object[] array = new object[4] { pos, rot, visionMask, seed }; PhotonNetwork.RaiseEvent((byte)51, (object)array, new RaiseEventOptions { Receivers = (ReceiverGroup)0 }, SendOptions.SendReliable); } } internal static void BroadcastPose(Vector3 pos, Quaternion rot) { //IL_0021: 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_0035: 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_003c: 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_004b: Expected O, but got Unknown if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { object[] array = new object[2] { pos, rot }; PhotonNetwork.RaiseEvent((byte)52, (object)array, new RaiseEventOptions { Receivers = (ReceiverGroup)0 }, SendOptions.SendUnreliable); } } internal static void BroadcastDespawn() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //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_0034: Expected O, but got Unknown LocalDespawn(); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)53, (object)null, new RaiseEventOptions { Receivers = (ReceiverGroup)0 }, SendOptions.SendReliable); } } internal static void BroadcastDotCollected(int dotId) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0033: Expected O, but got Unknown if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)55, (object)dotId, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } else { PacDotsManager.LocalDotCollected(dotId); } } internal static void BroadcastPowerUpCollected(int powerUpId) { //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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown PacPowerUpManager.RemovePowerUp(powerUpId); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)57, (object)powerUpId, new RaiseEventOptions { Receivers = (ReceiverGroup)0 }, SendOptions.SendReliable); } } internal static void BroadcastRoundWin() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //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_0034: Expected O, but got Unknown PacmanPlugin.AdvanceLevelOrWinRound(); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)56, (object)null, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } } private static void CreateLocal(Vector3 pos, Quaternion rot, int visionMask) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_active) && !((Object)(object)_prefab == (Object)null)) { NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(pos, ref val, 4f, -1)) { pos = ((NavMeshHit)(ref val)).position; } _active = Object.Instantiate<GameObject>(_prefab, pos, rot); ((Object)_active).name = "Pacman_Enemy"; NavMeshAgent component = _active.GetComponent<NavMeshAgent>(); if (Object.op_Implicit((Object)(object)component) && ((Behaviour)component).enabled) { component.Warp(pos); component.stoppingDistance = 1.2f; component.speed = 3.6f; component.acceleration = 10f; component.angularSpeed = 540f; component.autoBraking = true; } _ctrl = _active.GetComponent<PacmanController>(); if (Object.op_Implicit((Object)(object)_ctrl)) { _ctrl.Setup(LayerMask.op_Implicit(visionMask)); } } } private static void LocalDespawn() { if (Object.op_Implicit((Object)(object)_active)) { Object.Destroy((Object)(object)_active); } _active = null; _ctrl = null; } public void OnEvent(EventData e) { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) try { switch ((Ev)e.Code) { case Ev.Spawn: if (!KittyManager.IsAuthority() && e.CustomData is object[] array2 && array2.Length >= 4) { Vector3 pos = (Vector3)array2[0]; Quaternion rot = (Quaternion)array2[1]; int visionMask = (int)array2[2]; int num = (int)array2[3]; State state = Random.state; Random.InitState(num); PacDotsManager.CreateOrRebuild(PacmanPlugin.DotSpacing.Value, PacmanPlugin.DotScale.Value, PacmanPlugin.DotLayer.Value, PacmanPlugin.DotUseLevelPathPoints.Value); PacPowerUpManager.SpawnPowerUps(0.25f); Random.state = state; CreateLocal(pos, rot, visionMask); } break; case Ev.Pose: if (!KittyManager.IsAuthority() && !((Object)(object)_ctrl == (Object)null) && e.CustomData is object[] array && array.Length >= 2) { _ctrl.ApplyNetworkPose((Vector3)array[0], (Quaternion)array[1]); } break; case Ev.Despawn: LocalDespawn(); break; case Ev.SpawnRoll: break; case Ev.DotCollected: PacDotsManager.LocalDotCollected((int)e.CustomData); break; case Ev.RoundWin: break; case Ev.PowerUpCollected: PacPowerUpManager.RemovePowerUp((int)e.CustomData); break; } } catch { } } } [BepInPlugin("empress.repo.pacman", "PacmanRound", "1.0.4")] public class PacmanPlugin : BaseUnityPlugin { [CompilerGenerated] private sealed class <WaitLevelThenSpawn>d__25 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PacmanPlugin <>4__this; private float <t>5__1; private float <chance>5__2; private bool <pass>5__3; private int <seed>5__4; private State <oldState>5__5; private Transform <tSpawn>5__6; private Vector3 <pos>5__7; private Quaternion <rot>5__8; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WaitLevelThenSpawn>d__25(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <tSpawn>5__6 = null; <>1__state = -2; } private bool MoveNext() { //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: 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_0341: Unknown result type (might be due to invalid IL or missing references) //IL_034d: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (<>4__this._spawnRoutineRunning || <>4__this._spawnedThisScene) { return false; } <>4__this._spawnRoutineRunning = true; <t>5__1 = 0f; goto IL_00c2; case 1: <>1__state = -1; goto IL_00c2; case 2: <>1__state = -1; goto IL_014c; case 3: { <>1__state = -1; break; } IL_014c: if ((Object)(object)LevelGenerator.Instance == (Object)null || !LevelGenerator.Instance.Generated) { if (<t>5__1 >= 30f) { <>4__this._spawnRoutineRunning = false; return false; } <t>5__1 += Time.unscaledDeltaTime; <>2__current = null; <>1__state = 2; return true; } <t>5__1 = 0f; break; IL_00c2: if (BlockedMenuOrHub()) { if (<t>5__1 >= 30f) { <>4__this._spawnRoutineRunning = false; return false; } <t>5__1 += Time.unscaledDeltaTime; <>2__current = null; <>1__state = 1; return true; } <t>5__1 = 0f; if (!PhotonNetwork.InRoom && PhotonNetwork.IsConnected) { <>4__this._spawnRoutineRunning = false; return false; } goto IL_014c; } if (!NavMeshReady()) { if (<t>5__1 >= 30f) { <>4__this._spawnRoutineRunning = false; return false; } <t>5__1 += Time.unscaledDeltaTime; <>2__current = null; <>1__state = 3; return true; } if (!KittyManager.IsAuthority()) { <>4__this._spawnRoutineRunning = false; return false; } if ((Object)(object)PacmanPrefab == (Object)null) { <>4__this._spawnRoutineRunning = false; return false; } <chance>5__2 = Mathf.Clamp01(SpawnChance?.Value ?? 1f); <pass>5__3 = Random.value <= <chance>5__2; if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PacmanEventRouter.BroadcastSpawnRoll(<pass>5__3, <chance>5__2); } if (!<pass>5__3) { <>4__this._spawnRoutineRunning = false; <>4__this._spawnedThisScene = false; return false; } <seed>5__4 = Random.Range(0, 1000000); <oldState>5__5 = Random.state; Random.InitState(<seed>5__4); <tSpawn>5__6 = PickRandomSpawnPoint(); <pos>5__7 = <tSpawn>5__6.position + Vector3.up * 0.2f; <rot>5__8 = <tSpawn>5__6.rotation; PacDotsManager.CreateOrRebuild(DotSpacing.Value, DotScale.Value, DotLayer.Value, DotUseLevelPathPoints.Value); PacPowerUpManager.SpawnPowerUps(0.4f); Random.state = <oldState>5__5; PacmanEventRouter.BroadcastSpawn(<pos>5__7, <rot>5__8, ((LayerMask)(ref VisionMask)).value, <seed>5__4); <>4__this._spawnedThisScene = true; <>4__this._spawnRoutineRunning = 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(); } } public const string PluginGuid = "empress.repo.pacman"; public const string PluginName = "PacmanRound"; public const string PluginVersion = "1.0.4"; internal static ManualLogSource Log; private Harmony _harmony; private static AssetBundle _bundle; internal static GameObject PacmanPrefab; internal static ConfigEntry<float> SpawnChance; internal static ConfigEntry<float> DotSpacing; internal static ConfigEntry<float> DotScale; internal static ConfigEntry<int> DotLayer; internal static ConfigEntry<bool> DotUseLevelPathPoints; internal static ConfigEntry<float> WinSwitchDelay; internal static ConfigEntry<float> DotCollectVolume; internal static ConfigEntry<float> PacmanMoveVolume; internal static AudioClip DotCollectClip; internal static AudioClip PacmanMoveClip; internal static AudioClip PowerUpCollectClip; private bool _spawnRoutineRunning; private bool _spawnedThisScene; public static LayerMask VisionMask = LayerMask.op_Implicit(-1); public static int PacmanLevel = 1; private void Awake() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Expected O, but got Unknown //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Expected O, but got Unknown //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Expected O, but got Unknown //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Expected O, but got Unknown //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; _harmony = new Harmony("empress.repo.pacman"); _harmony.PatchAll(typeof(PacmanPlugin).Assembly); _harmony.PatchAll(typeof(GoalUIPatch)); SpawnChance = ((BaseUnityPlugin)this).Config.Bind<float>("Spawn", "SpawnChance", 1f, new ConfigDescription("Chance [0..1] that Pacman spawns per playable level.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); DotSpacing = ((BaseUnityPlugin)this).Config.Bind<float>("Dots", "Spacing", 5f, new ConfigDescription("Meters between pac-dots along level paths.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 20f), Array.Empty<object>())); DotScale = ((BaseUnityPlugin)this).Config.Bind<float>("Dots", "Scale", 0.25f, new ConfigDescription("Uniform scale for pac-dots.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.05f, 1f), Array.Empty<object>())); DotLayer = ((BaseUnityPlugin)this).Config.Bind<int>("Dots", "Layer", 0, new ConfigDescription("Unity layer index for pac-dots.", (AcceptableValueBase)null, Array.Empty<object>())); DotUseLevelPathPoints = ((BaseUnityPlugin)this).Config.Bind<bool>("Dots", "UseLevelPathPoints", true, new ConfigDescription("If true, place dots along LevelGenerator.LevelPathPoints; otherwise grid around truck.", (AcceptableValueBase)null, Array.Empty<object>())); WinSwitchDelay = ((BaseUnityPlugin)this).Config.Bind<float>("Win", "SwitchDelay", 1f, new ConfigDescription("Seconds to wait before switching level after last dot is collected.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>())); DotCollectVolume = ((BaseUnityPlugin)this).Config.Bind<float>("Audio", "DotCollectVolume", 0.2f, new ConfigDescription("Volume for dot collect sound.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); PacmanMoveVolume = ((BaseUnityPlugin)this).Config.Bind<float>("Audio", "PacmanMoveVolume", 0.2f, new ConfigDescription("Volume for Pacman movement loop.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); LoadBundle(); GameObject val = new GameObject("Pacman_RouterHost"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)52; val.AddComponent<PacmanEventRouter>(); PacmanEventRouter.SetPrefab(PacmanPrefab); SceneManager.sceneLoaded += OnSceneLoaded; } private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void OnSceneLoaded(Scene s, LoadSceneMode m) { _spawnRoutineRunning = false; _spawnedThisScene = false; PacPowerUpManager.ResetTimers(); ((MonoBehaviour)this).StopAllCoroutines(); if (PhotonNetwork.InRoom || !PhotonNetwork.IsConnected) { ((MonoBehaviour)this).StartCoroutine(WaitLevelThenSpawn()); } } [IteratorStateMachine(typeof(<WaitLevelThenSpawn>d__25))] private IEnumerator WaitLevelThenSpawn() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WaitLevelThenSpawn>d__25(0) { <>4__this = this }; } private static bool BlockedMenuOrHub() { try { RunManager instance = RunManager.instance; Level val = instance?.levelCurrent; if ((Object)(object)instance == (Object)null || (Object)(object)val == (Object)null) { return true; } string text = SafeLower(val.NarrativeName); string text2 = SafeLower(val.ResourcePath); if (text.Contains("lobby menu") || text2.Contains("lobby menu")) { return true; } if (text.Contains("main menu") || text2.Contains("main menu")) { return true; } if (text.Contains("splash screen") || text.Contains("splash")) { return true; } if (text.Contains("shop") || text2.Contains("shop") || text2.Contains("store")) { return true; } if (text.Contains("lobby") || text2.Contains("lobby")) { return true; } if (text.Contains("arena") || text2.Contains("arena")) { return true; } if (text2.Contains("/menu/")) { return true; } return false; } catch { return true; } } private static string SafeLower(string s) { return (s ?? string.Empty).Trim().ToLowerInvariant(); } private static bool NavMeshReady() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) NavMeshTriangulation val = NavMesh.CalculateTriangulation(); return val.vertices != null && val.vertices.Length != 0 && val.indices != null && val.indices.Length != 0; } private static Transform PickRandomSpawnPoint() { //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Expected O, but got Unknown //IL_0226: 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_00bf: 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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) LevelGenerator instance = LevelGenerator.Instance; if ((Object)(object)instance != (Object)null && instance.Generated && instance.LevelPathPoints != null && instance.LevelPathPoints.Count > 0) { List<Transform> list = new List<Transform>(instance.LevelPathPoints.Count); for (int i = 0; i < instance.LevelPathPoints.Count; i++) { LevelPoint val = instance.LevelPathPoints[i]; if (!((Object)(object)val == (Object)null)) { list.Add(((Component)val).transform); } } if ((Object)(object)instance.LevelPathTruck != (Object)null) { Vector3 position = ((Component)instance.LevelPathTruck).transform.position; for (int j = 1; j < list.Count; j++) { Transform val2 = list[j]; float num = Vector3.Distance(position, val2.position); int num2 = j - 1; while (num2 >= 0 && Vector3.Distance(position, list[num2].position) > num) { list[num2 + 1] = list[num2]; num2--; } list[num2 + 1] = val2; } int num3 = Mathf.Min(3, list.Count); int num4 = 0; for (int k = num3; k < list.Count; k++) { if (Vector3.Distance(position, list[k].position) > 6f) { list[num4++] = list[k]; } } if (num4 > 0) { list.RemoveRange(num4, list.Count - num4); } } if (list.Count > 0) { return list[Random.Range(0, list.Count)]; } } SpawnPoint[] array = Object.FindObjectsOfType<SpawnPoint>(); if (array == null || array.Length == 0) { GameObject val3 = new GameObject("Pacman_SpawnFallback"); val3.transform.position = Vector3.up; return val3.transform; } return ((Component)array[Random.Range(0, array.Length)]).transform; } private void LoadBundle() { if ((Object)(object)_bundle != (Object)null) { return; } try { string text = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); if (string.IsNullOrEmpty(text)) { text = Paths.PluginPath; } string[] array = Directory.GetFiles(text, "pacman", SearchOption.TopDirectoryOnly).Concat(Directory.GetFiles(text, "pacman.*", SearchOption.TopDirectoryOnly)).ToArray(); foreach (string text2 in array) { try { _bundle = AssetBundle.LoadFromFile(text2); if (!Object.op_Implicit((Object)(object)_bundle)) { continue; } PacmanPrefab = _bundle.LoadAsset<GameObject>("pacmanenemy"); DotCollectClip = _bundle.LoadAsset<AudioClip>("pacdot_collect"); PacmanMoveClip = _bundle.LoadAsset<AudioClip>("pacman_move"); PowerUpCollectClip = _bundle.LoadAsset<AudioClip>("powerup_collect"); if (!Object.op_Implicit((Object)(object)PowerUpCollectClip)) { PowerUpCollectClip = DotCollectClip; } if (!Object.op_Implicit((Object)(object)PacmanPrefab)) { continue; } AudioSource[] componentsInChildren = PacmanPrefab.GetComponentsInChildren<AudioSource>(true); foreach (AudioSource val in componentsInChildren) { if (Object.op_Implicit((Object)(object)val)) { val.spatialBlend = 1f; val.dopplerLevel = 0f; val.rolloffMode = (AudioRolloffMode)0; val.minDistance = 8f; val.maxDistance = 20f; } } if (!Object.op_Implicit((Object)(object)PacmanPrefab.GetComponent<NavMeshAgent>())) { PacmanPrefab.AddComponent<NavMeshAgent>(); } if (!Object.op_Implicit((Object)(object)PacmanPrefab.GetComponent<PacmanController>())) { PacmanPrefab.AddComponent<PacmanController>(); } Log.LogInfo((object)("Loaded AssetBundle at " + text2 + " with pacmanenemy prefab.")); return; } catch (Exception ex) { Log.LogWarning((object)("Failed to load bundle at " + text2 + ": " + ex.Message)); } } Log.LogWarning((object)"No 'pacman' AssetBundle found beside the plugin .dll. Place it next to the .dll."); } catch (Exception arg) { Log.LogError((object)$"LoadBundle failed: {arg}"); } } internal static void AdvanceLevelOrWinRound() { try { if (!KittyManager.IsAuthority()) { ManualLogSource log = Log; if (log != null) { log.LogInfo((object)"[PacmanRound] Non-authority received win trigger; waiting for master."); } return; } RunManager instance = RunManager.instance; if ((Object)(object)instance == (Object)null) { ManualLogSource log2 = Log; if (log2 != null) { log2.LogWarning((object)"[PacmanRound] RunManager.instance is null; cannot advance level."); } return; } PacmanLevel++; instance.ChangeLevel(true, false, (ChangeLevelType)1); ManualLogSource log3 = Log; if (log3 != null) { log3.LogInfo((object)$"[PacmanRound] All dots collected: advancing to Pacman Level {PacmanLevel}."); } } catch (Exception arg) { ManualLogSource log4 = Log; if (log4 != null) { log4.LogError((object)$"[PacmanRound] AdvanceLevelOrWinRound failed: {arg}"); } } } } public static class GoalUIPatch { [HarmonyPatch(typeof(GoalUI), "Update")] [HarmonyPostfix] public static void Postfix(GoalUI __instance) { if ((Object)(object)__instance == (Object)null) { return; } TextMeshProUGUI component = ((Component)__instance).GetComponent<TextMeshProUGUI>(); if (Object.op_Implicit((Object)(object)component)) { ((TMP_Text)component).richText = true; string text = $"\n\n<color=yellow>DOTS: {PacDotsManager.RemainingDots}</color>"; if (PacPowerUpManager.SpeedBoostTimeRemaining > 0.1f) { text += $"\n<color=#00FF00>SPEED: {PacPowerUpManager.SpeedBoostTimeRemaining:F0}</color>"; } if (PacPowerUpManager.ScareTimeRemaining > 0.1f) { text += $"\n<color=#00FFFF>SCARE: {PacPowerUpManager.ScareTimeRemaining:F0}</color>"; } ((TMP_Text)component).text = text; } } } public static class PacPowerUpManager { public enum Type { SpeedBoost, ScarePacman } public class PacPowerUp : MonoBehaviour { public Type MyType; public int ID; public Transform Visual; private void OnTriggerEnter(Collider other) { //IL_0079: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar val = ((Component)other).GetComponentInParent<PlayerAvatar>(); if (!Object.op_Implicit((Object)(object)val)) { PlayerController componentInParent = ((Component)other).GetComponentInParent<PlayerController>(); if (Object.op_Implicit((Object)(object)componentInParent)) { val = componentInParent.playerAvatarScript; } } if (Object.op_Implicit((Object)(object)val) && val.photonView.IsMine) { ActivateEffect(MyType); if (Object.op_Implicit((Object)(object)PacmanPlugin.PowerUpCollectClip)) { AudioSource.PlayClipAtPoint(PacmanPlugin.PowerUpCollectClip, ((Component)this).transform.position, 0.05f); } PacmanEventRouter.BroadcastPowerUpCollected(ID); } } private void Update() { //IL_0017: 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) if (Object.op_Implicit((Object)(object)Visual)) { Visual.Rotate(Vector3.up, 100f * Time.deltaTime, (Space)0); float num = 0.8f + Mathf.Sin(Time.time * 3f) * 0.1f; Visual.localPosition = new Vector3(0f, num, 0f); } } } public class PowerUpUpdater : MonoBehaviour { private void Update() { if (SpeedBoostTimeRemaining > 0f) { SpeedBoostTimeRemaining -= Time.deltaTime; if (Object.op_Implicit((Object)(object)PlayerController.instance)) { PlayerController.instance.OverrideSpeed(1.8f, 0.2f); PlayerController.instance.EnergyCurrent = PlayerController.instance.EnergyStart; } } if (ScareTimeRemaining > 0f) { ScareTimeRemaining -= Time.deltaTime; if (Object.op_Implicit((Object)(object)PacmanController.Instance)) { PacmanController.Instance.Scare(ScareTimeRemaining); } } } } private static readonly Dictionary<int, GameObject> _powerUps = new Dictionary<int, GameObject>(); private static GameObject _updater; public static float SpeedBoostTimeRemaining; public static float ScareTimeRemaining; public static void ResetTimers() { SpeedBoostTimeRemaining = 0f; ScareTimeRemaining = 0f; } public static void ClearAll() { foreach (KeyValuePair<int, GameObject> powerUp in _powerUps) { if (Object.op_Implicit((Object)(object)powerUp.Value)) { Object.Destroy((Object)(object)powerUp.Value); } } _powerUps.Clear(); if (Object.op_Implicit((Object)(object)_updater)) { Object.Destroy((Object)(object)_updater); } } public static void RemovePowerUp(int id) { if (_powerUps.TryGetValue(id, out GameObject value)) { if (Object.op_Implicit((Object)(object)value)) { Object.Destroy((Object)(object)value); } _powerUps.Remove(id); } } public static void SpawnPowerUps(float chancePerPoint) { //IL_0087: Unknown result type (might be due to invalid IL or missing references) ClearAll(); EnsureUpdater(); LevelGenerator instance = LevelGenerator.Instance; if ((Object)(object)instance == (Object)null || instance.LevelPathPoints == null) { return; } int num = 0; foreach (LevelPoint levelPathPoint in instance.LevelPathPoints) { if (!((Object)(object)levelPathPoint == (Object)null)) { if (Random.value <= chancePerPoint) { Type t = ((!(Random.value > 0.5f)) ? Type.ScarePacman : Type.SpeedBoost); Spawn(((Component)levelPathPoint).transform.position, t, num); } num++; } } } private static void EnsureUpdater() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)_updater)) { _updater = new GameObject("PacPowerUp_Updater"); Object.DontDestroyOnLoad((Object)(object)_updater); ((Object)_updater).hideFlags = (HideFlags)52; _updater.AddComponent<PowerUpUpdater>(); } } private static void Spawn(Vector3 pos, Type t, int id) { //IL_0001: 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: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: 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_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Expected O, but got Unknown //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(pos, ref val, 2f, -1)) { GameObject val2 = new GameObject($"PowerUp_{t}_{id}"); val2.transform.position = ((NavMeshHit)(ref val)).position + Vector3.up * 0.5f; BoxCollider val3 = val2.AddComponent<BoxCollider>(); ((Collider)val3).isTrigger = true; val3.size = new Vector3(1.5f, 2.5f, 1.5f); val3.center = Vector3.up * 0.5f; GameObject val4 = GameObject.CreatePrimitive((PrimitiveType)3); Object.Destroy((Object)(object)val4.GetComponent<Collider>()); val4.transform.SetParent(val2.transform); val4.transform.localPosition = Vector3.up * 0.8f; val4.transform.localScale = Vector3.one * 0.4f; val4.transform.localRotation = Quaternion.Euler(45f, 45f, 45f); Renderer component = val4.GetComponent<Renderer>(); Color val5 = ((t == Type.SpeedBoost) ? Color.green : Color.cyan); if (Object.op_Implicit((Object)(object)component)) { Material val6 = new Material(Shader.Find("Standard")); val6.color = val5; val6.EnableKeyword("_EMISSION"); val6.SetColor("_EmissionColor", val5 * 2f); component.material = val6; } Light val7 = val2.AddComponent<Light>(); val7.type = (LightType)2; val7.range = 3f; val7.color = val5; val7.intensity = 2f; PacPowerUp pacPowerUp = val2.AddComponent<PacPowerUp>(); pacPowerUp.MyType = t; pacPowerUp.ID = id; pacPowerUp.Visual = val4.transform; _powerUps[id] = val2; } } public static void ActivateEffect(Type t) { EnsureUpdater(); switch (t) { case Type.SpeedBoost: SpeedBoostTimeRemaining = 15f; if (Object.op_Implicit((Object)(object)PlayerController.instance)) { PlayerController.instance.OverrideSpeed(1.8f, 0.1f); } break; case Type.ScarePacman: ScareTimeRemaining = 15f; if (Object.op_Implicit((Object)(object)PacmanController.Instance)) { PacmanController.Instance.Scare(15f); } break; } } } } namespace Empress.KittyCurse { [RequireComponent(typeof(NavMeshAgent))] [DisallowMultipleComponent] public class KittyCatController : MonoBehaviour { private enum State { Patrol, Pursue, Ask, KillAll } [CompilerGenerated] private sealed class <AskSequence>d__49 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PlayerAvatar player; public KittyCatController <>4__this; private int <i>5__1; private float <t>5__2; private float <end>5__3; private float <t2>5__4; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <AskSequence>d__49(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_01e9: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (<>4__this._state == State.Ask) { return false; } <>4__this._state = State.Ask; <>4__this.IdleAnim(); <i>5__1 = 0; goto IL_026a; case 1: <>1__state = -1; goto IL_00eb; case 2: <>1__state = -1; goto IL_0234; case 3: { <>1__state = -1; goto IL_02e9; } IL_00eb: if (<t>5__2 < <>4__this._askGrace) { if (<>4__this.GiftSatisfied(player)) { <>4__this.OnGiftAccepted(); return false; } <t>5__2 += Time.deltaTime; <>2__current = null; <>1__state = 1; return true; } if (<i>5__1 < 2) { <end>5__3 = Time.time + <>4__this._askInterval; goto IL_0234; } goto IL_0257; IL_026a: if (<i>5__1 < 3) { if (KittyManager.IsAuthority()) { KittyEventRouter.BroadcastVoice(Mathf.Clamp(<i>5__1, 0, 2)); } <t>5__2 = 0f; goto IL_00eb; } if (!KittyManager.IsAuthority()) { break; } <t2>5__4 = 0f; goto IL_02e9; IL_0257: <i>5__1++; goto IL_026a; IL_0234: if (Time.time < <end>5__3) { if (Object.op_Implicit((Object)(object)<>4__this._agent) && <>4__this._agent.isOnNavMesh) { <>4__this._agent.isStopped = false; <>4__this._agent.speed = 4.2f; <>4__this._repathTimer -= Time.deltaTime; if (<>4__this._repathTimer <= 0f) { <>4__this._repathTimer = 0.2f; <>4__this._agent.SetDestination(((Component)player).transform.position); } } if (<>4__this.GiftSatisfied(player)) { <>4__this.OnGiftAccepted(); return false; } <>2__current = null; <>1__state = 2; return true; } <>4__this.IdleAnim(); goto IL_0257; IL_02e9: if (<t2>5__4 < <>4__this._askGrace) { if (<>4__this.GiftSatisfied(player)) { <>4__this.OnGiftAccepted(); return false; } <t2>5__4 += Time.deltaTime; <>2__current = null; <>1__state = 3; return true; } <>4__this.StartKillEveryoneMode(); 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(); } } [CompilerGenerated] private sealed class <WanderOffAndDie>d__53 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public KittyCatController <>4__this; private Vector3 <best>5__1; private float <bestScore>5__2; private IReadOnlyList<PlayerAvatar> <players>5__3; private float <end>5__4; private int <i>5__5; private Vector3 <cand>5__6; private NavMeshHit <hit>5__7; private float <score>5__8; private int <p>5__9; private PlayerAvatar <av>5__10; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WanderOffAndDie>d__53(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <players>5__3 = null; <av>5__10 = null; <>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_0068: 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_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_0081: 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_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <best>5__1 = ((Component)<>4__this).transform.position; <bestScore>5__2 = float.NegativeInfinity; <players>5__3 = KittyManager.AllPlayersCached(); <i>5__5 = 0; while (<i>5__5 < 16) { <cand>5__6 = ((Component)<>4__this).transform.position + Random.insideUnitSphere * 45f; if (NavMesh.SamplePosition(<cand>5__6, ref <hit>5__7, 6f, -1)) { <score>5__8 = 0f; <p>5__9 = 0; while (<p>5__9 < <players>5__3.Count) { <av>5__10 = <players>5__3[<p>5__9]; if (Object.op_Implicit((Object)(object)<av>5__10)) { <score>5__8 += Vector3.Distance(((NavMeshHit)(ref <hit>5__7)).position, ((Component)<av>5__10).transform.position); } <av>5__10 = null; <p>5__9++; } if (<score>5__8 > <bestScore>5__2) { <bestScore>5__2 = <score>5__8; <best>5__1 = ((NavMeshHit)(ref <hit>5__7)).position; } } <i>5__5++; } if (Object.op_Implicit((Object)(object)<>4__this._agent) && <>4__this._agent.isOnNavMesh) { <>4__this._agent.isStopped = false; <>4__this._agent.speed = 3.8f; <>4__this._agent.SetDestination(<best>5__1); } <end>5__4 = Time.time + 10f; break; case 1: <>1__state = -1; break; } if (Time.time < <end>5__4) { <>2__current = null; <>1__state = 1; return true; } <>4__this.ToggleMusicLocal(on: false); KittyEventRouter.BroadcastDespawn(); Object.Destroy((Object)(object)((Component)<>4__this).gameObject); 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(); } } private NavMeshAgent _agent; private Animator _anim; private AudioSource _voice; private AudioSource _music; private AudioClip[] _voiceClips; private AudioClip _musicClip; private float _voiceVol = 1f; private float _musicVol = 0.5f; private float _patrolRadius; private float _engageDistance; private LayerMask _visionMask; private float _askGrace; private float _askInterval; private Transform[] _levelPoints; private Transform _truckPoint; private Transform _currentPatrolTarget; private float _idleUntil; private bool _movingToPatrol; private float _repathTimer; private Vector3 _lastPos; private float _stuckTimer; private PlayerAvatar _target; private State _state = State.Patrol; private float _scanTimer; private float _poseSendTimer; private const float PoseSendInterval = 0.2f; private Vector3 _netPos; private Quaternion _netRot; private bool _hasNetPose; private const float PoseSnapDist = 5f; private const float PoseLerpRate = 10f; private float _postGiftCooldownUntil; private bool _hasCatIdleTrigger; private bool _hasWalkBool; private Vector3 _animLastPos; private float _killRepathTimer; private static readonly List<PlayerAvatar> _victimsTmp = new List<PlayerAvatar>(8); public void Setup(float patrolRadius, float engageDistance, LayerMask visionMask, float askGrace, float askInterval) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) _patrolRadius = patrolRadius; _engageDistance = engageDistance; _visionMask = visionMask; _askGrace = Mathf.Max(10f, askGrace); _askInterval = Mathf.Max(_askGrace, askInterval); } public void AssignAudio(AudioClip[] voices, AudioClip music, float voiceVol, float musicVol) { _voiceClips = voices ?? Array.Empty<AudioClip>(); _musicClip = music; _voiceVol = Mathf.Clamp01(voiceVol); _musicVol = Mathf.Clamp01(musicVol); } public void ApplyNetworkPose(Vector3 pos, Quaternion rot) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: 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) //IL_000a: Unknown result type (might be due to invalid IL or missing references) _netPos = pos; _netRot = rot; _hasNetPose = true; } private void Awake() { _agent = ((Component)this).GetComponent<NavMeshAgent>(); _anim = ((Component)this).GetComponent<Animator>(); _voice = ((Component)this).GetComponent<AudioSource>() ?? ((Component)this).gameObject.AddComponent<AudioSource>(); _voice.playOnAwake = false; _voice.loop = false; _voice.spatialBlend = 1f; _voice.dopplerLevel = 0f; _voice.rolloffMode = (AudioRolloffMode)0; _voice.minDistance = 8f; _voice.maxDistance = 18f; _music = ((Component)this).gameObject.AddComponent<AudioSource>(); _music.playOnAwake = false; _music.loop = true; _music.spatialBlend = 1f; _music.dopplerLevel = 0f; _music.rolloffMode = (AudioRolloffMode)0; _music.minDistance = 12f; _music.maxDistance = 30f; if (Object.op_Implicit((Object)(object)_agent)) { _agent.stoppingDistance = 1.5f; } } private void OnEnable() { KittyManager.Register(this); } private void OnDisable() { KittyManager.Unregister(this); } private void Start() { //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Invalid comparison between Unknown and I4 //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Invalid comparison between Unknown and I4 LevelGenerator instance = LevelGenerator.Instance; if ((Object)(object)instance != (Object)null && instance.Generated) { _truckPoint = (Object.op_Implicit((Object)(object)instance.LevelPathTruck) ? ((Component)instance.LevelPathTruck).transform : null); if (instance.LevelPathPoints != null) { _levelPoints = (from p in instance.LevelPathPoints where (Object)(object)p != (Object)null select ((Component)p).transform).ToArray(); } } _idleUntil = Time.time + Random.Range(10f, 30f); _lastPos = ((Component)this).transform.position; _animLastPos = ((Component)this).transform.position; if ((Object)(object)_anim != (Object)null) { for (int i = 0; i < _anim.parameterCount; i++) { AnimatorControllerParameter parameter = _anim.GetParameter(i); if (parameter.name == "catidle" && (int)parameter.type == 9) { _hasCatIdleTrigger = true; } if (parameter.name == "Walk" && (int)parameter.type == 4) { _hasWalkBool = true; } } } if (!KittyManager.IsAuthority() && Object.op_Implicit((Object)(object)_agent) && ((Behaviour)_agent).enabled) { ((Behaviour)_agent).enabled = false; } } private void Update() { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: 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_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: 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_00de: Unknown result type (might be due to invalid IL or missing references) if (KittyManager.IsAuthority()) { HostTick(); if (KittyManager.CanStreamPose()) { _poseSendTimer += Time.deltaTime; if (_poseSendTimer >= 0.2f) { _poseSendTimer = 0f; KittyEventRouter.BroadcastPose(((Component)this).transform.position, ((Component)this).transform.rotation); } } } else { ClientTick(); } if (!Object.op_Implicit((Object)(object)_anim) || !_hasWalkBool) { return; } bool flag = false; Vector3 val; if (KittyManager.IsAuthority()) { if (Object.op_Implicit((Object)(object)_agent) && _agent.isOnNavMesh) { int num; if (!_agent.isStopped) { val = _agent.velocity; num = ((((Vector3)(ref val)).sqrMagnitude > 0.0001f) ? 1 : 0); } else { num = 0; } flag = (byte)num != 0; } } else { val = ((Component)this).transform.position - _animLastPos; flag = ((Vector3)(ref val)).sqrMagnitude > 0.0001f; } _anim.SetBool("Walk", flag); _animLastPos = ((Component)this).transform.position; } private void HostTick() { _scanTimer -= Time.deltaTime; if (_scanTimer <= 0f) { _scanTimer = 0.33f; ScanForTargets(); } switch (_state) { case State.Patrol: PatrolTick(); break; case State.Pursue: PursueTick(); break; case State.Ask: break; case State.KillAll: KillAllTick(); break; } } private void ScanForTargets() { //IL_006d: 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) if (Time.time < _postGiftCooldownUntil || _state == State.Ask || _state == State.KillAll) { return; } IReadOnlyList<PlayerAvatar> readOnlyList = KittyManager.AllPlayersCached(); PlayerAvatar val = null; float num = float.PositiveInfinity; for (int i = 0; i < readOnlyList.Count; i++) { PlayerAvatar val2 = readOnlyList[i]; if (Object.op_Implicit((Object)(object)val2)) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val2).transform.position); if (num2 <= _engageDistance && num2 < num && HasLineOfSight(val2)) { val = val2; num = num2; } } } if ((Object)(object)val != (Object)null) { _target = val; _state = State.Pursue; } } private void PursueTick() { //IL_00a7: 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_0095: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_target == (Object)null) { _state = State.Patrol; } else if (Object.op_Implicit((Object)(object)_agent) && _agent.isOnNavMesh) { _agent.isStopped = false; _repathTimer -= Time.deltaTime; if (_repathTimer <= 0f) { _repathTimer = 0.15f; _agent.SetDestination(((Component)_target).transform.position); } if (Vector3.Distance(((Component)this).transform.position, ((Component)_target).transform.position) <= 4f) { ((MonoBehaviour)this).StartCoroutine(AskSequence(_target)); } } } [IteratorStateMachine(typeof(<AskSequence>d__49))] private IEnumerator AskSequence(PlayerAvatar player) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <AskSequence>d__49(0) { <>4__this = this, player = player }; } private void IdleAnim() { if (Object.op_Implicit((Object)(object)_agent)) { _agent.isStopped = true; } if (Object.op_Implicit((Object)(object)_anim) && _hasCatIdleTrigger) { _anim.SetTrigger("catidle"); } if (Object.op_Implicit((Object)(object)_anim) && _hasWalkBool) { _anim.SetBool("Walk", false); } } private bool GiftSatisfied(PlayerAvatar player) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (KittyManager.IsAuthority()) { return KittyManager.AnyRecentDropNear(((Component)this).transform.position, _askGrace, 6f); } return false; } private void OnGiftAccepted() { _target = null; _state = State.Patrol; if (Object.op_Implicit((Object)(object)_agent)) { _agent.speed = 3.5f; _agent.isStopped = false; } _postGiftCooldownUntil = Time.time + 15f; ((MonoBehaviour)this).StartCoroutine(WanderOffAndDie()); } [IteratorStateMachine(typeof(<WanderOffAndDie>d__53))] private IEnumerator WanderOffAndDie() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WanderOffAndDie>d__53(0) { <>4__this = this }; } private bool HasLineOfSight(PlayerAvatar player) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_006f: 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_007d: 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_0082: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)player)) { return false; } Vector3 val = ((Component)this).transform.position + Vector3.up * 1.2f; Transform val2 = null; try { val2 = (((Object)(object)player.PlayerVisionTarget != (Object)null) ? player.PlayerVisionTarget.VisionTransform : null); } catch { } Vector3 val3 = (((Object)(object)val2 != (Object)null) ? val2.position : ((Component)player).transform.position); RaycastHit val4 = default(RaycastHit); if (Physics.Linecast(val, val3, ref val4, LayerMask.op_Implicit(_visionMask))) { return (Object)(object)((Component)((RaycastHit)(ref val4)).collider).GetComponentInParent<PlayerAvatar>() == (Object)(object)player; } return true; } private void PatrolTick() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_agent) || !_agent.isOnNavMesh) { return; } if (_movingToPatrol) { if (!_agent.pathPending && _agent.remainingDistance <= 0.5f) { _movingToPatrol = false; _idleUntil = Time.time + Random.Range(10f, 30f); _agent.isStopped = true; return; } Vector3 val = ((Component)this).transform.position - _lastPos; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; _stuckTimer = ((sqrMagnitude < 0.0004f) ? (_stuckTimer + Time.deltaTime) : 0f); _lastPos = ((Component)this).transform.position; if (_stuckTimer > 2f) { _stuckTimer = 0f; ForceNextPatrolDestination(); } } else if (Time.time < _idleUntil) { if (!_agent.isStopped) { _agent.isStopped = true; } } else { ForceNextPatrolDestination(); } } private void ForceNextPatrolDestination() { //IL_00a8: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) _agent.isStopped = false; _currentPatrolTarget = ChooseNextLevelPoint(); if ((Object)(object)_currentPatrolTarget != (Object)null) { Vector3 position = _currentPatrolTarget.position; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(position, ref val, 3f, -1)) { position = ((NavMeshHit)(ref val)).position; } if (_agent.isOnNavMesh) { _agent.SetDestination(position); } else { _agent.Warp(position); } _movingToPatrol = true; _lastPos = ((Component)this).transform.position; _stuckTimer = 0f; return; } Vector3 val2 = Random.insideUnitSphere * _patrolRadius + ((Component)this).transform.position; NavMeshHit val3 = default(NavMeshHit); if (NavMesh.SamplePosition(val2, ref val3, _patrolRadius, -1)) { if (_agent.isOnNavMesh) { _agent.SetDestination(((NavMeshHit)(ref val3)).position); } else { _agent.Warp(((NavMeshHit)(ref val3)).position); } } _movingToPatrol = true; _lastPos = ((Component)this).transform.position; _stuckTimer = 0f; } private Transform ChooseNextLevelPoint() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) if (_levelPoints == null || _levelPoints.Length == 0) { return null; } Vector3 position = ((Component)this).transform.position; Transform val = null; float num = float.NegativeInfinity; for (int i = 0; i < _levelPoints.Length; i++) { Transform val2 = _levelPoints[i]; if ((Object)(object)val2 == (Object)null || ((Object)(object)_truckPoint != (Object)null && Vector3.Distance(val2.position, _truckPoint.position) <= 6f)) { continue; } float num2 = Vector3.Distance(val2.position, position); if (!(num2 <= 12f)) { float num3 = num2; if (num3 > num) { num = num3; val = val2; } } } if ((Object)(object)val != (Object)null) { return val; } return _levelPoints[Random.Range(0, _levelPoints.Length)]; } private void TryKill(PlayerAvatar player) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)player == (Object)null) { return; } if ((Object)(object)player.playerHealth != (Object)null) { player.playerHealth.HurtOther(999, ((Component)player).transform.position, true, -1); return; } PlayerHealth playerHealth = player.playerHealth; if (playerHealth != null) { playerHealth.Hurt(999, true, -1); } } catch { } } private void StartKillEveryoneMode() { _state = State.KillAll; if (Object.op_Implicit((Object)(object)_agent)) { _agent.isStopped = false; _agent.speed = 9f; _agent.acceleration = 20f; _agent.angularSpeed = 720f; } if (KittyManager.IsAuthority()) { KittyEventRouter.BroadcastMusic(on: true); } } private void KillAllTick() { //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_agent) || !_agent.isOnNavMesh) { return; } _victimsTmp.Clear(); IReadOnlyList<PlayerAvatar> readOnlyList = KittyManager.AllPlayersCached(); for (int i = 0; i < readOnlyList.Count; i++) { PlayerAvatar val = readOnlyList[i]; if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.playerHealth) && ((Component)val.playerHealth).gameObject.activeInHierarchy) { _victimsTmp.Add(val); } } if (_victimsTmp.Count == 0) { return; } PlayerAvatar val2 = null; float num = float.PositiveInfinity; for (int j = 0; j < _victimsTmp.Count; j++) { PlayerAvatar val3 = _victimsTmp[j]; float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val3).transform.position); if (num2 < num) { num = num2; val2 = val3; } } if ((Object)(object)val2 != (Object)null) { _agent.isStopped = false; _killRepathTimer -= Time.deltaTime; if (_killRepathTimer <= 0f) { _killRepathTimer = 0.12f; _agent.SetDestination(((Component)val2).transform.position); } if (num <= 3.2f && KittyManager.IsAuthority()) { TryKill(val2); } } } internal void PlayVoiceLocal(int index) { if (!((Object)(object)_voice == (Object)null) && _voiceClips != null && _voiceClips.Length != 0) { int num = Mathf.Clamp(index, 0, _voiceClips.Length - 1); AudioClip val = _voiceClips[num]; if (Object.op_Implicit((Object)(object)val)) { _voice.volume = _voiceVol; _voice.PlayOneShot(val); } } } internal void ToggleMusicLocal(bool on) { if ((Object)(object)_music == (Object)null || (Object)(object)_musicClip == (Object)null) { return; } if (on) { if ((Object)(object)_music.clip != (Object)(object)_musicClip) { _music.clip = _musicClip; } _music.volume = _musicVol; if (!_music.isPlaying) { _music.Play(); } } else if (_music.isPlaying) { _music.Stop(); } } private void ClientTick() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_0041: Unknown result type (might be due to invalid IL or missing references) if (_hasNetPose) { if (Vector3.Distance(((Component)this).transform.position, _netPos) > 5f) { ((Component)this).transform.SetPositionAndRotation(_netPos, _netRot); return; } ((Component)this).transform.position = Vector3.Lerp(((Component)this).transform.position, _netPos, Time.deltaTime * 10f); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, _netRot, Time.deltaTime * 10f); } } } public static class KittyEventRouter { public static void BroadcastPose(Vector3 pos, Quaternion r
PacmanLeaderboard.dll
Decompiled 2 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Empress.KittyCurse; using Empress.Pacman; using ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using UnityEngine; [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")] [assembly: AssemblyProduct("PacmanLeaderboard")] [assembly: AssemblyTitle("PacmanLeaderboard")] [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 Empress.PacmanLeaderboard { [BepInPlugin("empress.repo.pacman.leaderboard", "PacmanLeaderboard", "1.2.0")] public class PacmanLeaderboardPlugin : BaseUnityPlugin { internal static ManualLogSource Log; private Harmony _h; private void Awake() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; _h = new Harmony("empress.repo.pacman.leaderboard"); _h.PatchAll(typeof(PacmanLeaderboardPlugin).Assembly); } private void OnDestroy() { Harmony h = _h; if (h != null) { h.UnpatchSelf(); } Router.Teardown(); UI.Teardown(); State.ResetRound(); } } internal static class State { internal static bool ActiveRound; internal static readonly Dictionary<int, int> Counts = new Dictionary<int, int>(); internal static void ResetRound() { Counts.Clear(); ActiveRound = false; } internal static void BeginRound() { Counts.Clear(); ActiveRound = true; } internal static void AddDotForActor(int actor) { if (actor > 0) { if (Counts.TryGetValue(actor, out var value)) { Counts[actor] = value + 1; } else { Counts[actor] = 1; } } } } internal class Router : MonoBehaviourPunCallbacks, IOnEventCallback { private enum Ev : byte { LB_Update = 101, LB_Show, LB_Begin, LB_Reset } private static Router _inst; private static bool _hooked; internal static void Ensure() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!((Object)(object)_inst != (Object)null)) { GameObject val = new GameObject("PacmanLeaderboard_RouterHost"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)52; _inst = val.AddComponent<Router>(); _inst.TryHook(); } } internal static void Teardown() { if (!((Object)(object)_inst == (Object)null)) { if (_hooked) { PhotonNetwork.RemoveCallbackTarget((object)_inst); } _hooked = false; Object.Destroy((Object)(object)((Component)_inst).gameObject); _inst = null; } } public override void OnJoinedRoom() { TryHook(); } public override void OnLeftRoom() { if (_hooked) { PhotonNetwork.RemoveCallbackTarget((object)this); } _hooked = false; State.ResetRound(); UI.HideNow(); } private void TryHook() { if (!_hooked && PhotonNetwork.InRoom) { PhotonNetwork.AddCallbackTarget((object)this); _hooked = true; } } internal static void BroadcastBegin() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown State.BeginRound(); Ensure(); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)103, (object)null, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } } internal static void BroadcastReset() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0033: Expected O, but got Unknown State.ResetRound(); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)104, (object)null, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } UI.HideNow(); } internal static void BroadcastDotPickup(int actor) { //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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown if (State.ActiveRound) { State.AddDotForActor(actor); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)101, (object)actor, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } } } internal static void BroadcastShow() { //IL_0080: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown if (State.ActiveRound) { UI.Ensure(); int[] array = State.Counts.Keys.ToArray(); int[] array2 = array.Select((int k) => State.Counts[k]).ToArray(); object[] array3 = new object[2] { array, array2 }; UI.QueueShow(); if (PhotonNetwork.InRoom && PhotonNetwork.IsConnectedAndReady) { PhotonNetwork.RaiseEvent((byte)102, (object)array3, new RaiseEventOptions { Receivers = (ReceiverGroup)1 }, SendOptions.SendReliable); } } } public void OnEvent(EventData e) { switch ((Ev)e.Code) { case Ev.LB_Begin: State.BeginRound(); UI.Ensure(); break; case Ev.LB_Reset: State.ResetRound(); UI.HideNow(); break; case Ev.LB_Update: { int actor = (int)e.CustomData; State.AddDotForActor(actor); break; } case Ev.LB_Show: if (e.CustomData is object[] array && array.Length >= 2) { State.Counts.Clear(); int[] array2 = (int[])array[0]; int[] array3 = (int[])array[1]; for (int i = 0; i < array2.Length && i < array3.Length; i++) { State.Counts[array2[i]] = array3[i]; } } UI.QueueShow(); break; } } } internal class UI : MonoBehaviour { private struct Row { public string name; public int count; } private static UI _inst; private static bool _visible; private static float _until; private const float Duration = 8f; internal static void Ensure() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!((Object)(object)_inst != (Object)null)) { GameObject val = new GameObject("PacmanLeaderboard_UI"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)52; _inst = val.AddComponent<UI>(); } } internal static void Teardown() { if (!((Object)(object)_inst == (Object)null)) { Object.Destroy((Object)(object)((Component)_inst).gameObject); _inst = null; _visible = false; } } public static void QueueShow() { if (State.ActiveRound) { ShowNow(); } } public static void ShowNow() { if (!((Object)(object)_inst == (Object)null) && State.ActiveRound) { _visible = true; _until = Time.unscaledTime + 8f; } } public static void HideNow() { _visible = false; } private void OnGUI() { //IL_008b: 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_0126: Unknown result type (might be due to invalid IL or missing references) if (!_visible) { return; } if (!State.ActiveRound) { _visible = false; return; } if (Time.unscaledTime >= _until) { _visible = false; return; } float num = 520f; float num2 = 380f; Rect val = default(Rect); ((Rect)(ref val))..ctor(((float)Screen.width - num) * 0.5f, ((float)Screen.height - num2) * 0.4f, num, num2); GUI.depth = -10000; GUI.Box(val, "PAC-MAN RESULTS"); List<Row> list = BuildSorted(); float num3 = 26f; float num4 = ((Rect)(ref val)).y + 48f; for (int i = 0; i < list.Count; i++) { Row row = list[i]; string name = row.name; string text = row.count.ToString(); GUI.Label(new Rect(((Rect)(ref val)).x + 24f, num4, ((Rect)(ref val)).width * 0.7f, num3), name); GUI.Label(new Rect(((Rect)(ref val)).x + ((Rect)(ref val)).width - 120f, num4, 100f, num3), text); num4 += num3 + 4f; } } private static List<Row> BuildSorted() { List<Row> list = new List<Row>(State.Counts.Count); Player[] array = (PhotonNetwork.InRoom ? PhotonNetwork.PlayerList : Array.Empty<Player>()); foreach (Player val in array) { if (val != null) { State.Counts.TryGetValue(val.ActorNumber, out var value); list.Add(new Row { name = (string.IsNullOrEmpty(val.NickName) ? $"Player {val.ActorNumber}" : val.NickName), count = value }); } } foreach (KeyValuePair<int, int> count in State.Counts) { bool flag = false; for (int j = 0; j < list.Count; j++) { if (list[j].name.EndsWith(count.Key.ToString())) { flag = true; break; } } if (!flag) { list.Add(new Row { name = $"Player {count.Key}", count = count.Value }); } } list.Sort((Row a, Row b) => b.count.CompareTo(a.count)); return list; } } [HarmonyPatch(typeof(PacmanEventRouter), "BroadcastSpawn")] internal static class Patch_BeginRound_OnSpawn { private static void Postfix() { Router.Ensure(); UI.Ensure(); Router.BroadcastBegin(); } } [HarmonyPatch(typeof(PacmanEventRouter), "BroadcastDespawn")] internal static class Patch_Reset_OnDespawn { private static void Postfix() { Router.BroadcastReset(); Router.Teardown(); UI.Teardown(); } } [HarmonyPatch(typeof(PacmanEventRouter), "BroadcastRoundWin")] internal static class Patch_Show_OnRoundWin { private static void Prefix() { if (State.ActiveRound) { Router.BroadcastShow(); } } } [HarmonyPatch(typeof(RunManager), "ChangeLevel")] internal static class Patch_Show_OnLevelChange { private static void Prefix(bool _completedLevel, bool _levelFailed) { if (_levelFailed && State.ActiveRound) { Router.BroadcastShow(); } } } [HarmonyPatch(typeof(PacDot), "OnTriggerEnter")] internal static class Patch_Count_OnDotTrigger { private static void Postfix(Collider other, PacDot __instance) { if (State.ActiveRound && KittyManager.IsAuthority() && !((Object)(object)other == (Object)null)) { PhotonView componentInParent = ((Component)other).GetComponentInParent<PhotonView>(); int num = (((Object)(object)componentInParent != (Object)null) ? componentInParent.OwnerActorNr : 0); if (num <= 0 && PhotonNetwork.LocalPlayer != null) { num = PhotonNetwork.LocalPlayer.ActorNumber; } if (num > 0) { Router.BroadcastDotPickup(num); } } } } }
PacmanLoading.dll
Decompiled 2 days agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; 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")] [assembly: AssemblyProduct("PacmanLoading")] [assembly: AssemblyTitle("PacmanLoading")] [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 EmpressMods.PacmanLevelLoader { [BepInPlugin("com.empress.repo.pacman_loader", "PacmanLevelLoader", "1.0.2")] public class PacmanPlugin : BaseUnityPlugin { private static class Patches { [HarmonyPatch(typeof(TruckLevelNumberScreen), "Start")] [HarmonyPostfix] private static void TruckLevelScreen_Patch(TruckLevelNumberScreen __instance) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) try { TMP_Text componentInChildren = (TMP_Text)(object)((Component)__instance).GetComponentInChildren<TextMeshProUGUI>(true); if ((Object)(object)componentInChildren == (Object)null) { componentInChildren = (TMP_Text)(object)((Component)__instance).GetComponentInChildren<TextMeshPro>(true); } if ((Object)(object)componentInChildren != (Object)null) { if (EnablePacmanColors.Value) { ((Graphic)componentInChildren).color = new Color(1f, 0.95f, 0f, 1f); } int num = ((!((Object)(object)RunManager.instance != (Object)null)) ? 1 : (RunManager.instance.levelsCompleted + 1)); componentInChildren.text = $"{LevelPrefixConfig.Value} {num}"; } } catch (Exception arg) { Log.LogError((object)$"Failed to patch TruckLevelNumberScreen: {arg}"); } } [HarmonyPatch(typeof(LoadingUI), "LevelAnimationStart")] [HarmonyPostfix] private static void LoadingUI_Patch(LoadingUI __instance) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)__instance.levelNumberText != (Object)null) { if (EnablePacmanColors.Value) { ((Graphic)__instance.levelNumberText).color = new Color(1f, 0.95f, 0f, 1f); } if (!SemiFunc.RunIsShop() && !SemiFunc.RunIsArena()) { int num = ((!((Object)(object)RunManager.instance != (Object)null)) ? 1 : (RunManager.instance.levelsCompleted + 1)); ((TMP_Text)__instance.levelNumberText).text = $"{LevelPrefixConfig.Value} {num}"; } } if ((Object)(object)__instance.levelNameText != (Object)null && EnablePacmanColors.Value) { ((Graphic)__instance.levelNameText).color = Color.white; } } catch (Exception arg) { Log.LogWarning((object)$"Could not patch LoadingUI: {arg}"); } } } public const string PluginGuid = "com.empress.repo.pacman_loader"; public const string PluginName = "PacmanLevelLoader"; public const string PluginVersion = "1.0.2"; internal static ManualLogSource Log; internal static ConfigEntry<string> LevelPrefixConfig; internal static ConfigEntry<bool> EnablePacmanColors; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; LevelPrefixConfig = ((BaseUnityPlugin)this).Config.Bind<string>("General", "LevelPrefix", "PAC-LEVEL", "Prefix for the level number."); EnablePacmanColors = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnablePacmanColors", true, "If true, changes text color to Pac-Man yellow."); Harmony.CreateAndPatchAll(typeof(Patches), (string)null); Log.LogInfo((object)"PacmanLevelLoader loaded. No more crashes!"); } } }