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 StaminaToEnergy v1.0.1
StaminaToEnergy.dll
Decompiled 2 months agousing System; using System.Collections.Generic; 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 ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using UnityEngine; 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+94404bf4f72256e50f3920c7fd016b939512314e")] [assembly: AssemblyProduct("StaminaToEnergy")] [assembly: AssemblyTitle("StaminaToEnergy")] [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.StaminaToEnergy { [BepInPlugin("Empress.StaminaToWeaponEnergy", "StaminaToWeaponEnergy", "1.2.0")] public class StaminaToWeaponEnergy : BaseUnityPlugin, IOnEventCallback, IConnectionCallbacks, IInRoomCallbacks { private ConfigEntry<KeyCode> keyActivate = null; private ConfigEntry<float> staminaPerSecond = null; private ConfigEntry<float> batteryPercentPerStamina = null; private ConfigEntry<float> minStaminaReserve = null; private const byte EventChargeRequest = 177; internal static StaminaToWeaponEnergy Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { //IL_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_00cd: Expected O, but got Unknown Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; keyActivate = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "ActivateKey", (KeyCode)120, ""); staminaPerSecond = ((BaseUnityPlugin)this).Config.Bind<float>("Tuning", "StaminaPerSecond", 5f, ""); batteryPercentPerStamina = ((BaseUnityPlugin)this).Config.Bind<float>("Tuning", "BatteryPercentPerStamina", 0.5f, ""); minStaminaReserve = ((BaseUnityPlugin)this).Config.Bind<float>("Tuning", "MinStaminaReserve", 5f, ""); GameObject val = new GameObject("__StaminaToWeaponEnergy_Runtime") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent<StaminaToWeaponEnergyRuntime>(); Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} ready"); } private void OnDestroy() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } internal void Patch() { //IL_001a: 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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } private void Update() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Expected O, but got Unknown //IL_01a9: Unknown result type (might be due to invalid IL or missing references) if (!StaminaToWeaponEnergyRuntime.RuntimeActive || !Input.GetKey(keyActivate.Value)) { return; } PlayerController instance = PlayerController.instance; if ((Object)(object)instance == (Object)null || instance.EnergyCurrent <= minStaminaReserve.Value) { return; } ItemBattery activeBattery = GetActiveBattery(); if ((Object)(object)activeBattery == (Object)null || activeBattery.isUnchargable || activeBattery.batteryLife >= 99.9f) { return; } float deltaTime = Time.deltaTime; float num = Mathf.Max(0f, instance.EnergyCurrent - minStaminaReserve.Value); if (num <= 0f) { return; } float num2 = Mathf.Min(staminaPerSecond.Value * deltaTime, num); if (num2 <= 0f) { return; } float num3 = batteryPercentPerStamina.Value * staminaPerSecond.Value; if (PhotonNetwork.IsMasterClient) { GameObject orCreateCharger = StaminaToWeaponEnergyRuntime.GetOrCreateCharger(PhotonNetwork.LocalPlayer.ActorNumber); activeBattery.ChargeBattery(orCreateCharger, num3); } else { PhotonView component = ((Component)activeBattery).GetComponent<PhotonView>(); if ((Object)(object)component != (Object)null) { object[] array = new object[2] { component.ViewID, num3 }; RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)2 }; PhotonNetwork.RaiseEvent((byte)177, (object)array, val, SendOptions.SendUnreliable); } } instance.EnergyCurrent = Mathf.Max(0f, instance.EnergyCurrent - num2); } public void OnEvent(EventData photonEvent) { if (!StaminaToWeaponEnergyRuntime.RuntimeActive || !PhotonNetwork.IsMasterClient || photonEvent.Code != 177 || !(photonEvent.CustomData is object[] array) || array.Length < 2) { return; } int num = (int)array[0]; float num2 = (float)array[1]; PhotonView val = PhotonView.Find(num); if (Object.op_Implicit((Object)(object)val)) { ItemBattery component = ((Component)val).GetComponent<ItemBattery>(); if (Object.op_Implicit((Object)(object)component) && !component.isUnchargable && !(component.batteryLife >= 99.9f)) { GameObject orCreateCharger = StaminaToWeaponEnergyRuntime.GetOrCreateCharger(photonEvent.Sender); component.ChargeBattery(orCreateCharger, num2); } } } public void OnConnected() { } public void OnConnectedToMaster() { } public void OnDisconnected(DisconnectCause cause) { StaminaToWeaponEnergyRuntime.FullDeactivate(); } public void OnRegionListReceived(RegionHandler regionHandler) { } public void OnCustomAuthenticationResponse(Dictionary<string, object> data) { } public void OnCustomAuthenticationFailed(string debugMessage) { } public void OnJoinedRoom() { StaminaToWeaponEnergyRuntime.TryActivate(); } public void OnLeftRoom() { StaminaToWeaponEnergyRuntime.FullDeactivate(); } public void OnPlayerEnteredRoom(Player newPlayer) { } public void OnPlayerLeftRoom(Player otherPlayer) { } public void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged) { } public void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps) { } public void OnMasterClientSwitched(Player newMasterClient) { } private ItemBattery? GetActiveBattery() { Inventory instance = Inventory.instance; if ((Object)(object)instance == (Object)null) { return null; } PhysGrabber physGrabber = instance.physGrabber; if ((Object)(object)physGrabber != (Object)null && (Object)(object)physGrabber.grabbedObjectTransform != (Object)null) { ItemBattery componentInParent = ((Component)physGrabber.grabbedObjectTransform).GetComponentInParent<ItemBattery>(); if ((Object)(object)componentInParent != (Object)null) { return componentInParent; } } List<InventorySpot> allSpots = instance.GetAllSpots(); if (allSpots != null) { for (int i = 0; i < allSpots.Count; i++) { InventorySpot obj = allSpots[i]; ItemEquippable val = ((obj != null) ? obj.CurrentItem : null); if (!((Object)(object)val == (Object)null) && val.IsEquipped()) { ItemBattery component = ((Component)val).GetComponent<ItemBattery>(); if ((Object)(object)component != (Object)null) { return component; } } } } return null; } } internal sealed class StaminaToWeaponEnergyRuntime : MonoBehaviour { private static StaminaToWeaponEnergyRuntime? _inst; private bool _wasActive; private static readonly Dictionary<int, GameObject> Chargers = new Dictionary<int, GameObject>(); internal static bool RuntimeActive { get; private set; } private void Awake() { if (Object.op_Implicit((Object)(object)_inst) && (Object)(object)_inst != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } _inst = this; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); SceneManager.activeSceneChanged += OnSceneChanged; } private void OnDestroy() { SceneManager.activeSceneChanged -= OnSceneChanged; FullDeactivate(); } private static void OnSceneChanged(Scene a, Scene b) { FullDeactivate(); } private void OnDisable() { FullDeactivate(); } private void Update() { if (!RuntimeReady()) { if (_wasActive) { FullDeactivate(); } } else if (!_wasActive) { TryActivate(); } } internal static bool RuntimeReady() { if (!PhotonNetwork.IsConnected || !PhotonNetwork.InRoom) { return false; } if (SemiFunc.MenuLevel()) { return false; } if (!Object.op_Implicit((Object)(object)LevelGenerator.Instance) || !LevelGenerator.Instance.Generated) { return false; } if (!Object.op_Implicit((Object)(object)PlayerAvatar.instance)) { return false; } return true; } internal static void TryActivate() { StaminaToWeaponEnergyRuntime inst = _inst; if (Object.op_Implicit((Object)(object)inst) && !inst._wasActive && RuntimeReady()) { PhotonNetwork.AddCallbackTarget((object)StaminaToWeaponEnergy.Instance); PhotonNetwork.AddCallbackTarget((object)StaminaToWeaponEnergy.Instance); PhotonNetwork.AddCallbackTarget((object)StaminaToWeaponEnergy.Instance); RuntimeActive = true; inst._wasActive = true; StaminaToWeaponEnergy.Logger.LogDebug((object)"[StaminaToWeaponEnergy] Runtime activated"); } } internal static void FullDeactivate() { StaminaToWeaponEnergyRuntime inst = _inst; if (!Object.op_Implicit((Object)(object)inst)) { Chargers.Clear(); return; } if (!inst._wasActive && !RuntimeActive) { Chargers.Clear(); return; } RuntimeActive = false; inst._wasActive = false; PhotonNetwork.RemoveCallbackTarget((object)StaminaToWeaponEnergy.Instance); PhotonNetwork.RemoveCallbackTarget((object)StaminaToWeaponEnergy.Instance); PhotonNetwork.RemoveCallbackTarget((object)StaminaToWeaponEnergy.Instance); Chargers.Clear(); StaminaToWeaponEnergy.Logger.LogDebug((object)"[StaminaToWeaponEnergy] Runtime deactivated"); } internal static GameObject GetOrCreateCharger(int actorNumber) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown if (Chargers.TryGetValue(actorNumber, out GameObject value) && Object.op_Implicit((Object)(object)value)) { return value; } GameObject val = new GameObject($"EmpressCharger_{actorNumber}"); ((Object)val).hideFlags = (HideFlags)61; Chargers[actorNumber] = val; return val; } } }