Refactor skill spawn logic and HUD expiration, Gambler fix, Auto Lang System fix

This commit is contained in:
Juzlus 2025-10-22 01:57:47 +02:00
parent 4c333f5d15
commit 4b2bff91b1
37 changed files with 324 additions and 164 deletions

View file

@ -81,11 +81,25 @@ namespace src.utils
if (player == null || !player.IsValid) return;
var playerPawn = player.PlayerPawn.Value;
if (playerPawn == null || !playerPawn.IsValid || playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
if (scale <= 0) return;
var skeleton = playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance();
if (scale <= 0 || skeleton == null) return;
playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = scale;
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
Server.NextFrame(() => playerPawn.AcceptInput("SetScale", null, null, scale.ToString()));
skeleton.Scale = scale;
playerPawn.AcceptInput("SetScale", null, null, scale.ToString());
Server.NextFrame(() => Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent"));
}
public static Vector? GetSpawnPointVector(CCSPlayerController player, bool enemySpawn = false)
{
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.Terrorist && !enemySpawn
? "info_player_terrorist" : "info_player_counterterrorist").ToList();
if (spawns.Count != 0)
{
var randomSpawn = spawns[jRandomSkills.Instance.Random.Next(spawns.Count)];
if (randomSpawn != null && randomSpawn.IsValid && randomSpawn.AbsOrigin != null)
return randomSpawn.AbsOrigin;
}
return null;
}
public static void CreateHEGrenadeProjectile(Vector pos, QAngle angle, Vector vel, int teamNum)
@ -124,6 +138,38 @@ namespace src.utils
playerInfo.PrintHTML = null;
}
public static CTriggerMultiple? CreateTrigger(string name, float radius, Vector pos)
{
if (pos == null) return null;
var trigger = Utilities.CreateEntityByName<CTriggerMultiple>("trigger_multiple");
if (trigger == null || trigger.AbsOrigin == null) return null;
trigger.Collision.SolidType = SolidType_t.SOLID_CAPSULE;
trigger.Collision.SolidFlags = 0;
trigger.Spawnflags = 1;
trigger.Globalname = $"{name}_{trigger.Index}";
trigger.Collision.SolidFlags = 1;
trigger.AbsOrigin.X = pos.X;
trigger.AbsOrigin.Y = pos.Y;
trigger.AbsOrigin.Z = pos.Z;
trigger.Collision.CapsuleRadius = radius;
trigger.Collision.BoundingRadius = radius;
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();
return trigger;
}
public static void AddHealth(CCSPlayerPawn? pawn, int extraHealth, int maxHealth = 100)
{
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
@ -197,7 +243,7 @@ namespace src.utils
manager.UpdateActiveMenu(player, list);
}
public static void CreateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> enemies, (string, string)? lastElement = null)
public static void CreateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> enemies, (string, string, bool)? lastElement = null)
{
if (player == null || !player.IsValid) return;
@ -246,7 +292,8 @@ namespace src.utils
menu.Add(lastElement.Value.Item1, (p, option) =>
{
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]);
manager.CloseMenu(p);
if (lastElement.Value.Item3)
manager.CloseMenu(p);
});
manager.OpenMainMenu(player, menu);
}