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); }
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); }
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); }
public void PlayerAttack(BaseEntity.RPCMessage msg) { Vector3 parentVelocity; BasePlayer basePlayer = msg.player; if (!this.VerifyClientAttack(basePlayer)) { base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); return; } using (TimeWarning timeWarning = TimeWarning.New("PlayerAttack", (long)50)) { using (PlayerAttack playerAttack = PlayerAttack.Deserialize(msg.read)) { if (playerAttack != null) { HitInfo hitInfo = Facepunch.Pool.Get <HitInfo>(); hitInfo.LoadFromAttack(playerAttack.attack, true); hitInfo.Initiator = basePlayer; hitInfo.Weapon = this; hitInfo.WeaponPrefab = this; hitInfo.Predicted = msg.connection; hitInfo.damageProperties = this.damageProperties; if (Interface.CallHook("OnMeleeAttack", basePlayer, hitInfo) != null) { return; } if (!hitInfo.IsNaNOrInfinity()) { if (ConVar.AntiHack.melee_protection > 0 && hitInfo.HitEntity) { bool flag = true; float meleeForgiveness = 1f + ConVar.AntiHack.melee_forgiveness; float meleeClientframes = ConVar.AntiHack.melee_clientframes; float meleeServerframes = ConVar.AntiHack.melee_serverframes; float single = meleeClientframes / 60f; float single1 = meleeServerframes * Mathx.Max(UnityEngine.Time.deltaTime, UnityEngine.Time.smoothDeltaTime, UnityEngine.Time.fixedDeltaTime); float single2 = (basePlayer.desyncTime + single + single1) * meleeForgiveness; if (ConVar.AntiHack.projectile_protection >= 2) { float single3 = hitInfo.HitEntity.MaxVelocity(); parentVelocity = hitInfo.HitEntity.GetParentVelocity(); float single4 = single3 + parentVelocity.magnitude; float single5 = hitInfo.HitEntity.BoundsPadding() + single2 * single4; float single6 = hitInfo.HitEntity.Distance(hitInfo.HitPositionWorld); if (single6 > single5) { string shortPrefabName = base.ShortPrefabName; string str = hitInfo.HitEntity.ShortPrefabName; AntiHack.Log(basePlayer, AntiHackType.MeleeHack, string.Concat(new object[] { "Entity too far away (", shortPrefabName, " on ", str, " with ", single6, "m > ", single5, "m in ", single2, "s)" })); basePlayer.stats.combat.Log(hitInfo, "melee_distance"); flag = false; } } if (ConVar.AntiHack.melee_protection >= 1) { float single7 = hitInfo.Initiator.MaxVelocity(); parentVelocity = hitInfo.Initiator.GetParentVelocity(); float single8 = single7 + parentVelocity.magnitude; float single9 = hitInfo.Initiator.BoundsPadding() + single2 * single8 + meleeForgiveness * this.maxDistance; float single10 = hitInfo.Initiator.Distance(hitInfo.HitPositionWorld); if (single10 > single9) { string shortPrefabName1 = base.ShortPrefabName; string str1 = hitInfo.HitEntity.ShortPrefabName; AntiHack.Log(basePlayer, AntiHackType.MeleeHack, string.Concat(new object[] { "Initiator too far away (", shortPrefabName1, " on ", str1, " with ", single10, "m > ", single9, "m in ", single2, "s)" })); basePlayer.stats.combat.Log(hitInfo, "melee_distance"); flag = false; } } if (ConVar.AntiHack.melee_protection >= 3) { Vector3 pointStart = hitInfo.PointStart; Vector3 hitPositionWorld = hitInfo.HitPositionWorld + (hitInfo.HitNormalWorld.normalized * 0.001f); Vector3 vector3 = basePlayer.eyes.center; Vector3 vector31 = basePlayer.eyes.position; Vector3 vector32 = pointStart; Vector3 vector33 = hitInfo.PositionOnRay(hitPositionWorld); Vector3 vector34 = hitPositionWorld; bool flag1 = GamePhysics.LineOfSight(vector3, vector31, vector32, vector33, vector34, 2162688, 0f); if (flag1) { basePlayer.stats.Add(string.Concat("hit_", hitInfo.HitEntity.Categorize(), "_direct_los"), 1, Stats.Server); } else { basePlayer.stats.Add(string.Concat("hit_", hitInfo.HitEntity.Categorize(), "_indirect_los"), 1, Stats.Server); } if (!flag1) { string shortPrefabName2 = base.ShortPrefabName; string str2 = hitInfo.HitEntity.ShortPrefabName; AntiHack.Log(basePlayer, AntiHackType.MeleeHack, string.Concat(new object[] { "Line of sight (", shortPrefabName2, " on ", str2, ") ", vector3, " ", vector31, " ", vector32, " ", vector33, " ", vector34 })); basePlayer.stats.combat.Log(hitInfo, "melee_los"); flag = false; } } if (!flag) { AntiHack.AddViolation(basePlayer, AntiHackType.MeleeHack, ConVar.AntiHack.melee_penalty); return; } } basePlayer.metabolism.UseHeart(this.heartStress * 0.2f); using (TimeWarning timeWarning1 = TimeWarning.New("DoAttackShared", (long)50)) { this.DoAttackShared(hitInfo); } } else { string shortPrefabName3 = base.ShortPrefabName; AntiHack.Log(basePlayer, AntiHackType.MeleeHack, string.Concat("Contains NaN (", shortPrefabName3, ")")); basePlayer.stats.combat.Log(hitInfo, "melee_nan"); } } } } }
public static bool ValidateMove(BasePlayer ply, TickInterpolator ticks, float deltaTime) { bool flag; using (TimeWarning timeWarning = TimeWarning.New("AntiHack.ValidateMove", 0.1f)) { if (ply.IsFlying) { ply.lastAdminCheatTime = UnityEngine.Time.realtimeSinceStartup; } if (ply.IsAdmin) { if (ConVar.AntiHack.userlevel < 1) { flag = true; return(flag); } else if (ConVar.AntiHack.admincheat && ply.UsedAdminCheat(1f)) { flag = true; return(flag); } } if (ply.IsDeveloper) { if (ConVar.AntiHack.userlevel < 2) { flag = true; return(flag); } else if (ConVar.AntiHack.admincheat && ply.UsedAdminCheat(1f)) { flag = true; return(flag); } } if (ply.IsSleeping()) { flag = true; } else if (ply.IsWounded()) { flag = true; } else if (ply.IsSpectating()) { flag = true; } else if (!ply.IsDead()) { bool flag1 = deltaTime > ConVar.AntiHack.maxdeltatime; using (TimeWarning timeWarning1 = TimeWarning.New("IsNoClipping", 0.1f)) { if (AntiHack.IsNoClipping(ply, ticks, deltaTime)) { if (!flag1) { AntiHack.AddViolation(ply, AntiHackType.NoClip, ConVar.AntiHack.noclip_penalty * ticks.Length); if (ConVar.AntiHack.noclip_reject) { flag = false; return(flag); } } else { flag = false; return(flag); } } } using (timeWarning1 = TimeWarning.New("IsSpeeding", 0.1f)) { if (AntiHack.IsSpeeding(ply, ticks, deltaTime)) { if (!flag1) { AntiHack.AddViolation(ply, AntiHackType.SpeedHack, ConVar.AntiHack.speedhack_penalty * ticks.Length); if (ConVar.AntiHack.speedhack_reject) { flag = false; return(flag); } } else { flag = false; return(flag); } } } using (timeWarning1 = TimeWarning.New("IsFlying", 0.1f)) { if (AntiHack.IsFlying(ply, ticks, deltaTime)) { if (!flag1) { AntiHack.AddViolation(ply, AntiHackType.FlyHack, ConVar.AntiHack.flyhack_penalty * ticks.Length); if (ConVar.AntiHack.flyhack_reject) { flag = false; return(flag); } } else { flag = false; return(flag); } } } flag = true; } else { flag = true; } } return(flag); }
public void PlayerAttack(BaseEntity.RPCMessage msg) { BasePlayer player = msg.player; if (!this.VerifyClientAttack(player)) { this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update); } else { using (TimeWarning.New(nameof(PlayerAttack), 50L)) { using (PlayerAttack playerAttack = PlayerAttack.Deserialize((Stream)msg.read)) { if (playerAttack == null) { return; } HitInfo info = (HitInfo)Pool.Get <HitInfo>(); info.LoadFromAttack((Attack)playerAttack.attack, true); info.Initiator = (BaseEntity)player; info.Weapon = (AttackEntity)this; info.WeaponPrefab = (BaseEntity)this; info.Predicted = msg.connection; info.damageProperties = this.damageProperties; if (Interface.CallHook("OnMeleeAttack", (object)player, (object)info) != null) { return; } if (info.IsNaNOrInfinity()) { string shortPrefabName = this.ShortPrefabName; AntiHack.Log(player, AntiHackType.MeleeHack, "Contains NaN (" + shortPrefabName + ")"); player.stats.combat.Log(info, "melee_nan"); } else { if (ConVar.AntiHack.melee_protection > 0 && Object.op_Implicit((Object)info.HitEntity)) { bool flag = true; float num1 = 1f + ConVar.AntiHack.melee_forgiveness; double meleeClientframes = (double)ConVar.AntiHack.melee_clientframes; float meleeServerframes = ConVar.AntiHack.melee_serverframes; float num2 = (float)(meleeClientframes / 60.0); float num3 = meleeServerframes * Mathx.Max(Time.get_deltaTime(), Time.get_smoothDeltaTime(), Time.get_fixedDeltaTime()); float num4 = (player.desyncTime + num2 + num3) * num1; if (ConVar.AntiHack.projectile_protection >= 2) { double num5 = (double)info.HitEntity.MaxVelocity(); Vector3 parentVelocity = info.HitEntity.GetParentVelocity(); double magnitude = (double)((Vector3) ref parentVelocity).get_magnitude(); float num6 = (float)(num5 + magnitude); float num7 = info.HitEntity.BoundsPadding() + num4 * num6; float num8 = info.HitEntity.Distance(info.HitPositionWorld); if ((double)num8 > (double)num7) { string shortPrefabName1 = this.ShortPrefabName; string shortPrefabName2 = info.HitEntity.ShortPrefabName; AntiHack.Log(player, AntiHackType.MeleeHack, "Entity too far away (" + shortPrefabName1 + " on " + shortPrefabName2 + " with " + (object)num8 + "m > " + (object)num7 + "m in " + (object)num4 + "s)"); player.stats.combat.Log(info, "melee_distance"); flag = false; } } if (ConVar.AntiHack.melee_protection >= 1) { double num5 = (double)info.Initiator.MaxVelocity(); Vector3 parentVelocity = info.Initiator.GetParentVelocity(); double magnitude = (double)((Vector3) ref parentVelocity).get_magnitude(); float num6 = (float)(num5 + magnitude); float num7 = (float)((double)info.Initiator.BoundsPadding() + (double)num4 * (double)num6 + (double)num1 * (double)this.maxDistance); float num8 = info.Initiator.Distance(info.HitPositionWorld); if ((double)num8 > (double)num7) { string shortPrefabName1 = this.ShortPrefabName; string shortPrefabName2 = info.HitEntity.ShortPrefabName; AntiHack.Log(player, AntiHackType.MeleeHack, "Initiator too far away (" + shortPrefabName1 + " on " + shortPrefabName2 + " with " + (object)num8 + "m > " + (object)num7 + "m in " + (object)num4 + "s)"); player.stats.combat.Log(info, "melee_distance"); flag = false; } } if (ConVar.AntiHack.melee_protection >= 3) { Vector3 pointStart = info.PointStart; Vector3 position1 = Vector3.op_Addition(info.HitPositionWorld, Vector3.op_Multiply(((Vector3) ref info.HitNormalWorld).get_normalized(), 1f / 1000f)); Vector3 center = player.eyes.center; Vector3 position2 = player.eyes.position; Vector3 p2 = pointStart; Vector3 p3 = info.PositionOnRay(position1); Vector3 p4 = position1; int num5 = GamePhysics.LineOfSight(center, position2, p2, p3, p4, 2162688, 0.0f) ? 1 : 0; if (num5 == 0) { player.stats.Add("hit_" + info.HitEntity.Categorize() + "_indirect_los", 1, Stats.Server); } else { player.stats.Add("hit_" + info.HitEntity.Categorize() + "_direct_los", 1, Stats.Server); } if (num5 == 0) { string shortPrefabName1 = this.ShortPrefabName; string shortPrefabName2 = info.HitEntity.ShortPrefabName; AntiHack.Log(player, AntiHackType.MeleeHack, "Line of sight (" + shortPrefabName1 + " on " + shortPrefabName2 + ") " + (object)center + " " + (object)position2 + " " + (object)p2 + " " + (object)p3 + " " + (object)p4); player.stats.combat.Log(info, "melee_los"); flag = false; } } if (!flag) { AntiHack.AddViolation(player, AntiHackType.MeleeHack, ConVar.AntiHack.melee_penalty); return; } } player.metabolism.UseHeart(this.heartStress * 0.2f); using (TimeWarning.New("DoAttackShared", 50L)) this.DoAttackShared(info); } } } } }
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 :; } } }
public static bool ValidateMove(BasePlayer ply, TickInterpolator ticks, float deltaTime) { using (TimeWarning.New("AntiHack.ValidateMove", 0.1f)) { if (ply.IsFlying) { ply.lastAdminCheatTime = Time.get_realtimeSinceStartup(); } if (ply.IsAdmin && (ConVar.AntiHack.userlevel < 1 || ConVar.AntiHack.admincheat && ply.UsedAdminCheat(1f)) || ply.IsDeveloper && (ConVar.AntiHack.userlevel < 2 || ConVar.AntiHack.admincheat && ply.UsedAdminCheat(1f)) || (ply.IsSleeping() || ply.IsWounded() || (ply.IsSpectating() || ply.IsDead()))) { return(true); } bool flag = (double)deltaTime > (double)ConVar.AntiHack.maxdeltatime; using (TimeWarning.New("IsNoClipping", 0.1f)) { if (AntiHack.IsNoClipping(ply, ticks, deltaTime)) { if (flag) { return(false); } AntiHack.AddViolation(ply, AntiHackType.NoClip, ConVar.AntiHack.noclip_penalty * ticks.Length); if (ConVar.AntiHack.noclip_reject) { return(false); } } } using (TimeWarning.New("IsSpeeding", 0.1f)) { if (AntiHack.IsSpeeding(ply, ticks, deltaTime)) { if (flag) { return(false); } AntiHack.AddViolation(ply, AntiHackType.SpeedHack, ConVar.AntiHack.speedhack_penalty * ticks.Length); if (ConVar.AntiHack.speedhack_reject) { return(false); } } } using (TimeWarning.New("IsFlying", 0.1f)) { if (AntiHack.IsFlying(ply, ticks, deltaTime)) { if (flag) { return(false); } AntiHack.AddViolation(ply, AntiHackType.FlyHack, ConVar.AntiHack.flyhack_penalty * ticks.Length); if (ConVar.AntiHack.flyhack_reject) { return(false); } } } return(true); } }