private void Subscribe(BaseNetworkable networkable) { if (this.ListPlayersInZona.Count != 0) { for (var i1 = 0; i1 < this.ListPlayersInZona.Count; i1++) { if (networkable.ListViewToMe.Contains(this.ListPlayersInZona[i1]) == false && this.ListPlayersInZona[i1] != networkable) { networkable.ListViewToMe.Add(this.ListPlayersInZona[i1]); } } networkable.SendNetworkUpdate(new SendInfo(this.ListPlayersInZona.ToConnectionsList())); } if (networkable is BasePlayer player && player.IsConnected) { for (var i1 = 0; i1 < this.ListNetworkablesInZona.Count; i1++) { if (this.ListNetworkablesInZona[i1].ListViewToMe.Contains(player) == false) { this.ListNetworkablesInZona[i1].ListViewToMe.Add(player); this.ListNetworkablesInZona[i1].SendNetworkUpdate(new SendInfo(player.Network.NetConnection)); } } } }
void Update() { if (input.WasJustPressed(BUTTON.USE)) { if (Time.realtimeSinceStartup - TimeSincePressed > 0.1) { TimeSincePressed = Time.realtimeSinceStartup; if (target != null) { if (TargetPlayer) { GodList.Remove(TargetPlayer as MonoBehaviour); } target = null; TargetPlayer = null; } else { RaycastHit hit; Vector3 raypos = transform.position; raypos.y++; if (Physics.Raycast(new Ray(raypos, Quaternion.Euler(input.current.aimAngles) * Vector3.forward), out hit, MaxDistance) && hit.transform != transform) { target = hit.transform.GetComponentInParent <BaseNetworkable>(); if (target) { distance = Vector3.Distance(transform.position, target.transform.position); TargetPlayer = target.GetComponent <BasePlayer>(); if (TargetPlayer) { GodList.Add(TargetPlayer as MonoBehaviour); } } } } } } else if (input.WasJustPressed(BUTTON.RELOAD)) { if (Time.realtimeSinceStartup - TimeSincePressed > 0.1) { TimeSincePressed = Time.realtimeSinceStartup; IsRotate = !IsRotate; } } if (target) { if (input.IsDown(BUTTON.PREVIOUS)) { distance++; if (distance > MaxDistance) { distance = MaxDistance; } } else if (input.IsDown(BUTTON.NEXT)) { distance--; if (distance < MinDistance) { distance = MinDistance; } } target.transform.position = Vector3.Lerp(target.transform.position, transform.position + Quaternion.Euler(input.current.aimAngles) * Vector3.forward * distance, Time.deltaTime * speed); if (IsRotate) { target.transform.rotation = Quaternion.Euler(input.current.aimAngles * RotateSpeed); } if (TargetPlayer != null && !TargetPlayer.IsSleeping()) { TargetPlayer.ClientRPC(null, TargetPlayer, "ForcePositionTo", new object[] { target.transform.position }); } else { target.SendNetworkUpdate(BasePlayer.NetworkQueue.UpdateDistance); } } }