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

Сообщения
403
Реакции
114
Помог
2 раз(а)
Здравствуйте!

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

Это:
Код:
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,593
Реакции
1,576
Помог
141 раз(а)
Refresh, для возможности перехвата, следует использовать emessage_begin и смежные функции для отправки сообщений.
 
Сообщения
403
Реакции
114
Помог
2 раз(а)
Nordic Warrior, Спасибо... но плагинов портящих мою задумку уже написано довольно много... И заставить всех исправить и перекомпилировать нереально. А есть ли еще какой-то способ ловить сообщения движка? Реапи не может такое хукать по какому-нибудь фильтру?
 
Последнее редактирование:
Сообщения
403
Реакции
114
Помог
2 раз(а)
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
Refresh, не стоит использовать это повсеместно, а только если требует ситуация.
Иначе могут возникнуть ситуации, где плагин будет рассчитан на отлов сообщений, посылаемых gamedll, а тут ещё какая-то левая мессага от плагина придёт.
 
Сообщения
403
Реакции
114
Помог
2 раз(а)
Nordic Warrior, ну разные fade эффекты других плагинов портят установленные мной эффекты... кроме как изменения их исходников и замены на e* пока не вижу... я конечно сейчас еще пройдусь по fakemeta может там что-то есть... Спасибо, за подсказку - я не сошел пока с ума и это радует :rofl:
 
Сообщения
403
Реакции
114
Помог
2 раз(а)
Да, да! Уже нашел, спасибо.
Код:
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,593
Реакции
1,576
Помог
141 раз(а)
Refresh, которые через AMXX шлются да, вроде как не ловит. Как мне сказали, AMXX должен был их слать через движок, тогда бы ловились.
 
Сообщения
403
Реакции
114
Помог
2 раз(а)
Какой-то дурдом............. КАААААК 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.
 
Последнее редактирование:
Сообщения
403
Реакции
114
Помог
2 раз(а)
Последнее редактирование:
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Refresh, модули шлют сразу в движок, поэтому и не хукается в FM_MessageBegin. В амхх это "пофиксили", но добавили emessage ради "совместимости". Поэтому да, такое надо сразу в движке ловить.
 
Сообщения
403
Реакции
114
Помог
2 раз(а)
fl0wer, emessage добавили еще в 2006 году, я не могу понять почему они не заменили его сразу... есть какие-то подводные камни?
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Refresh, нету подводных камней)
 

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

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