This commit is contained in:
Juzlus 2025-09-23 04:53:25 +02:00
parent a36fdbf92d
commit 04a4fdce0d
143 changed files with 3565 additions and 2344 deletions

View file

@ -5,26 +5,26 @@ using CounterStrikeSharp.API.Core.Attributes;
using CounterStrikeSharp.API.Modules.Utils;
using jRandomSkills.src.player;
using static jRandomSkills.jRandomSkills;
using System.Collections.Concurrent;
namespace jRandomSkills
{
public class Ninja : ISkill
{
private const Skills skillName = Skills.Ninja;
private static readonly float idlePercentInvisibility = Config.GetValue<float>(skillName, "idlePercentInvisibility");
private static readonly float duckPercentInvisibility = Config.GetValue<float>(skillName, "duckPercentInvisibility");
private static readonly float knifePercentInvisibility = Config.GetValue<float>(skillName, "knifePercentInvisibility");
private static readonly Dictionary<nint, float> invisibilityChanged = [];
private static readonly Dictionary<ulong, List<uint>> invisibleEntities = [];
private static readonly ConcurrentDictionary<nint, float> invisibilityChanged = [];
private static readonly ConcurrentDictionary<ulong, List<uint>> invisibleEntities = [];
private static readonly object setLock = new();
public static void LoadSkill()
{
SkillUtils.RegisterSkill(skillName, Config.GetValue<string>(skillName, "color"));
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
}
public static void NewRound()
{
invisibilityChanged.Clear();
lock (setLock)
invisibilityChanged.Clear();
}
public static void WeaponEquip(EventItemEquip @event)
@ -66,6 +66,9 @@ namespace jRandomSkills
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == skillName)
UpdateNinja(player);
if (!player.PawnIsAlive)
if (invisibleEntities.ContainsKey(player.SteamID))
invisibleEntities.TryRemove(player.SteamID, out _);
}
}
@ -78,7 +81,7 @@ namespace jRandomSkills
{
SetPlayerVisibility(player, 0);
SetWeaponVisibility(player, 0);
invisibleEntities.Remove(player.SteamID);
invisibleEntities.TryRemove(player.SteamID, out _);
}
private static void UpdateNinja(CCSPlayerController? player)
@ -97,18 +100,18 @@ namespace jRandomSkills
float percentInvisibility = 0;
if (buttons.HasFlag(PlayerButtons.Duck))
percentInvisibility += duckPercentInvisibility;
percentInvisibility += SkillsInfo.GetValue<float>(skillName, "duckPercentInvisibility");
if (activeWeapon != null && activeWeapon.DesignerName == "weapon_knife")
percentInvisibility += knifePercentInvisibility;
percentInvisibility += SkillsInfo.GetValue<float>(skillName, "knifePercentInvisibility");
if (!buttons.HasFlag(PlayerButtons.Moveleft) && !buttons.HasFlag(PlayerButtons.Moveright) && !buttons.HasFlag(PlayerButtons.Forward) && !buttons.HasFlag(PlayerButtons.Back) && flags.HasFlag(PlayerFlags.FL_ONGROUND))
percentInvisibility += idlePercentInvisibility;
percentInvisibility += SkillsInfo.GetValue<float>(skillName, "idlePercentInvisibility");
SetWeaponVisibility(player, percentInvisibility);
if (invisibilityChanged.TryGetValue(player.Handle, out float oldInvisibility))
if (percentInvisibility == oldInvisibility)
return;
invisibilityChanged[player.Handle] = percentInvisibility;
invisibilityChanged.TryAdd(player.Handle, percentInvisibility);
SetPlayerVisibility(player, percentInvisibility);
}
@ -131,7 +134,7 @@ namespace jRandomSkills
var color = Color.FromArgb(Math.Max(255 - (int)(255 * percentInvisibility * 2), 0), 255, 255, 255);
invisibleEntities.Remove(player.SteamID);
invisibleEntities.TryRemove(player.SteamID, out _);
if (color.A != 0) return;
foreach (var weapon in playerPawn.WeaponServices.MyWeapons)
@ -144,12 +147,12 @@ namespace jRandomSkills
items.Add(weapon.Index);
}
else
invisibleEntities.Add(player.SteamID, [weapon.Index]);
invisibleEntities.TryAdd(player.SteamID, [weapon.Index]);
}
}
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#dedede", CsTeam onlyTeam = CsTeam.None, bool needsTeammates = false, float idlePercentInvisibility = .3f, float duckPercentInvisibility = .3f, float knifePercentInvisibility = .3f) : Config.DefaultSkillInfo(skill, active, color, onlyTeam, needsTeammates)
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#dedede", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float idlePercentInvisibility = .3f, float duckPercentInvisibility = .3f, float knifePercentInvisibility = .3f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
{
public float IdlePercentInvisibility { get; set; } = idlePercentInvisibility;
public float DuckPercentInvisibility { get; set; } = duckPercentInvisibility;