AMX MOD X
Суббота, 20.04.2024, 14:13:07



Приветствую Вас Гость | RSS
[ Главная ] [ Блокировка команд клиента - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Блокировка команд клиента (Блокировать надоне всегда.)
Блокировка команд клиента
tavotДата: Пятница, 11.12.2009, 18:10:07 | Сообщение # 1
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Вот код:
Code
public plugin_init(){
register_clcmd("say /start","desable")
}
public desable(id){
if(id==test[id]||id==test3[id]){
ColorChat(id,GREEN, "You are in a duel. Command disabled.");
return PLUGIN_HANDLED
}
}

Выдает ошибку: Warning: Function "desable" should return a value on line 349

Но с этой ошибкой все прекрасно работает, вот и хочу узнать - или как ее убрать - или забить на нее?

Сообщение отредактировал tavot - Пятница, 11.12.2009, 18:10:23
 
DaTaДата: Пятница, 11.12.2009, 18:39:15 | Сообщение # 2
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Эта варнинг(предупреждение), а не ошибка
Code
public desable(id){
if(id==test[id]||id==test3[id]){
ColorChat(id,GREEN, "You are in a duel. Command disabled.");
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE//или PLUGIN_HANDLED, если не хочешь что бы команда отображалась
}

Если ты в одном месте функции делаешь возврат значения, значит во всех точках возврата из функции должно возвращаться какое-то значение.

 
tavotДата: Пятница, 11.12.2009, 18:51:47 | Сообщение # 3
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
DaTa,
Спасибо, понял.
Теперь все гуд)

А есть ли еще какие то способы блокировать клиентские команды?

 
DaTaДата: Пятница, 11.12.2009, 19:22:20 | Сообщение # 4
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Не очень понял суть вопроса, но блокировать можно еще в client_command() и в хуке fakemet'ы FM_ClientCommand.

При обработке каких-то хуков плагины обрабатывают событие в порядке, установленном в plugins.ini . Если какой-то из плагинов заблокирует событие, то в следующих за ним хук не вызовется и само событие заблокируется. Для PLUGIN_HANDLED_MAIN заблокируется только само событие.
Для некоторых функций из amxmodx и еще некоторых модулей(например, engine) нужно возвращать следующие значения:

Code
#define PLUGIN_CONTINUE  0    /* Продолжить обработку и вызвать функцию движка/мода */
#define PLUGIN_HANDLED  1    /* Остановить вызов остальных плагинов */
#define PLUGIN_HANDLED_MAIN    2    /* хоть в amxmodx.inc и написано что "для использования в client_command()" но не только для этого форварда; остальные плагины вызываются, но вызов функции движка/мода блокируется */

Само событие - это обычно вызов функции мода или вызов функции движка.

Некоторые хуки не блокируются, например, client_disconnect()

 
tavotДата: Пятница, 11.12.2009, 19:48:41 | Сообщение # 5
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
DaTa,
я имел в виду джамп мод, там есть клиентские команды /start /reset /scout
Вот их и другие мне надо блокировать при определенных событиях.
Мой плагин взаимодействет с основным джамп плагином kz-arg при помощи native.
 
PomanoBДата: Пятница, 11.12.2009, 20:49:42 | Сообщение # 6
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Ну ставь свой плагин выше в списке и return PLUGIN_HANDLED всё заблокирует

http://romanov4400.mybrute.com
 
tavotДата: Пятница, 11.12.2009, 23:41:11 | Сообщение # 7
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
Забавно то, что плагин стоит ниже основного и тоже блокирует ( первый вариант) с исправленным предупреждением еще не проверял )
 
PomanoBДата: Суббота, 12.12.2009, 09:18:11 | Сообщение # 8
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Плагин может блокировать сообщение в чат, но команда всё равно исполнится, то есть таймер пойдёт

http://romanov4400.mybrute.com
 
tavotДата: Суббота, 12.12.2009, 10:58:49 | Сообщение # 9
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
В том то и дело - что не идет.
Так как /scout - дает скаут в руги, а его не дается, а пишется мое предупреждение.

Но тема интересная, надо по экспериментировать.

Добавлено (12.12.2009, 10:58:49)
---------------------------------------------
Нет вру.
Если по самому первому варианту - то после плагина - работает все как надо.
Если исправить предупреждение - то после плагина не работает.
Если поставить перед плагином - то всегда блокирует.

 
DaTaДата: Суббота, 12.12.2009, 16:24:23 | Сообщение # 10
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Можешь детально описать, что у тебя есть и чего тебе надо добиться? :D
 
tavotДата: Суббота, 12.12.2009, 23:51:01 | Сообщение # 11
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
DaTa,
Есть плагин А - в нем команда 555
Есть плагни Б - в котормо при определенно событии команда 555 должна блокироваться

Плагины А и Б взаимодействую при помощи native
т.е. плагин Б передает плагину А - инфу о том то игрок стартует
В этом промежутке должны блокироваться команды.
плагин А передает плагину Б - инфу что игрок финиширует

Основной плагин А - kz-arg - дажмап мод
Вторйо плагин Б - мой плагин дуели для этого мода.

 
DaTaДата: Воскресенье, 13.12.2009, 13:21:35 | Сообщение # 12
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
пропиши в plugins.ini в таком порядке:
Code
;...
B.amxx
A.amxx
;...

В плагине B при "определенном событии" возвращай PLUGIN_HANDLED(заблокирует); при отсутствии оного - PLUGIN_CONTINUE(отправит дальше по списку плагинов).

 
tavotДата: Воскресенье, 13.12.2009, 17:29:44 | Сообщение # 13
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
DaTa,
Спасибо буду пробовать )
А можно прсото оставить как в первом варианте?
Ну предупреждение там - зато все работает :)
Илил есть какой то подводный камень?
 
DaTaДата: Воскресенье, 13.12.2009, 17:47:38 | Сообщение # 14
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
В первом варианте может вернуться мусор - не понятно, заблокирует или нет.
 
tavotДата: Воскресенье, 13.12.2009, 19:58:22 | Сообщение # 15
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
DaTa,
Но работает :)
в этом и вопрос )
в общем пока что потестю все варианты. )
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Блокировка команд клиента (Блокировать надоне всегда.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024