@@ -95,7 +95,6 @@ VOID InitShotsyncHooks()
95
95
HookInstall (HOOKPOS_CEventDamage__AffectsPed, (DWORD)HOOK_CEventDamage__AffectsPed, 6 );
96
96
HookInstall (HOOKPOS_CEventVehicleExplosion__AffectsPed, (DWORD)HOOK_CEventVehicleExplosion__AffectsPed, 5 );
97
97
HookInstall (HOOKPOS_CFireManager__StartFire, (DWORD)HOOK_CFireManager__StartFire, 6 );
98
- HookInstall (HOOKPOS_CFireManager__StartFire_, (DWORD)HOOK_CFireManager__StartFire_, 6 );
99
98
HookInstall (HOOKPOS_CProjectileInfo__AddProjectile, (DWORD)HOOK_CProjectileInfo__AddProjectile, 7 );
100
99
HookInstall (HOOKPOS_CProjectile__CProjectile, (DWORD)HOOK_CProjectile__CProjectile, 7 );
101
100
HookInstall (HOOKPOS_IKChainManager_PointArm, (DWORD)HOOK_IKChainManager_PointArm, 7 );
@@ -837,95 +836,40 @@ void _declspec(naked) HOOK_CEventDamage__AffectsPed()
837
836
}
838
837
}
839
838
840
- void ProcessStartFire (CFireSAInterface* fire)
841
- {
842
- if (m_pFireHandler)
843
- {
844
- DWORD dwID = ((DWORD)fire - 0xB71F80 /* CLASS_CFireManager */ ) / 40 ;
845
- CFire* pFire = pGameInterface->GetFireManager ()->GetFire (dwID);
846
- if (pFire)
847
- {
848
- m_pFireHandler (pFire);
849
- }
850
- }
851
- }
852
-
853
- CFireSAInterface* tempFire;
854
- DWORD dwStoredReturn;
855
-
856
- // CFire* StartFire(CVector vecLocation, float fFireSize=DEFAULT_FIRE_PARTICLE_SIZE, bool8 bExtinguishEnabled=TRUE, CEntity* pStartedFireEntity = NULL, UInt32
857
- // ArgBurnTime = FIRE_AVERAGE_BURNTIME, Int8 NumGenerationsAllowed = 100, Bool8 bReportFire = true);
858
- void _declspec (naked) HOOK_CFireManager__StartFire()
859
- {
860
- // replacement code
861
- _asm
862
- {
863
- mov edx, [esp]
864
- mov dwStoredReturn, edx
865
- mov edx, returnHere
866
- mov [esp], edx
867
-
868
- push ecx
869
- push ebp
870
- mov ebp, [esp+0x10 ]
871
-
872
- mov edx, HOOKPOS_CFireManager__StartFire
873
- add edx, 6
874
- jmp edx
875
-
876
- returnHere:
877
- mov tempFire, eax
878
-
879
- pushad
880
- }
881
-
882
- ProcessStartFire (tempFire);
883
-
884
- _asm
885
- {
886
- popad
887
-
888
- mov eax, tempFire
889
- mov edx, dwStoredReturn
890
- jmp edx
891
- }
892
- }
893
-
894
839
// CFire* StartFire(CEntity *pBurningEntity, CEntity *pStartedFireEntity, float fFireSize=DEFAULT_FIRE_PARTICLE_SIZE, bool8 bExtinguishEnabled=TRUE, UInt32
895
840
// ArgBurnTime = FIRE_AVERAGE_BURNTIME, Int8 NumGenerationsAllowed = 100);
896
- void _declspec (naked) HOOK_CFireManager__StartFire_()
841
+ static constexpr std::uintptr_t SKIP_CFireManager_StartFire = 0x53A0C5 ;
842
+ static constexpr std::uintptr_t RETURN_CFireManager_StartFire = 0x53A056 ;
843
+
844
+ static void _declspec (naked) HOOK_CFireManager__StartFire()
897
845
{
898
846
_asm
899
847
{
900
- // replacement code
901
- mov edx, [esp]
902
- mov dwStoredReturn, edx
903
- mov edx, returnHere
904
- mov [esp], edx
848
+ push esi
849
+ push edi
850
+ mov edi, [esp+0Ch]
905
851
906
- push esi
907
- push edi
908
- mov edi, [esp+ 0xC ]
852
+ mov eax, m_pFireHandler
853
+ test eax, eax
854
+ jz startFire
909
855
910
- //
911
- mov edx, HOOKPOS_CFireManager__StartFire_
912
- add edx, 6
913
- jmp edx
856
+ push ecx
914
857
915
- returnHere:
916
- mov tempFire, eax
858
+ push [esp+14h]
859
+ push edi
860
+ call m_pFireHandler
861
+ add esp, 8
917
862
918
- pushad
919
- }
863
+ pop ecx
920
864
921
- ProcessStartFire (tempFire);
865
+ test al, al
866
+ jz abortCreatingFire
922
867
923
- _asm
924
- {
925
- popad
868
+ startFire:
869
+ jmp RETURN_CFireManager_StartFire
926
870
927
- mov eax, tempFire
928
- jmp dwStoredReturn
871
+ abortCreatingFire:
872
+ jmp SKIP_CFireManager_StartFire
929
873
}
930
874
}
931
875
0 commit comments