Инфо из amxmodx.inc:
/* Called when client is sending command. */
forward client_command(id);
Синтаксис:
public client_command ( id )
Имя команды и ее параметры можно получить с помощью функций: read_argv, read_ars, read_argc,узнать подробнее вы сможете в других материалах.
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Client command"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
}
public client_command(id){
new Cmd[13];
if( read_argv(0, Cmd, 12) > 11 ){
return PLUGIN_CONTINUE
}
if( equali("drop", Cmd, 0) ){
client_print(id,print_chat,"Drop weapons is blocked")
new PlayerName[32]
get_user_name(id,PlayerName,31)
set_hudmessage(255, 0, 0, 0.04, 0.55, 2, 6.0, 12.0)
show_hudmessage(id, "Player %s use command %s",PlayerName,Cmd)
return PLUGIN_HANDLED
}
if ( equali("buy",Cmd,0)){
client_print(id,print_chat,"You use cmd Buy (weapon market)")
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
Описание:
Функция выполняется сама, при любых действиях игрока, по этому нам нет необходимости регистрировать какие либо команды.
Допустим что мы хотим отловить 2 события:
- Когда игрок выбрасывает оружие - drop
- Когда игрок открывает магазин для покупки оружия - buy
Для начала нам необходимо узнать, какую же команды выполнил игрок, для этого мы зарегистрируем массив Cmd.
Далее создадим условие, в котором говориться что если команда длиннее 11 символов то плагин продолжает работу и дальше, не проходя по коду дальше.
Это условие нужно что бы отсечь кучу лишних команд и флуда, так как если вы откроете конфиг, увидите - что все стандартные команды имеют меньшую длину.
В этом же условии вы получаем имя команды с помощью функции read_argv.
Идем дальше, и создаем еще одно условие, в котором сравниваем необходимую нам команду с полученным значением с помощью функции equali, о которой так же в другой статье. И если они равны то выполняем код следующий дальше, а именно:
Пишем игроку в чат что Выбрасывание оружия заблокировано, получаем его имя и выводим Hud сообщение, что игрок ( его имя) использовал команду drop,
Где имя и команда выводятся из массивов, в которые ране был записанные данные. И возвращаем return PLUGIN_HANDLED - что означает остановку выполнения кодов дальше, что ведет к блокированию выбрасывания оружия.
Далее аналогично мы создали еще одно условие для команды buy, и если условие верно, то просто выводим сообщение в чат.
Если же выполнена любая другая команда, то просто ни чего не произойдет. Но вы можете поэкспериментировать и добавить строку:
client_print(id,print_chat,"Command_name is: %s",Cmd)
перед последним return PLUGIN_CONTINUE. И тогда в чате вы увидите Все что вы делаете. Только не удивляйтесь "флуду", так как даже не заметный глазу поворот мышкой - это уже несколько команд.
Обратите внимание:
Что с помощью данной функции можно поймать только команды не имеющие перед собой символов + или -, например +jump
Для отлова таких команд нужно использовать или модуль hamsandwich или функцию client_PreThink, но там у каждого способа есть свои недостатки. Но это уже совсем другая история.
вот напишите про это пожалуйста