diff --git a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs index d6de4b1..8467a6c 100644 --- a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs +++ b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs @@ -782,6 +782,7 @@ namespace src.player if (pawn.AbsOrigin == null || pawn.AbsRotation == null) return; if (pawn.IsDefusing) return; + if (IsAimingAtPlantedBomb(player, pawn)) return; Vector eyePos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z); Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * 80; @@ -815,6 +816,35 @@ namespace src.player } } + private const float BombBlockRange = 100f; + private const float BombBlockCos = 0.7071f; + + private static bool IsAimingAtPlantedBomb(CCSPlayerController player, CCSPlayerPawn pawn) + { + if (player.Team != CsTeam.CounterTerrorist) return false; + if (pawn.AbsOrigin == null) return false; + + foreach (var bomb in Utilities.FindAllEntitiesByDesignerName("planted_c4")) + { + if (bomb == null || !bomb.IsValid || bomb.AbsOrigin == null) continue; + if (!bomb.BombTicking || bomb.BombDefused) continue; + + float dx = bomb.AbsOrigin.X - pawn.AbsOrigin.X; + float dy = bomb.AbsOrigin.Y - pawn.AbsOrigin.Y; + float dz = bomb.AbsOrigin.Z - (pawn.AbsOrigin.Z + pawn.ViewOffset.Z); + + float distance = MathF.Sqrt(dx * dx + dy * dy + dz * dz); + if (distance > BombBlockRange || distance <= 0.01f) continue; + + var forward = SkillUtils.GetForwardVector(pawn.EyeAngles); + float dot = (forward.X * dx + forward.Y * dy + forward.Z * dz) / distance; + + if (dot >= BombBlockCos) return true; + } + + return false; + } + private static HookResult BulletImpact(EventBulletImpact @event, GameEventInfo info) { lock (setLock) diff --git a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs index a4362c8..b8b0ba5 100644 --- a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs +++ b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs @@ -183,8 +183,8 @@ namespace src.player.skills Vector newPos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 30); QAngle newAngle = new(playerPawn.AbsRotation.X, playerPawn.AbsRotation.Y, playerPawn.AbsRotation.Z); - emptyProp.Teleport(newPos, newAngle); emptyProp.DispatchSpawn(); + emptyProp.Teleport(newPos, newAngle); Utilities.SetStateChanged(emptyProp, "CBaseEntity", "m_CBodyComponent"); diff --git a/jRandomSkills - SRC Files/src/player/skills/Ghost.cs b/jRandomSkills - SRC Files/src/player/skills/Ghost.cs index edf6de6..2923a48 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Ghost.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Ghost.cs @@ -127,8 +127,8 @@ namespace src.player.skills Vector newPos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 30); QAngle newAngle = new(playerPawn.AbsRotation.X, playerPawn.AbsRotation.Y, playerPawn.AbsRotation.Z); - emptyProp.Teleport(newPos, newAngle); emptyProp.DispatchSpawn(); + emptyProp.Teleport(newPos, newAngle); Utilities.SetStateChanged(emptyProp, "CBaseEntity", "m_CBodyComponent"); diff --git a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs index dee0544..8c238b0 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs @@ -156,8 +156,8 @@ namespace src.player.skills Vector newPos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 30); QAngle newAngle = new(playerPawn.AbsRotation.X, playerPawn.AbsRotation.Y, playerPawn.AbsRotation.Z); - emptyProp.Teleport(newPos, newAngle); emptyProp.DispatchSpawn(); + emptyProp.Teleport(newPos, newAngle); Utilities.SetStateChanged(emptyProp, "CBaseEntity", "m_CBodyComponent"); diff --git a/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs b/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs index 529f051..91bb427 100644 --- a/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs +++ b/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs @@ -114,7 +114,8 @@ namespace src.player.skills (WeaponInfo[]? playerWeapon, bool playerC4) = GetWeapons(player); (WeaponInfo[]? enemyWeapon, bool enemyC4) = GetWeapons(enemy); - if (playerWeapon == null || !playerWeapon.Any(w => weapons.Contains(w.Name))) + if (playerWeapon == null || !playerWeapon.Any(w => weapons.Contains(w.Name)) + || enemyWeapon == null || !enemyWeapon.Any(w => weapons.Contains(w.Name))) { skillInfo.FindedEnemy = true; skillInfo.HaveWeapon = false; @@ -268,7 +269,12 @@ namespace src.player.skills private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player) { - CCSPlayerController[] enemies = [.. PlayerManager.GetTickPlayers().FindAll(e => e.Team != player.Team && e.PlayerPawn?.Value?.Health > 0)]; + CCSPlayerController[] enemies = [.. PlayerManager.GetTickPlayers().FindAll(e => + e != null && e.IsValid + && e.Team != player.Team && e.Team != CsTeam.Spectator && e.Team != CsTeam.None + && e.LifeState == (byte)LifeState_t.LIFE_ALIVE + && e.PlayerPawn?.Value != null && e.PlayerPawn.Value.IsValid + && e.PlayerPawn.Value.Health > 0)]; if (enemies.Length == 0) return null; return enemies[Instance.Random.Next(enemies.Length)]; } diff --git a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs index 1e7335a..7f4d9fd 100644 --- a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs +++ b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs @@ -148,10 +148,15 @@ namespace src.utils if (ammo == 1) return; + uint weaponIndex = weapon.Value.Index; + jRandomSkills.Instance.AddTimer(.1f, () => { - if (weapon == null || !weapon.IsValid || weapon.Value == null || !weapon.Value.IsValid) return; - weapon.Value.Clip1 = 1; + var tracked = Utilities.GetEntityFromIndex((int)weaponIndex); + if (tracked == null || !tracked.IsValid || tracked.DesignerName != itemString) return; + + tracked.Clip1 = 1; + Utilities.SetStateChanged(tracked, "CBasePlayerWeapon", "m_iClip1"); }, TimerFlags.STOP_ON_MAPCHANGE); } diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll index 9719cda..72c2a02 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll index 6bd7605..d8baf16 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll differ