Русское сообщество по скриптингу

EventManager

Статьи или фрагменты кода для новичков и уже опытных скриптеров по Metamod.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по Metamod.

EventManager

Сообщение quckly » 15 апр 2013, 14:08

      EventManager by quckly

Готовое решение для работы с сообщениями/ивентами для модуля к metamod.

Установка:
Нужно хукать все функции: ( Пример для moduleconfig.h )
[pawn]
  1. #define FN_MessageBegin                                         MessageBegin

  2. #define FN_MessageEnd                                           MessageEnd

  3. #define FN_WriteByte                                            WriteByte

  4. #define FN_WriteChar                                            WriteChar

  5. #define FN_WriteShort                                           WriteShort

  6. #define FN_WriteLong                                            WriteLong

  7. #define FN_WriteAngle                                           WriteAngle

  8. #define FN_WriteCoord                                           WriteCoord

  9. #define FN_WriteString                                          WriteString

  10. #define FN_WriteEntity                                          WriteEntity
[/pawn]

И вот их обработчики:
[pawn]
  1. #include "q_events.h"

  2.  

  3. void MessageBegin( int msg_dest, int msg_type, const float *pOrigin, edict_t *ed )

  4. {

  5.         return Events.EM_MessageBegin( msg_dest, msg_type, pOrigin, ed );

  6. }

  7.  

  8. void WriteByte( int iValue )

  9. {

  10.         return Events.EM_WriteByte( iValue );

  11. }

  12.  

  13. void WriteChar( int iValue )

  14. {

  15.         return Events.EM_WriteChar( iValue );

  16. }

  17.  

  18. void WriteShort( int iValue )

  19. {

  20.         return Events.EM_WriteShort( iValue );

  21. }

  22.  

  23. void WriteLong( int iValue )

  24. {

  25.         return Events.EM_WriteLong( iValue );

  26. }

  27.  

  28. void WriteAngle( float flValue )

  29. {

  30.         return Events.EM_WriteAngle( flValue );

  31. }

  32.  

  33. void WriteCoord( float flValue )

  34. {

  35.         return Events.EM_WriteCoord( flValue );

  36. }

  37.  

  38. void WriteString( const char *sz )

  39. {

  40.         return Events.EM_WriteString( sz );

  41. }

  42.  

  43. void WriteEntity( int iValue )

  44. {

  45.         return Events.EM_WriteEntity( iValue );

  46. }

  47.  

  48. void MessageEnd( )

  49. {

  50.         return Events.EM_MessageEnd( );

  51. }
[/pawn]

Пример использования:
[pawn]
  1. #include "q_events.h"

  2.  

  3. int Event_CurWeapon( int msg_dest, int msg_type, const float *pOrigin, edict_t *ed );

  4.  

  5. void ClientCommand(edict_t* pPlayer)

  6. {

  7.         if(!strcmp(CMD_ARGV(1), "hook"))

  8.         {

  9.                 Events.RegisterEvent( "CurWeapon", &Event_CurWeapon );

  10.         }

  11.  

  12.         RETURN_META(MRES_IGNORED);

  13. }

  14.  

  15. int Event_CurWeapon( int msg_dest, int msg_type, const float *pOrigin, edict_t *ed )

  16. {

  17.         UTIL_ClientPrint(NULL, HUD_PRINTTALK, "Event: CurWeapon dest: %d type: %d ed: %p", msg_dest, msg_type, ed);

  18.         UTIL_ClientPrint(NULL, HUD_PRINTTALK, "Active: %d ID: %d ClippAmmo: %d", Events.GetArgInt(0), Events.GetArgInt(1), Events.GetArgInt(2));

  19.  

  20.         UTIL_ClientPrint(NULL, HUD_PRINTTALK, "%d %p", Events.GetArgInt(3), Events.GetArgString(2));

  21.  

  22.         Events.SetArg(2, 77);

  23.  

  24.         return ER_IGNORED;

  25. }
[/pawn]

Тип функции-обработчика ивента: EventCallback
int Event_Handler( int msg_dest, int msg_type, const float *pOrigin, edict_t *ed );

Она возвращает одно из следующих значений:
[pawn]
  1. enum

  2. {

  3.         ER_IGNORED = 0,

  4.         ER_SUPERCEDE    // Заблокировать ивент

  5. };
[/pawn]

Функции:
[pawn]
  1.         // Хукает ивент по имени или ид

  2.         void RegisterEvent(const int msg_id, EventCallback func);

  3.         void RegisterEvent(const char* msg_id, EventCallback func);

  4.  

  5.         // Получает аргумент по номеру

  6.         int GetArgInt(int num);

  7.         float GetArgFloat(int num);

  8.         const char* GetArgString(int num);

  9.  

  10.         // Устанавливает аргумент по номеру

  11.         void SetArg(int num, int set);

  12.         void SetArg(int num, float set);

  13.         void SetArg(int num, const char* set);

  14.  

  15.         // Получает ид ивента по имени ( Не нужно )

  16.         int ID(const char* msg_name);
[/pawn]

Скачать:

q_events.h

q_events.zip
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: EventManager

Сообщение KORD_12.7 » 17 апр 2013, 14:44

Good job! :thumbs_up

_http://aghl.ru/ - Half-Life и Adrenaline Gamer: за пределами возможного
Аватара пользователя
KORD_12.7
Скриптер
 
Сообщения: 298
Зарегистрирован: 28 сен 2009, 10:14
Откуда: Владивосток
Благодарил (а): 142 раз.
Поблагодарили: 257 раз.
Опыт программирования: Больше трех лет
Языки программирования: Half-Life
Opposing Force
Adrenaline Gamer
Counter-Strike


Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 9