Костылизация nwindow.dll
Недавно задался вопросом, возможно ли передать картинку в клиент L2, собственно посмотрел на реализацию эмблем клана в Interface.u, и понял что нужно копать в нативные функции. Задача состоит в том что бы посмотреть в nwindow.dll как байтовый массив превращается в объект Texture и написать такую же функцию только для своих нужд.
Отсюда вопрос, есть ли какие-то мануалы по IDA Pro для Lineage 2, или люди у которых можно поспрашивать че да как. Заранее спасибо. |
Re: Костылизация nwindow.dll
Нэ?
|
Re: Костылизация nwindow.dll
Цитата:
|
Re: Костылизация nwindow.dll
На клиент с сервера приходит уже готовая DDS текстура, впрочем, клиент отсылает на сервер, также, уже готовую текстуру.
|
Re: Костылизация nwindow.dll
Вложений: 1
Цитата:
Эм, нет, на клиент отправляется байтовый массив, размер изображения и id клана, потом в клиенте все это превращается в объект Texture и вставляется в нужное место. :) Хочу реализовать такую же нативную функцию в параметры которой буду передавать массив, а получать из не текстуру. |
Re: Костылизация nwindow.dll
Правда? А че внутри байтового массива? Идите курите формат DDS, все спеки есть в гугле. Как сравните по байтикам хотя бы заголовок (он всего лишь 124 байта) - приходите назад.
Код создания UTexture я уже скидывал выше, это не более чем инкапсуляция текстуры сжатой DXT. |
Re: Костылизация nwindow.dll
Цитата:
|
Re: Костылизация nwindow.dll
Цитата:
|
Re: Костылизация nwindow.dll
Крч, что я хочу сделать:
Пользователь на сайте загружает изображение профиля. Это фото сохраняется в бд, затем отобразить его в игре при помощи Unreal Script'ов. Где и как это уже другая история. Собственно передать информацию на клиент я могу. Все что нужно это грубо говоря написать функцию на С++ в которой превратить то что я получил от сервера в UTexture и вызвать ее в Unreal Script'ах в нужном мне месте. Как писать нативные функции что бы их можно было использовать в том же interface.u ? Цитата:
Цитата:
|
Re: Костылизация nwindow.dll
Цитата:
Цитата:
Цитата:
|
Re: Костылизация nwindow.dll
Да возможно передавать картинку эмблем в клиент которые хранятся на сервере, такое делали хранили сами картинки в папке сервера(не помню в каком формате) и оттуда их передавали в клиент. Могу ошибаться но вы вроде это имели в виду?
У себя я это делал для отображения эмблем фракций вместо картинки альянса. |
Re: Костылизация nwindow.dll
Цитата:
Только я хочу писать велосипеды, а не костыли. :) А размер текстуры удалось изменить ? |
Re: Костылизация nwindow.dll
Решил попробовать пойти легким путем и передать нужное мне изображение через эмблему клана. Но тут появилась проблема, как заменить уже существующую в кэше эмблему, ибо клиент просто игнорирует пакет PledgeCrest с crestId который уже есть в кэше.
|
Re: Костылизация nwindow.dll
Цитата:
|
Re: Костылизация nwindow.dll
Нашел в engine.dll функцию которая вроде как сохраняет эмблемы. Но больше понимания к тому как оно работает это мне не дало.
Из того что я понял: На клиент приходить пакет PledgeCrest с dds файлом клиент сохраняет его в папку ../crest/ затем, вызывается функция ImportCrestFile, которая подгружает файлы из crest в оперативку или если их много создает utx файл, но это лишь догадка, так как после вызова данной функции dds-ки пропадают, а crest.utx не всегда появляется. UCanvas::ImportCrestFile:Развернуть ↓Собственно вопрос, как узнать куда оно сохраняет текстуру, и как ее оттуда удалить ? За любую информацию, как всегда, буду благодарен. |
Re: Костылизация nwindow.dll
Для того чтобы понять как удаляет - смотри обработку диалога где ставится/убирается значок - там вот скорее всего и дергается какая нибудь функция для удаления старой текустуры (или просто пометки что такая-то текстура удалена) в случае когда удаляется/меняется значок.
|
Re: Костылизация nwindow.dll
Сохраняет текстуру оно в пакет crest.
Это видно с поиска пакета UObject::LoadPackage(0, L"crest", 0x10u, 0) или создания нового UObject::CreatePackage(0, L"crest"). далее оно делает что то типа: ImportObject<UTexture>( Level, Pkg, TempName, RF_Public|RF_Standalone, TempFname ); ну и по сути вся соль импорта в этом вызове он сам найдет импортер для данного обьекта если таковой имееться. Если интиресно фабрику для импорта текстур можно найти в ИДА по строке "RLE compression of BMP images not supported". а удалется обьект как то вот так: UObject* Pkg = Object; while( Pkg->GetOuter() ) Pkg = Pkg->GetOuter(); if( Pkg && Pkg->IsA(UPackage::StaticClass() ) ) ((UPackage*)Pkg)->bDirty = 1; unguard; delete Object; что в итоге превращается в установку флагов для обьекта что он удален. |
Re: Костылизация nwindow.dll
Цитата:
Нажатие кнопки удаления эмблемы клана вызывает RequestClanUnregisterCrest() в NWindow.dll, а там: execRequestClanUnregisteCrest:Развернуть ↓Но к сожалению я не понимаю что тут происходит. Цитата:
Стукните в скайп Triumvare или дайте свой. |
Re: Костылизация nwindow.dll
Позже распишу варианты и постараюсь найти древние наработки которые генерит *.lib файлы с дллок л2 и публичные хедеры к ут2003 на которых в своё время запускал UCC на длл от прелюда.
|
Re: Костылизация nwindow.dll
Вложений: 1
Можешь на базе этого собрать себе нужные хедеры и либы.
|
Re: Костылизация nwindow.dll
Цитата:
Нужный мне класс UObject находится в core.dll, я собрал core.lib, но вот как собрать хедер не знаю, буду разбираться. |
Re: Костылизация nwindow.dll
Ну хедер для него там уже есть вам нужны по сути 3 класса uobject, ufactory и utexture. И вопрос вот в чем каковы ваши познания в с++ и как все это добро разворачиваеться в рантайме(смещения филдов, сабклассы и виртуальные таблици)?
|
Re: Костылизация nwindow.dll
Цитата:
|
Текущее время: 02:55. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot