fix(CAmmoInfo & CWeaponInfo): Split into proper classes. (#38)

This commit is contained in:
Reece Watson 2022-09-17 09:22:36 -04:00 committed by GitHub
parent 87dadd8f5d
commit 384102ee2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 469 additions and 268 deletions

92
enums/eExplosionTag.hpp Normal file
View File

@ -0,0 +1,92 @@
#pragma once
#include <cstdint>
enum eExplosionTag : int32_t
{
DONTCARE = -1,
GRENADE,
GRENADELAUNCHER,
STICKYBOMB,
MOLOTOV,
ROCKET,
TANKSHELL,
HI_OCTANE,
CAR,
PLANE,
PETROL_PUMP,
BIKE,
DIR_STEAM,
DIR_FLAME,
DIR_WATER_HYDRANT,
DIR_GAS_CANISTER,
BOAT,
SHIP_DESTROY,
TRUCK,
BULLET,
SMOKEGRENADELAUNCHER,
SMOKEGRENADE,
BZGAS,
FLARE,
GAS_CANISTER,
EXTINGUISHER,
_0x988620B8,
EXP_TAG_TRAIN,
EXP_TAG_BARREL,
EXP_TAG_PROPANE,
EXP_TAG_BLIMP,
EXP_TAG_DIR_FLAME_EXPLODE,
EXP_TAG_TANKER,
PLANE_ROCKET,
EXP_TAG_VEHICLE_BULLET,
EXP_TAG_GAS_TANK,
EXP_TAG_BIRD_CRAP,
EXP_TAG_RAILGUN,
EXP_TAG_BLIMP2,
EXP_TAG_FIREWORK,
EXP_TAG_SNOWBALL,
EXP_TAG_PROXMINE,
EXP_TAG_VALKYRIE_CANNON,
EXP_TAG_AIR_DEFENCE,
EXP_TAG_PIPEBOMB,
EXP_TAG_VEHICLEMINE,
EXP_TAG_EXPLOSIVEAMMO,
EXP_TAG_APCSHELL,
EXP_TAG_BOMB_CLUSTER,
EXP_TAG_BOMB_GAS,
EXP_TAG_BOMB_INCENDIARY,
EXP_TAG_BOMB_STANDARD,
EXP_TAG_TORPEDO,
EXP_TAG_TORPEDO_UNDERWATER,
EXP_TAG_BOMBUSHKA_CANNON,
EXP_TAG_BOMB_CLUSTER_SECONDARY,
EXP_TAG_HUNTER_BARRAGE,
EXP_TAG_HUNTER_CANNON,
EXP_TAG_ROGUE_CANNON,
EXP_TAG_MINE_UNDERWATER,
EXP_TAG_ORBITAL_CANNON,
EXP_TAG_BOMB_STANDARD_WIDE,
EXP_TAG_EXPLOSIVEAMMO_SHOTGUN,
EXP_TAG_OPPRESSOR2_CANNON,
EXP_TAG_MORTAR_KINETIC,
EXP_TAG_VEHICLEMINE_KINETIC,
EXP_TAG_VEHICLEMINE_EMP,
EXP_TAG_VEHICLEMINE_SPIKE,
EXP_TAG_VEHICLEMINE_SLICK,
EXP_TAG_VEHICLEMINE_TAR,
EXP_TAG_SCRIPT_DRONE,
EXP_TAG_RAYGUN,
EXP_TAG_BURIEDMINE,
EXP_TAG_SCRIPT_MISSILE,
EXP_TAG_RCTANK_ROCKET,
EXP_TAG_BOMB_WATER,
EXP_TAG_BOMB_WATER_SECONDARY,
_0xF728C4A9,
_0xBAEC056F,
EXP_TAG_FLASHGRENADE,
EXP_TAG_STUNGRENADE,
_0x763D3B3B,
EXP_TAG_SCRIPT_MISSILE_LARGE,
EXP_TAG_SUBMARINE_BIG,
EXP_TAG_EMPLAUNCHER_EMP,
};

View File

@ -34,9 +34,5 @@ public:
int32_t m_ammo_max_100_mp; //0x0034
eAmmoFlags m_ammo_flags; //0x0038
eAmmoSpecialType m_ammo_special_type; //0x003C
char pad_0040[24]; //0x0040
float m_missile_speed; //0x0058
char pad_005C[284]; //0x005C
uint32_t m_lock_on_time; //0x0178
}; //Size: 0x017C
static_assert(sizeof(CAmmoInfo) == 0x17C);
}; //Size: 0x040
static_assert(sizeof(CAmmoInfo) == 0x40);

View File

@ -0,0 +1,121 @@
#pragma once
#include "CAmmoInfo.hpp"
#include "CWeaponBoneId.hpp"
#include "../rage/vector.hpp"
#include "../enums/eExplosionTag.hpp"
#include <cstdint>
class CAmmoProjectileInfo : public CAmmoInfo
{
public:
float m_damage; // 0x0040
float m_lifetime; // 0x0044
float m_from_vehicle_lifetime; //0x0048
float m_lifetime_after_impact; //0x004C
float m_lifetime_after_explosion; //0x0050
float m_explosion_time; //0x0054
float m_launch_speed; //0x0058
float m_separation_time; //0x005C
float m_time_to_reach_target; //0x0060
float m_amping; //0x0064
float m_gravity_factor; //0x0068
float m_ricochet_tolerance; //0x006C
float m_ped_ricochet_tolerance; //0x0070
float m_vehicle_ricochet_tolerance; //0x0074
float m_friction_multiplier; //0x0078
class sExplosion
{
enum eExplosionTag m_default; //0x0000
enum eExplosionTag m_hit_car; //0x0004
enum eExplosionTag m_hit_truck; //0x0008
enum eExplosionTag m_hit_bike; //0x000C
enum eExplosionTag m_hit_boat; //0x0010
enum eExplosionTag m_hit_plane; //0x0014
} m_explosion;
uint32_t m_m_fuse_fx_hash; //0x0094
uint32_t m_m_proximity_fx_hash; //0x0098
uint32_t m_m_trail_fx_hash; //0x009C
uint32_t m_trail_fx_under_water_hash; //0x00A0
uint32_t m_primed_fx_hash; //0x00A4
uint32_t m_fuse_fx_fp_hash; //0x00A8
uint32_t m_primed_fx_fp_hash; //0x00AC
float m_trail_fx_fade_in_time; //0x00B0
float m_trail_fx_fade_out_time; //0x00B4
uint32_t m_disturb_fx_default_hash; //0x00B8
uint32_t m_disturb_fx_sand_hash; //0x00BC
uint32_t m_disturb_fx_water_hash; //0x00C0
uint32_t m_disturb_fx_dirt_hash; //0x00C4
uint32_t m_disturb_fx_foliage_hash; //0x00C8
float m_disturb_fx_probe_dist; //0x00CC
float m_disturb_fx_scale; //0x00D0
float m_ground_fx_probe_distance; //0x00D4
bool m_fx_alt_tint_colour; //0x00D8
bool m_light_only_active_when_stuck; //0x00D9
bool m_light_flickers; //0x00DA
bool m_light_speeds_up; //0x00DB
class CWeaponBoneId m_light_bone; //0x00DC
rage::fvector4 m_light_colour; //0x00E0
float m_light_intensity; //0x00F0
float m_light_range; //0x00F4
float m_light_falloff_exp; //0x00F8
float m_light_frequency; //0x00FC
float m_light_power; //0x0100
float m_corona_size; //0x0104
float m_corona_intensity; //0x0108
float m_corona_z_bias; //0x010C
bool m_proximity_affects_firing_player; //0x0110
bool m_proximity_can_be_triggered_by_peds; //0x0111
float m_proximity_activation_time; //0x0114
float m_proximity_repeated_detonation_activation_time; //0x0118
float m_proximity_trigger_radius; //0x011C
float m_proximity_fuse_time_ped; //0x0120
float m_proximity_fuse_time_vehicle_min; //0x0124
float m_proximity_fuse_time_vehicle_max; //0x0128
float m_proximity_fuse_time_vehicle_speed; //0x012C
rage::fvector4 m_proximity_light_colour_untriggered; //0x0130
float m_proximity_light_frequency_multiplier_triggered; //0x0140
float m_time_to_ignore_owner; //0x0144
float m_charged_launch_time; //0x0148
float m_charged_launch_speed_mult; //0x014C
enum eExplosionTag m_cluster_explosion_tag; //0x0150
uint32_t m_cluster_explosion_count; //0x0154
float m_cluster_min_radius; //0x0158
float m_cluster_max_radius; //0x015C
float m_cluster_initial_delay; //0x0160
float m_cluster_inbetween_delay; //0x0164
enum Flags : uint32_t
{
Sticky,
DestroyOnImpact,
ProcessImpacts,
HideDrawable,
TrailFxInactiveOnceWet,
TrailFxRemovedOnImpact,
DoGroundDisturbanceFx,
CanBePlaced,
NoPullPin,
DelayUntilSettled,
CanBeDestroyedByDamage,
CanBounce,
DoubleDamping,
_0x08B0D0C23,
_0x02E3F9CBA,
ThrustUnderwater,
ApplyDamageOnImpact,
SetOnFireOnImpact,
DontFireAnyEvents,
AlignWithTrajectory,
ExplodeAtTrailFxPos,
ProximityDetonation,
AlignWithTrajectoryYAxis,
HomingAttractor,
Cluster,
_0x0E792E56F,
_0x08A7D429C,
UseGravityOutOfWater
} m_projectile_flags; //0x0168
char pad_016C[4]; //0x016C
};
static_assert(sizeof(CAmmoProjectileInfo) == 0x170);

View File

@ -0,0 +1,24 @@
#pragma once
#include "CAmmoProjectileInfo.hpp"
#include "CHomingRocketParams.hpp"
#include <cstdint>
class CAmmoRocketInfo : public CAmmoProjectileInfo
{
public:
float m_forward_drag_coeff; //0x0170
float m_side_drag_coeff; //0x0174
float m_time_before_homing; //0x0178
float m_time_before_switch_target_min; //0x017C
float m_time_before_switch_target_max; //0x0180
float m_proximity_radius; //0x0184
float m_pitch_change_rate; //0x0188
float m_yaw_change_rate; //0x018C
float m_roll_change_rate; //0x0190
float m_max_roll_angle_sin; //0x0194
float m_lifetime_player_vehicle_locked_override_mp; //0x0198
class CHomingRocketParams m_homing_rocket_params; //0x019C
}; // Size: 0x01BC
static_assert(sizeof(CAmmoRocketInfo) == 0x1BC);

View File

@ -0,0 +1,13 @@
#pragma once
#include "CAmmoProjectileInfo.hpp"
#include <cstdint>
class CAmmoThrownInfo : CAmmoProjectileInfo
{
float m_thrown_force; //0x0170
float m_thrown_force_from_vehicle; //0x0174
int32_t m_ammo_max_mp_bonus; //0x0178
}; // Size: 0x017C
static_assert(sizeof(CAmmoThrownInfo) == 0x17C);

View File

@ -0,0 +1,16 @@
#pragma once
class CHomingRocketParams
{
public:
bool m_should_use_homing_params_from_info; //0x0000
bool m_should_ignore_owner_combat_behaviour; //0x0001
float m_time_before_starting_homing; //0x0004
float m_time_before_homing_angle_break; //0x0008
float m_turn_rate_modifier; //0x000C
float m_pitch_yaw_roll_clamp; //0x0010
float m_default_homing_rocket_break_lock_angle; //0x0014
float m_default_homing_rocket_break_lock_angle_close; //0x0018
float m_default_homing_rocket_break_lock_close_distance; //0x001C
}; // Size: 0x0020
static_assert(sizeof(CHomingRocketParams) == 0x20);

10
weapon/CWeaponBoneId.hpp Normal file
View File

@ -0,0 +1,10 @@
#pragma once
#include <cstdint>
class CWeaponBoneId
{
public:
uint16_t m_bone_id;
}; // Size: 0x0002
static_assert(sizeof(CWeaponBoneId) == 0x2);

View File

@ -3,6 +3,7 @@
#include "CAmmoInfo.hpp"
#include "CItemInfo.hpp"
#include "../rage/vector.hpp"
#include "../enums/eExplosionTag.hpp"
#include <cstdint>
@ -26,96 +27,6 @@ enum class eDamageType : int32_t
Tranquilizer
};
enum class eImpactType : int32_t
{
DEFAULT_BULLETS = -1,
GRENADE = 0,
GRENADELAUNCHER = 1,
STICKYBOMB = 2,
MOLOTOV = 3,
ROCKET = 4,
TANKSHELL = 5,
HI_OCTANE = 6,
CAR = 7,
PLANE = 8,
PETROL_PUMP = 9,
BIKE = 10,
DIR_STEAM = 11,
DIR_FLAME = 12,
DIR_WATER_HYDRANT = 13,
DIR_GAS_CANISTER = 14,
BOAT = 15,
SHIP_DESTROY = 16,
TRUCK = 17,
MK2_EXPLOSIVE_BULLETS = 18,
SMOKEGRENADELAUNCHER = 19,
SMOKEGRENADE = 20,
BZGAS = 21,
FLARE = 22,
GAS_CANISTER = 23,
EXTINGUISHER = 24,
PROGRAMMABLEAR = 25,
TRAIN = 26,
BARREL = 27,
PROPANE = 28,
BLIMP = 29,
DIR_FLAME_EXPLODE = 30,
TANKER = 31,
PLANE_ROCKET = 32,
VEHICLE_BULLET = 33,
GAS_TANK = 34,
BIRD_CRAP = 35,
RAILGUN = 36,
BLIMP2 = 37,
FIREWORK = 38,
SNOWBALL = 39,
PROXMINE = 40,
VALKYRIE_CANNON = 41,
AIR_DEFENCE = 42,
PIPEBOMB = 43,
VEHICLEMINE = 44,
EXPLOSIVEAMMO = 45,
APCSHELL = 46,
BOMB_CLUSTER = 47,
BOMB_GAS = 48,
BOMB_INCENDIARY = 49,
BOMB_STANDARD = 50,
TORPEDO = 51,
TORPEDO_UNDERWATER = 52,
BOMBUSHKA_CANNON = 53,
BOMB_CLUSTER_SECONDARY = 54,
HUNTER_BARRAGE = 55,
HUNTER_CANNON = 56,
ROGUE_CANNON = 57,
MINE_UNDERWATER = 58,
ORBITAL_CANNON = 59,
BOMB_STANDARD_WIDE = 60,
EXPLOSIVEAMMO_SHOTGUN = 61,
OPPRESSOR2_CANNON = 62,
MORTAR_KINETIC = 63,
VEHICLEMINE_KINETIC = 64,
VEHICLEMINE_EMP = 65,
VEHICLEMINE_SPIKE = 66,
VEHICLEMINE_SLICK = 67,
VEHICLEMINE_TAR = 68,
SCRIPT_DRONE = 69,
RAYGUN = 70,
BURIEDMINE = 71,
SCRIPT_MISSILE = 72,
RCTANK_ROCKET = 73,
BOMB_WATER = 74,
BOMB_WATER_SECONDARY = 75,
UNK76 = 76,
UNK77 = 77,
FLASH_GRENADE = 78,
STUN_GRENADE = 79,
Unk80 = 80,
SCRIPT_MISSILE_LARGE = 81,
SUBMARINE_BIG = 82,
EMPLAUNCHER_EMP = 83,
SPOOF_EXPLOSION = 99
};
enum class eFireType : int32_t
{
None,
@ -135,7 +46,7 @@ enum class eWeaponWheelSlot : int32_t
UnarmedMelee,
ShotGun,
Heavy,
Throwable
ThrowableSpecial
};
class AimingInfo;
@ -143,8 +54,26 @@ class CWeaponInfo : public CItemInfo
{
public:
eDamageType m_damage_type; //0x0020
eImpactType m_impact_type; //0x0024
char pad_0028[44]; //0x0028
class sExplosion
{
enum eExplosionTag m_default; //0x0000
enum eExplosionTag m_hit_car; //0x0004
enum eExplosionTag m_hit_truck; //0x0008
enum eExplosionTag m_hit_bike; //0x000C
enum eExplosionTag m_hit_boat; //0x0010
enum eExplosionTag m_hit_plane; //0x0014
} m_explosion; //0x0024
static_assert(sizeof(sExplosion) == 0x18);
struct sFrontClearTestParams
{
bool m_should_perform_front_clear_test; //0x0000
float m_forward_offset; //0x0004
float m_vertical_offset; //0x0008
float m_horizontal_offset; //0x000C
float m_capsule_radius; //0x0010
float m_capsule_length; //0x0014
} m_front_clear_test_params; //0x003C
static_assert(sizeof(sFrontClearTestParams) == 0x18);
eFireType m_fire_type; //0x0054
eWeaponWheelSlot m_wheel_slot; //0x0058
uint32_t m_group; //0x005C