Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Revenant Player v1.0.2
RevenantPlayer.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Photon.Pun; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("RevenantPlayer")] [assembly: AssemblyFileVersion("1.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("RevenantPlayer")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RevenantPlayer")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("com.GameCorp.revenantplayer", "Revenant Player", "1.0.2")] public class RevenantPlayer : BaseUnityPlugin { public class RevenantInitializer { [RuntimeInitializeOnLoadMethod(/*Could not decode attribute arguments.*/)] private static void Init() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!((Object)(object)Object.FindObjectOfType<RevenantBehaviour>() != (Object)null)) { GameObject val = new GameObject("RevenantHandler"); val.AddComponent<RevenantBehaviour>(); Object.DontDestroyOnLoad((Object)(object)val); } } } public class RevenantBehaviour : MonoBehaviour { private void Update() { Instance?.HandleInput(); } } [CompilerGenerated] private sealed class <DelayedRevenantRevive>d__11 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PlayerAvatar avatar; public RevenantPlayer <>4__this; private MethodInfo <reviveMethod>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedRevenantRevive>d__11(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <reviveMethod>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(2f); <>1__state = 1; return true; case 1: <>1__state = -1; <reviveMethod>5__1 = ((object)avatar).GetType().GetMethod("Revive", BindingFlags.Instance | BindingFlags.Public); if (<reviveMethod>5__1 != null) { <reviveMethod>5__1.Invoke(avatar, new object[1] { false }); BecomeRevenant(avatar); } else { log.LogError((object)"Méthode Revive introuvable."); } 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 static RevenantPlayer Instance; public static ManualLogSource log; private static bool isRevenant = false; private static bool canRevive = true; private static bool transformed = false; public Material laserMaterial; private void Awake() { //IL_0027: 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_003d: Expected O, but got Unknown Instance = this; log = ((BaseUnityPlugin)this).Logger; log.LogInfo((object)"Revenant Player chargé."); new Harmony("com.GameCorp.revenantplayer").PatchAll(); GameObject val = new GameObject("RevenantBehaviour"); Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent<RevenantBehaviour>(); } private void HandleInput() { if (Input.GetKeyDown((KeyCode)107)) { log.LogInfo((object)"Touche K pressée - test de mort"); SimulateDeath(); } if (isRevenant && !transformed && Input.GetKeyDown((KeyCode)103)) { log.LogInfo((object)"Transformation Revenant déclenchée !"); TransformToRevenant(); } if (isRevenant && transformed && Input.GetMouseButtonDown(0)) { log.LogInfo((object)"Attaque du Revenant !"); Attack(); } } private void SimulateDeath() { PlayerAvatar val = Object.FindObjectOfType<PlayerAvatar>(); if ((Object)(object)val != (Object)null) { ((object)val).GetType().GetMethod("PlayerDeath", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.Invoke(val, new object[1] { -1 }); ((MonoBehaviour)this).StartCoroutine(DelayedRevenantRevive(val)); } else { log.LogError((object)"PlayerAvatar non trouvé !"); } } [IteratorStateMachine(typeof(<DelayedRevenantRevive>d__11))] private IEnumerator DelayedRevenantRevive(PlayerAvatar avatar) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedRevenantRevive>d__11(0) { <>4__this = this, avatar = avatar }; } public static bool ShouldReviveAsRevenant() { return canRevive && Random.value <= 1f; } public static void BecomeRevenant(PlayerAvatar avatar) { //IL_0070: 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) //IL_0165: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)avatar == (Object)null || isRevenant) { return; } isRevenant = true; transformed = false; log.LogInfo((object)"Le joueur est maintenant un Revenant !"); if (!GameDirector.instance.PlayerList.Contains(avatar)) { GameDirector.instance.PlayerList.Add(avatar); } GameObject gameObject = ((Component)avatar).gameObject; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(gameObject.transform.position, ref val, 2f, -1)) { gameObject.transform.position = ((NavMeshHit)(ref val)).position; } else { log.LogWarning((object)"Impossible de repositionner le joueur sur une NavMesh !"); } MonoBehaviour[] components = gameObject.GetComponents<MonoBehaviour>(); foreach (MonoBehaviour val2 in components) { if ((Object)(object)val2 != (Object)null && !((Behaviour)val2).enabled) { ((Behaviour)val2).enabled = true; } } CharacterController component = gameObject.GetComponent<CharacterController>(); if ((Object)(object)component != (Object)null) { ((Collider)component).enabled = true; } Rigidbody component2 = gameObject.GetComponent<Rigidbody>(); if ((Object)(object)component2 != (Object)null) { component2.isKinematic = false; } NavMeshAgent component3 = gameObject.GetComponent<NavMeshAgent>(); if ((Object)(object)component3 != (Object)null) { ((Behaviour)component3).enabled = false; ((Behaviour)component3).enabled = true; component3.Warp(gameObject.transform.position); } Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; FieldInfo field = typeof(PlayerAvatar).GetField("isDead", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { field.SetValue(avatar, false); } FieldInfo field2 = typeof(PlayerAvatar).GetField("health", BindingFlags.Instance | BindingFlags.NonPublic); if (field2 != null) { field2.SetValue(avatar, 100); } FieldInfo field3 = typeof(PlayerAvatar).GetField("stamina", BindingFlags.Instance | BindingFlags.NonPublic); if (field3 != null) { field3.SetValue(avatar, 100f); } } private void TransformToRevenant() { transformed = true; log.LogInfo((object)"Transformation réussie !"); } private void Attack() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_005d: 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_0069: 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_006b: Unknown result type (might be due to invalid IL or missing references) if (isRevenant && transformed) { PlayerAvatar val = Object.FindObjectOfType<PlayerAvatar>(); if (!((Object)(object)val == (Object)null)) { log.LogInfo((object)"Revenant attaque avec le LaserManager !"); Vector3 start = ((Component)val).transform.position + Vector3.up * 1.5f; Vector3 forward = ((Component)val).transform.forward; LaserManager.FireLaser(start, forward); } } } public static void UIShowHealth(float value) { log.LogInfo((object)$"[UI] Santé : {value}"); } public static void UIShowEnergy(float value) { log.LogInfo((object)$"[UI] Énergie : {value}"); } public static void UIShowInventory(string[] items) { log.LogInfo((object)("[UI] Inventaire : " + string.Join(", ", items))); } public static void UIShowAim(bool active) { log.LogInfo((object)$"[UI] Viseur actif : {active}"); } } [HarmonyPatch] public static class Patch_GameDirector_DeathStart { [CompilerGenerated] private sealed class <DelayedRevive>d__2 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PlayerAvatar avatar; private PhotonView <view>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedRevive>d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <view>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1.5f); <>1__state = 1; return true; case 1: <>1__state = -1; if (!((Component)avatar).gameObject.activeInHierarchy) { ManualLogSource log = RevenantPlayer.log; if (log != null) { log.LogWarning((object)"Avatar désactivé, réactivation forcée."); } ((Component)avatar).gameObject.SetActive(true); } <view>5__1 = ((Component)avatar).GetComponent<PhotonView>(); if ((Object)(object)<view>5__1 != (Object)null) { if ((Object)(object)((Component)avatar).GetComponent<RevenantNetworkHandler>() == (Object)null) { ((Component)avatar).gameObject.AddComponent<RevenantNetworkHandler>(); } <view>5__1.RPC("RevenantReviveRPC", (RpcTarget)0, Array.Empty<object>()); ManualLogSource log2 = RevenantPlayer.log; if (log2 != null) { log2.LogInfo((object)"RevenantReviveRPC envoyé à tous les clients."); } } else { ManualLogSource log3 = RevenantPlayer.log; if (log3 != null) { log3.LogError((object)"PhotonView introuvable sur l'avatar !"); } } 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("GameDirector:DeathStart", (Type[])null, (Type[])null); } private static bool Prefix() { if (RevenantPlayer.ShouldReviveAsRevenant()) { ManualLogSource log = RevenantPlayer.log; if (log != null) { log.LogInfo((object)"Patch: Mort évitée. Devenu Revenant."); } PlayerAvatar val = Object.FindObjectOfType<PlayerAvatar>(); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"⚠\ufe0f avatar est NULL !"); return true; } CoroutineRunner.Instance.RunCoroutine(DelayedRevive(val)); return false; } return true; } [IteratorStateMachine(typeof(<DelayedRevive>d__2))] private static IEnumerator DelayedRevive(PlayerAvatar avatar) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedRevive>d__2(0) { avatar = avatar }; } } public class CoroutineRunner : MonoBehaviour { private static CoroutineRunner _instance; public static CoroutineRunner Instance { get { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown if ((Object)(object)_instance == (Object)null) { GameObject val = new GameObject("CoroutineRunner"); Object.DontDestroyOnLoad((Object)(object)val); _instance = val.AddComponent<CoroutineRunner>(); } return _instance; } } public void RunCoroutine(IEnumerator coroutine) { ((MonoBehaviour)this).StartCoroutine(coroutine); } } public class LaserManager : MonoBehaviour { public static void FireLaser(Vector3 start, Vector3 direction, float range = 100f, float duration = 0.3f) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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_0024: 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_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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_003d: Expected O, but got Unknown //IL_0051: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_009a: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Expected O, but got Unknown //IL_0112: Unknown result type (might be due to invalid IL or missing references) bool flag = false; RaycastHit val = default(RaycastHit); Vector3 val2; if (Physics.Raycast(start, direction, ref val, range, -1)) { val2 = ((RaycastHit)(ref val)).point; flag = true; } else { val2 = start + direction * range; } GameObject val3 = new GameObject("RevenantLaser"); LineRenderer val4 = val3.AddComponent<LineRenderer>(); val4.positionCount = 2; val4.SetPosition(0, start); val4.SetPosition(1, val2); val4.startWidth = 0.1f; val4.endWidth = 0.05f; ((Renderer)val4).material = new Material(Shader.Find("Legacy Shaders/Particles/Additive")); ((Renderer)val4).material.color = Color.red; val4.useWorldSpace = true; if (flag) { GameObject val5 = GameObject.CreatePrimitive((PrimitiveType)0); val5.transform.position = val2; val5.transform.localScale = Vector3.one * 0.2f; Renderer component = val5.GetComponent<Renderer>(); component.material = new Material(Shader.Find("Legacy Shaders/Particles/Alpha Blended")); component.material.color = Color.yellow; Object.Destroy((Object)(object)val5.GetComponent<Collider>()); Object.Destroy((Object)(object)val5, 0.4f); } Object.Destroy((Object)(object)val3, duration); } } public class RevenantNetworkHandler : MonoBehaviourPun { [CompilerGenerated] private sealed class <WaitAndRevive>d__1 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public RevenantNetworkHandler <>4__this; private PlayerAvatar <avatar>5__1; private MethodInfo <reviveMethod>5__2; private Exception <ex>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WaitAndRevive>d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <avatar>5__1 = null; <reviveMethod>5__2 = null; <ex>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 1; return true; case 1: <>1__state = -1; <avatar>5__1 = ((Component)<>4__this).GetComponent<PlayerAvatar>(); if ((Object)(object)<avatar>5__1 == (Object)null) { ManualLogSource log = RevenantPlayer.log; if (log != null) { log.LogError((object)"RevenantReviveRPC: avatar introuvable !"); } return false; } <reviveMethod>5__2 = ((object)<avatar>5__1).GetType().GetMethod("Revive", BindingFlags.Instance | BindingFlags.Public); if (<reviveMethod>5__2 != null) { try { <reviveMethod>5__2.Invoke(<avatar>5__1, new object[1] { false }); RevenantPlayer.BecomeRevenant(<avatar>5__1); } catch (Exception ex) { <ex>5__3 = ex; ManualLogSource log2 = RevenantPlayer.log; if (log2 != null) { log2.LogError((object)("Erreur pendant Revive: " + <ex>5__3.Message + "\n" + <ex>5__3.StackTrace)); } } } else { ManualLogSource log3 = RevenantPlayer.log; if (log3 != null) { log3.LogError((object)"Méthode Revive introuvable dans RPC."); } } 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(); } } [PunRPC] public void RevenantReviveRPC() { ((MonoBehaviour)this).StartCoroutine(WaitAndRevive()); } [IteratorStateMachine(typeof(<WaitAndRevive>d__1))] private IEnumerator WaitAndRevive() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <WaitAndRevive>d__1(0) { <>4__this = this }; } }