F4MP/tiltedcode/Code/client/Games/ModManager.cpp
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

81 lines
2.6 KiB
C++

#include <TiltedOnlinePCH.h>
#include <Games/TES.h>
#include <Actor.h>
ModManager* ModManager::Get() noexcept
{
POINTER_SKYRIMSE(ModManager*, modManager, 400269);
return *modManager.Get();
}
uint32_t Mod::GetFormId(uint32_t aBaseId) const noexcept
{
if (IsLite())
{
aBaseId &= 0xFFF;
aBaseId |= 0xFE000000;
aBaseId |= uint32_t(liteId) << 12;
}
else
{
aBaseId &= 0xFFFFFF;
aBaseId |= uint32_t(standardId) << 24;
}
return aBaseId;
}
TP_THIS_FUNCTION(TSpawnNewREFR, uint32_t&, ModManager, uint32_t& aRefHandleOut, TESForm* apBaseForm, NiPoint3* apPosition, NiPoint3* apRotation, TESObjectCELL* apParentCell, TESWorldSpace* apWorldSpace, Actor* apActor, uintptr_t a9, uintptr_t a10, char aForcePersist, char a12);
TSpawnNewREFR* RealSpawnNewREFR;
uint32_t& TP_MAKE_THISCALL(SpawnNewREFR, ModManager, uint32_t& aRefHandleOut, TESForm* apBaseForm, NiPoint3* apPosition, NiPoint3* apRotation, TESObjectCELL* apParentCell, TESWorldSpace* apWorldSpace, Actor* apActor, uintptr_t a9, uintptr_t a10, char aForcePersist, char a12)
{
TP_EMPTY_HOOK_PLACEHOLDER;
return TiltedPhoques::ThisCall(RealSpawnNewREFR, apThis, aRefHandleOut, apBaseForm, apPosition, apRotation, apParentCell, apWorldSpace, apActor, a9, a10, aForcePersist, a12);
}
uint32_t ModManager::Spawn(NiPoint3& aPosition, NiPoint3& aRotation, TESObjectCELL* apParentCell, TESWorldSpace* apWorldSpace, Actor* apCharacter) noexcept
{
uint32_t refrHandle = 0;
TiltedPhoques::ThisCall(RealSpawnNewREFR, this, refrHandle, apCharacter->baseForm, &aPosition, &aRotation, apParentCell, apWorldSpace, apCharacter, 0, 0, static_cast<char>(0), static_cast<char>(1));
return refrHandle;
}
Mod* ModManager::GetByName(const char* acpName) const noexcept
{
auto pEntry = &mods.entry;
while (pEntry && pEntry->data)
{
if (_stricmp(acpName, pEntry->data->filename) == 0)
return pEntry->data;
pEntry = pEntry->next;
}
return nullptr;
}
TESObjectCELL* ModManager::GetCellFromCoordinates(int32_t aX, int32_t aY, TESWorldSpace* aWorldSpace, bool aSpawnCell) noexcept
{
TP_THIS_FUNCTION(TModManager, TESObjectCELL*, ModManager, int32_t, int32_t, TESWorldSpace*, bool);
POINTER_SKYRIMSE(TModManager, getCell, 13718);
return TiltedPhoques::ThisCall(getCell, this, aX, aY, aWorldSpace, aSpawnCell);
}
static TiltedPhoques::Initializer s_tesHooks(
[]()
{
POINTER_SKYRIMSE(TSpawnNewREFR, s_realSpawnNewREFR, 13723);
RealSpawnNewREFR = s_realSpawnNewREFR.Get();
// TP_HOOK(&RealSpawnNewREFR, SpawnNewREFR);
});