using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; using src.utils; using static src.jRandomSkills; namespace src.player.skills { public class Dwarf : ISkill { private const Skills skillName = Skills.Dwarf; public static void LoadSkill() { SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"), false); } public static void NewRound() { foreach (var player in PlayerManager.GetTickPlayers()) { if (!Instance.IsPlayerValid(player)) continue; DisableSkill(player); } } public static unsafe void EnableSkill(CCSPlayerController player) { var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index); if (playerInfo == null) return; var playerPawn = player.PlayerPawn?.Value; if (playerPawn != null && player.IsValid) { float newSize = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue(skillName, "maxScale") - SkillsInfo.GetValue(skillName, "minScale")) + SkillsInfo.GetValue(skillName, "minScale"); newSize = (float)Math.Round(newSize, 2); playerInfo.SkillChance = newSize; SkillUtils.ChangePlayerScale(player, newSize); SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newSize)}", border: !PlayerManager.GetTickPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t"); } } public static void DisableSkill(CCSPlayerController player) { var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index); if (playerInfo == null) return; var playerPawn = player.PlayerPawn?.Value; if (playerPawn != null && playerPawn?.CBodyComponent != null) { SkillUtils.ChangePlayerScale(player, 1); Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent"); } } public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffff00", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float minScale = .6f, float maxScale = .95f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity) { public float MinScale { get; set; } = minScale; public float MaxScale { get; set; } = maxScale; } } }