04-05-2016, 10:48 PM
Раз уж пошла такая пьянка с большим интересном к редактированию интерфейса решил поговорить о насилии редактировании interface.u. На вбросы уровня гуру в этом направлении не претендую, но думаю пара-тройка людей оценит.
Итак, инструментарий:
- UTPT
- l2decrypt (либо кому-чем удобно декомпилить клиентские файлы)
- Хекс редактор. Я использую 010 Editor
В качестве примера запилим следующую штуку*:
![[Изображение: d6b7nZdfJXM.jpg]](https://pp.vk.me/c630225/v630225278/22ae4/d6b7nZdfJXM.jpg)
*Сделано в качестве примера, многого ожидать не стоит
Открыв в UT Package Tool interface.u, ищем нужный участок кода (для просмотра выбираем нужный класс \ функцию -> ПКМ -> Decompile). В примере один из вариантов - это
Цель: заменить barHP.HideWindow() на barHP.ShowWindow().
Так независимо от кода выше будет отображаться HP, для всех целей в таргете.
Для этого нужно найти barHP.HideWindow() в байт коде. Тут поможет смещение:
![[Изображение: 3qE_bVJXL5s.jpg]](https://pp.vk.me/c630225/v630225278/22b27/3qE_bVJXL5s.jpg)
Переходим к байт коду, для этого в UTPT жмем ПКМ по HandleTargetUpdate и выбираем Analize Raw Object
В появившемся окне жмем Format -> Auto format, в результате получаем следующий вид:
Далее - Jump -> To Object Offcet и вставляем смещение нужной строки (у нас это 0x00000755)
Получаем:
Т.е. barHP.HideWindow() соответствует 19 01 47 33 06 00 00 1C 96 16 в байт-коде.
Такую же процедуру проворачиваем и с barHP.ShowWindow(). Ему соответствует 19 01 47 33 06 00 00 1C A1 16.
Теперь собственно к редактированию:
Анпакаем interface.u. Я это делаю банальным перестаскиванием interface.u на l2decrypt.exe в проводнике, в результате чего появляется interface.u.clear, с ним и будем работать. Можно прогнать l2endec'ом, или еще чем...
Анпакнутый u открываем в хекс-редакторе и ищем строку с необходимым байт-кодом (Ctr + F -> 19 01 47 33 06 00 00 1C 96 16).
Может так статься, что таких же строк будет найдено больше одной, тогда то и понадобиться "глобальное смещение".
Тут правда у меня вылез ньанс - когда смещение предлагаемое UTPT не совсем совпадает с реальным смещением для строки в хекс редакторе, так что остается следить на глаз:Olen':
Заменяем 19 01 47 33 06 00 00 1C 96 16 на 19 01 47 33 06 00 00 1C A1 16 ( по сути один байт)
сохраняем, упаковываем (опять же любым доступным способом), готово.
Может кто подкинет варианты упрощения процедуры, а то и вовсе другие варианты, был бы рад
Итак, инструментарий:
- UTPT
- l2decrypt (либо кому-чем удобно декомпилить клиентские файлы)
- Хекс редактор. Я использую 010 Editor
В качестве примера запилим следующую штуку*:
![[Изображение: d6b7nZdfJXM.jpg]](https://pp.vk.me/c630225/v630225278/22ae4/d6b7nZdfJXM.jpg)
*Сделано в качестве примера, многого ожидать не стоит

Открыв в UT Package Tool interface.u, ищем нужный участок кода (для просмотра выбираем нужный класс \ функцию -> ПКМ -> Decompile). В примере один из вариантов - это
Код:
if ( bShowHPBar && (GetGameStateName() != "SPECIALCAMERASTATE") )
{
barHP.ShowWindow();
} else {
[color=Red]barHP.HideWindow(); [/color]
}Так независимо от кода выше будет отображаться HP, для всех целей в таргете.
Для этого нужно найти barHP.HideWindow() в байт коде. Тут поможет смещение:
![[Изображение: 3qE_bVJXL5s.jpg]](https://pp.vk.me/c630225/v630225278/22b27/3qE_bVJXL5s.jpg)
В появившемся окне жмем Format -> Auto format, в результате получаем следующий вид:
Далее - Jump -> To Object Offcet и вставляем смещение нужной строки (у нас это 0x00000755)
Получаем:
Такую же процедуру проворачиваем и с barHP.ShowWindow(). Ему соответствует 19 01 47 33 06 00 00 1C A1 16.
Теперь собственно к редактированию:
Анпакаем interface.u. Я это делаю банальным перестаскиванием interface.u на l2decrypt.exe в проводнике, в результате чего появляется interface.u.clear, с ним и будем работать. Можно прогнать l2endec'ом, или еще чем...
Анпакнутый u открываем в хекс-редакторе и ищем строку с необходимым байт-кодом (Ctr + F -> 19 01 47 33 06 00 00 1C 96 16).
Может так статься, что таких же строк будет найдено больше одной, тогда то и понадобиться "глобальное смещение".
Тут правда у меня вылез ньанс - когда смещение предлагаемое UTPT не совсем совпадает с реальным смещением для строки в хекс редакторе, так что остается следить на глаз:Olen':
Заменяем 19 01 47 33 06 00 00 1C 96 16 на 19 01 47 33 06 00 00 1C A1 16 ( по сути один байт)
сохраняем, упаковываем (опять же любым доступным способом), готово.
Может кто подкинет варианты упрощения процедуры, а то и вовсе другие варианты, был бы рад
Aka Stels


![[Изображение: V6dU.th.jpg]](http://image.zone-game.info/images/2016/04/05/V6dU.th.jpg)
![[Изображение: 9SxuazAAKBU.jpg]](https://pp.vk.me/c630225/v630225278/22b33/9SxuazAAKBU.jpg)
![[Изображение: RYSansGGJbg.jpg]](https://pp.vk.me/c630225/v630225278/22b3b/RYSansGGJbg.jpg)
![[Изображение: eqLfw3dkeog.jpg]](https://pp.vk.me/c630225/v630225278/22b42/eqLfw3dkeog.jpg)
![[Изображение: 8tMLuQH0MZw.jpg]](https://pp.vk.me/c630225/v630225278/22b50/8tMLuQH0MZw.jpg)
![[Изображение: DJCul.th.jpg]](http://image.zone-game.info/images/2016/04/05/DJCul.th.jpg)
![[Изображение: 7cRE4DyeWeI.jpg]](https://pp.vk.me/c630225/v630225278/22b6b/7cRE4DyeWeI.jpg)
![[Изображение: bmAeArpd-CM.jpg]](https://pp.vk.me/c630225/v630225278/22b90/bmAeArpd-CM.jpg)
![[Изображение: mIDUkllTX5o.jpg]](https://pp.vk.me/c630225/v630225278/22b97/mIDUkllTX5o.jpg)
![[Изображение: lQ1gIJ0_pKQ.jpg]](https://pp.vk.me/c630225/v630225278/22b9e/lQ1gIJ0_pKQ.jpg)
![[Изображение: G-7NciAbvs4.jpg]](https://pp.vk.me/c630225/v630225278/22bc7/G-7NciAbvs4.jpg)
![[Изображение: tdueBlroxVo.jpg]](https://pp.vk.me/c630225/v630225278/22bd1/tdueBlroxVo.jpg)
![[Изображение: FKQUrmrrzt8.jpg]](https://pp.vk.me/c630225/v630225278/22bbe/FKQUrmrrzt8.jpg)
![[Изображение: pM_1VYY8wY8.jpg]](https://pp.vk.me/c630225/v630225278/22bb7/pM_1VYY8wY8.jpg)