Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Игровой клиент (https://forum.zone-game.info/forumdisplay.php?f=54)
-   -   Костылизация nwindow.dll (https://forum.zone-game.info/showthread.php?t=42505)

Kampina 16.09.2017 01:49

Re: Костылизация nwindow.dll
 
Да возможно передавать картинку эмблем в клиент которые хранятся на сервере, такое делали хранили сами картинки в папке сервера(не помню в каком формате) и оттуда их передавали в клиент. Могу ошибаться но вы вроде это имели в виду?

У себя я это делал для отображения эмблем фракций вместо картинки альянса.

Triumvare 16.09.2017 18:21

Re: Костылизация nwindow.dll
 
Цитата:

Сообщение от Kampina (Сообщение 427921)
Да возможно передавать картинку эмблем в клиент которые хранятся на сервере, такое делали хранили сами картинки в папке сервера(не помню в каком формате) и оттуда их передавали в клиент. Могу ошибаться но вы вроде это имели в виду?

У себя я это делал для отображения эмблем фракций вместо картинки альянса.

Почти.
Только я хочу писать велосипеды, а не костыли. :)

А размер текстуры удалось изменить ?

Triumvare 17.09.2017 14:01

Re: Костылизация nwindow.dll
 
Решил попробовать пойти легким путем и передать нужное мне изображение через эмблему клана. Но тут появилась проблема, как заменить уже существующую в кэше эмблему, ибо клиент просто игнорирует пакет PledgeCrest с crestId который уже есть в кэше.

Kampina 18.09.2017 00:49

Re: Костылизация nwindow.dll
 
Цитата:

Сообщение от Triumvare (Сообщение 427927)
Почти.
Только я хочу писать велосипеды, а не костыли. :)

А размер текстуры удалось изменить ?

Размер меняется и в клиенте не только на сервере. Клиент я не трогаю.

Triumvare 18.09.2017 23:34

Re: Костылизация nwindow.dll
 
Нашел в engine.dll функцию которая вроде как сохраняет эмблемы. Но больше понимания к тому как оно работает это мне не дало.


Из того что я понял:
На клиент приходить пакет PledgeCrest с dds файлом
клиент сохраняет его в папку ../crest/
затем, вызывается функция ImportCrestFile, которая подгружает файлы из crest в оперативку или если их много создает utx файл, но это лишь догадка, так как после вызова данной функции dds-ки пропадают, а crest.utx не всегда появляется.

UCanvas::ImportCrestFile:
Свернуть ↑Развернуть ↓


Собственно вопрос, как узнать куда оно сохраняет текстуру, и как ее оттуда удалить ?

За любую информацию, как всегда, буду благодарен.

Gaikotsu 18.09.2017 23:39

Re: Костылизация nwindow.dll
 
Для того чтобы понять как удаляет - смотри обработку диалога где ставится/убирается значок - там вот скорее всего и дергается какая нибудь функция для удаления старой текустуры (или просто пометки что такая-то текстура удалена) в случае когда удаляется/меняется значок.

lordofdest 19.09.2017 08:48

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;

что в итоге превращается в установку флагов для обьекта что он удален.

Triumvare 19.09.2017 18:56

Re: Костылизация nwindow.dll
 
Цитата:

Сообщение от Gaikotsu (Сообщение 427947)
Для того чтобы понять как удаляет - смотри обработку диалога где ставится/убирается значок - там вот скорее всего и дергается какая нибудь функция для удаления старой текустуры (или просто пометки что такая-то текстура удалена) в случае когда удаляется/меняется значок.

Хорошая идея.

Нажатие кнопки удаления эмблемы клана вызывает RequestClanUnregisterCrest() в NWindow.dll, а там:
execRequestClanUnregisteCrest:
Свернуть ↑Развернуть ↓


Но к сожалению я не понимаю что тут происходит.


Цитата:

Сообщение от lordofdest (Сообщение 427949)
Сохраняет текстуру оно в пакет 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;

что в итоге превращается в установку флагов для обьекта что он удален.

А как мне это реализовать ? Как использовать объект UObject и его функции в моей dll ?

Стукните в скайп Triumvare или дайте свой.

lordofdest 19.09.2017 19:43

Re: Костылизация nwindow.dll
 
Позже распишу варианты и постараюсь найти древние наработки которые генерит *.lib файлы с дллок л2 и публичные хедеры к ут2003 на которых в своё время запускал UCC на длл от прелюда.

lordofdest 19.09.2017 21:01

Re: Костылизация nwindow.dll
 
Вложений: 1
Можешь на базе этого собрать себе нужные хедеры и либы.


Текущее время: 23:31. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot