Esempio n. 1
0
    public void OV_ballistics()
    {
        Useable useable  = OptimizationVariables.MainPlayer.equipment.useable;
        bool    isServer = Provider.isServer;

        if (isServer)
        {
            OverrideUtilities.CallOriginal(useable, new object[0]);
        }
        else
        {
            bool flag = Time.realtimeSinceStartup - PlayerLifeUI.hitmarkers[0].lastHit > PlayerUI.HIT_TIME;
            if (flag)
            {
                PlayerLifeUI.hitmarkers[0].image.isVisible = false;
                //PlayerLifeUI.hitmarkers[0].hitCriticalImage.isVisible = false;
                //PlayerLifeUI.hitmarkers[0].hitEntitiyImage.isVisible = false;
            }
            ItemGunAsset itemGunAsset = (ItemGunAsset)OptimizationVariables.MainPlayer.equipment.asset;
            PlayerLook   look         = OptimizationVariables.MainPlayer.look;
            bool         flag2        = itemGunAsset.projectile != null;
            if (!flag2)
            {
                List <BulletInfo> list = (List <BulletInfo>)OV_UseableGun.BulletsField.GetValue(useable);
                bool flag3             = list.Count == 0;
                if (!flag3)
                {
                    RaycastInfo raycastInfo = null;
                    bool        enabled     = RaycastOptions.Enabled;
                    if (enabled)
                    {
                        RaycastUtilities.GenerateRaycast(out raycastInfo);
                    }
                    bool ballistics = Provider.modeConfigData.Gameplay.Ballistics;
                    if (ballistics)
                    {
                        bool flag4 = raycastInfo == null;
                        if (flag4)
                        {
                            bool noAimbotDrop = AimbotOptions.NoAimbotDrop;
                            if (noAimbotDrop)
                            {
                                bool flag5 = AimbotCoroutines.IsAiming && AimbotCoroutines.LockedObject != null;
                                if (flag5)
                                {
                                    Vector3 aimPosition = AimbotCoroutines.GetAimPosition(AimbotCoroutines.LockedObject.transform, "Skull");
                                    Ray     aimRay      = OV_UseableGun.GetAimRay(look.aim.position, aimPosition);
                                    float   maxDistance = (float)VectorUtilities.GetDistance(look.aim.position, aimPosition);
                                    bool    flag6       = !Physics.Raycast(aimRay, out RaycastHit raycastHit, maxDistance, RayMasks.DAMAGE_SERVER);
                                    if (flag6)
                                    {
                                        raycastInfo = RaycastUtilities.GenerateOriginalRaycast(aimRay, itemGunAsset.range, RayMasks.ENEMY);
                                    }
                                }
                            }
                            bool flag7 = WeaponOptions.NoDrop && raycastInfo == null;
                            if (flag7)
                            {
                                for (int i = 0; i < list.Count; i++)
                                {
                                    BulletInfo  bulletInfo = list[i];
                                    Ray         ray        = new Ray(bulletInfo.pos, bulletInfo.dir);
                                    RaycastInfo info       = DamageTool.raycast(ray, itemGunAsset.ballisticTravel, RayMasks.DAMAGE_CLIENT);
                                    bool        flag8      = OV_UseableGun.IsRaycastInvalid(info);
                                    if (flag8)
                                    {
                                        bulletInfo.pos += bulletInfo.dir * itemGunAsset.ballisticTravel;
                                    }
                                    else
                                    {
                                        EPlayerHit newHit = OV_UseableGun.CalcHitMarker(itemGunAsset, ref info);
                                        PlayerUI.hitmark(0, Vector3.zero, false, newHit);
                                        OptimizationVariables.MainPlayer.input.sendRaycast(info, ERaycastInfoUsage.Gun);
                                        bulletInfo.steps = 254;
                                    }
                                }
                                for (int j = list.Count - 1; j >= 0; j--)
                                {
                                    BulletInfo bulletInfo2 = list[j];
                                    BulletInfo bulletInfo3 = bulletInfo2;
                                    bulletInfo3.steps += 1;
                                    bool flag9 = bulletInfo2.steps >= itemGunAsset.ballisticSteps;
                                    if (flag9)
                                    {
                                        list.RemoveAt(j);
                                    }
                                }
                                return;
                            }
                            bool flag10 = raycastInfo == null;
                            if (flag10)
                            {
                                OverrideUtilities.CallOriginal(useable, new object[0]);
                                return;
                            }
                        }
                        for (int k = 0; k < list.Count; k++)
                        {
                            BulletInfo bulletInfo4 = list[k];
                            double     distance    = VectorUtilities.GetDistance(OptimizationVariables.MainPlayer.transform.position, raycastInfo.point);
                            bool       flag11      = bulletInfo4.steps * itemGunAsset.ballisticTravel < distance;
                            if (!flag11)
                            {
                                EPlayerHit newHit2 = OV_UseableGun.CalcHitMarker(itemGunAsset, ref raycastInfo);
                                PlayerUI.hitmark(0, Vector3.zero, false, newHit2);
                                OptimizationVariables.MainPlayer.input.sendRaycast(raycastInfo, ERaycastInfoUsage.Gun);
                                bulletInfo4.steps = 254;
                            }
                        }
                        for (int l = list.Count - 1; l >= 0; l--)
                        {
                            BulletInfo bulletInfo5 = list[l];
                            BulletInfo bulletInfo6 = bulletInfo5;
                            bulletInfo6.steps += 1;
                            bool flag12 = bulletInfo5.steps >= itemGunAsset.ballisticSteps;
                            if (flag12)
                            {
                                list.RemoveAt(l);
                            }
                        }
                    }
                    else
                    {
                        bool flag13 = raycastInfo != null;
                        if (flag13)
                        {
                            for (int m = 0; m < list.Count; m++)
                            {
                                EPlayerHit newHit3 = OV_UseableGun.CalcHitMarker(itemGunAsset, ref raycastInfo);
                                PlayerUI.hitmark(0, Vector3.zero, false, newHit3);
                                OptimizationVariables.MainPlayer.input.sendRaycast(raycastInfo, ERaycastInfoUsage.Gun);
                            }
                            list.Clear();
                        }
                        else
                        {
                            OverrideUtilities.CallOriginal(useable, new object[0]);
                        }
                    }
                }
            }
        }
    }