Отключение расы Артея (нужна помощь)

Статус
В этой теме нельзя размещать новые ответы.

Psycho

I salute the valkyries calling me home!
Легенда
Орден Золотого Заката
Сообщения
4 914
Розыгрыши
1
Решения
4
Репутация
4 472
Реакции
3 356
Баллы
2 543
В общем получилось отключить на мейне все лишниее, типо дк, ассассинов, гномку новую, но как выпилить еще и Артею не въеду.
Если пытаюсь хотя бы одну цифру изменить в скрипте, то ловлю сразу крит.
Хелпаните, в какую сторону копать, можно под хайд или в лс.
Код:
package characterCreateMenu.contents
{
   import characterCreateMenu.data.CharacterData;
   import characterCreateMenu.event.CreateMenuEvModel;
   import fl.transitions.easing.Strong;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.text.TextField;
   import ncsoft.l2.core.L2UIComponent;
   import ncsoft.l2.events.L2UIEvent;
   import ncsoft.l2.events.L2UIToolTipEvent;
   import ncsoft.l2.native.L2UISystem;
   import scaleform.clik.controls.RadioButton;
   import scaleform.clik.motion.Tween;
   import scaleform.gfx.InteractiveObjectEx;
 
   public class CreateMenuTopCenter extends L2UIComponent
   {
      internal static var _instance:CreateMenuTopCenter;
  
      public var race_0:RadioButton;
  
      public var race_1:RadioButton;
  
      public var race_2:RadioButton;
  
      public var race_3:RadioButton;
  
      public var race_4:RadioButton;
  
      public var race_5:RadioButton;
  
      public var race_6:RadioButton;
  
      public var race_7:RadioButton;
  
      public var race_8:RadioButton;
  
      public var msgBox:Sprite;
  
      internal var txtBox:TextField;
  
      public var tween:Tween;
  
      public function CreateMenuTopCenter()
      {
         super();
         _instance = this;
         this.tween = new Tween(2000,this.msgBox);
         this.tween.paused = true;
         this.msgBox.alpha = 0;
      }
  
      public static function get Instance() : CreateMenuTopCenter
      {
         return _instance;
      }
  
      override protected function configUI() : void
      {
         var _loc2_:RadioButton = null;
         super.configUI();
         var _loc1_:int = 0;
         while(_loc1_ < CharacterData.MAX_RACE)
         {
            _loc2_ = getChildByName("race_" + _loc1_) as RadioButton;
            dispatchEvent(new L2UIToolTipEvent(L2UIToolTipEvent.REGISTER_ELEMENT,_loc2_));
            _loc1_++;
         }
         this.race_0.group.addEventListener(Event.CHANGE,this.HandleChange);
         this.addEvent();
         this.txtBox = this.msgBox.getChildByName("systemMsg") as TextField;
         this.SetTooltips();
         InteractiveObjectEx.setHitTestDisable(this.msgBox,true);
         InteractiveObjectEx.setHitTestDisable(this.txtBox,true);
      }
  
      protected function addEvent() : void
      {
         CreateMenuEvModel.evData.addEventListener("STEP_CHANGED_1",this.handleSetStep1);
         CreateMenuEvModel.evData.addEventListener("EV_OnShow",this.handleOnShow);
      }
  
      private function handleSetStep1(param1:L2UIEvent) : void
      {
         var _loc2_:Number = Number(param1._parameter.obj.race);
         (getChildByName("race_" + this.GetRaceIndexByRacdID(_loc2_)) as RadioButton).selected = true;
      }
  
      private function GetRaceIndexByRacdID(param1:Number) : int
      {
         switch(param1)
         {
            case 30:
               return 7;
            case 31:
               return 8;
            default:
               return param1;
         }
      }
  
      public function handleOnShow(param1:L2UIEvent) : void
      {
         this.tween.paused = true;
         this.msgBox.alpha = 0;
         this.checkform();
      }
  
      private function checkform() : void
      {
         var _loc4_:RadioButton = null;
         var _loc5_:int = 0;
         var _loc8_:RadioButton = null;
         var _loc1_:int = 90;
         var _loc2_:Boolean = L2UISystem.isClassicServer();
         var _loc3_:Array = new Array();
         this.race_6.visible = !_loc2_;
         this.race_7.visible = L2UISystem.isAdenServer();
         this.race_8.visible = L2UISystem.isAdenServer();
         if(L2UISystem.isAdenServer())
         {
            _loc3_.push(8);
         }
         _loc3_.push(0);
         _loc3_.push(1);
         _loc3_.push(2);
         _loc3_.push(3);
         _loc3_.push(4);
         if(_loc2_)
         {
            if(L2UISystem.isAdenServer())
            {
               _loc3_.push(7);
            }
            _loc3_.push(5);
         }
         else if(!_loc2_)
         {
            _loc3_.push(5);
            _loc3_.push(6);
         }
         var _loc6_:int = _loc3_.length * _loc1_;
         var _loc7_:int = _loc6_ / 2 - _loc1_;
         _loc4_ = getChildByName("race_" + _loc3_.pop()) as RadioButton;
         _loc4_.x = _loc7_;
         while(_loc3_.length > 0)
         {
            _loc8_ = getChildByName("race_" + _loc3_.pop()) as RadioButton;
            _loc8_.visible = true;
            _loc8_.x = _loc4_.x - _loc1_;
            _loc4_ = _loc8_;
         }
      }
  
      internal function SetTooltips() : void
      {
         var _loc2_:String = null;
         var _loc3_:RadioButton = null;
         var _loc1_:Number = 0;
         while(_loc1_ < CharacterData.MAX_RACE)
         {
            _loc2_ = L2UISystem.getSystemString(CharacterData.raceNameStr[_loc1_]);
            _loc3_ = getChildByName("race_" + _loc1_) as RadioButton;
            _loc3_.label = _loc2_;
            _loc1_++;
         }
      }
  
      internal function HandleChange(param1:Event) : void
      {
         CreateMenuCenterRight.Instance.handleChange(param1);
      }
  
      public function ShowMsg(param1:String) : void
      {
         this.tween.paused = true;
         this.tween.duration = 1000;
         this.tween.delay = 0;
         this.msgBox.alpha = 0;
         this.tween.quickSet({"props":{"alpha":1}});
         this.tween.ease = Strong.easeOut;
         this.txtBox.htmlText = param1;
         this.tween.onComplete = this.MsgBoxStartCompleted;
         this.tween.paused = false;
      }
  
      public function HideMsg() : void
      {
         this.tween.paused = true;
         this.tween.duration = 2000;
         this.tween.delay = 3000;
         this.tween.quickSet({"props":{"alpha":0}});
         this.tween.ease = Strong.easeIn;
         this.tween.onComplete = null;
         this.tween.paused = false;
      }
  
      internal function MsgBoxStartCompleted() : void
      {
         this.HideMsg();
      }
   }
}
Посмотреть вложение char_create.mp4
 
Последнее редактирование:
Странно тогда почему крит, тем-более через hex только менялось.
Кстати возможно есть в флешке еще проверка на кол-во.
Не могу за пк, так бы посмотрел 🤔🫠
Да там всего в нескольких скриптах изменения вносились, я в них и меняю, но все равно почему-то ловлю крит 🤷‍♂️
 

Да там всего в нескольких скриптах изменения вносились, я в них и меняю, но все равно почему-то ловлю крит 🤷‍♂️
А там нет какой-то связи с interface.u, пальцем в небо от ИЛ бойца: допустим как там рендомайзер вьібора расьі работает, не со скриптов? Если так, то, не найдя нужную расу, конечно, кританет. Или крит еще до етапа вьібора чарселекта вьіписьівается?
 
А там нет какой-то связи с interface.u, пальцем в небо от ИЛ бойца: допустим как там рендомайзер вьібора расьі работает, не со скриптов? Если так, то, не найдя нужную расу, конечно, кританет. Или крит еще до етапа вьібора чарселекта вьіписьівается?
Не, критует именно после кнопки создания чара в лоби. Типо в момент загрузки чар крейт.
Дак писал же уже, люди просто во флеше скрывают эти кнопки, без редактирования интерфейса.
Да и опять же, остальное я без проблем убрал.
 
  • Печально
Реакции: Rolo
Psycho, тогда другой пальцем в небо: а что если рандомайзер расьі проходится циклом по расам от 0 до макс инт, и там условно не в одном месте затереть надо, а в нескольких? - тоже херня?
 
Psycho, тогда другой пальцем в небо: а что если рандомайзер расьі проходится циклом по расам от 0 до макс инт, и там условно не в одном месте затереть надо, а в нескольких? - тоже херня?
Рандомайзер у меня от классика, в котором всего 6 рас, от людей до камаэлей. Как видишь, дк, ассассины, и новая гномка не попадаются в рандоме.
Не могу просто понять, как скрыть кнопку с выбором артеи, только в этом затык, всё остальное я уже сделал.
Я могу к примеру занулить модельку и прочую фигню, но саму кнопку не могу убрать.
 
  • Мне нравится
Реакции: Rolo
В ресурсе с утилитой l2tool есть ссылка на тему где можно работать с gfx и там есть некий gfx exporter из swf в gfx.
Может нужно как то по особому сохранить, опять же пк нет сейчас так бы посмотрел. :Coowl:
 
В ресурсе с утилитой l2tool есть ссылка на тему где можно работать с gfx и там есть некий gfx exporter из swf в gfx.
Может нужно как то по особому сохранить, опять же пк нет сейчас так бы посмотрел. :Coowl:
Ну я через них и делаю же :pandaredlol:
 
Гениально. А я по твоему где это делаю? :pandaredlol:
Сорян не дочитал ) а по факту голову не грей. Найди сервер где это вырезано и возьми там. Эти файлы никто не криптует почти.
 
Сорян не дочитал ) а по факту голову не грей. Найди сервер где это вырезано и возьми там. Эти файлы никто не криптует почти.
Ты где-то видел сервера 474 или 502, где на мейне они вырезаны?)
Если есть такие, дай линк в личку. Мне в ознакомительных целях, хочу понять как это вырезать правильно.
 
Ты где-то видел сервера 474 или 502, где на мейне они вырезаны?)
Если есть такие, дай линк в личку. Мне в ознакомительных целях, хочу понять как это вырезать правильно.
Кстати мысль вдруг каким то образом есть проверка не только в мейне и это вызывает краши, хорошо бы глянуть сам nwindow.
Возможно все работает с остальным на 502, но с последним краш как раз связан в том бинарнике.
Кто знает какие костыли там сделали в новом клиенте :pandaredlol:
 
Кстати мысль вдруг каким то образом есть проверка не только в мейне и это вызывает краши, хорошо бы глянуть сам nwindow.
Возможно все работает с остальным на 502, но с последним краш как раз связан в том бинарнике.
Кто знает какие костыли там сделали в новом клиенте :pandaredlol:
В данный момент я делаю на 474.
Мне по сути вот здесь надо просто 6лять FALSE прописать, но как только я пытаюсь это сделать, ловлю крит, вообще ниxyя не понимаю.
Код:
this.race_6.visible = !_loc2_;
 
В данный момент я делаю на 474.
Мне по сути вот здесь надо просто 6лять FALSE прописать, но как только я пытаюсь это сделать, ловлю крит, вообще ниxyя не понимаю.
Код:
this.race_6.visible = !_loc2_;
Нужно сумонить кто немного разобрался в этом, мне тоже интересно стало как так крашит если в hex даже менялось 🫠
 
В данный момент я делаю на 474.
Мне по сути вот здесь надо просто 6лять FALSE прописать, но как только я пытаюсь это сделать, ловлю крит, вообще ниxyя не понимаю.
Код:
this.race_6.visible = !_loc2_;
О чем крит-то? Как правишь флеш? байткод корректный?
Открой готово вырезанный для 140. сравни байткод или вообще диф до и после в 140
 
О чем крит-то? Как правишь флеш? байткод корректный?
Открой готово вырезанный для 140. сравни байткод или вообще диф до и после в 140
Как то так выходит, хотя странно почему 👀
 
О чем крит-то? Как правишь флеш? байткод корректный?
Открой готово вырезанный для 140. сравни байткод или вообще диф до и после 140

Код:
Error:
Protocol: S_NEW_CHARACTER_SUCCESS(807, 3) <= C_NOT_USE_14(3, 4) <= S_EX_BR_VERSION(6, 54) <= S_CHARACTER_SELECTION_INFO(19, 54) <= S_LOGIN_RESULT(11, 54) <= C_ALLIANCE_INFO(5, 55) <= C_ALLIANCE_INFO(45, 55) <= S_VERSION_CHECK(28, 56) <= C_LOGOUT(275, 57)

History: Advance <- GFxFlashObj::AdvanceAndRender <+ Flash Name: ContainerHUD Tick Count: 55 <- GFxUIManager::RenderFlash <- GFxFlashWnd::OnPaint <- NCVirtualWndMain::DrawChildWindow <- NCVirtualWndMain::DrawChildWindow <- WM_PAINT <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::ConsolePostRender <- UGameEngine::PostDraw <- ConsolePostRender <- Draw <- UGameEngine::Draw <+ GRenDev:fd6f0000 RI:fd6f47b4 <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- CMainLoop::UpdateTheWorld <- MainLoop

Exception:
Code [EXCEPTION_READ_VIOLATION  DataAddress:0x00000016]
Address [0x6E79EA28]
SegCs [0x0023]

NWindow.DLL [0x6E450000] Offset [0x0034EA28]

Код:
Error:
Protocol: S_NEW_CHARACTER_SUCCESS(807, 3) <= C_NOT_USE_14(3, 4) <= S_EX_BR_VERSION(6, 68) <= S_CHARACTER_SELECTION_INFO(19, 68) <= S_LOGIN_RESULT(11, 68) <= C_ALLIANCE_INFO(5, 69) <= C_ALLIANCE_INFO(45, 69) <= S_VERSION_CHECK(28, 70) <= C_LOGOUT(275, 71)

History: Advance <- GFxFlashObj::AdvanceAndRender <+ Flash Name: ContainerHUD Tick Count: 69 <- GFxUIManager::RenderFlash <- GFxFlashWnd::OnPaint <- NCVirtualWndMain::DrawChildWindow <- NCVirtualWndMain::DrawChildWindow <- WM_PAINT <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::ConsolePostRender <- UGameEngine::PostDraw <- ConsolePostRender <- Draw <- UGameEngine::Draw <+ GRenDev:fd6f0000 RI:fd6f47b4 <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- CMainLoop::UpdateTheWorld <- MainLoop

Exception:
Code [EXCEPTION_READ_VIOLATION  DataAddress:0x000002E8]
Address [0x6EC34A20]
SegCs [0x0023]

NWindow.DLL [0x6E9F0000] Offset [0x00244A20]

Код:
Error:
Protocol: S_NEW_CHARACTER_SUCCESS(807, 3) <= C_EX_DUMMY(3, 4) <= S_EX_BR_VERSION(6, 54) <= S_CHARACTER_SELECTION_INFO(19, 55) <= S_LOGIN_RESULT(11, 55) <= C_ALLIANCE_INFO(5, 56) <= C_ALLIANCE_INFO(45, 56) <= S_VERSION_CHECK(28, 57) <= C_LOGOUT(275, 88)

History: Advance <- GFxFlashObj::AdvanceAndRender <+ Flash Name: ContainerHUD Tick Count: 56 <- GFxUIManager::RenderFlash <- GFxFlashWnd::OnPaint <- NCVirtualWndMain::DrawChildWindow <- NCVirtualWndMain::DrawChildWindow <- WM_PAINT <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::ConsolePostRender <- UGameEngine::PostDraw <- ConsolePostRender <- Draw <- UGameEngine::Draw <+ GRenDev:fd6f0000 RI:fd6f47b4 <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- CMainLoop::UpdateTheWorld <- MainLoop

Exception:
Code [EXCEPTION_READ_VIOLATION  DataAddress:0xE06ECD61]
Address [0xE06ECD61]
SegCs [0x0023]

L2.exe [0x10900000] Offset [0xCFDECD61]

Твой l2tool, jpexs, HxD

Хз как там правильно сравнивать, но вот:
 
Последнее редактирование:
Код:
Error:
Protocol: S_NEW_CHARACTER_SUCCESS(807, 3) <= C_NOT_USE_14(3, 4) <= S_EX_BR_VERSION(6, 54) <= S_CHARACTER_SELECTION_INFO(19, 54) <= S_LOGIN_RESULT(11, 54) <= C_ALLIANCE_INFO(5, 55) <= C_ALLIANCE_INFO(45, 55) <= S_VERSION_CHECK(28, 56) <= C_LOGOUT(275, 57)

History: Advance <- GFxFlashObj::AdvanceAndRender <+ Flash Name: ContainerHUD Tick Count: 55 <- GFxUIManager::RenderFlash <- GFxFlashWnd::OnPaint <- NCVirtualWndMain::DrawChildWindow <- NCVirtualWndMain::DrawChildWindow <- WM_PAINT <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::ConsolePostRender <- UGameEngine::PostDraw <- ConsolePostRender <- Draw <- UGameEngine::Draw <+ GRenDev:fd6f0000 RI:fd6f47b4 <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- CMainLoop::UpdateTheWorld <- MainLoop

Exception:
Code [EXCEPTION_READ_VIOLATION  DataAddress:0x00000016]
Address [0x6E79EA28]
SegCs [0x0023]

NWindow.DLL [0x6E450000] Offset [0x0034EA28]

Код:
Error:
Protocol: S_NEW_CHARACTER_SUCCESS(807, 3) <= C_NOT_USE_14(3, 4) <= S_EX_BR_VERSION(6, 68) <= S_CHARACTER_SELECTION_INFO(19, 68) <= S_LOGIN_RESULT(11, 68) <= C_ALLIANCE_INFO(5, 69) <= C_ALLIANCE_INFO(45, 69) <= S_VERSION_CHECK(28, 70) <= C_LOGOUT(275, 71)

History: Advance <- GFxFlashObj::AdvanceAndRender <+ Flash Name: ContainerHUD Tick Count: 69 <- GFxUIManager::RenderFlash <- GFxFlashWnd::OnPaint <- NCVirtualWndMain::DrawChildWindow <- NCVirtualWndMain::DrawChildWindow <- WM_PAINT <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::ConsolePostRender <- UGameEngine::PostDraw <- ConsolePostRender <- Draw <- UGameEngine::Draw <+ GRenDev:fd6f0000 RI:fd6f47b4 <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- CMainLoop::UpdateTheWorld <- MainLoop

Exception:
Code [EXCEPTION_READ_VIOLATION  DataAddress:0x000002E8]
Address [0x6EC34A20]
SegCs [0x0023]

NWindow.DLL [0x6E9F0000] Offset [0x00244A20]

Код:
Error:
Protocol: S_NEW_CHARACTER_SUCCESS(807, 3) <= C_EX_DUMMY(3, 4) <= S_EX_BR_VERSION(6, 54) <= S_CHARACTER_SELECTION_INFO(19, 55) <= S_LOGIN_RESULT(11, 55) <= C_ALLIANCE_INFO(5, 56) <= C_ALLIANCE_INFO(45, 56) <= S_VERSION_CHECK(28, 57) <= C_LOGOUT(275, 88)

History: Advance <- GFxFlashObj::AdvanceAndRender <+ Flash Name: ContainerHUD Tick Count: 56 <- GFxUIManager::RenderFlash <- GFxFlashWnd::OnPaint <- NCVirtualWndMain::DrawChildWindow <- NCVirtualWndMain::DrawChildWindow <- WM_PAINT <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::ConsolePostRender <- UGameEngine::PostDraw <- ConsolePostRender <- Draw <- UGameEngine::Draw <+ GRenDev:fd6f0000 RI:fd6f47b4 <- UWindowsViewport::Repaint <- UWindowsClient::Tick <- ClientTick <- UGameEngine::Tick <- UpdateWorld <- CMainLoop::UpdateTheWorld <- MainLoop

Exception:
Code [EXCEPTION_READ_VIOLATION  DataAddress:0xE06ECD61]
Address [0xE06ECD61]
SegCs [0x0023]

L2.exe [0x10900000] Offset [0xCFDECD61]

Твой l2tool, jpexs, HxD

Хз как там правильно сравнивать, но вот:
Диф это я про то, что можно взять 140 gfx до вырезания эртей и после(экспортировать из jpex как байт код). И через какую-нибудь diff Тулу, например в том же vscode сравнить и смотреть как было сделано. Если ты правишь в jpex не через байткод, скорее всего перекомпиливает обратно херово. Плюс смотреть пакетку вдруг там гоняют что-то специфичное
 
Диф это я про то, что можно взять 140 gfx до вырезания эртей и после(экспортировать из jpex как байт код). И через какую-нибудь diff Тулу, например в том же vscode сравнить и смотреть как было сделано. Если ты правишь в jpex не через байткод, скорее всего перекомпиливает обратно херово. Плюс смотреть пакетку вдруг там гоняют что-то специфичное
Ну так я сравнивал, и смотрел что именно менялось. Пытаюсь провернуть тоже самое, и получаю крит.
Буду дома, выкачаю 140 клиент, и попробую точно такие же правки внести в оригинальный флеш, если будет критовать, значит дело в софте.
 
Это под 610 ертея измененные *.as файлы, может чем то поможет... (тоже ертею убирал)

в ui7 это я вроде переключение языка Russia\English добавлял.
 

Вложения

Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху