Beispiel #1
0
        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));
                    }
                }
            }
        }
Beispiel #2
0
            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);
                    }
                }
            }