Пример #1
0
        //Called every tick
        public void Update()
        {
            if (!Global.AimEnabled || Global.AllOff || Global.AimSettings.RageBot || !Global.AimSettings.LegitBot)
            {
                return;
            }

            if (!Provider.isConnected)
            {
                return;
            }

            if (Provider.clients.Count < 1)
            {
                return;
            }

            //Is holding gun
            if (!(Player.player?.equipment?.asset is ItemGunAsset))
            {
                return;
            }

            if (!Input.GetKey(KeyCode.Mouse1))
            {
                return;
            }

            Camera m = Camera.main;

            SteamPlayer targ = null;
            float       maxDist = ((ItemGunAsset)Player.player.equipment.asset).range, bestFov = 300, trgDst = 0f;
            Vector3     position = m.transform.position, forward = m.transform.forward, AimAt = Vector3.zero;

            foreach (SteamPlayer i in Provider.clients)
            {
                if (i.player == Player.player)
                {
                    continue;
                }
                if (i.player.quests.groupID == Player.player.quests.groupID)
                {
                    continue;
                }
                if (i.player.life.isDead)
                {
                    continue;
                }

                float distance = Vector3.Distance(i.player.transform.position, position);
                if (!(distance < maxDist))
                {
                    continue;
                }

                Vector3 wtsp = Drawing.Drawing_Hk.WorldToScreen(i.player.transform.position);

                if (wtsp.z > -8)
                {
                    float fov = Mathf.Abs(Vector2.Distance(new Vector2(wtsp.x, Screen.height - wtsp.y), new Vector2((Screen.width / 2), (Screen.height / 2))));
                    if (fov < bestFov)
                    {
                        bestFov = fov;
                        targ    = i;
                        trgDst  = distance;
                    }
                }
            }

            if (targ == null)
            {
                pPredict.User = null;
                return;
            }

            AimAt = GetHitbox(targ.player.transform, "Skull");

            //Not all players have a skull, or is majorly displaced when prone
            if (AimAt == Vector3.zero || targ.player.stance.prone)
            {
                AimAt = targ.player.transform.position + new Vector3(0, targ.player.look.heightLook / 1.45f, 0);
            }

            if (Global.AimSettings.VisibleCheck)
            {
                RaycastHit hit;
                Physics.Raycast(m.transform.position, AimAt - m.transform.position, out hit, trgDst + 0.35f, RayMasks.DAMAGE_CLIENT);

                if (hit.transform == null || !hit.transform.CompareTag("Enemy"))
                {
                    return;
                }
            }

            //Unity engine will use player sensitivity when we use it's own functions for math calculations
            float save = Player.player.look.sensitivity;

            Player.player.look.sensitivity = Global.AimSettings.AimSpeed;

            //Apply drop calculation if server is using ballistics
            if (Global.AimSettings.DropCalculator && Provider.modeConfigData.Gameplay.Ballistics)
            {
                AimAt.y += DropCalc(AimAt);
            }

            //Get rotation angles, ez bypass to doing math
            Quaternion quaternion  = Quaternion.LookRotation(AimAt - m.transform.position);
            Quaternion quaternion2 = Quaternion.RotateTowards(m.transform.rotation, quaternion, Global.AimSettings.AimSpeed);

            //Reset sensitivty
            Player.player.look.sensitivity = save;

            float xVal = quaternion2.eulerAngles.x;

            if (xVal <= 90f)
            {
                xVal += 90f;
            }
            else if (xVal > 180f)
            {
                xVal -= 270f;
            }

            //Todo: Rotate using camera
            Yaw.SetValue(Player.player.look, quaternion2.eulerAngles.y);
            Pitch.SetValue(Player.player.look, xVal);
        }