From 6662fe9aed6c7120569486e9566eb8af7a769291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Mon, 28 Sep 2026 02:32:57 +0800 Subject: [PATCH] 1 --- .../Characters/Monster/MonsterMoveLine.cs | 33 ++++++++++++++++--- .../Game/XJMH/GameMoveLine/新星际迷航路线.txt | 4 +-- .../aa/UI/Game/GameMainPanel_FishBase.cs | 13 ++++++-- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/Assets/MyGame/Scripts/Characters/Monster/MonsterMoveLine.cs b/Assets/MyGame/Scripts/Characters/Monster/MonsterMoveLine.cs index 3bd4914d2..5ca823adf 100644 --- a/Assets/MyGame/Scripts/Characters/Monster/MonsterMoveLine.cs +++ b/Assets/MyGame/Scripts/Characters/Monster/MonsterMoveLine.cs @@ -7,6 +7,7 @@ using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using System; +using System.Globalization; [Serializable] public class MonsterMoveLine { @@ -60,9 +61,17 @@ public class MonsterMoveLine List points = new List(); for (int i = 1; i < parts.Length; i++) { - points.Add(ParseVector(parts[i])); + if (string.IsNullOrWhiteSpace(parts[i])) + continue; + // ⭐ 单点格式错误只跳过该点并告警,不能让整条路线(乃至进房加载流程)中断 + if (TryParseVector(parts[i], out var p)) + points.Add(p); + else + Debug.LogWarning($"[MonsterMoveLine] 坐标格式非法已跳过: '{parts[i]}'({handle.Result.name} 曲线 {curve.name})"); } + if (points.Count == 0) continue; + curve.start = points[0]; if (points.Count > 1) curve.end = points[points.Count - 1]; @@ -189,7 +198,17 @@ public class MonsterMoveLine for (int i = 1; i < parts.Length; i++) { if (!string.IsNullOrWhiteSpace(parts[i])) - points.Add(ParseVector(parts[i])); + { + // ⭐ 单点格式错误只跳过该点并告警,不能让整条路线(乃至进房加载流程)中断 + if (TryParseVector(parts[i], out var p)) + { + points.Add(p); + } + else + { + Debug.LogWarning($"[MonsterMoveLine] 坐标格式非法已跳过: '{parts[i]}'({text.name} 曲线 {curve.name})"); + } + } } if (points.Count == 0) @@ -244,10 +263,16 @@ public class MonsterMoveLine _curveKnotArrays.Clear(); } - private static Vector2 ParseVector(string s) + private static bool TryParseVector(string s, out Vector2 v) { + v = default; var xy = s.Split(','); - return new Vector2(float.Parse(xy[0]), float.Parse(xy[1])); + if (xy.Length < 2) return false; + // ⭐ 固定用 InvariantCulture:曲线文件是 "x,y" 机器格式,不能受设备区域的小数点符号影响 + if (!float.TryParse(xy[0], NumberStyles.Float, CultureInfo.InvariantCulture, out float x)) return false; + if (!float.TryParse(xy[1], NumberStyles.Float, CultureInfo.InvariantCulture, out float y)) return false; + v = new Vector2(x, y); + return true; } public BezierCurveData bezierCurveData; diff --git a/Assets/MyGame/aa/Game/XJMH/GameMoveLine/新星际迷航路线.txt b/Assets/MyGame/aa/Game/XJMH/GameMoveLine/新星际迷航路线.txt index af8ed2be3..037fc557a 100644 --- a/Assets/MyGame/aa/Game/XJMH/GameMoveLine/新星际迷航路线.txt +++ b/Assets/MyGame/aa/Game/XJMH/GameMoveLine/新星际迷航路线.txt @@ -1,4 +1,4 @@ -小丑扑克1;-555.8911,862.1623;-605.461,603.6906;-573.5946,359.3818;-481.53622,157.5615;-308.04156,-33.636723;-88.517685,-125.695114;116.843346,-182.34644;258.47165,-210.6721;396.55923,-221.29422;531.10614,-217.75351;658.5716,-214.2128;747.0893,-210.6721;846.2291,-203.59068;927.66534,-203.59068;1023.26447,-196.50926;1140.1078,-185.88715;1359.6317,-164.6429 +小丑扑克1;-555.8911,862.1623;-605.461,603.6906;-573.5946,359.3818;-481.53622,157.5615;-308.04156,-33.636723;-88.517685,-125.695114;116.843346,-182.34644;258.47165,-210.6721;396.55923,-221.29422;531.10614,-217.75351;658.5716,-214.2128;747.0893,-210.6721;846.2291,-203.59068;927.66534,-203.59068;1023.26447,-196.50926;1140.1078,-185.88715;1359.6317,-164.6429 小丑扑克2;697.5194,915.2729;740.0079,621.39417;672.73444,316.8933;393.01852,115.073;240.76811,23.014599;131.00618,-37.17743;-3.5407076,-83.20663;-120.384056,-118.6137;-251.39023,-150.48007;-364.69287,-168.18361;-467.37338,-171.72432;-591.29816,-175.26503;-672.73444,-171.72432;-757.7114,-157.5615;-839.1477,-132.77654;-952.4503,-97.36945;-1055.1309,-65.50309;-1154.2706,-30.096014;-1278.1954,5.3110614 小丑扑克3;-1304.3854,-62.807915;-1053.1538,-58.321632;-857.65283,-59.476074;-674.9596,-56.866173;-490.96136,-54.25627;-310.87802,-52.951317;-139.92928,-46.42655;-36.838074,-49.036453;64.94818,-45.121597;168.03937,-41.20674;269.8256,-38.596832;345.51282,-37.291878;401.62573,-35.98693;456.43372,-35.98693;545.1705,-34.681976;623.4676,-32.072075;701.7647,-32.072075;786.58655,-28.157219;871.40845,-29.462166;982.32935,-30.76712;1076.2859,-33.37702;1183.292,-34.681976;1352.9357,-33.37702 黑洞飞船1;-407.18137,876.32513;-410.72208,713.4526;-414.2628,554.1207;-421.3442,377.08536;-428.4256,242.53847;-435.50702,107.99158;-449.66986,-12.392476;-308.04156,-19.473892;-166.41325,-19.473892;-67.273445,-12.392476;35.407074,-15.933184;131.00618,-8.8517685;201.82033,-8.8517685;276.1752,-5.3110614;350.53006,-5.3110614;428.4256,-5.3110614;509.86188,-5.3110614;566.5132,-1.7703538;612.5424,1.7703538;679.81586,5.3110614;729.38574,5.3110614;775.415,8.8517685;832.0663,8.8517685;899.3397,8.8517685;963.07245,8.8517685;1040.968,12.392476;1125.945,1.7703538;1218.0034,5.3110614;1295.8989,1.7703538;1359.6317,1.7703538 @@ -6,7 +6,7 @@ 黑洞飞船3;-1302.9803,-423.11456;-1086.9972,-370.00394;-909.96185,-313.35263;-736.46716,-242.53847;-577.1353,-182.34644;-435.50702,-132.77654;-311.58228,-86.74734;-219.52386,-44.258842;-123.92477,-1.7703538;-21.244246,40.718136;84.97698,93.82875;173.49467,132.77654;262.01236,178.80573;368.23358,214.2128;449.66986,256.7013;524.0247,288.56766;605.461,323.97473;701.0601,359.3818;814.36273,416.03314;934.74677,465.60303;1033.8866,518.7137;1218.0034,621.39417;1288.8175,663.8827 弹药箱1;-1281.7361,-107.99158;-1104.7008,-104.450874;-955.991,-107.99158;-821.44415,-111.53229;-701.0601,-104.450874;-570.0539,-100.910164;-396.55923,-90.28804;-247.84953,-83.20663;-138.0876,-86.74734;-24.784952,-86.74734;56.65132,-79.66592;162.87254,-83.20663;251.39023,-76.12521;332.8265,-76.12521;417.8035,-69.0438;509.86188,-69.0438;609.0017,-69.0438;711.6822,-69.0438;789.57776,-69.0438;931.20605,-69.0438;1065.7529,-72.5845;1179.0557,-72.5845;1356.091,-72.5845 弹药箱2;1349.0095,-83.20663;1221.5441,-86.74734;1072.8344,-90.28804;955.991,-90.28804;800.1999,-97.36945;630.246,-86.74734;467.37338,-86.74734;378.8557,-86.74734;283.2566,-86.74734;166.41325,-90.28804;49.569904,-93.82875;-74.35486,-86.74734;-169.95396,-83.20663;-247.84953,-83.20663;-361.15216,-83.20663;-456.75128,-83.20663;-548.8097,-83.20663;-679.81586,-86.74734;-757.7114,-93.82875;-849.76984,-90.28804;-987.8574,-93.82875;-1189.6777,-97.36945;-1292.3583,-97.36945 -弹药箱3;9-1210.922,844.45874;-1200.2998,632.0163;-1058.6715,444.3588;-885.1769,334.59686;-701.0601,242.53847;-516.9433,164.6429;-339.90793,111.53229;-159.33183,58.421673;14.16283,15.933184;148.70972,-19.473892;269.09378,-65.50309;364.69287,-100.910164;453.21057,-132.77654;541.7283,-164.6429;637.32733,-192.96857;736.46716,-221.29422;803.7406,-235.45705;924.1247,-260.242;1023.26447,-281.48624;1157.8114,-309.81192;1306.5211,-334.59686;1373.7946,-345.219 +弹药箱3;-1210.922,844.45874;-1200.2998,632.0163;-1058.6715,444.3588;-885.1769,334.59686;-701.0601,242.53847;-516.9433,164.6429;-339.90793,111.53229;-159.33183,58.421673;14.16283,15.933184;148.70972,-19.473892;269.09378,-65.50309;364.69287,-100.910164;453.21057,-132.77654;541.7283,-164.6429;637.32733,-192.96857;736.46716,-221.29422;803.7406,-235.45705;924.1247,-260.242;1023.26447,-281.48624;1157.8114,-309.81192;1306.5211,-334.59686;1373.7946,-345.219 爆裂金鲨1;-1278.1954,5.3110614;-1118.8635,5.3110614;-973.6946,1.7703538;-867.4733,1.7703538;-782.49634,1.7703538;-683.35657,-1.7703538;-552.3504,-1.7703538;-446.12915,-1.7703538;-346.98935,1.7703538;-244.30882,1.7703538;-131.00618,5.3110614;0,8.8517685;116.843346,5.3110614;233.68669,5.3110614;332.8265,5.3110614;424.88492,5.3110614;516.9433,5.3110614;619.62384,5.3110614;704.60077,12.392476;810.822,8.8517685;899.3397,8.8517685;1023.26447,8.8517685;1214.4626,8.8517685;1366.7131,8.8517685 爆裂金鲨2;1377.3352,-93.82875;1182.5963,-97.36945;1062.2123,-97.36945;924.1247,-97.36945;732.92645,-104.450874;626.70526,-93.82875;481.53622,-93.82875;311.58228,-97.36945;184.11679,-97.36945;53.110615,-93.82875;-131.00618,-93.82875;-254.93094,-90.28804;-375.315,-93.82875;-509.86188,-86.74734;-658.5716,-86.74734;-793.11847,-83.20663;-938.2875,-90.28804;-1076.3751,-90.28804;-1267.5732,-97.36945 爆裂金鲨3;-1288.8175,-104.450874;-1111.7822,-111.53229;-955.991,-107.99158;-842.6884,-107.99158;-725.84503,-107.99158;-584.21674,-107.99158;-449.66986,-107.99158;-322.20438,-111.53229;-208.90175,-111.53229;-77.89557,-104.450874;3.5407076,-100.910164;159.33183,-100.910164;226.60529,-100.910164;325.7451,-100.910164;442.58844,-100.910164;545.269,-107.99158;669.1937,-100.910164;754.1707,-100.910164;860.3919,-97.36945;977.2353,-97.36945;1048.0494,-97.36945;1133.0264,-90.28804;1228.6255,-86.74734;1334.8468,-86.74734;1391.498,-86.74734 diff --git a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs index 46369e282..9f40cb7a4 100644 --- a/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs +++ b/Assets/MyGame/aa/UI/Game/GameMainPanel_FishBase.cs @@ -3810,22 +3810,28 @@ public class GameMainPanel_FishBase : GameMainPanel_Base // 这里不再插手,否则"死一条鱼会导致三个锁定目标全部重新寻找" if (currSitData.tripleLockTargets.Count > 0) return; - /* ==================== 立即升级版本(2026-09-28 注释保留,方便回退) ==================== - // 目标活着时也做"优先级升级":场上出现更高优先级的鱼 → 立即抢过来锁定 + // ⭐⭐⭐ 换目标规则(当前使用:立即升级版): + // ① 手动锁定 → 玩家自己点的鱼,离场前一直跟,死了才换 + // ② 自动锁定,路径在可锁范围(0.1~0.9) → 保持锁定; + // 但场上出现严格更高优先级的鱼时立即切换过去 + // ③ 自动锁定,路径离场(超出 0.1~0.9) 或 被 SuoDing 取消勾选 → 落到下面重新找目标 if (currSitData.isLock && currSitData.monCotl_Lock != null && currSitData.monCotl_Lock.gameObject.activeInHierarchy) { + // 手动锁定:死了才转换(玩家自己点的鱼,不受白名单限制) if (currSitData.isManualLock) return; if (IsFishPathLockable(currSitData.monCotl_Lock) && IsFishAllowedBySuoDing(currSitData.monCotl_Lock)) { + // 当前目标仍有效且在白名单内 → 没有更高优先级目标就保持锁定,有就落到下面切换 if (!HasHigherPriorityTarget(currSitData.monCotl_Lock)) return; } + // 当前目标离场(超出 0.1~0.9) 或 被取消勾选(不在白名单) → 落到下面重新找目标 } - ==================== 立即升级版本结束 ==================== */ + /* ==================== 不立即抢版本(2026-09-28 注释保留,方便回退) ==================== // ⭐⭐⭐ 换目标规则: // ① 手动锁定 → 玩家自己点的鱼,离场前一直跟,死了才换 // ② 自动锁定,路径仍在可锁范围(0.1~0.9) → 保持锁定 @@ -3842,6 +3848,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base return; // 路径离场 / 不在白名单 → 重新找目标 } + ==================== 不立即抢版本结束 ==================== */ // 当前锁定目标已死亡/失效 → 自动找下一个目标 MonsterContral target = FindAutoLockTarget();