Esempio n. 1
0
    protected bool ValidateEyePos(BasePlayer player, Vector3 eyePos)
    {
        bool flag = true;

        if (Vector3Ex.IsNaNOrInfinity(eyePos))
        {
            string shortPrefabName = this.ShortPrefabName;
            AntiHack.Log(player, AntiHackType.EyeHack, "Contains NaN (" + shortPrefabName + ")");
            player.stats.combat.Log(this, "eye_nan");
            flag = false;
        }
        if (ConVar.AntiHack.eye_protection > 0)
        {
            float  num1            = 1f + ConVar.AntiHack.eye_forgiveness;
            double eyeClientframes = (double)ConVar.AntiHack.eye_clientframes;
            float  eyeServerframes = ConVar.AntiHack.eye_serverframes;
            float  num2            = (float)(eyeClientframes / 60.0);
            float  num3            = eyeServerframes * Mathx.Max(Time.get_deltaTime(), Time.get_smoothDeltaTime(), Time.get_fixedDeltaTime());
            float  num4            = (player.desyncTime + num2 + num3) * num1;
            if (ConVar.AntiHack.eye_protection >= 1)
            {
                double  num5           = (double)player.MaxVelocity();
                Vector3 parentVelocity = player.GetParentVelocity();
                double  magnitude      = (double)((Vector3) ref parentVelocity).get_magnitude();
                float   num6           = (float)(num5 + magnitude);
                float   num7           = player.BoundsPadding() + num4 * num6;
                float   num8           = Vector3.Distance(player.eyes.position, eyePos);
                if ((double)num8 > (double)num7)
                {
                    string shortPrefabName = this.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.EyeHack, "Distance (" + shortPrefabName + " on attack with " + (object)num8 + "m > " + (object)num7 + "m)");
                    player.stats.combat.Log(this, "eye_distance");
                    flag = false;
                }
            }
            if (ConVar.AntiHack.eye_protection >= 2)
            {
                Vector3 center   = player.eyes.center;
                Vector3 position = player.eyes.position;
                Vector3 p2       = eyePos;
                if (!GamePhysics.LineOfSight(center, position, p2, 2162688, 0.0f))
                {
                    string shortPrefabName = this.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.EyeHack, "Line of sight (" + shortPrefabName + " on attack) " + (object)center + " " + (object)position + " " + (object)p2);
                    player.stats.combat.Log(this, "eye_los");
                    flag = false;
                }
            }
            if (!flag)
            {
                AntiHack.AddViolation(player, AntiHackType.EyeHack, ConVar.AntiHack.eye_penalty);
            }
        }
        return(flag);
    }
Esempio n. 2
0
    protected bool ValidateEyePos(BasePlayer player, Vector3 eyePos)
    {
        bool flag = true;

        if (eyePos.IsNaNOrInfinity())
        {
            string shortPrefabName = base.ShortPrefabName;
            AntiHack.Log(player, AntiHackType.EyeHack, "Contains NaN (" + shortPrefabName + ")");
            player.stats.combat.Log(this, "eye_nan");
            flag = false;
        }
        if (ConVar.AntiHack.eye_protection > 0)
        {
            float num = 1f + ConVar.AntiHack.eye_forgiveness;
            float eye_clientframes = ConVar.AntiHack.eye_clientframes;
            float eye_serverframes = ConVar.AntiHack.eye_serverframes;
            float num2             = eye_clientframes / 60f;
            float num3             = eye_serverframes * Mathx.Max(UnityEngine.Time.deltaTime, UnityEngine.Time.smoothDeltaTime, UnityEngine.Time.fixedDeltaTime);
            float num4             = (player.desyncTimeClamped + num2 + num3) * num;
            int   layerMask        = (ConVar.AntiHack.eye_terraincheck ? 10551296 : 2162688);
            if (ConVar.AntiHack.eye_protection >= 1)
            {
                float num5 = player.MaxVelocity() + player.GetParentVelocity().magnitude;
                float num6 = player.BoundsPadding() + num4 * num5;
                float num7 = Vector3.Distance(player.eyes.position, eyePos);
                if (num7 > num6)
                {
                    string shortPrefabName2 = base.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.EyeHack, "Distance (" + shortPrefabName2 + " on attack with " + num7 + "m > " + num6 + "m)");
                    player.stats.combat.Log(this, "eye_distance");
                    flag = false;
                }
            }
            if (ConVar.AntiHack.eye_protection >= 2)
            {
                Vector3 center   = player.eyes.center;
                Vector3 position = player.eyes.position;
                if (!GamePhysics.LineOfSight(center, position, eyePos, layerMask))
                {
                    string shortPrefabName3 = base.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.EyeHack, string.Concat("Line of sight (", shortPrefabName3, " on attack) ", center, " ", position, " ", eyePos));
                    player.stats.combat.Log(this, "eye_los");
                    flag = false;
                }
            }
            if (!flag)
            {
                AntiHack.AddViolation(player, AntiHackType.EyeHack, ConVar.AntiHack.eye_penalty);
            }
        }
        return(flag);
    }
Esempio n. 3
0
    protected bool ValidateEyePos(BasePlayer player, Vector3 eyePos)
    {
        bool flag = true;

        if (eyePos.IsNaNOrInfinity())
        {
            string shortPrefabName = base.ShortPrefabName;
            AntiHack.Log(player, AntiHackType.EyeHack, string.Concat("Contains NaN (", shortPrefabName, ")"));
            player.stats.combat.Log(this, "eye_nan");
            flag = false;
        }
        if (ConVar.AntiHack.eye_protection > 0)
        {
            float eyeForgiveness  = 1f + ConVar.AntiHack.eye_forgiveness;
            float eyeClientframes = ConVar.AntiHack.eye_clientframes;
            float eyeServerframes = ConVar.AntiHack.eye_serverframes;
            float single          = eyeClientframes / 60f;
            float single1         = eyeServerframes * Mathx.Max(UnityEngine.Time.deltaTime, UnityEngine.Time.smoothDeltaTime, UnityEngine.Time.fixedDeltaTime);
            float single2         = (player.desyncTime + single + single1) * eyeForgiveness;
            if (ConVar.AntiHack.eye_protection >= 1)
            {
                float single3 = player.MaxVelocity() + player.GetParentVelocity().magnitude;
                float single4 = player.BoundsPadding() + single2 * single3;
                float single5 = Vector3.Distance(player.eyes.position, eyePos);
                if (single5 > single4)
                {
                    string str = base.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.EyeHack, string.Concat(new object[] { "Distance (", str, " on attack with ", single5, "m > ", single4, "m)" }));
                    player.stats.combat.Log(this, "eye_distance");
                    flag = false;
                }
            }
            if (ConVar.AntiHack.eye_protection >= 2)
            {
                Vector3 vector3  = player.eyes.center;
                Vector3 vector31 = player.eyes.position;
                Vector3 vector32 = eyePos;
                if (!GamePhysics.LineOfSight(vector3, vector31, vector32, 2162688, 0f))
                {
                    string shortPrefabName1 = base.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.EyeHack, string.Concat(new object[] { "Line of sight (", shortPrefabName1, " on attack) ", vector3, " ", vector31, " ", vector32 }));
                    player.stats.combat.Log(this, "eye_los");
                    flag = false;
                }
            }
            if (!flag)
            {
                AntiHack.AddViolation(player, AntiHackType.EyeHack, ConVar.AntiHack.eye_penalty);
            }
        }
        return(flag);
    }
Esempio n. 4
0
    public void PlayerAttack(RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!VerifyClientAttack(player))
        {
            SendNetworkUpdate();
            return;
        }
        using (TimeWarning.New("PlayerAttack", 50))
        {
            using (PlayerAttack playerAttack = ProtoBuf.PlayerAttack.Deserialize(msg.read))
            {
                if (playerAttack == null)
                {
                    return;
                }
                HitInfo hitInfo = Facepunch.Pool.Get <HitInfo>();
                hitInfo.LoadFromAttack(playerAttack.attack, true);
                hitInfo.Initiator        = player;
                hitInfo.Weapon           = this;
                hitInfo.WeaponPrefab     = this;
                hitInfo.Predicted        = msg.connection;
                hitInfo.damageProperties = damageProperties;
                if (Interface.CallHook("OnMeleeAttack", player, hitInfo) != null)
                {
                    return;
                }
                if (hitInfo.IsNaNOrInfinity())
                {
                    string shortPrefabName = base.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.MeleeHack, "Contains NaN (" + shortPrefabName + ")");
                    player.stats.combat.Log(hitInfo, "melee_nan");
                    return;
                }
                BaseEntity hitEntity  = hitInfo.HitEntity;
                BasePlayer basePlayer = hitInfo.HitEntity as BasePlayer;
                bool       flag       = basePlayer != null;
                bool       flag2      = flag && basePlayer.IsSleeping();
                bool       flag3      = flag && basePlayer.IsWounded();
                bool       flag4      = flag && basePlayer.isMounted;
                bool       flag5      = flag && basePlayer.HasParent();
                bool       flag6      = hitEntity != null;
                bool       flag7      = flag6 && hitEntity.IsNpc;
                if (ConVar.AntiHack.melee_protection <= 0)
                {
                    goto IL_0903;
                }
                bool  flag8 = true;
                float num   = 1f + ConVar.AntiHack.melee_forgiveness;
                float melee_clientframes = ConVar.AntiHack.melee_clientframes;
                float melee_serverframes = ConVar.AntiHack.melee_serverframes;
                float num2      = melee_clientframes / 60f;
                float num3      = melee_serverframes * Mathx.Max(UnityEngine.Time.deltaTime, UnityEngine.Time.smoothDeltaTime, UnityEngine.Time.fixedDeltaTime);
                float num4      = (player.desyncTimeClamped + num2 + num3) * num;
                int   layerMask = (ConVar.AntiHack.melee_terraincheck ? 10551296 : 2162688);
                if (flag && hitInfo.boneArea == (HitArea)(-1))
                {
                    string shortPrefabName2 = base.ShortPrefabName;
                    string shortPrefabName3 = basePlayer.ShortPrefabName;
                    AntiHack.Log(player, AntiHackType.MeleeHack, "Bone is invalid  (" + shortPrefabName2 + " on " + shortPrefabName3 + " bone " + hitInfo.HitBone + ")");
                    player.stats.combat.Log(hitInfo, "melee_bone");
                    flag8 = false;
                }
                if (ConVar.AntiHack.melee_protection >= 2)
                {
                    if (flag6)
                    {
                        float num5 = hitEntity.MaxVelocity() + hitEntity.GetParentVelocity().magnitude;
                        float num6 = hitEntity.BoundsPadding() + num4 * num5;
                        float num7 = hitEntity.Distance(hitInfo.HitPositionWorld);
                        if (num7 > num6)
                        {
                            string shortPrefabName4 = base.ShortPrefabName;
                            string shortPrefabName5 = hitEntity.ShortPrefabName;
                            AntiHack.Log(player, AntiHackType.MeleeHack, "Entity too far away (" + shortPrefabName4 + " on " + shortPrefabName5 + " with " + num7 + "m > " + num6 + "m in " + num4 + "s)");
                            player.stats.combat.Log(hitInfo, "melee_target");
                            flag8 = false;
                        }
                    }
                    if (ConVar.AntiHack.melee_protection >= 4 && flag8 && flag && !flag7 && !flag2 && !flag3 && !flag4 && !flag5)
                    {
                        float magnitude = basePlayer.GetParentVelocity().magnitude;
                        float num8      = basePlayer.BoundsPadding() + num4 * magnitude + ConVar.AntiHack.tickhistoryforgiveness;
                        float num9      = basePlayer.tickHistory.Distance(basePlayer, hitInfo.HitPositionWorld);
                        if (num9 > num8)
                        {
                            string shortPrefabName6 = base.ShortPrefabName;
                            string shortPrefabName7 = basePlayer.ShortPrefabName;
                            AntiHack.Log(player, AntiHackType.ProjectileHack, "Player too far away (" + shortPrefabName6 + " on " + shortPrefabName7 + " with " + num9 + "m > " + num8 + "m in " + num4 + "s)");
                            player.stats.combat.Log(hitInfo, "player_distance");
                            flag8 = false;
                        }
                    }
                }
                if (ConVar.AntiHack.melee_protection >= 1)
                {
                    if (ConVar.AntiHack.melee_protection >= 4)
                    {
                        float magnitude2 = player.GetParentVelocity().magnitude;
                        float num10      = player.BoundsPadding() + num4 * magnitude2 + num * maxDistance;
                        float num11      = player.tickHistory.Distance(player, hitInfo.HitPositionWorld);
                        if (num11 > num10)
                        {
                            string shortPrefabName8 = base.ShortPrefabName;
                            string text             = (flag6 ? hitEntity.ShortPrefabName : "world");
                            AntiHack.Log(player, AntiHackType.MeleeHack, "Initiator too far away (" + shortPrefabName8 + " on " + text + " with " + num11 + "m > " + num10 + "m in " + num4 + "s)");
                            player.stats.combat.Log(hitInfo, "melee_initiator");
                            flag8 = false;
                        }
                    }
                    else
                    {
                        float num12 = player.MaxVelocity() + player.GetParentVelocity().magnitude;
                        float num13 = player.BoundsPadding() + num4 * num12 + num * maxDistance;
                        float num14 = player.Distance(hitInfo.HitPositionWorld);
                        if (num14 > num13)
                        {
                            string shortPrefabName9 = base.ShortPrefabName;
                            string text2            = (flag6 ? hitEntity.ShortPrefabName : "world");
                            AntiHack.Log(player, AntiHackType.MeleeHack, "Initiator too far away (" + shortPrefabName9 + " on " + text2 + " with " + num14 + "m > " + num13 + "m in " + num4 + "s)");
                            player.stats.combat.Log(hitInfo, "melee_initiator");
                            flag8 = false;
                        }
                    }
                }
                if (ConVar.AntiHack.melee_protection >= 3)
                {
                    if (flag6)
                    {
                        Vector3 pointStart = hitInfo.PointStart;
                        Vector3 vector     = hitInfo.HitPositionWorld + hitInfo.HitNormalWorld.normalized * 0.001f;
                        Vector3 center     = player.eyes.center;
                        Vector3 position   = player.eyes.position;
                        Vector3 vector2    = pointStart;
                        Vector3 vector3    = hitInfo.PositionOnRay(vector);
                        Vector3 vector4    = vector;
                        bool    num15      = GamePhysics.LineOfSight(center, position, vector2, vector3, vector4, layerMask);
                        if (!num15)
                        {
                            player.stats.Add("hit_" + hitEntity.Categorize() + "_indirect_los", 1, Stats.Server);
                        }
                        else
                        {
                            player.stats.Add("hit_" + hitEntity.Categorize() + "_direct_los", 1, Stats.Server);
                        }
                        if (!num15)
                        {
                            string shortPrefabName10 = base.ShortPrefabName;
                            string shortPrefabName11 = hitEntity.ShortPrefabName;
                            AntiHack.Log(player, AntiHackType.MeleeHack, string.Concat("Line of sight (", shortPrefabName10, " on ", shortPrefabName11, ") ", center, " ", position, " ", vector2, " ", vector3, " ", vector4));
                            player.stats.combat.Log(hitInfo, "melee_los");
                            flag8 = false;
                        }
                    }
                    if (flag8 && flag && !flag7)
                    {
                        Vector3 vector5   = hitInfo.HitPositionWorld + hitInfo.HitNormalWorld.normalized * 0.001f;
                        Vector3 position2 = basePlayer.eyes.position;
                        Vector3 vector6   = basePlayer.CenterPoint();
                        if ((!GamePhysics.LineOfSight(vector5, position2, layerMask, 0f, ConVar.AntiHack.losforgiveness) || !GamePhysics.LineOfSight(position2, vector5, layerMask, ConVar.AntiHack.losforgiveness, 0f)) && (!GamePhysics.LineOfSight(vector5, vector6, layerMask, 0f, ConVar.AntiHack.losforgiveness) || !GamePhysics.LineOfSight(vector6, vector5, layerMask, ConVar.AntiHack.losforgiveness, 0f)))
                        {
                            string shortPrefabName12 = base.ShortPrefabName;
                            string shortPrefabName13 = basePlayer.ShortPrefabName;
                            AntiHack.Log(player, AntiHackType.MeleeHack, string.Concat("Line of sight (", shortPrefabName12, " on ", shortPrefabName13, ") ", vector5, " ", position2, " or ", vector5, " ", vector6));
                            player.stats.combat.Log(hitInfo, "melee_los");
                            flag8 = false;
                        }
                    }
                }
                if (flag8)
                {
                    goto IL_0903;
                }
                AntiHack.AddViolation(player, AntiHackType.MeleeHack, ConVar.AntiHack.melee_penalty);
                goto end_IL_0031;
IL_0903:
                player.metabolism.UseHeart(heartStress * 0.2f);
                using (TimeWarning.New("DoAttackShared", 50))
                {
                    DoAttackShared(hitInfo);
                }
                end_IL_0031 :;
            }
        }
    }