v1.21.1.b8

This commit is contained in:
Juzlus 2026-04-26 10:36:05 +02:00
parent abd3aed8fd
commit 10dbf6629e
77 changed files with 1507 additions and 974 deletions

View file

@ -1,10 +1,9 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using static src.jRandomSkills;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
namespace src.player.skills
{
@ -14,8 +13,8 @@ namespace src.player.skills
private static int bombHealth = 1000;
private static int maxBombHealth = 1000;
private static CPlantedC4? plantedC4;
private static CTriggerMultiple? triggerC4;
private static int lastTick = 0;
private static Vector? plantedC4;
public static void LoadSkill()
{
@ -27,80 +26,42 @@ namespace src.player.skills
bombHealth = SkillsInfo.GetValue<int>(skillName, "maxBombHealth");
maxBombHealth = SkillsInfo.GetValue<int>(skillName, "maxBombHealth");
plantedC4 = null;
triggerC4 = null;
}
public static void BombPlanted(EventBombPlanted _)
{
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
if (plantedBomb == null) return;
plantedC4 = plantedBomb;
CreateTrigger();
}
private static void CreateTrigger()
{
var trigger = Utilities.CreateEntityByName<CTriggerMultiple>("trigger_multiple");
if (trigger == null || plantedC4 == null || trigger.AbsOrigin == null || plantedC4.AbsOrigin == null) return;
trigger.Collision.SolidType = SolidType_t.SOLID_CAPSULE;
trigger.Collision.SolidFlags = 0;
trigger.Spawnflags = 1;
trigger.Globalname = $"planted_bomb_prop_{trigger.Index}";
trigger.Collision.SolidFlags = 1;
trigger.AbsOrigin.X = plantedC4.AbsOrigin.X;
trigger.AbsOrigin.Y = plantedC4.AbsOrigin.Y;
trigger.AbsOrigin.Z = plantedC4.AbsOrigin.Z;
trigger.Collision.CapsuleRadius = 10;
trigger.Collision.BoundingRadius = 10;
trigger.Collision.CollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_TRIGGER;
trigger.Collision.EnablePhysics = 1;
trigger.Collision.TriggerBloat = 0;
trigger.Collision.SurroundType = SurroundingBoundsType_t.USE_OBB_COLLISION_BOUNDS;
trigger.Collision.CollisionAttribute.CollisionFunctionMask = 39;
trigger.Collision.CollisionAttribute.CollisionGroup = 2;
trigger.DispatchSpawn();
triggerC4 = trigger;
if (plantedBomb == null || !plantedBomb.IsValid || plantedBomb.AbsOrigin == null) return;
plantedC4 = new(plantedBomb.AbsOrigin.X, plantedBomb.AbsOrigin.Y, plantedBomb.AbsOrigin.Z);
}
private static void RemoveBomb()
{
if (plantedC4 != null && plantedC4.IsValid)
plantedC4.AcceptInput("Kill");
if (triggerC4 != null && triggerC4.IsValid)
triggerC4.AcceptInput("Kill");
plantedC4 = null;
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
if (plantedBomb != null && plantedBomb.IsValid)
plantedBomb.AcceptInput("Kill");
SkillUtils.TerminateRound(CsTeam.CounterTerrorist);
}
public static void OnTakeDamage(DynamicHook h)
public static void BulletImpact(EventBulletImpact @event)
{
CEntityInstance param = h.GetParam<CEntityInstance>(0);
CTakeDamageInfo param2 = h.GetParam<CTakeDamageInfo>(1);
if (lastTick == Server.TickCount) return;
if (param == null || param.Entity == null || param2 == null || param2.Attacker == null || param2.Attacker.Value == null)
return;
var player = @event.Userid;
if (player == null || !player.IsValid || plantedC4 == null) return;
CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
var pos = new Vector(@event.X, @event.Y, @event.Z);
if (attackerPawn.DesignerName != "player" || param.DesignerName != "trigger_multiple")
return;
CTriggerMultiple trigger = new(param.Handle);
if (attackerPawn == null || attackerPawn.Controller?.Value == null || trigger == null || !trigger.Globalname.StartsWith("planted_bomb_prop_"))
return;
CCSPlayerController attacker = attackerPawn.Controller.Value.As<CCSPlayerController>();
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo == null || playerInfo.Skill != skillName) return;
bombHealth -= (int)param2.TotalledDamage;
if (SkillUtils.Distance(plantedC4, pos) >= 8)
return;
lastTick = Server.TickCount;
bombHealth -= Instance.Random.Next(25, 42);
if (bombHealth <= 0)
{
RemoveBomb();