1
This commit is contained in:
@@ -4519,6 +4519,25 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
return;
|
||||
}
|
||||
var targetSit = list_Sits[dispPos];
|
||||
|
||||
// ⭐⭐ 战神散射(三发+锁定):发送端每发都带 isSanShe/isSuoDing 和3个激光目标GUID(monsterIDs)
|
||||
// → 其他玩家的座位跟着补齐3个锁位 + 刷新散射标记:3条激光 + 2个散射起点球
|
||||
// (JGFXLeftParent/JGFXRightParent) 一起显示。
|
||||
// ⭐ 这条路是"自动凑满3个目标"时唯一的信号(自动补位/自动凑目标不会走锁定同步),
|
||||
// 只在锁定同步里处理的话,不开手动点鱼别人就看不到散射表现。
|
||||
// ⚠ 只处理别人的座位:本地座位自己的三发锁位由本地锁定系统维护,不能被网络数据覆盖
|
||||
if (targetSit != currSitData && targetSit.currentZhanShenData != null)
|
||||
{
|
||||
bool scatter = data.isSanShe && data.isSuoDing;
|
||||
if (targetSit.isScatterLaserOn != scatter)
|
||||
{
|
||||
targetSit.isScatterLaserOn = scatter;
|
||||
// 退出散射:清掉远端多出来的锁位(主锁保留,仍显示1条激光 + 主锁定圈)
|
||||
if (!scatter) targetSit.HideTripleLockIcons();
|
||||
}
|
||||
if (scatter) ApplyTripleLockSlotsFromGuids(targetSit, data.monsterIDs);
|
||||
}
|
||||
|
||||
// ⭐ 座位镜像:网络角度是"源角度"(发送方下方座位系),按该座位显示位置还原成世界角度
|
||||
FireBullet(targetSit, SeatMirror.SourceAngleToWorld(data.angle, targetSit.IsFlipped),
|
||||
data.isSanShe, data.twoRTruuect, data.isSuoDing, sync.bulletIds, data.monsterIDs, bulletGolds);
|
||||
@@ -4552,21 +4571,67 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
if (dispPos == currSitData.posID) return;
|
||||
|
||||
var data = FrameDataParser.Parse<FrameData_ChangeAutoTarget>(sync.frameData);
|
||||
var sit = list_Sits[dispPos];
|
||||
|
||||
if (data.targetGuid == null)
|
||||
if (data.targetGuid == null || data.targetGuid.Count == 0)
|
||||
{
|
||||
list_Sits[dispPos].ClearLock();
|
||||
sit.ClearLock();
|
||||
return;
|
||||
}
|
||||
|
||||
MonsterContral monster = CreateFishManager.Instance.fishDatas_hashCodekey[data.targetGuid[0]];
|
||||
// ⭐⭐ 战神三发散射:发送端把3个锁位一起同步过来([0]=主锁目标,[1]/[2]=散射目标)。
|
||||
// 以前只取了 [0],远端锁位永远只有1个 → 远端激光只有1条,
|
||||
// 散射左右起点球(JGFXLeftParent/JGFXRightParent)不激活 → 别人的视角看不到两个小球。
|
||||
// 这里按整份列表补齐远端锁位:远端表现与发送端一致(3条激光 + 2个起点球 + 2个额外锁定圈)。
|
||||
// 注:统一用 ResolveLockTransform(colliderList 第一个活跃 → lockPoint → transform),
|
||||
// 网络同步过来的 colliderIndex 不再使用(客户端之间 colliderList 顺序可能不一致)
|
||||
var targets = new List<(MonsterContral monster, Transform hitPos)>();
|
||||
foreach (var guid in data.targetGuid)
|
||||
{
|
||||
if (string.IsNullOrEmpty(guid)) continue;
|
||||
if (!CreateFishManager.Instance.fishDatas_hashCodekey.TryGetValue(guid, out var m) || m == null) continue;
|
||||
targets.Add((m, ResolveLockTransform(m)));
|
||||
}
|
||||
|
||||
// ⭐ 统一用 ResolveLockTransform:colliderList 第一个活跃 → lockPoint → transform
|
||||
// 注:网络同步过来的 colliderIndex 在统一逻辑下不再使用,因为客户端之间
|
||||
// colliderList 顺序可能不一致,统一用"第一个活跃"更稳定
|
||||
Transform hitPos = ResolveLockTransform(monster);
|
||||
if (targets.Count > 1)
|
||||
{
|
||||
sit.SetTripleLockTargets(targets);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 单发锁定:清掉三发锁位(远端不再显示散射起点球/额外激光/额外锁定圈)
|
||||
sit.HideTripleLockIcons();
|
||||
if (targets.Count == 1)
|
||||
sit.SetLockTarget(targets[0].monster, targets[0].hitPos);
|
||||
else
|
||||
sit.ClearLock();
|
||||
}
|
||||
}
|
||||
|
||||
list_Sits[dispPos].SetLockTarget(monster, hitPos);
|
||||
/// <summary>
|
||||
/// ⭐ 按 guid 列表给座位补齐"三发锁位"(远端散射表现用):
|
||||
/// 有效目标>1 → SetTripleLockTargets(3条激光 + 2个散射起点球 + 2个额外锁定圈一起出来);
|
||||
/// 否则清掉三发锁位(该座位按单发显示,主锁不动)。
|
||||
/// ⚠ 只给其他玩家的座位用:本地座位的三发锁位由本地锁定系统维护,绝不能被网络数据覆盖。
|
||||
/// </summary>
|
||||
private void ApplyTripleLockSlotsFromGuids(SitPosData sit, List<string> guids)
|
||||
{
|
||||
var targets = new List<(MonsterContral monster, Transform hitPos)>();
|
||||
if (guids != null)
|
||||
{
|
||||
foreach (var guid in guids)
|
||||
{
|
||||
if (string.IsNullOrEmpty(guid)) continue;
|
||||
if (!CreateFishManager.Instance.fishDatas_hashCodekey.TryGetValue(guid, out var m) || m == null) continue;
|
||||
if (m.isDead || !m.gameObject.activeInHierarchy) continue;
|
||||
targets.Add((m, ResolveLockTransform(m)));
|
||||
}
|
||||
}
|
||||
|
||||
if (targets.Count > 1)
|
||||
sit.SetTripleLockTargets(targets);
|
||||
else
|
||||
sit.HideTripleLockIcons();
|
||||
}
|
||||
|
||||
public void SyncGameData_RendromDieFish(SyncGameData sync)
|
||||
|
||||
Reference in New Issue
Block a user