diff options
author | aap <aap@papnet.eu> | 2019-07-06 12:27:21 +0200 |
---|---|---|
committer | aap <aap@papnet.eu> | 2019-07-06 12:27:21 +0200 |
commit | 2b592605ab043be56b5bbbf1ac06f223400dd2ef (patch) | |
tree | 8abe75af453b4726fd858643c92eb160ed113610 /src/References.cpp | |
parent | Merge pull request #113 from erorcun/erorcun (diff) | |
download | re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.tar re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.tar.gz re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.tar.bz2 re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.tar.lz re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.tar.xz re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.tar.zst re3-2b592605ab043be56b5bbbf1ac06f223400dd2ef.zip |
Diffstat (limited to '')
-rw-r--r-- | src/References.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/References.cpp b/src/References.cpp index 187f4ffa..e87f0fd5 100644 --- a/src/References.cpp +++ b/src/References.cpp @@ -1,5 +1,9 @@ #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]; @@ -17,6 +21,45 @@ CReferences::Init(void) 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 |