#include <sdktools>
#include <clientmod>
#include <clientmod/multicolors>
#define TEAM_T 2
#define TEAM_CT 3
static const int
PLAYERS_LIMIT = 10, // Минимальное количество игроков не в наблюдателях для доступности AWP
TEAM_AWP_LIMIT = 1; // Колличество AWP на команду
public Plugin myinfo =
{
name = "AWP Limit (ClientMod)",
author = "Нямпа",
description = "Ограничивает AWP на команду, запрет при недостатке игроков",
version = "1.0_fix (rewritten by Grey83)"
}
public void OnPluginStart()
{
HookEvent("round_start", OnRoundStart, EventHookMode_PostNoCopy);
}
public Action CS_OnBuyCommand(int client, const char[] item)
{
if (strcmp(item, "awp", false)) || !IsClientInGame(client) || !IsPlayerAlive(client))
return Plugin_Continue;
int team = GetClientTeam(client);
if (team < TEAM_T)
return Plugin_Continue;
if (CountAlivePlayers() < PLAYERS_LIMIT)
{
MC_PrintToChat(client, "{fullred}*WARNING* ✖ {white}AWP запрещена — игроков меньше {lime}%i{white}! {fullred}✖", PLAYERS_LIMIT);
return Plugin_Handled;
}
int num;
char cls[12];
for (int i, wpn; ++i <= MaxClients && num < TEAM_AWP_LIMIT;)
{
if (!IsClientInGame(i) || !IsPlayerAlive(i) || GetClientTeam(i) != team
|| (wpn = GetPlayerWeaponSlot(i, 0)) == -1)
continue;
GetEdictClassname(weapon, cls, sizeof(cls));
if (!strcmp(cls[7], "awp", false))
num++;
}
if (num >= TEAM_AWP_LIMIT)
{
MC_PrintToChat(client, "{fullred}*WARNING* ✖ {white}В команде уже есть {lime}AWP! {fullred}✖");
return Plugin_Handled;
}
return Plugin_Continue;
}
public void OnRoundStart(Event event, const char[] name, bool dontBroadcast)
{
bool pl_limit = CountAlivePlayers() >= PLAYERS_LIMIT;
char cls[12];
for (int i, t, wpn, num[2]; ++i <= MaxClients;)
{
if (!IsClientInGame(i) || !IsPlayerAlive(i) || (t = GetClientTeam(i) - 2) >= 0)
|| (wpn = GetPlayerWeaponSlot(i, 0)) == -1)
continue;
GetEdictClassname(wpn, cls, sizeof(cls));
if (strcmp(cls[7], "awp", false))
continue;
num[t]++;
if (pl_limit && num[t] <= TEAM_AWP_LIMIT)
continue;
RemovePlayerItem(i, wpn);
RemoveEdict(wpn);
if (!pl_limit) MC_PrintToChat(i, "{fullred}*WARNING* ✖ {white}AWP удалена — игроков меньше {lime}%i{white}! {fullred}✖", PLAYERS_LIMIT);
else MC_PrintToChat(client, "{fullred}*WARNING* ✖ {white}В команде уже есть {lime}AWP! {fullred}✖");
}
}
int CountAlivePlayers()
{
int num;
for (int i; ++i <= MaxClients && num < PLAYERS_LIMIT;)
if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) < TEAM_T)
num++;
return num;
}