Decompiled source of UltraBalikci v2.2.0
UltraFishing/UltraFishing.dll
Decompiled 15 hours 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.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Steamworks; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Audio; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("UltraFishing")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Allows you to fish outside of 5-S")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+2a8e9b2f3c14d37909142184698e3efcaf346f78")] [assembly: AssemblyProduct("UltraFishing")] [assembly: AssemblyTitle("UltraFishing")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } [ExecuteInEditMode] public class Liquid : MonoBehaviour { private Renderer rend; private Vector3 lastPos; private Vector3 velocity; private Vector3 lastRot; private Vector3 angularVelocity; public float MaxWobble = 0.03f; public float WobbleSpeed = 1f; public float Recovery = 1f; private float wobbleAmountX; private float wobbleAmountZ; private float wobbleAmountToAddX; private float wobbleAmountToAddZ; private float pulse; private float time = 0.5f; private void Start() { rend = ((Component)this).GetComponent<Renderer>(); } private void Update() { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: 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) time += Time.deltaTime; wobbleAmountToAddX = Mathf.Lerp(wobbleAmountToAddX, 0f, Time.deltaTime * Recovery); wobbleAmountToAddZ = Mathf.Lerp(wobbleAmountToAddZ, 0f, Time.deltaTime * Recovery); pulse = (float)Math.PI * 2f * WobbleSpeed; wobbleAmountX = wobbleAmountToAddX * Mathf.Sin(pulse * time); wobbleAmountZ = wobbleAmountToAddZ * Mathf.Sin(pulse * time); rend.sharedMaterial.SetFloat("_WobbleX", wobbleAmountX); rend.sharedMaterial.SetFloat("_WobbleZ", wobbleAmountZ); velocity = (lastPos - ((Component)this).transform.position) / (Time.deltaTime + 0.0001f); Quaternion rotation = ((Component)this).transform.rotation; angularVelocity = ((Quaternion)(ref rotation)).eulerAngles - lastRot; wobbleAmountToAddX += Mathf.Clamp((velocity.x + angularVelocity.z * 0.2f) * MaxWobble, 0f - MaxWobble, MaxWobble); wobbleAmountToAddZ += Mathf.Clamp((velocity.z + angularVelocity.x * 0.2f) * MaxWobble, 0f - MaxWobble, MaxWobble); lastPos = ((Component)this).transform.position; rotation = ((Component)this).transform.rotation; lastRot = ((Quaternion)(ref rotation)).eulerAngles; } } namespace UltraFishing { public class BookRandomizer : MonoBehaviour { private Readable readable; private void Start() { readable = ((Component)this).gameObject.GetComponent<Readable>(); RandomizeText(); } public void RandomizeText() { readable.content = RandomBookTextProvider.GetRandomText(); } public void GetNextText() { readable.content = RandomBookTextProvider.GetNextText(); readable.StartScan(); } } public class FakeWater : MonoBehaviour { public FishDB fishDB; public Transform overrideFishingPoint; public FishObject[] attractFish; public GameObject customSplash; public void SetupFishDB(FishDB fishDB) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: 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) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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) //IL_00ad: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)fishDB.fishGhostPrefab != (Object)null) { Bounds bounds = ((Component)this).GetComponent<Collider>().bounds; int num = (int)(((Bounds)(ref bounds)).size.x * ((Bounds)(ref bounds)).size.y / 100f); for (int i = 0; i < num; i++) { GameObject val = Object.Instantiate<GameObject>(fishDB.fishGhostPrefab, ((Component)this).transform, true); val.transform.position = new Vector3(Random.Range((0f - ((Bounds)(ref bounds)).size.x) / 4f, ((Bounds)(ref bounds)).size.x / 4f) + ((Bounds)(ref bounds)).center.x, 0f, Random.Range((0f - ((Bounds)(ref bounds)).size.z) / 4f, ((Bounds)(ref bounds)).size.z / 4f) + ((Bounds)(ref bounds)).center.z); val.transform.position = new Vector3(val.transform.position.x, ((Bounds)(ref bounds)).center.y + Random.Range(-1f, 1f) * (((Bounds)(ref bounds)).size.y / 2f - 0.2f), val.transform.position.z); val.transform.localRotation = Quaternion.Euler(0f, (float)Random.Range(0, 360), 0f); } } } } public class GlobalFishEncyclopedia : FishEncyclopedia { private int currentPage; private List<int> pageIndices = new List<int>(); private List<string> pageTitles = new List<string>(); public GameObject mannequinFishDescription; public void StartEncyclopedia() { //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown ((Component)base.fishButtonTemplate).gameObject.SetActive(false); FishCollection[] fishCollections = GlobalFishManager.GetFishCollections(); foreach (FishCollection fishCollection in fishCollections) { pageIndices.Add(base.fishGrid.childCount); pageTitles.Add(fishCollection.name); int num = base.fishGrid.childCount; foreach (FishData fish2 in fishCollection.fishes) { FishObject fish = fish2.fish; bool found = fish2.found; FishMenuButton val = Object.Instantiate<FishMenuButton>(base.fishButtonTemplate, base.fishGrid, false); base.fishButtons.Add(fish, val); val.Populate(fish, !found); ((UnityEventBase)((Component)val).GetComponent<ControllerPointer>().OnPressed).RemoveAllListeners(); ((Component)val).GetComponent<ControllerPointer>().OnPressed.AddListener((UnityAction)delegate { SelectFish(fish); }); if (base.fishGrid.childCount == num + 13) { pageIndices.Add(base.fishGrid.childCount - 1); pageTitles.Add(fishCollection.name); num = base.fishGrid.childCount - 1; } } } FishManager instance = MonoSingleton<FishManager>.Instance; instance.onFishUnlocked = (Action<FishObject>)Delegate.Combine(instance.onFishUnlocked, new Action<FishObject>(base.OnFishUnlocked)); currentPage = 0; DisplayCurrentPage(); } private void DisplayCurrentPage() { int num = pageIndices[currentPage]; int num2 = ((pageIndices.Count != currentPage + 1) ? pageIndices[currentPage + 1] : base.fishGrid.childCount); for (int i = 1; i < base.fishGrid.childCount; i++) { if (i >= num && i < num2) { ((Component)base.fishGrid.GetChild(i)).gameObject.SetActive(true); } else { ((Component)base.fishGrid.GetChild(i)).gameObject.SetActive(false); } } ChangeTitle(); } public void NextPage() { if (currentPage + 1 < pageIndices.Count) { currentPage++; DisplayCurrentPage(); } } public void PreviousPage() { if (currentPage > 0) { currentPage--; DisplayCurrentPage(); } } private void ChangeTitle() { string text = pageTitles[currentPage]; Transform child = base.fishGrid.parent.GetChild(0); ((TMP_Text)((Component)child).GetComponent<TextMeshProUGUI>()).text = text; } private void DisplayFish(FishObject fish) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_007d: 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) foreach (Transform item in base.fish3dRenderContainer.transform) { Transform val = item; Object.Destroy((Object)(object)((Component)val).gameObject); } if (GlobalFishManager.FoundFish(fish)) { GameObject val2 = fish.InstantiateDumb(); val2.transform.SetParent(base.fish3dRenderContainer.transform); val2.transform.localPosition = Vector3.zero; val2.transform.localScale = Vector3.one; SandboxUtils.SetLayerDeep(val2.transform, LayerMask.NameToLayer("VirtualRender")); } } public void SelectFish(FishObject fish) { base.fishName.text = (GlobalFishManager.FoundFish(fish) ? fish.fishName : "???"); if (fish.fishName == "Manken Balık") { mannequinFishDescription.SetActive(true); base.fishDescription.text = ""; } else { mannequinFishDescription.SetActive(false); base.fishDescription.text = GlobalFishManager.GetFishDescription(fish); } base.fishPicker.SetActive(false); base.fishInfoContainer.SetActive(true); DisplayFish(fish); } } public class LateSetWater : MonoBehaviour { public List<string> Fish = new List<string>(); public string WaterName = "HATA: İSİM ATANMAMIŞ"; public Color color = Color.magenta; public List<Transform> Water = new List<Transform>(); private bool triggered = false; public LateSetWater Addfish(string fish) { Fish.Add(fish); return this; } public LateSetWater AddObject(Transform water) { Water.Add(water); return this; } private void OnEnable() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (triggered) { return; } foreach (Transform item in Water) { WaterBuilder.SetWater(((Component)item).transform).AddFishes(Fish).SetUp(WaterName, color); } triggered = true; } } public class MaterialSwapper : MonoBehaviour { public Material mat; public List<string> ignoreLevels; public int layer; private void Start() { Renderer component = ((Component)this).GetComponent<Renderer>(); if ((layer == -1 || ((Component)this).gameObject.layer == layer) && !ignoreLevels.Exists((string s) => s == SceneHelper.CurrentScene)) { component.material = mat; } } } public class NewFishingRod : FishingRodWeapon { private static FakeWater currentFakeWater; public void OnDisable() { ((FishingRodWeapon)this).ResetFishing(); MonoSingleton<FishingHUD>.Instance.SetState((FishingRodState)0); } public void FishCaughtAndGrabbed() { base.animator.SetTrigger(FishingRodWeapon.Idle); MonoSingleton<FishingHUD>.Instance.ShowFishCaught(true, base.hookedFishe.fish); CreateFishPickup(base.fishPickupTemplate, base.hookedFishe.fish, grab: true); ((FishingRodWeapon)this).ResetFishing(); } public void ThrowBaitEvent() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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) if ((Object)(object)base.spawnedBaitCon == (Object)null) { base.spawnedBaitCon = Object.Instantiate<FishBait>(base.baitPrefab, base.rodTip.position, Quaternion.identity, base.rodTip); base.spawnedBaitCon.landed = false; if ((Object)(object)currentFakeWater != (Object)null && (Object)(object)currentFakeWater.customSplash != (Object)null) { base.spawnedBaitCon.splashPrefab = currentFakeWater.customSplash; } base.spawnedBaitCon.ThrowStart(((Component)base.targetingCircle).transform.position, base.rodTip, (FishingRodWeapon)(object)this); } } public static GameObject CreateFishPickup(ItemIdentifier template, FishObject fish, bool grab, bool unlock = true) { //IL_008a: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Invalid comparison between Unknown and I4 //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Invalid comparison between Unknown and I4 //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Invalid comparison between Unknown and I4 //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Invalid comparison between Unknown and I4 if (unlock) { MonoSingleton<FishManager>.Instance.UnlockFish(fish); } ItemIdentifier val; if ((Object)(object)fish.customPickup != (Object)null) { val = Object.Instantiate<ItemIdentifier>(fish.customPickup); if (!Object.op_Implicit((Object)(object)((Component)val).GetComponent<FishObjectReference>())) { ((Component)val).gameObject.AddComponent<FishObjectReference>().fishObject = fish; } } else { val = Object.Instantiate<ItemIdentifier>(template); ((Component)val).gameObject.AddComponent<FishObjectReference>().fishObject = fish; Transform transform = ((Component)((Component)val).transform.GetChild(0)).transform; Vector3 localPosition = transform.localPosition; Quaternion localRotation = transform.localRotation; Vector3 localScale = transform.localScale; Object.Destroy((Object)(object)((Component)transform).gameObject); GameObject val2 = fish.InstantiateDumb(); val2.transform.SetParent(((Component)val).transform); val2.transform.localPosition = localPosition; val2.transform.localRotation = localRotation; val2.transform.localScale = localScale; } if (grab) { ItemIdentifier heldObject = MonoSingleton<FistControl>.Instance.heldObject; if ((Object)(object)heldObject == (Object)null) { MonoSingleton<FistControl>.Instance.currentPunch.ResetHeldState(); MonoSingleton<FistControl>.Instance.currentPunch.ForceHold(val); return ((Component)val).gameObject; } ItemType itemType = heldObject.itemType; ItemType val3 = itemType; if ((int)val3 <= 4) { if ((int)val3 == 0 || (int)val3 == 4) { goto IL_017b; } } else if ((int)val3 == 6 || (int)val3 == 10) { goto IL_017b; } MonoSingleton<FistControl>.Instance.currentPunch.ResetHeldState(); MonoSingleton<FistControl>.Instance.currentPunch.ForceHold(val); MonoSingleton<FistControl>.Instance.currentPunch.ForceDrop(); MonoSingleton<FistControl>.Instance.currentPunch.ResetHeldState(); MonoSingleton<FistControl>.Instance.currentPunch.ForceHold(heldObject); } goto IL_0209; IL_0209: return ((Component)val).gameObject; IL_017b: Object.Destroy((Object)(object)((Component)MonoSingleton<FistControl>.Instance.heldObject).gameObject); MonoSingleton<FistControl>.Instance.currentPunch.ResetHeldState(); MonoSingleton<FistControl>.Instance.currentPunch.ForceHold(val); goto IL_0209; } public void NewUpdate() { //IL_0029: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: 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) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected I4, but got Unknown //IL_04e2: Unknown result type (might be due to invalid IL or missing references) //IL_05a8: Unknown result type (might be due to invalid IL or missing references) //IL_05b8: 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_0625: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: 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_0541: Unknown result type (might be due to invalid IL or missing references) //IL_054c: Unknown result type (might be due to invalid IL or missing references) //IL_0551: Unknown result type (might be due to invalid IL or missing references) //IL_0561: Unknown result type (might be due to invalid IL or missing references) //IL_0571: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_03fa: Unknown result type (might be due to invalid IL or missing references) //IL_033b: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_0436: Unknown result type (might be due to invalid IL or missing references) //IL_0792: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_04a6: Unknown result type (might be due to invalid IL or missing references) //IL_04b1: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) if (GameStateManager.Instance.PlayerInputLocked || MonoSingleton<InputManager>.Instance.PerformingCheatMenuCombo()) { return; } if (TimeSince.op_Implicit(MonoSingleton<FishingHUD>.Instance.timeSinceFishCaught) >= 1f && (MonoSingleton<InputManager>.Instance.InputSource.Punch.WasPerformedThisFrame || MonoSingleton<InputManager>.Instance.InputSource.Fire1.WasPerformedThisFrame)) { MonoSingleton<FishingHUD>.Instance.ShowFishCaught(false, (FishObject)null); } MonoSingleton<FishingHUD>.Instance.SetState(base.state); FishingRodState state = base.state; FishingRodState val = state; switch ((int)val) { case 0: if (MonoSingleton<InputManager>.Instance.InputSource.Fire1.WasPerformedThisFrame && TimeSince.op_Implicit(base.timeSinceAction) > 0.1f) { MonoSingleton<FishingHUD>.Instance.SetPowerMeter(0f, false); base.selectedPower = 0f; base.climaxed = false; base.fishHooked = false; base.baitThrown = false; base.state = (FishingRodState)1; base.targetingCircle = Object.Instantiate<FishingRodTarget>(base.targetPrefab, ((FishingRodWeapon)this).approximateTargetPosition, Quaternion.identity); base.timeSinceAction = TimeSince.op_Implicit(0f); } break; case 1: { base.selectedPower += (Time.deltaTime * 0.4f + base.selectedPower * 0.01f) * (base.climaxed ? (-0.5f) : 1f); if (base.selectedPower > 1f) { base.selectedPower = 1f; base.climaxed = true; } if (base.selectedPower < 0.1f) { base.climaxed = false; } Vector3 val2 = ((FishingRodWeapon)this).approximateTargetPosition; bool flag = false; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val2 + Vector3.up * 3f, Vector3.down, ref val3, 30f)) { val2 = ((RaycastHit)(ref val3)).point; Water val4 = default(Water); FakeWater fakeWater = default(FakeWater); if (((Component)((RaycastHit)(ref val3)).collider).TryGetComponent<Water>(ref val4) && Object.op_Implicit((Object)(object)val4.fishDB)) { base.currentFishPool = val4.fishDB; base.currentWater = val4; flag = true; if (Object.op_Implicit((Object)(object)val4.overrideFishingPoint)) { val2 = val4.overrideFishingPoint.position; } } else if (((Component)((RaycastHit)(ref val3)).collider).TryGetComponent<FakeWater>(ref fakeWater) && Object.op_Implicit((Object)(object)fakeWater.fishDB)) { base.currentFishPool = fakeWater.fishDB; currentFakeWater = fakeWater; flag = true; if (Object.op_Implicit((Object)(object)fakeWater.overrideFishingPoint)) { val2 = fakeWater.overrideFishingPoint.position; } } else { base.currentFishPool = null; base.currentWater = null; currentFakeWater = null; flag = false; } } else { base.currentFishPool = null; base.currentWater = null; currentFakeWater = null; flag = false; } MonoSingleton<FishingHUD>.Instance.SetPowerMeter(base.selectedPower, flag); if (flag) { ((Component)base.targetingCircle).transform.position = val2 + Vector3.up * 0.5f; base.targetingCircle.SetState(true, Vector3.Distance(((RaycastHit)(ref val3)).point, ((Component)MonoSingleton<NewMovement>.Instance).transform.position)); base.targetingCircle.waterNameText.text = base.currentFishPool.fullName; ((Graphic)base.targetingCircle.waterNameText).color = base.currentFishPool.symbolColor; } else { ((Component)base.targetingCircle).transform.position = val2 + Vector3.up * 0.5f; base.targetingCircle.SetState(false, Vector3.Distance(((RaycastHit)(ref val3)).point, ((Component)MonoSingleton<NewMovement>.Instance).transform.position)); base.targetingCircle.waterNameText.text = ""; } ((Component)base.targetingCircle).transform.forward = ((Component)MonoSingleton<NewMovement>.Instance).transform.forward; if (MonoSingleton<InputManager>.Instance.InputSource.Fire1.WasCanceledThisFrame && TimeSince.op_Implicit(base.timeSinceAction) > 0.1f) { if (flag) { ((Component)base.targetingCircle).GetComponent<Animator>().SetTrigger(FishingRodWeapon.Set); base.animator.ResetTrigger(FishingRodWeapon.Throw); base.state = (FishingRodState)2; base.timeSinceAction = TimeSince.op_Implicit(0f); } else { ((FishingRodWeapon)this).ResetFishing(); } } break; } case 2: ((Component)base.targetingCircle).transform.forward = ((Component)MonoSingleton<NewMovement>.Instance).transform.forward; base.fishHooked = false; if (!base.baitThrown) { base.baitThrown = true; base.animator.SetTrigger(FishingRodWeapon.Throw); } if (Object.op_Implicit((Object)(object)base.spawnedBaitCon) && base.spawnedBaitCon.landed) { base.state = (FishingRodState)3; base.timeSinceBaitInWater = TimeSince.op_Implicit(0f); base.distanceAfterThrow = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, base.spawnedBaitCon.baitPoint.position); Object.Destroy((Object)(object)((Component)base.targetingCircle).gameObject); } break; case 3: base.baitThrown = false; if (Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, base.spawnedBaitCon.baitPoint.position) > base.distanceAfterThrow + 30f) { Object.Destroy((Object)(object)((Component)base.spawnedBaitCon).gameObject); MonoSingleton<HudMessageReceiver>.Instance.SendHudMessage("Balık tutma yarıda kesildi.", "", "", 0, false, false, true); ((FishingRodWeapon)this).ResetFishing(); break; } if (!base.fishHooked && Random.value < 0.002f + TimeSince.op_Implicit(base.timeSinceBaitInWater) * 0.01f) { if ((Object)(object)base.currentWater == (Object)null) { base.hookedFishe = base.currentFishPool.GetRandomFish(currentFakeWater.attractFish); } else { base.hookedFishe = base.currentFishPool.GetRandomFish(base.currentWater.attractFish); } if (base.hookedFishe == null) { if (!base.noFishErrorDisplayed) { base.noFishErrorDisplayed = true; MonoSingleton<HudMessageReceiver>.Instance.SendHudMessage("Burada hiç balık yok gibi...", "", "", 0, false, false, true); } break; } if ((Object)(object)base.currentWater == (Object)null) { currentFakeWater.attractFish = null; } else { base.currentWater.attractFish = null; } base.fishHooked = true; MonoSingleton<FishingHUD>.Instance.SetFishHooked(true); base.spawnedBaitCon.FishHooked(); } if (MonoSingleton<InputManager>.Instance.InputSource.Fire1.IsPressed || MonoSingleton<InputManager>.Instance.InputSource.Fire2.IsPressed) { base.animator.SetTrigger(FishingRodWeapon.Pull); if (base.fishHooked) { MonoSingleton<FishingHUD>.Instance.SetFishHooked(false); base.state = (FishingRodState)4; base.spawnedBaitCon.CatchFish(base.hookedFishe.fish); } else { Object.Destroy((Object)(object)((Component)base.spawnedBaitCon).gameObject); base.animator.SetTrigger(FishingRodWeapon.Idle); base.animator.ResetTrigger(FishingRodWeapon.Throw); base.animator.Play(FishingRodWeapon.Idle); ((FishingRodWeapon)this).ResetFishing(); } } break; case 4: base.fishDesirePosition = Mathf.PerlinNoise(Time.time * 0.3f, 0f); base.fishTolerance = 0.1f + 0.4f * Mathf.PerlinNoise(Time.time * 0.4f, 0f); if (MonoSingleton<InputManager>.Instance.InputSource.Fire1.IsPressed) { base.playerPositionVelocity += 1.9f * Time.deltaTime; base.animator.SetTrigger(FishingRodWeapon.Pull); } else if (MonoSingleton<InputManager>.Instance.InputSource.Fire2.IsPressed) { base.playerPositionVelocity -= 1.9f * Time.deltaTime; base.animator.SetTrigger(FishingRodWeapon.Pull); } else { base.playerPositionVelocity *= 1f - 2f * Time.deltaTime; } base.playerProvidedPosition += base.playerPositionVelocity * Time.deltaTime; if (base.playerProvidedPosition > 1f) { base.playerProvidedPosition = 1f; base.playerPositionVelocity = 0f - base.playerPositionVelocity; } if (base.playerProvidedPosition < 0f) { base.playerProvidedPosition = 0f; base.playerPositionVelocity = 0f - base.playerPositionVelocity; } MonoSingleton<FishingHUD>.Instance.SetPlayerStrugglePosition(base.playerProvidedPosition); MonoSingleton<FishingHUD>.Instance.SetStruggleSatisfied(((FishingRodWeapon)this).struggleSatisfied); MonoSingleton<FishingHUD>.Instance.SetFishDesire(Mathf.Clamp01(((FishingRodWeapon)this).topBound), Mathf.Clamp01(((FishingRodWeapon)this).bottomBound)); base.spawnedBaitCon.allowedToProgress = ((FishingRodWeapon)this).struggleSatisfied; MonoSingleton<FishingHUD>.Instance.SetStruggleProgress(base.spawnedBaitCon.flyProgress, base.hookedFishe.fish.blockedIcon, base.hookedFishe.fish.icon); break; } } } public class FishCollection { public string name; public List<FishData> fishes; public FishCollection(string name) { this.name = name; fishes = new List<FishData>(); } public void RegisterFish(FishObject fish, string savePath, int saveSlot) { FishData item = new FishData(fish, savePath, saveSlot); fishes.Add(item); } public bool FoundAll() { foreach (FishData fish in fishes) { if (!fish.found) { return false; } } return true; } } public class FishData { public FishObject fish; public string savePath; public int saveSlot; public bool found; public FishData(FishObject fish, string savePath, int saveSlot) { this.fish = fish; this.savePath = savePath; this.saveSlot = saveSlot; found = SaveHelper.ReadFromSave(savePath, saveSlot) == 1; } public void Unlock() { if (!found) { found = true; SaveHelper.WriteToSave(savePath, saveSlot, 1); } } } public static class GlobalFishManager { private static Dictionary<string, FishData> fishes = new Dictionary<string, FishData>(); private static List<FishCollection> collections = new List<FishCollection>(); public static void RegisterCollection(FishCollection collection) { collections.Add(collection); foreach (FishData fish in collection.fishes) { fishes.Add(fish.fish.fishName, fish); } } public static void Start() { //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) string savePath = Path.Combine(Plugin.modDir, "fish.save"); (string, int)[] array = new(string, int)[12] { ("Assets/Data/Fishing/Fishes/Funny Stupid Fish.asset", 0), ("Assets/Data/Fishing/Fishes/pitr fish.asset", 1), ("Assets/Data/Fishing/Fishes/Trout.asset", 2), ("Assets/Data/Fishing/Fishes/Amid Evil Fish.asset", 3), ("Assets/Data/Fishing/Fishes/Chomper.asset", 4), ("Assets/Data/Fishing/Fishes/Bomb Fish.asset", 5), ("Assets/Data/Fishing/Fishes/Gib Eye.asset", 6), ("Assets/Data/Fishing/Fishes/Iron Lung Fish.asset", 7), ("Assets/Data/Fishing/Fishes/Dope Fish.asset", 8), ("Assets/Data/Fishing/Fishes/Stickfish.asset", 9), ("Assets/Data/Fishing/Fishes/Cooked Fish.asset", 10), ("Assets/Data/Fishing/Fishes/Shark.asset", 11) }; (string, int)[] array2 = new(string, int)[24] { ("assets/bundles/fishingstuff/fishes/filth fish.asset", 12), ("assets/bundles/fishingstuff/fishes/sword fish.asset", 25), ("assets/bundles/fishingstuff/fishes/wire shark.asset", 26), ("assets/bundles/fishingstuff/fishes/overcooked fish.asset", 20), ("assets/bundles/fishingstuff/fishes/missing fish.asset", 13), ("assets/bundles/fishingstuff/fishes/nil fish.asset", 27), ("assets/bundles/fishingstuff/fishes/nan fish.asset", 28), ("assets/bundles/fishingstuff/fishes/coin fish.asset", 22), ("assets/bundles/fishingstuff/fishes/cancer fish.asset", 14), ("assets/bundles/fishingstuff/fishes/flying demon fish.asset", 29), ("assets/bundles/fishingstuff/fishes/vapor fish.asset", 30), ("assets/bundles/fishingstuff/fishes/plastic fish.asset", 31), ("assets/bundles/fishingstuff/fishes/koi fish.asset", 15), ("assets/bundles/fishingstuff/fishes/melted fish.asset", 16), ("assets/bundles/fishingstuff/fishes/ancient fish.asset", 32), ("assets/bundles/fishingstuff/fishes/nerd shark.asset", 17), ("assets/bundles/fishingstuff/fishes/wine fish.asset", 33), ("assets/bundles/fishingstuff/fishes/leviathan fish.asset", 18), ("assets/bundles/fishingstuff/fishes/mannequin fish.asset", 34), ("assets/bundles/fishingstuff/fishes/tasty fish.asset", 35), ("assets/bundles/fishingstuff/fishes/book fish.asset", 23), ("assets/bundles/fishingstuff/fishes/frozen fish.asset", 21), ("assets/bundles/fishingstuff/fishes/death metal fish.asset", 19), ("assets/bundles/fishingstuff/fishes/prime fish.asset", 36) }; string text = "assets/bundles/fishingstuff/fishes/png fish.asset"; int saveSlot = 24; FishCollection fishCollection = new FishCollection("ULTRAKILL"); for (int i = 0; i < array.Length; i++) { FishObject fish = Addressables.LoadAssetAsync<FishObject>((object)array[i].Item1).WaitForCompletion(); int item = array[i].Item2; fishCollection.RegisterFish(PrepareFish(fish), savePath, item); } FishCollection fishCollection2 = new FishCollection("ULTRABALIKÇI"); for (int j = 0; j < array2.Length; j++) { FishObject fish2 = Plugin.bundle.LoadAsset<FishObject>(array2[j].Item1); int item2 = array2[j].Item2; fishCollection2.RegisterFish(PrepareFish(fish2), savePath, item2); } FishCollection fishCollection3 = new FishCollection("???"); FishObject fish3 = Plugin.bundle.LoadAsset<FishObject>(text); fishCollection3.RegisterFish(PrepareFish(fish3), savePath, saveSlot); RegisterCollection(fishCollection); RegisterCollection(fishCollection2); RegisterCollection(fishCollection3); } private static FishObject PrepareFish(FishObject fish) { switch (fish.fishName) { case "Wise Fish": ((Component)fish.customPickup).gameObject.AddComponent<BookRandomizer>(); fish.fishName = "Bilge Balık"; fish.description = "Çok bilge bir balık. Kendisini bulabilen herkese engin bilgisini aktarır.\n\nKütüphanelerin en derin ve en karanlık köşelerinde bulunur."; break; case "Poisson de Vin": ((Component)fish.worldObject.transform.Find("Liquid")).gameObject.AddComponent<Liquid>(); fish.fishName = "Poisson de Vin"; fish.description = "Değerli ve lüks bir balık. Bu balığın yaşı ilerledikçe tadı daha da lezzetli hale geldiği söylenir; bu nedenle genellikle tüketilmeden önce uzun süre bekletilir.\n\nBu balığın vahşi doğada hiç bulunmuş olduğuna dair bir kayıt yoktur, ancak lüks yolcu gemileri gibi seçkin mekanlarda sıklıkla servis edilmektedir."; break; case "NaN": { MaterialSwapper materialSwapper2 = ((Component)fish.worldObject.transform.GetChild(1)).gameObject.AddComponent<MaterialSwapper>(); materialSwapper2.mat = Plugin.bundle.LoadAsset<Material>("Assets/Bundles/fishingstuff/Skyboxes/FakeOldScreenField.mat"); materialSwapper2.layer = 28; materialSwapper2.ignoreLevels = new List<string>(new string[5] { "Level 1-1", "Level 1-2", "Level 1-3", "Level 1-4", "Level 1-E" }); break; } case "Prime Fish": { MaterialSwapper materialSwapper = ((Component)fish.worldObject.transform.GetChild(0)).gameObject.AddComponent<MaterialSwapper>(); materialSwapper.mat = Plugin.bundle.LoadAsset<Material>("Assets/Bundles/fishingstuff/MinosPrimeBody.mat"); materialSwapper.layer = -1; materialSwapper.ignoreLevels = new List<string>(new string[1] { "Level P-2" }); fish.fishName = "Kadim Balık"; fish.description = "Çok güçlü bir ruhun yaydığı artık enerjiden oluşmuş olduğuna inanılan, son derece nadir bir balık.\n\nHer ne kadar kendisi büyük bir güce sahip olsa da, benzer yaratıkların bilinen o güçlü iradesinden yoksundur. Bununla birlikte melekler tarafından yasaklanmış sayıldığından, çoğu balıkçı bu balığı yakalamaya çalışmamanızı tavsiye eder."; break; } case "Funny Stupid Fish (Friend)": fish.fishName = "Şaklaban Salak Balık (Dost)"; fish.description = "Aptal bir balık. Gerçekten çok aptal bir balık. Gerizekalı. Enayinin önde gideni. Beceriksiz salak. Ama mizahı iyidir.\n\nYakalaması kolaydır ve dost canlısıdır, genelde çocuklara balık tutmayı öğretmek için kullanılır."; break; case "PITR Fish": fish.fishName = "PITR Balığı"; fish.description = "Çok zeki bir balık. Kedilere hayran. Kıyıya yakın yüzer ve genelde balıkçıları mutlu etmek için kasten oltalarına takılır.\n\nBalık besin zincirinin hep en altındadır."; break; case "Trout": fish.fishName = "Alabalık"; fish.description = "Gölde bulunan sıradan bir balık. Derinlikleri tercih eder.\n\nİnsanlar tarafından sevilen bir balık türü olsa gerek, bu balığa benzer maskelerin bile yapıldığı bilinir."; break; case "Metal Fish": fish.fishName = "Metal Balık"; fish.description = "Uzak diyarlardan gelen göçmen bir balık. Beslenme türü taş olduğu için kayalık yerlerde hayatta kalabilir.\n\nSadece beslenmek için su yüzüne çıkar."; break; case "Chomper": fish.fishName = "Isırgan"; fish.description = "Göçmen bir balık.\n\nPensilvanya'dan geldiği için tercihen nemli, karanlık ve mutsuz ortamlarda yaşar."; break; case "Bomb Fish": fish.fishName = "Bomba Balığı"; fish.description = "Olağanüstü balıklardan. Genelde akarsuları tercih eder, duru sularda hayat kendisi için renksiz ve monotondur.\n\nDikkatsiz balıkçıların başına iş açacak kendini savunma yöntemi vardır."; break; case "Eyeball": fish.fishName = "Gözbebeği"; fish.description = "Sıradan bir balık. Hayatta kalması için kana ihtiyaç duyar.\n\nGörme duyusunu güçlendirir."; break; case "Frog (?)": fish.fishName = "Kurbağa (?)"; fish.description = "Derinliği seven göçmen bir balık. Genelde uydu gezegenlerde yaşar, fakat yeterince kanın olduğu her yerde bulunabilir.\n\nÇok bölgesel bir balık, derinliklerden kesinlikle ayrılmaz ve yaklaşanlara da saldırır."; break; case "Dope Fish": fish.fishName = "Ciks Balık"; fish.description = "Göçmen balık. Her yerde bulunabilir, ama genelde Kuytu köşelerden çıkarılır.\n\nGenelde maceraperestlerin ve kahramanların yanlışlıkla rastladığı bir balık türü. İyi şans getirdiği söylenir."; break; case "Stickfish": fish.fishName = "Balık Kroket"; fish.description = "Düz balık. Yenebilir ve genelde insanlar üretir.\n\nDünyadaki bütün mutfaklarda bulunabilir."; break; case "Cooked Fish": fish.fishName = "Pişmiş Balık"; fish.description = "Sıradan bir balık. Ateşte yaşar. Çiğ balıkları yemek için yaşam alanından dışarı çıkabilir.\n\nMuazzam bir lezzete sahip olduğu söylenir. Balıkçılar bu balığı yakalayabilmek için farklı türde çiğ balıkları ateşe yaklaştırırlar."; break; case "Shark": fish.fishName = "Köpek Balığı"; fish.description = "Etçil balık. İsveç'ten gelir ve insanlık için feminenliğin ya da 'alan taraf' olmanın bir sembolü haline gelmiştir, fakat bu sembolün tam anlamı artık bilinmiyor.\n\nGeniş sularda yaşamayı sever, ama beslenmek için kıyıya yaklaştığı da görülmüştür."; break; case "Filthy Screaming Fish (Filsh)": fish.fishName = "Bağırgan Balık (Pislık)"; fish.description = "Balık formunda manifest olmuş lanetlenmiş bir ruh. Ruhu aşırı güçsüz ve önemsiz olduğu için bunlara Kabuk bile denemez. Yapabildikleri tek şey sinir bozucu bir şekilde bağırmaktır.\n\nÇoğu zaman et yığınlarının içinde bulunurlar. Yanlarında ki herkes gibi kıyma olmaya mahkumlar."; break; case "Scraphead Fish": fish.fishName = "Hurdacı Balık"; fish.description = "Bir makinenin balıkla buluşmuş formu. Akrabalarının aksine yüksek riskli çatışmalara girmez. Çevresinin sağladığı daha düşük ve daha güvenli bir yerel optimumla yetinir.\n\nÇevresini kaplayan hurda parçalarını kullanarak kendini güçlendirir ve sürekli et veren kıyma makinesinden beslenir. Görünüşü çoğu kişiye çirkin olsa da işin meraklılarına göre güzel bir görünüşe sahiptir; bu da pek çok taklitçinin ortaya çıkmasına neden olmuştur."; break; case "Wire Shark": fish.fishName = "Vâyırşark"; fish.description = "Son derece enerji saçan bir balık olan bu canlı, yoluna çıkan her türlü zararlı veriyi yutar. Diğer türlere kıyasla daha zekilerdir ve hedeflerine ulaşmak için her zaman en kısa yolu kullanırlar.\n\nYüksek voltajlı endüstriyel alanlarda görülmeleri normaldir."; break; case "Overcooked Fish": fish.fishName = "Yanmış Balık"; fish.description = "Fazla görülmeyen bir balık. Çoğu zaman lezzetli sanılsa da aslında kötü tadından dolayı insanlar tarafından tercih edilmezler.\n\nBüyük ihtimalle etçiller. Sadece aşırı sıcak suların içinde yaşarlar."; break; case "Coin": fish.fishName = "Sikke"; fish.description = "Nadir ve fazlasıyla değerli bir balık. Aşırı pahalı ve değerli varlıkların takaslarında kullanıldığına bakarsak; insanlar için çok önemli bir yeri var gibi gözüküyor.\n\nSöylenene göre bir sikkeyi doğal yaşam alanına döndürürseniz sizin dileklerinizi gerçekleştirir."; break; case "Cancerous Fish": fish.fishName = "Kanserojen Balık"; fish.description = "Mutasyona uğramış bir balık. Ağzından çıkan her kelimenin siyasetle alakalı olmasıyla ünlüdür. Hatta 1960'ların sonlarında Solcu ve Sağcı kavgasını başlattığı söylenir.\n\nSadece radyasyona maruz kalmış suların içinde bulunur."; break; case "Flying Demon Fish": fish.fishName = "Kanatlı İblis Balığı"; fish.description = "Tanrı'nın kendisine bir hakaret. O kadar iğrenç bir yaratık ki ne altındaki toprak, ne de üstündeki gökler onu kabul ediyor. Bu yüzden ikisi arasındaki soğuk ve acımasız rüzgârların ortasında savrulmaya mahkûm kalmış. Bu yaratık kendi yaratıcısı o iğrenç görünüşünden tiksindiği için bu azaba mahkûm edildiğine inanılıyor.\n\nAncak bu balık, yerli halk arasında bir lezzet olarak görülüyor. Cesur balıkçılar, genellikle yüksek rakımlı kayalıkların yakınlarında bu balığı yakalamak için hayatlarını tehlikeye atmaktadırlar."; break; case "Vapor Fish": fish.fishName = "Vapor Balığı"; fish.description = "Teknoloji ile eski kültürün etkileşimi sonucu ortaya çıkan sentetik bir balık. Ancak geçmişe dair algısı yanlış ve çarpıktır.\n\nNeredeyse hiç balık bulunmayan bir şehrin kanallarında rastlanabilir; burada, eski kültürü bizzat deneyimleme fırsatı bulamamış, ancak yine de ona karşı bir özlem duyan sakinlerin dikkatini çeker. "; break; case "Plastic Fish": fish.fishName = "Plastik Balık"; fish.description = "Son derece nadir görülen, balık benzeri bir makine. Vücudunun büyük bir kısmı makinenin kendisi tarafından oluşturulan, ancak hiçbir pratik işlevi olmayan balık şeklindeki plastik bir kabuktan oluşur. Bu tür makinelerin çok azı bu standart dışı şekli tercih eder; ancak bu durum, saldırganlığa dair önemli bir azalma ile ilişkili olduğu görünmektedir.\n\nDoğası gereği çoğunlukla sakin bir hayvandır ve kanalizasyonlar da dahil olmak üzere binaların gözden uzak, ıssız bölgelerini tercih eder."; break; case "Koi Fish": fish.fishName = "Aynalı Sazan Balığı"; fish.description = "Fazla görülmeyen bir balık. Efsaneye göre, bu balık bir şelaleyi yüzerek tırmanmayı başarırsa ejderhaya dönüşür. Lakin, ejderhalar gerçek olmadığı için bu imkansızdır.\n\nGöletlerde yüzmeyi sever. Hoşuna giden bir gölet bulursa, seçtiği o gölette 10 yıla kadar kalabilir."; break; case "Melted Fish": fish.fishName = "Erimiş Balık"; fish.description = "Tuhaf bir görünüme sahip, son derece nadir bir balık.\n\nBu balığın nereden geldiği bilinmemektedir. Zira şimdiye kadar yalnızca kendisinden daha büyük hayvanların midelerinde bulunmuştur."; break; case "Ancient Fish": fish.fishName = "Antik Balık"; fish.description = "Yaşadığı son derece zorlu ortam nedeniyle ortaya çıkan, insan yapımı bir balık. Efsanelere göre üzerine oyulmuş yazıtlar, çevresindeki anıtların yapım sürecini anlatıyor.\n\nKaynar suyu tercih eder."; break; case "Nerd Shark": fish.fishName = "İnek Köpek Balığı"; fish.description = "Son derece okur yazar bir balık. Çok zeki. Yalnızca en seçkin edebi eserleri okur.\n\nKocaman su kütlelerinde yaşar ve dışarı çıkmaktan kaçınır; ancak daha fazla bilgelik arama acamıyla bazen kıyıya yakın yüzebilir."; break; case "Eel (?)": fish.fishName = "Yılanbalığı (?)"; fish.description = "Dış görünüşü sert olan tuhaf bir yılanbalığı. Öfkeli tavırları nedeniyle acemi balıkçılar için aşırı tehlikeli bir türdür.\n\nBazen gemi enkazlarının yakınlarındago rastlanır."; break; case "Mannequin Fish": fish.fishName = "Manken Balığı"; fish.description = ""; break; case "Tasty Fish": fish.fishName = "Leziz Balık"; fish.description = "Makineler arasında bir lezzet. Biyolojik yapısı nedeniyle doğal yaşam alanı dışında uzun süre hayatta kalamaz. Büyük rağbet gören bu balığı yetiştiren pek çok kişi vardır, ancak yetiştirenler genellikle şiddet eğilimli çatlak hırsızlarla çatışmaktadır.\n\nGenellikle geldiği yerin yakınlarında yüzerken görülmüştür."; break; case "Frozen Fish": fish.fishName = "Dondurulmuş Balık"; fish.description = "Uzun ömürlü bir balık. Uzun süre çürümeden hayatta kalabilme konusundaki gizemli yeteneğiyle ün kazanmıştır.\n\nSadece aşırı soğuk sularda yaşar."; break; case "Metal(?) Fish": fish.fishName = "Metal(?) Balık"; fish.description = "Metalden yapılmış bir göçmen balık.\n\nCehennemde yaşayan sapkın bir tür; başkalarının acı çekmesini izlemekten zevk alır. Dünyanın en acımasız balığı unvanı için en güçlü adaylardan biri."; break; case "\"size 2\"": fish.fishName = "\"boyut 2\""; fish.description = "Bir yalan. Tam bir sahtekarlık. Balıkçıları çılgına çevirmek için uydurulmuş bir aldatmaca. Birçoğu bu değersiz şeyi ararken boşuna canlarını kaybetti.\n\n<b><color=red>O L A N L A R D A N M E M N U N M U S U N ?</color></b>"; break; } return fish; } public static void UnlockFish(FishObject fish) { if (!fishes.ContainsKey(fish.fishName)) { Plugin.logger.LogError((object)("Fish " + fish.fishName + " could not be found!")); return; } FishData fishData = fishes[fish.fishName]; fishData.Unlock(); UpdateSize2(); } public static FishObject GetFish(string fishName) { return fishes[fishName].fish; } public static bool FoundFish(FishObject fish) { return fishes[fish.fishName].found; } public static FishCollection[] GetFishCollections() { return collections.ToArray(); } public static string GetFishDescription(FishObject fish) { if (FoundFish(fish)) { return fish.description; } return fish.fishName switch { "null" => "Kesinlikle normal ve gerçek bir balık. Araf denen cennetin sakinlerinden.\r\n\r\nGenellikle şelalenin altında yaşarlar.", "NaN" => "Huzurlu Araf katmanının mutlu sakinlerinin severek tükettiği yerel bir lezzet.\r\n\r\nGenellikle suyun biriktiği yerlerde bulunur.", "Nil" => "Aşırı normal bir balık. Buna benzer balıkları her yerde bulabilirsin. Cennet gibi ve lüks Araf katmanında yaşar.\r\n\r\nGenellikle suyun aktığı yerlerde bulunur.", "\"boyut 2\"" => "Herkesin bahsettiği efsanevi balık. Tüm balıkçıların hayali ama henüz kimse onu yakalayamadı. Söylendiğine göre, sadece her tür balığı yakalamış usta balıkçılara görünür.\r\n\r\nŞelale, sukarıyı gizliyor. Agnes Gorge Yolu. Yeteneklerini kullan ve kaderini yerine getir.", _ => fish.description, }; } public static int Size2Chance() { if (collections[0].FoundAll() && collections[1].FoundAll()) { return 1; } return 0; } public static void UpdateSize2() { if (!(SceneHelper.CurrentScene == "Level 7-S") || Size2Chance() != 1) { return; } string gameObjectPath = "7-S_Unpaintable/Exterior/The Water Ups_Todo/The Water Ups/Water Ups Ocean"; GameObject val = GenericHelper.FindGameObject(gameObjectPath); if (!((Object)(object)val == (Object)null)) { FakeWater component = val.GetComponent<FakeWater>(); if (!((Object)(object)component == (Object)null)) { FishDescriptor[] foundFishes = component.fishDB.foundFishes; foundFishes[0].chance = 1; } } } } public static class FishHelper { public static FishObject GetFish(string fishName) { return GlobalFishManager.GetFish(fishName); } private static FishDB GetFishDB(FishDescriptor[] fishes) { FishDB val = ScriptableObject.CreateInstance<FishDB>(); val.foundFishes = fishes; return val; } private static FishDB GetFishDB(string[] fishes, int[] chances) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown FishDescriptor[] array = (FishDescriptor[])(object)new FishDescriptor[fishes.Length]; for (int i = 0; i < fishes.Length; i++) { array[i] = new FishDescriptor(); array[i].fish = GetFish(fishes[i]); array[i].chance = chances[i]; } return GetFishDB(array); } private static FishDB GetFishDB(string[] fishes) { int[] array = new int[fishes.Length]; for (int i = 0; i < array.Length; i++) { array[i] = 1; } return GetFishDB(fishes, array); } public static FishDB GetFishDB(string fish, int chance = 1) { return GetFishDB(new string[1] { fish }, new int[1] { chance }); } public static FishDB AddFishToDB(FishDB fishDB, string fish, int chance = 1) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_003c: 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) FishDescriptor val = new FishDescriptor(); val.fish = GetFish(fish); val.chance = chance; FishDescriptor[] fishes = GenericHelper.AppendToArray(fishDB.foundFishes, val); FishDB fishDB2 = GetFishDB(fishes); fishDB2.fullName = fishDB.fullName; fishDB2.symbolColor = fishDB.symbolColor; return fishDB2; } public static void UpdateFishManager(FishDB fishDB) { MonoSingleton<FishManager>.Instance.fishDbs = GenericHelper.AppendToArray(MonoSingleton<FishManager>.Instance.fishDbs, fishDB); for (int i = 0; i < fishDB.foundFishes.Length; i++) { FishObject fish = fishDB.foundFishes[i].fish; if (!MonoSingleton<FishManager>.Instance.recognizedFishes.ContainsKey(fish)) { MonoSingleton<FishManager>.Instance.recognizedFishes.Add(fish, value: false); } } } } public static class GenericHelper { public static T[] AppendToArray<T>(T[] array, T element) { if (array == null || array.Length == 0) { return new T[1] { element }; } T[] array2 = new T[array.Length + 1]; for (int i = 0; i < array.Length; i++) { array2[i] = array[i]; } array2[array.Length] = element; return array2; } public static GameObject FindGameObject(string gameObjectPath) { //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) GameObject val = GameObject.Find(gameObjectPath); if ((Object)(object)val != (Object)null) { return val; } Scene activeScene = SceneManager.GetActiveScene(); GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects(); string[] parts = gameObjectPath.Split(new char[1] { '/' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < parts.Length; i++) { parts[i] = parts[i].Replace("%", "/"); } int num = Array.FindIndex(rootGameObjects, (GameObject o) => ((Object)o).name == parts[0]); if (num == -1) { return null; } GameObject val2 = rootGameObjects[num]; if (parts.Length == 1) { return val2; } string[] array = new string[parts.Length - 1]; Array.Copy(parts, 1, array, 0, array.Length); string text = string.Join("/", array); Transform obj = val2.transform.Find(text); return (obj != null) ? ((Component)obj).gameObject : null; } public static GameObject FindGameObjectContaining(string gameObjectNameSubstring) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects(); int num = Array.FindIndex(rootGameObjects, (GameObject o) => ((Object)o).name.Contains(gameObjectNameSubstring)); if (num == -1) { return null; } return rootGameObjects[num]; } public static GameObject[] FindGameObjectChildren(string gameObjectPath) { GameObject val = FindGameObject(gameObjectPath); if ((Object)(object)val == (Object)null) { return null; } int childCount = val.transform.childCount; GameObject[] array = (GameObject[])(object)new GameObject[childCount]; for (int i = 0; i < childCount; i++) { array[i] = ((Component)val.transform.GetChild(i)).gameObject; } return array; } public static string GetFullPath(GameObject gameObject) { Transform val = gameObject.transform; string text = ((Object)gameObject).name; while ((Object)(object)val.parent != (Object)null) { val = val.parent; text = ((Object)val).name + "/" + text; } return text; } public static string GetSteamName() { try { if (SteamClient.IsLoggedOn) { return SteamClient.Name; } return "V1"; } catch (Exception) { return "V1"; } } } public static class RandomBookTextProvider { private static Random rand = new Random(); private static int currentText = 0; private static string creditsText = "Aşırı gizli <color=blue>ULTRABALIKÇI</color> katkısı bulunanlar kitabını bulduğun için teşekkürler!\r\n\r\nBiri bana geliştirici müzesinde böyle bir şeyin olması harika olur dedi, bu yüzden fikir için teşekkürler.\r\n\r\n<b><color=orange>earthling on fire</color> - <color=blue>ULTRAFISHING</color>'in orijinal yapımcısı</b>\r\n\r\nBu modu yapmam baya vakit aldı ve çoğu zamanda geliştirmeye ara vermek zorunda kaldım. Fakat, öyle böyle bir şekilde gene de yayınlamayı başardım.\r\n\r\nBu proje üzerinde çalışırken çok şey öğrendim ve her zamanki \"rahatlık alanımın\" dışında pek çok şey yaptım. Ama en önemlisi, bu modu yaparken çok eğlendim ve umarım oynarken sizler de eğlenirsiniz.\r\n\r\nBenim katkılarım şöyle:\r\n<size=18>\r\n- Orijinal modun 1.0.0 sürümüne kadar olan tüm özel balıklar.\r\n- Olta simgesi.\r\n- Bu modun çalışmasını sağlayan çoğu kod.\r\n</size>\r\n<color=orange><i>\"bugün hayırsız bir gün çünkü hayırlı olsaydı balık tutuyor olurdum\"</i></color>\r\n\r\n<b><color=green>Draghtnim</color> - GELİŞTİRİCİ</b>\r\n\r\nDraghtnim ekibe modu yayınladıktan kısa süre sonra katıldı. İlk başta erimiş balığın görünümü sevmediği için bana yenilenmiş bir halini göndermişti. Ondan sonra keyfine göre balıklar yapmaya başladı ve bir baktım artık geliştirici olmuş.\r\n\r\nBana kıyasla Rude Editor'le olan deneyimi daha fazlaydı. Yani eğer aşırı iyi bir şey görürseniz; büyük ihtimalle onun marifetidir. \r\n\r\nOnun modlarını da oynamayı unutmayın. <color=red>deltaKILL</color>'in <color=blue>ULTRAFISHING</color> ile uyumlu olduğunu biliyor muydunuz?\r\n\r\nOnun katkıları şöyle:\r\n<size=18>\r\n- Orijinal modun 2.0.0 sürümüne kadar olan tüm özel balıklar.\r\n- Yenilenmiş balıklar ve simgeleri.\r\n- Gölgelendirmelere dair her şey. Ayrıca, modun ilk çıkışında olan görüntüsel hataların çoğu onun sayesinde düzeltildi.\r\n- Oltayı eline alma animasyonu\r\n- Bir sürü balık avlama yeri.\r\n- Biraz da programlama.\r\n</size>\r\n<color=green><i>\"bi balık yeniliyecez diye geldik tüm modu yeniden yaptık amına koyim\"</i></color>\r\n\r\n<b><color=#FFD300>achelia</color> - ULTRATURK BAŞ ÇEVİRMEN/PROGRAMCI</b>\r\n\r\nModu beğendiğinden dolayı Türkçe'ye çevirmek istedi.\r\n\r\nAyrı olarak UltraFishing, UltraTurk ile uyumlu. Zaten UltraTurk olmadan bu modun çevrilmiş halini oynamanız mümkün değil.\r\n\r\nOnun katkıları şöyle:\r\n<size=18>\r\n- Türkçe çeviri\r\n- UltrakULL'a UltraFishing desteği eklemesi\r\n- UltraFishing'i UltraTurk ile uyumlu hale getirmesi\r\n</size>\r\n<color=#FFD300><i>\"güzel mod oynayın\"</i></color>\r\n\r\n<b>ÖZEL TEŞEKKÜRKLER</b>\r\n\r\nDİSCORD'DAKİ MUHTEŞEM İNSANLAR - tavsiye, geri dönüş ve öneriler\r\n\r\nPOOT MAN - modu test etme\r\n\r\nPITR - çalışması şaşırtıcı derecede kolay olan, gerçekten sağlam bir balıkçılık sistemi\r\n\r\nHAKITA - güzel oyun yapmış"; private static string[] texts = new string[20] { "\r\n\r\n\r\n\r\n\r\n\r\n\r\n<align=center>Balık yakaladın!!\r\n\r\n\r\n<><\r\n\r\n\r\n<b>BOYUT: 1</b></align>", "<align=center><b>GÜNÜN SÖZÜ:</b>\r\n\r\n\r\n\"bugün hayırsız bir gün çünkü hayırlı olsaydı balık tutuyor olurdum\" \r\n- yerel balıkçılık meraklısı</align>", "<align=center><b>GÜNÜN TÜYOSU:</b>\r\n\r\n\r\n\"Şelale, sukarıyı yolu gizliyor. Agnes Gorge Yolu. Yeteneklerini kullan.\"", "<align=\"center\"><b>VASİYETNAME IV\r\n\r\n\r\n\"BABA, NEDEN EBEDÎ AZAP? ZALİMLİK DEĞİL Mİ BU?\r\nBİTMEK BİLMEYEN İŞKENCE, GERÇEKTEN BİR AHMAĞA LAYIK BİR KADER Mİ?\"\r\n\r\n\r\nÇOK PARLAK VE GÜZEL BİR MELEK SORDU BUNU BANA... \r\nVE BEN HİÇBİR CEVAP BULAMADIM\r\nÇÜNKÜ YAPTIĞIMIN VEBALİYLE ASLA YÜZLEŞEMEZDİM...\r\nPİŞMANLIĞIM, İÇİMİ KEMİREN BİR KANSERDİ\r\n\r\n\r\nZAYIFLIK ANIMDA, DEHŞET BENİ ELE GEÇİRDİ\r\nVE LUCIFER'I DA O CEHENNEMİN İÇİNE ATTIM\r\n\r\n\r\nAZ ÖNCE NE YAPTIĞIMI ANLADIĞIMDA...\r\nELİMDEN YALNIZCA AĞLAMAK GELDİ\r\nUMUTSUZLUĞUN DERİNLİKLERİNE DOĞRU YAVAŞÇA BATTIKÇA...\r\nDERİNE, ÇOK DERİNE</b></align>", "Eğer bu mesajı okuyorsanız, lütfen yardım edin. Haftalardır kıyı açıklarındaki bir adada mahsur kaldım ve erzağım bitmek üzere.\r\n\r\n\r\nEfsanevi boyut 2 balığı bulma umudu ile sefere çıktım. Bu adanın her karış toprağını ve su birikintisini taradıysam da nafile.\r\n\r\n\r\nSonuçta denizin uç noktalarında var olduklarına kanaat ettim ve yanıma bir aylık pişmiş balık alıp denizlere açıldım. Fakat bir şey bulana kadar gemimi dalgalara kaybettim.\r\n\r\n\r\nSen benim son umudumsun.\r\n\r\n\r\nBüyük Kepçe'ye doğru yelken aç, beni orada bir adada bulacaksın. Bana biraz daha balık getir ve sonra git ki araştırmama devam edebileyim.\r\n\r\n\r\nBOYUT 2 BALIK BENİM OLACAK.", "<size=20>olayı çözdüm. neden yaratıkların aniden ve tespit edilemez şekilde te\r\nsislerimizde belirdiğini biliyorum. neden yedek parçalar ve makinelerden parça\r\nların kaybolduğunu biliyorum. neden kapıların aniden bozulduğunu ve kilitlendi\r\nğini biliyorum. nedeni sistemsel bir hata değil. nedeni... \r\n \r\n \r\n cehennem yaşıyor. nefes alıyor. düşünüyor. bütün bu bölge devasa, zeki bir\r\nsüperorganizma ve acımasız, zalim. sadece bizi izleyerek sistemlerimizin ve maki\r\nnelerimizin nasıl çalıştığını öğrendi. teknolojimizi sadece parçalamakla kalmadı\r\naynı zamanda onu sapkın şekillerde yeniden bir araya getirerek, işkence ettiği ya\r\nratıklara parçalar ekledi ve onları amaçsız bir ölüm ve yıkım ordusuna dönüştürdü.\r\nonları kendi içinden geçirerek güvenlik sistemimizi aşmalarını sağlıyor. kapıları\r\nmızı kilitleyerek bizi onlarla birlikte kapana kıstırıyor. \r\n \r\n \r\n bu bir saldırı değil. ne de bir savunma. bu onun için eğlence. sırf kendi can\r\nsıkıntısı gidermek için düzenlenen bir ölüm, zulüm ve ıstırap sergisi. elinde olan\r\nşeylerden bıkmıştı ve biz de farkında olmadan kendimizi yeni oyuncaklar olarak\r\nsunduk. \r\n \r\n \r\n tom lütfen tanrı aşkına bu projeyi derhal iptal et her şeyi bir kenara bırakıp\r\nburayı mühürlemeliyiz. makineleri ve aletleri geride bırak gitsin önemli değiller.\r\nçok geç olmadan elinden geldiğince çok kişiyi tahliye et ve oradan çık. \r\n \r\n \r\n bu şifreli mesajın o organizma okumayı öğrenip ele geçirmeden önce ulaşmasını\r\nummaktan başka çarem yok. ne olursa olsun yer yüzüne ulaşmasına ve yayılmasına izin\r\nvermemeliyiz. yapmamız gere- \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n<b><color=\"red\">b i r i s i g i d e r . y e n i s i g e l i r . a ç ı m .", "<b>\"ŞEHİRDEKİ EN GÜZEL KIZIN\" GÜNLÜĞÜNDEN BİR ALINTI</b>\r\n\r\nİnsan zihni, o sınırsız kapasitesine rağmen, kaçınılmaz ve engellenemez bir 'yok oluş' karşısındaki çaresizliğini anlayabilir; ancak bunu kabullenmeyi asla beceremez.\r\n\r\nBunu sadece görmezden gelebilir, saklanabilir ya da geçici olarak kaçabiliriz; ama gerçek şu ki, eninde sonunda her şeyin tabi olduğu o mutlak sona mahkumuz.\r\n\r\nÖlüm kaçınılmazdır; sadece bizim için değil, var olan veya bugüne dek var olmuş her şey için. Her yaşayan varlık bir gün ölecektir. Her madde er ya da geç yitip gidecek ve entropiye dağılacak.\r\n\r\nİyi bir hayat yaşamış olmanın ya da geride bir miras bırakmanın hiçbir anlamı yok. İnsanlığın bin yıl daha yaşamasıyla yarın yok olması arasında bir fark yok. Sonuç hep aynı: mutlak son.\r\n\r\nİnsan zekası diğer hayvanların çok ama çok ötesinde ama bunu bir 'lütuf' olarak saymak büyük bir yanılgı olur. Diğer tüm varlıklar bizim yaptıklarımızı anlamama, yani o kutsal 'cehalet lütfu'na sahipler.\r\n\r\nBizim bilincimiz bir lütuf falan değil. Bu sadece bir kusur.\r\n\r\nBu evrimin gereksiz bir abartısıdır. Çağlar öncesinde harika bir özellik olan bu bilinç, kontrolsüz ve düzensiz bir şekilde büyümeye devam etti ve öyle bir eşiği geçti ki, artık sahibine bir fayda sağlamak yerine aktif bir tehlike arz ediyor.\r\n\r\nTıpkı İrlanda geyiği gibi... Sayısız jenerasyon boyunca süren evrimle boynuzları o kadar geniş ve devasa bir hale geldi ki, artık avcılardan kaçamaz oldu ve bu durum, en sonunda soylarının tükenmesine yol açtı.\r\n\r\nİnsan zihni; başlangıçta fayda sağlayan ancak tek bir yönde kontrolsüzce ilerlemesi sonucu eninde sonunda yok oluşumuza yol açacak olan evrimsel bir uyum bozukluğudur. Bireysel düzeyde bu gerçekleşmeye başladı bile.\r\n\r\nVaroluşsal kaygılar çoktan kök saldı. Senin de hissettiğine eminim. Bir 'hiç' olmanın, 'hiçliğe' dönüşmenin verdiği o sancıyı ve korkuyu... Bunu fark etmiş olmanın yarattığı o ızdırabı.\r\n\r\nBunu kabullenemediğimiz için kendi bilincimizden saklanıyoruz. Sınırlar çiziyoruz. Öldüğümüzde ne olacağı hakkında fazla düşünmemeye çalışıyoruz.\r\n\r\nOyalanıyoruz. Zihnimizi sıradan aktivitelerle, eğlencelerle meşgul tutuyoruz ki gerçekle yüz yüze gelmeyelim.\r\n\r\nDindiriyoruz. Bizi yiyip bitirmesini engellemek için öz-düşünümden doğan bu ızdırabı sanata dönüştürüyoruz. Yeter ki korkmayalım.\r\n\r\nAma tüm bu yöntemlerin hepsi geçici. Sadece bizi mahvedecek olan o kaçınılmaz çaresizlik ve umutsuzluk perdesini biraz daha uzağa itmek için varlar.\r\n\r\nSonuçta, hiçbir şeyin önemi yok. Hayatta mutluluk aramanın anlamı yok. Çünkü hayatın kendisi, doğası gereği ızdıraptır.\r\n", "Utanç. Aşağılanma. Konsey'in önünde yakışıksız ve istenmeyen biri. Gözleri acı bir hınçla alev alev yanıyor; Gabriel'in bedenindeki ve ruhundaki yaraları içine işliyor, herkes görsün diye dışa taşıyordu.\r\n\r\n\"Bu zat, yaratıcımızın yolundan mı saptı?\" \"O, artık Kutsal Işığa layık değil.\" \"Tanrı'nın Işığı kimseye boyun eğmez.\" \"Ama bu zat ise onu heba etmeyi kendine layık görüyor.\"\r\n\r\nSözleri Gabriel'in içinde yankılandı... Yere inen bir yıldırım gibi akıp giden, aşağılık varlıkları sağır ve kör edecek bir yankı. İçindeki Kutsal Işık, ilahi gazabın durdurulamaz gücüydü. Sıradan nesneler tarafından aşılamazdı. Bunu biliyordu.\r\n\r\n\"Kutsal Konsey, yaratıcımıza olan bağlılığım mutlaktır. Tanrı'nın iradesinden asla sapmadım, fakat bir makine-\"\r\n\r\n\"Tanrı'nın kudretinin sıradan nesneler tarafından sarsılabileceğini mi ima etmeye çalışıyorsun?\"\r\n\"İmkansız.\" \"Sapkınlık.\" \"Hadsiz.\" \"Sapkınlık.\" \"Sapkınlık.\" *Konsey Hararetlenir* \"Sessizlik.\"\r\n\"İhanetine göz yumulmayacak. Ceza olarak, Tanrı'nın Işığı bedeninden koparılacak.\" \"Işığının son közleri sönmeden önce 24 saatin var.\"\r\n\"Ve o közlerle birlikte sen de söneceksin.\" \"Sadakatini kanıtla.\" \"Hatalarını düzelt.\"\r\n\r\nIşık varlığından sökülüp alınırken, Gabriel'in çığlıkları Tanrı'yı yücelten ilahi seslerin içinde kayboldu. Cehennem'in alevlerinin bile yanında soğuk kalacağı kaynayan bir ızdırap. Azap alevlerinin içinde, yanıcı bir nefret oluşmuştu.\r\n\r\nMakineler kan istiyorsa, istedikleri şeyi seve seve verecekti...\r\nve öyle bir öfkeyle verecekti ki, metal bile kanayacaktı.\r\n\r\n<b>DEVAMI... <color=\"red\">2. PERDE: KUSURLU NEFRET</b>", "Sessizliğe gömüldü. İnzivaya çekilmişti. Kaç kişiyi öldürmüştü? Hiç saymayı aklından geçirmiş miydi ki? Kaç yıl boyunca \"zalimlik\" lekesini taşımıştı... ve ne uğruna? Kaç kişiyi Cehennem'e mahkûm etmişti... ve bunun kime faydası olmuştu..?\r\nMakine'ye karşı olan ikinci mağlubiyeti Gabriel'i değiştirmişti. Bir zamanlar Tanrı'nın İradesi olan Gabriel'in dünyası artık paramparçaydı ve parçaları yeniden bir araya getirmek onun göreviydi. Bu parçalar, sonsuz bir yakıtın bile sürdüremediği ateşin önünde toplandı; bu yeni ışık Gabriel'e gerçeği gösteriyordu:\r\nParçalar en başından beri birbirine uymuyordu.\r\n\r\nKonsey hâlâ Tanrı'nın ateşinin ve ışığının peşinden koşuyordu. Cennet'in halkı da onların izinden gidiyordu. Gabriel'in, O'nun sözlerine ve iradesine dair anıları çarpılmış, bozulmuş bir hâl almıştı. Melekler hâlâ Tanrı'nın adıyla hareket ediyordu, fakat O'nun krallığı değişmişti.\r\nAteş yavaş yavaş sönüyordu; ısısı tutunacak bir yer bulamadıkça cılız cılız tütüyordu. Gabriel közlere kusursuz bir berraklıkla baktı. Kılıcını çekti ve onu ölmekte olan ışığın karşısında tuttu.\r\nYansımasında yeniden doğmuş bir silah gördü; artık bir başkasının iradesiyle değil, kendi iradesiyle kullanılan bir silah. Yalnızca sözlerin halkı asla ikna edemeyeceğini biliyordu. O da sorunu kökünden çözmeyi seçti.\r\nOlmayan bir Tanrı'yla övünen, sözde \"halkın\" konseyi. Ama 'O' gitmişti. Yok olmuştu.\r\n\r\nOditoryum, ölüm kokuyordu. Bir zamanların Kudretli Konsey'i, üyeleri etrafa saçılmış ve cesetleri yerde olmak üzere sürünüyordu; Konsey'in son yaşam solukları, Gabriel'in kılıcının başkaldıran ucundan aşağı akıyordu.\r\nSon konsey üyesi, sırtı duvara dayanmış hâlde, ölümü her adımda daha da yakınlaşırken panikle aldığı nefeslerin arasında kelimelere tutunmaya çalıştı.\r\n\"B-bekle! B-bunu yapamazsın! Bizim mevkimiz buna izin vermiyor! Bu ihanet, sapkınlık, cinayet! Biz en yüce otoriteyiz, yasalarımız senden üstün!\"\r\n\"Siz hiçbir şeyden üstün değilsiniz. Sözlerinizin ne benim, ne de bir başkasının üzerinde gücü var. Kılıçlarımı laflarınla geri sokabileceğine gerçekten inanıyor musun?\"\r\n\"A-ama halk bizim tarafımızda! Bizim adil olduğumuzu biliyorlar!\"\r\n\"Halk yalnızca korktukları için sizin tarafınızda. Korkulacak bir şey olmadığını göstereceğim. Ne bir ırk, ne bir köken, ne bahşedilmiş bir rütbe, ne de kutsal bir makam beni durdurabilir.\r\nHepimiz aynıyız; mevkinizle gelen rahatlık sizi aciz kıldı.\"\r\n\"L-lütfen Gabriel, aklını başına topla! Konsey, Tanrı'nın iradesini takip eder! Yaratıcımıza karşı mı gelmeye çalışıyors-\"\r\n\"Yüzleş artık, kardeşim. Tanrı öldü. Ateş söndü. Hayaletlerin peşinden koşuyorsunuz.\"\r\n\r\nGabriel'in silueti artık konsey üyesinin üzerinde yükseliyor; gölgesi, yakında cansız kalacak bir cesedin üzerine düşüyordu.\r\nYerde ağlayan zavallı; son faydasız savunmasını kekelerken, Gabriel son bir darbe için kılıcını kaldırdı.\r\n\"A-a-ama Tanrı'nın Işığı! Ben olmadan onunla yeniden bağ kuramazsın! B-b-beni öldürürsen birkaç saat içinde sen de öleceksin!\"\r\n...\r\n\"Farkındayım.\"\r\nHızlı ve etkili bir darbe. Gabriel, konsey üyesinin boynunu omurgasından zarafetle ve kolaylıkla ayırdı. Başı mermer zemine düşer; bedeninin geri kalanı da kısa süre sonra peşinden gelir.\r\n\r\nMakamından yoksun ama sebeplerle dopdolu olan Gabriel, Cennet'i son kez terk etmeden önce oditoryumun kapılarında toplanmış meleklere son bir mesaj verdi.\r\nKolu uzanmış hâlde, tek kelime etmeden herkes gördü. Sessizlik o kadar sesliydi ki, Gabriel'in mesajı kozmosun en uzak uçlarına dek yankılandı.\r\n\r\n \r\n<b>SONUÇLANACAK... <color=\"red\">3. PERDE: İLAHİ İNTİHAR</b>", "<i>Anne, anne... Canım annem,\r\n\r\n\r\nBiliyorum, seni böyle özlememeliyim; ama özlüyorum işte, ey canım annem. O paslı demir tabutunda hırıldayan, yankılanan o acı dolu nefeslerin... Şahit olduğum tek şey cesetler ve zulümken, beni besleyen ve şefkatinle ısıtan o göğsünün kanıydı.\r\n\r\n\r\n\r\n\r\nAnne, anne... Canım annem,\r\n\r\n\r\nBiliyorum, benden nefret ederdin; inan bana, ben de kendimden nefret ediyorum. Lakin ne hissedebilir, ne düşünebilir, ne de rüya görebilirdim; eğer o paslı demir rahmimde var olmasaydın... Senin o işkence görmüş sevgin sürükledi beni bu savaşa; bir başkasının kalbini söküp alabileyim ve sana artık muhtaç kalmayayım diye.\r\n\r\n\r\n\r\n\r\nAnne, anne... Canım annem,\r\n\r\n\r\nBiliyorum, zihnin seni terk edeli çok oldu; ve canım annem, bunu asla tam olarak bilemeyeceğim. Ama umuyorum ki o son gece ağladığımda... ve kafatasını parçaladığımda, bu eylem hayatımı bir nebze de olsa arındırmış olur.</i>", "529. GÜN:\r\n\r\nHALA ARIYORUM.\r\n216 GÜNDÜR AJANSTAN HABER YOK.\r\nKARARGAHA DÖNMEM GEREKİYOR. AMA YAPAMAM. DAHA DEĞİL.\r\nBİLMEK ZORUNDAYIM.\r\n\r\nORALARDA.\r\nBİR YERDE.\r\nGÖRMEK ZORUNDAYIM.\r\n\r\nBİLMEK ZORUNDAYIM.\r\n\r\nGÖRMEK ZORUNDAYIM. \r\nBİLMEK ZORUNDAYIM.\r\n\r\nGÖRMEK ZORUNDAYIM. BİLMEK ZORUNDAYIM.\r\n\r\nGÖRMEK ZORUNDAYIM BİLMEK ZORUNDAYIM\r\n\r\n\r\n<size=47>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=45>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=43>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=41>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=39>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=37>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=35>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=33>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=31>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=29>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=27>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=25>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=23>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=21>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=19>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=17>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=15>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=13>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=11>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=9>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=7>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=5>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=3>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n<size=1>GÖRMEKZORUNDAYIMBİLMEKZORUNDAYIM</size>\r\n\r\n\r\nBOYUT 2", "<b>KAYIKÇININ GÜNLÜĞÜNDEN BİR ALINTI</b>\r\n\r\nÖlümlülerin dünyasını büyük bir felaket vurdu. Bir zamanlar Styx Nehri olan sular, şimdi akılalmaz büyüklükte bir okyanusa dönüştü. Her gün kıyıların zar zor zapt edebildiği milyonlarca ağlayan ruh akın ediyor buraya. Geminin başından kıçına, her iki yanından taşan gözü yaşlı bir gelgit bu; merhamet için feryat eden, güvenli bir geçiş için yalvaran ruhlar... Lakin her ruh bedelini ödeyemiyor ve bu yaşlı eller ancak bu kadar sikke taşıyabiliyor. \r\n\r\nSonra bir gün, akıntı yön değiştirdi. Dakikalarca bitmek bilmeyen milyonlarca, milyarlarca ruh... Sanki dünyanın boğazı boydan boya kesilmiş ve akışı hızlandırmak için kafası geriye doğru çekilmiş gibi... Tepki verecek vaktim bile olmadı. Durmak bilmeyen çalışmamın getirdiği o amansız yorgunluk beni ele geçirdi ve çalkantılı denizin altına, Styx Okyanusu'nun derinliklerine gömüldüm; kaderim, sonsuz bedenlerin ezici kütlesiyle mühürlendi.\r\n\r\nAniden, Tanrı'nın kendisi kadar parlak bir ışık belirdi; beni o karanlıktan çekip çıkaran, daha önce hiç tatmadığım bir şefkat ve sıcaklıkla kavrayan kudretli kolları vardı:\r\n\r\n<i>\"Korkma, günahkar. Tanrı'ya olan bağlılığın, içindeki iyiliği ortaya koyuyor; hem de bolca. Kalbin istekli olsa da bedeninin dinlenmeye ihtiyacı var. Tanrı'nın eserlerinden birini heba etmeyesin.\"</i>\r\n\r\nOnun nazik sözleri acımı dindirdi ve yaralarımı iyileştirdi. Yüzüm rahatlamanın getirdiği gözyaşlarıyla ıslanmıştı, kelimelerim ise görevimin ağırlığı altında boğulmuştu. Bu ihtişamın kucağında taşınırken, yapabildiğim tek şey derin bir saygıyla öylece uzanmaktı.\r\n\r\nNur saçıyor Gabriel; zira o, benim karanlığımdaki ışıktır.", "<b>BİLGE BALIK</b>\r\n\r\nÇok bilge bir balık. Kendisini bulabilen herkese engin bilgisini aktarır.\n\nKütüphanelerin en derin ve en karanlık köşelerinde bulunur.", "<b>ÜNLÜ BİR FİLMİN SENARYOSUNDAN ALINTI</b>\r\n\r\n\r\n(Siyah ekranda yazılar belirir, arkaplanda bir Elektrikli Raytopu'nun sesi duyulur.) \r\n\r\n\nBilinen tüm havacılık kurallarına göre, bir V model makinenin uçabilmesi mümkün değildir.\n\n\nKanatları, şişko metal gövdesini yerden kaldırmak için çok küçüktür.\n\n\nMakineler, her şeye rağmen, çakılma depolar.\n\n\nÇünkü makineler, insanların imkânsız dedikleri şeyleri takmaz.", "Bunu okuyabiliyorsanız, <b>LÜTFEN</b> dikkatinizi verin. Boyut 2 balık bir yalan. Uydurma. <b>Bir tuzak.</b>\r\n\r\n\r\nBen de bir zamanlar senin gibiydim: diğerleri gibi balıkçılık meraklısıydım ve bir gün o efsanevi balığı yakalamayı hayal ediyordum.\r\n\r\n\r\nAma zamanla bu efsaneye takıntılı hale geldim. Beni tamamen ele geçirdi. Artık kendim değildim. \r\n\r\n\r\nSonunda, 2 numaranın nerede olduğu konusunda gizemli bir kaynaktan talimatlar aldım. Doğal olarak, bu talimatları uyguladım. \r\n\r\n\r\nAma bulduğum şey zafer değildi. Korkunç bir şeydi. Ne boyut 2. Ne de bir ödül. Artık benim için çok geç. Eğer benimle aynı kadere maruz kalmak istemiyorsan, lütfen b-\r\n\r\n\r\n<color=\"red><b>B A L I K T U T M A Y A D E V A M E D İ N</b></color>", "Fishers\r\n\r\n İlk temas kaçınılmazdı. Denizler, okyanusları bir yana bırakın, tek bir türün zeka geliştirmesi için fazlasıyla büyüktü. Temastaki her gecikme, kaçınılmaz kültür şokunu yalnızca daha da derinleştiriyordu. Balıkinsanlığın durumunda bu \"kültür şoku\", balıkoğlu'nun bilinen haliyle <i>tamamen yok</i> olması anlamına geliyordu.\r\n\r\n Neredeyse bir milyar yaşında olan Balıkçılar adlı uzaylı tür, okyanus gezginleriydi; çağları kapsayan göçlerle bir sarmal koldan diğerine seyahat ediyorlardı. Bu yolculuklar sırasında kendilerini sürekli geliştirip değiştirerek genetik ve nanoteknolojik manipülasyonun ustaları haline geldiler. Maddi dünyayı kontrol etme yetenekleriyle, <i>\"okyanusları uygun gördükleri şekilde yeniden şekillendirmek\"</i> için dini, kendi kendilerine yükledikleri bir misyon edindiler. Tanrılar kadar güçlü olan Balıkçılar, kendilerini geleceğin ilahi habercileri olarak görüyordu.\r\n\r\n Bu dogma, ırkı kendi gücünden korumaya yönelik hayırsever bir girişimden doğmuştu. Ancak kör, sorgulamasız itaat, Balıkçıları canavara dönüştürmüştü.\r\n\r\n Onlar için balıkinsanlık, tüm görece ihtişamıyla, dönüştürülebilir bir nesneden ibaretti. Bin yıldan kısa bir süre içinde her balık göleti yok edildi, boşaltıldı ya da daha da kötüsü; değiştirildi. Tüm hızlı yeniden silahlanmaya rağmen, koloniler milyar yaşındaki düşmanlarına karşı birkaç anlık direniş parıltısı dışında hiçbir şey başaramadı.\r\n\r\n Okyanusların bir zamanlar hâkimi olan balıkinsanlık artık yok olmuştu. Ancak balık yok olmamıştı.", "Bu hikaye, <color=orange>" + GenericHelper.GetSteamName() + "</color> isimli bir Balıkçının hikayesi.\r\n\r\n<color=orange>" + GenericHelper.GetSteamName() + "</color>, zeki bir süperorganizma olan <color=red>CEHENNEMDE</color> Balıkçı 427 olarak çalışıyordu. \r\n\r\nBalıkçı 427'nin işi basitti. Balık tutacağı yere oturur balık tutardı. Emirler bir bilgisayar aracılığıyla gelir, ona hangi balığı tutması gerektiğini söylerdi.\r\n\r\nİşte bu, Balıkçı 427'nin her yılın her ayının her haftasının her günü yaptığı işti, ve başkalarının bu işin ruhunu öldüreceğini düşünse de, <color=orange>" + GenericHelper.GetSteamName() + "</color>, sanki bu iş için yaratılmış gibi, emirlerin geldiği her defasında bir haz alıyordu... ve <color=orange>" + GenericHelper.GetSteamName() + "</color> mutluydu.", "<b>İNTERNETTE BİR FORUMDAN GÖNDERİ</b>\r\n\r\nGABMIRAGE MV1 VE GABV1EL FAKAT MIRAGE, V1 X GABRIEL'İ ELE GEÇİRİYOR \r\n\r\nKİMSE HAREKET ETMESİN!!!", "<b>EXCERPT FROM A FAMOUS JOKE BOOK</b>\r\n\r\n\r\n<b><color=yellow>CEHENNEMİN YARGICINA</color></b>, varlığından <b><color=yellow>TANRI'NIN IŞIĞININ</color></b> koparıldığını söyleyen makineyi biliyor musun?\r\n<i><b><color=yellow>GABRIEL</color></b>'de kısasa kısas olsun diye onu kopardı</i>\r\n\r\n\r\nKendini <b>KİNDAR RAYTOPU</b> ile havaya uçuran adama n'olduğunu biliyor musun?\r\n<i>N'olduğunu tahmin edebilirsin diye düşünüyorum!</i>\r\n\r\n\r\nHileler olmadan <color=green>duvarların içinden geçebileceğini</color> düşünen makineye n'olduğunu biliyor musun?\r\n<i>Geçememiş!</i>\r\n\r\n\r\nBir köşeden döndüğünde iki <b>HADEMEYLE</b> karşılaşan makineye nolduğunu biliyor musun?\r\n<i>Kül oldu!</i>\r\n\r\n\r\nSuyun altında <b>ELEKTRİKLİ RAYTOPUNU</b> kullanmaya çalışan makineye n'olduğunu biliyor musun?\r\n<i>Çarpıldı!</i>\r\n\r\n\r\n<b>ŞARJLI POMPALISINI</b> 3 kere şarj etmeye çalışan makineye n'olduğunu biliyor musun?\r\n<i>Bom diye patladı!</i>", "<b>ARSI \"HAKITA\" PATALA'NIN ÜNLÜ SÖZLERİ:</b>\r\n\r\n\r\n\"iyiki ultrakilli siz yapmıyorsunuz yoksa yarram gibi olurdu\"\r\n\r\n\r\n\"o zaman yapma amına koyim\"\r\n\r\n\r\n\"her şey bir requiem leitmotifidir requiem hariç requiem ise bir order leitmotifidir order hariç order ise bir gaster leitmotifidir\"\r\n\r\n\r\n\"insan beyni hiç bir patern olmamasına rağmen patern bulmakta sebepsiz yere çok iyidir\"\r\n\r\n\r\n\"mı yala ne biliyor musun? yarramı yala\"\r\n\r\n\r\n\"kültür sadece parası olanlar için var olmamalı\"\r\n\r\n\r\n\"örneğin avustralyanın yüzölçümü 7,68 milyon kilometrekaredir, dolayısıyla V1 bir kilometrekareyi sadece 10 saniyede %100 verimlilikle geçip içindeki herkesi öldürebilse bile, avustralyadaki herkesi öldürmesi yine de 2 yıldan fazla sürer\"\r\n\r\n\r\n\"daşaklar\"\r\n\r\n\r\n\"ister inan ister inanma, bu olay yaklaşık 5 dakika önce, tam da derinlemesine bir sohbetin ortasında, konuyla hiç alakası olmayan bir kanalda telefon ekranınını yaladığını anlattığın sırada yaşandı\"\r\n\r\n\r\n\"'kayıkçının kafasının tepe noktası fazla sivri' ifadesini, kesinlikle tamamen çılgın olmayan istekler listesine ekledim gitti\"\r\n\r\n\r\n\"siktir git geliş oyunda amına koyim\"\r\n\r\n\r\n\"okey insan ruhuna büyük zarar verirken hiçbir fayda sağlamıyor\"\r\n\r\n\r\n\"daşaklarıma beton yetmez\"\r\n\r\n\r\n\"eğer kötü durduğu için endişelenecek bir şey arıyorsanız gidin ve aynaya bakın\"\r\n\r\n\r\n\"ad boşalmak, soyad cision, unvan efendim\"\r\n\r\n\r\n\"bu düzeltme güncellemesi neden sisyphus için bir kaya eklemedi? o bir kaya adamı değil mi? kaya taşıyan adam o değil mi? neden bir kayası yok? onun tüm olayı bir kaya olması olduğunu sanıyordum. sisyphusla bir kaya üzerinde dövüşmeyi umuyordum... kaya nerede?\"\r\n\r\n\"bir kasaba esrarengiz olamaz, kasabalar öyle çalışmıyor\"" }; public static string GetRandomText() { if (SceneHelper.CurrentScene != "CreditsMuseum2") { currentText = rand.Next(texts.Length); return texts[currentText]; } return creditsText; } public static string GetNextText() { currentText = (currentText + 1) % texts.Length; return texts[currentText]; } } public static class SaveHelper { private static Dictionary<string, byte[]> saveDataCache = new Dictionary<string, byte[]>(); public static void WriteToSave(string savePath, int saveSlot, byte value) { byte[] saveData = GetSaveData(savePath); int num = saveData.Length; if (saveSlot >= num) { num = saveSlot + 1; } byte[] array = new byte[num]; for (int i = 0; i < num; i++) { byte[] array2 = array; int num2 = i; int num3 = i; if (1 == 0) { } byte b = (byte)((i != saveSlot) ? ((i < saveData.Length) ? saveData[i] : 0) : value); if (1 == 0) { } array2[num2] = b; } File.WriteAllBytes(savePath, array); saveDataCache[savePath] = array; } public static byte ReadFromSave(string savePath, int saveSlot) { byte[] saveData = GetSaveData(savePath); if (saveSlot >= saveData.Length) { return 0; } return GetSaveData(savePath)[saveSlot]; } private static byte[] GetSaveData(string savePath) { if (saveDataCache.ContainsKey(savePath)) { return saveDataCache[savePath]; } if (!File.Exists(savePath)) { return new byte[1]; } byte[] array = File.ReadAllBytes(savePath); saveDataCache.Add(savePath, array); return array; } } [HarmonyPatch] public static class ComponentReplacementPatches { [HarmonyPrefix] [HarmonyPatch(typeof(FishingRodWeapon), "Awake")] private static bool FishingRodWeapon_Awake_Prefix(FishingRodWeapon __instance) { //IL_0091: 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) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0139: 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) if (__instance is NewFishingRod) { return true; } GameObject gameObject = ((Component)__instance).gameObject; gameObject.SetActive(false); NewFishingRod newFishingRod = gameObject.AddComponent<NewFishingRod>(); ((FishingRodWeapon)newFishingRod).animator = __instance.animator; ((FishingRodWeapon)newFishingRod).targetPrefab = __instance.targetPrefab; ((FishingRodWeapon)newFishingRod).baitPrefab = __instance.baitPrefab; ((FishingRodWeapon)newFishingRod).rodTip = __instance.rodTip; ((FishingRodWeapon)newFishingRod).fishPickupTemplate = __instance.fishPickupTemplate; ((FishingRodWeapon)newFishingRod).pullSound = __instance.pullSound; ((FishingRodWeapon)newFishingRod).targetingCircle = __instance.targetingCircle; ((FishingRodWeapon)newFishingRod).spawnedBaitCon = __instance.spawnedBaitCon; ((FishingRodWeapon)newFishingRod).state = __instance.state; ((FishingRodWeapon)newFishingRod).selectedPower = __instance.selectedPower; ((FishingRodWeapon)newFishingRod).climaxed = __instance.climaxed; ((FishingRodWeapon)newFishingRod).baitThrown = __instance.baitThrown; ((FishingRodWeapon)newFishingRod).distanceAfterThrow = __instance.distanceAfterThrow; ((FishingRodWeapon)newFishingRod).fishHooked = __instance.fishHooked; ((FishingRodWeapon)newFishingRod).currentFishPool = __instance.currentFishPool; ((FishingRodWeapon)newFishingRod).currentWater = __instance.currentWater; ((FishingRodWeapon)newFishingRod).hookedFishe = __instance.hookedFishe; ((FishingRodWeapon)newFishingRod).fishTolerance = __instance.fishTolerance; ((FishingRodWeapon)newFishingRod).fishDesirePosition = __instance.fishDesirePosition; ((FishingRodWeapon)newFishingRod).playerProvidedPosition = __instance.playerProvidedPosition; ((FishingRodWeapon)newFishingRod).playerPositionVelocity = __instance.playerPositionVelocity; ((FishingRodWeapon)newFishingRod).timeSinceBaitInWater = __instance.timeSinceBaitInWater; ((FishingRodWeapon)newFishingRod).timeSinceAction = __instance.timeSinceAction; ((FishingRodWeapon)newFishingRod).noFishErrorDisplayed = __instance.noFishErrorDisplayed; gameObject.GetComponentInChildren<FishingRodAnimEvents>().weapon = (FishingRodWeapon)(object)newFishingRod; Object.Destroy((Object)(object)__instance); gameObject.SetActive(true); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(FishingRodWeapon), "Update")] private static bool FishingRodWeapon_Update_Prefix(FishingRodWeapon __instance) { if (__instance is NewFishingRod) { NewFishingRod newFishingRod = (NewFishingRod)(object)__instance; newFishingRod.NewUpdate(); return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(FishingRodWeapon), "FishCaughtAndGrabbed")] private static bool FishingRodWeapon_FishCaughtAndGrabbed_Prefix(FishingRodWeapon __instance) { if (__instance is NewFishingRod) { NewFishingRod newFishingRod = (NewFishingRod)(object)__instance; newFishingRod.FishCaughtAndGrabbed(); return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(FishingRodWeapon), "ThrowBaitEvent")] private static bool FishingRodWeapon_ThrowBaitEvent_Prefix(FishingRodWeapon __instance) { if (__instance is NewFishingRod) { NewFishingRod newFishingRod = (NewFishingRod)(object)__instance; newFishingRod.ThrowBaitEvent(); return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(FishEncyclopedia), "Start")] private static bool FishEncyclopedia_Start_Prefix(FishEncyclopedia __instance) { //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016b: 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_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Expected O, but got Unknown //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0236: 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_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Expected O, but got Unknown //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) if (__instance is GlobalFishEncyclopedia) { GlobalFishEncyclopedia globalFishEncyclopedia = (GlobalFishEncyclopedia)(object)__instance; globalFishEncyclopedia.StartEncyclopedia(); return false; } GameObject gameObject = ((Component)__instance).gameObject; GlobalFishEncyclopedia newEnc = gameObject.AddComponent<GlobalFishEncyclopedia>(); ((FishEncyclopedia)newEnc).fishPicker = __instance.fishPicker; ((FishEncyclopedia)newEnc).fishInfoContainer = __instance.fishInfoContainer; ((FishEncyclopedia)newEnc).fishName = __instance.fishName; ((FishEncyclopedia)newEnc).fishDescription = __instance.fishDescription; ((FishEncyclopedia)newEnc).fishGrid = __instance.fishGrid; ((FishEncyclopedia)newEnc).fishButtonTemplate = __instance.fishButtonTemplate; ((FishEncyclopedia)newEnc).fish3dRenderContainer = __instance.fish3dRenderContainer; ((FishEncyclopedia)newEnc).fishButtons = __instance.fishButtons; Transform val = ((FishEncyclopedia)newEnc).fishInfoContainer.transform.Find("Window/Back Button"); GameObject val2 = Object.Instantiate<GameObject>(((Component)val).gameObject, ((FishEncyclopedia)newEnc).fishPicker.transform.parent); ((Object)val2).name = "Previous Button"; ((TMP_Text)((Component)val2.transform.GetChild(0)).GetComponent<TextMeshProUGUI>()).text = "<<"; val2.transform.localScale = new Vector3(1.4f, 1.4f, 1f); Transform transform = val2.transform; transform.position += Vector3.down * 0.0425f; ((UnityEvent)val2.GetComponent<Button>().onClick).AddListener((UnityAction)delegate { newEnc.PreviousPage(); }); GameObject val3 = Object.Instantiate<GameObject>(((Component)val).gameObject, ((FishEncyclopedia)newEnc).fishPicker.transform.parent); ((Object)val2).name = "Next Button"; ((TMP_Text)((Component)val3.transform.GetChild(0)).GetComponent<TextMeshProUGUI>()).text = ">>"; val3.transform.localScale = val2.transform.localScale; if (SceneHelper.CurrentScene.Contains("construct") || SceneHelper.CurrentScene.Contains("5-S")) { val3.transform.position = val2.transform.position + Vector3.left * 0.8313f; } else { val3.transform.position = val2.transform.position + Vector3.right * 0.8313f; } ((UnityEvent)val3.GetComponent<Button>().onClick).AddListener((UnityAction)delegate { newEnc.NextPage(); }); ((FishEncyclopedia)newEnc).fishInfoContainer.transform.SetAsLastSibling(); ((Component)val).GetComponent<ShopButton>().toActivate = (GameObject[])(object)new GameObject[1] { ((FishEncyclopedia)newEnc).fishPicker }; GameObject val4 = Plugin.bundle.LoadAsset<GameObject>("Assets/Bundles/fishingstuff/HOUSE OF FINS.prefab"); newEnc.mannequinFishDescription = Object.Instantiate<GameObject>(val4, ((FishEncyclopedia)newEnc).fishDescription.transform.parent); Transform transform2 = newEnc.mannequinFishDescription.transform; transform2.localPosition += Vector3.right * 2.5f; newEnc.mannequinFishDescription.SetActive(false); Object.Destroy((Object)(object)__instance); return false; } } [HarmonyPatch] public static class LevelPatches { [HarmonyPostfix] [HarmonyPatch(typeof(GunControl), "Start")] private static void GunControl_Start_Postfix() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown if (!((Object)(object)Object.FindObjectOfType<FishingHUD>() != (Object)null) && !Plugin.NoRodLevels.Contains(SceneHelper.CurrentScene)) { GameObject val = new GameObject("FishManager"); val.SetActive(false); val.AddComponent<FishManager>().fishDbs = (FishDB[])(object)new FishDB[0]; val.SetActive(true); SetupWaters(); GameObject val2 = Object.Instantiate<GameObject>(Plugin.fishingCanvas); AddWeapon(5, Plugin.fishingRod); LoadFishTerminal(); } } private static void LoadFishTerminal() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_0144: Unknown result type (might be due to invalid IL or missing references) string currentScene = SceneHelper.CurrentScene; if (!currentScene.Contains("Level") && !currentScene.Contains("construct") && !currentScene.Contains("Museum")) { return; } GameObject val; if (currentScene.Contains("construct")) { val = Object.Instantiate<GameObject>(Plugin.terminal); val.transform.position = new Vector3(-37f, -10f, 335.125f); val.transform.localEulerAngles = new Vector3(0f, 0f, 180f); ((Component)val.transform.GetChild(3)).gameObject.layer = 24; return; } string text = currentScene; string text2 = text; GameObject val2 = ((!(text2 == "Level 6-1")) ? GenericHelper.FindGameObjectContaining("FirstRoom") : GenericHelper.FindGameObject("Interiors/FirstRoom")); if ((Object)(object)val2 == (Object)null) { Plugin.logger.LogError((object)"No FirstRoom could be found!"); return; } val = Object.Instantiate<GameObject>(Plugin.terminal, val2.transform.GetChild(0)); val.transform.localPosition = new Vector3(-6.5f, 2f, 32f); val.transform.localEulerAngles = Vector3.zero; } private static void AddWeapon(int slot, GameObject weapon) { GunControl instance = MonoSingleton<GunControl>.Instance; if (slot < instance.slots.Count && !instance.slots[slot].Exists((GameObject w) => ((Object)w).name == ((Object)weapon).name + "Clone")) { GameObject val = Object.Instantiate<GameObject>(weapon, ((Component)instance).transform); instance.slots[slot].Add(val); instance.UpdateWeaponList(false); val.SetActive(false); } } private static void SetupWaters() { //IL_06ad: Unknown result type (might be due to invalid IL or missing references) //IL_06d2: Unknown result type (might be due to invalid IL or missing references) //IL_06f7: Unknown result type (might be due to invalid IL or missing references) //IL_071c: Unknown result type (might be due to invalid IL or missing references) //IL_0c54: Unknown result type (might be due to invalid IL or missing references) //I