summaryrefslogtreecommitdiffstats
path: root/src/References.cpp
diff options
context:
space:
mode:
authoraap <aap@papnet.eu>2019-07-06 12:27:21 +0200
committeraap <aap@papnet.eu>2019-07-06 12:27:21 +0200
commit2b592605ab043be56b5bbbf1ac06f223400dd2ef (patch)
tree8abe75af453b4726fd858643c92eb160ed113610 /src/References.cpp
parentMerge pull request #113 from erorcun/erorcun (diff)
downloadre3-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.cpp43
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