1
This commit is contained in:
@@ -3565,6 +3565,21 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
Transform lockTr = ResolveLockTransform(monster, out colliderIndex, true);
|
||||
// ⭐ lockPoint 和 colliderList 全部未激活 → 不锁定这条鱼
|
||||
if (lockTr == null) return;
|
||||
|
||||
// ⭐⭐⭐ 战神 + 三发 + 锁定(散射三个锁定圈):手动点击 = 占主锁位,
|
||||
// 原来的主锁位自动挤到子锁位,子锁位依次后移,最多锁3个
|
||||
if (IsZhanShenTripleMode())
|
||||
{
|
||||
// 已经在锁位上的鱼 → 不重复加
|
||||
if (currSitData.IsFishInTripleSlots(monster.guid)) return;
|
||||
|
||||
currSitData.PushTripleLockSlot(monster, lockTr);
|
||||
currSitData.isManualLock = true;
|
||||
_autoLockActivated = true;
|
||||
SyncLock(currSitData.GetTripleLockGuids(), colliderIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
// ⭐ 标记为手动锁定:不受路径进度(0.1~0.9)限制,鱼离场前一直锁定
|
||||
currSitData.isManualLock = true;
|
||||
currSitData.SetLockTarget(monster, lockTr);
|
||||
@@ -3573,6 +3588,15 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// ⭐ 手动锁定成功 → 激活自动锁定(该鱼死亡后自动转换目标)
|
||||
_autoLockActivated = true;
|
||||
}
|
||||
|
||||
/// <summary>是否处于 战神 + 三发 + 锁定 模式(散射激光 + 3个锁定圈)</summary>
|
||||
private bool IsZhanShenTripleMode()
|
||||
{
|
||||
return currSitData != null
|
||||
&& currSitData.currentZhanShenData != null
|
||||
&& toggle_Three != null && toggle_Three.isOn
|
||||
&& toggle_Lock != null && toggle_Lock.isOn;
|
||||
}
|
||||
private void UpdateLockFX()
|
||||
{
|
||||
|
||||
@@ -3650,36 +3674,42 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
}
|
||||
private void CheckLockTargetValid()
|
||||
{
|
||||
// ⭐⭐⭐ 三发模式:每个锁位独立维护 —— 鱼死了 或 路径离场时,只补那一个锁位,其他锁位不动
|
||||
// ⭐⭐⭐ 三发模式:每个锁位独立维护 —— 鱼死了/路径离场时只补那一个锁位,其他锁位不动。
|
||||
// 补位只尝试一次:补到了就锁上;补不到该锁位转"空置等手动点击"(不再自动补)。
|
||||
// (Count 由 SetTripleLockTargets 建立;HideTripleLockIcons 才清成 0)
|
||||
if (currSitData.tripleLockTargets.Count > 0)
|
||||
{
|
||||
// ⭐ 补齐到3个锁位(三发=最多3个目标):某位暂时没鱼可补就留空占位,下一帧继续尝试
|
||||
while (currSitData.tripleLockTargets.Count < 3)
|
||||
{
|
||||
currSitData.tripleLockTargets.Add(null);
|
||||
currSitData.tripleLockPositions.Add(null);
|
||||
}
|
||||
// ⭐ 固定3个锁位(三发=最多3个目标)
|
||||
currSitData.EnsureTripleLockSlots(3);
|
||||
|
||||
for (int i = currSitData.tripleLockTargets.Count - 1; i >= 0; i--)
|
||||
{
|
||||
var t = currSitData.tripleLockTargets[i];
|
||||
|
||||
// ⭐ 鱼死了(被回收/销毁) → 补这一个锁位
|
||||
if (t == null || !t.gameObject.activeInHierarchy)
|
||||
// ---- 该锁位有鱼:判断是否需要更换 ----
|
||||
if (t != null && t.gameObject.activeInHierarchy)
|
||||
{
|
||||
RefillTripleLockSlot(i);
|
||||
// ⭐ 玩家手动点选的锁位 → 离场前一直跟,死了才换。
|
||||
// 手动身份是跟着鱼走的:被挤到子锁位后依然是手动,不会被自动换掉
|
||||
if (currSitData.IsTripleSlotManual(i)) continue;
|
||||
|
||||
// ⭐ 路径离场(超出 0.1~0.9) 或 被 SuoDing 取消勾选 → 只补这一个锁位
|
||||
if (!IsFishPathLockable(t) || !IsFishAllowedBySuoDing(t))
|
||||
RefillTripleLockSlot(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
// ⭐ 主锁位是玩家手动锁的 → 离场前一直跟,不自动更换
|
||||
if (i == 0 && currSitData.isManualLock) continue;
|
||||
// ---- 该锁位空着 ----
|
||||
// ⭐ "空置等手动点击"状态 → 不再自动补位,必须玩家点击才锁
|
||||
if (currSitData.IsTripleSlotIdle(i)) continue;
|
||||
|
||||
// ⭐ 自动锁定的锁位:路径离场(超出 0.1~0.9) 或 被 SuoDing 取消勾选
|
||||
// → 只补这一个锁位,其他锁位不动
|
||||
if (!IsFishPathLockable(t) || !IsFishAllowedBySuoDing(t))
|
||||
RefillTripleLockSlot(i);
|
||||
// ⭐ 刚打死后重新检测:只尝试这一次,成功就锁上,失败则转成"空置等手动"
|
||||
RefillTripleLockSlot(i);
|
||||
}
|
||||
|
||||
// ⭐ 三个锁位全空 → 暂时不锁定,等玩家手动点击才锁(关掉自动锁定激活标记)
|
||||
if (!currSitData.HasAnyTripleTarget)
|
||||
_autoLockActivated = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4220,13 +4250,23 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
auto = currSitData.IsAutoAttackOn
|
||||
};
|
||||
|
||||
// ⭐ 战神 三发 + 锁定:查找 3 个优先级目标,写入 monsterIDs(FireLaser 分散打三个用)
|
||||
// 正常炮台三合一打主锁目标(monCotl_Lock 已由 SyncLock/SyncBotLock 同步),不需要 monsterIDs
|
||||
// ⭐ 战神 三发 + 锁定:3个锁定目标写入 monsterIDs(FireLaser 分散打三个用)
|
||||
// ⭐ 优先用当前维护的3个锁位(玩家手动点选的目标) → 打哪锁哪
|
||||
// 锁位上没有有效目标时才按优先级现找。正常炮台三合一打主锁目标
|
||||
// (monCotl_Lock 已由 SyncLock/SyncBotLock 同步),不需要 monsterIDs
|
||||
if (isSanShe && isLock && currSitData.currentZhanShenData != null)
|
||||
{
|
||||
var targets = FindFireTargets(3);
|
||||
if (targets.Count > 0)
|
||||
fireData.monsterIDs = targets.Select(t => t.monster.guid).ToList();
|
||||
var lockedGuids = currSitData.GetTripleLockGuids();
|
||||
if (lockedGuids.Count > 0)
|
||||
{
|
||||
fireData.monsterIDs = lockedGuids;
|
||||
}
|
||||
else
|
||||
{
|
||||
var targets = FindFireTargets(3);
|
||||
if (targets.Count > 0)
|
||||
fireData.monsterIDs = targets.Select(t => t.monster.guid).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
SyncGameData sgd = new SyncGameData
|
||||
|
||||
Reference in New Issue
Block a user