Please disclose if your mod was created primarily 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 Adjustable Taming Speed v2.0.0
AdjustGrowUpTime.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using AuthoritativeConfig; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Adjust Grow Up Time")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Adjust Grow Up Time")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("fa9f13d0-53d8-4e76-acf0-32a4fb85370b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace AuthoritativeConfig { public class Config { private static Config _instance; public Dictionary<string, ConfigBaseEntry> _configEntries; public BaseUnityPlugin _mod; private static ConfigEntry<bool> _ServerIsAuthoritative; private static bool _DefaultBindAuthority; public static ManualLogSource Logger; public static Config Instance { get { if (_instance == null) { _instance = new Config(); } return _instance; } set { } } public static ZNet ZNet => ZNet.instance; public static string GUID => Instance._mod.Info.Metadata.GUID; public static string RPC_SYNC_GUID => "AuthoritativeConfig_" + GUID; public void init(BaseUnityPlugin mod, bool defaultBindServerAuthority = false) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown _mod = mod; Logger = new ManualLogSource(RPC_SYNC_GUID); Logger.Sources.Add((ILogSource)(object)Logger); _configEntries = new Dictionary<string, ConfigBaseEntry>(); _DefaultBindAuthority = defaultBindServerAuthority; _ServerIsAuthoritative = _mod.Config.Bind<bool>("ServerAuthoritativeConfig", "ServerIsAuthoritative", true, "<Server Only> Forces Clients to use Server defined configs."); Harmony.CreateAndPatchAll(typeof(Config), (string)null); Logger.LogInfo((object)"Initialized Server Authoritative Config Manager."); } [HarmonyPatch(typeof(Game), "Start")] [HarmonyPostfix] private static void RegisterSyncConfigRPC() { Logger.LogInfo((object)("Authoritative Config Registered -> " + RPC_SYNC_GUID)); ZRoutedRpc.instance.Register<ZPackage>(RPC_SYNC_GUID, (Action<long, ZPackage>)RPC_SyncServerConfig); foreach (ConfigBaseEntry value in Instance._configEntries.Values) { value.ClearServerValue(); } } [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] [HarmonyPostfix] private static void RequestConfigFromServer() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown if (!ZNet.IsServer() && (int)ZNet.GetConnectionStatus() == 2) { long? num = AccessTools.Method(typeof(ZRoutedRpc), "GetServerPeerID", (Type[])null, (Type[])null).Invoke(ZRoutedRpc.instance, null) as long?; ZRoutedRpc.instance.InvokeRoutedRPC(num.Value, RPC_SYNC_GUID, new object[1] { (object)new ZPackage() }); Logger.LogInfo((object)("Authoritative Config Registered -> " + RPC_SYNC_GUID)); Debug.Log((object)(Instance._mod.Info.Metadata.Name + ": Authoritative Config Requested -> " + RPC_SYNC_GUID)); } else if (!ZNet.IsServer()) { Logger.LogWarning((object)"Failed to Request Configs. Bad Peer? Too Early?"); } } public ConfigEntry<T> Bind<T>(string section, string key, T defaultValue, ConfigDescription configDescription = null, bool? serverAuthoritative = null) { ConfigEntry<T> configEntry = new ConfigEntry<T>(_mod.Config.Bind<T>(section, key, defaultValue, configDescription), serverAuthoritative.HasValue ? serverAuthoritative.Value : _DefaultBindAuthority); _configEntries[((object)configEntry.BaseEntry.Definition).ToString()] = configEntry; return configEntry; } public ConfigEntry<T> Bind<T>(ConfigDefinition configDefinition, T defaultValue, ConfigDescription configDescription = null, bool? serverAuthoritative = null) { ConfigEntry<T> configEntry = new ConfigEntry<T>(_mod.Config.Bind<T>(configDefinition, defaultValue, configDescription), serverAuthoritative.HasValue ? serverAuthoritative.Value : _DefaultBindAuthority); _configEntries[((object)configEntry.BaseEntry.Definition).ToString()] = configEntry; return configEntry; } public ConfigEntry<T> Bind<T>(string section, string key, T defaultValue, string description, bool? serverAuthoritative = null) { ConfigEntry<T> configEntry = new ConfigEntry<T>(_mod.Config.Bind<T>(section, key, defaultValue, description), serverAuthoritative.HasValue ? serverAuthoritative.Value : _DefaultBindAuthority); _configEntries[((object)configEntry.BaseEntry.Definition).ToString()] = configEntry; return configEntry; } public static void SendConfigToClient(long sender) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown if (!ZNet.IsServer()) { return; } ZPackage val = new ZPackage(); int num = 0; foreach (KeyValuePair<string, ConfigBaseEntry> configEntry in Instance._configEntries) { if (configEntry.Value.ServerAuthoritative) { val.Write(configEntry.Key); val.Write(configEntry.Value.BaseEntry.GetSerializedValue()); num++; Logger.LogInfo((object)("Sending Config " + configEntry.Key + ": " + configEntry.Value.BaseEntry.GetSerializedValue())); } } ZRoutedRpc.instance.InvokeRoutedRPC(sender, RPC_SYNC_GUID, new object[1] { val }); Logger.LogInfo((object)$"Sent {num} config pairs to client {sender}"); } public static void ReadConfigPkg(ZPackage pkg) { if (ZNet.IsServer()) { return; } int num = 0; while (pkg.GetPos() != pkg.Size()) { string text = pkg.ReadString(); string text2 = pkg.ReadString(); num++; if (Instance._configEntries.ContainsKey(text)) { Instance._configEntries[text].SetSerializedValue(text2); Logger.LogInfo((object)("Applied Server Authoritative config pair => " + text + ": " + text2)); } else { Logger.LogError((object)("Recieved config key we dont have locally. Possible Version Mismatch. " + text + ": " + text2)); } } Logger.LogInfo((object)$"Applied {num} config pairs"); } public static void RPC_SyncServerConfig(long sender, ZPackage pkg) { if (ZNet.IsServer() && _ServerIsAuthoritative.Value) { SendConfigToClient(sender); } else if (!ZNet.IsServer() && pkg != null && pkg.Size() > 0 && AccessTools.Method(typeof(ZRoutedRpc), "GetServerPeerID", (Type[])null, (Type[])null).Invoke(ZRoutedRpc.instance, null) as long? == sender) { ReadConfigPkg(pkg); } } } public class ConfigBaseEntry { protected object _serverValue; public ConfigEntryBase BaseEntry; public bool ServerAuthoritative; protected bool _didError; internal ConfigBaseEntry(ConfigEntryBase configEntry, bool serverAuthoritative) { BaseEntry = configEntry; ServerAuthoritative = serverAuthoritative; } public void SetSerializedValue(string value) { try { _serverValue = TomlTypeConverter.ConvertToValue(value, BaseEntry.SettingType); _didError = false; } catch (Exception ex) { Config.Logger.LogWarning((object)$"Config value of setting \"{BaseEntry.Definition}\" could not be parsed and will be ignored. Reason: {ex.Message}; Value: {value}"); } } public void ClearServerValue() { _serverValue = null; _didError = false; } } public class ConfigEntry<T> : ConfigBaseEntry { private ConfigEntry<T> _configEntry; public T ServerValue => (T)_serverValue; public T Value { get { if (ServerAuthoritative && !Config.ZNet.IsServer()) { if (_serverValue != null) { return ServerValue; } if (!_didError) { Config.Logger.LogWarning((object)("No Recieved value for Server Authoritative Config. " + ((object)BaseEntry.Definition).ToString() + ". Falling Back to Client Config.")); _didError = true; } return _configEntry.Value; } return _configEntry.Value; } set { _configEntry.Value = value; } } internal ConfigEntry(ConfigEntry<T> configEntry, bool serverAuthoritative) : base((ConfigEntryBase)(object)configEntry, serverAuthoritative) { _configEntry = configEntry; } } } namespace Adjust_Grow_Up_Time { [BepInPlugin("zukane2.AdjustGrowUpTime", "Adjust Grow Up Time", "2.0.0")] public class AdjustGrowUpTime : BaseUnityPlugin { [HarmonyPatch(typeof(Growup), "Start")] private static class Grow_Awake_Patch { private static void Postfix(ref float ___m_growTime) { ___m_growTime = growTime.Value; } } private readonly Harmony harmony = new Harmony("zukane2.AdjustGrowUpTime"); private static ConfigEntry<float> growTime; public Config Config { get { return Config.Instance; } set { } } private void Awake() { Config.init((BaseUnityPlugin)(object)this, defaultBindServerAuthority: true); growTime = Config.Bind("General", "GrowTime", 3000f, "Grow Time"); harmony.PatchAll(); } private void OnDestroy() { harmony.UnpatchSelf(); } } }