[Fastman92 Limit Adjuster] enhanced IMG archives

ToffyX64

Новичок
Автор темы
1
0
Всем привет!
Работаю над тем, чтобы подключить поддержку enhanced IMG archives из fastman92 limit adjuster в MTA.
Она поддерживает шифрование архивов и активируеться и .ini файле: Enable handling of new enhanced IMG archives = 1

В исходнике limit adjuster есть публичные функции для работы с этими архивами:

публичные функции из FLA:
// Returns true if handling of enhanced IMG archives is enabled
F92_LA_API bool F92_LA_CONVENTION IsHandlingOfEnhancedIMGarchivesEnabled();

// Loads CD directory in GTA SA. Works only if enhanced IMG archives are enabled!
F92_LA_API void F92_LA_CONVENTION LoadCdDirectoryInGTASA(
        const tImgDescriptorInGTASA *pIMGdescriptor,
        int imgId,
        tGTASAimgLoadingCall* pLoadingCall
);

ну и я поставил хук на функцию gta, которая отвечает за подгрузку IMG архивов ( LoadCdDirectory )
теперь архивы читает, но уже при входе в игру возникают краши при загрузке моделей.
Чесно говоря, я думаю что проблема где-то в парамитрах которые я передаю, менял их но лучше от этого не стало.
Вот ссылка на код экспортных функций от FLA и струкрур - https://github.com/fastman92/fastman92_limit_adjuster/blob/master/fastman92 limit adjuster/fastman92 limit adjuster/Source files/ForOtherProjects/FLA_required/Exports.h

Может есть кто-то, кто работал с этой шифровкой и знает в чем проблема. Вот мой код использования LoadCdDirectoryInGTASA от FLA

Код функци хука:
typedef void(__stdcall* ptrLoadCdDirectoryInGTASA)(const tImgDescriptorInGTASA* pIMGdescriptor, int imgId, tGTASAimgLoadingCall* pLoadingCall);
ptrLoadCdDirectoryInGTASA LoadCdDirectoryInGTASA = nullptr;


bool MyOnSpecialEntry(tImgFastman92GTASAdirectoryEntry* pEntry, void* pUserData)
{
    return false;
}

bool MyOnEntry(tImgFastman92GTASAdirectoryEntry* pEntry, void* pStreamingInfo, bool isFileSizeSetUp, void* pUserData)
{
    if (pEntry == nullptr || pStreamingInfo == nullptr || pUserData == nullptr)
        return false;

    return true;
}

void LoadCdDirectory_Hooked(char const* ArchiveName, int archiveID)
{
    tImgDescriptorInGTASA descriptor = {};
    strncpy(descriptor.m_name, ArchiveName, sizeof(descriptor.m_name) - 1);
    descriptor.m_name[sizeof(descriptor.m_name) - 1] = '\0';
    descriptor.m_bRegister = 1;
    descriptor.m_lsn = 0;

    tGTASAimgLoadingCall loadingCall = {};
    loadingCall.dwSize = sizeof(tGTASAimgLoadingCall);

    loadingCall.pUserData = nullptr;
    loadingCall.ReadEntry = nullptr;
    loadingCall.OnSpecialEntry = nullptr;
    loadingCall.OnEntry = &MyOnEntry;

    MessageBoxA(NULL, buffer, "[REPORT-1.2] LoadCdDirectory_Hooked", MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2);

    LoadCdDirectoryInGTASA(&descriptor, archiveID, &loadingCall);
}