using UnityEngine; using Unity.Netcode; public class PitZone : NetworkBehaviour { // Индекс ямы. Игрок с таким же индексом — её "хозяин" (защитник). // Победа засчитывается тому, кто зашёл в ЧУЖУЮ яму (pitIndex != его индекс). [SerializeField] private int pitIndex; private void OnTriggerEnter(Collider _other) { if (!IsServer) return; if (RoundManager.Current == null || !RoundManager.Current.IsRoundActive) return; // Клон — засчитываем вход за его ОРИГИНАЛЬНОГО игрока. // Проверять надо ДО PlayerHealth: у клона он тоже есть, // но OwnerClientId клона — это сервер, а не игрок. GhostPlayer _ghost = _other.GetComponentInParent(); if (_ghost != null) { Debug.Log($"[PIT] pit{pitIndex} <- GHOST owner={_ghost.OriginalOwnerId} ghostPos={_ghost.transform.position} colliderPos={_other.transform.position}"); RoundManager.Current.OnPlayerEnteredPit(pitIndex, _ghost.OriginalOwnerId); _ghost.GetComponent().TakeDamage(999); return; } PlayerHealth _playerHealth = _other.GetComponentInParent(); if (_playerHealth == null) return; Debug.Log($"[PIT] pit{pitIndex} <- PLAYER {_playerHealth.OwnerClientId} pos={_playerHealth.transform.position} immune={_playerHealth.IsPitImmune}"); // Только что респавнулся — серверный коллайдер мог не успеть выйти из ямы. // Игнорируем, чтобы не засчитать ложную мгновенную победу. if (_playerHealth.IsPitImmune) { Debug.Log($"[PIT] pit{pitIndex} IGNORED: player {_playerHealth.OwnerClientId} pit-immune"); return; } RoundManager.Current.OnPlayerEnteredPit(pitIndex, _playerHealth.OwnerClientId); _playerHealth.TakeDamage(999); } }