Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CoastalFishingChinese v1.0.0
DSH.CoastalFishingChinese.dll
Decompiled 2 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("DSH.CoastalFishingChinese")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DSH.CoastalFishingChinese")] [assembly: AssemblyTitle("DSH.CoastalFishingChinese")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace CFChinese { [BepInPlugin("dsh.coastalfishing.chinese", "Coastal Fishing Chinese", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string Guid = "dsh.coastalfishing.chinese"; internal static ManualLogSource Log; private static ConfigEntry<float> _lobsterSmall; private static ConfigEntry<float> _lobsterMedium; private static ConfigEntry<float> _lobsterLarge; private static ConfigEntry<float> _crabSmall; private static ConfigEntry<float> _crabMedium; private static ConfigEntry<float> _crabLarge; private static List<KeyValuePair<string, string>> _ordered; private static readonly HashSet<int> Attached = new HashSet<int>(); private static readonly HashSet<int> Scaled = new HashSet<int>(); private static List<KeyValuePair<string, string>> Ordered { get { if (_ordered == null) { _ordered = Translations.Text.OrderByDescending((KeyValuePair<string, string> kv) => kv.Key.Length).ToList(); } return _ordered; } } private void Awake() { //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Expected O, but got Unknown //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Expected O, but got Unknown //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Expected O, but got Unknown //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Expected O, but got Unknown //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; _lobsterSmall = ((BaseUnityPlugin)this).Config.Bind<float>("Scale", "LobsterSmall", 1f, "小龙虾视觉放大倍数(1 = 原样)"); _lobsterMedium = ((BaseUnityPlugin)this).Config.Bind<float>("Scale", "LobsterMedium", 2.5f, "中龙虾视觉放大倍数"); _lobsterLarge = ((BaseUnityPlugin)this).Config.Bind<float>("Scale", "LobsterLarge", 5f, "大龙虾视觉放大倍数(想要金枪鱼那级别就用 5 或更大)"); _crabSmall = ((BaseUnityPlugin)this).Config.Bind<float>("Scale", "CrabSmall", 1f, "小蟹视觉放大倍数"); _crabMedium = ((BaseUnityPlugin)this).Config.Bind<float>("Scale", "CrabMedium", 1.5f, "中蟹视觉放大倍数"); _crabLarge = ((BaseUnityPlugin)this).Config.Bind<float>("Scale", "CrabLarge", 3f, "大蟹视觉放大倍数"); Diag("=== CF-CN start, assembly loaded from " + typeof(Plugin).Assembly.Location); try { Harmony val = new Harmony("dsh.coastalfishing.chinese"); Type type = AccessTools.TypeByName("MarcCoastalFishing.Util"); if (type == null) { Log.LogError((object)"[CF-CN] MarcCoastalFishing.Util not found - is Coastal Fishing installed?"); } else { MethodInfo methodInfo = AccessTools.Method(type, "Localize", new Type[1] { typeof(string) }, (Type[])null); if (methodInfo != null) { val.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(typeof(Plugin).GetMethod("LocalizePostfix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } else { Log.LogWarning((object)"[CF-CN] Util.Localize not found."); } string[] array = new string[2] { "Center", "TopLeft" }; foreach (string text in array) { MethodInfo methodInfo2 = AccessTools.Method(type, text, new Type[1] { typeof(string) }, (Type[])null); if (methodInfo2 != null) { val.Patch((MethodBase)methodInfo2, new HarmonyMethod(typeof(Plugin).GetMethod("MessagePrefix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } else { Log.LogWarning((object)("[CF-CN] Util." + text + " not found.")); } } } Type type2 = AccessTools.TypeByName("MarcCoastalFishing.GearBase"); if (type2 != null) { MethodInfo methodInfo3 = AccessTools.Method(type2, "GetHoverName", new Type[0], (Type[])null); if (methodInfo3 != null) { val.Patch((MethodBase)methodInfo3, (HarmonyMethod)null, new HarmonyMethod(typeof(Plugin).GetMethod("HoverNamePostfix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } else { Diag("WARN GearBase.GetHoverName not found"); } } else { Diag("WARN MarcCoastalFishing.GearBase not found"); } Type type3 = AccessTools.TypeByName("ItemStand"); MethodInfo methodInfo4 = ((type3 != null) ? AccessTools.Method(type3, "CanAttach", new Type[1] { typeof(ItemData) }, (Type[])null) : null); if (methodInfo4 != null) { val.Patch((MethodBase)methodInfo4, (HarmonyMethod)null, new HarmonyMethod(typeof(Plugin).GetMethod("AllowAttachPostfix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } else { Diag("WARN ItemStand.CanAttach not found"); } val.Patch((MethodBase)AccessTools.Method(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(Plugin).GetMethod("RenamePostfix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.Method(typeof(ZNetScene), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(Plugin).GetMethod("RenamePostfix", BindingFlags.Static | BindingFlags.NonPublic)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Log.LogInfo((object)"[CF-CN] Coastal Fishing 汉化补齐已加载。"); Diag("patched OK"); } catch (Exception ex) { Log.LogError((object)("[CF-CN] patch failed: " + ex)); } } internal static void Diag(string line) { try { File.AppendAllText(Path.Combine(Path.GetDirectoryName(typeof(Plugin).Assembly.Location) ?? ".", "CF-CN.log"), DateTime.Now.ToString("HH:mm:ss") + " " + line + Environment.NewLine); } catch { } } private static void LocalizePostfix(ref string __result) { try { __result = Tr(__result); } catch { } } private static void HoverNamePostfix(ref string __result) { try { __result = TrName(__result); } catch { } } private static void AllowAttachPostfix(ref bool __result, ItemData item) { try { if (!__result && item != null && !((Object)(object)item.m_dropPrefab == (Object)null)) { string name = ((Object)item.m_dropPrefab).name; if (!string.IsNullOrEmpty(name) && name.StartsWith("MF_", StringComparison.Ordinal)) { __result = true; Diag("itemstand: allowed " + name); } } } catch { } } private static void MessagePrefix(ref string msg) { try { msg = Tr(msg); } catch { } } [HarmonyPriority(50)] private static void RenamePostfix() { try { int num = 0; ObjectDB instance = ObjectDB.instance; if ((Object)(object)instance != (Object)null && instance.m_items != null) { foreach (GameObject item in instance.m_items) { if ((Object)(object)item == (Object)null) { continue; } ItemDrop component = item.GetComponent<ItemDrop>(); SharedData val = (((Object)(object)component != (Object)null && component.m_itemData != null) ? component.m_itemData.m_shared : null); if (val == null) { continue; } if (!string.IsNullOrEmpty(val.m_name)) { string text = TrName(val.m_name); if (text != val.m_name) { val.m_name = text; num++; } } if (!string.IsNullOrEmpty(val.m_description)) { val.m_description = Tr(val.m_description); } } } ZNetScene instance2 = ZNetScene.instance; if ((Object)(object)instance2 != (Object)null && instance2.m_prefabs != null) { foreach (GameObject prefab in instance2.m_prefabs) { if ((Object)(object)prefab == (Object)null) { continue; } CraftingStation component2 = prefab.GetComponent<CraftingStation>(); if ((Object)(object)component2 != (Object)null && !string.IsNullOrEmpty(component2.m_name)) { string text2 = TrName(component2.m_name); if (text2 != component2.m_name) { component2.m_name = text2; num++; } } Piece component3 = prefab.GetComponent<Piece>(); if ((Object)(object)component3 != (Object)null && !string.IsNullOrEmpty(component3.m_name)) { string text3 = TrName(component3.m_name); if (text3 != component3.m_name) { component3.m_name = text3; num++; } if (!string.IsNullOrEmpty(component3.m_description)) { component3.m_description = Tr(component3.m_description); } } } } Diag("rename pass: " + num + " display name(s) translated (items=" + (((Object)(object)instance != (Object)null && instance.m_items != null) ? instance.m_items.Count : 0) + ")"); ApplyScale("MF_Lobster_T1", _lobsterSmall.Value); ApplyScale("MF_Lobster_T2", _lobsterMedium.Value); ApplyScale("MF_Lobster_T3", _lobsterLarge.Value); ApplyScale("MF_Crab_T1", _crabSmall.Value); ApplyScale("MF_Crab_T2", _crabMedium.Value); ApplyScale("MF_Crab_T3", _crabLarge.Value); string[] array = new string[5] { "Lobster", "Crab", "Mackerel", "Haddock", "Pollack" }; foreach (string text4 in array) { for (int j = 1; j <= 3; j++) { AddAttachPoint("MF_" + text4 + "_T" + j); } } } catch (Exception ex) { Diag("rename pass FAILED: " + ex); Log.LogWarning((object)("[CF-CN] rename pass failed: " + ex.Message)); } } private static void AddAttachPoint(string prefabName) { //IL_006a: 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_008b: 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) GameObject val = FindPrefab(prefabName); if ((Object)(object)val == (Object)null || !Attached.Add(((Object)val).GetInstanceID())) { return; } Transform transform = val.transform; if (!((Object)(object)transform.Find("attach") != (Object)null)) { Transform val2 = transform.Find("visual"); if ((Object)(object)val2 == (Object)null) { Diag("attach: no 'visual' child in " + prefabName); return; } Transform transform2 = new GameObject("attach").transform; transform2.SetParent(transform, false); transform2.localPosition = val2.localPosition; transform2.localRotation = val2.localRotation; transform2.localScale = Vector3.one; val2.SetParent(transform2, true); Diag("attach: point added to " + prefabName); } } private static void ApplyScale(string prefabName, float multiplier) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) if (Mathf.Approximately(multiplier, 1f)) { return; } GameObject val = FindPrefab(prefabName); if ((Object)(object)val == (Object)null) { Diag("scale: prefab not found " + prefabName); } else if (Scaled.Add(((Object)val).GetInstanceID())) { Transform val2 = FindDeep(val.transform, "visual"); if ((Object)(object)val2 == (Object)null) { Diag("scale: no 'visual' child in " + prefabName); return; } val2.localScale *= multiplier; Diag("scale: " + prefabName + " x" + multiplier + " -> " + ((object)val2.localScale/*cast due to .constrained prefix*/).ToString()); } } private static GameObject FindPrefab(string name) { GameObject val = null; ObjectDB instance = ObjectDB.instance; if ((Object)(object)instance != (Object)null && instance.m_items != null) { val = instance.m_items.Find((GameObject g) => (Object)(object)g != (Object)null && ((Object)g).name == name); } if ((Object)(object)val != (Object)null) { return val; } ZNetScene instance2 = ZNetScene.instance; if ((Object)(object)instance2 != (Object)null && instance2.m_prefabs != null) { val = instance2.m_prefabs.Find((GameObject g) => (Object)(object)g != (Object)null && ((Object)g).name == name); } return val; } private static Transform FindDeep(Transform root, string name) { if ((Object)(object)root == (Object)null) { return null; } if (((Object)root).name == name) { return root; } for (int i = 0; i < root.childCount; i++) { Transform val = FindDeep(root.GetChild(i), name); if ((Object)(object)val != (Object)null) { return val; } } return null; } internal static string TrName(string s) { if (string.IsNullOrEmpty(s)) { return s; } if (Translations.Names.TryGetValue(s, out var value)) { return value; } string text = s.Trim(); if (text.Length == 0) { return s; } if (text.EndsWith(" fillet", StringComparison.OrdinalIgnoreCase)) { string text2 = FishNoun(text.Substring(0, text.Length - " fillet".Length)); if (text2 != null) { return text2 + "片"; } } string text3 = null; string noun = text; string[] array = new string[4] { "Small ", "Medium ", "Large ", "Giant " }; foreach (string text4 in array) { if (text.StartsWith(text4, StringComparison.OrdinalIgnoreCase)) { text3 = text4.Trim(); noun = text.Substring(text4.Length); break; } } string text5 = FishNoun(noun); if (text5 == null) { return s; } string text6 = null; switch (text3) { case "Small": text6 = "小"; break; case "Medium": text6 = "中"; break; case "Large": text6 = "大"; break; case "Giant": text6 = "巨型"; break; } if (text6 == null) { return text5; } return text6 + text5; } private static string FishNoun(string noun) { return noun.ToLowerInvariant() switch { "crab" => "蟹", "lobster" => "龙虾", "mackerel" => "鲭鱼", "haddock" => "黑线鳕", "pollack" => "绿鳕", _ => null, }; } internal static string Tr(string s) { if (string.IsNullOrEmpty(s)) { return s; } if (Translations.Text.TryGetValue(s, out var value)) { return value; } foreach (KeyValuePair<string, string> item in Ordered) { if (s.IndexOf(item.Key, StringComparison.Ordinal) >= 0) { s = s.Replace(item.Key, item.Value); } } return s; } } internal static class Translations { public static readonly Dictionary<string, string> Names = new Dictionary<string, string> { { "Boat hook", "船钩" }, { "Gill net", "刺网" }, { "Lobster pot", "龙虾笼" }, { "Fish box", "鱼箱" }, { "Preparation table", "清理台" }, { "Net buoy", "网浮标" }, { "Lobster pot buoy", "笼浮标" }, { "Fishing buoy", "钓鱼浮标" }, { "Mackerel", "鲭鱼" }, { "Haddock", "黑线鳕" }, { "Pollack", "绿鳕" }, { "Roasted mackerel", "烤鲭鱼" }, { "Roasted haddock", "烤黑线鳕" }, { "Roasted pollack", "烤绿鳕" }, { "Raw crab claws", "生蟹钳" }, { "Boiled crab claws", "煮蟹钳" }, { "Boiled lobster", "煮龙虾" }, { "Lobster", "龙虾" }, { "Crab", "蟹" }, { "Coastal crab", "海岸蟹" }, { "Large coastal crab", "大海岸蟹" }, { "Giant coastal crab", "巨型海岸蟹" }, { "Coastal crab swarm", "蟹群" }, { "Seabed lobster", "海底龙虾" }, { "Seabed crab", "海底蟹" } }; public static readonly Dictionary<string, string> Text = new Dictionary<string, string> { { "Too big for your pack: you carry it in your arms, and can set it down on your boat, on the ground or in a cart. Bait it, then throw it over the side in deep water.", "太大装不进背包:只能抱在手里,可以放在船上、地上或推车里。先上饵,再到深水里甩过船舷。" }, { "Too big for your pack: you carry it in your arms, and can set it down on your boat, on the ground or in a cart. From your boat, throw the first buoy, sail away while the net pays out, then drop the end buoy.", "太大装不进背包:只能抱在手里,可以放在船上、地上或推车里。从船上扔出第一个浮标,开船把网放出去,再扔末端浮标。" }, { "Too big for your pack: you carry it in your arms, and can set it down on your boat, on the ground or in a cart.", "太大装不进背包:只能抱在手里,可以放在船上、地上或推车里。" }, { "Too big for your pack: you carry it in your arms, and can set it down on your boat, on the ground or in a cart. Keeps your catch on deck.", "太大装不进背包:只能抱在手里,可以放在船上、地上或推车里。用来把渔获留在甲板上。" }, { "Equip it to reach and pull in buoys from the boat. With it equipped, Shift+E lays it down on the deck or the ground.", "装备它才能从船上够到并拉起浮标。装备时按 Shift+E 可以把它放在甲板或地上。" }, { "Marks gear in the water. Used to make pots and nets.", "标记水里的渔具。也用于制作龙虾笼和刺网。" }, { "Gut and clean whole fish into fillets, and crack crabs for their claws.", "把整鱼剖成鱼片,敲开螃蟹取蟹钳。" }, { "A live crab. Crack it at a preparation table for its claws.", "一只活蟹。在清理台上敲开取蟹钳。" }, { "A live lobster. Boil it in a cauldron.", "一只活龙虾。放进大锅煮。" }, { "A whole boiled lobster. A real feast.", "整只煮龙虾。一顿真正的盛宴。" }, { "A whole mackerel. Clean it at a preparation table.", "整条鲭鱼。在清理台上清理。" }, { "A whole haddock. Clean it at a preparation table.", "整条黑线鳕。在清理台上清理。" }, { "A whole pollack. Clean it at a preparation table.", "整条绿鳕。在清理台上清理。" }, { "Raw fillet. Cook it on a cooking station.", "生鱼片。在烹饪站烤。" }, { "Roasted over an open flame.", "明火烤制。" }, { "Oily and rich, straight off the fire.", "油润肥美,刚下火。" }, { "Sweet, succulent claw meat.", "鲜甜的蟹钳肉。" }, { "Firm white flakes.", "紧实的白色鱼片。" }, { "Cook them in a cauldron.", "放进大锅煮。" }, { "\n<color=#aaaaaa>Equip a boat hook to haul it in</color>", "\n<color=#aaaaaa>装备船钩才能把它拉上来</color>" }, { "\n<color=#aaaaaa>No bait - use bait on it from your hotbar</color>", "\n<color=#aaaaaa>没放饵——把饵放到快捷栏后对着它按数字键</color>" }, { "\n<color=#aaaaaa>In use</color>", "\n<color=#aaaaaa>使用中</color>" }, { "\n<color=#aaaaaa>Left half-hauled</color>", "\n<color=#aaaaaa>拉到一半</color>" }, { "\n<color=#aaaaaa>Left half-way</color>", "\n<color=#aaaaaa>放到一半</color>" }, { "\n<color=#aaaaaa>Paying out - sail away from the first buoy</color>", "\n<color=#aaaaaa>正在放网——开离第一个浮标</color>" }, { "\n<color=#aaaaaa>Soaking for ", "\n<color=#aaaaaa>已泡 " }, { "\n<color=#aaaaaa>Baited (", "\n<color=#aaaaaa>已上饵(" }, { "\nCatch: ", "\n渔获: " }, { "\nHold ", "\n按住 " }, { "Hauling the pot", "正在拉龙虾笼" }, { "Hauling the net", "正在拉刺网" }, { "Let go", "松手" }, { "Pull the net back in", "把网收回" }, { "Lay the boat hook on the deck", "把船钩放到甲板" }, { "Lay the boat hook down", "把船钩放下" }, { "Put it down - on the deck, the ground or in a cart", "放下——甲板、地面或推车里" }, { "Face where you look while walking", "行走时面向镜头" }, { "Net paid out: ", "网已放出: " }, { "Sail away from the first buoy to pay the net out, then press Shift+E to drop the end buoy", "开离第一个浮标把网放出去,然后按 Shift+E 扔下末端浮标" }, { "Aim and throw the first buoy", "瞄准并扔出第一个浮标" }, { "Aim the buoy at open water", "把浮标瞄准开阔水面" }, { "Aim past the side of the boat", "瞄准船舷外侧" }, { "Aim at the floor of the boat.", "瞄准船底。" }, { "Net set: ", "网已布好: " }, { "Come back later with a boat hook.", "稍后带船钩回来收。" }, { "Pot away. Come back later with a boat hook to haul it.", "笼子已下水。稍后带船钩回来拉它。" }, { "Hook the buoy and haul", "勾住浮标往上拉" }, { "Haul it from a boat.", "从船上把它拉上来。" }, { "Take catch", "取渔获" }, { "Sort catch into fish box", "把渔获分进鱼箱" }, { "Pick up", "拾起" }, { "Throw overboard", "扔出船外" }, { "Let it back down", "放回去" }, { "You need a boat hook equipped to reach the buoy.", "需要装备船钩才能够到浮标。" }, { "Too far to hook the buoy (", "离浮标太远(" }, { "Too far to hook - get within ", "离得太远,靠近到 " }, { "You let go - the pot sinks back down.", "你松手了——笼子又沉了回去。" }, { "You let go - the net drifts back out.", "你松手了——网又飘了回去。" }, { "The pot came up empty. Leave it down longer next time.", "笼子拉上来是空的。下次多泡一会儿。" }, { "The net came up empty. Leave it longer next time.", "网上来是空的。下次多放一会儿。" }, { "The net was left half-way; it's been reset.", "网上次放到一半,已重置。" }, { "The pot was left half-hauled; it's back on the seabed.", "笼子拉到一半就放下了,已回到海底。" }, { "Too tired - catch your breath", "太累了——先缓口气" }, { "Something's in the way there", "那里有东西挡着" }, { "There's something in the way.", "有东西挡着。" }, { "Not in the water.", "不在水里。" }, { "Too shallow there (", "那里太浅(" }, { "Too strong", "太猛了" }, { "Too close to shore - sail further out", "离岸太近——再往外开" }, { "Slow the boat down first.", "先把船速降下来。" }, { "Face the water to throw it over the side.", "面向水面才能甩出船舷。" }, { "Put the pot on your boat and stand on the boat to throw it.", "把笼子放到船上,站在船上才能扔。" }, { "Put the net on your boat and stand on the boat to set it.", "把网放到船上,站在船上才能布网。" }, { "Bait the pot first: use raw fish, entrails or meat on it from your hotbar.", "先给笼子上饵:把生鱼、内脏或肉放到快捷栏,对着笼子按数字键。" }, { "That's no good as bait. Try raw fish, entrails or meat.", "这个不能当饵。用生鱼、内脏或肉。" }, { "The pot is already baited.", "笼子已经上过饵了。" }, { "Baited the pot (", "已给龙虾笼上饵(" }, { "Catch sorted into the fish box.", "渔获已装进鱼箱。" }, { "Inventory full - dropped at your feet.", "背包满了——掉在你脚边。" }, { "No room in your inventory.", "背包没空间。" }, { "No room for the fillets.", "装不下鱼片。" }, { "Bring whole fish or crabs to clean.", "带整鱼或螃蟹来清理。" }, { "You can only clean whole fish and crabs here.", "这里只能清理整鱼和螃蟹。" }, { "Clean a fish (hold to keep going)", "清理一条鱼(按住继续)" }, { "Clean a specific fish from your hotbar", "清理快捷栏里指定的鱼" }, { "The fish box is full.", "鱼箱满了。" }, { "Empty the fish box first.", "先把鱼箱清空。" }, { "The fish box isn't ready.", "鱼箱还没准备好。" }, { "Someone has the fish box open.", "有人正在打开这个鱼箱。" }, { "You're busy.", "你正忙着。" }, { "Put down what you're carrying first.", "先把手里的东西放下。" }, { "Put the fish box down first.", "先把鱼箱放下。" }, { "The cart is full.", "推车满了。" }, { "Someone is using that cart.", "有人正在用那辆推车。" }, { "Someone is using the ", "有人正在使用" }, { "Too far - move closer to where you want to put it.", "太远了——靠近要放的位置。" }, { "That's too steep.", "那里太陡了。" }, { "Couldn't put the boat hook down.", "没法把船钩放下。" }, { "Laid the boat hook down.", "船钩已放下。" }, { "Laid the boat hook on the deck.", "船钩已放在甲板上。" }, { "Picked up the boat hook.", "拿起了船钩。" }, { "You pulled the net back aboard.", "你把网收回了船上。" }, { "You put the buoy back.", "你收回了浮标。" }, { "You left the boat - the net was pulled back aboard.", "你离开了船——网已收回船上。" }, { "You can only carry one at a time - the ", "一次只能搬一件——那" }, { "You can't carry that right now.", "现在不能搬那个。" }, { "Look at the deck or the ground where you want to put it.", "看着要放下位置的甲板或地面。" }, { "Carrying the ", "正在搬运" }, { "Coastal crab", "海岸蟹" }, { "Large coastal crab", "大海岸蟹" }, { "Giant coastal crab", "巨型海岸蟹" }, { "Coastal crab swarm", "蟹群" }, { "Lobster pot", "龙虾笼" }, { "Gill net", "刺网" }, { "Boat hook", "船钩" }, { "Fish box", "鱼箱" }, { "Carry", "搬起" }, { "Open", "打开" }, { "No bait - use bait on it from your hotbar", "没放饵——把饵放到快捷栏后对着它按数字键" }, { "Equip a boat hook to haul it in", "装备船钩才能把它拉上来" }, { "Carried by ", "由" }, { "In use", "使用中" }, { "Left half-hauled", "拉到一半" }, { "Left half-way", "放到一半" }, { "Paying out - sail away from the first buoy", "正在放网——开离第一个浮标" }, { "Catch: ", "渔获: " }, { "Baited (", "已上饵(" }, { "Soaking for ", "已泡 " }, { " min</color>", " 分钟</color>" }, { " m of it.", " 米以内。" } }; } }