Считывание системного сообщения в чате

Rolo

Верховньій Интерлюд Викинг
Викинги Рулона
Жучара
Дракон
Орден Великого Хилера
Знаток Diablo
Орден Непоколебимого Компаса
Победитель в номинации 2023
Старожил I степени
Признанный автор
Знаток Lineage2
Разработчик
За знание датапака
За знание ядра
Просветитель
Медаль Благодарности
За заслуги перед форумом
Преподаватель
За веру и верность форуму
Веселый флудер
Медаль за активность на Форуме
Клиент разработчик
Магистр реакций
Стальной Визионер
Знаток письма
Архивариус
Победитель в номинации 2022
Победитель в номинации 2021
Мастер реакций
Стратег Данных
Любитель реакций
Куратор Данных
Неукротимое пламя
Победитель в номинации 2020
Сообщения
1 189
Розыгрыши
6
Решения
34
Репутация
2 090
Реакции
2 664
Баллы
1 318
Здравствуйте! Подскажите, есть ли способ как-то считать систем чат на уровни интерфейса:
1620370159203.png
Идея в следующем: хочу при входе в игру сделать проверку, если текст есть - выводить кнопку с мультисселом, если нет - ничего не делать. Но как "словить" этот текст не могу додуматься, подскажите куда копнуть/посмотреть, пожалуйста. Если сложно конкретно с этим видом сообщений, то можно ли обычный анонс считать? Как сделать все остальное - понятно, но вот как словить текст не могу понять.
 
Решение
C#:
function OnRegisterEvent()
{
    RegisterEvent( EV_SystemMessage );
}

function OnEvent(int Event_ID, string param)
{
    switch( Event_ID )
    {
    case EV_SystemMessage:
        CatchSystemMessage(param);
        break;    
    }
}

function CatchSystemMessage(string a_Param)
{
    local int   index;
    ParseInt(a_Param,"Index",index);
    switch (index)
    {
        case %MSG_ID%: 
         Show(Knopka);
        break;
    }
}
C#:
function OnRegisterEvent()
{
    RegisterEvent( EV_SystemMessage );
}

function OnEvent(int Event_ID, string param)
{
    switch( Event_ID )
    {
    case EV_SystemMessage:
        CatchSystemMessage(param);
        break;    
    }
}

function CatchSystemMessage(string a_Param)
{
    local int   index;
    ParseInt(a_Param,"Index",index);
    switch (index)
    {
        case %MSG_ID%: 
         Show(Knopka);
        break;
    }
}
 
Решение
default_npc, спасибо большое за ответ, это прям прозрение! ) Подскажите, пожалуйста, еще в эту же тему, в классе ChatWnd в функции HandleChatmessage вывод сообщения в нормал чат выглядит вот так:
C++:
    if( CheckFilter( type, CHAT_WINDOW_NORMAL, systemType ) )
        NormalChat.AddString( text, color );
При этом если к text дописать что-то кастомное по типу:
C++:
    if( CheckFilter( type, CHAT_WINDOW_NORMAL, systemType ) )
        NormalChat.AddString( text $ "1", color );
Оно без проблем ко всем сообщениям допишет эту единицу, но если попытаться сделать условие:
C++:
    if(text == "1" )
        NormalChat.AddString( text $ "1", color );
    else
        NormalChat.AddString( text, color );
То ничего не происходит, когда в чат пишешь единицу. Не подскажите, как это работает вообще?
 
а мб там какие-нибудь "//n" прячутся и text не совсем равен "1"?
 
default_npc, спасибо большое за ответ, это прям прозрение! ) Подскажите, пожалуйста, еще в эту же тему, в классе ChatWnd в функции HandleChatmessage вывод сообщения в нормал чат выглядит вот так:
C++:
    if( CheckFilter( type, CHAT_WINDOW_NORMAL, systemType ) )
        NormalChat.AddString( text, color );
При этом если к text дописать что-то кастомное по типу:
C++:
    if( CheckFilter( type, CHAT_WINDOW_NORMAL, systemType ) )
        NormalChat.AddString( text $ "1", color );
Оно без проблем ко всем сообщениям допишет эту единицу, но если попытаться сделать условие:
C++:
    if(text == "1" )
        NormalChat.AddString( text $ "1", color );
    else
        NormalChat.AddString( text, color );
То ничего не происходит, когда в чат пишешь единицу. Не подскажите, как это работает вообще?
вы как я понимаю для ИТ делаете, хз чё там, но сама переменная text в HF на котором я проверил равна вот этому, где "1" в самом конце и есть искомый текст:
HdF7Pcw.png

в таком раскладе можно использовать условный костыль InStr, для поиска внутри текста, но он подойдёт для более точных значений, понятное дело что "1" в тексте может встречаться много раз

C#:
if(InStr(Text, "Example") > -1)
{
    "text contains word -example-:" @ Text;
}
 
  • Мне нравится
Реакции: Rolo
default_npc, как раз то, что нужно! Да, я ИТ колупаю, но он не так уж от ХФа отличается, что-то не умеет, но в целом. ) Спасибо Вам огромное за все ответы, Вы сэкономили мне месяцы жизни! )
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
default_npc, как раз то, что нужно! Да, я ИТ колупаю, но он не так уж от ХФа отличается, что-то не умеет, но в целом. ) Спасибо Вам огромное за все ответы, Вы сэкономили мне месяцы жизни! )
Может лучше использовать id Сообщения , нежели поиск по тексту
 
masone, несомненно так и есть, второй вопрос - это уже не решение хотелки, а просто интерес и попытка понять как это все устроено и работает. )
 
Назад
Сверху Снизу