mirror of
https://github.com/dashr9230/SA-MP.git
synced 2024-12-22 14:37:29 +08:00
[saco] implement some hooks
This commit is contained in:
parent
28d6559378
commit
72ff60fd65
Binary file not shown.
@ -11,10 +11,15 @@ extern DWORD dwGraphicsLoop; // Used for the external dll game loop.
|
|||||||
|
|
||||||
#define NUDE void _declspec(naked)
|
#define NUDE void _declspec(naked)
|
||||||
|
|
||||||
|
PED_TYPE *_pPlayer;
|
||||||
|
|
||||||
BYTE byteSavedCameraMode;
|
BYTE byteSavedCameraMode;
|
||||||
|
DWORD dwCurPlayerActor=0;
|
||||||
BYTE *pbyteCameraMode = (BYTE *)0xB6F1A8;
|
BYTE *pbyteCameraMode = (BYTE *)0xB6F1A8;
|
||||||
BYTE *pbyteCurrentPlayer = (BYTE *)0xB7CD74;
|
BYTE *pbyteCurrentPlayer = (BYTE *)0xB7CD74;
|
||||||
|
|
||||||
|
PED_TYPE pedCrimeReportTemp{}; // pay attention! used in 0x100A1790 ; void __thiscall CGame::PlayCrimeReport as pedCrimeReportTemp 0x10150D00
|
||||||
|
|
||||||
int iRadarColor1=0;
|
int iRadarColor1=0;
|
||||||
|
|
||||||
float fFarClip=1400.0f;
|
float fFarClip=1400.0f;
|
||||||
@ -177,23 +182,57 @@ NUDE CHud__DrawCrossHairs_Hook()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CCamera__Process_Hook() {}
|
NUDE CCamera__Process_Hook() {}
|
||||||
NUDE CGame__Process_Hook() {}
|
|
||||||
NUDE CPed_Render_Hook() {}
|
|
||||||
NUDE CAnimManager__AddAnimation_Hook() {}
|
|
||||||
NUDE CAnimManager__BlendAnimation_Hook() {}
|
|
||||||
NUDE CPlayerPed_ProcessControl_Hook() {}
|
|
||||||
NUDE CCivillianPed__ProcessControl_Hook() {}
|
|
||||||
NUDE TaskUseGun_Hook() {}
|
|
||||||
NUDE WeaponRender__GetWeaponSkill_Hook() {}
|
|
||||||
NUDE CWorld__ProcessAttachedEntities_Hook() {}
|
|
||||||
NUDE CWorld__ProcessPedsAfterPreRender_Hook() {}
|
|
||||||
NUDE AllVehicles_ProcessControl_Hook() {}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CGame__Process_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CPed_Render_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CAnimManager__AddAnimation_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CAnimManager__BlendAnimation_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CPlayerPed_ProcessControl_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CCivillianPed__ProcessControl_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE TaskUseGun_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE WeaponRender__GetWeaponSkill_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CWorld__ProcessAttachedEntities_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE CWorld__ProcessPedsAfterPreRender_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
NUDE AllVehicles_ProcessControl_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
// fix horn processing
|
// fix horn processing
|
||||||
|
|
||||||
VEHICLE_TYPE *_pHornVehicle;
|
VEHICLE_TYPE *_pHornVehicle;
|
||||||
int _iHasSetHornHookFix = 0;
|
int _iHasSetHornHookFix = 0;
|
||||||
BYTE _byteSavedControlFlags = 0;
|
BYTE _byteSavedControlFlags = 0;
|
||||||
@ -235,7 +274,13 @@ NUDE VehicleHorn_Hook()
|
|||||||
|
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE ZoneOverlay_Hook() {}
|
NUDE ZoneOverlay_Hook()
|
||||||
|
{
|
||||||
|
_asm pushad
|
||||||
|
if (pNetGame && pNetGame->GetGangZonePool()) pNetGame->GetGangZonePool()->Draw();
|
||||||
|
_asm popad
|
||||||
|
_asm ret
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
@ -332,45 +377,289 @@ NUDE CGameShutdownHook()
|
|||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE PedDamage_Hook() {}
|
NUDE PedDamage_Hook() {}
|
||||||
NUDE AnimCrashFixHook() {}
|
|
||||||
NUDE PoliceScannerAudio_FindPlayerPed_Hook() {}
|
//-----------------------------------------------------------
|
||||||
NUDE CProjectile_Update_Hook() {}
|
|
||||||
|
NUDE AnimCrashFixHook()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
push edi
|
||||||
|
mov edi, [esp+8] ;// arg0
|
||||||
|
test edi, edi
|
||||||
|
jz exitFn
|
||||||
|
mov eax, 0x4D41C5 ;// CAnimManager::UncompressAnimation
|
||||||
|
jmp eax
|
||||||
|
exitFn:
|
||||||
|
pop edi
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// used for correct report message using 100A1790 ; void __thiscall CGame::PlayCrimeReport
|
||||||
|
|
||||||
|
NUDE PoliceScannerAudio_FindPlayerPed_Hook()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov eax, offset pedCrimeReportTemp
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// delete satchel projectile if the owner is dead (not sure if this code will work properly)
|
||||||
|
|
||||||
|
DWORD dwProjectileObject = 0;
|
||||||
|
DWORD dwProjectileInfo = 0;
|
||||||
|
NUDE CProjectile_Update_Hook()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov dwProjectileObject, esi
|
||||||
|
mov dwProjectileInfo, ebx
|
||||||
|
|
||||||
|
pushad
|
||||||
|
|
||||||
|
mov eax, dwProjectileInfo
|
||||||
|
mov ecx, [eax+4] ;// dwProjectileInfo->pOwner
|
||||||
|
test ecx, ecx //
|
||||||
|
jnz dont_delete // if the owner == nullptr, delete the projectile
|
||||||
|
|
||||||
|
pushad
|
||||||
|
|
||||||
|
// delete projectile CProjectileInfo::RemoveIfThisIsAProjectile
|
||||||
|
push dwProjectileObject
|
||||||
|
mov eax, 0x739A40
|
||||||
|
call eax
|
||||||
|
|
||||||
|
// correct stack
|
||||||
|
add esp, 4
|
||||||
|
|
||||||
|
popad
|
||||||
|
|
||||||
|
mov dl, 0x0FF
|
||||||
|
jmp end_hook
|
||||||
|
|
||||||
|
dont_delete:
|
||||||
|
popad
|
||||||
|
|
||||||
|
// original code
|
||||||
|
mov ecx, [ebx+4]
|
||||||
|
mov dl, [ecx+36h]
|
||||||
|
|
||||||
|
end_hook:
|
||||||
|
push 0x738F40
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
NUDE CWeapon__Satchel__Activate_Hook() {}
|
NUDE CWeapon__Satchel__Activate_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE GetText_Hook() {}
|
NUDE GetText_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CCustomCarPlateMgr__CreatePlateTexture__RwRasterCreate_Hook() {}
|
NUDE CCustomCarPlateMgr__CreatePlateTexture__RwRasterCreate_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE RwRasterDestroy_Hook() {}
|
NUDE RwRasterDestroy_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CVehicle__Render_Hook() {}
|
NUDE CVehicle__Render_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CObject__Render_Hook() {}
|
NUDE CObject__Render_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CRadar__DrawMap__FindPlayerSpeed_Hook() {}
|
NUDE CRadar__DrawMap__FindPlayerSpeed_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CFileLoader__LoadObjectInstance_Hook() {}
|
NUDE CFileLoader__LoadObjectInstance_Hook() {}
|
||||||
NUDE CEscalator__Update_Hook() {}
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// 0x858BA4 - `float g_blendDist_ = 20.0f`
|
||||||
|
//
|
||||||
|
// here two variables 0x858BA4 0x858F84 were changed, the second was needlessly overwritten
|
||||||
|
// and both were stored before the change and restored after the change
|
||||||
|
// since their value didn't change anywhere in the code, I simplified the code
|
||||||
|
|
||||||
|
NUDE CEscalator__Update_Hook()
|
||||||
|
{
|
||||||
|
__asm pushad
|
||||||
|
|
||||||
|
UnFuck(0x858BA4, 4);
|
||||||
|
*(float*)0x858BA4 = 40.0f;
|
||||||
|
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov eax, 0x717D30 // CEscalator::Update
|
||||||
|
call eax
|
||||||
|
}
|
||||||
|
|
||||||
|
*(float*)0x858BA4 = 20.0f; // restore original (GTASA) value
|
||||||
|
|
||||||
|
__asm popad
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CObject__CreateRwObject_Hook() {}
|
NUDE CObject__CreateRwObject_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CEntity__DeleteRwObject_Hook() {}
|
NUDE CEntity__DeleteRwObject_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CAutomobile__BreakTowLink_Hook() {}
|
NUDE CAutomobile__BreakTowLink_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CWorld__ProcessAttachedEntities__PositionAttachedEntity_Hook() {}
|
NUDE CWorld__ProcessAttachedEntities__PositionAttachedEntity_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CRenderer__RenderEverythingBarRoads_Hook() {}
|
NUDE CRenderer__RenderEverythingBarRoads_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CRenderer__RenderFadingInEntities_Hook() {}
|
NUDE CRenderer__RenderFadingInEntities_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CRenderer__AddEntityToRenderList_Hook() {}
|
NUDE CRenderer__AddEntityToRenderList_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CEntity__RenderEffects__RenderRoadsignAtomic_Hook() {}
|
NUDE CEntity__RenderEffects__RenderRoadsignAtomic_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CEventDamage__AffectsPed_Hook() {}
|
NUDE CEventDamage__AffectsPed_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CCollision__BuildCacheOfCameraCollision_Hook() {}
|
NUDE CCollision__BuildCacheOfCameraCollision_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CCollision__CheckCameraCollisionVehicles_Hook() {}
|
NUDE CCollision__CheckCameraCollisionVehicles_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CWorld__CameraToIgnoreThisObject_Hook() {}
|
NUDE CWorld__CameraToIgnoreThisObject_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CAutomobile__ProcessEntityCollision_Hook() {}
|
NUDE CAutomobile__ProcessEntityCollision_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CBike__ProcessEntityCollision_Hook() {}
|
NUDE CBike__ProcessEntityCollision_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CMonsterTruck__ProcessEntityCollision_Hook() {}
|
NUDE CMonsterTruck__ProcessEntityCollision_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CPhysical__ProcessEntityCollision_Hook() {}
|
NUDE CPhysical__ProcessEntityCollision_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CVehicle__UsesSiren_Hook() {}
|
NUDE CVehicle__UsesSiren_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CAEWeatherAudioEntity__UpdateParameters_Hook() {}
|
NUDE CAEWeatherAudioEntity__UpdateParameters_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CWorld__ProcessVerticalLine_Hook() {}
|
NUDE CWorld__ProcessVerticalLine_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CStreaming__RequestModel_Hook() {}
|
NUDE CStreaming__RequestModel_Hook() {}
|
||||||
NUDE CWeapon__FireInstantHit_Hook() {}
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
// todo: implement fully
|
||||||
|
ENTITY_TYPE* pFiringEntity = 0;
|
||||||
|
VECTOR* pPosn = 0;
|
||||||
|
VECTOR* pEffectPosn = 0;
|
||||||
|
ENTITY_TYPE* pTargetEntity = 0;
|
||||||
|
VECTOR* pTarget = 0;
|
||||||
|
VECTOR* pPosnForDriveBy = 0;
|
||||||
|
BYTE byteUnknown8 = 0;
|
||||||
|
BYTE byteAdditionalEffects = 0;
|
||||||
|
|
||||||
|
NUDE CWeapon__FireInstantHit_Hook()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov eax, [esp+0x4]
|
||||||
|
mov pFiringEntity, eax
|
||||||
|
mov eax, [esp+0x8]
|
||||||
|
mov pPosn, eax
|
||||||
|
mov eax, [esp+0xC]
|
||||||
|
mov pEffectPosn, eax
|
||||||
|
mov eax, [esp+0x10]
|
||||||
|
mov pTargetEntity, eax
|
||||||
|
mov eax, [esp+0x14]
|
||||||
|
mov pTarget, eax
|
||||||
|
mov eax, [esp+0x18]
|
||||||
|
mov pPosnForDriveBy, eax
|
||||||
|
mov eax, [esp+0x1C]
|
||||||
|
mov byteUnknown8, eax
|
||||||
|
mov eax, [esp+0x20]
|
||||||
|
mov byteAdditionalEffects, eax
|
||||||
|
|
||||||
|
pushad
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pFiringEntity != (ENTITY_TYPE*)GamePool_FindPlayerPed())
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
popad
|
||||||
|
retn 0x20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo: implement sub_10013C90
|
||||||
|
/*if ( pNetGame && pNetGame->m_pPools->pPlayerPool )
|
||||||
|
sub_10013C90();*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CWorld__ProcessLineOfSight_Hook() {}
|
NUDE CWorld__ProcessLineOfSight_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CWeapon__FireSniper_Hook() {}
|
NUDE CWeapon__FireSniper_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CBulletInfo__AddBullet_Hook() {}
|
NUDE CBulletInfo__AddBullet_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
NUDE CVehicle__InflictDamage_Hook() {}
|
NUDE CVehicle__InflictDamage_Hook() {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// fps-related hook
|
||||||
NUDE CTimer__GetCurrentTimeInCycles_Hook()
|
NUDE CTimer__GetCurrentTimeInCycles_Hook()
|
||||||
{
|
{
|
||||||
Sleep(1);
|
Sleep(1);
|
||||||
|
@ -49,6 +49,7 @@ CHelpDialog *pHelpDialog=NULL;
|
|||||||
CUnkClass8 *pUnkClass8=NULL;
|
CUnkClass8 *pUnkClass8=NULL;
|
||||||
|
|
||||||
bool bShowDebugLabels = false;
|
bool bShowDebugLabels = false;
|
||||||
|
bool bHudScaleFix = false;
|
||||||
|
|
||||||
CGame *pGame=0;
|
CGame *pGame=0;
|
||||||
DWORD dwGraphicsLoop=0;
|
DWORD dwGraphicsLoop=0;
|
||||||
|
Loading…
Reference in New Issue
Block a user