Разные модули позволяют работать с разными событиями по разному. Мы же сейчас рассмотрим функцию register_event
Инфо из amxmodx.inc:
/* Registers event on which a given function will be called
* Flags:
* "a" - global event.
* "b" - specified.
* "c" - send only once when repeated to other players.
* "d" - call if is send to dead player.
* "e" - to alive.
* NOTE: Due to a long-standing bug that would break compatibility with old plugins,
* the client id should be checked for alive/dead state if you use d or e.
* Examples for conditions:
* "2=c4" - 2nd parameter of message must be sting "c4".
* "3>10" - 3rd parameter must be greater then 10.
* "3!4" - 3rd must be different from 4.
* "2&Buy" - 2nd parameter of message must contain "Buy" substring.
* "2!Buy" - 2nd parameter of message can't contain "Buy" substring. */
native register_event(const event[],const function[],const flags[],const cond[]="", ... );
Синтаксис:
register_event ( const event[], const function[], const flags[], [ cond=[], ... ] )
- const event[] - Какое событие отлавливаем
- const function[] - Функция которую будем вызывать при наступлении события
- const flags[] - Флаги:
- a - Глобальное событие
- b - Сообщение передано одному игроку
- c - Передается только один раз когда повторено другим игрокам ( нашел 2 плагина где используется этот флаг, но так и не понял его значения)
- d - Вызывается только для мертвых игроков
- e - Вызывается только для живых игроков
- a - Глобальное событие
- [ cond=[], ... ] - Дополнительные условия, парочка примеров:
- "2=c4" - Второй параметр сообщения должен быть "C4"
- "3>10" - Третий параметр должен быть больше 10
- "3!4" - Третий параметр не должен быть равен 4
- "2&Buy" - Второй параметр должен содержать Buy
- "2!Buy" - Второй параметр сообщения не может содержать Buy
- "2=c4" - Второй параметр сообщения должен быть "C4"
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Function Register Event"
#define VERSION "1.0"
#define AUTHOR "Admin"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
//Событие смерти игрока и добавляем условие 1>0
//Первый параметр больше чем ноль, 1 параметр это айди убийцы и он не должен быть равен 0
//Так как это означает что игрок убился сам или его убила "карта"
register_event("DeathMsg", "death", "a", "1>0")
//События сброса и подъема бомбы
register_event("BombDrop", "drop_c4","be")
register_event("BombPickup", "up_c4","be")
}
public death(){ // KillerID,VictimID ,IsHeadshot,TruncatedWeaponName
new i_Killer = read_data(1)
new i_Victim = read_data(2)
new head = read_data(3)
new k_name[32],v_name[32]
get_user_name(i_Killer,k_name,31)
get_user_name(i_Victim,v_name,31)
client_print(0,print_chat,"%s Killed %s, headshot:%d (1 yes/ 0 no)",k_name,v_name,head)
}
public drop_c4(){
new x = read_data(1)
new y = read_data(2)
new z = read_data(3)
client_print(0,print_chat,"Drop c4")
client_print(0,print_chat,"X %d Y %d Z %d",x,y,z)
}
public up_c4(){
client_print(0,print_chat,"Up c4")
}
Описание:
Как вы уже поняли, функция регистрирует События и вызывает определенную функцию.
В примере мы рассмотрим 3 события:
- Событие смерти - В коде плагина уже оставлен комментарий на счет дополнительного параметра ограничения.
У события смерти, передаются 4 параметра:- KillerID - id Киллера
- VictimID - id Жертвы
- IsHeadshot - Убийство выстрелом в голову или нет ( 1/0)
- TruncatedWeaponName - Имя оружия
В функции death, мы получаем эти параметры с помощью функции read_data указывая в скобках получаемый параметр.
Далее имя и выводим сообщение игрокам. - KillerID - id Киллера
- Выбрасывание бомбы и Подъем бомбы, все аналогично, сделал эти два сообщения просто для наглядности
Так же можете посмотреть здесь:
http://wiki.alliedmods.net/Half-Life_1_Game_Events
Весь список с описаниями и какие параметры передаются