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

Как использовать moduleconfig.h ?

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

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


Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник плагина.

Как использовать moduleconfig.h ?

Сообщение Bos93 » 14 авг 2012, 21:55

Подключил #include "sdk/amxxmodule.h"

Расскоментировал #define FN_MessageBegin MessageBegin

[pawn]
  1. void MessageBegin (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed)

  2. {    

  3.     if( msg_type == 125 )

  4.     {

  5.         print_srvconsole("New Round!\n");

  6.     }

  7.  

  8. }  
[/pawn]

Ловлю новый раунд. Функция признаков жизни не дает,так же пробывал и пресинк заюзать,ничего не вызывается,во всех файлах расcкоментировал USE_METAMOD
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Как использовать moduleconfig.h ?

Сообщение hmn3r^Ist » 19 авг 2012, 18:30

Bos93 писал(а):6a6kin,Почему GetEngineFunc необъявленный идентификатор ? Я же зарегестрировал как gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunc;

Извиняюсь что влезаю, но какое имеет отношение присвоение к регистрации?
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

Re: Как использовать moduleconfig.h ?

Сообщение Bos93 » 19 авг 2012, 18:33

Да,с этим я разобрался.
Хук получился такой,но новый ранд не ловиться...Что не так ?

[pawn]
  1. static META_FUNCTIONS gMetaFunctionTable;

  2. C_DLLEXPORT     int     Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)

  3. {

  4.         gpMetaGlobals = pMGlobals;

  5.         gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions;

  6.         memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));

  7.         return(TRUE);

  8. }
[/pawn]
[pawn]
  1. DLL_FUNCTIONS g_pengfuncsTable;

  2. C_DLLEXPORT     int     GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion)

  3. {

  4.         memset(&g_pengfuncsTable, 0, sizeof(DLL_FUNCTIONS));

  5.         pengfuncsFromEngine->pfnMessageBegin = MessageBegin;

  6.         memcpy(pengfuncsFromEngine, &g_pengfuncsTable, sizeof(DLL_FUNCTIONS));

  7.         return 1;

  8. }

  9.  

  10.  
[/pawn]

[pawn]
  1. void MessageBegin (int msg_dest, int msg_type, const float *pOrigin, edict_t *ed)

  2. {    

  3.     if( msg_type == 125 )

  4.     {

  5.         SERVER_PRINT("::ROUND START!!!\n");

  6.     }

  7. }  
[/pawn]
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Как использовать moduleconfig.h ?

Сообщение 6a6kin » 19 авг 2012, 21:00

Код: Выделить всё
pengfuncsFromEngine->pfnMessageBegin = MessageBegin;
memcpy(pengfuncsFromEngine, &g_pengfuncsTable, sizeof(DLL_FUNCTIONS));

Предназначение второй строки?
На заказ не пишу.
Аватара пользователя
6a6kin
Скриптер
 
Сообщения: 332
Зарегистрирован: 09 мар 2010, 16:40
Благодарил (а): 38 раз.
Поблагодарили: 278 раз.

Re: Как использовать moduleconfig.h ?

Сообщение quckly » 19 авг 2012, 22:43

Bos93, Используй sdk от amxx. Если нужно вызвать функцию, то - MESSAGE_BEGIN( .. );
Если отлавливать, то расскоментируй строку MessageBegin в moduleconfig.h, и определяй функцию в любом cpp файле, например, myplugin.cpp.

[pawn]
  1. static META_FUNCTIONS gMetaFunctionTable;

  2. C_DLLEXPORT     int     Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)
[/pawn] - это совсем не нужно трогать.

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

Re: Как использовать moduleconfig.h ?

Сообщение Bos93 » 20 авг 2012, 12:10

quckly,а разве такой способ только не для amxx модулей ? Я думал для меты нужно регестрировать gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions; в Meta_Attach,откуда мы уже будем ловить наши функции ,допустим pengfuncsFromEngine->pfnMessageBegin = MessageBegin; или можно и так и так ?
Пробывал плаер пресинк пост использовать как ты описал,не работало,а вот зарегал в GetEntityAPI2_Post,он стал вызываться.

И того,я имею такой хук и он не работает:


[pawn]
  1. static META_FUNCTIONS gMetaFunctionTable;

  2. C_DLLEXPORT     int     Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)

  3. {

  4.         gpMetaGlobals = pMGlobals;

  5.         gMetaFunctionTable.pfnGetEngineFunctions = GetEngineFunctions;

  6.         memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));

  7.         return(TRUE);

  8. }

  9.  
[/pawn]

[pawn]
  1. enginefuncs_t g_pengfuncsTable;

  2. C_DLLEXPORT     int     GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *  )

  3. {

  4.  

  5.        

  6.         pengfuncsFromEngine->pfnMessageBegin = MessageBegin;

  7.         memcpy(pengfuncsFromEngine, &g_pengfuncsTable, sizeof(enginefuncs_t));

  8.         return 1;

  9. }
[/pawn]

Кодом ниже помогли на оленях:

[pawn]
  1. #define MAX_BYTES 32 /* a good value to set */

  2.  

  3. bool bHLTV; int iBYTE; int iBYTES[ MAX_BYTES ];

  4.  

  5. void ResetBytes( void )

  6. {

  7.         for( int i = 0; i < MAX_BYTES; i++ ) iBYTES[ i ] = NULL;

  8. }

  9.  

  10. void MessageBegin( int, int TYPE, const float *, edict_t * )

  11. {

  12.         if( TYPE == GET_USER_MSG_ID( NULL, "HLTV", NULL ) )

  13.         {

  14.                 bHLTV = true; iBYTE = NULL; ResetBytes( );

  15.         }

  16.         RETURN_META( MRES_IGNORED );

  17. }

  18.  

  19. void MessageEnd( void )

  20. {

  21.         bHLTV = false; RETURN_META( MRES_IGNORED );

  22. }

  23.  

  24. void WriteByte( int BYTE )

  25. {

  26.         if( bHLTV )

  27.         {

  28.                 iBYTES[ iBYTE ] = BYTE;

  29.                 if( ++iBYTE == 2 && !BYTE && !iBYTES[ NULL ] )

  30.                 {

  31.                         SERVER_PRINT("::ROUND START!!!\n");

  32.                 }

  33.         }

  34.        

  35.         RETURN_META( MRES_IGNORED );

  36. }  
[/pawn]
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Как использовать moduleconfig.h ?

Сообщение 6a6kin » 20 авг 2012, 15:37

Код: Выделить всё
pengfuncsFromEngine->pfnMessageBegin = MessageBegin;
memcpy(pengfuncsFromEngine, &g_pengfuncsTable, sizeof(enginefuncs_t));

Вторая строка делает бессмысленной первую.
На заказ не пишу.
Аватара пользователя
6a6kin
Скриптер
 
Сообщения: 332
Зарегистрирован: 09 мар 2010, 16:40
Благодарил (а): 38 раз.
Поблагодарили: 278 раз.

Re: Как использовать moduleconfig.h ?

Сообщение Bos93 » 20 авг 2012, 16:58

Без неё тоже ни каких признаков жизни..
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Как использовать moduleconfig.h ?

Сообщение 6a6kin » 20 авг 2012, 17:08

А не вызываются функции вообще, или именно для начала раунда?
На заказ не пишу.
Аватара пользователя
6a6kin
Скриптер
 
Сообщения: 332
Зарегистрирован: 09 мар 2010, 16:40
Благодарил (а): 38 раз.
Поблагодарили: 278 раз.

Re: Как использовать moduleconfig.h ?

Сообщение Bos93 » 20 авг 2012, 17:20

C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int * )

Вызов есть,а мэссаджеш бегин уже не знаю,но если нет сообщения при новом раунде,наверно не хукается или что можно там проверить,что точно сработает для теста ,дабы проверить точно,срабатывает хук мэссаджес бегин или нет?
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Как использовать moduleconfig.h ?

Сообщение 6a6kin » 20 авг 2012, 17:59

Добавить вывод сообщения в начале функции.
На заказ не пишу.
Аватара пользователя
6a6kin
Скриптер
 
Сообщения: 332
Зарегистрирован: 09 мар 2010, 16:40
Благодарил (а): 38 раз.
Поблагодарили: 278 раз.

Пред.След.

Вернуться в Скриптинг

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5