У меня этот стоит на awp сервере диглы убирает без лишних команд в чат LINK
Версия 1.4 [CSS/CSGO]
#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <csgo_colors>
#define PLUGIN_VERSION "1.5"
// Квары - Cvars
new bool:g_block_use_weapons = true;
new bool:g_block_buy_weapons = true;
// Список блокируемого оружия.
new const String:block_weapons_list[][] =
{
"ak47", "aug", "mp7", "mp9"
};
#define Weapon_Count sizeof(block_weapons_list)
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 and pickup 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
AutoExecConfig(true, "csgo_block_weapons");
LoadTranslations("csgo_block_weapons.phrases");
}
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 OnClientPostAdminCheck(client){SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);}
public OnClientDisconnect(client){SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);}
// Запрещает использовать и поднимать запрещенное оружие.
public Action:WeaponEquip(client, weapon)
{
if(g_block_use_weapons)
{
decl String:blockWeapon[21];
GetEntityClassname(weapon, blockWeapon, 21);
for(new i = 0; i < Weapon_Count; ++i)
{
if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0)
{
//EmitSoundToClient(client, "buttons/weapon_cant_buy.wav"); // Проигрывает звук игроку.
return Plugin_Handled;
}
}
}
return Plugin_Continue;
}
// Запрещает покупать заблокированное оружие.
public Action:CS_OnBuyCommand(client, const String:weapon[])
{
if(g_block_buy_weapons)
{
for(new i = 0; i < Weapon_Count; ++i)
{
if(strcmp(weapon, block_weapons_list[i]) == 0)
{
CGOPrintToChat(client, "%t", "Weapon_Block"); // Сообщение клиенту.
//EmitSoundToClient(client, "buttons/weapon_cant_buy.wav"); // Проигрывает звук игроку.
return Plugin_Handled;
}
}
}
return Plugin_Continue;
}
Снёс DEBUG - с авто он там бесполезен. В проверке валидности игрока также вряд ли есть смысл, тем более, без звука в SDKHook - ошибку не выдаст.PHP:#pragma semicolon 1 #include <sourcemod> #include <sdkhooks> #include <csgo_colors> #define PLUGIN_VERSION "1.5" // Квары - Cvars new bool:g_block_use_weapons = true; new bool:g_block_buy_weapons = true; // Список блокируемого оружия. new const String:block_weapons_list[][] = { "ak47", "aug", "mp7", "mp9" }; #define Weapon_Count sizeof(block_weapons_list) 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 and pickup 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 AutoExecConfig(true, "csgo_block_weapons"); LoadTranslations("csgo_block_weapons.phrases"); } 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_WeaponEquip, WeaponEquip);} public OnClientDisconnect(client){SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);} // Запрещает использовать и поднимать запрещенное оружие. public Action:WeaponEquip(client, weapon) { if(g_block_use_weapons) { decl String:blockWeapon[21]; GetEntityClassname(weapon, blockWeapon, 21); for(new i = 0; i < Weapon_Count; ++i) { if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0) { //EmitSoundToClient(client, "buttons/weapon_cant_buy.wav"); // Проигрывает звук игроку. return Plugin_Handled; } } } return Plugin_Continue; } // Запрещает покупать заблокированное оружие. public Action:CS_OnBuyCommand(client, const String:weapon[]) { if(g_block_buy_weapons) { for(new i = 0; i < Weapon_Count; ++i) { if(strcmp(weapon, block_weapons_list[i]) == 0) { CGOPrintToChat(client, "%T", "Weapon_Block"); // Сообщение клиенту. //EmitSoundToClient(client, "buttons/weapon_cant_buy.wav"); // Проигрывает звук игроку. return Plugin_Handled; } } } return Plugin_Continue; }
Можно убрать проверку g_block_use_weapons, но придётся хорошо расписать действие квара.
Это как?Можно убрать проверку g_block_use_weapons, но придётся хорошо расписать действие квара.
Какое количество? сформулируй вопрос правильно.а количества можно сюда сделать
Проходиться циклом по всем игрокам и делать SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip); при отключении и обратное - при включении. Но так же придётся сделать проверки в вызовах, вроде OnClientDisconnect(client).Это как?
Проходиться циклом по всем игрокам и делать SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip); при отключении и обратное - при включении. Но так же придётся сделать проверки в вызовах, вроде OnClientDisconnect(client).
Но это того стоит, основная функция куда чаще вызывается.
Я бы ещё не так сделал, а событием расписал и хукал/унхукал. :-D ОффтопА ты попробуй)
Кстати, CGOPrintToChat(client, "%t", "Weapon_Block"); - нужная маленькая t, либо после укажи индекс клиента (бессмысленно %T, в целом).
public OnClientDisconnect(client)
{
if ( IsClientInGame(client) )
{
SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);
}
}
Первый вызов - игрок ещё подключён и можно узнать все его параметры, а второе - уже отключён, передаётся лишь индекс. По сути, одно и тоже, но Post, возможно, оптимальнее.В чем отличие
OnClientDisconnect от OnClientDisconnect_Post?
Думаю, не стоит. Захуканным - зря проверяться, а не до конца загрузившимся при выходе - всё равно ошибки не выдаст.Правильно ли будет если я сделаю
Я являюсь админом на данном проекте, а что такое?
Какая самая стабильная версия?
Чтоб в ней работала, блокировка покупки и блокировка поднятия, без удаления ненужного оружия.
Первый вызов - игрок ещё подключён и можно узнать все его параметры, а второе - уже отключён, передаётся лишь индекс. По сути, одно и тоже, но Post, возможно, оптимальнее.Думаю, не стоит. Захуканным - зря проверяться, а не до конца загрузившимся при выходе - всё равно ошибки не выдаст.
А если стоит плагин на выдачу оружия? (для админов). К тому же, дописать очистку оружия на карте по запрещенному оружию, не проблема.
Только не знаю как правильнее сделать. Удалять запрещенное оружие каждые X сек. или каждый новый раунд.
Я являюсь админом на данном проекте, а что такое?
Какая самая стабильная версия?
Чтоб в ней работала, блокировка покупки и блокировка поднятия, без удаления ненужного оружия.
В чем проблема поставить weapon restrict ? :
https://forums.alliedmods.net/showthread.php?p=950174
В чем проблема зайти на forums.alliedmods.net и попросить об этом там ? (там больше кодеров которым делать нечего а за бабос тебе так еще и не то сделают)) , да и если их форум пошуршать возможно уже кто то спрашивал и есть варианты)
:)
В чем проблема поставить weapon restrict ? :
https://forums.alliedmods.net/showthread.php?p=950174
В чем проблема зайти на forums.alliedmods.net и попросить об этом там ? (там больше кодеров которым делать нечего а за бабос тебе так еще и не то сделают)) , да и если их форум пошуршать возможно уже кто то спрашивал и есть варианты)
:)
Тот плагин который ты дал. Он запрещает покупать оружие и очищает карту от выкинутого оружия, но если на сервере стоит выдача админам оружия, то мой вариант будет куда лучше. Ведь он запрещает использовать оружие, а т.е поднимать его и держать в руках.Плагин не выдает определенное оружие а запрещает