Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CPedSAInterface* pBulletImpactInitiator;
- CEntitySAInterface* pBulletImpactVictim;
- CVector* pBulletImpactStartPosition;
- CVector* pBulletImpactEndPosition;
- void Aim() {
- struct cactor_info *localped = (struct cactor_info *)(UINT_PTR) * (uint32_t *)ACTOR_POINTER_SELF;
- if (localped) {
- GetClosestCrosshairTarget(&hd.last_ped, hd.WEAPON_SETTINGS[getScriptCurrentWeaponName(localped)].FOV);
- struct cactor_info *ped = (cactor_info*)hd.last_ped;
- if (ped) {
- if (ped == localped) return; //ped self
- CVector myPos;
- ULONG readed;
- myPos = *(CVector*)(0xB6F258 + 0xE0);
- CVector target_bone;
- switch (hd.WEAPON_SETTINGS[getScriptCurrentWeaponName(localped)].BODY_PART) {
- case eAimTar::HEAD:
- GetBonePosition((CPed*)ped, &target_bone, eBone::BONE_HEAD);
- break;
- case eAimTar::BODY:
- GetBonePosition((CPed*)ped, &target_bone, eBone::BONE_SPINE1);
- break;
- case eAimTar::AUTO:
- if (ped->state == 50) //driving
- GetBonePosition((CPed*)ped, &target_bone, eBone::BONE_HEAD);
- else
- GetBonePosition((CPed*)ped, &target_bone, eBone::BONE_SPINE1);
- break;
- }
- target_bone.fZ += 0.03219923;
- //so we have target bone, and now we need CEntitySAInteface...
- *(DWORD*)&pBulletImpactInitiator = (DWORD)localped;
- *(DWORD*)&pBulletImpactVictim = (DWORD)ped;
- pBulletImpactEndPosition = new CVector(target_bone);
- }
- }
- }
- #define HOOKPOS_CWeapon_DoBulletImpact 0x73B550
- DWORD MTAHookAddr;
- DWORD MTADelta;
- void _declspec(naked) BulletImpactHook() {
- _asm
- {
- mov eax, [esp + 4]
- mov pBulletImpactInitiator, eax
- mov eax, [esp + 8]
- mov pBulletImpactVictim, eax
- mov eax, [esp + 12]
- mov pBulletImpactStartPosition, eax
- mov eax, [esp + 16]
- mov pBulletImpactEndPosition, eax
- pushad
- }
- //some actions if need
- Aim();
- _asm
- {
- popad
- push 0xFFFFFFFF
- push 0x00848E50
- jmp MTAHookAddr
- }
- }
- void SetupBulletImpactHook() {
- //we need to change mta inline hook, namely - jmp delta
- if (*(BYTE*)(HOOKPOS_CWeapon_DoBulletImpact) == 0xE9) {
- MTADelta = *(DWORD*)(HOOKPOS_CWeapon_DoBulletImpact + 1);
- MTAHookAddr = *(DWORD*)(HOOKPOS_CWeapon_DoBulletImpact + 1) + HOOKPOS_CWeapon_DoBulletImpact; //save it for subsequent jump
- *(DWORD*)(HOOKPOS_CWeapon_DoBulletImpact + 1) = (DWORD)&BulletImpactHook - (HOOKPOS_CWeapon_DoBulletImpact + 5);
- }
- }
- void RemoveBulletImpactHook() {
- *(DWORD*)(HOOKPOS_CWeapon_DoBulletImpact + 1) = MTADelta;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement