commit 6dbbfc0ddee546e2702f8913dd0a8c20d3c0d89d Author: admin Date: Sun Jul 26 23:43:46 2026 +0200 feat: add BasePower abstraction diff --git a/Cs2SuperPowers.csproj b/Cs2SuperPowers.csproj new file mode 100644 index 0000000..d8d3409 --- /dev/null +++ b/Cs2SuperPowers.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + Cs2SuperPowersPlugin + + + + + + + diff --git a/Cs2SuperPowersPlugin.cs b/Cs2SuperPowersPlugin.cs new file mode 100644 index 0000000..7913431 --- /dev/null +++ b/Cs2SuperPowersPlugin.cs @@ -0,0 +1,304 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Core.Attributes.Registration; +using CounterStrikeSharp.API.Modules.Commands; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Powers; +using Cs2SuperPowers.Powers.Assign; +using Microsoft.Extensions.Logging; + +namespace Cs2SuperPowers; + +public class Cs2SuperPowersPlugin : BasePlugin +{ + public override string ModuleName => "Cs2SuperPowersPlugin"; + public override string ModuleVersion => "0.1.0"; + public override string ModuleAuthor => "Latoch"; + public override string ModuleDescription => "This CS2 server plugin unleashes the divine within! Experience a chaotic and exhilarating gameplay where players wield incredible superpowers."; + + private readonly ISuperPower[] _superPowers; + private readonly IPowerAssignLogic _powerAssignLogic; + private readonly IPlayerHud _playerHud; + private readonly Random _random = new Random(); + + // Store listener delegate to prevent garbage collection! + private readonly Listeners.CheckTransmit _checkTransmitHandler; + + public Cs2SuperPowersPlugin(IEnumerable superPowers, IPowerAssignLogic powerAssignLogic, IPlayerHud playerHud) : base() + { + _superPowers = superPowers.ToArray(); + _powerAssignLogic = powerAssignLogic; + _playerHud = playerHud; + + // Initialize CheckTransmit handler here to store a reference! + _checkTransmitHandler = OnCheckTransmit; + } + + public override void Load(bool hotReload) + { + Logger.LogInformation("Loading {ModuleName} with HotReload = {HotReload}", ModuleName, hotReload); + base.Load(hotReload); + + // Register CheckTransmit listener using stored handler! + RegisterListener(_checkTransmitHandler); + + foreach (var superPower in _superPowers) + { + Logger.LogInformation("Initializing SuperPower {Name} with Id = {Id}", superPower.Name, superPower.Id); + superPower.Initialize(this); + Logger.LogInformation("Finished Initializing SuperPower {Name}", superPower.Name); + } + _playerHud.Initialize(this); + _powerAssignLogic.Initialize(this, _superPowers); + Logger.LogInformation("Finished loading {ModuleName} with HotReload = {HotReload}", ModuleName, hotReload); + } + + public void OnCheckTransmit(CCheckTransmitInfoList infoList) + { + foreach ((CCheckTransmitInfo info, CCSPlayerController? player) in infoList) + { + if (player == null || !player.IsValid) continue; + Wallhack._onPlayerTransmitHandler(info, player); + } + } + + [ConsoleCommand("css_reroll", "Reroll your super power")] + [CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_ONLY)] + public void OnRerollCommand(CCSPlayerController? player, CommandInfo command) + { + if (player == null || !player.IsValid || !player.PawnIsAlive) + { + return; + } + + var activePlayerCount = Utilities.GetPlayers().Count(currentPlayer => + currentPlayer.IsValid && currentPlayer.Team != CsTeam.None && currentPlayer.Team != CsTeam.Spectator); + var randomAssignablePowers = _superPowers + .Where(power => power.CanBeRandomlyAssigned && power.MinimumPlayersRequired <= activePlayerCount) + .ToArray(); + if (randomAssignablePowers.Length == 0) + { + player.PrintToChat("No eligible powers are available right now."); + return; + } + + var randomPower = randomAssignablePowers[_random.Next(randomAssignablePowers.Length)]; + PlayerPowers.Instance.AddPower(player, randomPower, showMessages: true); + } + + [ConsoleCommand("css_forcepower", "Force a super power on a player: /forcepower ")] + [CommandHelper(minArgs: 2, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnForcePowerCommand(CCSPlayerController? caller, CommandInfo command) + { + var playerNameArg = command.GetArg(1); + var powerArg = command.GetArg(2); + + // Find target player + CCSPlayerController? targetPlayer = null; + foreach (var player in Utilities.GetPlayers()) + { + if (player.IsValid && player.PlayerName.Contains(playerNameArg, StringComparison.OrdinalIgnoreCase)) + { + targetPlayer = player; + break; + } + } + + if (targetPlayer == null) + { + command.ReplyToCommand($"Could not find player containing '{playerNameArg}'"); + return; + } + + // Find power + ISuperPower? targetPower = null; + if (int.TryParse(powerArg, out var powerId)) + { + targetPower = _superPowers.FirstOrDefault(p => p.Id == powerId); + } + else + { + targetPower = _superPowers.FirstOrDefault(p => p.Name.Contains(powerArg, StringComparison.OrdinalIgnoreCase)); + } + + if (targetPower == null) + { + command.ReplyToCommand($"Could not find power '{powerArg}'"); + return; + } + + // Assign power + PlayerPowers.Instance.AddPower(targetPlayer, targetPower, showMessages: true); + command.ReplyToCommand($"Gave {targetPlayer.PlayerName} the power '{targetPower.Name}'"); + } + + [ConsoleCommand("css_nodelay", "Turn off cooldowns for Grenade Launcher, Not So Decoy, and Air Strike!")] + [CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnNoDelayCommand(CCSPlayerController? caller, CommandInfo command) + { + GlobalConfig.NoDelayEnabled = true; + if (caller != null && caller.IsValid) + { + caller.PrintToChat($"NoDelay mode turned ON! Cooldowns disabled for Grenade Launcher, Not So Decoy, Air Strike!"); + } + else + { + Server.PrintToChatAll($"NoDelay mode turned ON! Cooldowns disabled for Grenade Launcher, Not So Decoy, Air Strike!"); + } + } + + [ConsoleCommand("css_delay", "Turn on cooldowns for Grenade Launcher, Not So Decoy, and Air Strike!")] + [CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnDelayCommand(CCSPlayerController? caller, CommandInfo command) + { + GlobalConfig.NoDelayEnabled = false; + if (caller != null && caller.IsValid) + { + caller.PrintToChat($"NoDelay mode turned OFF! Cooldowns re-enabled!"); + } + else + { + Server.PrintToChatAll($"NoDelay mode turned OFF! Cooldowns re-enabled!"); + } + } + + [ConsoleCommand("css_boost", "Shows boost levels for all abilities.")] + [CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnBoostCommand(CCSPlayerController? caller, CommandInfo command) + { + string message = $"Boost Levels:\n GrenadeLauncher: {GlobalConfig.GrenadeLauncherBoostLevel} ({GlobalConfig.GetGrenadeLauncherCount(1)}x)\n NotSoDecoy: {GlobalConfig.NotSoDecoyBoostLevel} ({GlobalConfig.GetNotSoDecoyCount(20)} grenades)\n AirStrike: {GlobalConfig.AirStrikeBoostLevel} ({GlobalConfig.GetAirStrikeCount(20)} grenades)\n Dropped Nades: {GlobalConfig.DroppedNadesBoostLevel} ({GlobalConfig.GetDroppedNadesCount(5)} grenades)"; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + + [ConsoleCommand("css_boost_grenade", "Sets boost level for GrenadeLauncher (0+).")] + [CommandHelper(minArgs: 1, usage: "[level >= 0]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnBoostGrenadeCommand(CCSPlayerController? caller, CommandInfo command) + { + if (int.TryParse(command.GetArg(1), out int level) && level >= 0) + { + GlobalConfig.GrenadeLauncherBoostLevel = level; + string message = $"GrenadeLauncher Boost Level set to {level} ({GlobalConfig.GetGrenadeLauncherCount(1)}x)!"; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + else + { + string message = "Invalid level! Use 0 or higher."; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + } + + [ConsoleCommand("css_boost_decoy", "Sets boost level for NotSoDecoy (0+).")] + [CommandHelper(minArgs: 1, usage: "[level >= 0]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnBoostDecoyCommand(CCSPlayerController? caller, CommandInfo command) + { + if (int.TryParse(command.GetArg(1), out int level) && level >= 0) + { + GlobalConfig.NotSoDecoyBoostLevel = level; + string message = $"NotSoDecoy Boost Level set to {level} ({GlobalConfig.GetNotSoDecoyCount(20)} grenades)!"; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + else + { + string message = "Invalid level! Use 0 or higher."; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + } + + [ConsoleCommand("css_boost_airstrike", "Sets boost level for AirStrike (0+).")] + [CommandHelper(minArgs: 1, usage: "[level >= 0]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnBoostAirstrikeCommand(CCSPlayerController? caller, CommandInfo command) + { + if (int.TryParse(command.GetArg(1), out int level) && level >= 0) + { + GlobalConfig.AirStrikeBoostLevel = level; + string message = $"AirStrike Boost Level set to {level} ({GlobalConfig.GetAirStrikeCount(20)} grenades)!"; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + else + { + string message = "Invalid level! Use 0 or higher."; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + } + + [ConsoleCommand("css_boost_dropped_nades", "Sets boost level for Dropped Nades (0+).")] + [CommandHelper(minArgs: 1, usage: "[level >= 0]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnBoostDroppedNadesCommand(CCSPlayerController? caller, CommandInfo command) + { + if (int.TryParse(command.GetArg(1), out int level) && level >= 0) + { + GlobalConfig.DroppedNadesBoostLevel = level; + string message = $"Dropped Nades Boost Level set to {level} ({GlobalConfig.GetDroppedNadesCount(5)} grenades)!"; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + else + { + string message = "Invalid level! Use 0 or higher."; + if (caller != null && caller.IsValid) + { + caller.PrintToChat(message); + } + else + { + Server.PrintToChatAll(message); + } + } + } +} diff --git a/Cs2SuperPowersPluginDependencyInjection.cs b/Cs2SuperPowersPluginDependencyInjection.cs new file mode 100644 index 0000000..0e66bb9 --- /dev/null +++ b/Cs2SuperPowersPluginDependencyInjection.cs @@ -0,0 +1,48 @@ +using CounterStrikeSharp.API.Core; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Powers; +using Cs2SuperPowers.Powers.Assign; +using Microsoft.Extensions.DependencyInjection; + +namespace Cs2SuperPowers; + +public class Cs2SuperPowersPluginDependencyInjection : IPluginServiceCollection +{ + public void ConfigureServices(IServiceCollection services) + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + // mine + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(); + services.AddSingleton(); + } +} diff --git a/GlobalConfig.cs b/GlobalConfig.cs new file mode 100644 index 0000000..42003fa --- /dev/null +++ b/GlobalConfig.cs @@ -0,0 +1,48 @@ +namespace Cs2SuperPowers; + +public static class GlobalConfig +{ + public static bool NoDelayEnabled { get; set; } = false; + + // Boost levels stack linearly: level 0 = base value, level 1 = 2x, level 2 = 3x, etc. + public static int GrenadeLauncherBoostLevel { get; set; } = 0; + public static int NotSoDecoyBoostLevel { get; set; } = 0; + public static int AirStrikeBoostLevel { get; set; } = 0; + public static int DroppedNadesBoostLevel { get; set; } = 0; + + public static int GetGrenadeLauncherCount(int baseCount) + { + return GetBoostedCount(baseCount, GrenadeLauncherBoostLevel); + } + + public static int GetNotSoDecoyCount(int baseCount) + { + return GetBoostedCount(baseCount, NotSoDecoyBoostLevel); + } + + public static int GetAirStrikeCount(int baseCount) + { + return GetBoostedCount(baseCount, AirStrikeBoostLevel); + } + + public static int GetDroppedNadesCount(int baseCount) + { + return GetBoostedCount(baseCount, DroppedNadesBoostLevel); + } + + private static int GetBoostedCount(int baseCount, int level) + { + if (baseCount <= 0) + { + return 0; + } + + if (level <= 0) + { + return baseCount; + } + + long boostedCount = (long)baseCount * (level + 1L); + return boostedCount > int.MaxValue ? int.MaxValue : (int)boostedCount; + } +} diff --git a/ISuperPower.cs b/ISuperPower.cs new file mode 100644 index 0000000..265fff8 --- /dev/null +++ b/ISuperPower.cs @@ -0,0 +1,17 @@ +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers; + +public interface ISuperPower +{ + int Id { get; } + string Name { get; } + string Description { get; } + char ChatColor { get; } + bool CanBeRandomlyAssigned { get; } + int MinimumPlayersRequired { get; } + + void Initialize(BasePlugin pluginRef); + void AssignToPlayer(CCSPlayerController player, bool showMessages); + void UnassignFromPlayer(CCSPlayerController player); +} diff --git a/PlayerPowers.cs b/PlayerPowers.cs new file mode 100644 index 0000000..a89bdfe --- /dev/null +++ b/PlayerPowers.cs @@ -0,0 +1,42 @@ +using CounterStrikeSharp.API.Core; +using Cs2SuperPowers.Powers; + +namespace Cs2SuperPowers; + +public class PlayerPowers +{ + private static PlayerPowers? _instance; + public static PlayerPowers Instance => _instance ??= new PlayerPowers(); + + private readonly IDictionary _superPowers + = new Dictionary(); + + public void RemovePower(CCSPlayerController player) + { + if (!_superPowers.TryGetValue(player, out var superPower)) return; + + superPower.UnassignFromPlayer(player); + _superPowers.Remove(player); + } + + public void AddPower(CCSPlayerController player, ISuperPower superPower, bool showMessages) + { + if (_superPowers.TryGetValue(player, out var existingSuperPower)) + { + existingSuperPower.UnassignFromPlayer(player); + _superPowers.Remove(player); + }; + + superPower.AssignToPlayer(player, showMessages); + _superPowers.Add(player, superPower); + } + + public bool TryGetValue(CCSPlayerController attacker, out ISuperPower? power) + => _superPowers.TryGetValue(attacker, out power); + + public IEnumerable<(CCSPlayerController Player, ISuperPower Power)> GetAssignedPowers() + => _superPowers.Select(x => (x.Key, x.Value)); + + public IEnumerable GetPlayersWithPower(ISuperPower power) + => GetAssignedPowers().Where(x => x.Power.Id == power.Id).Select(x => x.Player); +} \ No newline at end of file diff --git a/Players/Ensure.cs b/Players/Ensure.cs new file mode 100644 index 0000000..7130524 --- /dev/null +++ b/Players/Ensure.cs @@ -0,0 +1,26 @@ +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Players; + +public static class Ensure +{ + public static ValidationBuilder Player(CCSPlayerController? player) + { + return new ValidationBuilder(player); + } +} + +public class ValidationBuilder(TEntity? entity) +{ + private readonly Queue> _validations = new(); + + public void Add(IValidation validation) + { + _validations.Enqueue(validation); + } + + public bool Check() + { + return _validations.All(v => v.Validate(entity)); + } +} \ No newline at end of file diff --git a/Players/IPlayerHud.cs b/Players/IPlayerHud.cs new file mode 100644 index 0000000..a5c820b --- /dev/null +++ b/Players/IPlayerHud.cs @@ -0,0 +1,8 @@ +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Players; + +public interface IPlayerHud { + void Initialize(BasePlugin pluginRef); + void ShowMessage(CCSPlayerController player, string message, TimeSpan? duration = null); +} \ No newline at end of file diff --git a/Players/IValidation.cs b/Players/IValidation.cs new file mode 100644 index 0000000..4ea2547 --- /dev/null +++ b/Players/IValidation.cs @@ -0,0 +1,6 @@ +namespace Cs2SuperPowers.Players; + +public interface IValidation +{ + bool Validate(TEntity? entity); +} \ No newline at end of file diff --git a/Players/PlayerControllerExtensions.cs b/Players/PlayerControllerExtensions.cs new file mode 100644 index 0000000..ff52c38 --- /dev/null +++ b/Players/PlayerControllerExtensions.cs @@ -0,0 +1,54 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Players; + +public static class PlayerControllerExtensions +{ + public static CCSPlayerController SetNewHealth(this CCSPlayerController player, int health) + { + var pawn = player.PlayerPawn.Value; + if (pawn == null) return player; + + player.MaxHealth = health; + pawn.MaxHealth = health; + + player.Health = health; + pawn.Health = health; + + Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth"); + return player; + } + + public static CCSPlayerController SetMaxHealth(this CCSPlayerController player, int maxHealth) + { + var pawn = player.PlayerPawn.Value; + if (pawn == null) return player; + + player.MaxHealth = maxHealth; + pawn.MaxHealth = maxHealth; + + player.Health = Math.Min(maxHealth, player.Health); + pawn.Health = Math.Min(maxHealth, pawn.Health);; + + Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth"); + return player; + } + + public static float GetSpeed(this CCSPlayerController player) + { + var pawn = player.PlayerPawn.Value; + if (pawn == null) return 1.0f; + return pawn.VelocityModifier; + } + + public static CCSPlayerController SetNewSpeed(this CCSPlayerController player, float speed) + { + var pawn = player.PlayerPawn.Value; + if (pawn == null) return player; + + pawn.VelocityModifier = speed; + Utilities.SetStateChanged(pawn, "CCSPlayer_MovementServices", "m_flVelocityModifier"); + return player; + } +} \ No newline at end of file diff --git a/Players/PlayerHud.cs b/Players/PlayerHud.cs new file mode 100644 index 0000000..6f776a0 --- /dev/null +++ b/Players/PlayerHud.cs @@ -0,0 +1,61 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Players; + +public class PlayerHud : IPlayerHud +{ + private readonly Dictionary _playerMessages = new(); + private readonly List _registeredDelegates = new(); + + public void Initialize(BasePlugin pluginRef) + { + Listeners.OnTick onTickListener = OnTick; + _registeredDelegates.Add(onTickListener); + pluginRef.RegisterListener(onTickListener); + } + + public void ShowMessage(CCSPlayerController player, string message, TimeSpan? duration = null) + { + duration ??= TimeSpan.FromSeconds(10); + if (_playerMessages.ContainsKey(player)) + { + _playerMessages.Remove(player); + } + _playerMessages.Add(player, new DisposableMessage(message, DateTime.UtcNow.Add(duration.Value))); + } + + private void OnTick() + { + var toRemove = new List(); + + foreach (var playerMessage in _playerMessages.ToList()) + { + if (playerMessage.Value.DisplayUntil >= DateTime.UtcNow) + { + playerMessage.Key.PrintToCenterHtml(playerMessage.Value.Message); + } + else + { + toRemove.Add(playerMessage.Key); + } + } + + foreach (var player in toRemove) + { + Action? wrappedCallback = null; + wrappedCallback = () => + { + _playerMessages.Remove(player); + if (wrappedCallback != null) + { + _registeredDelegates.Remove(wrappedCallback); + } + }; + _registeredDelegates.Add(wrappedCallback); + Server.NextFrame(wrappedCallback); + } + } +} + +record DisposableMessage(string Message, DateTime DisplayUntil); \ No newline at end of file diff --git a/Players/PlayerValidations/IsAlive.cs b/Players/PlayerValidations/IsAlive.cs new file mode 100644 index 0000000..4c455ab --- /dev/null +++ b/Players/PlayerValidations/IsAlive.cs @@ -0,0 +1,20 @@ +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Players.PlayerValidations; + +public class IsAlive : IValidation +{ + public bool Validate(CCSPlayerController? player) + { + return player?.PlayerPawn.Value?.LifeState == (byte)LifeState_t.LIFE_ALIVE; + } +} + +public static class IsAliveExtensions +{ + public static ValidationBuilder IsAlive(this ValidationBuilder builder) + { + builder.Add(new IsAlive()); + return builder; + } +} \ No newline at end of file diff --git a/Players/PlayerValidations/IsValid.cs b/Players/PlayerValidations/IsValid.cs new file mode 100644 index 0000000..ea886c0 --- /dev/null +++ b/Players/PlayerValidations/IsValid.cs @@ -0,0 +1,20 @@ +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Players.PlayerValidations; + +public class IsValid : IValidation +{ + public bool Validate(CCSPlayerController? player) + { + return player?.IsValid == true; + } +} + +public static class IsValidExtensions +{ + public static ValidationBuilder IsValid(this ValidationBuilder builder) + { + builder.Add(new IsValid()); + return builder; + } +} diff --git a/Powers/AirStrike.cs b/Powers/AirStrike.cs new file mode 100644 index 0000000..01d5563 --- /dev/null +++ b/Powers/AirStrike.cs @@ -0,0 +1,124 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; +using Cs2SuperPowers.Utils; + +namespace Cs2SuperPowers.Powers; + +public class AirStrike(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 21; + public override string Name => "Air Strike"; + + public override string Description => "Decoys thrown by you launch an airstrike (5 second cooldown)."; + + public override char ChatColor => ChatColors.Red; + + public override string HtmlColor => "#FF0000"; + + private readonly Dictionary _lastUse = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnDecoyStarted); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + _lastUse.Clear(); + + foreach (var player in Utilities.GetPlayers()) + { + if (!Ensure.Player(player).IsValid().IsAlive().Check() || !IsAssignedTo(player!)) + { + continue; + } + + NextFrame(() => + { + player.GiveNamedItem("weapon_decoy"); + }); + } + + return HookResult.Continue; + } + + private HookResult OnDecoyStarted(EventDecoyStarted @event, GameEventInfo _) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + // Check cooldown (skip if nodelay is enabled) + var now = DateTime.UtcNow; + DateTime lastUseTime = default; + bool isOnCooldown = !GlobalConfig.NoDelayEnabled && _lastUse.TryGetValue(player!, out lastUseTime) && (now - lastUseTime).TotalSeconds < 5; + + // Always give a new decoy, regardless of cooldown! + player!.GiveNamedItem("weapon_decoy"); + + if (isOnCooldown) + { + double secondsRemaining = Math.Ceiling(5 - (now - lastUseTime).TotalSeconds); + player.PrintToCenterAlert($"Air Strike is on cooldown! {ChatColors.DarkRed}{secondsRemaining}{ChatColors.Default}s remaining"); + return HookResult.Continue; + } + _lastUse[player!] = now; + + var pos = new Vector(@event.X, @event.Y, @event.Z); + + // Airstrike: spawn grenades above the target, spread over an area, falling down + var random = new Random(); + int grenadeCount = GlobalConfig.GetAirStrikeCount(20); + float airstrikeHeight = 800.0f; // Height above the detonation point + float spreadRadius = 300.0f; // How far from the center grenades can land + + for (int i = 0; i < grenadeCount; i++) + { + // Random offset in a circle around the target + double angle = random.NextDouble() * 2 * Math.PI; + double radius = Math.Sqrt(random.NextDouble()) * spreadRadius; // sqrt for uniform distribution + + float offsetX = (float)(Math.Cos(angle) * radius); + float offsetY = (float)(Math.Sin(angle) * radius); + + // Spawn position: above the ground, with random spread + var spawnPos = new Vector( + pos.X + offsetX, + pos.Y + offsetY, + pos.Z + airstrikeHeight + (float)(random.NextDouble() * 100.0 - 50.0) // small vertical variation + ); + + // Angle: straight down, maybe with a little randomization + float pitch = -90f + (float)(random.NextDouble() * 10.0 - 5.0); // -90 is straight down + float yaw = (float)(random.NextDouble() * 360.0); + var ang = new QAngle(pitch, yaw, 0); + + // Velocity: mostly downward, with a little horizontal for realism + float downwardSpeed = (float)(random.NextDouble() * 200.0 + 800.0); // 800-1000 units/sec down + float horizontalSpeed = (float)(random.NextDouble() * 100.0); // up to 100 units/sec sideways + + // Calculate horizontal direction + float horizAngle = (float)(random.NextDouble() * 2 * Math.PI); + var horizontal = new Vector( + (float)Math.Cos(horizAngle) * horizontalSpeed, + (float)Math.Sin(horizAngle) * horizontalSpeed, + 0 + ); + + var velocity = new Vector( + horizontal.X, + horizontal.Y, + -downwardSpeed + ); + + var createdGrenade = GrenadeSpawner.CreateGrenade(spawnPos, ang, velocity, player.PlayerPawn.Value); + } + return HookResult.Continue; + } +} \ No newline at end of file diff --git a/Powers/ArmBreaker.cs b/Powers/ArmBreaker.cs new file mode 100644 index 0000000..13d7873 --- /dev/null +++ b/Powers/ArmBreaker.cs @@ -0,0 +1,65 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class ArmBreaker(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 6; + public override string Name => "Arms Breaker"; + + public override string Description => $"You have 25% chance to disarm victim on hit."; + + public override char ChatColor => ChatColors.LightBlue; + + private readonly Random _random = new(); + + public override string HtmlColor => "#D6E6FF"; + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if ( + !Ensure.Player(victim).IsValid().IsAlive().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + // Check for at least 1 player in the opposing team + var attackerTeam = attacker!.Team; + var enemyCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator && p.Team != attackerTeam); + if (enemyCount < 1) + { + return HookResult.Continue; + } + + if (_random.NextDouble() <= 0.25) + { + var weaponServices = victim!.PlayerPawn?.Value?.WeaponServices; + if (weaponServices?.MyWeapons == null) return HookResult.Continue; + + foreach (var weapon in weaponServices.MyWeapons) + { + var weaponName = weapon.Value?.DesignerName; + if (weaponName != null && !weaponName.Contains("weapon_knife") && !weaponName.Contains("weapon_c4")) + { + victim.DropActiveWeapon(); + } + } + } + return HookResult.Continue; + } +} \ No newline at end of file diff --git a/Powers/Assign/IPowerAssignLogic.cs b/Powers/Assign/IPowerAssignLogic.cs new file mode 100644 index 0000000..8ff9c05 --- /dev/null +++ b/Powers/Assign/IPowerAssignLogic.cs @@ -0,0 +1,8 @@ +using CounterStrikeSharp.API.Core; + +namespace Cs2SuperPowers.Powers.Assign; + +public interface IPowerAssignLogic +{ + void Initialize(BasePlugin pluginRef, IReadOnlyCollection powers); +} \ No newline at end of file diff --git a/Powers/Assign/RandomAssignLogic.cs b/Powers/Assign/RandomAssignLogic.cs new file mode 100644 index 0000000..0b767d5 --- /dev/null +++ b/Powers/Assign/RandomAssignLogic.cs @@ -0,0 +1,149 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers.Assign; + +public class RandomAssignLogic : IPowerAssignLogic +{ + // Configuration for special rounds + private const double SpecialRoundChance = 0.25; + + // Powers that can be assigned during special rounds (everyone gets the same power) + private readonly string[] SpecialRoundPowers = + { + "Go Fast", "Grenade Launcher", "Air Strike", "Not So Decoy", "I Am Chicken!" + }; + + private readonly List _registeredHandlers = new(); + + public void Initialize(BasePlugin pluginRef, IReadOnlyCollection powers) + { + BasePlugin.GameEventHandler disconnectHandler = (@event, _) => + { + var player = @event.Userid; + + if (!Ensure.Player(player).IsValid().Check()) return HookResult.Continue; + PlayerPowers.Instance.RemovePower(player!); + + return HookResult.Continue; + }; + _registeredHandlers.Add(disconnectHandler); + pluginRef.RegisterEventHandler(disconnectHandler); + + + BasePlugin.GameEventHandler roundStartHandler = (_, _) => + { + var gameRules = Utilities + .FindAllEntitiesByDesignerName("cs_gamerules") + .Single() + .As() + .GameRules!; + + if (gameRules.WarmupPeriod) + { + return HookResult.Continue; + } + + var activePlayerCount = Utilities.GetPlayers().Count(player => + player.IsValid && player.Team != CsTeam.None && player.Team != CsTeam.Spectator); + var randomAssignablePowers = powers + .Where(p => p.CanBeRandomlyAssigned && p.MinimumPlayersRequired <= activePlayerCount) + .ToArray(); + if (randomAssignablePowers.Length == 0) + { + return HookResult.Continue; + } + + var random = new Random(); + var isSpecialRound = random.NextDouble() < SpecialRoundChance; + + if (isSpecialRound) + { + // Special round: everyone gets the same power + var specialRoundCandidates = randomAssignablePowers + .Where(p => SpecialRoundPowers.Contains(p.Name)) + .ToArray(); + var specialPower = specialRoundCandidates.Length == 0 + ? null + : specialRoundCandidates[random.Next(specialRoundCandidates.Length)]; + + if (specialPower != null) + { + // Assign the same power to all players (without individual messages) + foreach (var player in Utilities.GetPlayers()) + { + if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None) continue; + PlayerPowers.Instance.AddPower(player!, specialPower, showMessages: false); + } + + // Announce special round to all players + Server.PrintToChatAll($"{ChatColors.Gold}SPECIAL ROUND!{ChatColors.Default}"); + Server.PrintToChatAll($"{ChatColors.Yellow}Everyone has the same power: {ChatColors.Default}{specialPower.ChatColor}{specialPower.Name}{ChatColors.Default}"); + } + else + { + // Fallback to normal assignment if special power not found + foreach (var player in Utilities.GetPlayers()) + { + if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None) continue; + var randomPower = randomAssignablePowers.OrderBy(_ => random.Next()).First(); + PlayerPowers.Instance.AddPower(player!, randomPower, showMessages: true); + } + } + } + else + { + // Normal round: random powers for each player + foreach (var player in Utilities.GetPlayers()) + { + if (player.Team == CsTeam.Spectator || player.Team == CsTeam.None) continue; + var randomPower = randomAssignablePowers.OrderBy(_ => random.Next()).First(); + PlayerPowers.Instance.AddPower(player!, randomPower, showMessages: true); + } + + // Show individual powers to each team + foreach (var player in Utilities.GetPlayers()) + { + var team = player.Team; + + player.PrintToChat($"Your {ChatColors.Blue}Team {ChatColors.Default}powers are:"); + PlayerPowers.Instance + .GetAssignedPowers() + .Where(x => x.Player.Team == team) + .Select(x => { + player.PrintToChat($"{ChatColors.DarkRed} ► {x.Player.PlayerName} {ChatColors.Default}: {x.Power.ChatColor}{x.Power.Name}"); + return x; + }) + .ToList(); + } + } + + return HookResult.Continue; + }; + _registeredHandlers.Add(roundStartHandler); + pluginRef.RegisterEventHandler(roundStartHandler, HookMode.Pre); + + BasePlugin.GameEventHandler deathHandler = (@event, _) => + { + var victim = @event.Userid; + var attacker = @event.Attacker; + + if (victim == null || attacker == null || victim == attacker) return HookResult.Continue; + + if (!PlayerPowers.Instance.TryGetValue(attacker, out var attackerPower)) + { + return HookResult.Continue; + } + + victim.PrintToChat($"You have been killed by {ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime}"); + victim.PrintToChat($"His/her super power was: {attackerPower!.ChatColor}{attackerPower.Name}"); + + return HookResult.Continue; + }; + _registeredHandlers.Add(deathHandler); + pluginRef.RegisterEventHandler(deathHandler); + } +} diff --git a/Powers/BasePower.cs b/Powers/BasePower.cs new file mode 100644 index 0000000..8964e51 --- /dev/null +++ b/Powers/BasePower.cs @@ -0,0 +1,110 @@ +using System.Text; +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Events; +using Cs2SuperPowers.Players; + +namespace Cs2SuperPowers.Powers; + +public abstract class BasePower(IPlayerHud playerHud) : ISuperPower +{ + private readonly HashSet _playerIds = new(); + + protected BasePlugin? Plugin { get; private set; } + + public abstract int Id { get; } + public abstract string Name { get; } + public abstract string Description { get; } + public abstract char ChatColor { get; } + public abstract string HtmlColor { get; } + public virtual bool CanBeRandomlyAssigned => true; + public virtual int MinimumPlayersRequired => 0; + + public void Initialize(BasePlugin pluginRef) + { + Plugin = pluginRef; + OnInitialize(); + } + + protected abstract void OnInitialize(); + + public virtual void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + _playerIds.Add(player.SteamID); + + if (showMessages) + { + player.PrintToChat($"You have been granted the power of {ChatColor}{Name}"); + player.PrintToChat(Description); + + var centerMessageBuilder = new StringBuilder(); + centerMessageBuilder.Append("Your superpower:
"); + centerMessageBuilder.Append($"{Name}
"); + centerMessageBuilder.Append($"{Description}
"); + playerHud.ShowMessage(player, centerMessageBuilder.ToString(), TimeSpan.FromSeconds(10)); + } + } + + public virtual void UnassignFromPlayer(CCSPlayerController player) + { + _playerIds.Remove(player.SteamID); + } + + private readonly List _registeredDelegates = new(); + + protected void RegisterEventHandler(BasePlugin.GameEventHandler handler, HookMode hookMode = HookMode.Post) + where T : GameEvent + { + _registeredDelegates.Add(handler); + Plugin!.RegisterEventHandler(handler, hookMode); + } + + protected void RegisterListener(T handler) where T : Delegate + { + _registeredDelegates.Add(handler); + Plugin!.RegisterListener(handler); + } + + protected void AddTimer(float seconds, Action callback, bool repeat = false) + { + if (repeat) + { + _registeredDelegates.Add(callback); + Plugin!.AddTimer(seconds, callback); + } + else + { + Action? wrappedCallback = null; + wrappedCallback = () => + { + callback(); + if (wrappedCallback != null) + { + _registeredDelegates.Remove(wrappedCallback); + } + }; + _registeredDelegates.Add(wrappedCallback); + Plugin!.AddTimer(seconds, wrappedCallback); + } + } + + protected void NextFrame(Action callback) + { + Action? wrappedCallback = null; + wrappedCallback = () => + { + callback(); + if (wrappedCallback != null) + { + _registeredDelegates.Remove(wrappedCallback); + } + }; + _registeredDelegates.Add(wrappedCallback); + Server.NextFrame(wrappedCallback); + } + + protected bool IsAssignedTo(CCSPlayerController player) + { + return _playerIds.Contains(player.SteamID); + } +} diff --git a/Powers/BlindingLight.cs b/Powers/BlindingLight.cs new file mode 100644 index 0000000..7fb9ee3 --- /dev/null +++ b/Powers/BlindingLight.cs @@ -0,0 +1,156 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Core.Attributes; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; +using Microsoft.Extensions.Logging; + +namespace Cs2SuperPowers.Powers; + +public class BlindingLight(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 22; + public override string Name => "Blinding Light"; + + public override string Description => $"Inflict a blinding flash of light that disorients enemies. Press E (Use) to activate the power."; + + public override char ChatColor => ChatColors.BlueGrey; + + public override string HtmlColor => "#cdcece"; + + private readonly List _registrations = new(); + + private const int SecondsBetweenActivations = 8; + + public override void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + base.AssignToPlayer(player, showMessages); + if (!_registrations.Any(r => r.Player == player)) + { + _registrations.Add(new BlindingLightInfo(player, DateTime.MinValue)); + } + Plugin!.Logger.LogInformation("BlindingLight assigned to {PlayerName} ({SteamID})", player.PlayerName, player.SteamID); + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + var registration = _registrations.FirstOrDefault(r => r.Player == player); + if (registration != null) + { + _registrations.Remove(registration); + } + Plugin!.Logger.LogInformation("BlindingLight unassigned from {PlayerName} ({SteamID})", player.PlayerName, player.SteamID); + } + + protected override void OnInitialize() + { + RegisterListener(OnTick); + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerDeath); + Plugin!.Logger.LogInformation("BlindingLight initialized!"); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) + { + var player = @event.Userid; + var registration = _registrations + .FirstOrDefault(r => r.Player == player); + if (registration != null) + { + registration.WasUsePressedLastTick = false; + } + return HookResult.Continue; + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) + { + _registrations.Clear(); + foreach (var player in PlayerPowers.Instance.GetPlayersWithPower(this)) + { + _registrations.Add(new BlindingLightInfo(player, DateTime.MinValue)); + } + Plugin!.Logger.LogInformation("BlindingLight: Round start, registered {Count} players", _registrations.Count); + return HookResult.Continue; + } + + private void OnTick() + { + foreach (var registration in _registrations.ToList()) + { + if (!Ensure.Player(registration.Player).IsValid().Check()) + { + _registrations.Remove(registration); + continue; + } + + var usePressed = registration.Player.Buttons.HasFlag(PlayerButtons.Use); + var canUsePower = (DateTime.UtcNow - registration.LastUse).TotalSeconds > SecondsBetweenActivations; + + if (usePressed && !registration.WasUsePressedLastTick) + { + Plugin!.Logger.LogInformation("BlindingLight: {PlayerName} pressed use! CanUse: {CanUse}", registration.Player.PlayerName, canUsePower); + if (canUsePower) + { + ActivatePower(registration); + } + else + { + var secondsBeforeNextUse = + SecondsBetweenActivations - (int)(DateTime.UtcNow - registration.LastUse).TotalSeconds; + registration.Player + .PrintToCenterAlert($"You need to wait {ChatColors.DarkRed}{secondsBeforeNextUse} {ChatColors.Default}seconds before using the power."); + } + } + + registration.WasUsePressedLastTick = usePressed; + } + } + + private void ActivatePower(BlindingLightInfo registration) + { + // Check for at least 1 player in the opposing team + var playerTeam = registration.Player.Team; + var enemyCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator && p.Team != playerTeam); + Plugin!.Logger.LogInformation("BlindingLight: Activating for {PlayerName}, enemy count: {EnemyCount}", registration.Player.PlayerName, enemyCount); + + if (enemyCount < 1) + { + return; + } + + var flashProjectile = Utilities.CreateEntityByName("flashbang_projectile"); + if (flashProjectile == null || !flashProjectile.IsValid) + { + Plugin!.Logger.LogError("BlindingLight: Failed to create flashbang projectile!"); + return; + } + + var player = registration.Player; + var pos = player.PlayerPawn.Value!.AbsOrigin; + pos!.Z += 10; + + flashProjectile.TicksAtZeroVelocity = 100; + flashProjectile.TeamNum = player.TeamNum; + flashProjectile.Teleport(pos, null, new Vector(0, 0, -10)); + flashProjectile.DispatchSpawn(); + flashProjectile.AcceptInput("InitializeSpawnFromWorld", player.PlayerPawn.Value, player.PlayerPawn.Value); + flashProjectile.DetonateTime = 0; + + Plugin!.Logger.LogInformation("BlindingLight: Flashbang created and detonated!"); + registration.UpdateUse(); + } +} + +public record BlindingLightInfo(CCSPlayerController Player, DateTime LastUse) +{ + public DateTime LastUse { get; private set; } = LastUse; + public bool WasUsePressedLastTick { get; set; } = false; + + public void UpdateUse() + { + LastUse = DateTime.UtcNow; + } +} diff --git a/Powers/BulletStorm.cs b/Powers/BulletStorm.cs new file mode 100644 index 0000000..d6cb52b --- /dev/null +++ b/Powers/BulletStorm.cs @@ -0,0 +1,57 @@ +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class BulletStorm(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 13; + public override string Name => "Bullet Storm"; + + public override string Description => $"Gain effectively unlimited reserve ammo so you can keep reloading without ever running dry."; + + public override char ChatColor => ChatColors.Olive; + + public override string HtmlColor => "#0000FF"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnWeaponFire); + RegisterEventHandler(OnWeaponReload); + } + + private HookResult OnWeaponFire(EventWeaponFire @event, GameEventInfo info) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + RefillReserveAmmo(player!); + return HookResult.Continue; + } + + private HookResult OnWeaponReload(EventWeaponReload @event, GameEventInfo info) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + RefillReserveAmmo(player!); + return HookResult.Continue; + } + + private static void RefillReserveAmmo(CCSPlayerController player) + { + var activeWeaponHandle = player.PlayerPawn.Value?.WeaponServices?.ActiveWeapon; + if (activeWeaponHandle?.Value != null) + { + activeWeaponHandle.Value.ReserveAmmo[0] = 999; + } + } +} diff --git a/Powers/DoubleJump.cs b/Powers/DoubleJump.cs new file mode 100644 index 0000000..8109f5c --- /dev/null +++ b/Powers/DoubleJump.cs @@ -0,0 +1,127 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class DoubleJump(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 28; + public override string Name => "Double Jump"; + public override string Description => "Jump again in mid-air! A classic double jump ability."; + public override char ChatColor => ChatColors.Blue; + public override string HtmlColor => "#0000FF"; + + private readonly Dictionary _canDoubleJump = new(); + private readonly Dictionary _wasOnGround = new(); + private readonly Dictionary _requireJumpRelease = new(); + + protected override void OnInitialize() + { + RegisterListener(OnTick); + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + _canDoubleJump.Clear(); + _wasOnGround.Clear(); + _requireJumpRelease.Clear(); + return HookResult.Continue; + } + + public override void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + base.AssignToPlayer(player, showMessages); + _canDoubleJump[player] = true; + _wasOnGround[player] = true; + _requireJumpRelease[player] = false; + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + _canDoubleJump.Remove(player); + _wasOnGround.Remove(player); + _requireJumpRelease.Remove(player); + } + + private void OnTick() + { + foreach (var player in Utilities.GetPlayers()) + { + if (!player.IsValid || !player.PawnIsAlive) + continue; + + if (!IsAssignedTo(player)) + continue; + + var pawn = player.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid) + continue; + + var isOnGround = pawn.GroundEntity.IsValid; + var jumpPressed = player.Buttons.HasFlag(PlayerButtons.Jump); + var wasOnGroundLastTick = _wasOnGround.GetValueOrDefault(player, true); + + if (isOnGround) + { + _canDoubleJump[player] = true; + _requireJumpRelease[player] = false; + } + else if (wasOnGroundLastTick) + { + _canDoubleJump[player] = true; + _requireJumpRelease[player] = jumpPressed; + } + + if (!isOnGround && !jumpPressed) + { + _requireJumpRelease[player] = false; + } + + if (!isOnGround && + jumpPressed && + !_requireJumpRelease.GetValueOrDefault(player, false) && + _canDoubleJump.GetValueOrDefault(player, false)) + { + var velocity = pawn.AbsVelocity; + velocity.Z = Math.Max(velocity.Z, 300.0f); + pawn.Teleport(pawn.AbsOrigin, null, velocity); + _canDoubleJump[player] = false; + _requireJumpRelease[player] = true; + } + + _wasOnGround[player] = isOnGround; + } + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var victim = @event.Userid; + if (!Ensure.Player(victim).IsValid().Check() || !IsAssignedTo(victim!)) + { + return HookResult.Continue; + } + + bool isWorldDamage = !Ensure.Player(@event.Attacker).IsValid().Check(); + bool hasNoWeapon = string.IsNullOrEmpty(@event.Weapon); + + if (!isWorldDamage || !hasNoWeapon) + { + return HookResult.Continue; + } + + var pawn = victim!.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid) + { + return HookResult.Continue; + } + + pawn.Health = Math.Min(pawn.MaxHealth, pawn.Health + @event.DmgHealth); + return HookResult.Stop; + } +} diff --git a/Powers/DroppedNades.cs b/Powers/DroppedNades.cs new file mode 100644 index 0000000..f7a12a4 --- /dev/null +++ b/Powers/DroppedNades.cs @@ -0,0 +1,110 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class DroppedNades(IPlayerHud playerHud) : BasePower(playerHud) +{ + private readonly Dictionary _lastUse = new(); + + public override int Id => 34; + public override string Name => "Dropped Nades"; + public override string Description => "MAG-7 shots drop 5 grenades on the ground. This power is force-only."; + public override char ChatColor => ChatColors.DarkRed; + public override string HtmlColor => "#AA0000"; + public override bool CanBeRandomlyAssigned => false; + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnWeaponFire); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) + { + _lastUse.Clear(); + return HookResult.Continue; + } + + private HookResult OnWeaponFire(EventWeaponFire @event, GameEventInfo info) + { + var controller = @event.Userid; + if (!Ensure.Player(controller).IsValid().Check() || !IsAssignedTo(controller!)) + { + return HookResult.Continue; + } + + var pawn = controller!.PlayerPawn.Value; + var weapon = pawn?.WeaponServices?.ActiveWeapon.Value; + if (pawn == null || !pawn.IsValid || weapon == null || weapon.DesignerName != "weapon_mag7") + { + return HookResult.Continue; + } + + var now = DateTime.UtcNow; + if (!GlobalConfig.NoDelayEnabled && + _lastUse.TryGetValue(controller, out var lastUseTime) && + (now - lastUseTime).TotalSeconds < 0.35) + { + return HookResult.Continue; + } + + _lastUse[controller] = now; + + var origin = pawn.AbsOrigin; + if (origin == null) + { + return HookResult.Continue; + } + + int grenadeCount = GlobalConfig.GetDroppedNadesCount(5); + var random = new Random(); + var viewAngle = pawn.V_angle; + float baseYawRad = viewAngle.Y * MathF.PI / 180f; + var forward = new Vector(MathF.Cos(baseYawRad), MathF.Sin(baseYawRad), 0.0f); + var right = new Vector(-forward.Y, forward.X, 0.0f); + + int droppedGrenades = 0; + int attempts = 0; + int maxAttempts = grenadeCount + 8; + + while (droppedGrenades < grenadeCount && attempts < maxAttempts) + { + int i = attempts; + attempts++; + float lateralOffset = (float)(random.NextDouble() * 18.0 - 9.0); + float forwardOffset = (float)(random.NextDouble() * 12.0 + 16.0); + var spawnPos = new Vector( + origin.X + forward.X * forwardOffset + right.X * lateralOffset, + origin.Y + forward.Y * forwardOffset + right.Y * lateralOffset, + origin.Z + 10.0f + ); + + float yaw = viewAngle.Y + (float)(random.NextDouble() * 16.0 - 8.0); + var angle = new QAngle(8.0f, yaw, 0.0f); + var velocity = new Vector( + forward.X * (float)(random.NextDouble() * 40.0 + 45.0) + right.X * (float)(random.NextDouble() * 16.0 - 8.0), + forward.Y * (float)(random.NextDouble() * 40.0 + 45.0) + right.Y * (float)(random.NextDouble() * 16.0 - 8.0), + (float)(random.NextDouble() * 12.0 + 8.0) + ); + + var grenadeWeapon = controller.GiveNamedItem("weapon_hegrenade"); + if (grenadeWeapon == null || !grenadeWeapon.IsValid) + { + continue; + } + + if (grenadeWeapon.IsHeldByPlayer) + { + continue; + } + + grenadeWeapon.Teleport(spawnPos, angle, velocity); + droppedGrenades++; + } + return HookResult.Continue; + } +} diff --git a/Powers/ExplosiveBullets.cs b/Powers/ExplosiveBullets.cs new file mode 100644 index 0000000..b89c099 --- /dev/null +++ b/Powers/ExplosiveBullets.cs @@ -0,0 +1,70 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Utils; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class ExplosiveBullets(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 30; + public override string Name => "Explosive Bullets"; + public override string Description => "Every bullet hit causes a small explosion."; + public override char ChatColor => ChatColors.Orange; + public override string HtmlColor => "#FF4500"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if (!Ensure.Player(attacker).IsValid().Check() || + !Ensure.Player(victim).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + if (string.IsNullOrWhiteSpace(@event.Weapon) || @event.Weapon.Contains("grenade", StringComparison.OrdinalIgnoreCase)) + { + return HookResult.Continue; + } + + var attackerPawn = attacker!.PlayerPawn.Value; + var victimPawn = victim!.PlayerPawn.Value; + if (victimPawn == null || attackerPawn == null) + return HookResult.Continue; + + var pos = victimPawn.AbsOrigin; + if (pos == null) + return HookResult.Continue; + + pos.Z += 20; + + // Create explosion with a small grenade at victim's position + var ang = new QAngle(0, 0, 0); + var velocity = new Vector(0, 0, 0); + + var grenade = GrenadeSpawner.CreateGrenade(pos, ang, velocity, attackerPawn); + + // Detonate it immediately + Server.NextFrame(() => + { + if (grenade != null && grenade.IsValid) + { + grenade.AcceptInput("InitializeSpawnFromWorld", attackerPawn, attackerPawn); + grenade.DetonateTime = 0; + } + }); + + return HookResult.Continue; + } +} diff --git a/Powers/FinalMission.cs b/Powers/FinalMission.cs new file mode 100644 index 0000000..5b2c1a6 --- /dev/null +++ b/Powers/FinalMission.cs @@ -0,0 +1,93 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; +namespace Cs2SuperPowers.Powers; + +public class FinalMission(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 8; + public override string Name => "Final Mission"; + + public override string Description => $"Upon death, unleash a powerful explosion that eliminates all players within a specified radius, turning your sacrifice into a final act of devastation."; + + public override char ChatColor => ChatColors.Purple; + + public override string HtmlColor => "#F5CB42"; + public override int MinimumPlayersRequired => 4; + + private const float ExplosionRadius = 500.0f; + private const int ExplosionDamage = 999; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerDeath); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + // Check for at least 4 valid (non-spectator, non-none) players total + var validPlayerCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator); + if (validPlayerCount < 4) + { + return HookResult.Continue; + } + + var playerPawn = player!.PlayerPawn.Value; + var origin = playerPawn?.AbsOrigin; + if (playerPawn == null || origin == null) + { + return HookResult.Continue; + } + + var explosionCenter = new Vector(origin.X, origin.Y, origin.Z); + Server.NextFrame(() => + { + foreach (var target in Utilities.GetPlayers()) + { + if (!Ensure.Player(target).IsValid().IsAlive().Check()) + { + continue; + } + + var targetPawn = target.PlayerPawn.Value; + var targetOrigin = targetPawn?.AbsOrigin; + if (targetPawn == null || targetOrigin == null) + { + continue; + } + + var deltaX = targetOrigin.X - explosionCenter.X; + var deltaY = targetOrigin.Y - explosionCenter.Y; + var deltaZ = targetOrigin.Z - explosionCenter.Z; + var distanceSquared = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; + if (distanceSquared > ExplosionRadius * ExplosionRadius) + { + continue; + } + + targetPawn.Health = Math.Max(0, targetPawn.Health - ExplosionDamage); + Utilities.SetStateChanged(targetPawn, "CBaseEntity", "m_iHealth"); + } + }); + + Server.PrintToChatAll($"{ChatColors.DarkRed}► {ChatColors.Green} {player.PlayerName}: {ChatColors.Lime}explodes!!!"); + + var fileNames = new[] { "radiobotfallback01", "radiobotfallback02", "radiobotfallback04" }; + AddTimer(0.1f, () => + { + var randomFile = fileNames[new Random().Next(fileNames.Length)]; + player.ExecuteClientCommand($"play vo/agents/balkan/{randomFile}.vsnd"); + }); + + return HookResult.Continue; + } +} diff --git a/Powers/FlashKing.cs b/Powers/FlashKing.cs new file mode 100644 index 0000000..7753818 --- /dev/null +++ b/Powers/FlashKing.cs @@ -0,0 +1,65 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class FlashKing(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 17; + public override string Name => "Flash King"; + + public override string Description => $"With this superpower, your flashbangs blind enemies for three times as long."; + + public override char ChatColor => ChatColors.LightBlue; + + public override string HtmlColor => "#D6E6FF"; + + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerBlinded); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + foreach (var player in Utilities.GetPlayers()) + { + if (!Ensure.Player(player).IsValid().IsAlive().Check() || !IsAssignedTo(player!)) + { + continue; + } + + NextFrame(() => + { + player.GiveNamedItem("weapon_flashbang"); + player.GiveNamedItem("weapon_flashbang"); + }); + } + + return HookResult.Continue; + } + + private HookResult OnPlayerBlinded(EventPlayerBlind @event, GameEventInfo info) + { + var victim = @event.Userid; + var attacker = @event.Attacker; + + if (!Ensure.Player(victim).IsValid().Check() || !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + var playerPawn = victim!.PlayerPawn.Value; + + if (attacker != victim && attacker!.TeamNum != playerPawn!.TeamNum) + { + playerPawn!.FlashDuration = playerPawn!.FlashDuration * 3; + } + + return HookResult.Continue; + } +} \ No newline at end of file diff --git a/Powers/FlashProof.cs b/Powers/FlashProof.cs new file mode 100644 index 0000000..037ea24 --- /dev/null +++ b/Powers/FlashProof.cs @@ -0,0 +1,75 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class FlashProof(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 3; + public override string Name => "Flash Proof"; + + public override string Description => $"You cannot be blind by flashes. You will gain new flash every time your flash explodes."; + + public override char ChatColor => ChatColors.LightBlue; + + public override string HtmlColor => "#D6E6FF"; + + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerBlinded); + RegisterEventHandler(OnFlashbangDetonate); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + foreach (var player in Utilities.GetPlayers()) + { + if (!Ensure.Player(player).IsValid().IsAlive().Check() || !IsAssignedTo(player!)) + { + continue; + } + + NextFrame(() => + { + player.GiveNamedItem("weapon_flashbang"); + player.GiveNamedItem("weapon_flashbang"); + }); + } + + return HookResult.Continue; + } + + private HookResult OnPlayerBlinded(EventPlayerBlind @event, GameEventInfo info) + { + var player = @event.Userid; + + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + var playerPawn = player!.PlayerPawn.Value; + playerPawn!.FlashDuration = 0.0f; + + return HookResult.Continue; + } + + private HookResult OnFlashbangDetonate(EventFlashbangDetonate @event, GameEventInfo info) + { + var player = @event.Userid; + + if (!Ensure.Player(player).IsValid().IsAlive().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + player!.GiveNamedItem("weapon_flashbang"); + + return HookResult.Continue; + } +} \ No newline at end of file diff --git a/Powers/Ghost.cs b/Powers/Ghost.cs new file mode 100644 index 0000000..e6ee855 --- /dev/null +++ b/Powers/Ghost.cs @@ -0,0 +1,192 @@ +using System.Drawing; +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class Ghost(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 7; + public override string Name => "The Ghost"; + + public override string Description => $"You are invisible to other players - but will show up for few seconds after you will take/give damage."; + + public override char ChatColor => ChatColors.White; + + private readonly Random _random = new Random(); + + public override string HtmlColor => "#FFFFFF"; + public override int MinimumPlayersRequired => 4; + + private readonly Dictionary _visibilityTokens = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerHurt); + RegisterEventHandler(OnRoundEnd); + } + + private HookResult OnRoundEnd(EventRoundEnd @event, GameEventInfo info) + { + foreach (var player in PlayerPowers.Instance.GetPlayersWithPower(this)) + { + _visibilityTokens[player.SteamID] = _visibilityTokens.GetValueOrDefault(player.SteamID) + 1; + NextFrame(() => + { + SetPlayerVisibility(player, true); + }); + } + + return HookResult.Continue; + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) + { + var validPlayersWithPower = PlayerPowers.Instance + .GetPlayersWithPower(this) + .Where(player => Ensure.Player(player).IsValid().Check()); + + foreach (var player in validPlayersWithPower) + { + NextFrame(() => + { + SetPlayerVisibility(player, false); + }); + } + + return HookResult.Continue; + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + NextFrame(() => + { + SetPlayerVisibility(player, true); + }); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if (!Ensure.Player(victim).IsValid().IsAlive().Check() || + !Ensure.Player(attacker).IsValid().Check()) + { + return HookResult.Continue; + } + + // Check for at least 4 valid (non-spectator, non-none) players total + var validPlayerCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator); + if (validPlayerCount < 4) + { + return HookResult.Continue; + } + + if (IsAssignedTo(victim!)) + { + RevealGhostTemporarily(victim!); + } + else if (IsAssignedTo(attacker!)) + { + RevealGhostTemporarily(attacker!); + } + + return HookResult.Continue; + } + + private void RevealGhostTemporarily(CCSPlayerController player) + { + if (!Ensure.Player(player).IsValid().IsAlive().Check()) + { + return; + } + + var token = _visibilityTokens.GetValueOrDefault(player.SteamID) + 1; + _visibilityTokens[player.SteamID] = token; + SetPlayerVisibility(player, true); + + AddTimer(_random.Next(1, 5), () => + { + if (!IsAssignedTo(player) || _visibilityTokens.GetValueOrDefault(player.SteamID) != token) + { + return; + } + + SetPlayerVisibility(player, false); + }); + } + + private void SetPlayerVisibility(CCSPlayerController player, bool visible) + { + if (!IsAssignedTo(player) && !visible) + { + return; + } + + var playerPawn = player.PlayerPawn.Value; + if (playerPawn != null) + { + var color = visible + ? Color.FromArgb(255, 255, 255, 255) + : Color.FromArgb(0, 255, 255, 255); + var shadowStrength = visible ? 1.0f : 0.0f; + + playerPawn.Render = color; + playerPawn.ShadowStrength = shadowStrength; + Utilities.SetStateChanged(playerPawn, "CBaseModelEntity", "m_clrRender"); + + var activeWeapon = playerPawn.WeaponServices?.ActiveWeapon.Value; + if (activeWeapon != null && activeWeapon.IsValid) + { + activeWeapon.Render = color; + activeWeapon.ShadowStrength = shadowStrength; + Utilities.SetStateChanged(activeWeapon, "CBaseModelEntity", "m_clrRender"); + } + + var skeleton = playerPawn.CBodyComponent?.SceneNode?.GetSkeletonInstance(); + if (skeleton != null) + { + skeleton.MaterialGroup.Value = visible ? (uint)0 : 1; + } + + var myWeapons = playerPawn.WeaponServices?.MyWeapons; + if (myWeapons != null) + { + foreach (var gun in myWeapons) + { + var weapon = gun.Value; + if (weapon != null) + { + weapon.Render = color; + weapon.ShadowStrength = shadowStrength; + Utilities.SetStateChanged(weapon, "CBaseModelEntity", "m_clrRender"); + } + } + } + + var myWearables = playerPawn.MyWearables; + if (myWearables != null) + { + foreach (var wearableHandle in myWearables) + { + var wearable = wearableHandle.Value; + if (wearable == null || !wearable.IsValid) + { + continue; + } + + wearable.Render = color; + wearable.ShadowStrength = shadowStrength; + Utilities.SetStateChanged(wearable, "CBaseModelEntity", "m_clrRender"); + } + } + } + } +} diff --git a/Powers/GoFast.cs b/Powers/GoFast.cs new file mode 100644 index 0000000..5df5e4d --- /dev/null +++ b/Powers/GoFast.cs @@ -0,0 +1,43 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class GoFast(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 19; + public override string Name => "Go Fast"; + + public override string Description => $"Your movement speed is increased by 50%"; + + public override char ChatColor => ChatColors.Green; + + public override string HtmlColor => "#009905"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + foreach (var player in PlayerPowers.Instance.GetPlayersWithPower(this)) + { + if (!Ensure.Player(player).IsValid().Check()) + { + continue; + } + + NextFrame(() => + { + player.SetNewSpeed(player.GetSpeed() * 1.5f); + player.GravityScale += 5; + }); + } + + return HookResult.Continue; + } +} \ No newline at end of file diff --git a/Powers/GrenadeLauncher.cs b/Powers/GrenadeLauncher.cs new file mode 100644 index 0000000..295df0e --- /dev/null +++ b/Powers/GrenadeLauncher.cs @@ -0,0 +1,121 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; +using Cs2SuperPowers.Utils; + +namespace Cs2SuperPowers.Powers; + +public class GrenadeLauncher(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 11; + public override string Name => "Grenade Launcher"; + + public override string Description => "Every shot from your pistol launches a grenade (0.5s cooldown)."; + + public override char ChatColor => ChatColors.Red; + + public override string HtmlColor => "#FF0000"; + + private readonly Dictionary _lastUse = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnWeaponFire); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + _lastUse.Clear(); + return HookResult.Continue; + } + + private HookResult OnWeaponFire(EventWeaponFire @event, GameEventInfo info) + { + var controller = @event.Userid; + if (!Ensure.Player(controller).IsValid().Check() || !IsAssignedTo(controller!)) + return HookResult.Continue; + + // Only pistols + var weapon = controller!.PlayerPawn.Value?.WeaponServices?.ActiveWeapon.Value; + if (weapon == null) + return HookResult.Continue; + + // List of pistol weapon names (classnames) + var pistolClassNames = new[] + { + "weapon_glock", "weapon_usp_silencer", "weapon_hkp2000", "weapon_p250", + "weapon_fiveseven", "weapon_tec9", "weapon_cz75a", "weapon_deagle", + "weapon_revolver", "weapon_elite" + }; + + if (!pistolClassNames.Contains(weapon.DesignerName)) + return HookResult.Continue; + + // Check cooldown (skip if nodelay is enabled) + var now = DateTime.UtcNow; + if (!GlobalConfig.NoDelayEnabled && _lastUse.TryGetValue(controller!, out var lastUseTime) && (now - lastUseTime).TotalSeconds < 0.5) + return HookResult.Continue; + _lastUse[controller!] = now; + + var pawn = controller!.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid) + return HookResult.Continue; + + var pos = pawn.AbsOrigin; + if (pos == null) return HookResult.Continue; + pos = new Vector(pos.X, pos.Y, pos.Z + 64f); + + // Forward vector from the player's view angles + var ang = pawn.V_angle; + float yaw = ang.Y * MathF.PI / 180f; + float pitch = ang.X * MathF.PI / 180f; + var forward = new Vector( + MathF.Cos(yaw) * MathF.Cos(pitch), + MathF.Sin(yaw) * MathF.Cos(pitch), + -MathF.Sin(pitch) + ); + + // Spawn farther in front of the player so the grenade does not collide with the shooter. + const float spawnAhead = 72f; + pos = new Vector( + pos.X + forward.X * spawnAhead, + pos.Y + forward.Y * spawnAhead, + pos.Z + forward.Z * 24f + ); + + const float speed = 1100f; + + int grenadeCount = GlobalConfig.GetGrenadeLauncherCount(1); + for (int i = 0; i < grenadeCount; i++) + { + // Add slight random spread for multiple grenades + var random = new Random(); + var spreadAng = new QAngle( + ang.X + (float)(random.NextDouble() * 10.0 - 5.0), // ±5° pitch + ang.Y + (float)(random.NextDouble() * 10.0 - 5.0), // ±5° yaw + ang.Z + ); + + float spreadYaw = spreadAng.Y * MathF.PI / 180f; + float spreadPitch = spreadAng.X * MathF.PI / 180f; + var spreadForward = new Vector( + MathF.Cos(spreadYaw) * MathF.Cos(spreadPitch), + MathF.Sin(spreadYaw) * MathF.Cos(spreadPitch), + -MathF.Sin(spreadPitch) + ); + + var velocity = new Vector( + spreadForward.X * speed, + spreadForward.Y * speed, + spreadForward.Z * speed + 100f + ); + + GrenadeSpawner.CreateGrenade(pos, spreadAng, velocity, pawn); + } + + return HookResult.Continue; + } +} diff --git a/Powers/IAmChicken.cs b/Powers/IAmChicken.cs new file mode 100644 index 0000000..7b85211 --- /dev/null +++ b/Powers/IAmChicken.cs @@ -0,0 +1,69 @@ +using System.Drawing; +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class IAmChicken(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 10; + public override string Name => "I Am Chicken!"; + + public override string Description => $"You become Chicken! You're harder to hit but have 30% of HP."; + + public override char ChatColor => ChatColors.Orange; + + public override string HtmlColor => "#FF8B42"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) + { + var random = new Random(); + foreach (var player in PlayerPowers.Instance.GetPlayersWithPower(this)) + { + if (!Ensure.Player(player).IsValid().Check()) + { + continue; + } + + var playerPawn = player.PlayerPawn?.Value; + if (playerPawn == null) + { + continue; + } + + NextFrame(() => + { + SetPlayerModel(player, "models/chicken/chicken.vmdl"); + playerPawn!.CBodyComponent!.SceneNode!.GetSkeletonInstance().MaterialGroup.Value = + (uint)random.Next(1, 4); + + playerPawn.MaxHealth = 30; + playerPawn.Health = 30; + Utilities.SetStateChanged(player, "CCSPlayerPawn", "m_iMaxHealth"); + }); + } + + return HookResult.Continue; + } + + private void SetPlayerModel(CCSPlayerController player, string model) + { + var pawn = player.PlayerPawn?.Value; + if (pawn == null) return; + + NextFrame(() => + { + pawn.SetModel(model); + var originalRender = pawn.Render; + pawn.Render = Color.FromArgb(255, originalRender.R, originalRender.G, originalRender.B); + }); + } +} \ No newline at end of file diff --git a/Powers/IronBody.cs b/Powers/IronBody.cs new file mode 100644 index 0000000..f4dde9f --- /dev/null +++ b/Powers/IronBody.cs @@ -0,0 +1,51 @@ +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class IronBody(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 18; + public override string Name => "Iron Body"; + + public override string Description => $"You can only be killed by headshots."; + + public override char ChatColor => ChatColors.LightPurple; + + public override string HtmlColor => "#8B4513"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + if (@event.Hitgroup == (int)HitGroup_t.HITGROUP_HEAD) + { + return HookResult.Continue; + } + + if ( + !Ensure.Player(victim).IsValid().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(victim!)) + { + return HookResult.Continue; + } + + var playerPawn = victim!.PlayerPawn.Value; + var newHealth = playerPawn!.Health + @event.DmgHealth; + + if (newHealth > 100) + newHealth = 100; + + playerPawn.Health = newHealth; + return HookResult.Stop; + } +} diff --git a/Powers/IronHead.cs b/Powers/IronHead.cs new file mode 100644 index 0000000..d7c9a77 --- /dev/null +++ b/Powers/IronHead.cs @@ -0,0 +1,52 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class IronHead(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 4; + public override string Name => "Iron Head"; + + public override string Description => $"You cannot be killed by head shots."; + + public override char ChatColor => ChatColors.LightPurple; + + public override string HtmlColor => "#8B4513"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + if (@event.Hitgroup != (int)HitGroup_t.HITGROUP_HEAD) + { + return HookResult.Continue; + } + + if ( + !Ensure.Player(victim).IsValid().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(victim!)) + { + return HookResult.Continue; + } + + var playerPawn = victim!.PlayerPawn.Value; + var newHealth = playerPawn!.Health + @event.DmgHealth; + + if (newHealth > 100) + newHealth = 100; + + playerPawn.Health = newHealth; + return HookResult.Stop; + } +} diff --git a/Powers/Jetpack.cs b/Powers/Jetpack.cs new file mode 100644 index 0000000..5d87bd2 --- /dev/null +++ b/Powers/Jetpack.cs @@ -0,0 +1,106 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; + +namespace Cs2SuperPowers.Powers; + +public class Jetpack(IPlayerHud playerHud) : BasePower(playerHud) +{ + private const float MaxFuel = 180.0f; + private const float FuelBurnPerTick = 0.8f; + private const float FuelRechargePerTick = 0.9f; + private const float LiftPerTick = 14.0f; + private const float MaxVerticalSpeed = 260.0f; + private static readonly TimeSpan HudRefreshInterval = TimeSpan.FromMilliseconds(125); + + public override int Id => 33; + public override string Name => "Jetpack"; + public override string Description => "Hold Jump (Space) to fly with a fuel-based jetpack."; + public override char ChatColor => ChatColors.Orange; + public override string HtmlColor => "#FF8C00"; + + private readonly Dictionary _fuelByPlayer = new(); + private readonly Dictionary _lastHudUpdate = new(); + + protected override void OnInitialize() + { + RegisterListener(OnTick); + RegisterEventHandler(OnRoundStart); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) + { + _fuelByPlayer.Clear(); + _lastHudUpdate.Clear(); + return HookResult.Continue; + } + + public override void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + base.AssignToPlayer(player, showMessages); + _fuelByPlayer[player] = MaxFuel; + _lastHudUpdate.Remove(player); + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + _fuelByPlayer.Remove(player); + _lastHudUpdate.Remove(player); + } + + private void OnTick() + { + foreach (var player in Utilities.GetPlayers()) + { + if (!player.IsValid || !player.PawnIsAlive) + continue; + + if (!IsAssignedTo(player)) + continue; + + var pawn = player.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid) + continue; + + float fuel = _fuelByPlayer.GetValueOrDefault(player, MaxFuel); + bool isJumpPressed = player.Buttons.HasFlag(PlayerButtons.Jump); + + if (isJumpPressed && fuel > 0.0f) + { + var currentVelocity = pawn.AbsVelocity; + currentVelocity.Z = Math.Min(currentVelocity.Z + LiftPerTick, MaxVerticalSpeed); + pawn.Teleport(pawn.AbsOrigin, null, currentVelocity); + fuel = Math.Max(0.0f, fuel - FuelBurnPerTick); + } + else + { + fuel = Math.Min(MaxFuel, fuel + FuelRechargePerTick); + } + + _fuelByPlayer[player] = fuel; + + if (isJumpPressed) + { + var now = DateTime.UtcNow; + if (!_lastHudUpdate.TryGetValue(player, out var lastHudUpdate) || + now - lastHudUpdate >= HudRefreshInterval) + { + _lastHudUpdate[player] = now; + player.PrintToCenterHtml(BuildFuelMessage(fuel)); + } + } + } + } + + private static string BuildFuelMessage(float fuel) + { + int percent = (int)MathF.Round((fuel / MaxFuel) * 100.0f); + int filledBars = (int)MathF.Round((fuel / MaxFuel) * 10.0f); + filledBars = Math.Clamp(filledBars, 0, 10); + string bar = new string('|', filledBars).PadRight(10, '.'); + string color = percent > 60 ? "#4CAF50" : percent > 30 ? "#FFC107" : "#F44336"; + return $"Jetpack Fuel: {percent}%
{bar}"; + } +} diff --git a/Powers/NotSoDecoy.cs b/Powers/NotSoDecoy.cs new file mode 100644 index 0000000..719590f --- /dev/null +++ b/Powers/NotSoDecoy.cs @@ -0,0 +1,110 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; +using Cs2SuperPowers.Utils; + +namespace Cs2SuperPowers.Powers; + +public class NotSoDecoy(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 24; + public override string Name => "Not So Decoy"; + + public override string Description => "Decoys thrown by you spawn 20 grenades when thrown (5 second cooldown)."; + + public override char ChatColor => ChatColors.Red; + + public override string HtmlColor => "#FF0000"; + + private readonly Dictionary _lastUse = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnDecoyStarted); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + _lastUse.Clear(); + + foreach (var player in Utilities.GetPlayers()) + { + if (!Ensure.Player(player).IsValid().IsAlive().Check() || !IsAssignedTo(player!)) + { + continue; + } + + Server.NextFrame(() => + { + player.GiveNamedItem("weapon_decoy"); + }); + } + + return HookResult.Continue; + } + + private HookResult OnDecoyStarted(EventDecoyStarted @event, GameEventInfo _) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + // Check cooldown (skip if nodelay is enabled) + var now = DateTime.UtcNow; + DateTime lastUseTime = default; + bool isOnCooldown = !GlobalConfig.NoDelayEnabled && _lastUse.TryGetValue(player!, out lastUseTime) && (now - lastUseTime).TotalSeconds < 5; + + // Always give a new decoy, regardless of cooldown! + player!.GiveNamedItem("weapon_decoy"); + + if (isOnCooldown) + { + double secondsRemaining = Math.Ceiling(5 - (now - lastUseTime).TotalSeconds); + player.PrintToCenterAlert($"Not So Decoy is on cooldown! {ChatColors.DarkRed}{secondsRemaining}{ChatColors.Default}s remaining"); + return HookResult.Continue; + } + _lastUse[player!] = now; + + var pos = new Vector(@event.X, @event.Y, @event.Z); + + // Spawn grenades (with boost level) in a loop with random angles and velocities + var random = new Random(); + int grenadeCount = GlobalConfig.GetNotSoDecoyCount(20); + for (int i = 0; i < grenadeCount; i++) + { + // Random pitch between -45 and 45 degrees, yaw between 0 and 360 + float pitch = (float)(random.NextDouble() * 90.0 - 45.0); + float yaw = (float)(random.NextDouble() * 360.0); + var ang = new QAngle(pitch, yaw, 0); + + // Random speed between 400 and 900 units + float speed = (float)(random.NextDouble() * 500.0 + 400.0); + + // Convert angles to a forward vector + float pitchRad = pitch * MathF.PI / 180f; + float yawRad = yaw * MathF.PI / 180f; + var forward = new Vector( + MathF.Cos(yawRad) * MathF.Cos(pitchRad), + MathF.Sin(yawRad) * MathF.Cos(pitchRad), + -MathF.Sin(pitchRad)); + + // Add some random upward velocity for the "jump" + float upward = (float)(random.NextDouble() * 200.0 + 200.0); + + var velocity = new Vector( + forward.X * speed, + forward.Y * speed, + forward.Z * speed + upward); + + var createdGrenade = GrenadeSpawner.CreateGrenade(pos, ang, velocity, player.PlayerPawn.Value); + } + return HookResult.Continue; + } +} + + diff --git a/Powers/OneShot.cs b/Powers/OneShot.cs new file mode 100644 index 0000000..021543d --- /dev/null +++ b/Powers/OneShot.cs @@ -0,0 +1,66 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class OneShot(IPlayerHud playerHud) : BasePower(playerHud) +{ + private const double InstantKillChance = 0.25; + private readonly Random _random = new(); + + public override int Id => 23; + public override string Name => "One Shot"; + + public override string Description => $"Each damaging hit has a {(int)(InstantKillChance * 100)}% chance to instantly eliminate the enemy."; + + public override char ChatColor => ChatColors.Magenta; + + public override string HtmlColor => "#ff5CD9"; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if (!Ensure.Player(attacker).IsValid().IsAlive().Check() || + !Ensure.Player(victim).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + // Check for at least 1 player in the opposing team + var attackerTeam = attacker!.Team; + var enemyCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator && p.Team != attackerTeam); + if (enemyCount < 1) + { + return HookResult.Continue; + } + + var victimPawn = victim!.PlayerPawn.Value; + if (victimPawn == null) + { + return HookResult.Continue; + } + + if (_random.NextDouble() > InstantKillChance) + { + return HookResult.Continue; + } + + victimPawn.Health = 0; + Utilities.SetStateChanged(victimPawn, "CBaseEntity", "m_iHealth"); + + return HookResult.Continue; + } +} diff --git a/Powers/PanicTeleport.cs b/Powers/PanicTeleport.cs new file mode 100644 index 0000000..f253ba4 --- /dev/null +++ b/Powers/PanicTeleport.cs @@ -0,0 +1,123 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Core.Attributes; +using CounterStrikeSharp.API.Modules.Entities; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class PanicTeleport(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 16; + public override string Name => "Panic Teleport"; + + public override string Description => $"Save a single location with the use key, then teleport back to that position whenever you press the use key again."; + + public override char ChatColor => ChatColors.BlueGrey; + + public override string HtmlColor => "#cdcece"; + + private readonly List _registrations = new(); + + public override void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + base.AssignToPlayer(player, showMessages); + if (_registrations.All(registration => registration.Player != player)) + { + _registrations.Add(new PanicTeleportInfo(player, null)); + } + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + var registration = _registrations.FirstOrDefault(r => r.Player == player); + if (registration != null) + { + _registrations.Remove(registration); + } + } + + protected override void OnInitialize() + { + RegisterListener(OnTick); + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerDeath); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) + { + var player = @event.Userid; + var registration = _registrations + .FirstOrDefault(r => r.Player == player); + if (registration != null) + { + registration.SavedLocation = null; + registration.WasUsePressedLastTick = false; + } + return HookResult.Continue; + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) + { + _registrations.Clear(); + foreach (var player in PlayerPowers.Instance.GetPlayersWithPower(this)) + { + _registrations.Add(new PanicTeleportInfo(player, null)); + } + + return HookResult.Continue; + } + + private void OnTick() + { + foreach (var registration in _registrations) + { + var usePressed = registration.Player.Buttons.HasFlag(PlayerButtons.Use); + if (usePressed && !registration.WasUsePressedLastTick) + { + // Key was just pressed (not held) + HandleUseKeyPress(registration); + } + registration.WasUsePressedLastTick = usePressed; + } + } + + private void HandleUseKeyPress(PanicTeleportInfo registration) + { + var player = registration.Player; + + if (!Ensure.Player(player).IsValid().Check() || player.PlayerPawn?.Value == null) + { + return; + } + + if (registration.SavedLocation == null) + { + // Save current location + var currentPos = player.PlayerPawn.Value.AbsOrigin; + if (currentPos != null) + { + registration.SavedLocation = new Vector(currentPos.X, currentPos.Y, currentPos.Z); + registration.SavedLocation.Z += 10; + player.PrintToCenterAlert($"{ChatColor}Location saved! Press use key again to teleport back."); + } + } + else + { + // Teleport to saved location + var savedPos = registration.SavedLocation; + player.PlayerPawn.Value.Teleport(savedPos, null, null); + registration.SavedLocation = null; + player.PrintToCenterAlert($"{ChatColor}Teleported. Press use to save a new location."); + } + } +} + +public record PanicTeleportInfo(CCSPlayerController Player, Vector? SavedLocation) +{ + public Vector? SavedLocation { get; set; } = SavedLocation; + public bool WasUsePressedLastTick { get; set; } = false; +} diff --git a/Powers/Phoenix.cs b/Powers/Phoenix.cs new file mode 100644 index 0000000..dd73aae --- /dev/null +++ b/Powers/Phoenix.cs @@ -0,0 +1,81 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class Phoenix(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 2; + public override string Name => "Phoenix Rising"; + + public override string Description => $"You will be reborn after your first death like Phoenix from the ashes."; + + public override char ChatColor => ChatColors.DarkRed; + + public override string HtmlColor => "#ff5C0A"; + public override int MinimumPlayersRequired => 4; + + private HashSet _phoenixUses = new HashSet(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerDeath); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo _) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + // Check for at least 4 valid (non-spectator, non-none) players total + var validPlayerCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator); + if (validPlayerCount < 4) + { + return HookResult.Continue; + } + + if (_phoenixUses.Contains(player!)) + { + return HookResult.Continue; + } + + Server.NextFrame(() => + { + var newHealth = 120; + player!.SetNewHealth(newHealth); + player!.Respawn(); + _phoenixUses.Add(player); + + player.PrintToChat($"{ChatColors.DarkRed}Phoenix {ChatColors.Green}rises."); + }); + + return HookResult.Continue; + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + _phoenixUses = new HashSet(); + foreach (var player in Utilities.GetPlayers()) + { + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + Server.NextFrame(() => + { + player.SetNewHealth(50); + }); + } + + return HookResult.Continue; + } +} diff --git a/Powers/PowerThief.cs b/Powers/PowerThief.cs new file mode 100644 index 0000000..1c9d842 --- /dev/null +++ b/Powers/PowerThief.cs @@ -0,0 +1,66 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class PowerThief(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 15; + public override string Name => "Power Thief"; + + public override string Description => $"With a 25% chance on hit, you can permanently strip your enemies of their current superpower."; + + public override char ChatColor => ChatColors.LightYellow; + + public override string HtmlColor => "#f8e1ab"; + + private readonly Random _random = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if ( + !Ensure.Player(victim).IsValid().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + // Check for at least 1 player in the opposing team + var attackerTeam = attacker!.Team; + var enemyCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator && p.Team != attackerTeam); + if (enemyCount < 1) + { + return HookResult.Continue; + } + + if (_random.NextDouble() <= 0.25) + { + StealSuperpower(victim!, attacker!); + } + return HookResult.Continue; + } + + private void StealSuperpower(CCSPlayerController victim, CCSPlayerController attacker) + { + if (!PlayerPowers.Instance.TryGetValue(victim, out var power)) return; + + PlayerPowers.Instance.RemovePower(victim); + victim.SetMaxHealth(100); + attacker.PrintToChat($"You have stolen {ChatColors.Red}{victim.PlayerName} {ChatColors.Default}superpower {power!.ChatColor}{power.Name}."); + victim.PrintToChat($"Your superpower {power.ChatColor}{power.Name} {ChatColors.Red}was stolen! You're a regular guy/gal now."); + } +} \ No newline at end of file diff --git a/Powers/Rambo.cs b/Powers/Rambo.cs new file mode 100644 index 0000000..1454b97 --- /dev/null +++ b/Powers/Rambo.cs @@ -0,0 +1,83 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class Rambo(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 5; + public override string Name => "John Rambo"; + + public override string Description => $"You start with additional random health, negev, kevlar and hand grenades. Enemy team gets 5000 cash."; + + public override char ChatColor => ChatColors.Green; + + public override string HtmlColor => "#009905"; + public override int MinimumPlayersRequired => 4; + + protected override void OnInitialize() + { + RegisterEventHandler(OnRoundStart); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + var random = new Random(); + var ramboPlayers = PlayerPowers.Instance.GetPlayersWithPower(this).ToList(); + var validPlayerCount = Utilities.GetPlayers().Count(player => + player.IsValid && player.Team != CsTeam.None && player.Team != CsTeam.Spectator); + if (validPlayerCount < MinimumPlayersRequired) + { + return HookResult.Continue; + } + + // If there are any Rambo players, give enemy team 5000 cash + if (ramboPlayers.Count > 0) + { + var ramboTeam = ramboPlayers.First().Team; + foreach (var player in Utilities.GetPlayers()) + { + if (!Ensure.Player(player).IsValid().Check()) + { + continue; + } + + if (player.Team != ramboTeam && player.Team != CsTeam.None && player.Team != CsTeam.Spectator) + { + Server.NextFrame(() => + { + if (player.InGameMoneyServices != null) + { + player.InGameMoneyServices.Account += 5000; + Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInGameMoneyServices"); + } + }); + } + } + } + + foreach (var player in ramboPlayers) + { + if (!Ensure.Player(player).IsValid().Check()) + { + continue; + } + + Server.NextFrame(() => + { + var newHealth = 100 + random.Next(150, 400); + + player.GiveNamedItem("weapon_negev"); + player.GiveNamedItem("item_assaultsuit"); + player.GiveNamedItem("weapon_hegrenade"); + + player.SetNewHealth(newHealth); + }); + } + + return HookResult.Continue; + } +} diff --git a/Powers/RandomTeleport.cs b/Powers/RandomTeleport.cs new file mode 100644 index 0000000..dbb29de --- /dev/null +++ b/Powers/RandomTeleport.cs @@ -0,0 +1,70 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class RandomTeleport(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 29; + public override string Name => "Random Teleport"; + public override string Description => "Teleport to a random position on the map every time you get a kill!"; + public override char ChatColor => ChatColors.Purple; + public override string HtmlColor => "#800080"; + + private readonly Random _random = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerDeath); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) + { + var attacker = @event.Attacker; + if (!Ensure.Player(attacker).IsValid().IsAlive().Check() || !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + var pawn = attacker!.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid) + return HookResult.Continue; + + // Find random valid player to teleport near + var validPlayers = Utilities.GetPlayers() + .Where(p => p.IsValid && p.PawnIsAlive && p != attacker) + .ToList(); + + if (validPlayers.Count > 0) + { + // Teleport near a random player + var targetPlayer = validPlayers[_random.Next(validPlayers.Count)]; + var targetPos = targetPlayer.PlayerPawn.Value!.AbsOrigin!; + + // Random offset of 100-300 units + var offset = new Vector( + (float)(_random.NextDouble() * 400 - 200), + (float)(_random.NextDouble() * 400 - 200), + 50 + ); + + pawn.Teleport(targetPos + offset, null, null); + } + else + { + // If no other players, teleport in a random direction from current position + var currentPos = pawn.AbsOrigin!; + var offset = new Vector( + (float)(_random.NextDouble() * 600 - 300), + (float)(_random.NextDouble() * 600 - 300), + 100 + ); + pawn.Teleport(currentPos + offset, null, null); + } + + return HookResult.Continue; + } +} diff --git a/Powers/RiseFromTheDead.cs b/Powers/RiseFromTheDead.cs new file mode 100644 index 0000000..6001d5f --- /dev/null +++ b/Powers/RiseFromTheDead.cs @@ -0,0 +1,59 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class RiseFromTheDead(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 1; + public override string Name => "Rise From the Dead"; + + public override string Description => $"You have {(int)(ReviveChance * 100)}% chance to rise from the dead."; + + public override char ChatColor => ChatColors.Red; + + public override string HtmlColor => "#ff5C0A"; + public override int MinimumPlayersRequired => 4; + + private const double ReviveChance = 0.35; + + private readonly Random _random = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerDeath); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo _) + { + var player = @event.Userid; + if (!Ensure.Player(player).IsValid().Check() || !IsAssignedTo(player!)) + { + return HookResult.Continue; + } + + // Check for at least 4 valid (non-spectator, non-none) players total + var validPlayerCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator); + if (validPlayerCount < 4) + { + return HookResult.Continue; + } + + if (_random.NextDouble() <= ReviveChance) + { + Server.NextFrame(() => + { + player!.MaxHealth = 70; + player.Health = 70; + player.Respawn(); + player.PrintToChat($"You have been raised from {ChatColors.DarkRed}the dead."); + }); + } + + return HookResult.Continue; + } +} diff --git a/Powers/Shield.cs b/Powers/Shield.cs new file mode 100644 index 0000000..3ff3416 --- /dev/null +++ b/Powers/Shield.cs @@ -0,0 +1,114 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class Shield(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 32; + public override string Name => "Shield"; + public override string Description => "Hold E (Use) to activate a shield that blocks all damage! Shield has 100 energy points (regenerates 10 per second when not in use)."; + public override char ChatColor => ChatColors.Yellow; + public override string HtmlColor => "#FFFF00"; + + private readonly Dictionary _shieldEnergy = new(); + private readonly Dictionary _shieldActive = new(); + + protected override void OnInitialize() + { + RegisterListener(OnTick); + RegisterEventHandler(OnRoundStart); + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo _) + { + _shieldEnergy.Clear(); + _shieldActive.Clear(); + return HookResult.Continue; + } + + public override void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + base.AssignToPlayer(player, showMessages); + _shieldEnergy[player] = 100.0f; + _shieldActive[player] = false; + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + _shieldEnergy.Remove(player); + _shieldActive.Remove(player); + } + + private void OnTick() + { + foreach (var player in Utilities.GetPlayers()) + { + if (!player.IsValid || !player.PawnIsAlive) + continue; + + if (!IsAssignedTo(player)) + continue; + + if (!_shieldEnergy.ContainsKey(player)) + continue; + + var usePressed = player.Buttons.HasFlag(PlayerButtons.Use); + + if (usePressed && _shieldEnergy[player] > 0) + { + // Shield is active! + _shieldActive[player] = true; + _shieldEnergy[player] -= 0.5f; // Consume 0.5 energy per tick + + // Update HUD (center alert) every second + if (Math.Abs(_shieldEnergy[player] % 20) < 1) + { + player.PrintToCenterAlert($"{ChatColor}Shield: {Math.Ceiling(_shieldEnergy[player])}%"); + } + } + else + { + // Shield not active, regenerate + _shieldActive[player] = false; + if (_shieldEnergy[player] < 100.0f) + { + _shieldEnergy[player] += 0.3f; // Regenerate 0.3 per tick + if (_shieldEnergy[player] > 100.0f) + _shieldEnergy[player] = 100.0f; + } + } + } + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var victim = @event.Userid; + + if (!Ensure.Player(victim).IsValid().Check() || !IsAssignedTo(victim!)) + { + return HookResult.Continue; + } + + var validatedVictim = victim!; + if (_shieldActive.GetValueOrDefault(validatedVictim, false)) + { + var pawn = validatedVictim.PlayerPawn.Value; + if (pawn == null || !pawn.IsValid) + { + return HookResult.Continue; + } + + pawn.Health = Math.Min(pawn.MaxHealth, pawn.Health + @event.DmgHealth); + Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth"); + return HookResult.Handled; + } + + return HookResult.Continue; + } +} diff --git a/Powers/TeleportOnKill.cs b/Powers/TeleportOnKill.cs new file mode 100644 index 0000000..3b1f9cd --- /dev/null +++ b/Powers/TeleportOnKill.cs @@ -0,0 +1,61 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class TeleportOnKill(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 21; + public override string Name => "Teleport On Kill"; + + public override string Description => $"When you kill an enemy, you teleport to their location (needs at least 4 players)"; + + public override char ChatColor => ChatColors.Red; + + public override string HtmlColor => "#FF0000"; + public override int MinimumPlayersRequired => 4; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerDeath); + } + + private HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if ( + !Ensure.Player(victim).IsValid().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + // Check for at least 4 valid (non-spectator, non-none) players total + var validPlayerCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator); + if (validPlayerCount < 4) + { + return HookResult.Continue; + } + + if (victim!.PlayerPawn?.Value != null && attacker!.PlayerPawn?.Value != null) + { + var victimPos = victim.PlayerPawn.Value.AbsOrigin; + // raise Z a bit to avoid getting stuck in the ground + if (victimPos != null) + { + victimPos.Z += 10; + attacker.PlayerPawn.Value.Teleport(victimPos, null, null); + } + } + + return HookResult.Continue; + } +} diff --git a/Powers/Twister.cs b/Powers/Twister.cs new file mode 100644 index 0000000..4139d53 --- /dev/null +++ b/Powers/Twister.cs @@ -0,0 +1,69 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class Twister(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 14; + public override string Name => "Twister"; + + public override string Description => $"Inflict disorienting spins upon your enemies with a 25% chance on each hit, disrupting their aim and movement."; + + public override char ChatColor => ChatColors.Silver; + + public override string HtmlColor => "#00FF00"; + + private readonly Random _random = new(); + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if ( + !Ensure.Player(victim).IsValid().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + // Check for at least 1 player in the opposing team + var attackerTeam = attacker!.Team; + var enemyCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator && p.Team != attackerTeam); + if (enemyCount < 1) + { + return HookResult.Continue; + } + + if (_random.NextDouble() <= 0.25) + { + RotateEnemy(victim!); + } + return HookResult.Continue; + } + + private void RotateEnemy(CCSPlayerController player) + { + var currentPosition = player.PlayerPawn.Value!.AbsOrigin; + var currentAngles = player.PlayerPawn.Value.V_angle; + + var newAngles = new QAngle( + currentAngles.X, + currentAngles.Y + _random.Next(-180, 180), + currentAngles.Z + ); + player.PlayerPawn.Value.Teleport(currentPosition, newAngles, new Vector(0, 0, 0)); + } +} \ No newline at end of file diff --git a/Powers/Vampire.cs b/Powers/Vampire.cs new file mode 100644 index 0000000..74dc194 --- /dev/null +++ b/Powers/Vampire.cs @@ -0,0 +1,63 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; + +namespace Cs2SuperPowers.Powers; + +public class Vampire(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 12; + public override string Name => "Vampire"; + + public override string Description => $"Drain the life force of your enemies, healing yourself for {(int)(HealModifier * 100)}% of the damage dealt with each shot."; + + public override char ChatColor => ChatColors.Magenta; + + public override string HtmlColor => "#ff5CD9"; + public override int MinimumPlayersRequired => 4; + + private const double HealModifier = 0.7; + + protected override void OnInitialize() + { + RegisterEventHandler(OnPlayerHurt); + } + + private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) + { + var attacker = @event.Attacker; + var victim = @event.Userid; + + if ( + !Ensure.Player(victim).IsValid().IsAlive().Check() || + !Ensure.Player(attacker).IsValid().Check() || + attacker == victim || + !IsAssignedTo(attacker!)) + { + return HookResult.Continue; + } + + // Check for at least 4 valid (non-spectator, non-none) players total + var validPlayerCount = Utilities.GetPlayers().Count(p => + p.IsValid && p.Team != CsTeam.None && p.Team != CsTeam.Spectator); + if (validPlayerCount < 4) + { + return HookResult.Continue; + } + + var attackerPawn = attacker!.PlayerPawn.Value; + if (attackerPawn == null) + { + return HookResult.Continue; + } + + var healing = (int)(@event.DmgHealth * HealModifier); + var newHealth = Math.Min(attackerPawn.Health + healing, attackerPawn.MaxHealth); + attackerPawn.Health = newHealth; + Utilities.SetStateChanged(attackerPawn, "CBaseEntity", "m_iHealth"); + + return HookResult.Continue; + } +} diff --git a/Powers/Wallhack.cs b/Powers/Wallhack.cs new file mode 100644 index 0000000..8210532 --- /dev/null +++ b/Powers/Wallhack.cs @@ -0,0 +1,291 @@ +using System.Drawing; +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Utils; +using Cs2SuperPowers.Players; +using Cs2SuperPowers.Players.PlayerValidations; +using Microsoft.Extensions.Logging; + +namespace Cs2SuperPowers.Powers; + +// GlowData class +public class GlowData +{ + public CDynamicProp GlowEnt { get; set; } = null!; + public CDynamicProp ModelRelay { get; set; } = null!; +} + +public class Wallhack(IPlayerHud playerHud) : BasePower(playerHud) +{ + public override int Id => 26; + public override string Name => "Wallhack"; + public override string Description => "See enemies through walls with a glow!"; + public override char ChatColor => ChatColors.Purple; + public override string HtmlColor => "#AB4BD1"; + + // Static storage + public static List Wallhackers = []; + public static Dictionary GlowData = []; + private static BasePlugin? _plugin; // Static reference to plugin! + private static readonly List _staticRegisteredDelegates = []; // Store delegates to prevent GC! + + // Static references to event handler delegates to prevent GC! + private static readonly BasePlugin.GameEventHandler _onPlayerDeathHandler = OnPlayerDeath; + private static readonly BasePlugin.GameEventHandler _onPlayerDisconnectHandler = OnPlayerDisconnect; + private static readonly BasePlugin.GameEventHandler _onPlayerSpawnHandler = OnPlayerSpawn; + private static readonly BasePlugin.GameEventHandler _onPlayerChangeTeamHandler = OnPlayerChangeTeam; + // Also store a static reference to OnPlayerTransmit! + public static readonly Action _onPlayerTransmitHandler = OnPlayerTransmit; + + public override void AssignToPlayer(CCSPlayerController player, bool showMessages) + { + base.AssignToPlayer(player, showMessages); + AddWallhacker(player); + _plugin?.Logger.LogInformation("Wallhack assigned to {PlayerName}", player.PlayerName); + + // Ensure all alive players have glows (delay slightly just in case!) + NextFrame(() => + { + foreach (var existingPlayer in Utilities.GetPlayers()) + { + if (IsPlayerValid(existingPlayer) && existingPlayer.PawnIsAlive && existingPlayer.Team >= CsTeam.Terrorist) + { + if (!GlowData.ContainsKey(existingPlayer)) + { + _plugin?.Logger.LogInformation("Creating glow for {PlayerName}", existingPlayer.PlayerName); + Glow(existingPlayer); + } + } + } + _plugin?.Logger.LogInformation("Wallhackers: {Count}, GlowData: {GlowCount}", Wallhackers.Count, GlowData.Count); + }); + } + + public override void UnassignFromPlayer(CCSPlayerController player) + { + base.UnassignFromPlayer(player); + RemoveWallhacker(player); + _plugin?.Logger.LogInformation("Wallhack unassigned from {PlayerName}", player.PlayerName); + } + + protected override void OnInitialize() + { + _plugin = Plugin; // Set static plugin reference! + RegisterEventHandler(_onPlayerDeathHandler); + RegisterEventHandler(_onPlayerDisconnectHandler); + RegisterEventHandler(_onPlayerSpawnHandler, HookMode.Post); + RegisterEventHandler(_onPlayerChangeTeamHandler, HookMode.Post); + _plugin?.Logger.LogInformation("Wallhack initialized!"); + + // Delay creating initial glows until global variables are initialized! + NextFrame(() => + { + _plugin?.Logger.LogInformation("Creating initial glows for existing players!"); + foreach (var existingPlayer in Utilities.GetPlayers()) + { + if (IsPlayerValid(existingPlayer) && existingPlayer.PawnIsAlive && existingPlayer.Team >= CsTeam.Terrorist) + { + if (!GlowData.ContainsKey(existingPlayer)) + { + _plugin?.Logger.LogInformation("Creating glow for {PlayerName} during init", existingPlayer.PlayerName); + Glow(existingPlayer); + } + } + } + }); + } + + public static HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info) + { + var player = @event.Userid; + _plugin?.Logger.LogInformation("Wallhack: OnPlayerSpawn called for {PlayerName}", player?.PlayerName ?? "NULL"); + + if (!IsPlayerValid(player)) + { + _plugin?.Logger.LogInformation("Wallhack: Player invalid, skipping"); + return HookResult.Continue; + } + if (player!.Team < CsTeam.Terrorist) + { + _plugin?.Logger.LogInformation("Wallhack: Player team invalid, skipping"); + return HookResult.Continue; + } + + var gameRules = Utilities.FindAllEntitiesByDesignerName("cs_gamerules").FirstOrDefault(); + if (gameRules?.GameRules?.WarmupPeriod == true) + { + _plugin?.Logger.LogInformation("Wallhack: Warmup period, skipping"); + return HookResult.Continue; + } + + _plugin?.Logger.LogInformation("Wallhack: Calling Glow for {PlayerName}", player.PlayerName); + Glow(player!); + + return HookResult.Continue; + } + + public static HookResult OnPlayerDisconnect(EventPlayerDisconnect @event, GameEventInfo info) + { + var player = @event.Userid; + if (!IsPlayerValid(player)) return HookResult.Continue; + + if (GlowData.TryGetValue(player!, out var glowData)) + { + if (glowData.GlowEnt.IsValid) + glowData.GlowEnt.Remove(); + if (glowData.ModelRelay.IsValid) + glowData.ModelRelay.Remove(); + + GlowData.Remove(player!); + } + + Wallhackers.Remove(player!); + return HookResult.Continue; + } + + public static HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) + { + var player = @event.Userid; + if (!IsPlayerValid(player)) return HookResult.Continue; + if (!GlowData.TryGetValue(player!, out var glowData)) return HookResult.Continue; + + if (glowData.GlowEnt.IsValid) + glowData.GlowEnt.Remove(); + if (glowData.ModelRelay.IsValid) + glowData.ModelRelay.Remove(); + GlowData.Remove(player!); + + return HookResult.Continue; + } + + public static HookResult OnPlayerChangeTeam(EventPlayerTeam @event, GameEventInfo info) + { + var player = @event.Userid; + if (!IsPlayerValid(player)) return HookResult.Continue; + if (!GlowData.TryGetValue(player!, out var glowData)) return HookResult.Continue; + if (!glowData.GlowEnt.IsValid || !glowData.ModelRelay.IsValid) return HookResult.Continue; + + NextWorldUpdate(() => + { + glowData.GlowEnt.SetModel(GetPlayerModel(player!)); + glowData.ModelRelay.SetModel(GetPlayerModel(player!)); + }); + + return HookResult.Continue; + } + + private static void Glow(CCSPlayerController player) + { + _plugin?.Logger.LogInformation("Wallhack: Glow() called for {PlayerName}", player.PlayerName); + + // First remove existing glow for this player if it exists + if (GlowData.TryGetValue(player, out var existingGlow)) + { + if (existingGlow.GlowEnt.IsValid) + existingGlow.GlowEnt.Remove(); + if (existingGlow.ModelRelay.IsValid) + existingGlow.ModelRelay.Remove(); + GlowData.Remove(player); + } + + var glowEntity = Utilities.CreateEntityByName("prop_dynamic"); + var modelRelay = Utilities.CreateEntityByName("prop_dynamic"); + + if (glowEntity == null || modelRelay == null) + { + _plugin?.Logger.LogError("Wallhack: Failed to create glow entities for {PlayerName}", player.PlayerName); + return; + } + + modelRelay.Spawnflags = 256; + modelRelay.Render = Color.Transparent; + modelRelay.RenderMode = RenderMode_t.kRenderNone; + modelRelay.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags &= ~(1u << 2); + modelRelay.SetModel(GetPlayerModel(player)); + + glowEntity.Spawnflags = 256; + glowEntity.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags &= ~(1u << 2); + glowEntity.Render = Color.FromArgb(1, 0, 0, 0); + glowEntity.SetModel(GetPlayerModel(player)); + + glowEntity.DispatchSpawn(); + modelRelay.DispatchSpawn(); + + glowEntity.Glow.GlowRange = 5000; + glowEntity.Glow.GlowRangeMin = 0; + glowEntity.Glow.GlowColorOverride = Color.FromArgb(255, 171, 75, 209); + glowEntity.Glow.GlowTeam = -1; + glowEntity.Glow.GlowType = 3; + + modelRelay.AcceptInput("FollowEntity", player.Pawn.Value, null, "!activator"); + glowEntity.AcceptInput("FollowEntity", modelRelay, null, "!activator"); + + GlowData.Add(player, new GlowData + { + GlowEnt = glowEntity, + ModelRelay = modelRelay + }); + } + + private static string GetPlayerModel(CCSPlayerController player) + { + return player.Pawn.Value!.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.ModelName; + } + + private static bool IsPlayerValid(CCSPlayerController? plr) => plr != null && + plr.IsValid && + plr.PlayerPawn != null && + plr.PlayerPawn.IsValid && + plr.Connected == PlayerConnectedState.PlayerConnected && + !plr.IsHLTV; + + public static void OnPlayerTransmit(CCheckTransmitInfo info, CCSPlayerController player) + { + foreach (var entity in GlowData.ToList()) + { + if (Wallhackers.Contains(player!)) + { + if (!IsPlayerValid(entity.Key) || !IsPlayerValid(player)) continue; + + if (entity.Key.Team != player!.Team && player!.Team != CsTeam.Spectator && entity.Key.Team != CsTeam.Spectator) + { + info.TransmitEntities.Add(entity.Value.ModelRelay); + info.TransmitEntities.Add(entity.Value.GlowEnt); + continue; + } + } + + info.TransmitEntities.Remove(entity.Value.ModelRelay); + info.TransmitEntities.Remove(entity.Value.GlowEnt); + } + } + + public static void AddWallhacker(CCSPlayerController player) + { + if (!Wallhackers.Contains(player)) + { + Wallhackers.Add(player); + } + } + + public static void RemoveWallhacker(CCSPlayerController player) + { + Wallhackers.Remove(player); + } + + // Helper to wrap Server.NextWorldUpdate and store delegate to prevent GC! + private static void NextWorldUpdate(Action callback) + { + Action? wrappedCallback = null; + wrappedCallback = () => + { + callback(); + if (wrappedCallback != null) + { + _staticRegisteredDelegates.Remove(wrappedCallback); + } + }; + _staticRegisteredDelegates.Add(wrappedCallback); + Server.NextWorldUpdate(wrappedCallback); + } +} diff --git a/Utils/GrenadeSpawner.cs b/Utils/GrenadeSpawner.cs new file mode 100644 index 0000000..aae2a43 --- /dev/null +++ b/Utils/GrenadeSpawner.cs @@ -0,0 +1,32 @@ +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions; +using CounterStrikeSharp.API.Modules.Utils; + +namespace Cs2SuperPowers.Utils; + +public static class GrenadeSpawner +{ + static MemoryFunctionWithReturn + CHEGrenadeProjectile_CreateFunc = new( + "55 4C 89 C1 48 89 E5 41 57 49 89 FF 41 56 49 89 D6" + ); + + public static CBaseCSGrenadeProjectile? CreateGrenade(Vector position, QAngle angle, Vector velocity, CCSPlayerPawn? owner = null) + { + try + { + return CHEGrenadeProjectile_CreateFunc.Invoke( + position.Handle, + angle.Handle, + velocity.Handle, + velocity.Handle, + owner == null ? IntPtr.Zero : owner.Handle, + 44 + ); + } + catch + { + return null; + } + } +} diff --git a/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.deps.json b/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.deps.json new file mode 100644 index 0000000..c76f688 --- /dev/null +++ b/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.deps.json @@ -0,0 +1,888 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "Cs2SuperPowersPlugin/1.0.0": { + "dependencies": { + "CounterStrikeSharp.API": "1.0.340" + }, + "runtime": { + "Cs2SuperPowersPlugin.dll": {} + } + }, + "CounterStrikeSharp.API/1.0.340": { + "dependencies": { + "McMaster.NETCore.Plugins": "1.4.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.DotNet.ApiCompat.Task": "8.0.203", + "Microsoft.Extensions.Hosting": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Localization.Abstractions": "8.0.3", + "Microsoft.Extensions.Logging": "8.0.0", + "Scrutor": "4.2.2", + "Serilog.Extensions.Logging": "8.0.0", + "Serilog.Sinks.Console": "5.0.0", + "Serilog.Sinks.File": "5.0.0", + "System.Data.DataSetExtensions": "4.5.0", + "Tomlyn": "0.19.0" + }, + "runtime": { + "lib/net8.0/CounterStrikeSharp.API.dll": { + "assemblyVersion": "1.0.340.0", + "fileVersion": "1.0.340.0" + } + } + }, + "McMaster.NETCore.Plugins/1.4.0": { + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "3.1.6", + "Microsoft.Extensions.DependencyModel": "6.0.0" + }, + "runtime": { + "lib/netcoreapp3.1/McMaster.NETCore.Plugins.dll": { + "assemblyVersion": "1.4.0.0", + "fileVersion": "1.4.0.0" + } + } + }, + "Microsoft.CSharp/4.7.0": {}, + "Microsoft.DotNet.ApiCompat.Task/8.0.203": {}, + "Microsoft.DotNet.PlatformAbstractions/3.1.6": { + "runtime": { + "lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.dll": { + "assemblyVersion": "3.1.6.0", + "fileVersion": "3.100.620.31604" + } + } + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.Json/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.DependencyInjection/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.DependencyModel/6.0.0": { + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "Microsoft.Extensions.Diagnostics/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Hosting/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.Configuration.UserSecrets": "8.0.0", + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Logging.Console": "8.0.0", + "Microsoft.Extensions.Logging.Debug": "8.0.0", + "Microsoft.Extensions.Logging.EventLog": "8.0.0", + "Microsoft.Extensions.Logging.EventSource": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Localization.Abstractions/8.0.3": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.Localization.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.324.11615" + } + } + }, + "Microsoft.Extensions.Logging/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Logging.Configuration/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Logging.Console/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Console.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Logging.Debug/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Logging.EventLog/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.EventLog": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Logging.EventSource/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Options/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Scrutor/4.2.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyModel": "6.0.0" + }, + "runtime": { + "lib/net6.0/Scrutor.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.0.0.0" + } + } + }, + "Serilog/3.1.1": { + "runtime": { + "lib/net7.0/Serilog.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "3.1.1.0" + } + } + }, + "Serilog.Extensions.Logging/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" + }, + "runtime": { + "lib/net8.0/Serilog.Extensions.Logging.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "8.0.0.0" + } + } + }, + "Serilog.Sinks.Console/5.0.0": { + "dependencies": { + "Serilog": "3.1.1" + }, + "runtime": { + "lib/net7.0/Serilog.Sinks.Console.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "Serilog.Sinks.File/5.0.0": { + "dependencies": { + "Serilog": "3.1.1" + }, + "runtime": { + "lib/net5.0/Serilog.Sinks.File.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "System.Buffers/4.5.1": {}, + "System.Data.DataSetExtensions/4.5.0": {}, + "System.Diagnostics.DiagnosticSource/8.0.0": {}, + "System.Diagnostics.EventLog/8.0.0": { + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + }, + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Memory/4.5.4": {}, + "System.Runtime.CompilerServices.Unsafe/6.0.0": {}, + "System.Text.Encodings.Web/8.0.0": {}, + "System.Text.Json/8.0.0": { + "dependencies": { + "System.Text.Encodings.Web": "8.0.0" + } + }, + "Tomlyn/0.19.0": { + "runtime": { + "lib/net8.0/Tomlyn.dll": { + "assemblyVersion": "0.19.0.0", + "fileVersion": "0.19.0.0" + } + } + } + } + }, + "libraries": { + "Cs2SuperPowersPlugin/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "CounterStrikeSharp.API/1.0.340": { + "type": "package", + "serviceable": true, + "sha512": "sha512-d4Sl5+INHZ8l4fptY8IECFKiXd5cSKZyuLNjigZcD5HlY379jq50hSYNsqiG0tzlaCw1WAN0+4HSdS7XyULh3Q==", + "path": "counterstrikesharp.api/1.0.340", + "hashPath": "counterstrikesharp.api.1.0.340.nupkg.sha512" + }, + "McMaster.NETCore.Plugins/1.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UKw5Z2/QHhkR7kiAJmqdCwVDMQV0lwsfj10+FG676r8DsJWIpxtachtEjE0qBs9WoK5GUQIqxgyFeYUSwuPszg==", + "path": "mcmaster.netcore.plugins/1.4.0", + "hashPath": "mcmaster.netcore.plugins.1.4.0.nupkg.sha512" + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==", + "path": "microsoft.csharp/4.7.0", + "hashPath": "microsoft.csharp.4.7.0.nupkg.sha512" + }, + "Microsoft.DotNet.ApiCompat.Task/8.0.203": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nPEGMojf1mj1oVixe0aiBimSn6xUoZswSjpMPZFMkZ+znYm2GEM5tWGZEWb6OSNIo5gWKyDi1WcI4IL7YiL1Zw==", + "path": "microsoft.dotnet.apicompat.task/8.0.203", + "hashPath": "microsoft.dotnet.apicompat.task.8.0.203.nupkg.sha512" + }, + "Microsoft.DotNet.PlatformAbstractions/3.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg==", + "path": "microsoft.dotnet.platformabstractions/3.1.6", + "hashPath": "microsoft.dotnet.platformabstractions.3.1.6.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "path": "microsoft.extensions.configuration/8.0.0", + "hashPath": "microsoft.extensions.configuration.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "path": "microsoft.extensions.configuration.abstractions/8.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", + "path": "microsoft.extensions.configuration.binder/8.0.0", + "hashPath": "microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", + "path": "microsoft.extensions.configuration.commandline/8.0.0", + "hashPath": "microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", + "path": "microsoft.extensions.configuration.environmentvariables/8.0.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==", + "path": "microsoft.extensions.configuration.fileextensions/8.0.0", + "hashPath": "microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Json/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==", + "path": "microsoft.extensions.configuration.json/8.0.0", + "hashPath": "microsoft.extensions.configuration.json.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==", + "path": "microsoft.extensions.configuration.usersecrets/8.0.0", + "hashPath": "microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "path": "microsoft.extensions.dependencyinjection/8.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==", + "path": "microsoft.extensions.dependencymodel/6.0.0", + "hashPath": "microsoft.extensions.dependencymodel.6.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "path": "microsoft.extensions.diagnostics/8.0.0", + "hashPath": "microsoft.extensions.diagnostics.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.0", + "hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", + "path": "microsoft.extensions.fileproviders.physical/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==", + "path": "microsoft.extensions.filesystemglobbing/8.0.0", + "hashPath": "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==", + "path": "microsoft.extensions.hosting/8.0.0", + "hashPath": "microsoft.extensions.hosting.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", + "path": "microsoft.extensions.hosting.abstractions/8.0.0", + "hashPath": "microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Localization.Abstractions/8.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-k/kUPm1FQBxcs9/vsM1eF4qIOg2Sovqh/+KUGHur5Mc0Y3OFGuoz9ktBX7LA0gPz53SZhW3W3oaSaMFFcjgM6Q==", + "path": "microsoft.extensions.localization.abstractions/8.0.3", + "hashPath": "microsoft.extensions.localization.abstractions.8.0.3.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "path": "microsoft.extensions.logging/8.0.0", + "hashPath": "microsoft.extensions.logging.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "path": "microsoft.extensions.logging.abstractions/8.0.0", + "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Configuration/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==", + "path": "microsoft.extensions.logging.configuration/8.0.0", + "hashPath": "microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Console/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==", + "path": "microsoft.extensions.logging.console/8.0.0", + "hashPath": "microsoft.extensions.logging.console.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Debug/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==", + "path": "microsoft.extensions.logging.debug/8.0.0", + "hashPath": "microsoft.extensions.logging.debug.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.EventLog/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==", + "path": "microsoft.extensions.logging.eventlog/8.0.0", + "hashPath": "microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.EventSource/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==", + "path": "microsoft.extensions.logging.eventsource/8.0.0", + "hashPath": "microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Options/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "path": "microsoft.extensions.options/8.0.0", + "hashPath": "microsoft.extensions.options.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", + "path": "microsoft.extensions.options.configurationextensions/8.0.0", + "hashPath": "microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "path": "microsoft.extensions.primitives/8.0.0", + "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512" + }, + "Scrutor/4.2.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t5VIYA7WJXoJJo7s4DoHakMGwTu+MeEnZumMOhTCH7kz9xWha24G7dJNxWrHPlu0ZdZAS4jDZCxxAnyaBh7uYw==", + "path": "scrutor/4.2.2", + "hashPath": "scrutor.4.2.2.nupkg.sha512" + }, + "Serilog/3.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A==", + "path": "serilog/3.1.1", + "hashPath": "serilog.3.1.1.nupkg.sha512" + }, + "Serilog.Extensions.Logging/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", + "path": "serilog.extensions.logging/8.0.0", + "hashPath": "serilog.extensions.logging.8.0.0.nupkg.sha512" + }, + "Serilog.Sinks.Console/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IZ6bn79k+3SRXOBpwSOClUHikSkp2toGPCZ0teUkscv4dpDg9E2R2xVsNkLmwddE4OpNVO3N0xiYsAH556vN8Q==", + "path": "serilog.sinks.console/5.0.0", + "hashPath": "serilog.sinks.console.5.0.0.nupkg.sha512" + }, + "Serilog.Sinks.File/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==", + "path": "serilog.sinks.file/5.0.0", + "hashPath": "serilog.sinks.file.5.0.0.nupkg.sha512" + }, + "System.Buffers/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "path": "system.buffers/4.5.1", + "hashPath": "system.buffers.4.5.1.nupkg.sha512" + }, + "System.Data.DataSetExtensions/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-221clPs1445HkTBZPL+K9sDBdJRB8UN8rgjO3ztB0CQ26z//fmJXtlsr6whGatscsKGBrhJl5bwJuKSA8mwFOw==", + "path": "system.data.datasetextensions/4.5.0", + "hashPath": "system.data.datasetextensions.4.5.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==", + "path": "system.diagnostics.diagnosticsource/8.0.0", + "hashPath": "system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512" + }, + "System.Diagnostics.EventLog/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "path": "system.diagnostics.eventlog/8.0.0", + "hashPath": "system.diagnostics.eventlog.8.0.0.nupkg.sha512" + }, + "System.Memory/4.5.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "path": "system.memory/4.5.4", + "hashPath": "system.memory.4.5.4.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", + "path": "system.text.encodings.web/8.0.0", + "hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512" + }, + "System.Text.Json/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", + "path": "system.text.json/8.0.0", + "hashPath": "system.text.json.8.0.0.nupkg.sha512" + }, + "Tomlyn/0.19.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GlI2o8R8jbZIaE+YX6uA/VoAOH7zIxYeqxDm7jHW2hqUhuB+q19oKold35FkMuv8IZDoCqsTMolaBv2eBLBmrQ==", + "path": "tomlyn/0.19.0", + "hashPath": "tomlyn.0.19.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll b/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..67a025c Binary files /dev/null and b/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll differ diff --git a/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb b/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb new file mode 100644 index 0000000..408dee8 Binary files /dev/null and b/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb differ diff --git a/obj/Cs2SuperPowers.csproj.nuget.dgspec.json b/obj/Cs2SuperPowers.csproj.nuget.dgspec.json new file mode 100644 index 0000000..96a177c --- /dev/null +++ b/obj/Cs2SuperPowers.csproj.nuget.dgspec.json @@ -0,0 +1,67 @@ +{ + "format": 1, + "restore": { + "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj": {} + }, + "projects": { + "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj", + "projectName": "Cs2SuperPowersPlugin", + "projectPath": "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj", + "packagesPath": "/root/.nuget/packages/", + "outputPath": "/root/cs2-super-powers/src/Cs2SuperPowers/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/root/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "CounterStrikeSharp.API": { + "target": "Package", + "version": "[1.0.340, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.129/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/obj/Cs2SuperPowers.csproj.nuget.g.props b/obj/Cs2SuperPowers.csproj.nuget.g.props new file mode 100644 index 0000000..71733b3 --- /dev/null +++ b/obj/Cs2SuperPowers.csproj.nuget.g.props @@ -0,0 +1,21 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /root/.nuget/packages/ + /root/.nuget/packages/ + PackageReference + 6.8.2 + + + + + + + + + /root/.nuget/packages/microsoft.dotnet.apicompat.task/8.0.203 + + \ No newline at end of file diff --git a/obj/Cs2SuperPowers.csproj.nuget.g.targets b/obj/Cs2SuperPowers.csproj.nuget.g.targets new file mode 100644 index 0000000..fd8701f --- /dev/null +++ b/obj/Cs2SuperPowers.csproj.nuget.g.targets @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs b/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs new file mode 100644 index 0000000..407e478 --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Cs2SuperPowersPlugin")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6b9188af13e48a65cfefd8729e5e5469a0b35c1e")] +[assembly: System.Reflection.AssemblyProductAttribute("Cs2SuperPowersPlugin")] +[assembly: System.Reflection.AssemblyTitleAttribute("Cs2SuperPowersPlugin")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache b/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1695795 --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +fc9824fdd39076879a9102cc1b172ceb7340b30cd70e3dd0cdc1e76853ff07aa diff --git a/obj/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3a75dd8 --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Cs2SuperPowers +build_property.ProjectDir = /root/cs2-super-powers/src/Cs2SuperPowers/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/obj/Debug/net8.0/Cs2SuperPowers.GlobalUsings.g.cs b/obj/Debug/net8.0/Cs2SuperPowers.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/obj/Debug/net8.0/Cs2SuperPowers.assets.cache b/obj/Debug/net8.0/Cs2SuperPowers.assets.cache new file mode 100644 index 0000000..c4619a4 Binary files /dev/null and b/obj/Debug/net8.0/Cs2SuperPowers.assets.cache differ diff --git a/obj/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache b/obj/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache new file mode 100644 index 0000000..7c077fb Binary files /dev/null and b/obj/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache differ diff --git a/obj/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache b/obj/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..fac3c6c --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +5eefefd3a6dc2eb1c4e2012b99d9fde56476ddbf4a1872eb47da73d9bc38b56a diff --git a/obj/Debug/net8.0/Cs2SuperPowers.csproj.FileListAbsolute.txt b/obj/Debug/net8.0/Cs2SuperPowers.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..f86b96b --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.csproj.FileListAbsolute.txt @@ -0,0 +1,13 @@ +/root/cs2-super-powers/src/Cs2SuperPowers/bin/Debug/net8.0/Cs2SuperPowersPlugin.deps.json +/root/cs2-super-powers/src/Cs2SuperPowers/bin/Debug/net8.0/Cs2SuperPowersPlugin.dll +/root/cs2-super-powers/src/Cs2SuperPowers/bin/Debug/net8.0/Cs2SuperPowersPlugin.pdb +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowers.sourcelink.json +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowersPlugin.dll +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/Cs2SuperPowersPlugin.pdb +/root/cs2-super-powers/src/Cs2SuperPowers/obj/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll diff --git a/obj/Debug/net8.0/Cs2SuperPowers.sourcelink.json b/obj/Debug/net8.0/Cs2SuperPowers.sourcelink.json new file mode 100644 index 0000000..fe70907 --- /dev/null +++ b/obj/Debug/net8.0/Cs2SuperPowers.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"/root/cs2-super-powers/*":"https://raw.githubusercontent.com/daniel-Jones/cs2-super-powers/6b9188af13e48a65cfefd8729e5e5469a0b35c1e/*"}} \ No newline at end of file diff --git a/obj/Debug/net8.0/Cs2SuperPowersPlugin.dll b/obj/Debug/net8.0/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..5a4f049 Binary files /dev/null and b/obj/Debug/net8.0/Cs2SuperPowersPlugin.dll differ diff --git a/obj/Debug/net8.0/Cs2SuperPowersPlugin.pdb b/obj/Debug/net8.0/Cs2SuperPowersPlugin.pdb new file mode 100644 index 0000000..e4011c7 Binary files /dev/null and b/obj/Debug/net8.0/Cs2SuperPowersPlugin.pdb differ diff --git a/obj/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll b/obj/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..19f2812 Binary files /dev/null and b/obj/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll differ diff --git a/obj/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll b/obj/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..19f2812 Binary files /dev/null and b/obj/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll differ diff --git a/obj/linux/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/obj/linux/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/obj/linux/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs b/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs new file mode 100644 index 0000000..407e478 --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Cs2SuperPowersPlugin")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6b9188af13e48a65cfefd8729e5e5469a0b35c1e")] +[assembly: System.Reflection.AssemblyProductAttribute("Cs2SuperPowersPlugin")] +[assembly: System.Reflection.AssemblyTitleAttribute("Cs2SuperPowersPlugin")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache b/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1695795 --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +fc9824fdd39076879a9102cc1b172ceb7340b30cd70e3dd0cdc1e76853ff07aa diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig b/obj/linux/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3a75dd8 --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Cs2SuperPowers +build_property.ProjectDir = /root/cs2-super-powers/src/Cs2SuperPowers/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.GlobalUsings.g.cs b/obj/linux/Debug/net8.0/Cs2SuperPowers.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.assets.cache b/obj/linux/Debug/net8.0/Cs2SuperPowers.assets.cache new file mode 100644 index 0000000..81d9de8 Binary files /dev/null and b/obj/linux/Debug/net8.0/Cs2SuperPowers.assets.cache differ diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache b/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache new file mode 100644 index 0000000..7c077fb Binary files /dev/null and b/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache differ diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache b/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..22b72fa --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +62926f76f909b1bea4bedcdd9f0707f28f15895e174e05e2e35caa7566aa82f1 diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.FileListAbsolute.txt b/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..84d50b1 --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.FileListAbsolute.txt @@ -0,0 +1,13 @@ +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.AssemblyReference.cache +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowers.GeneratedMSBuildEditorConfig.editorconfig +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfoInputs.cache +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowers.AssemblyInfo.cs +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowers.csproj.CoreCompileInputs.cache +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowers.sourcelink.json +/root/cs2-super-powers/src/Cs2SuperPowers/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.deps.json +/root/cs2-super-powers/src/Cs2SuperPowers/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll +/root/cs2-super-powers/src/Cs2SuperPowers/bin/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb +/root/cs2-super-powers/src/Cs2SuperPowers/obj/linux/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowers.sourcelink.json b/obj/linux/Debug/net8.0/Cs2SuperPowers.sourcelink.json new file mode 100644 index 0000000..fe70907 --- /dev/null +++ b/obj/linux/Debug/net8.0/Cs2SuperPowers.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"/root/cs2-super-powers/*":"https://raw.githubusercontent.com/daniel-Jones/cs2-super-powers/6b9188af13e48a65cfefd8729e5e5469a0b35c1e/*"}} \ No newline at end of file diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll b/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..67a025c Binary files /dev/null and b/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.dll differ diff --git a/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb b/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb new file mode 100644 index 0000000..408dee8 Binary files /dev/null and b/obj/linux/Debug/net8.0/Cs2SuperPowersPlugin.pdb differ diff --git a/obj/linux/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll b/obj/linux/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..cb79b2a Binary files /dev/null and b/obj/linux/Debug/net8.0/ref/Cs2SuperPowersPlugin.dll differ diff --git a/obj/linux/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll b/obj/linux/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll new file mode 100644 index 0000000..cb79b2a Binary files /dev/null and b/obj/linux/Debug/net8.0/refint/Cs2SuperPowersPlugin.dll differ diff --git a/obj/project.assets.json b/obj/project.assets.json new file mode 100644 index 0000000..3854b7c --- /dev/null +++ b/obj/project.assets.json @@ -0,0 +1,2619 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "CounterStrikeSharp.API/1.0.340": { + "type": "package", + "dependencies": { + "McMaster.NETCore.Plugins": "1.4.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.DotNet.ApiCompat.Task": "8.0.203", + "Microsoft.Extensions.Hosting": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Localization.Abstractions": "8.0.3", + "Microsoft.Extensions.Logging": "8.0.0", + "Scrutor": "4.2.2", + "Serilog.Extensions.Logging": "8.0.0", + "Serilog.Sinks.Console": "5.0.0", + "Serilog.Sinks.File": "5.0.0", + "System.Data.DataSetExtensions": "4.5.0", + "Tomlyn": "0.19.0" + }, + "compile": { + "lib/net8.0/CounterStrikeSharp.API.dll": { + "related": ".runtimeconfig.json;.xml" + } + }, + "runtime": { + "lib/net8.0/CounterStrikeSharp.API.dll": { + "related": ".runtimeconfig.json;.xml" + } + } + }, + "McMaster.NETCore.Plugins/1.4.0": { + "type": "package", + "dependencies": { + "Microsoft.DotNet.PlatformAbstractions": "3.1.6", + "Microsoft.Extensions.DependencyModel": "5.0.0" + }, + "compile": { + "lib/netcoreapp3.1/McMaster.NETCore.Plugins.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp3.1/McMaster.NETCore.Plugins.dll": { + "related": ".xml" + } + } + }, + "Microsoft.CSharp/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "Microsoft.DotNet.ApiCompat.Task/8.0.203": { + "type": "package", + "build": { + "build/_._": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/_._": {} + } + }, + "Microsoft.DotNet.PlatformAbstractions/3.1.6": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Binder/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets": {} + } + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Json/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.props": {}, + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.targets": {} + } + }, + "Microsoft.Extensions.DependencyInjection/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyModel/6.0.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0", + "System.Text.Json": "6.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Diagnostics/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Hosting/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.Configuration.UserSecrets": "8.0.0", + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Logging.Console": "8.0.0", + "Microsoft.Extensions.Logging.Debug": "8.0.0", + "Microsoft.Extensions.Logging.EventLog": "8.0.0", + "Microsoft.Extensions.Logging.EventSource": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Hosting.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Localization.Abstractions/8.0.3": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.Extensions.Localization.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Localization.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Logging/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {} + } + }, + "Microsoft.Extensions.Logging.Configuration/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Console/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.Console.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Console.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Debug/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.EventLog/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.EventLog": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.EventSource/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0", + "System.Text.Json": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Options/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/Microsoft.Extensions.Options.targets": {} + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Scrutor/4.2.2": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.DependencyModel": "6.0.0" + }, + "compile": { + "lib/net6.0/Scrutor.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net6.0/Scrutor.dll": { + "related": ".pdb;.xml" + } + } + }, + "Serilog/3.1.1": { + "type": "package", + "compile": { + "lib/net7.0/Serilog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Serilog.dll": { + "related": ".xml" + } + } + }, + "Serilog.Extensions.Logging/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" + }, + "compile": { + "lib/net8.0/Serilog.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Serilog.Extensions.Logging.dll": { + "related": ".xml" + } + } + }, + "Serilog.Sinks.Console/5.0.0": { + "type": "package", + "dependencies": { + "Serilog": "3.1.0" + }, + "compile": { + "lib/net7.0/Serilog.Sinks.Console.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Serilog.Sinks.Console.dll": { + "related": ".xml" + } + } + }, + "Serilog.Sinks.File/5.0.0": { + "type": "package", + "dependencies": { + "Serilog": "2.10.0" + }, + "compile": { + "lib/net5.0/Serilog.Sinks.File.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net5.0/Serilog.Sinks.File.dll": { + "related": ".pdb;.xml" + } + } + }, + "System.Buffers/4.5.1": { + "type": "package", + "compile": { + "ref/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + } + }, + "System.Data.DataSetExtensions/4.5.0": { + "type": "package", + "compile": { + "ref/netstandard2.0/System.Data.DataSetExtensions.dll": {} + }, + "runtime": { + "lib/netstandard2.0/System.Data.DataSetExtensions.dll": {} + } + }, + "System.Diagnostics.DiagnosticSource/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Diagnostics.EventLog/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { + "assetType": "runtime", + "rid": "win" + }, + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Memory/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": { + "assetType": "runtime", + "rid": "browser" + } + } + }, + "System.Text.Json/8.0.0": { + "type": "package", + "dependencies": { + "System.Text.Encodings.Web": "8.0.0" + }, + "compile": { + "lib/net8.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/System.Text.Json.targets": {} + } + }, + "Tomlyn/0.19.0": { + "type": "package", + "compile": { + "lib/net8.0/Tomlyn.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Tomlyn.dll": { + "related": ".xml" + } + } + } + } + }, + "libraries": { + "CounterStrikeSharp.API/1.0.340": { + "sha512": "d4Sl5+INHZ8l4fptY8IECFKiXd5cSKZyuLNjigZcD5HlY379jq50hSYNsqiG0tzlaCw1WAN0+4HSdS7XyULh3Q==", + "type": "package", + "path": "counterstrikesharp.api/1.0.340", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "counterstrikesharp.api.1.0.340.nupkg.sha512", + "counterstrikesharp.api.nuspec", + "lib/net8.0/CounterStrikeSharp.API.dll", + "lib/net8.0/CounterStrikeSharp.API.runtimeconfig.json", + "lib/net8.0/CounterStrikeSharp.API.xml" + ] + }, + "McMaster.NETCore.Plugins/1.4.0": { + "sha512": "UKw5Z2/QHhkR7kiAJmqdCwVDMQV0lwsfj10+FG676r8DsJWIpxtachtEjE0qBs9WoK5GUQIqxgyFeYUSwuPszg==", + "type": "package", + "path": "mcmaster.netcore.plugins/1.4.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netcoreapp2.1/McMaster.NETCore.Plugins.dll", + "lib/netcoreapp2.1/McMaster.NETCore.Plugins.xml", + "lib/netcoreapp3.1/McMaster.NETCore.Plugins.dll", + "lib/netcoreapp3.1/McMaster.NETCore.Plugins.xml", + "mcmaster.netcore.plugins.1.4.0.nupkg.sha512", + "mcmaster.netcore.plugins.nuspec" + ] + }, + "Microsoft.CSharp/4.7.0": { + "sha512": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==", + "type": "package", + "path": "microsoft.csharp/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/Microsoft.CSharp.dll", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.3/Microsoft.CSharp.dll", + "lib/netstandard2.0/Microsoft.CSharp.dll", + "lib/netstandard2.0/Microsoft.CSharp.xml", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/uap10.0.16299/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "microsoft.csharp.4.7.0.nupkg.sha512", + "microsoft.csharp.nuspec", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/Microsoft.CSharp.dll", + "ref/netcore50/Microsoft.CSharp.xml", + "ref/netcore50/de/Microsoft.CSharp.xml", + "ref/netcore50/es/Microsoft.CSharp.xml", + "ref/netcore50/fr/Microsoft.CSharp.xml", + "ref/netcore50/it/Microsoft.CSharp.xml", + "ref/netcore50/ja/Microsoft.CSharp.xml", + "ref/netcore50/ko/Microsoft.CSharp.xml", + "ref/netcore50/ru/Microsoft.CSharp.xml", + "ref/netcore50/zh-hans/Microsoft.CSharp.xml", + "ref/netcore50/zh-hant/Microsoft.CSharp.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.0/Microsoft.CSharp.dll", + "ref/netstandard1.0/Microsoft.CSharp.xml", + "ref/netstandard1.0/de/Microsoft.CSharp.xml", + "ref/netstandard1.0/es/Microsoft.CSharp.xml", + "ref/netstandard1.0/fr/Microsoft.CSharp.xml", + "ref/netstandard1.0/it/Microsoft.CSharp.xml", + "ref/netstandard1.0/ja/Microsoft.CSharp.xml", + "ref/netstandard1.0/ko/Microsoft.CSharp.xml", + "ref/netstandard1.0/ru/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml", + "ref/netstandard2.0/Microsoft.CSharp.dll", + "ref/netstandard2.0/Microsoft.CSharp.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/uap10.0.16299/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.DotNet.ApiCompat.Task/8.0.203": { + "sha512": "nPEGMojf1mj1oVixe0aiBimSn6xUoZswSjpMPZFMkZ+znYm2GEM5tWGZEWb6OSNIo5gWKyDi1WcI4IL7YiL1Zw==", + "type": "package", + "path": "microsoft.dotnet.apicompat.task/8.0.203", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.txt", + "build/Microsoft.DotNet.ApiCompat.Task.targets", + "build/Microsoft.DotNet.ApiCompat.ValidateAssemblies.Common.targets", + "build/Microsoft.DotNet.ApiCompat.ValidateAssemblies.CrossTargeting.targets", + "build/Microsoft.DotNet.ApiCompat.ValidateAssemblies.NonCrossTargeting.targets", + "build/Microsoft.NET.ApiCompat.Common.targets", + "build/Microsoft.NET.ApiCompat.ValidatePackage.targets", + "buildMultiTargeting/Microsoft.DotNet.ApiCompat.Task.targets", + "microsoft.dotnet.apicompat.task.8.0.203.nupkg.sha512", + "microsoft.dotnet.apicompat.task.nuspec", + "tools/net472/Microsoft.DotNet.ApiCompat.Task.dll", + "tools/net472/Microsoft.DotNet.ApiCompat.Task.dll.config", + "tools/net472/Microsoft.DotNet.ApiCompat.Task.pdb", + "tools/net472/Microsoft.DotNet.ApiCompat.Task.xml", + "tools/net472/Microsoft.DotNet.ApiCompatibility.dll", + "tools/net472/Microsoft.DotNet.ApiCompatibility.dll.config", + "tools/net472/Microsoft.DotNet.ApiCompatibility.pdb", + "tools/net472/Microsoft.DotNet.ApiCompatibility.xml", + "tools/net472/Microsoft.DotNet.ApiSymbolExtensions.dll", + "tools/net472/Microsoft.DotNet.ApiSymbolExtensions.dll.config", + "tools/net472/Microsoft.DotNet.ApiSymbolExtensions.pdb", + "tools/net472/Microsoft.DotNet.ApiSymbolExtensions.xml", + "tools/net472/Microsoft.DotNet.PackageValidation.dll", + "tools/net472/Microsoft.DotNet.PackageValidation.dll.config", + "tools/net472/Microsoft.DotNet.PackageValidation.pdb", + "tools/net472/Microsoft.DotNet.PackageValidation.xml", + "tools/net472/Newtonsoft.Json.dll", + "tools/net472/NuGet.Common.dll", + "tools/net472/NuGet.Configuration.dll", + "tools/net472/NuGet.Frameworks.dll", + "tools/net472/NuGet.Packaging.dll", + "tools/net472/NuGet.Versioning.dll", + "tools/net472/cs/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/cs/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/cs/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/cs/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/de/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/de/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/de/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/de/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/es/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/es/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/es/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/es/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/fr/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/fr/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/fr/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/fr/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/it/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/it/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/it/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/it/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/ja/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/ja/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/ja/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/ja/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/ko/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/ko/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/ko/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/ko/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/pl/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/pl/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/pl/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/pl/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/pt-BR/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/pt-BR/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/pt-BR/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/pt-BR/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/ru/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/ru/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/ru/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/ru/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/tr/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/tr/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/tr/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/tr/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/zh-Hans/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/zh-Hans/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/zh-Hans/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/zh-Hans/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net472/zh-Hant/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net472/zh-Hant/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net472/zh-Hant/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net472/zh-Hant/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/Microsoft.DotNet.ApiCompat.Task.deps.json", + "tools/net6.0/Microsoft.DotNet.ApiCompat.Task.dll", + "tools/net6.0/Microsoft.DotNet.ApiCompat.Task.pdb", + "tools/net6.0/Microsoft.DotNet.ApiCompat.Task.xml", + "tools/net6.0/Microsoft.DotNet.ApiCompatibility.dll", + "tools/net6.0/Microsoft.DotNet.ApiCompatibility.pdb", + "tools/net6.0/Microsoft.DotNet.ApiCompatibility.xml", + "tools/net6.0/Microsoft.DotNet.ApiSymbolExtensions.dll", + "tools/net6.0/Microsoft.DotNet.ApiSymbolExtensions.pdb", + "tools/net6.0/Microsoft.DotNet.ApiSymbolExtensions.xml", + "tools/net6.0/Microsoft.DotNet.PackageValidation.dll", + "tools/net6.0/Microsoft.DotNet.PackageValidation.pdb", + "tools/net6.0/Microsoft.DotNet.PackageValidation.xml", + "tools/net6.0/Newtonsoft.Json.dll", + "tools/net6.0/NuGet.Common.dll", + "tools/net6.0/NuGet.Configuration.dll", + "tools/net6.0/NuGet.Frameworks.dll", + "tools/net6.0/NuGet.Packaging.dll", + "tools/net6.0/NuGet.Versioning.dll", + "tools/net6.0/System.Formats.Asn1.dll", + "tools/net6.0/System.Security.Cryptography.Pkcs.dll", + "tools/net6.0/System.Security.Cryptography.ProtectedData.dll", + "tools/net6.0/cs/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/cs/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/cs/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/cs/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/de/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/de/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/de/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/de/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/es/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/es/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/es/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/es/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/fr/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/fr/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/fr/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/fr/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/it/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/it/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/it/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/it/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/ja/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/ja/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/ja/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/ja/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/ko/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/ko/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/ko/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/ko/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/pl/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/pl/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/pl/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/pl/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/pt-BR/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/pt-BR/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/pt-BR/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/pt-BR/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/ru/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/ru/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/ru/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/ru/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/runtimes/win/lib/net6.0/System.Security.Cryptography.Pkcs.dll", + "tools/net6.0/tr/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/tr/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/tr/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/tr/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/zh-Hans/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/zh-Hans/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/zh-Hans/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/zh-Hans/Microsoft.DotNet.PackageValidation.resources.dll", + "tools/net6.0/zh-Hant/Microsoft.DotNet.ApiCompat.Task.resources.dll", + "tools/net6.0/zh-Hant/Microsoft.DotNet.ApiCompatibility.resources.dll", + "tools/net6.0/zh-Hant/Microsoft.DotNet.ApiSymbolExtensions.resources.dll", + "tools/net6.0/zh-Hant/Microsoft.DotNet.PackageValidation.resources.dll" + ] + }, + "Microsoft.DotNet.PlatformAbstractions/3.1.6": { + "sha512": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg==", + "type": "package", + "path": "microsoft.dotnet.platformabstractions/3.1.6", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net45/Microsoft.DotNet.PlatformAbstractions.dll", + "lib/net45/Microsoft.DotNet.PlatformAbstractions.xml", + "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.dll", + "lib/netstandard1.3/Microsoft.DotNet.PlatformAbstractions.xml", + "lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.dll", + "lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.xml", + "microsoft.dotnet.platformabstractions.3.1.6.nupkg.sha512", + "microsoft.dotnet.platformabstractions.nuspec" + ] + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "sha512": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "type": "package", + "path": "microsoft.extensions.configuration/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.targets", + "lib/net462/Microsoft.Extensions.Configuration.dll", + "lib/net462/Microsoft.Extensions.Configuration.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.xml", + "microsoft.extensions.configuration.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "sha512": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Binder/8.0.0": { + "sha512": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", + "type": "package", + "path": "microsoft.extensions.configuration.binder/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/cs/Microsoft.Extensions.Configuration.Binder.SourceGeneration.dll", + "analyzers/dotnet/cs/cs/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets", + "lib/net462/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net462/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.xml", + "microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.binder.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { + "sha512": "NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", + "type": "package", + "path": "microsoft.extensions.configuration.commandline/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.CommandLine.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.CommandLine.targets", + "lib/net462/Microsoft.Extensions.Configuration.CommandLine.dll", + "lib/net462/Microsoft.Extensions.Configuration.CommandLine.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.CommandLine.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.CommandLine.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.CommandLine.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.CommandLine.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.CommandLine.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.CommandLine.xml", + "microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.commandline.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "sha512": "plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", + "type": "package", + "path": "microsoft.extensions.configuration.environmentvariables/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.EnvironmentVariables.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.targets", + "lib/net462/Microsoft.Extensions.Configuration.EnvironmentVariables.dll", + "lib/net462/Microsoft.Extensions.Configuration.EnvironmentVariables.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.EnvironmentVariables.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.EnvironmentVariables.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.EnvironmentVariables.xml", + "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.environmentvariables.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { + "sha512": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==", + "type": "package", + "path": "microsoft.extensions.configuration.fileextensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.FileExtensions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.FileExtensions.targets", + "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.fileextensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Json/8.0.0": { + "sha512": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==", + "type": "package", + "path": "microsoft.extensions.configuration.json/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Json.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Json.targets", + "lib/net462/Microsoft.Extensions.Configuration.Json.dll", + "lib/net462/Microsoft.Extensions.Configuration.Json.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll", + "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.xml", + "microsoft.extensions.configuration.json.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { + "sha512": "ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==", + "type": "package", + "path": "microsoft.extensions.configuration.usersecrets/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/net462/Microsoft.Extensions.Configuration.UserSecrets.props", + "buildTransitive/net462/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.props", + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.props", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.targets", + "lib/net462/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net462/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512", + "microsoft.extensions.configuration.usersecrets.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/8.0.0": { + "sha512": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "sha512": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyModel/6.0.0": { + "sha512": "TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==", + "type": "package", + "path": "microsoft.extensions.dependencymodel/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Extensions.DependencyModel.dll", + "lib/net461/Microsoft.Extensions.DependencyModel.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.xml", + "microsoft.extensions.dependencymodel.6.0.0.nupkg.sha512", + "microsoft.extensions.dependencymodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Diagnostics/8.0.0": { + "sha512": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "type": "package", + "path": "microsoft.extensions.diagnostics/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Diagnostics.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Diagnostics.targets", + "lib/net462/Microsoft.Extensions.Diagnostics.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.xml", + "lib/net6.0/Microsoft.Extensions.Diagnostics.dll", + "lib/net6.0/Microsoft.Extensions.Diagnostics.xml", + "lib/net7.0/Microsoft.Extensions.Diagnostics.dll", + "lib/net7.0/Microsoft.Extensions.Diagnostics.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.xml", + "microsoft.extensions.diagnostics.8.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { + "sha512": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "type": "package", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "sha512": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "type": "package", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Abstractions.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "sha512": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", + "type": "package", + "path": "microsoft.extensions.fileproviders.physical/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Physical.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Physical.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.xml", + "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.physical.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "sha512": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==", + "type": "package", + "path": "microsoft.extensions.filesystemglobbing/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileSystemGlobbing.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileSystemGlobbing.targets", + "lib/net462/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net462/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512", + "microsoft.extensions.filesystemglobbing.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Hosting/8.0.0": { + "sha512": "ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==", + "type": "package", + "path": "microsoft.extensions.hosting/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Hosting.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Hosting.targets", + "lib/net462/Microsoft.Extensions.Hosting.dll", + "lib/net462/Microsoft.Extensions.Hosting.xml", + "lib/net6.0/Microsoft.Extensions.Hosting.dll", + "lib/net6.0/Microsoft.Extensions.Hosting.xml", + "lib/net7.0/Microsoft.Extensions.Hosting.dll", + "lib/net7.0/Microsoft.Extensions.Hosting.xml", + "lib/net8.0/Microsoft.Extensions.Hosting.dll", + "lib/net8.0/Microsoft.Extensions.Hosting.xml", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.dll", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.xml", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.dll", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.xml", + "microsoft.extensions.hosting.8.0.0.nupkg.sha512", + "microsoft.extensions.hosting.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { + "sha512": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", + "type": "package", + "path": "microsoft.extensions.hosting.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Hosting.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Hosting.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.xml", + "microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.hosting.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Localization.Abstractions/8.0.3": { + "sha512": "k/kUPm1FQBxcs9/vsM1eF4qIOg2Sovqh/+KUGHur5Mc0Y3OFGuoz9ktBX7LA0gPz53SZhW3W3oaSaMFFcjgM6Q==", + "type": "package", + "path": "microsoft.extensions.localization.abstractions/8.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "lib/net462/Microsoft.Extensions.Localization.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Localization.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Localization.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Localization.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Localization.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Localization.Abstractions.xml", + "microsoft.extensions.localization.abstractions.8.0.3.nupkg.sha512", + "microsoft.extensions.localization.abstractions.nuspec" + ] + }, + "Microsoft.Extensions.Logging/8.0.0": { + "sha512": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "type": "package", + "path": "microsoft.extensions.logging/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", + "lib/net462/Microsoft.Extensions.Logging.dll", + "lib/net462/Microsoft.Extensions.Logging.xml", + "lib/net6.0/Microsoft.Extensions.Logging.dll", + "lib/net6.0/Microsoft.Extensions.Logging.xml", + "lib/net7.0/Microsoft.Extensions.Logging.dll", + "lib/net7.0/Microsoft.Extensions.Logging.xml", + "lib/net8.0/Microsoft.Extensions.Logging.dll", + "lib/net8.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "sha512": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Configuration/8.0.0": { + "sha512": "ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==", + "type": "package", + "path": "microsoft.extensions.logging.configuration/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.Configuration.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Configuration.targets", + "lib/net462/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net462/Microsoft.Extensions.Logging.Configuration.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Configuration.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Configuration.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Configuration.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Configuration.xml", + "microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.configuration.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Console/8.0.0": { + "sha512": "e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==", + "type": "package", + "path": "microsoft.extensions.logging.console/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.Console.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Console.targets", + "lib/net462/Microsoft.Extensions.Logging.Console.dll", + "lib/net462/Microsoft.Extensions.Logging.Console.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Console.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Console.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Console.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Console.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Console.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Console.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Console.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Console.xml", + "microsoft.extensions.logging.console.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.console.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Debug/8.0.0": { + "sha512": "dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==", + "type": "package", + "path": "microsoft.extensions.logging.debug/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.Debug.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Debug.targets", + "lib/net462/Microsoft.Extensions.Logging.Debug.dll", + "lib/net462/Microsoft.Extensions.Logging.Debug.xml", + "lib/net6.0/Microsoft.Extensions.Logging.Debug.dll", + "lib/net6.0/Microsoft.Extensions.Logging.Debug.xml", + "lib/net7.0/Microsoft.Extensions.Logging.Debug.dll", + "lib/net7.0/Microsoft.Extensions.Logging.Debug.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Debug.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Debug.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Debug.xml", + "microsoft.extensions.logging.debug.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.debug.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.EventLog/8.0.0": { + "sha512": "3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==", + "type": "package", + "path": "microsoft.extensions.logging.eventlog/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.EventLog.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.EventLog.targets", + "lib/net462/Microsoft.Extensions.Logging.EventLog.dll", + "lib/net462/Microsoft.Extensions.Logging.EventLog.xml", + "lib/net6.0/Microsoft.Extensions.Logging.EventLog.dll", + "lib/net6.0/Microsoft.Extensions.Logging.EventLog.xml", + "lib/net7.0/Microsoft.Extensions.Logging.EventLog.dll", + "lib/net7.0/Microsoft.Extensions.Logging.EventLog.xml", + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll", + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.EventLog.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.EventLog.xml", + "microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.eventlog.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.EventSource/8.0.0": { + "sha512": "oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==", + "type": "package", + "path": "microsoft.extensions.logging.eventsource/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.EventSource.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.EventSource.targets", + "lib/net462/Microsoft.Extensions.Logging.EventSource.dll", + "lib/net462/Microsoft.Extensions.Logging.EventSource.xml", + "lib/net6.0/Microsoft.Extensions.Logging.EventSource.dll", + "lib/net6.0/Microsoft.Extensions.Logging.EventSource.xml", + "lib/net7.0/Microsoft.Extensions.Logging.EventSource.dll", + "lib/net7.0/Microsoft.Extensions.Logging.EventSource.xml", + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll", + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.EventSource.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.EventSource.xml", + "microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.eventsource.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options/8.0.0": { + "sha512": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "type": "package", + "path": "microsoft.extensions.options/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Options.targets", + "buildTransitive/net462/Microsoft.Extensions.Options.targets", + "buildTransitive/net6.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets", + "lib/net462/Microsoft.Extensions.Options.dll", + "lib/net462/Microsoft.Extensions.Options.xml", + "lib/net6.0/Microsoft.Extensions.Options.dll", + "lib/net6.0/Microsoft.Extensions.Options.xml", + "lib/net7.0/Microsoft.Extensions.Options.dll", + "lib/net7.0/Microsoft.Extensions.Options.xml", + "lib/net8.0/Microsoft.Extensions.Options.dll", + "lib/net8.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.1/Microsoft.Extensions.Options.dll", + "lib/netstandard2.1/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.8.0.0.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { + "sha512": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", + "type": "package", + "path": "microsoft.extensions.options.configurationextensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Options.ConfigurationExtensions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.ConfigurationExtensions.targets", + "lib/net462/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net462/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net6.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net6.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512", + "microsoft.extensions.options.configurationextensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "sha512": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "type": "package", + "path": "microsoft.extensions.primitives/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net6.0/Microsoft.Extensions.Primitives.dll", + "lib/net6.0/Microsoft.Extensions.Primitives.xml", + "lib/net7.0/Microsoft.Extensions.Primitives.dll", + "lib/net7.0/Microsoft.Extensions.Primitives.xml", + "lib/net8.0/Microsoft.Extensions.Primitives.dll", + "lib/net8.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.8.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Scrutor/4.2.2": { + "sha512": "t5VIYA7WJXoJJo7s4DoHakMGwTu+MeEnZumMOhTCH7kz9xWha24G7dJNxWrHPlu0ZdZAS4jDZCxxAnyaBh7uYw==", + "type": "package", + "path": "scrutor/4.2.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net461/Scrutor.dll", + "lib/net461/Scrutor.pdb", + "lib/net461/Scrutor.xml", + "lib/net6.0/Scrutor.dll", + "lib/net6.0/Scrutor.pdb", + "lib/net6.0/Scrutor.xml", + "lib/netcoreapp3.1/Scrutor.dll", + "lib/netcoreapp3.1/Scrutor.pdb", + "lib/netcoreapp3.1/Scrutor.xml", + "lib/netstandard2.0/Scrutor.dll", + "lib/netstandard2.0/Scrutor.pdb", + "lib/netstandard2.0/Scrutor.xml", + "scrutor.4.2.2.nupkg.sha512", + "scrutor.nuspec" + ] + }, + "Serilog/3.1.1": { + "sha512": "P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A==", + "type": "package", + "path": "serilog/3.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net462/Serilog.dll", + "lib/net462/Serilog.xml", + "lib/net471/Serilog.dll", + "lib/net471/Serilog.xml", + "lib/net5.0/Serilog.dll", + "lib/net5.0/Serilog.xml", + "lib/net6.0/Serilog.dll", + "lib/net6.0/Serilog.xml", + "lib/net7.0/Serilog.dll", + "lib/net7.0/Serilog.xml", + "lib/netstandard2.0/Serilog.dll", + "lib/netstandard2.0/Serilog.xml", + "lib/netstandard2.1/Serilog.dll", + "lib/netstandard2.1/Serilog.xml", + "serilog.3.1.1.nupkg.sha512", + "serilog.nuspec" + ] + }, + "Serilog.Extensions.Logging/8.0.0": { + "sha512": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", + "type": "package", + "path": "serilog.extensions.logging/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net462/Serilog.Extensions.Logging.dll", + "lib/net462/Serilog.Extensions.Logging.xml", + "lib/net6.0/Serilog.Extensions.Logging.dll", + "lib/net6.0/Serilog.Extensions.Logging.xml", + "lib/net7.0/Serilog.Extensions.Logging.dll", + "lib/net7.0/Serilog.Extensions.Logging.xml", + "lib/net8.0/Serilog.Extensions.Logging.dll", + "lib/net8.0/Serilog.Extensions.Logging.xml", + "lib/netstandard2.0/Serilog.Extensions.Logging.dll", + "lib/netstandard2.0/Serilog.Extensions.Logging.xml", + "lib/netstandard2.1/Serilog.Extensions.Logging.dll", + "lib/netstandard2.1/Serilog.Extensions.Logging.xml", + "serilog-extension-nuget.png", + "serilog.extensions.logging.8.0.0.nupkg.sha512", + "serilog.extensions.logging.nuspec" + ] + }, + "Serilog.Sinks.Console/5.0.0": { + "sha512": "IZ6bn79k+3SRXOBpwSOClUHikSkp2toGPCZ0teUkscv4dpDg9E2R2xVsNkLmwddE4OpNVO3N0xiYsAH556vN8Q==", + "type": "package", + "path": "serilog.sinks.console/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net462/Serilog.Sinks.Console.dll", + "lib/net462/Serilog.Sinks.Console.xml", + "lib/net471/Serilog.Sinks.Console.dll", + "lib/net471/Serilog.Sinks.Console.xml", + "lib/net5.0/Serilog.Sinks.Console.dll", + "lib/net5.0/Serilog.Sinks.Console.xml", + "lib/net6.0/Serilog.Sinks.Console.dll", + "lib/net6.0/Serilog.Sinks.Console.xml", + "lib/net7.0/Serilog.Sinks.Console.dll", + "lib/net7.0/Serilog.Sinks.Console.xml", + "lib/netstandard2.0/Serilog.Sinks.Console.dll", + "lib/netstandard2.0/Serilog.Sinks.Console.xml", + "lib/netstandard2.1/Serilog.Sinks.Console.dll", + "lib/netstandard2.1/Serilog.Sinks.Console.xml", + "serilog.sinks.console.5.0.0.nupkg.sha512", + "serilog.sinks.console.nuspec" + ] + }, + "Serilog.Sinks.File/5.0.0": { + "sha512": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==", + "type": "package", + "path": "serilog.sinks.file/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "images/icon.png", + "lib/net45/Serilog.Sinks.File.dll", + "lib/net45/Serilog.Sinks.File.pdb", + "lib/net45/Serilog.Sinks.File.xml", + "lib/net5.0/Serilog.Sinks.File.dll", + "lib/net5.0/Serilog.Sinks.File.pdb", + "lib/net5.0/Serilog.Sinks.File.xml", + "lib/netstandard1.3/Serilog.Sinks.File.dll", + "lib/netstandard1.3/Serilog.Sinks.File.pdb", + "lib/netstandard1.3/Serilog.Sinks.File.xml", + "lib/netstandard2.0/Serilog.Sinks.File.dll", + "lib/netstandard2.0/Serilog.Sinks.File.pdb", + "lib/netstandard2.0/Serilog.Sinks.File.xml", + "lib/netstandard2.1/Serilog.Sinks.File.dll", + "lib/netstandard2.1/Serilog.Sinks.File.pdb", + "lib/netstandard2.1/Serilog.Sinks.File.xml", + "serilog.sinks.file.5.0.0.nupkg.sha512", + "serilog.sinks.file.nuspec" + ] + }, + "System.Buffers/4.5.1": { + "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "type": "package", + "path": "system.buffers/4.5.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Buffers.dll", + "lib/net461/System.Buffers.xml", + "lib/netcoreapp2.0/_._", + "lib/netstandard1.1/System.Buffers.dll", + "lib/netstandard1.1/System.Buffers.xml", + "lib/netstandard2.0/System.Buffers.dll", + "lib/netstandard2.0/System.Buffers.xml", + "lib/uap10.0.16299/_._", + "ref/net45/System.Buffers.dll", + "ref/net45/System.Buffers.xml", + "ref/netcoreapp2.0/_._", + "ref/netstandard1.1/System.Buffers.dll", + "ref/netstandard1.1/System.Buffers.xml", + "ref/netstandard2.0/System.Buffers.dll", + "ref/netstandard2.0/System.Buffers.xml", + "ref/uap10.0.16299/_._", + "system.buffers.4.5.1.nupkg.sha512", + "system.buffers.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Data.DataSetExtensions/4.5.0": { + "sha512": "221clPs1445HkTBZPL+K9sDBdJRB8UN8rgjO3ztB0CQ26z//fmJXtlsr6whGatscsKGBrhJl5bwJuKSA8mwFOw==", + "type": "package", + "path": "system.data.datasetextensions/4.5.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net45/_._", + "lib/netstandard2.0/System.Data.DataSetExtensions.dll", + "ref/net45/_._", + "ref/netstandard2.0/System.Data.DataSetExtensions.dll", + "system.data.datasetextensions.4.5.0.nupkg.sha512", + "system.data.datasetextensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Diagnostics.DiagnosticSource/8.0.0": { + "sha512": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.DiagnosticSource.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets", + "lib/net462/System.Diagnostics.DiagnosticSource.dll", + "lib/net462/System.Diagnostics.DiagnosticSource.xml", + "lib/net6.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net6.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net7.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net7.0/System.Diagnostics.DiagnosticSource.xml", + "lib/net8.0/System.Diagnostics.DiagnosticSource.dll", + "lib/net8.0/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Diagnostics.EventLog/8.0.0": { + "sha512": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "type": "package", + "path": "system.diagnostics.eventlog/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Diagnostics.EventLog.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Diagnostics.EventLog.targets", + "lib/net462/System.Diagnostics.EventLog.dll", + "lib/net462/System.Diagnostics.EventLog.xml", + "lib/net6.0/System.Diagnostics.EventLog.dll", + "lib/net6.0/System.Diagnostics.EventLog.xml", + "lib/net7.0/System.Diagnostics.EventLog.dll", + "lib/net7.0/System.Diagnostics.EventLog.xml", + "lib/net8.0/System.Diagnostics.EventLog.dll", + "lib/net8.0/System.Diagnostics.EventLog.xml", + "lib/netstandard2.0/System.Diagnostics.EventLog.dll", + "lib/netstandard2.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.xml", + "system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "system.diagnostics.eventlog.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Memory/4.5.4": { + "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "type": "package", + "path": "system.memory/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Memory.dll", + "lib/net461/System.Memory.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.1/System.Memory.dll", + "lib/netstandard1.1/System.Memory.xml", + "lib/netstandard2.0/System.Memory.dll", + "lib/netstandard2.0/System.Memory.xml", + "ref/netcoreapp2.1/_._", + "system.memory.4.5.4.nupkg.sha512", + "system.memory.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net461/System.Runtime.CompilerServices.Unsafe.xml", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Encodings.Web/8.0.0": { + "sha512": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", + "type": "package", + "path": "system.text.encodings.web/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encodings.Web.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets", + "lib/net462/System.Text.Encodings.Web.dll", + "lib/net462/System.Text.Encodings.Web.xml", + "lib/net6.0/System.Text.Encodings.Web.dll", + "lib/net6.0/System.Text.Encodings.Web.xml", + "lib/net7.0/System.Text.Encodings.Web.dll", + "lib/net7.0/System.Text.Encodings.Web.xml", + "lib/net8.0/System.Text.Encodings.Web.dll", + "lib/net8.0/System.Text.Encodings.Web.xml", + "lib/netstandard2.0/System.Text.Encodings.Web.dll", + "lib/netstandard2.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.xml", + "system.text.encodings.web.8.0.0.nupkg.sha512", + "system.text.encodings.web.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Json/8.0.0": { + "sha512": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", + "type": "package", + "path": "system.text.json/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net6.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net6.0/System.Text.Json.dll", + "lib/net6.0/System.Text.Json.xml", + "lib/net7.0/System.Text.Json.dll", + "lib/net7.0/System.Text.Json.xml", + "lib/net8.0/System.Text.Json.dll", + "lib/net8.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.8.0.0.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Tomlyn/0.19.0": { + "sha512": "GlI2o8R8jbZIaE+YX6uA/VoAOH7zIxYeqxDm7jHW2hqUhuB+q19oKold35FkMuv8IZDoCqsTMolaBv2eBLBmrQ==", + "type": "package", + "path": "tomlyn/0.19.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net8.0/Tomlyn.dll", + "lib/net8.0/Tomlyn.xml", + "lib/netstandard2.0/Tomlyn.dll", + "lib/netstandard2.0/Tomlyn.xml", + "logo.png", + "readme.md", + "tomlyn.0.19.0.nupkg.sha512", + "tomlyn.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "CounterStrikeSharp.API >= 1.0.340" + ] + }, + "packageFolders": { + "/root/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj", + "projectName": "Cs2SuperPowersPlugin", + "projectPath": "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj", + "packagesPath": "/root/.nuget/packages/", + "outputPath": "/root/cs2-super-powers/src/Cs2SuperPowers/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/root/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "CounterStrikeSharp.API": { + "target": "Package", + "version": "[1.0.340, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.129/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache new file mode 100644 index 0000000..dc41d3b --- /dev/null +++ b/obj/project.nuget.cache @@ -0,0 +1,57 @@ +{ + "version": 2, + "dgSpecHash": "1KtfxQ9lBL5TWB2RIU02GzpC6CvxvF3J6VAPEJSeMxUm6URxUqqCEht3e11SKXOPO8Yyn73BP4NWeIyQhjkZbQ==", + "success": true, + "projectFilePath": "/root/cs2-super-powers/src/Cs2SuperPowers/Cs2SuperPowers.csproj", + "expectedPackageFiles": [ + "/root/.nuget/packages/counterstrikesharp.api/1.0.340/counterstrikesharp.api.1.0.340.nupkg.sha512", + "/root/.nuget/packages/mcmaster.netcore.plugins/1.4.0/mcmaster.netcore.plugins.1.4.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.csharp/4.7.0/microsoft.csharp.4.7.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.dotnet.apicompat.task/8.0.203/microsoft.dotnet.apicompat.task.8.0.203.nupkg.sha512", + "/root/.nuget/packages/microsoft.dotnet.platformabstractions/3.1.6/microsoft.dotnet.platformabstractions.3.1.6.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration/8.0.0/microsoft.extensions.configuration.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.abstractions/8.0.0/microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.binder/8.0.0/microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.commandline/8.0.0/microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.environmentvariables/8.0.0/microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.fileextensions/8.0.0/microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.json/8.0.0/microsoft.extensions.configuration.json.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.configuration.usersecrets/8.0.0/microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.dependencyinjection/8.0.0/microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/8.0.0/microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.dependencymodel/6.0.0/microsoft.extensions.dependencymodel.6.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.diagnostics/8.0.0/microsoft.extensions.diagnostics.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.diagnostics.abstractions/8.0.0/microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.fileproviders.abstractions/8.0.0/microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.fileproviders.physical/8.0.0/microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.filesystemglobbing/8.0.0/microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.hosting/8.0.0/microsoft.extensions.hosting.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.hosting.abstractions/8.0.0/microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.localization.abstractions/8.0.3/microsoft.extensions.localization.abstractions.8.0.3.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging/8.0.0/microsoft.extensions.logging.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.abstractions/8.0.0/microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.configuration/8.0.0/microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.console/8.0.0/microsoft.extensions.logging.console.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.debug/8.0.0/microsoft.extensions.logging.debug.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.eventlog/8.0.0/microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.logging.eventsource/8.0.0/microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.options/8.0.0/microsoft.extensions.options.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.options.configurationextensions/8.0.0/microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512", + "/root/.nuget/packages/microsoft.extensions.primitives/8.0.0/microsoft.extensions.primitives.8.0.0.nupkg.sha512", + "/root/.nuget/packages/scrutor/4.2.2/scrutor.4.2.2.nupkg.sha512", + "/root/.nuget/packages/serilog/3.1.1/serilog.3.1.1.nupkg.sha512", + "/root/.nuget/packages/serilog.extensions.logging/8.0.0/serilog.extensions.logging.8.0.0.nupkg.sha512", + "/root/.nuget/packages/serilog.sinks.console/5.0.0/serilog.sinks.console.5.0.0.nupkg.sha512", + "/root/.nuget/packages/serilog.sinks.file/5.0.0/serilog.sinks.file.5.0.0.nupkg.sha512", + "/root/.nuget/packages/system.buffers/4.5.1/system.buffers.4.5.1.nupkg.sha512", + "/root/.nuget/packages/system.data.datasetextensions/4.5.0/system.data.datasetextensions.4.5.0.nupkg.sha512", + "/root/.nuget/packages/system.diagnostics.diagnosticsource/8.0.0/system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512", + "/root/.nuget/packages/system.diagnostics.eventlog/8.0.0/system.diagnostics.eventlog.8.0.0.nupkg.sha512", + "/root/.nuget/packages/system.memory/4.5.4/system.memory.4.5.4.nupkg.sha512", + "/root/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "/root/.nuget/packages/system.text.encodings.web/8.0.0/system.text.encodings.web.8.0.0.nupkg.sha512", + "/root/.nuget/packages/system.text.json/8.0.0/system.text.json.8.0.0.nupkg.sha512", + "/root/.nuget/packages/tomlyn/0.19.0/tomlyn.0.19.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file