11
11
12
12
#pragma once
13
13
14
- #define FUNC_CWeapon_Shutdown 0x73A380
15
- #define FUNC_CWeapon_CheckForShootingVehicleOccupant 0x73f480
16
- #define FUNC_CWeapon_Initialize 0x73b4a0
17
- #define FUNC_CWeapon_Update 0x73db40
18
- #define FUNC_CWeapon_Fire 0x742300
19
- #define FUNC_CWeapon_AddGunshell 0x73a3e0
20
- #define FUNC_CWeapon_DoBulletImpact 0x73b550
21
- #define FUNC_CWeapon_GenerateDamageEvent 0x73a530
22
- #define FUNC_CWeapon_FireInstantHit 0x73FB10
23
- #define FUNC_CBirds_CheckForHit 0x712E40
24
- #define FUNC_CShadows_CheckForHit 0x707550
14
+ #define FUNC_CWeapon_CheckForShootingVehicleOccupant 0x73f480
15
+ #define FUNC_CBirds_CheckForHit 0x712E40
16
+ #define FUNC_CShadows_CheckForHit 0x707550
25
17
26
18
class CWeaponSAInterface
27
19
{
@@ -31,64 +23,111 @@ class CWeaponSAInterface
31
23
std::uint32_t m_ammoInClip{0 };
32
24
std::uint32_t m_ammoTotal{0 };
33
25
std::uint32_t m_timeToNextShootInMS{0 };
34
- bool m_firstPersonEnabled{false }; // Unused
35
- bool m_dontPlaceInHand{false }; // Used in case of goggles
36
- FxSystem_c* m_fxSystem{nullptr }; // Fx system (flamethrower, spraycan, extinguisher)
37
-
38
- void Shutdown () { ((void (__thiscall*)(CWeaponSAInterface*))FUNC_CWeapon_Shutdown)(this ); }
39
- void Initialize (const eWeaponType& weaponType, std::uint32_t ammo, CPed* ped) { ((void (__thiscall*)(CWeaponSAInterface*, eWeaponType, std::uint32_t , CPedSAInterface*))FUNC_CWeapon_Initialize)(this , weaponType, ammo, ped ? ped->GetPedInterface () : nullptr ); }
40
- void Update (CPed* ped) { ((void (__thiscall*)(CWeaponSAInterface*, CPedSAInterface*))FUNC_CWeapon_Update)(this , ped ? ped->GetPedInterface () : nullptr ); }
41
- void AddGunshell (CEntity* firingEntity, const CVector& vecOrigin, const CVector2D& vecDirection, float size) { ((void (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, const CVector&, const CVector2D&, float ))FUNC_CWeapon_AddGunshell)(this , firingEntity ? firingEntity->GetInterface () : nullptr , vecOrigin, vecDirection, size); }
42
- void DoBulletImpact (CEntity* firingEntity, CEntitySAInterface* hitEntityInterface, const CVector& vecOrigin, const CVector& vecTarget, const CColPoint& colPoint, int incrementalHit) { ((void (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, CEntitySAInterface*, const CVector&, const CVector&, const CColPoint&, int ))FUNC_CWeapon_DoBulletImpact)(this , firingEntity ? firingEntity->GetInterface () : nullptr , hitEntityInterface, vecOrigin, vecTarget, colPoint, incrementalHit); }
43
- bool Fire (CEntity* firingEntity, CVector* vecOrigin, CVector* vecEffectPos, CEntity* targetEntity, CVector* vecTarget, CVector* vecAlt) { return ((bool (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, CVector*, CVector*, CEntitySAInterface*, CVector*, CVector*))FUNC_CWeapon_Fire)(this , firingEntity ? firingEntity->GetInterface () : nullptr , vecOrigin, vecEffectPos, targetEntity ? targetEntity->GetInterface () : nullptr , vecTarget, vecAlt); }
44
- bool FireInstantHit (CEntity* firingEntity, CVector* vecOrigin, CVector* vecMuzzle, CEntity* targetEntity, CVector* vecTarget, CVector* vecForDriveby, bool crossHairGun, bool createGunFx) { return ((bool (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, CVector*, CVector*, CEntitySAInterface*, CVector*, CVector*, bool , bool ))FUNC_CWeapon_FireInstantHit)(this , firingEntity ? firingEntity->GetInterface () : nullptr , vecOrigin, vecMuzzle, targetEntity ? targetEntity->GetInterface () : nullptr , vecTarget, vecForDriveby, crossHairGun, createGunFx); }
45
- bool GenerateDamageEvent (CPed* ped, CEntity* responsible, eWeaponType weaponType, int damagePerHit, ePedPieceTypes hitZone, std::uint8_t dir) { return ((bool (__thiscall*)(CWeaponSAInterface*, CPedSAInterface*, CEntitySAInterface*, eWeaponType, int , ePedPieceTypes, std::uint8_t ))FUNC_CWeapon_GenerateDamageEvent)(this , ped ? ped->GetPedInterface () : nullptr , responsible ? responsible->GetInterface () : nullptr , weaponType, damagePerHit, hitZone, dir); }
26
+ bool m_firstPersonEnabled{false }; // Unused
27
+ bool m_dontPlaceInHand{false }; // Used in case of goggles
28
+ FxSystem_c* m_fxSystem{nullptr }; // Fx system (flamethrower, spraycan, extinguisher)
29
+
30
+ void Shutdown () { ((void (__thiscall*)(CWeaponSAInterface*))0x73A380 )(this ); }
31
+ void Initialize (eWeaponType weaponType, std::uint32_t ammo, CPedSAInterface* ped)
32
+ {
33
+ ((void (__thiscall*)(CWeaponSAInterface*, eWeaponType, std::uint32_t , CPedSAInterface*))0x73B4A0 )(this , weaponType, ammo, ped);
34
+ }
35
+ void AddGunshell (CEntitySAInterface* firingEntity, const CVector& vecOrigin, const CVector2D& vecDirection, float size)
36
+ {
37
+ ((void (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, const CVector&, const CVector2D&, float ))0x73A3E0 )(this , firingEntity, vecOrigin,
38
+ vecDirection, size);
39
+ }
40
+ void DoBulletImpact (CEntitySAInterface* firingEntity, CEntitySAInterface* hitEntityInterface, const CVector& vecOrigin, const CVector& vecTarget,
41
+ const CColPointSAInterface& colPoint, int incrementalHit)
42
+ {
43
+ ((void (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, CEntitySAInterface*, const CVector&, const CVector&, const CColPointSAInterface&,
44
+ int ))0x73B550 )(this , firingEntity, hitEntityInterface, vecOrigin, vecTarget, colPoint, incrementalHit);
45
+ }
46
+ bool Fire (CEntitySAInterface* firingEntity, CVector* vecOrigin, CVector* vecEffectPos, CEntitySAInterface* targetEntity, CVector* vecTarget,
47
+ CVector* vecAlt)
48
+ {
49
+ return ((bool (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, CVector*, CVector*, CEntitySAInterface*, CVector*, CVector*))0x742300 )(
50
+ this , firingEntity, vecOrigin, vecEffectPos, targetEntity, vecTarget, vecAlt);
51
+ }
52
+ bool FireInstantHit (CEntitySAInterface* firingEntity, CVector* vecOrigin, CVector* vecMuzzle, CEntitySAInterface* targetEntity, CVector* vecTarget,
53
+ CVector* vecForDriveby, bool crossHairGun, bool createGunFx)
54
+ {
55
+ return ((bool (__thiscall*)(CWeaponSAInterface*, CEntitySAInterface*, CVector*, CVector*, CEntitySAInterface*, CVector*, CVector*, bool , bool ))0x73FB10 )(
56
+ this , firingEntity, vecOrigin, vecMuzzle, targetEntity, vecTarget, vecForDriveby, crossHairGun, createGunFx);
57
+ }
58
+ bool GenerateDamageEvent (CPedSAInterface* ped, CEntitySAInterface* responsible, eWeaponType weaponType, int damagePerHit, ePedPieceTypes hitZone,
59
+ std::uint8_t dir)
60
+ {
61
+ return ((bool (__thiscall*)(CWeaponSAInterface*, CPedSAInterface*, CEntitySAInterface*, eWeaponType, int , ePedPieceTypes, std::uint8_t ))0x73A530 )(
62
+ this , ped, responsible, weaponType, damagePerHit, hitZone, dir);
63
+ }
46
64
};
47
65
static_assert (sizeof (CWeaponSAInterface) == 0x1C, "Invalid size for CWeaponSAInterface");
48
66
49
67
class CWeaponSA : public CWeapon
50
68
{
51
69
public:
52
- CWeaponSA (CWeaponSAInterface* weaponInterface, CPed* owner, eWeaponSlot weaponSlot) : m_interface(weaponInterface), m_owner(owner), m_weaponSlot(weaponSlot) {}
70
+ CWeaponSA (CWeaponSAInterface* weaponInterface, CPed* owner, eWeaponSlot weaponSlot) : m_interface(weaponInterface), m_owner(owner), m_weaponSlot(weaponSlot)
71
+ {
72
+ }
53
73
CWeaponSAInterface* GetInterface () { return m_interface; }
54
74
CWeaponSAInterface* GetInterface () const { return m_interface; }
55
75
56
76
eWeaponType GetType () const override { return m_interface ? m_interface->m_eWeaponType : eWeaponType::WEAPONTYPE_UNIDENTIFIED; }
57
- void SetType (const eWeaponType& type) override { if (m_interface) m_interface->m_eWeaponType = type; }
77
+ void SetType (eWeaponType type) override
78
+ {
79
+ if (m_interface)
80
+ m_interface->m_eWeaponType = type;
81
+ }
58
82
59
83
eWeaponState GetState () const override { return m_interface ? m_interface->m_eState : eWeaponState::WEAPONSTATE_READY; }
60
- void SetState (const eWeaponState& state) override { if (m_interface) m_interface->m_eState = state; }
84
+ void SetState (eWeaponState state) override
85
+ {
86
+ if (m_interface)
87
+ m_interface->m_eState = state;
88
+ }
61
89
62
90
std::uint32_t GetAmmoInClip () const override { return m_interface ? m_interface->m_ammoInClip : 0 ; }
63
- void SetAmmoInClip (std::uint32_t ammoInClip) override { if (m_interface) m_interface->m_ammoInClip = ammoInClip; }
91
+ void SetAmmoInClip (std::uint32_t ammoInClip) override
92
+ {
93
+ if (m_interface)
94
+ m_interface->m_ammoInClip = ammoInClip;
95
+ }
64
96
65
97
std::uint32_t GetAmmoTotal () const override { return m_interface ? m_interface->m_ammoTotal : 0 ; }
66
- void SetAmmoTotal (std::uint32_t ammoTotal) override { if (m_interface) m_interface->m_ammoTotal = ammoTotal; }
98
+ void SetAmmoTotal (std::uint32_t ammoTotal) override
99
+ {
100
+ if (m_interface)
101
+ m_interface->m_ammoTotal = ammoTotal;
102
+ }
67
103
68
- CPed* GetPed () const noexcept override { return m_owner; }
69
- eWeaponSlot GetSlot () const noexcept override { return m_weaponSlot; }
70
- CWeaponInfo* GetInfo (const eWeaponSkill& skill) const override ;
104
+ CPed* GetPed () const noexcept override { return m_owner; }
105
+ eWeaponSlot GetSlot () const noexcept override { return m_weaponSlot; }
106
+ CWeaponInfo* GetInfo (eWeaponSkill skill) const override ;
71
107
72
108
void SetAsCurrentWeapon () override ;
73
109
74
110
void Destroy () override ;
75
111
void Remove () override ;
76
- void Initialize (const eWeaponType& type, std::uint32_t ammo, CPed* ped) override ;
77
- void Update (CPed* ped) override ;
112
+ void Initialize (eWeaponType type, std::uint32_t ammo, CPed* ped) override ;
78
113
79
114
void AddGunshell (CEntity* firingEntity, const CVector& vecOrigin, const CVector2D& vecDirection, float size) const override ;
80
- void DoBulletImpact (CEntity* firingEntity, CEntitySAInterface* hitEntityInterface, const CVector& vecOrigin, const CVector& vecTarget, const CColPoint& colPoint, int incrementalHit) const override ;
115
+ void DoBulletImpact (CEntity* firingEntity, CEntitySAInterface* hitEntityInterface, const CVector& vecOrigin, const CVector& vecTarget,
116
+ const CColPointSAInterface& colPoint, int incrementalHit) const override ;
81
117
bool Fire (CEntity* firingEntity, CVector* vecOrigin, CVector* vecEffectPos, CEntity* targetEntity, CVector* vecTarget, CVector* vecAlt) override ;
82
- bool FireInstantHit (CEntity* firingEntity, const CVector* vecOrigin, const CVector* vecMuzzle, CEntity* targetEntity, const CVector* vecTarget, const CVector* vecForDriveby, bool crossHairGun, bool createGunFx) override ;
118
+ bool FireInstantHit (CEntity* firingEntity, CVector* vecOrigin, CVector* vecMuzzle, CEntity* targetEntity, CVector* vecTarget, CVector* vecForDriveby,
119
+ bool crossHairGun, bool createGunFx) override ;
83
120
bool FireBullet (CEntity* firingEntity, const CVector& vecOrigin, const CVector& vecTarget) override ;
84
121
85
- bool GenerateDamageEvent (CPed* ped, CEntity* responsible, eWeaponType weaponType, int damagePerHit, ePedPieceTypes hitZone, std::uint8_t dir) const override ;
122
+ bool GenerateDamageEvent (CPed* ped, CEntity* responsible, eWeaponType weaponType, int damagePerHit, ePedPieceTypes hitZone,
123
+ std::uint8_t dir) const override ;
86
124
87
- bool ProcessLineOfSight (const CVector* vecStart, const CVector* vecEnd, CColPoint** colCollision, CEntity** collisionEntity, const SLineOfSightFlags& flags, SLineOfSightBuildingResult* buildingResult, const eWeaponType& weaponType, CEntitySAInterface** entity) override ;
125
+ bool ProcessLineOfSight (const CVector& vecStart, const CVector& vecEnd, CColPoint** colCollision, CEntity*& collisionEntity, const SLineOfSightFlags& flags,
126
+ SLineOfSightBuildingResult* buildingResult, eWeaponType weaponType, CEntitySAInterface** entity) override ;
88
127
89
- int GetWeaponReloadTime (CWeaponStat* weaponStat) const override ;
128
+ int GetWeaponReloadTime (CWeaponStat* weaponStat) const override ;
90
129
static int GetWeaponFireTime (CWeaponStat* weaponStat);
91
-
130
+
92
131
private:
93
132
CWeaponSAInterface* m_interface{nullptr };
94
133
CPed* m_owner{nullptr };
0 commit comments