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 Custom Host Voting Power v1.0.0
plugins/CustomHostVotingPower/CustomHostVotingPower.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 System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CustomHostVotingPower.Compatibility; using CustomHostVotingPower.Configuration; using CustomHostVotingPower.Hooks; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LobbyCompatibility.Enums; using LobbyCompatibility.Features; using Microsoft.CodeAnalysis; using MonoMod.RuntimeDetour; using TMPro; using Unity.Netcode; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("CustomHostVotingPower.Confusified.com.GitHub")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+1fec286e9d119407273c914d99442c73a1a4abd6")] [assembly: AssemblyProduct("Custom Host Voting Power")] [assembly: AssemblyTitle("CustomHostVotingPower.Confusified.com.GitHub")] [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 CustomHostVotingPower { [BepInPlugin("CustomHostVotingPower.Confusified.com.GitHub", "Custom Host Voting Power", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class CustomHostVotingPower : BaseUnityPlugin { private static readonly string configLocation = Utility.CombinePaths(new string[1] { Paths.ConfigPath + "\\" + "CustomHostVotingPower.Confusified.com.GitHub".Substring(22, 12).Replace(".", "\\") }) + "CustomHostVotingPower.Confusified.com.GitHub".Substring(0, 21); internal static ConfigFile cfg = new ConfigFile(configLocation + ".cfg", false); public static CustomHostVotingPower Instance { get; private set; } = null; internal static ManualLogSource Logger { get; private set; } = null; internal static List<IDetour> Hooks { get; set; } = new List<IDetour>(); private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Config.Init(); InitCompatibility(); Hook(); Logger.LogInfo((object)"Custom Host Voting Power v1.0.0 has loaded!"); } internal static void Hook() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown Logger.LogDebug((object)"Hooking methods"); Hooks.Add((IDetour)new Hook((MethodBase)typeof(TimeOfDay).GetMethod("SetShipLeaveEarlyServerRpc", AccessTools.allDeclared), (Delegate)new Action<Action<TimeOfDay>, TimeOfDay>(AdjustHostVotingPower.UpdateHostVotingPower))); Hooks.Add((IDetour)new Hook((MethodBase)typeof(TimeOfDay).GetMethod("VoteShipToLeaveEarly", AccessTools.allDeclared), (Delegate)new Action<Action<TimeOfDay>, TimeOfDay>(AdjustHostVotingPower.CheckForHostVote))); Hooks.Add((IDetour)new Hook((MethodBase)typeof(HUDManager).GetMethod("Awake", AccessTools.allDeclared), (Delegate)new Action<Action<HUDManager>, HUDManager>(AdjustHostVotingPower.GetHUDManager))); Logger.LogDebug((object)"Finished hooking"); } internal static void InitCompatibility() { foreach (string dependency in DependencyStrings.dependencyList) { if (!Chainloader.PluginInfos.ContainsKey(dependency)) { continue; } if (!(dependency == "ainavt.lc.lethalconfig")) { if (dependency == "BMX.LobbyCompatibility") { RegisterLobbyCompatibility.Init(); } else { Logger.LogDebug((object)"Dependency does not have any code made for it"); } } else { RegisterLethalConfig.Init(); } } } } internal static class DependencyStrings { internal const string LethalConfig = "ainavt.lc.lethalconfig"; internal const string LobbyCompatibility = "BMX.LobbyCompatibility"; internal static List<string> dependencyList = new List<string>(2) { "ainavt.lc.lethalconfig", "BMX.LobbyCompatibility" }; } public static class MyPluginInfo { public const string PLUGIN_GUID = "CustomHostVotingPower.Confusified.com.GitHub"; public const string PLUGIN_NAME = "Custom Host Voting Power"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace CustomHostVotingPower.Hooks { public static class AdjustHostVotingPower { private static int customVoteInt; private static bool hostCalledVote; private static int totalVotesNeeded; public static HUDManager hudManager; public static void CheckForHostVote(Action<TimeOfDay> orig, TimeOfDay self) { if (!self.votedShipToLeaveEarlyThisRound) { hostCalledVote = ((NetworkBehaviour)self).NetworkManager.IsHost; } orig(self); hostCalledVote = false; } public static void UpdateHostVotingPower(Action<TimeOfDay> orig, TimeOfDay self) { CustomHostVotingPower.Logger.LogDebug((object)$"host called vote: {hostCalledVote}"); if (Config.useCustomVotingPower.Value && hostCalledVote) { StartOfRound instance = StartOfRound.Instance; totalVotesNeeded = int.Parse(((TMP_Text)hudManager.holdButtonToEndGameEarlyVotesText).text.Split("/")[1].Split(" ")[0]); if (Config.usePercentageOfTotalVotesRequired.Value) { float num = (float)Config.customVotingPowerPercentage.Value * 0.01f; customVoteInt = (int)MathF.Round((float)totalVotesNeeded * num); } else { customVoteInt = Config.customVotingPower.Value; } if (customVoteInt <= 0) { customVoteInt = 0; customVoteInt++; } self.votesForShipToLeaveEarly += customVoteInt; CustomHostVotingPower.Logger.LogDebug((object)$"Increased votes with {customVoteInt}"); if (self.votesForShipToLeaveEarly >= totalVotesNeeded) { if (Config.limitCustomVotes.Value) { self.votesForShipToLeaveEarly = totalVotesNeeded; CustomHostVotingPower.Logger.LogDebug((object)"Amount of votes was set to the total required amount because the threshold has been reached"); } self.SetShipLeaveEarlyClientRpc(self.normalizedTimeOfDay + 0.1f, self.votesForShipToLeaveEarly); } else { for (int i = 0; i < customVoteInt; i++) { self.AddVoteForShipToLeaveEarlyClientRpc(); } } } else { orig(self); } } public static void GetHUDManager(Action<HUDManager> orig, HUDManager self) { orig(self); hudManager = self; } } } namespace CustomHostVotingPower.Configuration { public static class Config { public static ConfigEntry<bool> useCustomVotingPower { get; private set; } public static ConfigEntry<int> customVotingPower { get; private set; } public static ConfigEntry<bool> usePercentageOfTotalVotesRequired { get; private set; } public static ConfigEntry<int> customVotingPowerPercentage { get; private set; } public static ConfigEntry<bool> limitCustomVotes { get; private set; } public static void Init() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown CustomHostVotingPower.Logger.LogDebug((object)"Initialising config"); ConfigFile cfg = CustomHostVotingPower.cfg; ConfigDescription val = new ConfigDescription("Determines how many votes will be added when you vote (as a host)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), Array.Empty<object>()); useCustomVotingPower = cfg.Bind<bool>("Global Settings", "Use Custom Voting Power", true, "Enables custom voting power for the host. (You must be the host)"); limitCustomVotes = cfg.Bind<bool>("Global Settings", "Do Not Go Over Vote Threshold", true, "When enabled, your voting power will be limited by the total required amount of votes"); customVotingPower = cfg.Bind<int>("Voting Settings", "Custom Voting Power", 2, val); usePercentageOfTotalVotesRequired = cfg.Bind<bool>("Percentage Voting Settings", "Use Percentage Of Total Required Votes", false, "When enabled, your voting power will be equal to the percentage of required total votes"); customVotingPowerPercentage = cfg.Bind<int>("Percentage Voting Settings", "Custom Voting Power Percentage", 50, val); CustomHostVotingPower.Logger.LogDebug((object)"Config initialised"); } } } namespace CustomHostVotingPower.Compatibility { public static class RegisterLethalConfig { public static void Init() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown CustomHostVotingPower.Logger.LogDebug((object)"Creating config entries"); LethalConfigManager.SkipAutoGen(); BoolCheckBoxConfigItem val = new BoolCheckBoxConfigItem(Config.useCustomVotingPower, false); BoolCheckBoxConfigItem val2 = new BoolCheckBoxConfigItem(Config.usePercentageOfTotalVotesRequired, false); BoolCheckBoxConfigItem val3 = new BoolCheckBoxConfigItem(Config.limitCustomVotes, false); IntInputFieldConfigItem val4 = new IntInputFieldConfigItem(Config.customVotingPower, false); IntSliderConfigItem val5 = new IntSliderConfigItem(Config.customVotingPowerPercentage, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val3); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val5); CustomHostVotingPower.Logger.LogDebug((object)"Config entries created"); } } public static class RegisterLobbyCompatibility { public static void Init() { CustomHostVotingPower.Logger.LogDebug((object)"Registering mod to LobbyCompatibility"); PluginHelper.RegisterPlugin("CustomHostVotingPower.Confusified.com.GitHub", Version.Parse("1.0.0"), (CompatibilityLevel)1, (VersionStrictness)0); CustomHostVotingPower.Logger.LogDebug((object)"Mod registered"); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }