Decompiled source of CastNChillModNMenu v1.2.0
CastNChillModNMenu.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using System.Text.RegularExpressions; using System.Threading; using CastNChillCheats; using HarmonyLib; using Il2CppGame; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using Il2CppTMPro; using MelonLoader; using MelonLoader.Preferences; using MelonLoader.Utils; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(CheatsMod), "Cast n Chill Mod n Menu", "1.0.0", "scotty", null)] [assembly: MelonGame(null, null)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("CastNChillModNMenu")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("CastNChillModNMenu")] [assembly: AssemblyTitle("CastNChillModNMenu")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 CastNChillCheats { public class ContentManifest { public List<RodDefinition> rods = new List<RodDefinition>(); } public class RodDefinition { public string id; public string cloneFrom = ""; public string spriteAsset = ""; public int cost; } public static class CustomContentManager { private static readonly Instance Log = new Instance("CastNChillContent"); private static readonly List<AssetBundle> _loadedBundles = new List<AssetBundle>(); private static readonly List<RodData> _registeredRods = new List<RodData>(); private static readonly List<BoatData> _registeredBoats = new List<BoatData>(); private static readonly List<BoatVariantData> _registeredBoatVariants = new List<BoatVariantData>(); private static readonly List<FishData> _registeredFish = new List<FishData>(); private static readonly Regex BoatFileRegex = new Regex("^Boat(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase); private static readonly Regex RodFileRegex = new Regex("^Rod(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase); private static readonly Regex SnowmobileFileRegex = new Regex("^Snowmobile(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase); private static readonly Regex FishFileRegex = new Regex("^Fish(\\d+)(?:[_\\-\\s]+(.+))?$", RegexOptions.IgnoreCase); private static readonly Dictionary<string, string> _customNames = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); private static readonly Dictionary<string, Sprite> _customBoatWorldSprites = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase); private static readonly Dictionary<string, Sprite> _customBoatThumbSprites = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase); private static LureData _universalLure; public const string UniversalLureId = "UniversalLure"; public static string LastResult { get; private set; } = "Not loaded yet."; public static string ContentDirectory { get { if (CheatsMod.ContentDirectory == null || string.IsNullOrWhiteSpace(CheatsMod.ContentDirectory.Value)) { return Path.Combine(MelonEnvironment.ModsDirectory, "CastNChillContent"); } return CheatsMod.ContentDirectory.Value; } } public static void Reload() { UnloadAll(); string contentDirectory = ContentDirectory; try { Directory.CreateDirectory(contentDirectory); } catch (Exception ex) { LastResult = "Can't access '" + contentDirectory + "': " + ex.Message; Log.Warning(LastResult); return; } int value = RegisterBoatTextures(contentDirectory); int value2 = RegisterRodTextures(contentDirectory); int value3 = RegisterSnowmobileTextures(contentDirectory); int value4 = RegisterFishTextures(contentDirectory); string[] files = Directory.GetFiles(contentDirectory, "*.bundle", SearchOption.TopDirectoryOnly); int num = 0; string[] array = files; foreach (string text in array) { AssetBundle val; try { val = AssetBundle.LoadFromFile(text); } catch (Exception ex2) { Log.Warning("Failed to load bundle '" + text + "': " + ex2.Message); continue; } if ((Object)(object)val == (Object)null) { Log.Warning("Failed to load bundle: " + text); continue; } _loadedBundles.Add(val); string text2 = Path.Combine(Path.GetDirectoryName(text) ?? contentDirectory, Path.GetFileNameWithoutExtension(text) + ".manifest.json"); if (!File.Exists(text2)) { Log.Msg("Loaded bundle '" + Path.GetFileName(text) + "' (no matching .manifest.json, nothing registered)."); continue; } ContentManifest contentManifest; try { contentManifest = JsonConvert.DeserializeObject<ContentManifest>(File.ReadAllText(text2)); } catch (Exception ex3) { Log.Warning("Failed to parse '" + text2 + "': " + ex3.Message); continue; } if (contentManifest?.rods == null) { continue; } foreach (RodDefinition rod in contentManifest.rods) { if (RegisterRod(rod, val)) { num++; } } } LastResult = $"Boats {value}, Rods {value2}, Snowmobiles {value3}, Fish {value4}, bundle rods {num} ({_loadedBundles.Count} bundle file(s))."; Log.Msg(LastResult); RefreshShop(); } private static void RefreshShop() { try { Database instance = ScriptableObjectSingleton<Database>.Instance; if (instance != null) { ObjectDataTable boat = instance.Boat; if (boat != null) { boat.Sort(); } } Database instance2 = ScriptableObjectSingleton<Database>.Instance; if (instance2 != null) { ObjectDataTable boatVariant = instance2.BoatVariant; if (boatVariant != null) { boatVariant.Sort(); } } Database instance3 = ScriptableObjectSingleton<Database>.Instance; if (instance3 != null) { ObjectDataTable rod = instance3.Rod; if (rod != null) { rod.Sort(); } } Database instance4 = ScriptableObjectSingleton<Database>.Instance; if (instance4 != null) { ObjectDataTable lure = instance4.Lure; if (lure != null) { lure.Sort(); } } Database instance5 = ScriptableObjectSingleton<Database>.Instance; if (instance5 != null) { ObjectDataTable fish = instance5.Fish; if (fish != null) { fish.Sort(); } } } catch (Exception ex) { Log.Warning("Failed to re-sort item tables: " + ex.Message); } try { GUIShop val = Object.FindObjectOfType<GUIShop>(); if ((Object)(object)val != (Object)null) { val.RefreshItems(); Log.Msg("Shop was open — refreshed its item list."); } } catch (Exception ex2) { Log.Warning("Failed to refresh open shop: " + ex2.Message); } } private static bool IsImageFile(string path) { string text = Path.GetExtension(path).ToLowerInvariant(); if (!(text == ".png") && !(text == ".jpg")) { return text == ".jpeg"; } return true; } private static List<(string Path, string Number, string Name)> ScanNumberedFiles(string dir, Regex regex) { return (from f in Directory.GetFiles(dir) select new { Path = f, Match = regex.Match(Path.GetFileNameWithoutExtension(f)) } into x where x.Match.Success && IsImageFile(x.Path) orderby int.Parse(x.Match.Groups[1].Value) select (Path: x.Path, Value: x.Match.Groups[1].Value, x.Match.Groups[2].Success ? x.Match.Groups[2].Value.Trim() : null)).ToList(); } private static Sprite CreateMatchedSprite(Texture2D texture, Sprite templateSprite, float sizeMultiplier = 1f) { //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) float num = (((Object)(object)templateSprite != (Object)null) ? templateSprite.pixelsPerUnit : 100f) / Mathf.Max(0.01f, sizeMultiplier); Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0.5f, 0.5f); if ((Object)(object)templateSprite != (Object)null) { Rect rect = templateSprite.rect; if (((Rect)(ref rect)).width > 0f) { rect = templateSprite.rect; if (((Rect)(ref rect)).height > 0f) { float x = templateSprite.pivot.x; rect = templateSprite.rect; float num2 = x / ((Rect)(ref rect)).width; float y = templateSprite.pivot.y; rect = templateSprite.rect; ((Vector2)(ref val))..ctor(num2, y / ((Rect)(ref rect)).height); } } } return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), val, num); } private static Texture2D LoadTexture(string imagePath, out byte[] bytes) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown bytes = File.ReadAllBytes(imagePath); Texture2D val = new Texture2D(2, 2); if (!ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(bytes))) { return null; } return val; } private static UpgradeData[] CloneLevels(Il2CppReferenceArray<UpgradeData> templateLevels, string idPrefix, Action<UpgradeData> edit = null) { if (templateLevels == null) { return null; } UpgradeData[] array = (UpgradeData[])(object)new UpgradeData[((Il2CppArrayBase<UpgradeData>)(object)templateLevels).Length]; for (int i = 0; i < ((Il2CppArrayBase<UpgradeData>)(object)templateLevels).Length; i++) { UpgradeData val = ((Il2CppArrayBase<UpgradeData>)(object)templateLevels)[i]; if ((Object)(object)val == (Object)null) { array[i] = null; continue; } UpgradeData val2 = Object.Instantiate<UpgradeData>(val); ((ObjectData)val2).id = $"{idPrefix}_{i}"; ((ObjectData)val2).AssetName = ((ObjectData)val2).id; edit?.Invoke(val2); array[i] = val2; } return array; } private static int RegisterBoatTextures(string dir) { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null) { Log.Msg("No save loaded yet, skipping boat textures this pass — open a save and click Reload."); return 0; } int num = 0; foreach (var item in ScanNumberedFiles(dir, BoatFileRegex)) { bool flag = CheatsMod.CustomBoatMotor != null && CheatsMod.CustomBoatMotor.Value; BoatData template = FindTemplateBoat(flag, requireIce: false); if (RegisterVehicleFromTexture("CustomBoat" + item.Number, item.Path, item.Name, template, flag ? "motor" : "paddle")) { num++; } } return num; } private static int RegisterSnowmobileTextures(string dir) { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null) { Log.Msg("No save loaded yet, skipping snowmobile textures this pass — open a save and click Reload."); return 0; } int num = 0; foreach (var item in ScanNumberedFiles(dir, SnowmobileFileRegex)) { BoatData template = FindTemplateBoat(wantMotor: true, requireIce: true); if (RegisterVehicleFromTexture("CustomSnow" + item.Number, item.Path, item.Name, template, "snowmobile")) { num++; } } return num; } private static BoatData FindTemplateBoat(bool wantMotor, bool requireIce) { BoatData defaultBoat = Database.GetDefaultBoat(); foreach (BoatData item in Resources.FindObjectsOfTypeAll<BoatData>()) { if (!((Object)(object)item == (Object)null) && item.engine != null && (((ObjectData)item).id == null || (!((ObjectData)item).id.StartsWith("CustomBoat", StringComparison.OrdinalIgnoreCase) && !((ObjectData)item).id.StartsWith("CustomSnow", StringComparison.OrdinalIgnoreCase))) && (!requireIce || ((ShopItemData)item).IsIce)) { bool flag = !item.engine.row && ((Upgradable)item.engine).levels != null && ((Il2CppArrayBase<UpgradeData>)(object)((Upgradable)item.engine).levels).Length > 0; if (wantMotor && flag) { return item; } if (!wantMotor && item.engine.row) { return item; } } } if (!requireIce) { return defaultBoat; } return null; } private static bool RegisterVehicleFromTexture(string id, string imagePath, string customName, BoatData template, string kindLabel) { //IL_0142: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)template == (Object)null || (Object)(object)template.defaultVariant == (Object)null) { Log.Warning($"No matching template boat available to clone for '{id}' ({kindLabel})."); return false; } byte[] bytes; Texture2D val = LoadTexture(imagePath, out bytes); if ((Object)(object)val == (Object)null) { Log.Warning("'" + imagePath + "' isn't a valid image, skipping."); return false; } float num = ((CheatsMod.CustomBoatSize != null) ? CheatsMod.CustomBoatSize.Value : 1f); Sprite val2 = CreateMatchedSprite(val, template.defaultVariant.sprite, num); Sprite val3 = CreateMatchedSprite(val, ((ItemData)template).thumbSprite); BoatData defaultBoat = Database.GetDefaultBoat(); BoatData val4 = Object.Instantiate<BoatData>(template); ((ObjectData)val4).id = id; ((ObjectData)val4).AssetName = id; ((ShopItemData)val4).cost = ((ShopItemData)template).cost; ((ItemData)val4).sprite = val3; ((ItemData)val4).thumbSprite = val3; ((ItemData)val4).keys?.Clear(); if ((Object)(object)defaultBoat != (Object)null && !((ShopItemData)template).IsIce) { val4.locationType = defaultBoat.locationType; } int storageCapacity = ((CheatsMod.CustomBoatFishStorage != null) ? CheatsMod.CustomBoatFishStorage.Value : 20); Engine engine = val4.engine; if (((engine != null) ? ((Upgradable)engine).levels : null) != null) { ((Upgradable)val4.engine).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.engine).levels, id + "_engine")); } Storage storage = val4.storage; if (((storage != null) ? ((Upgradable)storage).levels : null) != null) { ((Upgradable)val4.storage).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.storage).levels, id + "_storage", delegate(UpgradeData tier) { BoatStorageData val6 = (BoatStorageData)(object)((tier is BoatStorageData) ? tier : null); if (val6 != null) { val6.capacity = storageCapacity; } })); } BoatVariantData val5 = Object.Instantiate<BoatVariantData>(template.defaultVariant); ((ObjectData)val5).id = id + "_variant"; ((ObjectData)val5).AssetName = ((ObjectData)val5).id; val5.sprite = val2; val5.boat = val4; val5.animatedSprite = null; val4.defaultVariant = val5; ScriptableObjectSingleton<Database>.Instance.Boat.m_list.Add((ObjectData)(object)val4); ScriptableObjectSingleton<Database>.Instance.BoatVariant.m_list.Add((ObjectData)(object)val5); _registeredBoats.Add(val4); _registeredBoatVariants.Add(val5); _customBoatWorldSprites[id] = val2; _customBoatThumbSprites[id] = val3; try { Journal instance = Journal.Instance; if (instance != null) { instance.GetItemUpgrades(id); } } catch { } if (!string.IsNullOrEmpty(customName)) { _customNames[id] = customName; } Log.Msg($"Registered custom {kindLabel} '{id}' from '{Path.GetFileName(imagePath)}' ({num:0.00}x, storage {storageCapacity}, cloned from '{((ObjectData)template).id}'{((customName != null) ? (", named '" + customName + "'") : "")})."); return true; } private static int RegisterRodTextures(string dir) { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null) { Log.Msg("No save loaded yet, skipping rod textures this pass — open a save and click Reload."); return 0; } int num = 0; foreach (var item in ScanNumberedFiles(dir, RodFileRegex)) { if (RegisterRodFromTexture("CustomRod" + item.Number, item.Path, item.Name)) { num++; } } return num; } public static List<string> GetAvailableRodIds() { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null) { return new List<string>(); } return (from r in (IEnumerable<RodData>)Resources.FindObjectsOfTypeAll<RodData>() where (Object)(object)r != (Object)null && ((ObjectData)r).id != null && !((ObjectData)r).id.StartsWith("CustomRod", StringComparison.OrdinalIgnoreCase) select ((ObjectData)r).id).Distinct().OrderBy<string, string>((string rid) => rid, StringComparer.OrdinalIgnoreCase).ToList(); } public static List<string> GetAvailableLureTypeIds() { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null) { return new List<string>(); } return (from l in (IEnumerable<LureTypeData>)Resources.FindObjectsOfTypeAll<LureTypeData>() where (Object)(object)l != (Object)null && ((ObjectData)l).id != null select ((ObjectData)l).id).Distinct().OrderBy<string, string>((string lid) => lid, StringComparer.OrdinalIgnoreCase).ToList(); } public static List<string> GetAvailableFishIds() { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null) { return new List<string>(); } return (from f in (IEnumerable<FishData>)Resources.FindObjectsOfTypeAll<FishData>() where (Object)(object)f != (Object)null && ((ObjectData)f).id != null select ((ObjectData)f).id).Distinct().OrderBy<string, string>((string fid) => fid, StringComparer.OrdinalIgnoreCase).ToList(); } private static RodData FindTemplateRod() { string text = CheatsMod.CustomRodTemplateId?.Value; if (!string.IsNullOrEmpty(text)) { RodData val = Database.FindRod(text); if ((Object)(object)val != (Object)null) { return val; } } RodData defaultRod = Database.GetDefaultRod(); foreach (RodData item in Resources.FindObjectsOfTypeAll<RodData>()) { if (!((Object)(object)item == (Object)null) && (((ObjectData)item).id == null || !((ObjectData)item).id.StartsWith("CustomRod", StringComparison.OrdinalIgnoreCase))) { return item; } } return defaultRod; } private static bool RegisterRodFromTexture(string id, string imagePath, string customName) { RodData val = FindTemplateRod(); if ((Object)(object)val == (Object)null) { Log.Warning("No template rod available to clone for '" + id + "'."); return false; } byte[] bytes; Texture2D val2 = LoadTexture(imagePath, out bytes); if ((Object)(object)val2 == (Object)null) { Log.Warning("'" + imagePath + "' isn't a valid image, skipping."); return false; } Sprite val3 = CreateMatchedSprite(val2, ((ItemData)val).sprite); Sprite thumbSprite = CreateMatchedSprite(val2, ((ItemData)val).thumbSprite); RodData val4 = Object.Instantiate<RodData>(val); ((ObjectData)val4).id = id; ((ObjectData)val4).AssetName = id; ((ItemData)val4).sprite = val3; val4.gameSprite = val3; ((ItemData)val4).thumbSprite = thumbSprite; ((ItemData)val4).keys?.Clear(); float weightKg = ((CheatsMod.CustomRodWeightKg != null) ? CheatsMod.CustomRodWeightKg.Value : 10f); Strength strength = val4.strength; if (((strength != null) ? ((Upgradable)strength).levels : null) != null) { ((Upgradable)val4.strength).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.strength).levels, id + "_str", delegate(UpgradeData tier) { RodStrengthData val5 = (RodStrengthData)(object)((tier is RodStrengthData) ? tier : null); if (val5 != null) { val5.weight = Mathf.RoundToInt(weightKg); } })); } Length length = val4.length; if (((length != null) ? ((Upgradable)length).levels : null) != null) { ((Upgradable)val4.length).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val4.length).levels, id + "_len")); } ScriptableObjectSingleton<Database>.Instance.Rod.m_list.Add((ObjectData)(object)val4); _registeredRods.Add(val4); try { Journal instance = Journal.Instance; if (instance != null) { instance.GetItemUpgrades(id); } } catch { } if (!string.IsNullOrEmpty(customName)) { _customNames[id] = customName; } Log.Msg($"Registered custom rod '{id}' from '{Path.GetFileName(imagePath)}' ({weightKg:0}kg capacity, cloned from '{((ObjectData)val).id}'{((customName != null) ? (", named '" + customName + "'") : "")})."); return true; } private static int RegisterFishTextures(string dir) { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null) { Log.Msg("No save loaded yet, skipping fish textures this pass — open a save and click Reload."); return 0; } int num = 0; foreach (var item in ScanNumberedFiles(dir, FishFileRegex)) { if (RegisterFishFromTexture("CustomFish" + item.Number, item.Path, item.Name)) { num++; } } return num; } private static FishData FindTemplateFish() { foreach (FishData item in Resources.FindObjectsOfTypeAll<FishData>()) { if (!((Object)(object)item == (Object)null) && ((ObjectData)item).id != null && !((ObjectData)item).id.StartsWith("CustomFish", StringComparison.OrdinalIgnoreCase)) { return item; } } return null; } private static bool RegisterFishFromTexture(string id, string imagePath, string customName) { FishData val = FindTemplateFish(); if ((Object)(object)val == (Object)null) { Log.Warning("No template fish available to clone for '" + id + "'."); return false; } byte[] bytes; Texture2D val2 = LoadTexture(imagePath, out bytes); if ((Object)(object)val2 == (Object)null) { Log.Warning("'" + imagePath + "' isn't a valid image, skipping."); return false; } Sprite val3 = CreateMatchedSprite(val2, ((ItemData)val).sprite); FishData val4 = Object.Instantiate<FishData>(val); ((ObjectData)val4).id = id; ((ObjectData)val4).AssetName = id; ((ItemData)val4).sprite = val3; ((ItemData)val4).keys?.Clear(); if (val4.sizeSprites != null && ((Il2CppArrayBase<Sprite>)(object)val4.sizeSprites).Length > 0) { Sprite[] array = (Sprite[])(object)new Sprite[((Il2CppArrayBase<Sprite>)(object)val4.sizeSprites).Length]; for (int i = 0; i < array.Length; i++) { array[i] = val3; } val4.sizeSprites = Il2CppReferenceArray<Sprite>.op_Implicit(array); } string lureTypeId = CheatsMod.CustomFishLureTypeId?.Value; if (!string.IsNullOrEmpty(lureTypeId)) { LureTypeData val5 = ((IEnumerable<LureTypeData>)Resources.FindObjectsOfTypeAll<LureTypeData>()).FirstOrDefault((Func<LureTypeData, bool>)((LureTypeData l) => (Object)(object)l != (Object)null && ((ObjectData)l).id == lureTypeId)); if ((Object)(object)val5 != (Object)null) { val4.preferredLureTypes = Il2CppReferenceArray<LureTypeData>.op_Implicit((LureTypeData[])(object)new LureTypeData[1] { val5 }); val4.ignoreLureTypes = Il2CppReferenceArray<LureTypeData>.op_Implicit(Array.Empty<LureTypeData>()); } else { Log.Warning($"Lure type '{lureTypeId}' not found, leaving '{id}' with its template's lure preferences."); } } ScriptableObjectSingleton<Database>.Instance.Fish.m_list.Add((ObjectData)(object)val4); _registeredFish.Add(val4); TryAddFishToCurrentLocation(id); if (!string.IsNullOrEmpty(customName)) { _customNames[id] = customName; } Log.Msg($"Registered custom fish '{id}' from '{Path.GetFileName(imagePath)}' (cloned from '{((ObjectData)val).id}'{((lureTypeId != null) ? (", requires lure '" + lureTypeId + "'") : "")}{((customName != null) ? (", named '" + customName + "'") : "")})."); return true; } private static void TryAddFishToCurrentLocation(string fishId) { try { Location instance = Singleton<Location>.Instance; LocationData val = ((instance != null) ? instance.Data : null); if ((Object)(object)val == (Object)null) { return; } Il2CppStringArray fish = val.fish; List<string> list = new List<string>(); if (fish != null) { foreach (string item in (Il2CppArrayBase<string>)(object)fish) { list.Add(item); } if (list.Contains(fishId)) { return; } } list.Add(fishId); val.fish = Il2CppStringArray.op_Implicit(list.ToArray()); } catch (Exception ex) { Log.Warning("Couldn't add '" + fishId + "' to the current location's spawn pool: " + ex.Message); } } public static string GetCustomName(string itemId) { if (itemId == null || !_customNames.TryGetValue(itemId, out var value)) { return null; } return value; } public static Sprite GetCustomBoatWorldSprite(string itemId) { if (itemId == null || !_customBoatWorldSprites.TryGetValue(itemId, out var value)) { return null; } return value; } public static Sprite GetCustomBoatThumbSprite(string itemId) { if (itemId == null || !_customBoatThumbSprites.TryGetValue(itemId, out var value)) { return null; } return value; } public static void RegisterUniversalLure() { if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null) { Log.Warning("No save loaded yet, can't add the universal lure."); return; } if ((Object)(object)_universalLure != (Object)null) { Log.Msg("Universal Lure is already in the shop."); RefreshShop(); return; } LureData defaultLure = Database.GetDefaultLure(); if ((Object)(object)defaultLure == (Object)null) { Log.Warning("No template lure available to clone for the universal lure."); return; } LureData val = Object.Instantiate<LureData>(defaultLure); ((ObjectData)val).id = "UniversalLure"; ((ObjectData)val).AssetName = "UniversalLure"; ((ShopItemData)val).cost = 5000; ((ItemData)val).keys?.Clear(); ScriptableObjectSingleton<Database>.Instance.Lure.m_list.Add((ObjectData)(object)val); _universalLure = val; Log.Msg("Registered Universal Lure ($5000, cloned from '" + ((ObjectData)defaultLure).id + "') — works on any fish."); RefreshShop(); } private static bool RegisterRod(RodDefinition def, AssetBundle bundle) { if (def == null || string.IsNullOrWhiteSpace(def.id)) { Log.Warning("Skipping rod entry with no id."); return false; } if ((Object)(object)ScriptableObjectSingleton<Database>.Instance == (Object)null || Journal.Instance == null) { Log.Warning("No save loaded yet, can't register rod '" + def.id + "'."); return false; } RodData val = (string.IsNullOrEmpty(def.cloneFrom) ? null : Database.FindRod(def.cloneFrom)); if (val == null) { val = Database.GetDefaultRod(); } if ((Object)(object)val == (Object)null) { Log.Warning("No template rod available to clone for '" + def.id + "'."); return false; } RodData val2 = Object.Instantiate<RodData>(val); ((ObjectData)val2).id = def.id; ((ObjectData)val2).AssetName = def.id; ((ShopItemData)val2).cost = def.cost; if (!string.IsNullOrEmpty(def.spriteAsset)) { Sprite val3 = bundle.LoadAsset<Sprite>(def.spriteAsset); if ((Object)(object)val3 != (Object)null) { ((ItemData)val2).sprite = val3; val2.gameSprite = val3; } else { Log.Warning($"Sprite '{def.spriteAsset}' not found in bundle for rod '{def.id}'."); } } Strength strength = val2.strength; if (((strength != null) ? ((Upgradable)strength).levels : null) != null) { ((Upgradable)val2.strength).levels = Il2CppReferenceArray<UpgradeData>.op_Implicit(CloneLevels(((Upgradable)val2.strength).levels, def.id + "_str")); } ScriptableObjectSingleton<Database>.Instance.Rod.m_list.Add((ObjectData)(object)val2); _registeredRods.Add(val2); Log.Msg($"Registered custom rod '{def.id}' (cloned from '{((ObjectData)val).id}')."); return true; } private static void UnloadAll() { foreach (RodData registeredRod in _registeredRods) { try { Database instance = ScriptableObjectSingleton<Database>.Instance; if (instance != null) { ObjectDataTable rod = instance.Rod; if (rod != null) { rod.m_list?.Remove((ObjectData)(object)registeredRod); } } } catch { } } _registeredRods.Clear(); foreach (BoatData registeredBoat in _registeredBoats) { try { Database instance2 = ScriptableObjectSingleton<Database>.Instance; if (instance2 != null) { ObjectDataTable boat = instance2.Boat; if (boat != null) { boat.m_list?.Remove((ObjectData)(object)registeredBoat); } } } catch { } } _registeredBoats.Clear(); foreach (BoatVariantData registeredBoatVariant in _registeredBoatVariants) { try { Database instance3 = ScriptableObjectSingleton<Database>.Instance; if (instance3 != null) { ObjectDataTable boatVariant = instance3.BoatVariant; if (boatVariant != null) { boatVariant.m_list?.Remove((ObjectData)(object)registeredBoatVariant); } } } catch { } } _registeredBoatVariants.Clear(); _customBoatWorldSprites.Clear(); _customBoatThumbSprites.Clear(); foreach (FishData item in _registeredFish) { try { Database instance4 = ScriptableObjectSingleton<Database>.Instance; if (instance4 != null) { ObjectDataTable fish = instance4.Fish; if (fish != null) { fish.m_list?.Remove((ObjectData)(object)item); } } } catch { } } _registeredFish.Clear(); foreach (AssetBundle loadedBundle in _loadedBundles) { try { loadedBundle.Unload(true); } catch { } } _loadedBundles.Clear(); } } internal static class FolderPicker { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] private struct BROWSEINFO { public IntPtr hwndOwner; public IntPtr pidlRoot; public IntPtr pszDisplayName; public string lpszTitle; public uint ulFlags; public IntPtr lpfn; public IntPtr lParam; public int iImage; } private const uint BIF_RETURNONLYFSDIRS = 1u; private const uint BIF_NEWDIALOGSTYLE = 64u; [DllImport("shell32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SHBrowseForFolder(ref BROWSEINFO lpbi); [DllImport("shell32.dll", CharSet = CharSet.Auto)] private static extern bool SHGetPathFromIDList(IntPtr pidl, StringBuilder pszPath); [DllImport("ole32.dll")] private static extern void CoTaskMemFree(IntPtr pv); public static string Pick(string title) { string result = null; Thread thread = new Thread((ThreadStart)delegate { result = PickOnCurrentThread(title); }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); return result; } private static string PickOnCurrentThread(string title) { IntPtr intPtr = Marshal.AllocHGlobal(520); try { BROWSEINFO lpbi = new BROWSEINFO { pszDisplayName = intPtr, lpszTitle = title, ulFlags = 65u }; IntPtr intPtr2 = SHBrowseForFolder(ref lpbi); if (intPtr2 == IntPtr.Zero) { return null; } try { StringBuilder stringBuilder = new StringBuilder(260); return SHGetPathFromIDList(intPtr2, stringBuilder) ? stringBuilder.ToString() : null; } finally { CoTaskMemFree(intPtr2); } } finally { Marshal.FreeHGlobal(intPtr); } } } public class CheatsMod : MelonMod { [HarmonyPatch(typeof(Fish), "SetSize")] private static class Patch_Fish_SetSize { private static void Prefix(ref int sizePercent) { if (MaxFishSize != null && MaxFishSize.Value) { sizePercent = 100; } } } [HarmonyPatch(typeof(Angler), "DrainStaminaOverTime")] private static class Patch_Angler_DrainStaminaOverTime { private static bool Prefix() { if (InfiniteStamina != null) { return !InfiniteStamina.Value; } return true; } } [HarmonyPatch(typeof(Angler), "DrainStaminaInstant")] private static class Patch_Angler_DrainStaminaInstant { private static bool Prefix() { if (InfiniteStamina != null) { return !InfiniteStamina.Value; } return true; } } [HarmonyPatch(typeof(Fish), "AttractToLure")] private static class Patch_Fish_AttractToLure { private static bool Prefix(Lure lure, ref bool __result) { if ((Object)(object)lure != (Object)null && (Object)(object)lure.Data != (Object)null && ((ObjectData)lure.Data).id == "UniversalLure") { __result = true; return false; } return true; } } internal static MelonPreferences_Category Category; internal static MelonPreferences_Entry<bool> MaxFishSize; internal static MelonPreferences_Entry<bool> MaxRodStrength; internal static MelonPreferences_Entry<bool> NoLineBreak; internal static MelonPreferences_Entry<bool> InfiniteStamina; internal static MelonPreferences_Entry<float> ReelSpeedMultiplier; internal static MelonPreferences_Entry<float> BoatSpeedMultiplier; internal static MelonPreferences_Entry<string> MenuKey; internal static MelonPreferences_Entry<bool> FreezeTimeOfDay; internal static MelonPreferences_Entry<float> TimeOfDayValue; internal static MelonPreferences_Entry<bool> ClickToTeleport; internal static MelonPreferences_Entry<string> ContentDirectory; internal static MelonPreferences_Entry<bool> CustomBoatMotor; internal static MelonPreferences_Entry<float> CustomBoatSize; internal static MelonPreferences_Entry<float> CustomRodWeightKg; internal static MelonPreferences_Entry<string> CustomRodTemplateId; internal static MelonPreferences_Entry<int> CustomBoatFishStorage; internal static MelonPreferences_Entry<string> CustomFishLureTypeId; internal static MelonPreferences_Entry<string> SpawnFishId; internal static MelonPreferences_Entry<int> SpawnFishSizePercent; private bool _showMenu; private int _tab; private Rect _windowRect = new Rect(40f, 40f, 620f, 600f); private string _toggleKeyName = "F1"; private bool _customContentLoaded; private static readonly string[] ToggleKeyChoices = new string[4] { "F1", "F2", "Insert", "Home" }; private static bool _lineDefaultsCaptured; private static float _origHookedReelSpeed; private static float _origAutoReelSpeed; private static float _origAutoReelSpeedMax; private static float _origSpoolSpeed; private static float _origBreakDelay; private static float _origTooBigBreakDelay; private static float _origBreakDelayDecay; private readonly Dictionary<BoatEngineData, (int maxSpeed, int accel, int decel)> _origBoatEngine = new Dictionary<BoatEngineData, (int, int, int)>(); private readonly Dictionary<RodStrengthData, int> _origRodStrength = new Dictionary<RodStrengthData, int>(); private int _actionCount; private string _lastAction = "(none yet)"; private float? _origTimeOfDaySpeed; private readonly HashSet<int> _diagnosedShopItems = new HashSet<int>(); private readonly HashSet<int> _diagnosedSpriteTargets = new HashSet<int>(); private Boat _teleportBoat; private Vector3 _teleportTargetXY; private int _teleportFramesLeft; private float _cursorY; private const float Pad = 8f; private const float RowH = 22f; private const float Gap = 4f; private GUIStyle _blackLabelStyle; private GUIStyle _blackBoxStyle; private WindowFunction _windowFunc; private GUIStyle _blankWindowStyle; private static readonly string[] TabNames = new string[6] { "Cheats", "Config", "Boats", "Rods", "Snowmobiles", "Fish" }; private Texture2D _backgroundTexture; private bool _backgroundLoadAttempted; private GUIStyle _backgroundStyle; private Texture2D _logoTexture; private bool _logoLoadAttempted; private GUIStyle _logoStyle; private GUIStyle BlackLabelStyle => _blackLabelStyle ?? (_blackLabelStyle = BuildBlackTextStyle(GUI.skin.label)); private GUIStyle BlackBoxStyle => _blackBoxStyle ?? (_blackBoxStyle = BuildBlackTextStyle(GUI.skin.box)); public override void OnInitializeMelon() { Category = MelonPreferences.CreateCategory("CastNChillCheats", "Cast n Chill Mod n Menu"); MaxFishSize = Category.CreateEntry<bool>("MaxFishSize", false, "Max Fish Size", (string)null, false, false, (ValueValidator)null, (string)null); MaxRodStrength = Category.CreateEntry<bool>("MaxRodStrength", false, "Max Rod/Hook Strength", (string)null, false, false, (ValueValidator)null, (string)null); NoLineBreak = Category.CreateEntry<bool>("NoLineBreak", false, "Unbreakable Line", (string)null, false, false, (ValueValidator)null, (string)null); InfiniteStamina = Category.CreateEntry<bool>("InfiniteStamina", false, "Infinite Stamina", (string)null, false, false, (ValueValidator)null, (string)null); ReelSpeedMultiplier = Category.CreateEntry<float>("ReelSpeedMultiplier", 1f, "Reel Speed Multiplier", (string)null, false, false, (ValueValidator)null, (string)null); BoatSpeedMultiplier = Category.CreateEntry<float>("BoatSpeedMultiplier", 1f, "Boat Speed Multiplier", (string)null, false, false, (ValueValidator)null, (string)null); MenuKey = Category.CreateEntry<string>("MenuKey", "F1", "Menu Toggle Key", (string)null, false, false, (ValueValidator)null, (string)null); FreezeTimeOfDay = Category.CreateEntry<bool>("FreezeTimeOfDay", false, "Freeze Time of Day", (string)null, false, false, (ValueValidator)null, (string)null); TimeOfDayValue = Category.CreateEntry<float>("TimeOfDayValue", 12f, "Time of Day", (string)null, false, false, (ValueValidator)null, (string)null); ClickToTeleport = Category.CreateEntry<bool>("ClickToTeleport", false, "Click-to-Teleport Boat", (string)null, false, false, (ValueValidator)null, (string)null); ContentDirectory = Category.CreateEntry<string>("ContentDirectory", "", "Custom Content Folder", (string)null, false, false, (ValueValidator)null, (string)null); CustomBoatMotor = Category.CreateEntry<bool>("CustomBoatMotor", false, "Custom Boats Have Motor", (string)null, false, false, (ValueValidator)null, (string)null); CustomBoatSize = Category.CreateEntry<float>("CustomBoatSize", 1f, "Custom Boat Size", (string)null, false, false, (ValueValidator)null, (string)null); CustomRodWeightKg = Category.CreateEntry<float>("CustomRodWeightKg", 10f, "Custom Rod Weight Capacity (kg)", (string)null, false, false, (ValueValidator)null, (string)null); CustomRodTemplateId = Category.CreateEntry<string>("CustomRodTemplateId", "", "Custom Rod Base Template", (string)null, false, false, (ValueValidator)null, (string)null); CustomBoatFishStorage = Category.CreateEntry<int>("CustomBoatFishStorage", 20, "Custom Boat Fish Storage", (string)null, false, false, (ValueValidator)null, (string)null); CustomFishLureTypeId = Category.CreateEntry<string>("CustomFishLureTypeId", "", "Custom Fish Required Lure", (string)null, false, false, (ValueValidator)null, (string)null); SpawnFishId = Category.CreateEntry<string>("SpawnFishId", "", "Spawn Fish Id", (string)null, false, false, (ValueValidator)null, (string)null); SpawnFishSizePercent = Category.CreateEntry<int>("SpawnFishSizePercent", 50, "Spawn Fish Size %", (string)null, false, false, (ValueValidator)null, (string)null); _toggleKeyName = ((Array.IndexOf(ToggleKeyChoices, MenuKey.Value) >= 0) ? MenuKey.Value : "F1"); ((MelonBase)this).LoggerInstance.Msg("Cast n Chill Mod n Menu loaded. Press " + _toggleKeyName + " to open the mod menu."); } private static KeyControl GetKeyControl(string keyName) { Keyboard current = Keyboard.current; if (current == null) { return null; } return (KeyControl)(keyName switch { "F1" => current.f1Key, "F2" => current.f2Key, "Insert" => current.insertKey, "Home" => current.homeKey, _ => current.f1Key, }); } public override void OnUpdate() { KeyControl keyControl = GetKeyControl(_toggleKeyName); if (keyControl != null && ((ButtonControl)keyControl).wasPressedThisFrame) { _showMenu = !_showMenu; ((MelonBase)this).LoggerInstance.Msg("[UI] Menu " + (_showMenu ? "opened" : "closed") + " via " + _toggleKeyName); if (!_showMenu) { MelonPreferences.Save(); } } ApplyLineConfig(); ApplyBoatAndRodOverrides(); ApplyCustomShopNames(); ApplyCustomBoatSprites(); DumpAllShopItems(); if (Journal.Instance != null && Journal.Instance.Cash < 0) { Journal.Instance.Cash = 0; } if (!_customContentLoaded && (Object)(object)ScriptableObjectSingleton<Database>.Instance != (Object)null && Journal.Instance != null) { _customContentLoaded = true; CustomContentManager.Reload(); } ApplyTimeOfDayOverride(); if (ClickToTeleport.Value && !_showMenu) { Mouse current = Mouse.current; if (current != null && current.leftButton.wasPressedThisFrame) { StartTeleportBoatToCursor(); } } ContinueTeleportHold(); } private void ApplyTimeOfDayOverride() { Location instance = Singleton<Location>.Instance; if ((Object)(object)instance == (Object)null) { return; } if (FreezeTimeOfDay.Value) { float valueOrDefault = _origTimeOfDaySpeed.GetValueOrDefault(); if (!_origTimeOfDaySpeed.HasValue) { valueOrDefault = instance.TimeOfDaySpeed; _origTimeOfDaySpeed = valueOrDefault; } instance.TimeOfDaySpeed = 0f; LocationVariation variation = instance.Variation; if (variation != null) { variation.TimeOfDay = TimeOfDayValue.Value; } } else if (_origTimeOfDaySpeed.HasValue) { instance.TimeOfDaySpeed = _origTimeOfDaySpeed.Value; _origTimeOfDaySpeed = null; } } private void ApplyBoatAndRodOverrides() { float value = BoatSpeedMultiplier.Value; foreach (BoatEngineData item in Resources.FindObjectsOfTypeAll<BoatEngineData>()) { if (!_origBoatEngine.TryGetValue(item, out (int, int, int) value2)) { value2 = (item.maxSpeed, item.acceleration, item.deceleration); _origBoatEngine[item] = value2; } item.maxSpeed = (int)((float)value2.Item1 * value); item.acceleration = (int)((float)value2.Item2 * value); } foreach (RodStrengthData item2 in Resources.FindObjectsOfTypeAll<RodStrengthData>()) { if (!_origRodStrength.TryGetValue(item2, out var value3)) { value3 = item2.weight; _origRodStrength[item2] = value3; } item2.weight = (MaxRodStrength.Value ? 9999 : value3); } } private void ApplyCustomShopNames() { foreach (GUIShopItem item in Resources.FindObjectsOfTypeAll<GUIShopItem>()) { ShopItemData val = ((item != null) ? item.Data : null); if (!((Object)(object)val == (Object)null) && ((ObjectData)val).id != null) { string customName = CustomContentManager.GetCustomName(((ObjectData)val).id); if (customName != null && !((Object)(object)item.displayNameText == (Object)null) && item.displayNameText.text != customName) { item.displayNameText.text = customName; } } } } private void DumpAllShopItems() { foreach (GUIShopItem item in Resources.FindObjectsOfTypeAll<GUIShopItem>()) { if ((Object)(object)item == (Object)null) { continue; } int instanceID = ((Object)((Component)item).gameObject).GetInstanceID(); if (!_diagnosedShopItems.Add(instanceID)) { continue; } try { ShopItemData data = item.Data; ((MelonBase)this).LoggerInstance.Msg($"[ShopDump] type={((object)item).GetType().Name} id={((data != null) ? ((ObjectData)data).id : null) ?? "null"} go='{((Object)((Component)item).gameObject).name}' displayNameText={(((Object)(object)item.displayNameText != (Object)null) ? item.displayNameText.text : "null")}"); foreach (Text componentsInChild in ((Component)item).gameObject.GetComponentsInChildren<Text>(true)) { ((MelonBase)this).LoggerInstance.Msg($"[ShopDump] UI.Text '{((Object)((Component)componentsInChild).gameObject).name}' text=\"{componentsInChild.text}\""); } foreach (TMP_Text componentsInChild2 in ((Component)item).gameObject.GetComponentsInChildren<TMP_Text>(true)) { ((MelonBase)this).LoggerInstance.Msg($"[ShopDump] TMP_Text '{((Object)((Component)componentsInChild2).gameObject).name}' text=\"{componentsInChild2.text}\""); } foreach (Image componentsInChild3 in ((Component)item).gameObject.GetComponentsInChildren<Image>(true)) { Instance loggerInstance = ((MelonBase)this).LoggerInstance; string name = ((Object)((Component)componentsInChild3).gameObject).name; Sprite sprite = componentsInChild3.sprite; loggerInstance.Msg("[ShopDump] Image '" + name + "' sprite=" + (((sprite != null) ? ((Object)sprite).name : null) ?? "null")); } foreach (SpriteRenderer componentsInChild4 in ((Component)item).gameObject.GetComponentsInChildren<SpriteRenderer>(true)) { Instance loggerInstance2 = ((MelonBase)this).LoggerInstance; string name2 = ((Object)((Component)componentsInChild4).gameObject).name; Sprite sprite2 = componentsInChild4.sprite; loggerInstance2.Msg("[ShopDump] SpriteRenderer '" + name2 + "' sprite=" + (((sprite2 != null) ? ((Object)sprite2).name : null) ?? "null")); } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Warning("[ShopDump] failed: " + ex.Message); } } } private void ApplyCustomBoatSprites() { foreach (Boat item in Resources.FindObjectsOfTypeAll<Boat>()) { object obj; if (item == null) { obj = null; } else { BoatData data = item.Data; obj = ((data != null) ? ((ObjectData)data).id : null); } string text = (string)obj; if (text == null) { continue; } Sprite customBoatWorldSprite = CustomContentManager.GetCustomBoatWorldSprite(text); if (!((Object)(object)customBoatWorldSprite == (Object)null)) { if ((Object)(object)item.boatRenderer != (Object)null && (Object)(object)item.boatRenderer.sprite != (Object)(object)customBoatWorldSprite) { item.boatRenderer.sprite = customBoatWorldSprite; } int instanceID = ((Object)((Component)item).gameObject).GetInstanceID(); if (_diagnosedSpriteTargets.Add(instanceID)) { DumpSpriteComponents("Boat", text, ((Component)item).gameObject); } } } foreach (GUIShopBoat item2 in Resources.FindObjectsOfTypeAll<GUIShopBoat>()) { object obj2; if (item2 == null) { obj2 = null; } else { BoatData boatData = item2.BoatData; obj2 = ((boatData != null) ? ((ObjectData)boatData).id : null); } string text2 = (string)obj2; if (text2 == null) { continue; } Sprite customBoatThumbSprite = CustomContentManager.GetCustomBoatThumbSprite(text2); if ((Object)(object)customBoatThumbSprite == (Object)null) { continue; } if ((Object)(object)((GUIShopItem)item2).image != (Object)null) { if ((Object)(object)((GUIShopItem)item2).image.sprite != (Object)(object)customBoatThumbSprite) { ((GUIShopItem)item2).image.sprite = customBoatThumbSprite; } if (!((GUIShopItem)item2).image.preserveAspect) { ((GUIShopItem)item2).image.preserveAspect = true; } } int instanceID2 = ((Object)((Component)item2).gameObject).GetInstanceID(); if (_diagnosedSpriteTargets.Add(instanceID2)) { DumpSpriteComponents("GUIShopBoat", text2, ((Component)item2).gameObject); } } } private void DumpSpriteComponents(string context, string id, GameObject go) { try { ((MelonBase)this).LoggerInstance.Msg($"[SpriteDump] {context} '{id}' on GameObject '{((Object)go).name}':"); foreach (SpriteRenderer componentsInChild in go.GetComponentsInChildren<SpriteRenderer>(true)) { Instance loggerInstance = ((MelonBase)this).LoggerInstance; DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(49, 3); defaultInterpolatedStringHandler.AppendLiteral("[SpriteDump] SpriteRenderer '"); defaultInterpolatedStringHandler.AppendFormatted(((Object)((Component)componentsInChild).gameObject).name); defaultInterpolatedStringHandler.AppendLiteral("' sprite="); Sprite sprite = componentsInChild.sprite; defaultInterpolatedStringHandler.AppendFormatted(((sprite != null) ? ((Object)sprite).name : null) ?? "null"); defaultInterpolatedStringHandler.AppendLiteral(" enabled="); defaultInterpolatedStringHandler.AppendFormatted(((Renderer)componentsInChild).enabled); loggerInstance.Msg(defaultInterpolatedStringHandler.ToStringAndClear()); } foreach (Image componentsInChild2 in go.GetComponentsInChildren<Image>(true)) { Instance loggerInstance2 = ((MelonBase)this).LoggerInstance; DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(40, 3); defaultInterpolatedStringHandler.AppendLiteral("[SpriteDump] Image '"); defaultInterpolatedStringHandler.AppendFormatted(((Object)((Component)componentsInChild2).gameObject).name); defaultInterpolatedStringHandler.AppendLiteral("' sprite="); Sprite sprite2 = componentsInChild2.sprite; defaultInterpolatedStringHandler.AppendFormatted(((sprite2 != null) ? ((Object)sprite2).name : null) ?? "null"); defaultInterpolatedStringHandler.AppendLiteral(" enabled="); defaultInterpolatedStringHandler.AppendFormatted(((Behaviour)componentsInChild2).enabled); loggerInstance2.Msg(defaultInterpolatedStringHandler.ToStringAndClear()); } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Warning($"[SpriteDump] Failed for {context} '{id}': {ex.Message}"); } } private void StartTeleportBoatToCursor() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) Camera main = Camera.main; Boat val = Object.FindObjectOfType<Boat>(); if (!((Object)(object)main == (Object)null) && !((Object)(object)val == (Object)null)) { Vector2 val2 = ((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).ReadValue(); float z = main.WorldToScreenPoint(((Component)val).transform.position).z; Vector3 teleportTargetXY = main.ScreenToWorldPoint(new Vector3(val2.x, val2.y, z)); _teleportBoat = val; _teleportTargetXY = teleportTargetXY; _teleportFramesLeft = 15; } } private void ContinueTeleportHold() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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) if (_teleportFramesLeft > 0 && !((Object)(object)_teleportBoat == (Object)null)) { Vector3 position = ((Component)_teleportBoat).transform.position; ((Component)_teleportBoat).transform.position = new Vector3(_teleportTargetXY.x, _teleportTargetXY.y, position.z); _teleportFramesLeft--; } } private void UnlockAllGear() { Journal instance = Journal.Instance; if (instance == null) { ((MelonBase)this).LoggerInstance.Warning("No active save loaded — open a save first."); return; } int num = 0; foreach (RodData item in Resources.FindObjectsOfTypeAll<RodData>()) { if (!((ShopItemData)item).IsOwned) { instance.Buy((ShopItemData)(object)item); num++; } } foreach (BoatData item2 in Resources.FindObjectsOfTypeAll<BoatData>()) { if (!((ShopItemData)item2).IsOwned) { instance.Buy((ShopItemData)(object)item2); num++; } } foreach (LureData item3 in Resources.FindObjectsOfTypeAll<LureData>()) { if (!((ShopItemData)item3).IsOwned) { instance.Buy((ShopItemData)(object)item3); num++; } } ((MelonBase)this).LoggerInstance.Msg($"Unlocked {num} item(s)."); } private void ApplyLineConfig() { FishingLineConfig instance = ScriptableObjectSingleton<FishingLineConfig>.Instance; if (!((Object)(object)instance == (Object)null)) { if (!_lineDefaultsCaptured) { _origHookedReelSpeed = instance.hookedReelSpeed; _origAutoReelSpeed = instance.autoReelSpeed; _origAutoReelSpeedMax = instance.autoReelSpeedMax; _origSpoolSpeed = instance.spoolSpeed; _origBreakDelay = instance.breakDelay; _origTooBigBreakDelay = instance.tooBigBreakDelay; _origBreakDelayDecay = instance.breakDelayDecay; _lineDefaultsCaptured = true; } float value = ReelSpeedMultiplier.Value; instance.hookedReelSpeed = _origHookedReelSpeed * value; instance.autoReelSpeed = _origAutoReelSpeed * value; instance.autoReelSpeedMax = _origAutoReelSpeedMax * value; instance.spoolSpeed = _origSpoolSpeed * value; if (NoLineBreak.Value) { instance.breakDelay = 9999f; instance.tooBigBreakDelay = 9999f; instance.breakDelayDecay = 0f; } else { instance.breakDelay = _origBreakDelay; instance.tooBigBreakDelay = _origTooBigBreakDelay; instance.breakDelayDecay = _origBreakDelayDecay; } } } private Rect NextRect(float height = 22f) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) Rect result = new Rect(8f, _cursorY, ((Rect)(ref _windowRect)).width - 16f, height); _cursorY += height + 4f; return result; } private static bool WasClicked(Rect r) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) Event current = Event.current; if (current != null && (int)current.type == 0 && current.button == 0 && ((Rect)(ref r)).Contains(current.mousePosition)) { current.Use(); return true; } return false; } private static GUIStyle BuildBlackTextStyle(GUIStyle source) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown GUIStyle val = new GUIStyle { border = source.border, padding = source.padding, margin = source.margin, overflow = source.overflow, alignment = source.alignment, fontSize = source.fontSize, fontStyle = source.fontStyle, wordWrap = source.wordWrap }; val.normal.background = source.normal.background; val.normal.textColor = Color.black; val.hover.background = source.hover.background; val.hover.textColor = Color.black; val.active.background = source.active.background; val.active.textColor = Color.black; return val; } private void Lbl(Rect r, string text) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) GUI.Label(r, text, BlackLabelStyle); } private bool Btn(Rect r, string label, string actionName = null) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) GUI.Box(r, label, BlackBoxStyle); bool num = WasClicked(r); if (num) { _actionCount++; _lastAction = actionName ?? label; ((MelonBase)this).LoggerInstance.Msg($"[UI] Clicked: {_lastAction} (#{_actionCount})"); } return num; } private bool Tgl(Rect r, bool value, string label) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) GUI.Box(r, (value ? "[X] " : "[ ] ") + label, BlackBoxStyle); bool flag = value; if (WasClicked(r)) { flag = !value; _actionCount++; _lastAction = label + " -> " + (flag ? "ON" : "OFF"); ((MelonBase)this).LoggerInstance.Msg($"[UI] {_lastAction} (#{_actionCount})"); } return flag; } private void DrawValueStepper(string label, MelonPreferences_Entry<float> entry, float min, float max, float step, string format, string suffix = "") { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) Rect val = NextRect(); float num = ((Rect)(ref val)).width - 52f - 46f; Lbl(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).y, num, 22f), label); if (Btn(new Rect(((Rect)(ref val)).x + num, ((Rect)(ref val)).y, 26f, 22f), "-", label + " -")) { entry.Value = Mathf.Max(min, entry.Value - step); } Lbl(new Rect(((Rect)(ref val)).x + num + 26f, ((Rect)(ref val)).y, 46f, 22f), entry.Value.ToString(format) + suffix); if (Btn(new Rect(((Rect)(ref val)).x + num + 26f + 46f, ((Rect)(ref val)).y, 26f, 22f), "+", label + " +")) { entry.Value = Mathf.Min(max, entry.Value + step); } } private void DrawIntStepper(string label, MelonPreferences_Entry<int> entry, int min, int max, int step, string suffix = "") { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) Rect val = NextRect(); float num = ((Rect)(ref val)).width - 52f - 90f; Lbl(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).y, num, 22f), label); if (Btn(new Rect(((Rect)(ref val)).x + num, ((Rect)(ref val)).y, 26f, 22f), "-", label + " -")) { entry.Value = Mathf.Max(min, entry.Value - step); } string text = (string.IsNullOrEmpty(suffix) ? entry.Value.ToString() : $"{entry.Value} {suffix}"); Lbl(new Rect(((Rect)(ref val)).x + num + 26f, ((Rect)(ref val)).y, 90f, 22f), text); if (Btn(new Rect(((Rect)(ref val)).x + num + 26f + 90f, ((Rect)(ref val)).y, 26f, 22f), "+", label + " +")) { entry.Value = Mathf.Min(max, entry.Value + step); } } public override void OnGUI() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown if (_showMenu) { if (_windowFunc == null) { _windowFunc = WindowFunction.op_Implicit((Action<int>)DrawWindow); } if (_blankWindowStyle == null) { _blankWindowStyle = new GUIStyle(); } _windowRect = GUI.Window(1128484419, _windowRect, _windowFunc, "", _blankWindowStyle); } } private Texture2D GetBackgroundTexture() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown if ((Object)(object)_backgroundTexture != (Object)null || _backgroundLoadAttempted) { return _backgroundTexture; } _backgroundLoadAttempted = true; try { byte[] array = Convert.FromBase64String("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