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

MrKirill1232

Великий мудрец
Проверенный
Победитель в номинации 2025
Наставник
Мыслитель
Хранитель Пера
Оратор
Старожил II степени
Уважаемый собеседник
Победитель в номинации 2024
Опора сообщества
Арбитр
Куратор Данных
Победитель в номинации 2023
Авторитет форума
Неукротимое пламя
Медаль Благодарности
Победитель в номинации 2022
Старожил I степени
Сообщения
2 878
Розыгрыши
0
Решения
69
Репутация
1 973
Реакции
2 994
Баллы
2 058
Привет.
Тема - возврат кнопок для включения "SystemMsgWnd" для игровых клиентов "классик/ессенс".
Клиент сам по себе их скрывает для версии "Не мейн" (можете найти их, если в VERSION_CHECK (PROTOCOL_VERSION ?) выслать данные для мейна), на уровне UGX :(

1747660355178.webp

// В теме идет о речь восстановлении кнопок в меню
// Для восстанования работы самого окна (над окном чата) - требуется исходникк интерфейса, в нем 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. Закидываем в игру и смотрим на результат, в виде появившегося в окне "Настройки" -> "Настройки Чата"

// В теме идет о речь восстановлении кнопок в меню
// Для восстанования работы самого окна (над окном чата) - требуется исходникк интерфейса, в нем 4 условия, которые проверят клиент на "GetIsLiveServer" каким-то таким образом:
Еще в 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);
                }
            }

* Пояснения "Интерфейса" jpexs.

12. Открываем експоритрованный файл и получаем много предупреждений - можем смело их игнорировать;
13. Смотрим - видим много непонятных подпапочек, вот в этих подпапочка, в разделе "scripts", нам нужно отыскать "optionWnd.form";
14. Внутри смотрим на скрипт под названием "OptionWndFormChattingCommon";

14 пункт:

1767447905206.webp
 
Последнее редактирование модератором:

Bankir

Баллов: 6
А ты не промах, Путник! П.с. норм обломал, сам знаешь кого (так им Путник!)

Wizzard

Баллов: 27
Вот если бы не я :D
1767450512004.webp Я изменил код по твоей инструкции, опции появились, но обычным игрокам все равно не отображаются сообщения.
 
Оверпостинг
Привет.
Тема - возврат кнопок для включения "SystemMsgWnd" для игровых клиентов "классик/ессенс".
Клиент сам по себе их скрывает для версии "Не мейн" (можете найти их, если в VERSION_CHECK (PROTOCOL_VERSION ?) выслать данные для мейна), на уровне UGX :(

Посмотреть вложение 87275

// В теме идет о речь восстановлении кнопок в меню
// Для восстанования работы самого окна (над окном чата) - требуется исходникк интерфейса, в нем 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);
                }
            }

* Пояснения "Интерфейса" jpexs.



14 пункт:

Посмотреть вложение 92671
RU (Essence "Aden/Classic"), Prot. 542
ui7.ugx
Настройки повились (уствновка галочек) - толку ноль, хотя, оставлю код в спойлере.

JavaScript:
package optionWnd.form
{
   import flash.display.Sprite;
   import flash.events.Event;
   import ncsoft.l2.controls.L2UIButton;
   import ncsoft.l2.events.L2UIToolTipEvent;
   import ncsoft.l2.native.L2UISystem;
   import optionWnd.chattingOptionUtil.OptionWndChatChannelClass;
   import optionWnd.chattingOptionUtil.OptionWndChatFilter;
   import optionWnd.component.OptionDropdownMenu;
   import optionWnd.util.OptionWndUtil;
   import scaleform.clik.controls.Button;
   import scaleform.clik.controls.RadioButton;
   import scaleform.clik.data.DataProvider;
   import scaleform.clik.events.ButtonEvent;
 
   public class OptionWndFormChatting extends OptionWndFormTabNormal
   {
     
      public var tab00:RadioButton;
     
      public var tab01:RadioButton;
     
      public var tab02:RadioButton;
     
      public var tab03:RadioButton;
     
      public var tab04:RadioButton;
     
      public var title01:Button;
     
      public var title02:Button;
     
      public var arenaLine:Sprite;
     
      public var OnlyUseSystemMsgWndBox:Sprite;
     
      public var ChannelAssignComboBox:OptionDropdownMenu;
     
      public var checkBox_getitems:OptionCheckBox;
     
      public var checkBox_system:OptionCheckBox;
     
      public var checkBox_useitems:OptionCheckBox;
     
      public var checkBox_damage:OptionCheckBox;
     
      public var checkBox_dice:OptionCheckBox;
     
      public var checkBox_normal:OptionCheckBox;
     
      public var checkBox_party:OptionCheckBox;
     
      public var checkBox_ally:OptionCheckBox;
     
      public var checkBox_shout:OptionCheckBox;
     
      public var checkBox_hero:OptionCheckBox;
     
      public var checkBox_worldChat:OptionCheckBox;
     
      public var checkBox_market:OptionCheckBox;
     
      public var checkBox_pledge:OptionCheckBox;
     
      public var checkBox_union:OptionCheckBox;
     
      public var checkBox_tell:OptionCheckBox;
     
      public var checkBox_nonpcmessage:OptionCheckBox;
     
      public var checkBox_worldUnion:OptionCheckBox;
     
      public var defaultButton:L2UIButton;
     
      protected const CHECKBOXNAME:String = "checkBox_";
     
      protected var _selectedChannelIndex:int = -2;
     
      public var currentChannelNum:int = -2;
     
      public var currentChattingTabNum:int = -1;
     
      private var tabChangeFlag:Boolean = false;
     
      public var BG:Sprite;
     
      public var BGTexture:Sprite;
     
      public var BgTextureUp:Sprite;
     
      public function OptionWndFormChatting()
      {
         super();
      }
     
      override public function init(param1:int, param2:OptionWndFormMain) : void
      {
         super.init(param1,param2);
         START_Y_COMPONENT = 46;
         START_Y_GROUPBOX = 46;
         this.ChannelAssignComboBox.dataProvider = new DataProvider(new Array({"label":"$355"},{"label":"$188"},{"label":"$128"},{"label":"$559"},{"label":"$1961"},{"label":"$1962"},{"label":"$1963"},{"label":"$3234"},{"label":"$14108"}));
         this.ChannelAssignComboBox.menuRowCount = this.ChannelAssignComboBox.dataProvider.length;
         this.ChannelAssignComboBox.addEventListener(Event.CHANGE,this.dropDownMenuChange);
         this.tab00.group.addEventListener(Event.CHANGE,this.tabChangeHandler);
         this.checkBox_getitems.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_dice.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_system.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_useitems.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_damage.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_normal.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_party.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_ally.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_shout.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_worldChat.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_market.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_pledge.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_union.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_tell.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_nonpcmessage.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.checkBox_worldUnion.addEventListener(Event.SELECT,this.onChangeCheckBox);
         this.defaultButton.addEventListener(ButtonEvent.CLICK,this.onClickButton);
         this.OnlyUseSystemMsgWndBox.visible = true;
         this.checkBox_system.visible = this.checkBox_useitems.visible = this.checkBox_damage.visible = true;
         OptionWndUtil.setTooltip(this.ChannelAssignComboBox,3012,4893);
         dispatchEvent(new L2UIToolTipEvent(L2UIToolTipEvent.REGISTER_ELEMENT,this.defaultButton));
         OptionWndUtil.setToolTipString(this.defaultButton,"",L2UISystem.getSystemMessage(4877));
         this.arenaLine.visible = true;
         this.tab04.visible = false;
      }
     
      public function setTabFirst() : void
      {
         this.setDisableChkBox(false);
         this.currentChannelNum = 0;
         this.tab00.selected = true;
         this.SetWorldUnionForm();
      }
     
      protected function setDisableChkBox(param1:Boolean) : void
      {
         if(this.currentChannelNum < 0)
         {
            return;
         }
         if(OptionWndChatFilter.CHANNEL_OPTION_NAME.length <= this.currentChannelNum)
         {
            return;
         }
         var _loc2_:String = OptionWndChatFilter.CHANNEL_OPTION_NAME[this.currentChannelNum];
         var _loc3_:OptionCheckBox = getChildByName(this.CHECKBOXNAME + _loc2_) as OptionCheckBox;
         if(_loc3_ != null)
         {
            _loc3_.disabled = param1;
         }
      }
     
      private function SetWorldUnionForm() : void
      {
         this.defaultButton.y = 470;
         this.BG.height = 465;
         this.BGTexture.height = 233;
         this.BgTextureUp.height = 199;
         this.checkBox_worldUnion.visible = true;
         OptionWndUtil.setTooltip(this.checkBox_worldChat,14111,4914);
         OptionWndUtil.setTooltip(this.checkBox_worldUnion,14112,4915);
      }
     
      protected function getChannelLabel(param1:int) : String
      {
         if(param1 < 1 || param1 > this.ChannelAssignComboBox.dataProvider.length)
         {
            return "$441";
         }
         return this.ChannelAssignComboBox.dataProvider[param1 - 1]["label"];
      }
     
      protected function getSameChannelIndex() : int
      {
         var _loc1_:int = 1;
         while(_loc1_ < OptionWndChatFilter.tmpChattingOptionTabIndexes.length)
         {
            if(this.currentChattingTabNum != _loc1_)
            {
               if(this._selectedChannelIndex + 1 == OptionWndChatFilter.tmpChattingOptionTabIndexes[_loc1_])
               {
                  return _loc1_;
               }
            }
            _loc1_++;
         }
         return -1;
      }
     
      protected function swapSameChannelIndex() : void
      {
         var _loc1_:int = this.getSameChannelIndex();
         if(_loc1_ == -1)
         {
            return;
         }
         OptionWndChatFilter.tmpChattingOptionTabIndexes[_loc1_] = this.currentChannelNum;
         getChildByName("tab0" + _loc1_)["label"] = this.getChannelLabel(this.currentChannelNum);
      }
     
      protected function dropDownMenuChange(param1:Event = null) : void
      {
         if(this.tab00.group.selectedIndex < 0 || this.tab00.group.selectedButton == null)
         {
            return;
         }
         this._selectedChannelIndex = this.ChannelAssignComboBox.selectedIndex;
         if(!this.tabChangeFlag)
         {
            this.swapSameChannelIndex();
         }
         this.tabChangeFlag = false;
         this.setDisableChkBox(false);
         this.currentChannelNum = this._selectedChannelIndex + 1;
         this.tab00.group.selectedButton.label = this.getChannelLabel(this.currentChannelNum);
         OptionWndChatFilter.tmpChattingOptionTabIndexes[this.currentChattingTabNum] = this.currentChannelNum;
         this.chkOptionByChannelNum(this.currentChannelNum);
         if(this.currentChannelNum != OptionWndChatFilter.CHANNEL_entire)
         {
            this.setDisableChkBox(true);
         }
      }
     
      public function chkOptionByChannelNum(param1:int) : void
      {
         var _loc3_:String = null;
         var _loc4_:OptionCheckBox = null;
         var _loc5_:String = null;
         var _loc2_:OptionWndChatChannelClass = OptionWndChatFilter.tmpChattingOptionPerChannel[param1];
         for(_loc5_ in OptionWndChatFilter.SYSTEMMESSAGE_OPTION_NAME)
         {
            _loc3_ = OptionWndChatFilter.SYSTEMMESSAGE_OPTION_NAME[_loc5_];
            _loc4_ = this.getChildByName(this.CHECKBOXNAME + _loc3_) as OptionCheckBox;
            if(_loc4_ != null)
            {
               _loc4_.selected = _loc2_[_loc3_];
            }
         }
         for(_loc5_ in OptionWndChatFilter.CHANNEL_OPTION_NAME)
         {
            _loc3_ = OptionWndChatFilter.CHANNEL_OPTION_NAME[_loc5_];
            _loc4_ = this.getChildByName(this.CHECKBOXNAME + _loc3_) as OptionCheckBox;
            if(_loc4_ != null)
            {
               _loc4_.selected = _loc2_[_loc3_];
            }
         }
      }
     
      protected function tabChangeHandler(param1:Event) : void
      {
         this.currentChattingTabNum = this.tab00.group.selectedIndex;
         this.tabChangeFlag = true;
         this.ChannelAssignComboBox.selectedIndex = OptionWndChatFilter.tmpChattingOptionTabIndexes[this.currentChattingTabNum] - 1;
         this.ChannelAssignComboBox.disabled = this.currentChattingTabNum == 0;
      }
     
      protected function onChangeCheckBox(param1:Event) : void
      {
         var _loc2_:OptionCheckBox = param1.target as OptionCheckBox;
         var _loc3_:String = _loc2_.name.slice(9);
         OptionWndChatFilter.tmpChattingOptionPerChannel[this.currentChannelNum][_loc3_] = _loc2_.selected;
      }
     
      protected function onClickButton(param1:ButtonEvent) : void
      {
         if(param1.target == this.defaultButton)
         {
            this.onSetDefault();
         }
      }
     
      public function setDefaultAll() : void
      {
         var _loc1_:int = 0;
         var _loc2_:int = 0;
         while(_loc1_ < OptionWndChatFilter.tmpChattingOptionPerChannel.length)
         {
            OptionWndChatFilter.tmpChattingOptionPerChannel[_loc1_].setDefault();
            _loc1_++;
         }
         _loc1_ = 1;
         while(_loc1_ < OptionWndChatFilter.tmpChattingOptionTabIndexes.length)
         {
            _loc2_ = this.getDefaultChannelNumPerTab(_loc1_);
            OptionWndChatFilter.tmpChattingOptionTabIndexes[_loc1_] = _loc2_;
            getChildByName("tab0" + _loc1_)["label"] = this.getChannelLabel(_loc2_);
            _loc1_++;
         }
         _loc2_ = this.getDefaultChannelNumPerTab(this.currentChattingTabNum);
         this.ChannelAssignComboBox.selectedIndex = _loc2_ - 1;
         this.chkOptionByChannelNum(_loc2_);
      }
     
      protected function getDefaultChannelNumPerTab(param1:int) : int
      {
         if(L2UISystem.isClassicServer())
         {
            switch(param1)
            {
               case OptionWndChatFilter.TAB_entire:
                  return OptionWndChatFilter.CHANNEL_entire;
               case OptionWndChatFilter.TAB_market:
                  return OptionWndChatFilter.CHANNEL_worldChat;
               case OptionWndChatFilter.TAB_party:
                  return OptionWndChatFilter.CHANNEL_party;
               case OptionWndChatFilter.TAB_pledge:
                  return OptionWndChatFilter.CHANNEL_pledge;
               case OptionWndChatFilter.TAB_union:
                  return OptionWndChatFilter.CHANNEL_ally;
            }
         }
         else
         {
            switch(param1)
            {
               case OptionWndChatFilter.TAB_entire:
                  return OptionWndChatFilter.CHANNEL_entire;
               case OptionWndChatFilter.TAB_market:
                  return OptionWndChatFilter.CHANNEL_party;
               case OptionWndChatFilter.TAB_party:
                  return OptionWndChatFilter.CHANNEL_pledge;
               case OptionWndChatFilter.TAB_pledge:
                  return OptionWndChatFilter.CHANNEL_ally;
               case OptionWndChatFilter.TAB_union:
                  return OptionWndChatFilter.CHANNEL_union;
            }
         }
         return -1;
      }
     
      protected function onSetDefault() : void
      {
         var _loc1_:int = this.getDefaultChannelNumPerTab(this.currentChattingTabNum);
         OptionWndChatFilter.tmpChattingOptionPerChannel[_loc1_].setDefault();
         this.ChannelAssignComboBox.selectedIndex = _loc1_ - 1;
         this.chkOptionByChannelNum(_loc1_);
      }
     
      public function save() : void
      {
         OptionWndChatFilter.saveChannelOption();
         OptionWndChatFilter.saveTabIndex();
      }
   }
}

Посмотреть вложение 92674Я изменил код по твоей инструкции, опции появились, но обычным игрокам все равно не отображаются сообщения.
Потому что в теме описано лишь - как Активровать отображение этих настроек в Игре.
А то что они не работают или могут не работать - так же написано (и скорее так и будет), потому что код что делает проверки по ним в Интрефейсе и еще где то.

П.с. кто скажет, где расположен код SystemMsgWnd или как активровать (ну на Гме то вышло)
 
Последнее редактирование модератором:
Запрещено публиковать исходный код без BB-кода — CODE
Потому что в теме описано лишь - как Активровать отображение этих настроек в Игре.
А то что они не работают или могут не работать - так же написано (и скорее так и будет), потому что код что делает проверки по ним в Интрефейсе и еще где то.
Да, у нас одинаковая проблема! Я также определил, что ошибка находится в классе SystemMsgWnd файла InterfaceClassic.u, но не могу собрать файл обратно после внесения изменений в код.

Фрагмент изменяемого кода:
switch(a_EventID)
{
// End:0xBB
case 150:
GetINIBool("global", "SystemMsgWnd", tempVal, "chatfilter.ini");
// End:0x9B
if(getInstanceUIData().GetIsLiveServer())
{
// End:0x7B
if(tempVal != 0)
{
Class'NWindow.UIAPI_WINDOW'.static.ShowWindow("SystemMsgWnd");
}
else
{
Class'NWindow.UIAPI_WINDOW'.static.HideWindow("SystemMsgWnd");
}
}
else
{
Class'NWindow.UIAPI_WINDOW'.static.HideWindow("SystemMsgWnd");
}
// End:0xF9
break;
 
А что за прикол придумали эти корейци, что если мейн версия, можно использовать System Message Window, если нет то нельзя? В чем прикол?
 
А что за прикол придумали эти корейци, что если мейн версия, можно использовать System Message Window, если нет то нельзя? В чем прикол?
ну решили меньше инфы ессенсу оставить
 
Назад
Сверху Снизу