diff options
author | _AG <gennariarmando@outlook.com> | 2019-07-07 15:16:54 +0200 |
---|---|---|
committer | _AG <gennariarmando@outlook.com> | 2019-07-07 15:16:54 +0200 |
commit | d1c6a6aaa6c17250e069d1267b27e13303d6e20f (patch) | |
tree | 76d55bfd8bcc8f72cdd4d261c0bb1eaa050e522a /src/core/References.cpp | |
parent | Merge branch 'master' into master (diff) | |
parent | the great reorganization (diff) | |
download | re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.tar re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.tar.gz re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.tar.bz2 re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.tar.lz re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.tar.xz re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.tar.zst re3-d1c6a6aaa6c17250e069d1267b27e13303d6e20f.zip |
Diffstat (limited to 'src/core/References.cpp')
-rw-r--r-- | src/core/References.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/core/References.cpp b/src/core/References.cpp new file mode 100644 index 00000000..e87f0fd5 --- /dev/null +++ b/src/core/References.cpp @@ -0,0 +1,65 @@ +#include "common.h" +#include "patcher.h" +#include "World.h" +#include "Vehicle.h" +#include "PlayerPed.h" +#include "Pools.h" +#include "References.h" + +CReference *CReferences::aRefs = (CReference*)0x70BBE0; //[NUMREFERENCES]; +CReference *&CReferences::pEmptyList = *(CReference**)0x8F1AF8; + +void +CReferences::Init(void) +{ + int i; + pEmptyList = &aRefs[0]; + for(i = 0; i < NUMREFERENCES; i++){ + aRefs[i].pentity = nil; + aRefs[i].next = &aRefs[i+1]; + } + aRefs[NUMREFERENCES-1].next = nil; +} + +void +CReferences::RemoveReferencesToPlayer(void) +{ + if(FindPlayerVehicle()) + FindPlayerVehicle()->ResolveReferences(); + if(FindPlayerPed()) + FindPlayerPed()->ResolveReferences(); +} + +void +CReferences::PruneAllReferencesInWorld(void) +{ + int i; + CEntity *e; + + i = CPools::GetPedPool()->GetSize(); + while(--i >= 0){ + e = CPools::GetPedPool()->GetSlot(i); + if(e) + e->PruneReferences(); + } + + i = CPools::GetVehiclePool()->GetSize(); + while(--i >= 0){ + e = CPools::GetVehiclePool()->GetSlot(i); + if(e) + e->PruneReferences(); + } + + i = CPools::GetObjectPool()->GetSize(); + while(--i >= 0){ + e = CPools::GetObjectPool()->GetSlot(i); + if(e) + e->PruneReferences(); + } +} + +STARTPATCHES + InjectHook(0x4A7350, CReferences::Init, PATCH_JUMP); + InjectHook(0x4A7570, CReferences::RemoveReferencesToPlayer, PATCH_JUMP); + InjectHook(0x4A75A0, CReferences::PruneAllReferencesInWorld, PATCH_JUMP); +ENDPATCHES |