feat: add BasePower abstraction

This commit is contained in:
admin
2026-07-26 23:47:38 +02:00
commit 6dbbfc0dde
83 changed files with 7587 additions and 0 deletions
+83
View File
@@ -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<EventRoundStart>(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;
}
}