18.09.2017, 23:34
|
#15
|
Пользователь
Регистрация: 15.09.2017
Сообщений: 10
Отблагодарили 0 раз(а)
Рейтинг мнений:
|
Re: Костылизация nwindow.dll
Нашел в engine.dll функцию которая вроде как сохраняет эмблемы. Но больше понимания к тому как оно работает это мне не дало.
Из того что я понял:
На клиент приходить пакет PledgeCrest с dds файлом
клиент сохраняет его в папку ../crest/
затем, вызывается функция ImportCrestFile, которая подгружает файлы из crest в оперативку или если их много создает utx файл, но это лишь догадка, так как после вызова данной функции dds-ки пропадают, а crest.utx не всегда появляется.
Свернуть ↑
PHP код:
void __thiscall UCanvas::ImportCrestFile(UCanvas *this, int a2, int a3, int a4, int a5) { int v5; // ST0C_4@1 int v6; // esi@3 int v7; // eax@4 int v8; // eax@5 UCanvas *v9; // ecx@6 int v10; // edi@6 int v11; // esi@8 int v12; // eax@9 int v13; // eax@13 int v14; // ST24_4@18 int v15; // eax@18 int v16; // [sp-4h] [bp-630h]@8 int v17; // [sp+0h] [bp-62Ch]@1 char v18; // [sp+Ch] [bp-620h]@1 int v19; // [sp+20Ch] [bp-420h]@1 int v20; // [sp+40Ch] [bp-220h]@1 UCanvas *v21; // [sp+618h] [bp-14h]@1 int *v22; // [sp+61Ch] [bp-10h]@1 int v23; // [sp+628h] [bp-4h]@1
v22 = &v17; v21 = this; v23 = 0; appSprintf(&v19, L"..\\crest\\%d_%d.dds", a2, a3); appSprintf(&v20, L"crest_%d_%d", a2, a3); appSprintf(&v18, L"crest.%s", &v20, v5); if( a5 ) { appSprintf(&v20, L"crest_%d_%d_l", a2, a3); } v6 = UObject::StaticFindObject(UPackage::PrivateStaticClass, 0, L"crest", 0); if ( v6 || (v7 = UObject::LoadPackage(0, L"crest", 16, 0), (v6 = sub_200D4B70(v7)) != 0) || (v8 = UObject::CreatePackage(0, L"crest"), (v6 = sub_200D4B70(v8)) != 0) ) { v9 = v21; v10 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v21 + 43) + 60) + 216); if ( a5 ) { v6 = UObject::CreatePackage(v6, L"Large"); } *(_DWORD *)(v6 + 64) = 1; v16 = (int)v9; FName::FName(&v16); v11 = sub_200D4BD0(*(_DWORD *)GWarn, (int)&v19, v10, v6, (int)&v20); (*(void (__stdcall **)(int *, _DWORD, _DWORD, signed int, int))(**(_DWORD **)GFileManager + 24))(&v19, 0, 0, 1, v16); if ( v11 ) { v12 = *(_DWORD *)(v11 + 92); if ( (v12 - 1) & v12 || (*(_DWORD *)(v11 + 96) - 1) & *(_DWORD *)(v11 + 96) ) { v16 = *(_DWORD *)(v11 + 96); v14 = v12; v15 = UObject::GetPathName(v11); appMsgf(0, L"\"%s\" cannot be imported because it's dimensions are not powers of two (%dx%d)", v15, 0, 0); (*(void (__thiscall **)(int, signed int, int, int))(*(_DWORD *)v11 + 12))(v11, 1, v14, v16); } else { *(_DWORD *)(v11 + 168) &= 0xFFFFFFFD; UTexture::CreateMips((UTexture *)v11, (void *)a5, 1); UTexture::CreateColorRange((UTexture *)v11); if ( !a5 ) { v16 = *(_DWORD *)(v11 + 252) - 1; sub_20089C00(v11 + 248, 1, v16); } v13 = UObject::GetFullName(v11, 0); debugf(760, L"Imported %s", v13, v17); if ( !a5 ) { v16 = v11; if ( a4 ) { (*(void (__stdcall **)(int, int))(*(_DWORD *)GL2Console + 2700))(a3, v16); *(_DWORD *)(v11 + 28) |= 0x4000000u; v23 = -1; return; } (*(void (__stdcall **)(int, int))(*(_DWORD *)GL2Console + 2704))(a3, v16); } *(_DWORD *)(v11 + 28) |= 0x4000000u; v23 = -1; } } else { debugf(789, L"Import texture %s from %s failed", &v20, &v19); } } }
Свернуть ↑Развернуть ↓
Собственно вопрос, как узнать куда оно сохраняет текстуру, и как ее оттуда удалить ?
За любую информацию, как всегда, буду благодарен.
|
|
|