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 UpturnedVariety v2.2.0
UpturnedVariety.dll
Decompiled 3 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; 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 HarmonyLib; using LobbyCompatibility.Enums; using LobbyCompatibility.Features; using Microsoft.CodeAnalysis; using TMPro; using Unity.Netcode; using UnityEngine; using UpturnedVariety.Defs.Items; [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-CSharp")] [assembly: AssemblyCompany("UpturnedVariety")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Includes some assets from The Upturned for vanilla-friendly variety")] [assembly: AssemblyFileVersion("2.2.0.0")] [assembly: AssemblyInformationalVersion("2.2.0+6496fa70b5bb4a5f7ae9f893269d4ab9d81e0783")] [assembly: AssemblyProduct("UpturnedVariety")] [assembly: AssemblyTitle("UpturnedVariety")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.2.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace UpturnedVariety { internal static class LobbyCompatibility { internal static void Init() { PluginHelper.RegisterPlugin("butterystancakes.lethalcompany.upturnedvariety", Version.Parse("2.2.0"), (CompatibilityLevel)0, (VersionStrictness)0); } } [BepInPlugin("butterystancakes.lethalcompany.upturnedvariety", "Upturned Variety", "2.2.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal const string PLUGIN_GUID = "butterystancakes.lethalcompany.upturnedvariety"; internal const string PLUGIN_NAME = "Upturned Variety"; internal const string PLUGIN_VERSION = "2.2.0"; internal static ManualLogSource Logger; private const string GUID_LOBBY_COMPATIBILITY = "BMX.LobbyCompatibility"; private const string GUID_GENERAL_IMPROVEMENTS = "ShaosilGaming.GeneralImprovements"; internal static ConfigEntry<bool> configBoombox; internal static ConfigEntry<bool> configRecord; internal static AudioClip boombox; internal static AudioClip collectChocolateBar; internal static AudioClip collectedAllChocolateBarsJingle; internal static AudioClip hauntedRecordPlayer1; internal static bool INSTALLED_GENERAL_IMPROVEMENTS; private void Awake() { //IL_0124: Unknown result type (might be due to invalid IL or missing references) Logger = ((BaseUnityPlugin)this).Logger; if (Chainloader.PluginInfos.ContainsKey("BMX.LobbyCompatibility")) { Logger.LogInfo((object)"CROSS-COMPATIBILITY - Lobby Compatibility detected"); LobbyCompatibility.Init(); } if (Chainloader.PluginInfos.ContainsKey("ShaosilGaming.GeneralImprovements")) { INSTALLED_GENERAL_IMPROVEMENTS = true; Logger.LogInfo((object)"CROSS-COMPATIBILITY - GeneralImprovements detected"); } configBoombox = ((BaseUnityPlugin)this).Config.Bind<bool>("Items", "Boombox", true, "Enables alternate models for the \"Boombox\" item."); configRecord = ((BaseUnityPlugin)this).Config.Bind<bool>("Furniture", "RecordPlayer", true, "Enables alternate tracks for the \"Record player\" furniture."); SkinManager.LoadAllConfigs(((BaseUnityPlugin)this).Config); try { AssetBundle obj = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "upturnedvariety")); boombox = obj.LoadAsset<AudioClip>("Boombox"); collectChocolateBar = obj.LoadAsset<AudioClip>("CollectChocolateBar"); collectedAllChocolateBarsJingle = obj.LoadAsset<AudioClip>("CollectedAllChocolateBarsJingle"); hauntedRecordPlayer1 = obj.LoadAsset<AudioClip>("HauntedRecordPlayer1"); SkinManager.LoadAllSkins(obj); obj.Unload(false); } catch { Logger.LogError((object)"Encountered some error loading asset bundle. Did you install the plugin correctly?"); return; } new Harmony("butterystancakes.lethalcompany.upturnedvariety").PatchAll(); Logger.LogInfo((object)"Upturned Variety v2.2.0 loaded"); } } [HarmonyPatch] internal class UpturnedVarietyPatches { private static readonly Color SHINY_BOOMBOX = new Color(0.5799929f, 0.5799929f, 0.5799929f); private static StartMatchLever _startMatchLever; private static Random recordRandom; private static AnimatedObjectTrigger recordPlayerTrigger; private static AudioClip recordPlayerJazz; private static float recordDoppler; private static float recordVolume; private static StartMatchLever StartMatchLever { get { if ((Object)(object)_startMatchLever == (Object)null) { _startMatchLever = Object.FindAnyObjectByType<StartMatchLever>(); } return _startMatchLever; } } [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPostfix] private static void StartOfRound_Post_Awake(StartOfRound __instance) { if ((Object)(object)Plugin.boombox != (Object)null) { Item val = ((IEnumerable<Item>)__instance.allItemsList.itemsList).FirstOrDefault((Func<Item, bool>)((Item item) => ((Object)item).name == "Boombox" && item.itemId == 9)); if ((Object)(object)val != (Object)null) { BoomboxItem component = val.spawnPrefab.GetComponent<BoomboxItem>(); if (Array.IndexOf(component.musicAudios, Plugin.boombox) < 0) { component.musicAudios = new List<AudioClip>(component.musicAudios) { Plugin.boombox }.ToArray(); Plugin.Logger.LogDebug((object)"Loaded Upturned track into Boombox"); } } } SkinManager.Reset(); } [HarmonyPatch(typeof(RoundManager), "SyncScrapValuesClientRpc")] [HarmonyPostfix] private static void RoundManager_Post_SyncScrapValuesClientRpc(NetworkObjectReference[] spawnedScrap) { SkinManager.ApplySkinsToItems(spawnedScrap); } [HarmonyPatch(typeof(GrabbableObject), "Start")] [HarmonyPostfix] private static void GrabbableObject_Post_Start(GrabbableObject __instance) { if (((Object)__instance.itemProperties).name == "FishTestProp" && (Object)(object)__instance.mainObjectRenderer != (Object)null) { SkinManager.fish.Add((Renderer)(object)__instance.mainObjectRenderer); } } [HarmonyPatch(typeof(GrabbableObject), "SetControlTipsForItem")] [HarmonyPostfix] private static void GrabbableObject_Post_SetControlTipsForItem(GrabbableObject __instance) { SubstituteItemName substituteItemName = default(SubstituteItemName); if (((Component)__instance).TryGetComponent<SubstituteItemName>(ref substituteItemName)) { ((TMP_Text)HUDManager.Instance.controlTipLines[0]).SetText(((TMP_Text)HUDManager.Instance.controlTipLines[0]).text.Replace(__instance.itemProperties.itemName, substituteItemName.subName), true); } if (!((Object)(object)((Component)__instance).GetComponent<UnusableItem>() != (Object)null)) { return; } for (int i = 0; i < HUDManager.Instance.controlTipLines.Length; i++) { if (((TMP_Text)HUDManager.Instance.controlTipLines[i]).text.StartsWith("Use")) { ((TMP_Text)HUDManager.Instance.controlTipLines[i]).SetText(string.Empty, true); } } } [HarmonyPatch(typeof(BoomboxItem), "Start")] [HarmonyPostfix] private static void BoomboxItem_Post_Start(BoomboxItem __instance) { //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) NetworkObject val = default(NetworkObject); if (Plugin.configBoombox.Value && !((Object)(object)((GrabbableObject)__instance).mainObjectRenderer == (Object)null) && !((Object)(object)StartMatchLever == (Object)null) && StartMatchLever.leverHasBeenPulled && ((Component)__instance).TryGetComponent<NetworkObject>(ref val) && new Random(StartOfRound.Instance.randomMapSeed * (int)val.NetworkObjectId).NextDouble() >= 0.5) { Material[] materials = ((Renderer)((GrabbableObject)__instance).mainObjectRenderer).materials; materials[3].SetColor("_Color", SHINY_BOOMBOX); materials[3].SetColor("_BaseColor", SHINY_BOOMBOX); materials[3].SetFloat("_Metallic", 0.6833333f); materials[3].SetFloat("_Smoothness", 0.275f); ((Renderer)((GrabbableObject)__instance).mainObjectRenderer).materials = materials; } } [HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")] [HarmonyPostfix] private static void RoundManager_Post_DespawnPropsAtEndOfRound() { SkinManager.chocolates.Clear(); recordRandom = new Random(StartOfRound.Instance.randomMapSeed + 3232022); } [HarmonyPatch(typeof(HUDManager), "AddNewScrapFoundToDisplay")] [HarmonyPostfix] private static void HUDManager_Post_AddNewScrapFoundToDisplay(GrabbableObject GObject) { if (SkinManager.chocolates.Count > 0 && SkinManager.chocolates.Contains(GObject)) { SkinManager.chocolates.Remove(GObject); HUDManager.Instance.UIAudio.PlayOneShot(Plugin.collectChocolateBar); if (SkinManager.chocolates.Count < 1) { HUDManager.Instance.UIAudio.PlayOneShot(Plugin.collectedAllChocolateBarsJingle); } } } [HarmonyPatch(typeof(GrabbableObject), "EquipItem")] [HarmonyPostfix] private static void GrabbableObject_Post_EquipItem(GrabbableObject __instance) { if (((NetworkBehaviour)__instance).IsOwner && SkinManager.chocolates.Contains(__instance)) { Transform obj = ((Component)__instance).transform.Find("Jingle"); AudioSource val = ((obj != null) ? ((Component)obj).GetComponent<AudioSource>() : null); if ((Object)(object)val != (Object)null) { val.Stop(); val.pitch = Random.Range(1.6f, 2.3f); val.Play(); } } } [HarmonyPatch(typeof(AnimatedObjectTrigger), "PlayAudio")] [HarmonyPrefix] private static void AnimatedObjectTrigger_Pre_PlayAudio(AnimatedObjectTrigger __instance) { if ((!Plugin.configRecord.Value && (Object)(object)recordPlayerTrigger == (Object)null) || (Object)(object)GameNetworkManager.Instance?.localPlayerController == (Object)null || (Object)(object)__instance.thisAudioSource == (Object)null || (Object)(object)__instance.playWhileTrue == (Object)null || (Object)(object)Plugin.hauntedRecordPlayer1 == (Object)null) { return; } if ((Object)(object)recordPlayerTrigger == (Object)null && (Object)(object)__instance.triggerAnimator != (Object)null && ((Object)__instance.triggerAnimator).name.StartsWith("RecordPlayerContainer")) { recordPlayerTrigger = __instance; if ((Object)(object)recordPlayerJazz == (Object)null) { recordPlayerJazz = __instance.playWhileTrue; recordDoppler = __instance.thisAudioSource.dopplerLevel; recordVolume = __instance.thisAudioSource.volume; } } if (!((Object)(object)__instance == (Object)(object)recordPlayerTrigger) || recordRandom == null) { return; } AudioClip val = ((Plugin.configRecord.Value && recordRandom.NextDouble() < 0.5) ? Plugin.hauntedRecordPlayer1 : recordPlayerJazz); if (!((Object)(object)__instance.thisAudioSource.clip == (Object)(object)val)) { __instance.playWhileTrue = val; if ((Object)(object)val == (Object)(object)Plugin.hauntedRecordPlayer1) { __instance.thisAudioSource.dopplerLevel = 1.78f; __instance.thisAudioSource.volume = recordVolume * 0.5f; Plugin.Logger.LogDebug((object)"Loaded Upturned track into Record player"); } else { __instance.thisAudioSource.dopplerLevel = recordDoppler; __instance.thisAudioSource.volume = recordVolume; Plugin.Logger.LogDebug((object)"Loaded default track into Record player"); } __instance.audioTime = 0f; } } [HarmonyPatch(typeof(StartOfRound), "Start")] [HarmonyPostfix] private static void StartOfRound_Post_Start(StartOfRound __instance) { recordRandom = new Random(__instance.randomMapSeed + 3232022); } [HarmonyPatch(typeof(StartOfRound), "OnPlayerConnectedClientRpc")] [HarmonyPostfix] private static void StartOfRound_Post_OnPlayerConnectedClientRpc(StartOfRound __instance) { recordRandom = new Random(__instance.randomMapSeed + 3232022); } [HarmonyPatch(typeof(TimeOfDay), "SyncTimeClientRpc")] [HarmonyPostfix] private static void TimeOfDay_Post_SyncTimeClientRpc(TimeOfDay __instance) { recordRandom = new Random(StartOfRound.Instance.randomMapSeed + 3232022 / __instance.RoundUpToNearestTen(__instance.globalTime)); } } internal static class SharedPalette { internal static readonly Color RUBBER_HANDLE_UPTURNED = new Color(0.01842319f, 0.01562534f, 0.01562534f); internal static readonly Color DARK_STEEL_UPTURNED = new Color(0.2547169f, 0.2547169f, 0.2547169f); } internal static class SkinManager { private static readonly List<IUpturnedItem> allSkinnedItems = new List<IUpturnedItem>(11) { new UpturnedGiftBox(), new UpturnedCandy(), new UpturnedCashRegister(), new UpturnedPerfume(), new UpturnedPills(), new UpturnedMug(), new UpturnedControlPad(), new UpturnedFish(), new UpturnedSteeringWheel(), new UpturnedPickles(), new UpturnedLamp() }; private static HashSet<ulong> cache = new HashSet<ulong>(); private static Random random; internal static List<Renderer> fish = new List<Renderer>(); internal static List<GrabbableObject> chocolates = new List<GrabbableObject>(); internal static void LoadAllConfigs(ConfigFile cfg) { foreach (IUpturnedItem allSkinnedItem in allSkinnedItems) { allSkinnedItem.LoadConfigs(cfg); } } internal static void LoadAllSkins(AssetBundle bundle) { foreach (IUpturnedItem allSkinnedItem in allSkinnedItems) { allSkinnedItem.LoadSkins(bundle); } } internal static void Reset() { cache.Clear(); fish.Clear(); chocolates.Clear(); } internal static void ApplySkinsToItems(NetworkObjectReference[] netRefs) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) random = new Random(StartOfRound.Instance.randomMapSeed + 32322); NetworkObject val2 = default(NetworkObject); GrabbableObject item = default(GrabbableObject); for (int i = 0; i < netRefs.Length; i++) { NetworkObjectReference val = netRefs[i]; if (!((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null) || !cache.Add(val2.NetworkObjectId) || !((Component)val2).TryGetComponent<GrabbableObject>(ref item)) { continue; } IUpturnedItem upturnedItem = allSkinnedItems.FirstOrDefault((IUpturnedItem skin) => skin.GetItemName() == ((Object)item.itemProperties).name); if (upturnedItem != null) { int[] randomData = upturnedItem.GetRandomData(); int[] array = new int[randomData.Length]; for (int j = 0; j < randomData.Length; j++) { array[j] = random.Next(randomData[j]); } if (upturnedItem.MatchToVanillaItem(item)) { upturnedItem.ApplySkin(item, array); } } } } internal static bool IsThereABanana() { bool flag = false; bool result = false; for (int i = 0; i < fish.Count; i++) { if ((Object)(object)fish[i] == (Object)null) { flag = true; } else if (fish[i].sharedMaterials != null && fish[i].sharedMaterials.Length == 3) { result = true; } } if (flag) { fish.RemoveAll((Renderer x) => x == null); } return result; } } public class SubstituteItemName : MonoBehaviour { public string subName; } public class UnusableItem : MonoBehaviour { private GrabbableObject item; private void LateUpdate() { if ((Object)(object)item == (Object)null) { item = ((Component)this).GetComponent<GrabbableObject>(); if ((Object)(object)item == (Object)null) { ((Behaviour)this).enabled = false; } else { item.useCooldown = 50f; } } else { item.currentUseCooldown = item.useCooldown; } } } public static class PluginInfo { public const string PLUGIN_GUID = "UpturnedVariety"; public const string PLUGIN_NAME = "UpturnedVariety"; public const string PLUGIN_VERSION = "2.2.0"; } } namespace UpturnedVariety.Defs.Items { internal interface IUpturnedItem { internal string GetItemName(); internal int[] GetRandomData(); internal void LoadConfigs(ConfigFile cfg); internal void LoadSkins(AssetBundle bundle); internal bool MatchToVanillaItem(GrabbableObject item); internal void ApplySkin(GrabbableObject item, int[] rand); } internal class UpturnedCandy : IUpturnedItem { private static readonly Color CANDY_WRAPPER = new Color(0.4528301f, 0.03396226f, 0f); private static readonly Color WRAPPER_FOIL = new Color(0.3584906f, 0.3584906f, 0.3584906f); private static readonly Color CHOCOLATE = new Color(0.1792453f, 0.07193222f, 0.03973834f); private static ConfigEntry<bool> enableTextures; private static ConfigEntry<bool> enableMeshes; private static ConfigEntry<int> chocolateChance; private static Material lollyPop; private static Material lightWood; private static Material candyPink; private static Material chocolateLabel; private static Material barcode; private static Mesh cylinder; private static Mesh sucker; private static Mesh cube; private static AudioClip chocolateBarJingle; public string GetItemName() { return "Candy"; } public int[] GetRandomData() { return new int[3] { 2, 2, 100 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "Candy", true, "Enables alternate palettes for the \"Candy\" item."); enableMeshes = cfg.Bind<bool>("Items", "CandyModels", true, "Enables alternate models for the \"Candy\" item."); chocolateChance = cfg.Bind<int>("Items", "Chocolate", 20, "Chance (in percentage) for the \"Candy\" item to be replaced with a \"Chocolate bar\" collectible."); } public void LoadSkins(AssetBundle bundle) { lollyPop = bundle.LoadAsset<Material>("LollyPop"); lightWood = bundle.LoadAsset<Material>("LightWood"); candyPink = bundle.LoadAsset<Material>("CandyPink"); chocolateLabel = bundle.LoadAsset<Material>("chocolateLabel"); barcode = bundle.LoadAsset<Material>("barcode"); cylinder = bundle.LoadAsset<Mesh>("Cylinder.001"); sucker = bundle.LoadAsset<Mesh>("Sucker"); cube = bundle.LoadAsset<Mesh>("Cube"); chocolateBarJingle = bundle.LoadAsset<AudioClip>("ChocolateBarJingle"); if ((Object)(object)lollyPop == (Object)null || (Object)(object)lightWood == (Object)null || (Object)(object)candyPink == (Object)null || (Object)(object)cylinder == (Object)null || (Object)(object)sucker == (Object)null || (Object)(object)chocolateLabel == (Object)null || (Object)(object)barcode == (Object)null || (Object)(object)cube == (Object)null || (Object)(object)chocolateBarJingle == (Object)null) { throw new Exception("Failed to load assets for \"Candy\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if (((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterials : null) != null && ((Renderer)item.mainObjectRenderer).sharedMaterials.Length == 2) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterials[0]).name.StartsWith("LollyPop"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) if (chocolateChance.Value > 0 && (chocolateChance.Value >= 100 || rand[2] < chocolateChance.Value)) { ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>().mesh = cube; Material[] array = (Material[])(object)new Material[5] { Object.Instantiate<Material>(((Renderer)item.mainObjectRenderer).sharedMaterials[0]), Object.Instantiate<Material>(((Renderer)item.mainObjectRenderer).sharedMaterials[0]), Object.Instantiate<Material>(((Renderer)item.mainObjectRenderer).sharedMaterials[0]), chocolateLabel, barcode }; array[0].SetColor("_Color", CANDY_WRAPPER); array[0].SetColor("_BaseColor", CANDY_WRAPPER); array[0].SetFloat("_Metallic", 0f); array[0].SetFloat("_Smoothness", 0.733f); array[1].SetColor("_Color", WRAPPER_FOIL); array[1].SetColor("_BaseColor", WRAPPER_FOIL); array[1].SetFloat("_Metallic", 0.692f); array[1].SetFloat("_Smoothness", 0.521f); array[2].SetColor("_Color", CHOCOLATE); array[2].SetColor("_BaseColor", CHOCOLATE); array[2].SetFloat("_Metallic", 0.439f); array[2].SetFloat("_Smoothness", 0.35f); ((Renderer)item.mainObjectRenderer).materials = array; ScanNodeProperties componentInChildren = ((Component)item).GetComponentInChildren<ScanNodeProperties>(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.headerText = "Chocolate bar"; } ((Component)item).gameObject.AddComponent<SubstituteItemName>().subName = "Chocolate bar"; GameObject val = new GameObject("Jingle"); val.AddComponent<AudioSource>().clip = chocolateBarJingle; val.transform.SetParent(((Component)item).transform); val.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); val.transform.localScale = Vector3.one; if (!SkinManager.chocolates.Contains(item)) { SkinManager.chocolates.Add(item); } Plugin.Logger.LogDebug((object)$"Candy #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} becomes chocolate bar"); return; } if (enableTextures.Value && rand[0] == 1) { ((Renderer)item.mainObjectRenderer).materials = (Material[])(object)new Material[2] { lollyPop, lightWood }; Plugin.Logger.LogDebug((object)$"Candy #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate texture"); if (rand[1] == 0) { ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>().mesh = cylinder; } } if (enableMeshes.Value && rand[1] == 1) { ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>().mesh = sucker; Plugin.Logger.LogDebug((object)$"Candy #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate model"); if (rand[0] == 0) { ((Renderer)item.mainObjectRenderer).materials = (Material[])(object)new Material[2] { candyPink, ((Renderer)item.mainObjectRenderer).sharedMaterials[1] }; } } } } internal class UpturnedCashRegister : IUpturnedItem { private static readonly Color BLUE_COUNTER = new Color(0.08535064f, 0.08980062f, 0.1320755f); private static readonly Color BRASS = new Color(0.3867925f, 0.2725252f, 0.2244126f); private static ConfigEntry<bool> enableModels; private static Mesh cashRegister; private static Material steelDoorKnob; public string GetItemName() { return "CashRegister"; } public int[] GetRandomData() { return new int[1] { 2 }; } public void LoadConfigs(ConfigFile cfg) { enableModels = cfg.Bind<bool>("Items", "CashRegister", true, "Enables alternate models for the \"Cash register\" item."); } public void LoadSkins(AssetBundle bundle) { cashRegister = bundle.LoadAsset<Mesh>("CashRegister"); steelDoorKnob = bundle.LoadAsset<Material>("SteelDoorKnob"); if ((Object)(object)cashRegister == (Object)null || (Object)(object)steelDoorKnob == (Object)null) { throw new Exception("Failed to load assets for \"Cash register\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if ((Object)(object)((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterial : null) != (Object)null && ((Object)((Renderer)item.mainObjectRenderer).sharedMaterial).name.StartsWith("CashRegisterMat")) { NoisemakerProp val = (NoisemakerProp)(object)((item is NoisemakerProp) ? item : null); if (val != null) { return (Object)(object)val.triggerAnimator != (Object)null; } } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) if (!enableModels.Value || rand[0] != 1) { return; } ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>().mesh = cashRegister; Material val = Object.Instantiate<Material>(((Renderer)item.mainObjectRenderer).sharedMaterial); val.SetTexture("_MainTex", (Texture)null); val.SetTexture("_BaseColorMap", (Texture)null); val.SetTexture("_NormalMap", (Texture)null); Material[] array = (Material[])(object)new Material[5] { val, Object.Instantiate<Material>(val), steelDoorKnob, Object.Instantiate<Material>(val), Object.Instantiate<Material>(val) }; array[0].SetColor("_Color", BLUE_COUNTER); array[0].SetColor("_BaseColor", BLUE_COUNTER); array[0].SetFloat("_Metallic", 0f); array[0].SetFloat("_Smoothness", 0.5f); array[1].SetColor("_Color", SharedPalette.DARK_STEEL_UPTURNED); array[1].SetColor("_BaseColor", SharedPalette.DARK_STEEL_UPTURNED); array[1].SetFloat("_Metallic", 0.724f); array[1].SetFloat("_Smoothness", 0.5f); array[3].SetColor("_Color", SharedPalette.RUBBER_HANDLE_UPTURNED); array[3].SetColor("_BaseColor", SharedPalette.RUBBER_HANDLE_UPTURNED); array[3].SetFloat("_Metallic", 0f); array[3].SetFloat("_Smoothness", 0.5f); array[4].SetColor("_Color", BRASS); array[4].SetColor("_BaseColor", BRASS); array[4].SetFloat("_Metallic", 0.78f); array[4].SetFloat("_Smoothness", 0.64f); ((Renderer)item.mainObjectRenderer).materials = array; NoisemakerProp val2 = (NoisemakerProp)(object)((item is NoisemakerProp) ? item : null); if (val2 != null) { Renderer[] componentsInChildren = ((Component)val2.triggerAnimator).GetComponentsInChildren<Renderer>(); foreach (Renderer obj in componentsInChildren) { obj.forceRenderingOff = true; obj.enabled = false; } ((Component)val2).gameObject.AddComponent<UnusableItem>(); } Plugin.Logger.LogDebug((object)$"Register #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate model"); } } internal class UpturnedControlPad : IUpturnedItem { private static ConfigEntry<bool> enableTextures; private static Texture arcadeControlPanel2; public string GetItemName() { return "ControlPad"; } public int[] GetRandomData() { return new int[1] { 2 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "ControlPad", true, "Enables alternate palettes for the \"Control pad\" item."); } public void LoadSkins(AssetBundle bundle) { arcadeControlPanel2 = bundle.LoadAsset<Texture>("ArcadeControlPanel2"); if ((Object)(object)arcadeControlPanel2 == (Object)null) { throw new Exception("Failed to load assets for \"Control pad\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { Renderer val = default(Renderer); if (((Component)item).TryGetComponent<Renderer>(ref val) && (Object)(object)val.sharedMaterial != (Object)null) { return ((Object)val.sharedMaterial).name.StartsWith("ArcadeControlPanel"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { if (enableTextures.Value && rand[0] == 1) { ((Component)item).GetComponent<Renderer>().material.mainTexture = arcadeControlPanel2; Plugin.Logger.LogDebug((object)$"Controller #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate texture"); } } } internal class UpturnedFish : IUpturnedItem { private static readonly Color YELLOW_FISH = new Color(0.773024f, 0.8392157f, 0.3692549f); private static readonly Color SILVER_FISH = new Color(0.5019608f, 0.1780566f, 0.1556078f); private static readonly Color YELLOW_RUBBER = new Color(0.44f, 0.4296874f, 0.2028124f); private static readonly Color MATERIAL_001 = new Color(0.3799999f, 0.243271f, 0.1527103f); private static ConfigEntry<bool> enableMeshes; private static Mesh fish2; private static Mesh sardine; private static Mesh sardine001; public string GetItemName() { return "FishTestProp"; } public int[] GetRandomData() { return new int[2] { 4, 3 }; } public void LoadConfigs(ConfigFile cfg) { enableMeshes = cfg.Bind<bool>("Items", "Fish", true, "Enables alternate models for the \"Plastic fish\" item."); } public void LoadSkins(AssetBundle bundle) { fish2 = bundle.LoadAsset<Mesh>("Fish2"); sardine = bundle.LoadAsset<Mesh>("Sardine"); sardine001 = bundle.LoadAsset<Mesh>("Sardine.001"); if ((Object)(object)fish2 == (Object)null || (Object)(object)sardine == (Object)null || (Object)(object)sardine001 == (Object)null) { throw new Exception("Failed to load assets for \"Plastic fish\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if (((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterials : null) != null && ((Renderer)item.mainObjectRenderer).sharedMaterials.Length == 2) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterials[0]).name.StartsWith("Eye"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_013e: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) if (!enableMeshes.Value) { return; } int num = rand[0]; if (num == 3 && SkinManager.IsThereABanana()) { num = rand[1]; } if (num > 0) { MeshFilter component = ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>(); switch (num) { case 1: { component.mesh = fish2; Material val4 = ((Renderer)item.mainObjectRenderer).materials[1]; val4.SetColor("_Color", YELLOW_FISH); val4.SetColor("_BaseColor", YELLOW_FISH); ((Renderer)item.mainObjectRenderer).materials = (Material[])(object)new Material[2] { val4, ((Renderer)item.mainObjectRenderer).sharedMaterials[0] }; break; } case 2: { component.mesh = sardine; Material val3 = ((Renderer)item.mainObjectRenderer).materials[1]; val3.SetColor("_Color", SILVER_FISH); val3.SetColor("_BaseColor", SILVER_FISH); ((Renderer)item.mainObjectRenderer).materials = (Material[])(object)new Material[2] { ((Renderer)item.mainObjectRenderer).sharedMaterials[0], val3 }; break; } case 3: { component.mesh = sardine001; Material val = ((Renderer)item.mainObjectRenderer).materials[1]; Material val2 = Object.Instantiate<Material>(val); val.SetColor("_Color", YELLOW_RUBBER); val.SetColor("_BaseColor", YELLOW_RUBBER); val2.SetColor("_Color", MATERIAL_001); val2.SetColor("_BaseColor", MATERIAL_001); ((Renderer)item.mainObjectRenderer).materials = (Material[])(object)new Material[3] { ((Renderer)item.mainObjectRenderer).sharedMaterials[0], val, val2 }; break; } } Plugin.Logger.LogDebug((object)$"Fish #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate model"); } } } internal class UpturnedGiftBox : IUpturnedItem { private static ConfigEntry<bool> enableTextures; private static Texture giftBoxTex2; public string GetItemName() { return "GiftBox"; } public int[] GetRandomData() { return new int[1] { 2 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "Gift", true, "Enables alternate palettes for the \"Gift box\" item."); } public void LoadSkins(AssetBundle bundle) { giftBoxTex2 = bundle.LoadAsset<Texture>("GiftBoxTex2"); if ((Object)(object)giftBoxTex2 == (Object)null) { throw new Exception("Failed to load assets for \"Gift box\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { if (item is GiftBoxItem) { return item.itemProperties.itemId == 152767; } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { if (enableTextures.Value && rand[0] == 1) { ((Component)item).GetComponent<Renderer>().material.mainTexture = giftBoxTex2; Plugin.Logger.LogDebug((object)$"Gift #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate texture"); } } } internal class UpturnedLamp : IUpturnedItem { private static readonly Color LAMP_STAND_UPTURNED = new Color(0.2395526f, 0.2213185f, 0.1565525f); private static readonly Color LAMPSHADE_LETHAL = new Color(0.513327f, 0.4134762f, 0.3871232f); private static readonly Color LAMP_STAND_LETHAL = new Color(0.5266604f, 0.5077859f, 0.4321852f); private static readonly Color DARK_STEEL_LETHAL = new Color(0.1733264f, 0.1733264f, 0.1733264f); private static ConfigEntry<bool> enableMeshes; private static Material lampshade; private static Mesh cylinder; public string GetItemName() { return "FancyLamp"; } public int[] GetRandomData() { return new int[2] { 2, 2 }; } public void LoadConfigs(ConfigFile cfg) { enableMeshes = cfg.Bind<bool>("Items", "Lamp", true, "Enables alternate models for the \"Fancy lamp\" item."); } public void LoadSkins(AssetBundle bundle) { lampshade = bundle.LoadAsset<Material>("Lampshade"); cylinder = bundle.LoadAsset<Mesh>("Cylinder.000"); if ((Object)(object)lampshade == (Object)null || (Object)(object)cylinder == (Object)null) { throw new Exception("Failed to load assets for \"Fancy lamp\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { if (Plugin.INSTALLED_GENERAL_IMPROVEMENTS && (Object)(object)item.mainObjectRenderer == (Object)null) { item.mainObjectRenderer = ((Component)item).GetComponent<MeshRenderer>(); } MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if ((Object)(object)((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterial : null) != (Object)null) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterial).name.StartsWith("FancyLampTex"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0180: 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) if (enableMeshes.Value && rand[1] == 1) { ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>().mesh = cylinder; Plugin.Logger.LogDebug((object)$"Lamp #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate model"); Material val = Object.Instantiate<Material>(((Renderer)item.mainObjectRenderer).sharedMaterial); val.SetTexture("_MainTex", (Texture)null); val.SetTexture("_BaseColorMap", (Texture)null); Material[] array = (Material[])(object)new Material[4] { default(Material), val, Object.Instantiate<Material>(val), Object.Instantiate<Material>(val) }; Light componentInChildren = ((Component)item.mainObjectRenderer).GetComponentInChildren<Light>(); ((Component)componentInChildren).transform.localPosition = new Vector3(((Component)componentInChildren).transform.localPosition.x, ((Component)componentInChildren).transform.localPosition.y, 1.626763f); if (rand[0] == 0) { array[0] = lampshade; array[1].SetColor("_Color", LAMP_STAND_UPTURNED); array[1].SetColor("_BaseColor", LAMP_STAND_UPTURNED); array[1].SetFloat("_Metallic", 0.7f); array[1].SetFloat("_Smoothness", 0.5f); array[2].SetColor("_Color", SharedPalette.RUBBER_HANDLE_UPTURNED); array[2].SetColor("_BaseColor", SharedPalette.RUBBER_HANDLE_UPTURNED); array[2].SetFloat("_Metallic", 0f); array[2].SetFloat("_Smoothness", 0.5f); array[3].SetColor("_Color", SharedPalette.DARK_STEEL_UPTURNED); array[3].SetColor("_BaseColor", SharedPalette.DARK_STEEL_UPTURNED); array[3].SetFloat("_Metallic", 0.724f); array[3].SetFloat("_Smoothness", 0.5f); componentInChildren.colorTemperature = 4846f; } else { array[0] = Object.Instantiate<Material>(val); array[0].SetColor("_Color", LAMPSHADE_LETHAL); array[0].SetColor("_BaseColor", LAMPSHADE_LETHAL); array[0].SetFloat("_Metallic", 0f); array[0].SetFloat("_Smoothness", 0.5f); array[1].SetColor("_Color", LAMP_STAND_LETHAL); array[1].SetColor("_BaseColor", LAMP_STAND_LETHAL); array[1].SetFloat("_Metallic", 0.4583333f); array[1].SetFloat("_Smoothness", 0.5f); array[2].SetColor("_Color", Color.black); array[2].SetColor("_BaseColor", Color.black); array[2].SetFloat("_Metallic", 0f); array[2].SetFloat("_Smoothness", 0.0916667f); array[3].SetColor("_Color", DARK_STEEL_LETHAL); array[3].SetColor("_BaseColor", DARK_STEEL_LETHAL); array[3].SetFloat("_Metallic", 0.3416667f); array[3].SetFloat("_Smoothness", 0.55f); componentInChildren.colorTemperature = 4412f; } ((Renderer)item.mainObjectRenderer).sharedMaterials = array; } } } internal class UpturnedMug : IUpturnedItem { private static ConfigEntry<bool> enableTextures; private static Material coffeeMug6; public string GetItemName() { return "Mug"; } public int[] GetRandomData() { return new int[1] { 6 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "Mug", true, "Enables alternate palettes for the \"Mug\" item."); } public void LoadSkins(AssetBundle bundle) { coffeeMug6 = bundle.LoadAsset<Material>("CoffeeMug6"); if ((Object)(object)coffeeMug6 == (Object)null) { throw new Exception("Failed to load assets for \"Mug\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if ((Object)(object)((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterial : null) != (Object)null) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterial).name.StartsWith("CoffeeMug"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { if (enableTextures.Value && rand[0] == 5) { ((Renderer)item.mainObjectRenderer).material = coffeeMug6; Plugin.Logger.LogDebug((object)$"Mug #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate texture"); } } } internal class UpturnedPerfume : IUpturnedItem { private static readonly Color RED = new Color(0.9f, 0.3922666f, 0.324f, 0.6313726f); private static readonly Color RED_TRANS = new Color(1f, 0.4f, 0.4f); private static readonly Color BLUE = new Color(0.4509091f, 0.416f, 0.8f, 0.6313726f); private static readonly Color BLUE_TRANS = new Color(0.59f, 0.6241666f, 1f); private static readonly Color BLACK = new Color(0.01f, 0.01f, 0.01f, 0.6313726f); private static readonly Color BLACK_TRANS = new Color(0.48f, 0.48f, 0.48f); private static ConfigEntry<bool> enableTextures; private static ConfigEntry<bool> enableMeshes; private static Mesh[] meshes; public string GetItemName() { return "PerfumeBottle"; } public int[] GetRandomData() { return new int[2] { 4, 6 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "Perfume", true, "Enables alternate palettes for the \"Perfume bottle\" item."); enableMeshes = cfg.Bind<bool>("Items", "PerfumeModels", true, "Enables alternate models for the \"Perfume bottle\" item."); } public void LoadSkins(AssetBundle bundle) { meshes = (Mesh[])(object)new Mesh[5] { bundle.LoadAsset<Mesh>("PerfumeBottle_001"), bundle.LoadAsset<Mesh>("PerfumeBottle_002"), bundle.LoadAsset<Mesh>("PerfumeBottle_003"), bundle.LoadAsset<Mesh>("PerfumeBottle_004"), bundle.LoadAsset<Mesh>("PerfumeBottle_005") }; if (meshes.Any((Mesh mesh) => mesh == null)) { throw new Exception("Failed to load assets for \"Perfume bottle\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if (((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterials : null) != null && ((Renderer)item.mainObjectRenderer).sharedMaterials.Length == 2) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterials[0]).name.StartsWith("Material.004"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) if (enableTextures.Value && rand[0] > 0) { Color val = default(Color); Color val2 = default(Color); switch (rand[0]) { case 1: val = RED; val2 = RED_TRANS; break; case 2: val = BLUE; val2 = BLUE_TRANS; break; case 3: val = BLACK; val2 = BLACK_TRANS; break; } Material val3 = ((Renderer)item.mainObjectRenderer).materials[0]; val3.SetColor("_Color", val); val3.SetColor("_BaseColor", val); val3.SetColor("_TransmittanceColor", val2); ((Renderer)item.mainObjectRenderer).materials = (Material[])(object)new Material[2] { val3, ((Renderer)item.mainObjectRenderer).sharedMaterials[1] }; Plugin.Logger.LogDebug((object)$"Perfume #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate color"); } if (enableMeshes.Value && rand[1] > 0 && rand[1] <= meshes.Length) { ((Component)item.mainObjectRenderer).GetComponent<MeshFilter>().mesh = meshes[rand[1] - 1]; Plugin.Logger.LogDebug((object)$"Perfume #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate model"); } } } internal class UpturnedPickles : IUpturnedItem { private static ConfigEntry<bool> enableMeshes; private static Material glassCase; private static Material displayCasePlastic; private static Mesh glassJar; private static GameObject candyGlob; public string GetItemName() { return "PickleJar"; } public int[] GetRandomData() { return new int[1] { 2 }; } public void LoadConfigs(ConfigFile cfg) { enableMeshes = cfg.Bind<bool>("Items", "Pickles", true, "Enables \"Candy jar\" replacement for the \"Jar of pickles\" item."); } public void LoadSkins(AssetBundle bundle) { glassJar = bundle.LoadAsset<Mesh>("GlassJar"); glassCase = bundle.LoadAsset<Material>("GlassCase"); displayCasePlastic = bundle.LoadAsset<Material>("DisplayCasePlastic"); candyGlob = bundle.LoadAsset<GameObject>("CandyGlob"); if ((Object)(object)glassJar == (Object)null || (Object)(object)glassCase == (Object)null || (Object)(object)displayCasePlastic == (Object)null || (Object)(object)candyGlob == (Object)null) { throw new Exception("Failed to load assets for \"Jar of pickles\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { Renderer val = default(Renderer); if (((Component)item).TryGetComponent<Renderer>(ref val) && val.sharedMaterials != null && val.sharedMaterials.Length == 2 && ((Object)val.sharedMaterials[0]).name.StartsWith("JarGlass")) { return (Object)(object)((Component)item).transform.Find("Pickles.001") != (Object)null; } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { if (enableMeshes.Value && rand[0] == 1) { ((Component)((Component)item).transform.Find("Pickles.001")).gameObject.SetActive(false); ((Component)item).GetComponent<MeshFilter>().mesh = glassJar; ((Component)item).GetComponent<Renderer>().materials = (Material[])(object)new Material[2] { glassCase, displayCasePlastic }; Object.Instantiate<GameObject>(candyGlob, ((Component)item).transform); ScanNodeProperties componentInChildren = ((Component)item).GetComponentInChildren<ScanNodeProperties>(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.headerText = "Candy filled jar"; } ((Component)item).gameObject.AddComponent<SubstituteItemName>().subName = "Candy jar"; Plugin.Logger.LogDebug((object)$"Pickles #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} is alternate"); } } } internal class UpturnedPills : IUpturnedItem { private static ConfigEntry<bool> enableTextures; private static Texture pillBottleTextureB2; public string GetItemName() { return "PillBottle"; } public int[] GetRandomData() { return new int[1] { 2 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "Pills", true, "Enables alternate palettes for the \"Pill bottle\" item."); } public void LoadSkins(AssetBundle bundle) { pillBottleTextureB2 = bundle.LoadAsset<Texture>("PillBottleTextureB2"); if ((Object)(object)pillBottleTextureB2 == (Object)null) { throw new Exception("Failed to load assets for \"Pill bottle\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { MeshRenderer mainObjectRenderer = item.mainObjectRenderer; if ((Object)(object)((mainObjectRenderer != null) ? ((Renderer)mainObjectRenderer).sharedMaterial : null) != (Object)null) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterial).name.StartsWith("Material.002"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { if (enableTextures.Value && rand[0] == 1) { ((Renderer)item.mainObjectRenderer).material.mainTexture = pillBottleTextureB2; Plugin.Logger.LogDebug((object)$"Pills #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate texture"); } } } internal class UpturnedSteeringWheel : IUpturnedItem { private static ConfigEntry<bool> enableTextures; private static Material darkPlastic; public string GetItemName() { return "SteeringWheel"; } public int[] GetRandomData() { return new int[1] { 2 }; } public void LoadConfigs(ConfigFile cfg) { enableTextures = cfg.Bind<bool>("Items", "SteeringWheel", true, "Enables alternate palettes for the \"Steering wheel\" item."); } public void LoadSkins(AssetBundle bundle) { darkPlastic = bundle.LoadAsset<Material>("DarkPlastic"); if ((Object)(object)darkPlastic == (Object)null) { throw new Exception("Failed to load assets for \"Steering wheel\" item"); } } public bool MatchToVanillaItem(GrabbableObject item) { if ((Object)(object)item.mainObjectRenderer != (Object)null && (Object)(object)((Renderer)item.mainObjectRenderer).sharedMaterial != (Object)null) { return ((Object)((Renderer)item.mainObjectRenderer).sharedMaterial).name.StartsWith("DirtySmoothSteel"); } return false; } public void ApplySkin(GrabbableObject item, int[] rand) { if (enableTextures.Value && rand[0] == 1) { ((Renderer)item.mainObjectRenderer).material = darkPlastic; Plugin.Logger.LogDebug((object)$"Wheel #{((Component)item).GetComponent<NetworkObject>().NetworkObjectId} using alternate texture"); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }