Возвращаем кнопки для включения SystemMsgWnd в классик/ессенс

MrKirill1232

Великий мудрец
VIP
Сообщения
2 435
Розыгрыши
0
Решения
52
Репутация
1 377
Реакции
2 346
Баллы
2 058
Привет.
Тема - возврат кнопок для включения "SystemMsgWnd" для игровых клиентов "классик/ессенс".
Клиент сам по себе их скрывает для версии "Не мейн" (можете найти их, если в VERSION_CHECK (PROTOCOL_VERSION ?) выслать данные для мейна), на уровне UGX



// В теме идет о речь восстановлении кнопок в меню
// Для восстанования работы самого окна (над окном чата) - требуется исходникк интерфейса, в нем 4 условия, которые проверят клиент на "GetIsLiveServer" каким-то таким образом:
C-подобный:
    // End:0x1D7
    if(getInstanceUIData().GetIsLiveServer())
    {
        GetINIBool("global", "SystemMsgWnd", m_bUseSystemMsgWnd, "chatfilter.ini");
        // End:0x1C5
        if(bool(m_bUseSystemMsgWnd))
        {
            m_hSystemMsgWnd.ShowWindow();         
        }
        else
        {
            m_hSystemMsgWnd.HideWindow();
        }     
    }
    else
    {
        m_hSystemMsgWnd.HideWindow();
    }

Что нам понадобится:
- Любой редактор ДАТ файлов;
- (тут есть кнопка "релизы", через неё скачать билд);
- https://mmo-dev.info/threads/l2tool-with-ugx-gfx.22571/

Для начала, найдет клиент, в котором будут восстанавливаться кнопки.

01. Открываем редактор ДАТ файлов - и открываем в нем файлик "FlashConfig.dat";
02. Ищем optionWnd, в моем случае полная строка выглядит вот так = flash_begin window=[optionWnd] file=[ui9] flash_end;
03. Идем в папочку SysTexture и находим там файлик, который называется так же, как и значение file=[ui9]. В моем случае - это опять же ui9.ugx;
04. Копируем файлик куда-то (ибо если что-то поламаем - лучше, чтобы была резервная копия);
05. Снимаем крипт с .ugx любым удобным для вас способом (Lineage2Ver121 на нем). Если удобного способа нет, воспользуйтесь - https://mmo-dev.info/threads/mxendec.25099/ ;
06. Открываем последнюю програмку - l2tool с ugx replacer-ом;
07. Каким-то чудом находим свой файлик в открывшемся окне и открываем его;
08. В выпадающем списке ищем "*название-файла*.OptionWnd.gfx";
09. Нажимаем "Export"
10. Открываем jpexs (вторая ссылка);
11. В jpexs нажимаем кнопочку "Open", после чего выбираем "Files of Type: Binary Search - all files";
12. Открываем експоритрованный файл и получаем много предупреждений - можем смело их игнорировать;
13. Смотрим - видим много непонятных подпапочек, вот в этих подпапочка, в разделе "scripts", нам нужно отыскать "optionWnd.form";
14. Внутри смотрим на скрипт под названием "OptionWndFormChattingCommon";
15. Ищем по файлу isClassicServer. У меня они находятся в 2х функция - "SetOptionComponents" и "onSelectCheckBox";
16. Дальше нажимаем на "Edit ActionScript " после чего удаляем эти 2 условия. То-есть было так:
C-подобный:
      internal function SetOptionComponents() : void
      {
         if(L2UISystem.isClassicServer())
         {
            this.group1.visible = false;
            this.group2.y = this.group1.y;
         }
         this.title02 = this.group1.title02;
C-подобный:
      protected function onSelectCheckBox(param1:Event) : void
      {
         OptionWndChatFilter.OptionWndFormChattingForm.OnlyUseSystemMsgWndBox.visible = this.checkBox_OnlyUseSystemMsgWnd.selected && !L2UISystem.isClassicServer();
      }
А стало так:
C-подобный:
      internal function SetOptionComponents() : void
      {
         if(false)
         {
            this.group1.visible = false;
            this.group2.y = this.group1.y;
         }
         this.title02 = this.group1.title02;
C:
      protected function onSelectCheckBox(param1:Event) : void
      {
         OptionWndChatFilter.OptionWndFormChattingForm.OnlyUseSystemMsgWndBox.visible = this.checkBox_OnlyUseSystemMsgWnd.selected;
      }
17. Сохраняем изменения (в коде), и нажимаем на "Save" (для файла);
18. Открываем последнюю програмку - l2tool с ugx replacer-ом;
19. В выпадающем списке ищем "*название-файла*.OptionWnd.gfx";
20. В "File" - указываем путь к нашему експоритрованному и сохранненному файлику;
21. Тыкаем replace;
22. Закидываем в игру и смотрим на результат, в виде появившегося в окне "Настройки" -> "Настройки Чата"
 
Последнее редактирование:
Еще в ChatWnd.uc есть маленькая проверка, которая может обернуться "почему в окне не отображается дроп".
C-подобный:
function bool CheckFilter(SayPacketType SayType, int windowType, ESystemMsgType systemType)
...
            if( !getInstanceUIData().getIsClassicServer())
            {
                if(systemType == SYSTEM_GETITEMS)
                {
                    return true;
                }
                if(systemType == SYSTEM_DICE)
                {
                    return bool(m_bDiceOption);
                }
            }
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…