v1.2.4.b1
This commit is contained in:
parent
dcf4020981
commit
12d04191f3
8 changed files with 48 additions and 7 deletions
|
|
@ -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<CPlantedC4>("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)
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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)];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CBasePlayerWeapon>((int)weaponIndex);
|
||||
if (tracked == null || !tracked.IsValid || tracked.DesignerName != itemString) return;
|
||||
|
||||
tracked.Clip1 = 1;
|
||||
Utilities.SetStateChanged(tracked, "CBasePlayerWeapon", "m_iClip1");
|
||||
}, TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue