diff --git a/enums/eExplosionTag.hpp b/enums/eExplosionTag.hpp new file mode 100644 index 0000000..6f9247e --- /dev/null +++ b/enums/eExplosionTag.hpp @@ -0,0 +1,92 @@ +#pragma once + +#include + +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, +}; \ No newline at end of file diff --git a/weapon/CAmmoInfo.hpp b/weapon/CAmmoInfo.hpp index 2efb475..f172ea0 100644 --- a/weapon/CAmmoInfo.hpp +++ b/weapon/CAmmoInfo.hpp @@ -6,37 +6,33 @@ enum class eAmmoSpecialType : int32_t { - None, - ArmorPiercing, - Explosive, - FMJ, - HollowPoint, - Incendiary, - Tracer + None, + ArmorPiercing, + Explosive, + FMJ, + HollowPoint, + Incendiary, + Tracer }; enum class eAmmoFlags : uint32_t { - InfiniteAmmo = 0, - AddSmokeOnExplosion = 1, - Fuse = 2, - FixedAfterExplosion = 3, + InfiniteAmmo = 0, + AddSmokeOnExplosion = 1, + Fuse = 2, + FixedAfterExplosion = 3, }; class CAmmoInfo : public CItemInfo { public: - int32_t m_ammo_max; //0x0020 - int32_t m_ammo_max_50; //0x0024 - int32_t m_ammo_max_100; //0x0028 - int32_t m_ammo_max_mp; //0x002C - int32_t m_ammo_max_50_mp; //0x0030 - 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); + int32_t m_ammo_max; //0x0020 + int32_t m_ammo_max_50; //0x0024 + int32_t m_ammo_max_100; //0x0028 + int32_t m_ammo_max_mp; //0x002C + int32_t m_ammo_max_50_mp; //0x0030 + int32_t m_ammo_max_100_mp; //0x0034 + eAmmoFlags m_ammo_flags; //0x0038 + eAmmoSpecialType m_ammo_special_type; //0x003C +}; //Size: 0x040 +static_assert(sizeof(CAmmoInfo) == 0x40); diff --git a/weapon/CAmmoProjectileInfo.hpp b/weapon/CAmmoProjectileInfo.hpp new file mode 100644 index 0000000..89e0e0e --- /dev/null +++ b/weapon/CAmmoProjectileInfo.hpp @@ -0,0 +1,121 @@ +#pragma once + +#include "CAmmoInfo.hpp" +#include "CWeaponBoneId.hpp" +#include "../rage/vector.hpp" +#include "../enums/eExplosionTag.hpp" + +#include + +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); diff --git a/weapon/CAmmoRocketInfo.hpp b/weapon/CAmmoRocketInfo.hpp new file mode 100644 index 0000000..be83d93 --- /dev/null +++ b/weapon/CAmmoRocketInfo.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "CAmmoProjectileInfo.hpp" +#include "CHomingRocketParams.hpp" + +#include + +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); \ No newline at end of file diff --git a/weapon/CAmmoThrownInfo.hpp b/weapon/CAmmoThrownInfo.hpp new file mode 100644 index 0000000..f09d8e7 --- /dev/null +++ b/weapon/CAmmoThrownInfo.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "CAmmoProjectileInfo.hpp" + +#include + +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); \ No newline at end of file diff --git a/weapon/CHomingRocketParams.hpp b/weapon/CHomingRocketParams.hpp new file mode 100644 index 0000000..c28238a --- /dev/null +++ b/weapon/CHomingRocketParams.hpp @@ -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); \ No newline at end of file diff --git a/weapon/CWeaponBoneId.hpp b/weapon/CWeaponBoneId.hpp new file mode 100644 index 0000000..1c39ec3 --- /dev/null +++ b/weapon/CWeaponBoneId.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +class CWeaponBoneId +{ +public: + uint16_t m_bone_id; +}; // Size: 0x0002 +static_assert(sizeof(CWeaponBoneId) == 0x2); \ No newline at end of file diff --git a/weapon/CWeaponInfo.hpp b/weapon/CWeaponInfo.hpp index 6868856..0b09cff 100644 --- a/weapon/CWeaponInfo.hpp +++ b/weapon/CWeaponInfo.hpp @@ -3,267 +3,196 @@ #include "CAmmoInfo.hpp" #include "CItemInfo.hpp" #include "../rage/vector.hpp" +#include "../enums/eExplosionTag.hpp" #include enum class eDamageType : int32_t { - Unknown, - None, - Melee, - Bullet, - BulletRubber, - Explosive, - Fire, - Collision, - Fall, - Drown, - Electric, - BarbedWire, - FireExtinguisher, - Smoke, - WaterCannon, - 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 + Unknown, + None, + Melee, + Bullet, + BulletRubber, + Explosive, + Fire, + Collision, + Fall, + Drown, + Electric, + BarbedWire, + FireExtinguisher, + Smoke, + WaterCannon, + Tranquilizer }; enum class eFireType : int32_t { - None, - Melee, - InstantHit, - DelayedHit, - ProjectTile, - VolumetricParticle + None, + Melee, + InstantHit, + DelayedHit, + ProjectTile, + VolumetricParticle }; enum class eWeaponWheelSlot : int32_t { - Pistol, - SMG, - Rifle, - Sniper, - UnarmedMelee, - ShotGun, - Heavy, - Throwable + Pistol, + SMG, + Rifle, + Sniper, + UnarmedMelee, + ShotGun, + Heavy, + ThrowableSpecial }; class AimingInfo; class CWeaponInfo : public CItemInfo { public: - eDamageType m_damage_type; //0x0020 - eImpactType m_impact_type; //0x0024 - char pad_0028[44]; //0x0028 - eFireType m_fire_type; //0x0054 - eWeaponWheelSlot m_wheel_slot; //0x0058 - uint32_t m_group; //0x005C - class CAmmoInfo *m_ammo_info; //0x0060 - class CAimingInfo *m_aiming_info; //0x0068 - uint32_t m_clip_size; //0x0070 - float m_accuracy_spread; //0x0074 - float m_accurate_mode_accuracy_modifier; //0x0078 - float m_run_and_gun_accuracy; //0x007C - float m_run_and_gun_min_accuracy; //0x0080 - float m_recoil_accuracy_max; //0x0084 - float m_recoil_error_time; //0x0088 - float m_recoil_recovery_rate; //0x008C - float m_recoil_accuracy_to_allow_headshot_ai; //0x0090 - float m_min_headshot_distance_ai; //0x0094 - float m_max_headshot_distance_ai; //0x0098 - float m_headshot_damage_modifier_ai; //0x009C - float m_recoil_accuracy_to_allow_headshot_player; //0x00A0 - float m_min_headshot_distance_player; //0x00A4 - float m_max_headshot_distance_player; //0x00A8 - float m_headshot_damage_modifier_player; //0x00AC - float m_damage; //0x00B0 - float m_damage_time; //0x00B4 - float m_damage_time_in_vehicle; //0x00B8 - float m_damage_time_in_vehicle_headshot; //0x00BC - float N000008F9; //0x00C0 - uint32_t N00000898; //0x00C4 - float m_hit_limbs_damage_modifier; //0x00C8 - float m_network_hit_limbs_damage_modifier; //0x00CC - float m_lightly_armoured_damage_modifier; //0x00D0 - float m_vehicle_damage_modifier; //0x00D4 - float m_force; //0x00D8 - float m_force_on_ped; //0x00DC - float m_force_on_vehicle; //0x00E0 - float m_force_on_heli; //0x00E4 - char pad_00E8[16]; //0x00E8 - float m_force_max_strength_mult; //0x00F8 - float m_force_falloff_range_start; //0x00FC - float m_force_falloff_range_end; //0x0100 - float m_force_falloff_range_min; //0x0104 - float m_project_force; //0x0108 - float m_frag_impulse; //0x010C - float m_penetration; //0x0110 - float m_vertical_launch_adjustment; //0x0114 - float m_drop_forward_velocity; //0x0118 - float m_speed; //0x011C - uint32_t m_bullets_in_batch; //0x0120 - float m_batch_spread; //0x0124 - float m_reload_time_mp; //0x0128 - float m_reload_time_sp; //0x012C - float m_vehicle_reload_time; //0x0130 - float m_anim_reload_time; //0x0134 - int32_t m_bullets_per_anime_loop; //0x0138 - float m_time_between_shots; //0x013C - float m_time_left_between_shots_where_should_fire_is_cached; //0x0140 - float m_spinup_time; //0x0144 - float m_spin_time; //0x0148 - float m_spindown_time; //0x014C - float m_alternate_wait_time; //0x0150 - char pad_0154[296]; //0x0154 - float m_network_player_damage_modifier; //0x027C - float m_network_ped_damage_modifier; //0x0280 - float m_network_headshot_modifier; //0x0284 - float m_lock_on_range; //0x0288 - float m_weapon_range; //0x028C - float m_ai_sound_range; //0x0290 - float m_ai_potential_blast_event_range; //0x0294 - float m_damage_fall_off_range_min; //0x0298 - float m_damage_fall_off_range_max; //0x029C - float m_damage_fall_off_modifier; //0x02A0 - uint32_t m_vehicle_weapon_hash; //0x02A4 - uint32_t m_default_camera_hash; //0x02B8 - uint32_t m_aim_camera_hash; //0x02BC - uint32_t m_fire_camera_hash; //0x02C0 - uint32_t m_cover_camera_hash; //0x02C4 - uint32_t m_cover_ready_to_fire_hash; //0x02C8 - uint32_t m_run_and_gun_camera_hash; //0x02CC - uint32_t m_cinematic_shooting_camera_hash; //0x02D0 - uint32_t m_alt_or_scoped_camera_hash; //0x002D4 - uint32_t m_run_and_gun_alt_or_scoped_camera_hash; //0x02D8 - uint32_t m_cinematic_shooting_alt_or_scoped_camera_hash; //0x2DC - uint32_t m_pov_turret_camera_hash; //0x2E0 - uint32_t m_recoil_shake_hash; //0x02E4 - uint32_t m_recoil_shake_hash_first_person; //0x02E8 - float m_min_time_between_recoil_shakes; //0x02EC - float m_recoil_shake_amplitude; //0x02F0 - float m_explosion_shake_amplitude; //0x02F4 - float m_camera_fov; //0x02FC - float m_first_person_aim_fov_min; //0x0300 - float m_first_person_aim_fov_max; //0x0300 - float m_first_person_scope_fov; //0x0308 - float m_first_person_scope_attachment_fov; //0x030C - char pad_00310[636]; //0x00310 - rage::fvector2 m_reticule_hud_position; //0x0590 - rage::fvector2 m_reticule_hud_position_pov_turret; //0x0598 - float m_reticule_min_size_standing; //0x05A0 - float m_reticule_min_size_crouched; //0x05A4 - float m_reticule_scale; //0x05A8 - uint32_t m_reticule_style_hash; //0x05AC - uint32_t m_first_person_reticule_style_hash; //0x05B0 - uint32_t m_pickup_hash; //0x05B4 - uint32_t m_mp_pickup_hash; //0x05B8 - uint32_t m_human_name_hash; //0x05BC - uint32_t m_audio_collision_hash; //0x05C0 - uint32_t m_movement_mode_conditional_idle_hash; //0x05C4 - uint8_t m_ammo_diminishing_rate; //0x05C8 - int8_t m_hud_damage; //0x05C9 - int8_t m_hud_speed; //0x05CA - int8_t m_hud_capacity; //0x05CB - int8_t m_hud_accuracy; //0x05CC - float m_hud_range; //0x05CD - float m_aiming_breathing_additive_weight; //0x05D0 - float m_firing_breathing_additive_weight; //0x05D4 - float m_stealth_aiming_breathing_additive_weight; //0x5D8 - float m_stealth_firing_breathing_additive_weight; //0x5DC - float m_aiming_lean_additive_weight; //0x05E0 - float m_firing_lean_additive_weight; //0x05E4 - float m_stealth_aiming_lean_additive_weight; //0x05E8 - float m_stealth_firing_lean_additive_weight; //0x05EC - char m_stat_name[8]; //0x05F0 + eDamageType m_damage_type; //0x0020 + 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 + class CAmmoInfo *m_ammo_info; //0x0060 + class CAimingInfo *m_aiming_info; //0x0068 + uint32_t m_clip_size; //0x0070 + float m_accuracy_spread; //0x0074 + float m_accurate_mode_accuracy_modifier; //0x0078 + float m_run_and_gun_accuracy; //0x007C + float m_run_and_gun_min_accuracy; //0x0080 + float m_recoil_accuracy_max; //0x0084 + float m_recoil_error_time; //0x0088 + float m_recoil_recovery_rate; //0x008C + float m_recoil_accuracy_to_allow_headshot_ai; //0x0090 + float m_min_headshot_distance_ai; //0x0094 + float m_max_headshot_distance_ai; //0x0098 + float m_headshot_damage_modifier_ai; //0x009C + float m_recoil_accuracy_to_allow_headshot_player; //0x00A0 + float m_min_headshot_distance_player; //0x00A4 + float m_max_headshot_distance_player; //0x00A8 + float m_headshot_damage_modifier_player; //0x00AC + float m_damage; //0x00B0 + float m_damage_time; //0x00B4 + float m_damage_time_in_vehicle; //0x00B8 + float m_damage_time_in_vehicle_headshot; //0x00BC + float N000008F9; //0x00C0 + uint32_t N00000898; //0x00C4 + float m_hit_limbs_damage_modifier; //0x00C8 + float m_network_hit_limbs_damage_modifier; //0x00CC + float m_lightly_armoured_damage_modifier; //0x00D0 + float m_vehicle_damage_modifier; //0x00D4 + float m_force; //0x00D8 + float m_force_on_ped; //0x00DC + float m_force_on_vehicle; //0x00E0 + float m_force_on_heli; //0x00E4 + char pad_00E8[16]; //0x00E8 + float m_force_max_strength_mult; //0x00F8 + float m_force_falloff_range_start; //0x00FC + float m_force_falloff_range_end; //0x0100 + float m_force_falloff_range_min; //0x0104 + float m_project_force; //0x0108 + float m_frag_impulse; //0x010C + float m_penetration; //0x0110 + float m_vertical_launch_adjustment; //0x0114 + float m_drop_forward_velocity; //0x0118 + float m_speed; //0x011C + uint32_t m_bullets_in_batch; //0x0120 + float m_batch_spread; //0x0124 + float m_reload_time_mp; //0x0128 + float m_reload_time_sp; //0x012C + float m_vehicle_reload_time; //0x0130 + float m_anim_reload_time; //0x0134 + int32_t m_bullets_per_anime_loop; //0x0138 + float m_time_between_shots; //0x013C + float m_time_left_between_shots_where_should_fire_is_cached; //0x0140 + float m_spinup_time; //0x0144 + float m_spin_time; //0x0148 + float m_spindown_time; //0x014C + float m_alternate_wait_time; //0x0150 + char pad_0154[296]; //0x0154 + float m_network_player_damage_modifier; //0x027C + float m_network_ped_damage_modifier; //0x0280 + float m_network_headshot_modifier; //0x0284 + float m_lock_on_range; //0x0288 + float m_weapon_range; //0x028C + float m_ai_sound_range; //0x0290 + float m_ai_potential_blast_event_range; //0x0294 + float m_damage_fall_off_range_min; //0x0298 + float m_damage_fall_off_range_max; //0x029C + float m_damage_fall_off_modifier; //0x02A0 + uint32_t m_vehicle_weapon_hash; //0x02A4 + uint32_t m_default_camera_hash; //0x02B8 + uint32_t m_aim_camera_hash; //0x02BC + uint32_t m_fire_camera_hash; //0x02C0 + uint32_t m_cover_camera_hash; //0x02C4 + uint32_t m_cover_ready_to_fire_hash; //0x02C8 + uint32_t m_run_and_gun_camera_hash; //0x02CC + uint32_t m_cinematic_shooting_camera_hash; //0x02D0 + uint32_t m_alt_or_scoped_camera_hash; //0x002D4 + uint32_t m_run_and_gun_alt_or_scoped_camera_hash; //0x02D8 + uint32_t m_cinematic_shooting_alt_or_scoped_camera_hash; //0x2DC + uint32_t m_pov_turret_camera_hash; //0x2E0 + uint32_t m_recoil_shake_hash; //0x02E4 + uint32_t m_recoil_shake_hash_first_person; //0x02E8 + float m_min_time_between_recoil_shakes; //0x02EC + float m_recoil_shake_amplitude; //0x02F0 + float m_explosion_shake_amplitude; //0x02F4 + float m_camera_fov; //0x02FC + float m_first_person_aim_fov_min; //0x0300 + float m_first_person_aim_fov_max; //0x0300 + float m_first_person_scope_fov; //0x0308 + float m_first_person_scope_attachment_fov; //0x030C + char pad_00310[636]; //0x00310 + rage::fvector2 m_reticule_hud_position; //0x0590 + rage::fvector2 m_reticule_hud_position_pov_turret; //0x0598 + float m_reticule_min_size_standing; //0x05A0 + float m_reticule_min_size_crouched; //0x05A4 + float m_reticule_scale; //0x05A8 + uint32_t m_reticule_style_hash; //0x05AC + uint32_t m_first_person_reticule_style_hash; //0x05B0 + uint32_t m_pickup_hash; //0x05B4 + uint32_t m_mp_pickup_hash; //0x05B8 + uint32_t m_human_name_hash; //0x05BC + uint32_t m_audio_collision_hash; //0x05C0 + uint32_t m_movement_mode_conditional_idle_hash; //0x05C4 + uint8_t m_ammo_diminishing_rate; //0x05C8 + int8_t m_hud_damage; //0x05C9 + int8_t m_hud_speed; //0x05CA + int8_t m_hud_capacity; //0x05CB + int8_t m_hud_accuracy; //0x05CC + float m_hud_range; //0x05CD + float m_aiming_breathing_additive_weight; //0x05D0 + float m_firing_breathing_additive_weight; //0x05D4 + float m_stealth_aiming_breathing_additive_weight; //0x5D8 + float m_stealth_firing_breathing_additive_weight; //0x5DC + float m_aiming_lean_additive_weight; //0x05E0 + float m_firing_lean_additive_weight; //0x05E4 + float m_stealth_aiming_lean_additive_weight; //0x05E8 + float m_stealth_firing_lean_additive_weight; //0x05EC + char m_stat_name[8]; //0x05F0 }; //Size: 0x05E8 static_assert(sizeof(CWeaponInfo) == 0x5E8);