Merge pull request #350 from diamante0018/bbbbbbb
[Weapon] Fix loading code
This commit is contained in:
commit
80bd4a3702
@ -2,17 +2,15 @@
|
|||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
Game::XAssetHeader Weapon::WeaponFileLoad(Game::XAssetType /*type*/, const std::string& filename)
|
Game::WeaponCompleteDef* Weapon::LoadWeaponCompleteDef(const char* name)
|
||||||
{
|
{
|
||||||
Game::XAssetHeader header = { nullptr };
|
if (auto* rawWeaponFile = Game::BG_LoadWeaponCompleteDefInternal("mp", name))
|
||||||
|
|
||||||
// Try loading raw weapon
|
|
||||||
if (FileSystem::File(Utils::String::VA("weapons/mp/%s", filename.data())).exists())
|
|
||||||
{
|
{
|
||||||
header.data = Game::BG_LoadWeaponDef_LoadObj(filename.data());
|
return rawWeaponFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
return header;
|
auto* zoneWeaponFile = Game::DB_FindXAssetHeader(Game::ASSET_TYPE_WEAPON, name).weapon;
|
||||||
|
return Game::DB_IsXAssetDefault(Game::ASSET_TYPE_WEAPON, name) ? nullptr : zoneWeaponFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* Weapon::GetWeaponConfigString(int index)
|
const char* Weapon::GetWeaponConfigString(int index)
|
||||||
@ -542,8 +540,10 @@ namespace Components
|
|||||||
PatchLimit();
|
PatchLimit();
|
||||||
PatchConfigStrings();
|
PatchConfigStrings();
|
||||||
|
|
||||||
// Intercept weapon loading
|
// BG_LoadWEaponCompleteDef_FastFile
|
||||||
AssetHandler::OnFind(Game::XAssetType::ASSET_TYPE_WEAPON, Weapon::WeaponFileLoad);
|
Utils::Hook(0x57B650, LoadWeaponCompleteDef, HOOK_JUMP).install()->quick();
|
||||||
|
// Disable warning if raw weapon file cannot be found
|
||||||
|
Utils::Hook::Nop(0x57AF60, 5);
|
||||||
|
|
||||||
// weapon asset existence check
|
// weapon asset existence check
|
||||||
Utils::Hook::Nop(0x408228, 5); // find asset header
|
Utils::Hook::Nop(0x408228, 5); // find asset header
|
||||||
|
@ -13,7 +13,7 @@ namespace Components
|
|||||||
Weapon();
|
Weapon();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Game::XAssetHeader WeaponFileLoad(Game::XAssetType type, const std::string& filename);
|
static Game::WeaponCompleteDef* LoadWeaponCompleteDef(const char* name);
|
||||||
static void PatchLimit();
|
static void PatchLimit();
|
||||||
static void* LoadNoneWeaponHook();
|
static void* LoadNoneWeaponHook();
|
||||||
static void LoadNoneWeaponHookStub();
|
static void LoadNoneWeaponHookStub();
|
||||||
|
@ -33,6 +33,7 @@ namespace Game
|
|||||||
BG_GetNumWeapons_t BG_GetNumWeapons = BG_GetNumWeapons_t(0x4F5CC0);
|
BG_GetNumWeapons_t BG_GetNumWeapons = BG_GetNumWeapons_t(0x4F5CC0);
|
||||||
BG_GetWeaponName_t BG_GetWeaponName = BG_GetWeaponName_t(0x4E6EC0);
|
BG_GetWeaponName_t BG_GetWeaponName = BG_GetWeaponName_t(0x4E6EC0);
|
||||||
BG_LoadWeaponDef_LoadObj_t BG_LoadWeaponDef_LoadObj = BG_LoadWeaponDef_LoadObj_t(0x57B5F0);
|
BG_LoadWeaponDef_LoadObj_t BG_LoadWeaponDef_LoadObj = BG_LoadWeaponDef_LoadObj_t(0x57B5F0);
|
||||||
|
BG_LoadWeaponCompleteDefInternal_t BG_LoadWeaponCompleteDefInternal = BG_LoadWeaponCompleteDefInternal_t(0x4B5F10);
|
||||||
BG_GetWeaponDef_t BG_GetWeaponDef = BG_GetWeaponDef_t(0x440EB0);
|
BG_GetWeaponDef_t BG_GetWeaponDef = BG_GetWeaponDef_t(0x440EB0);
|
||||||
BG_GetEntityTypeName_t BG_GetEntityTypeName = BG_GetEntityTypeName_t(0x43A0E0);
|
BG_GetEntityTypeName_t BG_GetEntityTypeName = BG_GetEntityTypeName_t(0x43A0E0);
|
||||||
|
|
||||||
|
@ -46,9 +46,12 @@ namespace Game
|
|||||||
typedef const char*(__cdecl * BG_GetWeaponName_t)(unsigned int index);
|
typedef const char*(__cdecl * BG_GetWeaponName_t)(unsigned int index);
|
||||||
extern BG_GetWeaponName_t BG_GetWeaponName;
|
extern BG_GetWeaponName_t BG_GetWeaponName;
|
||||||
|
|
||||||
typedef void*(__cdecl * BG_LoadWeaponDef_LoadObj_t)(const char* filename);
|
typedef void*(__cdecl * BG_LoadWeaponDef_LoadObj_t)(const char* name);
|
||||||
extern BG_LoadWeaponDef_LoadObj_t BG_LoadWeaponDef_LoadObj;
|
extern BG_LoadWeaponDef_LoadObj_t BG_LoadWeaponDef_LoadObj;
|
||||||
|
|
||||||
|
typedef WeaponCompleteDef*(__cdecl * BG_LoadWeaponCompleteDefInternal_t)(const char* folder, const char* name);
|
||||||
|
extern BG_LoadWeaponCompleteDefInternal_t BG_LoadWeaponCompleteDefInternal;
|
||||||
|
|
||||||
typedef WeaponDef*(__cdecl * BG_GetWeaponDef_t)(unsigned int weaponIndex);
|
typedef WeaponDef*(__cdecl * BG_GetWeaponDef_t)(unsigned int weaponIndex);
|
||||||
extern BG_GetWeaponDef_t BG_GetWeaponDef;
|
extern BG_GetWeaponDef_t BG_GetWeaponDef;
|
||||||
|
|
||||||
@ -235,7 +238,7 @@ namespace Game
|
|||||||
typedef const char *(__cdecl * DB_GetXAssetTypeName_t)(XAssetType type);
|
typedef const char *(__cdecl * DB_GetXAssetTypeName_t)(XAssetType type);
|
||||||
extern DB_GetXAssetTypeName_t DB_GetXAssetTypeName;
|
extern DB_GetXAssetTypeName_t DB_GetXAssetTypeName;
|
||||||
|
|
||||||
typedef const char *(__cdecl * DB_IsXAssetDefault_t)(XAssetType type, const char* name);
|
typedef int(__cdecl * DB_IsXAssetDefault_t)(XAssetType type, const char* name);
|
||||||
extern DB_IsXAssetDefault_t DB_IsXAssetDefault;
|
extern DB_IsXAssetDefault_t DB_IsXAssetDefault;
|
||||||
|
|
||||||
typedef void(__cdecl * DB_GetRawBuffer_t)(RawFile* rawfile, char* buffer, int size);
|
typedef void(__cdecl * DB_GetRawBuffer_t)(RawFile* rawfile, char* buffer, int size);
|
||||||
|
@ -4455,7 +4455,7 @@ namespace Game
|
|||||||
IMPACT_TYPE_COUNT = 0xB,
|
IMPACT_TYPE_COUNT = 0xB,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct /*__declspec(align(2))*/ WeaponCompleteDef
|
struct WeaponCompleteDef
|
||||||
{
|
{
|
||||||
const char *szInternalName;
|
const char *szInternalName;
|
||||||
WeaponDef *weapDef;
|
WeaponDef *weapDef;
|
||||||
|
Loading…
Reference in New Issue
Block a user