Упрощённый плагин Weaponrestrict

Equality

Участник
Сообщения
53
Реакции
8
Пишу плагин для сервера КСС в первый раз. Вообщем, появилась необходимость написать нечто вроде Weaponrestrict. Этот плагин (его старые версии) ну никак не хочеть адекватно работать на сервере кс 34 версии (см, сдхуукс и пр старые).

Решил написать для начала самый простой и необходимый пример - запрет и резрешение использовать флешки.
Например, хочу, чтоб флешки отключались при вводе админом некой команды в консоль:

C-подобный:
public OnPluginStart()
{
RegAdminCmd("sm_flash_0", Flash_0, ADMFLAG_BAN, "Flashbangs are not allowed");
}

Так ведь? А далее нашёл пример в интернете для запрета покупки оружия:

C-подобный:
public Action:CS_OnBuyCommand(client, const String:weapon[]) 
 { 
     if (StrEqual(weapon, "flashbang", false)) 
     { 
         PrintToChat(client, "Flashbangs are not allowed"); 
         return Plugin_Handled; 
     } 
     return Plugin_Continue; 
 }

Но, вот возникает вопрос, а как это связать? Чтоб запрет покупки оружия выполнялся при использовании команды sm_flash_0 ?
К сожалению, синтаксис знаю на уровне нескольких статей на эту тему...но, так и не понял, как сделать.
Ещё, как делается запрет на то, чтоб подбирать запрещенное оружие с земли? Или может лучше использовать библиотеку "restrict" ?
 

S1deX

Скриптер ;)
Сообщения
129
Реакции
204
PHP:
#include <sourcemod>
#include <cstrike>

new bool:g_bfEnabled = true;

public OnPluginStart()
{
 RegAdminCmd("sm_flash_0", Flash_0, ADMFLAG_BAN, "Flashbangs are not allowed");
}

public Action:Flash_0(client, args)
{
 g_bfEnabled = false;
}

public Action:CS_OnBuyCommand(client, const String:weapon[]) 
{ 
    if (StrEqual(weapon, "flashbang", false) && !g_bfEnabled) 
    { 
        PrintToChat(client, "Flashbangs are not allowed"); 
        return Plugin_Handled; 
    } 
    return Plugin_Continue; 
}
 

Equality

Участник
Сообщения
53
Реакции
8
Спасибо огромное!
ПС: А где можно более детально почитать о том, как использовать adminmenu, кроме как здесь?

----------------------------------------------------------------

К сожалению, данный код не работает( Плагин компилируется без ошибок, но в игре:
"Unknown command: sm_flash_0"
 
Последнее редактирование:

Игорь Охремчук

Админ uaplayer.com
Сообщения
240
Реакции
340
Спасибо огромное!
ПС: А где можно более детально почитать о том, как использовать adminmenu, кроме как здесь?

----------------------------------------------------------------

К сожалению, данный код не работает( Плагин компилируется без ошибок, но в игре:
"Unknown command: sm_flash_0"

Это ничего не значит и это пишет сам клиент, а на самом же деле, если команда зарегистирована через какой-либо плагин, то она на сервере работает. Добавь PrintToChat();, чтоб убедится в этом. Ну а блочить покупку можно не только через форвард, но и через AddCommandListener(); или RegConsoleCmd();
PHP:
public OnPluginStart()
{
	AddCommandListener(CommandBuy, "buy");
}

public Action:CommandBuy(client, const String:command[], args)
{
	decl String:sText[64];
	GetCmdArg(1, sText, sizeof(sText));
	if(!strcmp(sText, "flashbang", false))
	{
		return Plugin_Handled;
	}
	
	return Plugin_Continue;
}
А про админменю там написано предостаточно, чтоб разобратся.
PHP:
 

S1deX

Скриптер ;)
Сообщения
129
Реакции
204
Это ничего не значит и это пишет сам клиент, а на самом же деле, если команда зарегистирована через какой-либо плагин, то она на сервере работает. Добавь PrintToChat();, чтоб убедится в этом. Ну а блочить покупку можно не только через форвард, но и через AddCommandListener(); или RegConsoleCmd();
PHP:
public OnPluginStart()
{
	AddCommandListener(CommandBuy, "buy");
}

public Action:CommandBuy(client, const String:command[], args)
{
	decl String:sText[64];
	GetCmdArg(1, sText, sizeof(sText));
	if(!strcmp(sText, "flashbang", false))
	{
		return Plugin_Handled;
	}
	
	return Plugin_Continue;
}
А про админменю там написано предостаточно, чтоб разобратся.
PHP:
Лучше юзать кстрайк форвард, ну или все-таки контролить еще и команды rebuy и autobuy =)
 

Equality

Участник
Сообщения
53
Реакции
8
Это ничего не значит и это пишет сам клиент, а на самом же деле, если команда зарегистирована через какой-либо плагин, то она на сервере работает.

То есть, даже, если клиент отвечает, что команда неизвестная, она всё равно на сервере работает? То есть, теоретически, несмотря на сообщение, флешки должны были заблокироватся для использования? Но, тогда почему я всё равно могу нормально их использовать? Флешки однозначно не ограничелись.
 

semjef

semjef.ru
Сообщения
993
Реакции
444
PHP:
#include <sourcemod>
#include <cstrike>

new bool:g_bfEnabled = true;

public OnPluginStart()
{
 RegAdminCmd("sm_flash_0", Flash_0, ADMFLAG_BAN, "Flashbangs are not allowed");
}

public Action:Flash_0(client, args)
{
 g_bfEnabled = false;
 return Plugin_Handled;
}

public Action:CS_OnBuyCommand(client, const String:weapon[]) 
{ 
    if (StrEqual(weapon, "flashbang", false) && !g_bfEnabled) 
    { 
        PrintToChat(client, "Flashbangs are not allowed"); 
        return Plugin_Handled; 
    } 
    return Plugin_Continue; 
}
 
Сверху Снизу