register_message() не ловит сообщения...

Сообщения
290
Реакции
89
Здравствуйте!

Столкнулся с проблемой... Если кто-то знает, подскажите, пожалуйста, почему может:

Это:
Код:
new g_msg_screen_fade;

public plugin_init() {
    g_msg_screen_fade = get_user_msgid("ScreenFade");
    register_message(g_msg_screen_fade, "message_screenfade");
}

public message_screenfade(msg_id, msg_dest, msg_entity) {
    client_print(msg_entity, print_chat, "FADE: msg_id = %d, dest = %d", msg_id, msg_dest);
}
Не ловить это:
Код:
    message_begin(MSG_ONE, g_msg_screen_fade, _, id);
    {
        write_short((1<<12));
        write_short(0);
        write_short(0x0004);
        write_byte(128);
        write_byte(28);
        write_byte(56);
        write_byte(200);
        message_end();
    }
Максимум внутри message_screenfade() я ловлю сообщение "FADE: msg_id = 98, dest = 1" только при рестарте или в начале раунда... Но если включаю/выключаю fade ничего не прилетает...
 
Сообщения
3,403
Реакции
1,487
Помог
125 раз(а)
Refresh, для возможности перехвата, следует использовать emessage_begin и смежные функции для отправки сообщений.
 
Сообщения
290
Реакции
89
Nordic Warrior, Спасибо... но плагинов портящих мою задумку уже написано довольно много... И заставить всех исправить и перекомпилировать нереально. А есть ли еще какой-то способ ловить сообщения движка? Реапи не может такое хукать по какому-нибудь фильтру?
 
Последнее редактирование:
Сообщения
290
Реакции
89
Сообщения
3,403
Реакции
1,487
Помог
125 раз(а)
Refresh, не стоит использовать это повсеместно, а только если требует ситуация.
Иначе могут возникнуть ситуации, где плагин будет рассчитан на отлов сообщений, посылаемых gamedll, а тут ещё какая-то левая мессага от плагина придёт.
 
Сообщения
290
Реакции
89
Nordic Warrior, ну разные fade эффекты других плагинов портят установленные мной эффекты... кроме как изменения их исходников и замены на e* пока не вижу... я конечно сейчас еще пройдусь по fakemeta может там что-то есть... Спасибо, за подсказку - я не сошел пока с ума и это радует :rofl:
 
Сообщения
290
Реакции
89
Да, да! Уже нашел, спасибо.
Код:
register_forward(FM_MessageBegin, "fw_message_begin");

public fw_message_begin(const msg_dest, const msg_type, const origin[3], const id) {
    if (msg_type == g_msg_screen_fade) {
        client_print(id, print_chat, "FADE: msg_id = %d, dest = %d", msg_type, msg_dest);
    }
}
PS: Рано обрадовался... это она ловила emessage_begin, обычные message_begin она не видит.:swoon2:
 
Сообщения
3,403
Реакции
1,487
Помог
125 раз(а)
Refresh, которые через AMXX шлются да, вроде как не ловит. Как мне сказали, AMXX должен был их слать через движок, тогда бы ловились.
 
Сообщения
290
Реакции
89
Какой-то дурдом............. КАААААК AMXX может слать "не через движок"...:wacko: два разраба не могут договориться за 10 лет между собой...


Это похоже на мета-вскую обертку MESSAGE_BEGIN.

Так-с.. нашел эту обертку: https://github.com/theAsmodai/metam...ample/include/hlsdk/dlls/enginecallback.h#L93

Ну все шлется "через движок" :scratch_one-s_head:Сдается мне, что где-то что-то накосячено в реализации перехвата этой pfnMessageBegin...

Fakemeta хукает только через свою "табличку" вот так https://github.com/alliedmodders/am...4fd485d/modules/fakemeta/forwardmacros.h#L871

Т.е. без поддержки хука pfnMessageBegin на уровне ReHLDS+ReAPI его в принципе никак "прозрачно" не перехватить...

Должно случиться какое-то чудо, либо разрабы AMXX сделают подмену message_begin на emessage_begin, либо Silient:boast: добавит хук MessageBegin/End и все производные в ReHLDS+ReAPI.
 
Последнее редактирование:
Сообщения
290
Реакции
89
Последнее редактирование:
Сообщения
1,676
Реакции
1,499
Помог
24 раз(а)
Refresh, модули шлют сразу в движок, поэтому и не хукается в FM_MessageBegin. В амхх это "пофиксили", но добавили emessage ради "совместимости". Поэтому да, такое надо сразу в движке ловить.
 
Сообщения
290
Реакции
89
fl0wer, emessage добавили еще в 2006 году, я не могу понять почему они не заменили его сразу... есть какие-то подводные камни?
 
Сообщения
1,676
Реакции
1,499
Помог
24 раз(а)
Refresh, нету подводных камней)
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу