feat: add BasePower abstraction
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user