2019-05-15 14:52:37 +00:00
|
|
|
#include "common.h"
|
|
|
|
#include "patcher.h"
|
2019-07-06 10:27:21 +00:00
|
|
|
#include "World.h"
|
|
|
|
#include "Vehicle.h"
|
|
|
|
#include "PlayerPed.h"
|
|
|
|
#include "Pools.h"
|
2019-05-15 14:52:37 +00:00
|
|
|
#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;
|
|
|
|
}
|
|
|
|
|
2019-07-06 10:27:21 +00:00
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-15 14:52:37 +00:00
|
|
|
STARTPATCHES
|
|
|
|
InjectHook(0x4A7350, CReferences::Init, PATCH_JUMP);
|
2019-07-06 10:27:21 +00:00
|
|
|
InjectHook(0x4A7570, CReferences::RemoveReferencesToPlayer, PATCH_JUMP);
|
|
|
|
InjectHook(0x4A75A0, CReferences::PruneAllReferencesInWorld, PATCH_JUMP);
|
2019-05-15 14:52:37 +00:00
|
|
|
ENDPATCHES
|