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 SyncHostUpgrades v1.0.0
SyncHostUpgrades.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SyncHostUpgrades")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+d1169f47f709005def97c8080dffab3bf9994b2a")] [assembly: AssemblyProduct("SyncHostUpgrades")] [assembly: AssemblyTitle("SyncHostUpgrades")] [assembly: AssemblyVersion("1.0.0.0")] 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; } } } namespace SyncHostUpgrades { [BepInPlugin("SharkLucas.REPO.SyncHostUpgrades", "R.E.P.O. Sync Host Upgrades", "1.0.0")] public class SyncHostUpgrades : BaseUnityPlugin { public ConfigEntry<bool>? SyncHealth; public ConfigEntry<bool>? SyncStamina; public ConfigEntry<bool>? SyncExtraJump; public ConfigEntry<bool>? SyncMapPlayerCount; public ConfigEntry<bool>? SyncGrabRange; public ConfigEntry<bool>? SyncGrabStrength; public ConfigEntry<bool>? SyncGrabThrow; public ConfigEntry<bool>? SyncSprintSpeed; public ConfigEntry<bool>? SyncTumbleLaunch; private static readonly FieldRef<PlayerAvatar, bool> isLocalRef = AccessTools.FieldRefAccess<PlayerAvatar, bool>("isLocal"); private static readonly FieldRef<PlayerAvatar, string> playerNameRef = AccessTools.FieldRefAccess<PlayerAvatar, string>("playerName"); private static readonly FieldRef<PlayerAvatar, string> steamIDRef = AccessTools.FieldRefAccess<PlayerAvatar, string>("steamID"); private static PlayerAvatar? cachedLocalPlayer = null; private static float lastCheckTime = 0f; public static SyncHostUpgrades? Instance { get; private set; } private void Awake() { //IL_0134: Unknown result type (might be due to invalid IL or missing references) Instance = this; SyncHealth = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Health", true, "Sync Max Health"); SyncStamina = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Stamina", true, "Sync Max Stamina"); SyncExtraJump = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Extra Jump", true, "Sync Extra Jump Count"); SyncTumbleLaunch = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Tumble Launch", true, "Sync Tumble Launch Count"); SyncMapPlayerCount = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Map Player Count", true, "Sync Map Player Count"); SyncSprintSpeed = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Sprint Speed", false, "Sync Sprint Speed"); SyncGrabStrength = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Grab Strength", true, "Sync Grab Strength"); SyncGrabRange = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Grab Range", true, "Sync Grab Range"); SyncGrabThrow = ((BaseUnityPlugin)this).Config.Bind<bool>("Sync", "Grab Throw", true, "Sync Grab Throw"); new Harmony("REPO.SyncHostUpgrades").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"SyncHostUpgrades loaded!"); ((Object)((Component)this).gameObject).hideFlags = (HideFlags)4; } private void Update() { if (!PhotonNetwork.IsMasterClient) { return; } PlayerAvatar localPlayer = GetLocalPlayer(); if (!((Object)(object)localPlayer != (Object)null)) { return; } Dictionary<string, int> dictionary = StatsManager.instance.FetchPlayerUpgrades(steamIDRef.Invoke(localPlayer)); foreach (PlayerAvatar item in SemiFunc.PlayerGetAll()) { if (isLocalRef.Invoke(item)) { continue; } string text = steamIDRef.Invoke(item); Dictionary<string, int> dictionary2 = StatsManager.instance.FetchPlayerUpgrades(text); foreach (string key in dictionary.Keys) { bool flag = false; switch (key) { case "Health": flag = SyncHealth?.Value ?? false; break; case "Stamina": flag = SyncStamina?.Value ?? false; break; case "Extra Jump": flag = SyncExtraJump?.Value ?? false; break; case "Launch": flag = SyncTumbleLaunch?.Value ?? false; break; case "Map Player Count": flag = SyncMapPlayerCount?.Value ?? false; break; case "Speed": flag = SyncSprintSpeed?.Value ?? false; break; case "Strength": flag = SyncGrabStrength?.Value ?? false; break; case "Range": flag = SyncGrabRange?.Value ?? false; break; case "Throw": flag = SyncGrabThrow?.Value ?? false; break; } if (!flag || !dictionary.TryGetValue(key, out var value) || value <= dictionary2[key]) { continue; } int num = value - dictionary2[key]; for (int i = 0; i < num; i++) { switch (key) { case "Health": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerHealth(text); } break; case "Stamina": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerEnergy(text); } break; case "Extra Jump": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerExtraJump(text); } break; case "Launch": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerTumbleLaunch(text); } break; case "Map Player Count": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradeMapPlayerCount(text); } break; case "Speed": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerSprintSpeed(text); } break; case "Strength": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerGrabStrength(text); } break; case "Range": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerGrabRange(text); } break; case "Throw": if (PhotonNetwork.IsMasterClient) { PunManager.instance.UpgradePlayerThrowStrength(text); } break; } } ((BaseUnityPlugin)this).Logger.LogInfo((object)$"为玩家 {playerNameRef.Invoke(item)} 同步升级: {key}, 从 {dictionary2[key]} 到 {value}"); } } } public static PlayerAvatar? GetLocalPlayer() { if ((Object)(object)cachedLocalPlayer != (Object)null && Time.time - lastCheckTime < 1f) { return cachedLocalPlayer; } lastCheckTime = Time.time; foreach (PlayerAvatar item in SemiFunc.PlayerGetAll()) { if (isLocalRef.Invoke(item)) { cachedLocalPlayer = item; return item; } } return cachedLocalPlayer; } } }