2019-05-29 16:06:33 +00:00
|
|
|
#pragma once
|
|
|
|
|
2020-04-15 05:03:53 +00:00
|
|
|
#define DRIVEBYAUTOAIMING_MAXDIST (2.5f)
|
|
|
|
#define DOOMAUTOAIMING_MAXDIST (9000.0f)
|
|
|
|
|
2020-04-18 10:29:28 +00:00
|
|
|
enum eWeaponType
|
|
|
|
{
|
|
|
|
WEAPONTYPE_UNARMED,
|
|
|
|
WEAPONTYPE_BASEBALLBAT,
|
|
|
|
WEAPONTYPE_COLT45,
|
|
|
|
WEAPONTYPE_UZI,
|
|
|
|
WEAPONTYPE_SHOTGUN,
|
|
|
|
WEAPONTYPE_AK47,
|
|
|
|
WEAPONTYPE_M16,
|
|
|
|
WEAPONTYPE_SNIPERRIFLE,
|
|
|
|
WEAPONTYPE_ROCKETLAUNCHER,
|
|
|
|
WEAPONTYPE_FLAMETHROWER,
|
|
|
|
WEAPONTYPE_MOLOTOV,
|
|
|
|
WEAPONTYPE_GRENADE,
|
|
|
|
WEAPONTYPE_DETONATOR,
|
|
|
|
WEAPONTYPE_HELICANNON,
|
|
|
|
WEAPONTYPE_LAST_WEAPONTYPE,
|
|
|
|
WEAPONTYPE_ARMOUR,
|
|
|
|
WEAPONTYPE_RAMMEDBYCAR,
|
|
|
|
WEAPONTYPE_RUNOVERBYCAR,
|
|
|
|
WEAPONTYPE_EXPLOSION,
|
|
|
|
WEAPONTYPE_UZI_DRIVEBY,
|
|
|
|
WEAPONTYPE_DROWNING,
|
|
|
|
WEAPONTYPE_FALL,
|
|
|
|
WEAPONTYPE_UNIDENTIFIED,
|
|
|
|
|
|
|
|
WEAPONTYPE_TOTALWEAPONS = WEAPONTYPE_LAST_WEAPONTYPE,
|
|
|
|
WEAPONTYPE_TOTAL_INVENTORY_WEAPONS = 13,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum eWeaponFire {
|
|
|
|
WEAPON_FIRE_MELEE,
|
|
|
|
WEAPON_FIRE_INSTANT_HIT,
|
|
|
|
WEAPON_FIRE_PROJECTILE,
|
|
|
|
WEAPON_FIRE_AREA_EFFECT,
|
|
|
|
WEAPON_FIRE_USE
|
|
|
|
};
|
|
|
|
|
|
|
|
// Taken from MTA SA, seems it's unchanged
|
|
|
|
enum eWeaponState
|
|
|
|
{
|
|
|
|
WEAPONSTATE_READY,
|
|
|
|
WEAPONSTATE_FIRING,
|
|
|
|
WEAPONSTATE_RELOADING,
|
|
|
|
WEAPONSTATE_OUT_OF_AMMO,
|
|
|
|
WEAPONSTATE_MELEE_MADECONTACT
|
|
|
|
};
|
2019-06-20 11:22:44 +00:00
|
|
|
|
2019-07-23 14:39:30 +00:00
|
|
|
class CEntity;
|
2020-04-15 05:03:53 +00:00
|
|
|
class CPhysical;
|
2019-07-23 14:39:30 +00:00
|
|
|
class CAutomobile;
|
2020-04-15 05:03:53 +00:00
|
|
|
struct CColPoint;
|
|
|
|
class CWeaponInfo;
|
2019-07-23 14:39:30 +00:00
|
|
|
|
2019-05-29 16:06:33 +00:00
|
|
|
class CWeapon
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
eWeaponType m_eWeaponType;
|
2019-06-20 11:22:44 +00:00
|
|
|
eWeaponState m_eWeaponState;
|
2019-06-30 21:50:40 +00:00
|
|
|
uint32 m_nAmmoInClip;
|
|
|
|
uint32 m_nAmmoTotal;
|
2019-07-01 19:46:44 +00:00
|
|
|
uint32 m_nTimer;
|
2019-05-29 16:06:33 +00:00
|
|
|
bool m_bAddRotOffset;
|
2019-06-20 11:22:44 +00:00
|
|
|
|
2019-06-30 21:50:40 +00:00
|
|
|
CWeapon() {
|
|
|
|
m_bAddRotOffset = false;
|
|
|
|
}
|
2020-04-15 05:03:53 +00:00
|
|
|
|
|
|
|
CWeaponInfo *GetInfo();
|
2019-06-30 21:50:40 +00:00
|
|
|
|
2020-04-15 05:03:53 +00:00
|
|
|
static void InitialiseWeapons(void);
|
|
|
|
static void ShutdownWeapons (void);
|
|
|
|
static void UpdateWeapons (void);
|
|
|
|
|
|
|
|
void Initialise(eWeaponType type, int32 ammo);
|
|
|
|
|
|
|
|
bool Fire (CEntity *shooter, CVector *fireSource);
|
|
|
|
bool FireFromCar (CAutomobile *shooter, bool left);
|
|
|
|
bool FireMelee (CEntity *shooter, CVector &fireSource);
|
|
|
|
bool FireInstantHit(CEntity *shooter, CVector *fireSource);
|
|
|
|
|
|
|
|
void AddGunshell (CEntity *shooter, CVector const &source, CVector2D const &direction, float size);
|
|
|
|
void DoBulletImpact(CEntity *shooter, CEntity *victim, CVector *source, CVector *target, CColPoint *point, CVector2D ahead);
|
|
|
|
|
|
|
|
bool FireShotgun (CEntity *shooter, CVector *fireSource);
|
|
|
|
bool FireProjectile(CEntity *shooter, CVector *fireSource, float power);
|
|
|
|
|
|
|
|
static void GenerateFlameThrowerParticles(CVector pos, CVector dir);
|
|
|
|
|
|
|
|
bool FireAreaEffect (CEntity *shooter, CVector *fireSource);
|
|
|
|
bool FireSniper (CEntity *shooter);
|
|
|
|
bool FireM16_1stPerson (CEntity *shooter);
|
|
|
|
bool FireInstantHitFromCar(CAutomobile *shooter, bool left);
|
|
|
|
|
|
|
|
static void DoDoomAiming (CEntity *shooter, CVector *source, CVector *target);
|
|
|
|
static void DoTankDoomAiming (CEntity *shooter, CEntity *driver, CVector *source, CVector *target);
|
|
|
|
static void DoDriveByAutoAiming(CEntity *shooter, CVector *source, CVector *target);
|
|
|
|
|
2019-06-30 21:50:40 +00:00
|
|
|
void Reload(void);
|
2020-04-15 05:03:53 +00:00
|
|
|
void Update(int32 audioEntity);
|
|
|
|
bool IsTypeMelee (void);
|
2019-07-15 12:11:40 +00:00
|
|
|
bool IsType2Handed(void);
|
2020-04-15 05:03:53 +00:00
|
|
|
|
|
|
|
static void MakePedsJumpAtShot(CPhysical *shooter, CVector *source, CVector *target);
|
|
|
|
|
|
|
|
bool HitsGround(CEntity *holder, CVector *fireSource, CEntity *aimingTo);
|
|
|
|
static void BlowUpExplosiveThings(CEntity *thing);
|
2020-01-07 14:23:09 +00:00
|
|
|
bool HasWeaponAmmoToBeUsed(void);
|
2020-04-15 05:03:53 +00:00
|
|
|
|
|
|
|
static bool ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects);
|
2019-05-29 16:06:33 +00:00
|
|
|
};
|
2020-04-15 05:03:53 +00:00
|
|
|
VALIDATE_SIZE(CWeapon, 0x18);
|
2020-03-31 22:58:40 +00:00
|
|
|
|
2020-04-15 05:03:53 +00:00
|
|
|
void FireOneInstantHitRound(CVector *source, CVector *target, int32 damage);
|