#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <cstrike>
#include <sdktools>
#define PLUGIN_VERSION "1.0"
// Кол-во блокируемого оружия.
#define Weapon_Count 3
// Квары - Cvars
new bool:g_block_use_weapons = true;
new bool:g_block_buy_weapons = true;
// Список блокируемого оружия.
new const String:block_weapons_list[Weapon_Count][] =
{
"m249", "negev", "p90"
};
public Plugin:myinfo =
{
name = "[CS:GO] Block Weapons",
author = "Hejter",
description = "Block pickup and buy weapons.",
version = PLUGIN_VERSION,
url = "http://www.excw.ru"
};
public OnPluginStart()
{
new Handle:hRegister; // Локальный handle для регистрации ConVar'ов
CreateConVar("block_weapons_version", PLUGIN_VERSION, "Plugin version.", FCVAR_PLUGIN|FCVAR_DONTRECORD|FCVAR_NOTIFY);
// Сразу будем отслеживать изменения и зарегистрируем переменную
HookConVarChange((hRegister = CreateConVar("block_use_weapons", "1", "Block use other weapons?", FCVAR_PLUGIN, true, 0.0, true, 1.0)), OnBlockUseWeaponsChange);
g_block_use_weapons = GetConVarBool(hRegister); // Мгновенно присвоим значение для глобального буля
// Вторая переменная - Second variable
HookConVarChange((hRegister = CreateConVar("block_buy_weapons", "1", "Block buy other weapons?", FCVAR_PLUGIN, true, 0.0, true, 1.0)), OnBlockBuyWeaponsChange);
g_block_buy_weapons = GetConVarBool(hRegister); // Convars by KyleS
RegConsoleCmd("weapon_bans", Weapon_Bans);
AutoExecConfig(true, "csgo_block_weapons_list");
CloseHandle(hRegister); // Закрывает утечку памяти - Closes a memory leak.
}
public OnBlockUseWeaponsChange(Handle:convar, const String:oldValue[], const String:newValue[])
{
g_block_use_weapons = GetConVarBool(convar);
}
public OnBlockBuyWeaponsChange(Handle:convar, const String:oldValue[], const String:newValue[])
{
g_block_buy_weapons = GetConVarBool(convar);
}
public OnClientPutInServer(client){SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);}
public Action:Weapon_Bans(client, args)
{
PrintToChat(client, "%d", Weapon_Count);
}
public Action:WeaponCanUse(client, weapon)
{
if(g_block_use_weapons)
{
if(!IsValidClient(client, true))
{
return Plugin_Continue;
}
decl String:blockWeapon[64];
GetEntityClassname(weapon, blockWeapon, 64);
for(new i = 0; i < Weapon_Count; ++i)
{
if(!StrEqual(blockWeapon, block_weapons_list[i]))
{
return Plugin_Handled;
}
}
}
return Plugin_Continue;
}
public Action:CS_OnBuyCommand(client, const String:weapon[])
{
if(g_block_buy_weapons)
{
if(!IsValidClient(client, true))
{
return Plugin_Continue;
}
for(new i = 0; i < Weapon_Count; ++i)
{
if(!StrEqual(weapon, block_weapons_list[i]))
{
return Plugin_Handled;
}
}
}
return Plugin_Continue;
}
stock bool:IsValidClient(client, bool:alive = false)
{
return (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && (!alive || IsPlayerAlive(client)));
}