From d00d31043a8be7d0c65c59ace8c8cf1fe899a67e Mon Sep 17 00:00:00 2001 From: horizon <153565784+horizon-84@users.noreply.github.com> Date: Tue, 12 Dec 2023 09:49:29 +0100 Subject: [PATCH] improved CVehicleModelInfo (#148) --- vehicle/CVehicleModelInfo.hpp | 238 ++++++++++++++++++++++++++++++++-- 1 file changed, 230 insertions(+), 8 deletions(-) diff --git a/vehicle/CVehicleModelInfo.hpp b/vehicle/CVehicleModelInfo.hpp index a690899..6fa697c 100644 --- a/vehicle/CVehicleModelInfo.hpp +++ b/vehicle/CVehicleModelInfo.hpp @@ -53,6 +53,214 @@ enum class eVehicleClass : std::uint8_t VC_OPEN_WHEEL = 22, }; +enum class CVehicleModelInfoFlags : std::uint16_t +{ + SMALL_WORKER, + BIG, + NO_BOOT, + ONLY_DURING_OFFICE_HOURS, + BOOT_IN_FRONT, + IS_VAN, + AVOID_TURNS, + HAS_LIVERY, + LIVERY_MATCH_EXTRA, + SPORTS, + DELIVERY, + UNK_0xB5A93F62, + ONLY_ON_HIGHWAYS, + TALL_SHIP, + SPAWN_ON_TRAILER, + SPAWN_BOAT_ON_TRAILER, + EXTRAS_GANG, + EXTRAS_CONVERTIBLE, + EXTRAS_TAXI, + EXTRAS_RARE, + EXTRAS_REQUIRE, + EXTRAS_STRONG, + EXTRAS_ONLY_BREAK_WHEN_DESTROYED, + EXTRAS_SCRIPT, + EXTRAS_ALL, + EXTRAS_MATCH_LIVERY, + DONT_ROTATE_TAIL_ROTOR, + PARKING_SENSORS, + PEDS_CAN_STAND_ON_TOP, + UNK_0x77C9F804, + GEN_NAVMESH, + LAW_ENFORCEMENT, + EMERGENCY_SERVICE, + DRIVER_NO_DRIVE_BY, + NO_RESPRAY, + IGNORE_ON_SIDE_CHECK, + RICH_CAR, + AVERAGE_CAR, + POOR_CAR, + ALLOWS_RAPPEL, + DONT_CLOSE_DOOR_UPON_EXIT, + USE_HIGHER_DOOR_TORQUE, + DISABLE_THROUGH_WINDSHIELD, + IS_ELECTRIC, + NO_BROKEN_DOWN_SCENARIO, + IS_JETSKI, + DAMPEN_STICKYBOMB_DAMAGE, + DONT_SPAWN_IN_CARGEN, + IS_OFFROAD_VEHICLE, + INCREASE_PED_COMMENTS, + EXPLODE_ON_CONTACT, + USE_FAT_INTERIOR_LIGHT, + HEADLIGHTS_USE_ACTUAL_BONE_POS, + FAKE_EXTRALIGHTS, + CANNOT_BE_MODDED, + DONT_SPAWN_AS_AMBIENT, + IS_BULKY, + BLOCK_FROM_ATTRACTOR_SCENARIO, + IS_BUS, + USE_STEERING_PARAM_FOR_LEAN, + CANNOT_BE_DRIVEN_BY_PLAYER, + SPRAY_PETROL_BEFORE_EXPLOSION, + ATTACH_TRAILER_ON_HIGHWAY, + ATTACH_TRAILER_IN_CITY, + HAS_NO_ROOF, + ALLOW_TARGETING_OF_OCCUPANTS, + RECESSED_HEADLIGHT_CORONAS, + RECESSED_TAILLIGHT_CORONAS, + IS_TRACKED_FOR_TRAILS, + HEADLIGHTS_ON_LANDINGGEAR, + CONSIDERED_FOR_VEHICLE_ENTRY_WHEN_STOOD_ON, + GIVE_SCUBA_GEAR_ON_EXIT, + IS_DIGGER, + IS_TANK, + USE_COVERBOUND_INFO_FOR_COVERGEN, + CAN_BE_DRIVEN_ON, + HAS_BULLETPROOF_GLASS, + CANNOT_TAKE_COVER_WHEN_STOOD_ON, + INTERIOR_BLOCKED_BY_BOOT, + DONT_TIMESLICE_WHEELS, + FLEE_FROM_COMBAT, + DRIVER_SHOULD_BE_FEMALE, + DRIVER_SHOULD_BE_MALE, + COUNT_AS_FACEBOOK_DRIVEN, + BIKE_CLAMP_PICKUP_LEAN_RATE, + PLANE_WEAR_ALTERNATIVE_HELMET, + USE_STRICTER_EXIT_COLLISION_TESTS, + TWO_DOORS_ONE_SEAT, + USE_LIGHTING_INTERIOR_OVERRIDE, + USE_RESTRICTED_DRIVEBY_HEIGHT, + CAN_HONK_WHEN_FLEEING, + PEDS_INSIDE_CAN_BE_SET_ON_FIRE_MP, + REPORT_CRIME_IF_STANDING_ON, + HELI_USES_FIXUPS_ON_OPEN_DOOR, + FORCE_ENABLE_CHASSIS_COLLISION, + CANNOT_BE_PICKUP_BY_CARGOBOB, + CAN_HAVE_NEONS, + HAS_INTERIOR_EXTRAS, + HAS_TURRET_SEAT_ON_VEHICLE, + ALLOW_OBJECT_LOW_LOD_COLLISION, + DISABLE_AUTO_VAULT_ON_VEHICLE, + USE_TURRET_RELATIVE_AIM_CALCULATION, + USE_FULL_ANIMS_FOR_MP_WARP_ENTRY_POINTS, + HAS_DIRECTIONAL_SHUFFLES, + DISABLE_WEAPON_WHEEL_IN_FIRST_PERSON, + USE_PILOT_HELMET, + USE_WEAPON_WHEEL_WITHOUT_HELMET, + PREFER_ENTER_TURRET_AFTER_DRIVER, + USE_SMALLER_OPEN_DOOR_RATIO_TOLERANCE, + USE_HEADING_ONLY_IN_TURRET_MATRIX, + DONT_STOP_WHEN_GOING_TO_CLIMB_UP_POINT, + HAS_REAR_MOUNTED_TURRET, + DISABLE_BUSTING, + IGNORE_RWINDOW_COLLISION, + HAS_GULL_WING_DOORS, + CARGOBOB_HOOK_UP_CHASSIS, + USE_FIVE_ANIM_THROW_FP, + ALLOW_HATS_NO_ROOF, + HAS_REAR_SEAT_ACTIVITIES, + HAS_LOWRIDER_HYDRAULICS, + HAS_BULLET_RESISTANT_GLASS, + HAS_INCREASED_RAMMING_FORCE, + HAS_CAPPED_EXPLOSION_DAMAGE, + HAS_LOWRIDER_DONK_HYDRAULICS, + HELICOPTER_WITH_LANDING_GEAR, + JUMPING_CAR, + HAS_ROCKET_BOOST, + RAMMING_SCOOP, + HAS_PARACHUTE, + RAMP, + HAS_EXTRA_SHUFFLE_SEAT_ON_VEHICLE, + FRONT_BOOT, + HALF_TRACK, + RESET_TURRET_SEAT_HEADING, + TURRET_MODS_ON_ROOF, + UPDATE_WEAPON_BATTERY_BONES, + DONT_HOLD_LOW_GEARS_WHEN_ENGINE_UNDER_LOAD, + HAS_GLIDER, + INCREASE_LOW_SPEED_TORQUE, + USE_AIRCRAFT_STYLE_WEAPON_TARGETING, + KEEP_ALL_TURRETS_SYNCHRONISED, + SET_WANTED_FOR_ATTACHED_VEH, + TURRET_ENTRY_ATTACH_TO_DRIVER_SEAT, + USE_STANDARD_FLIGHT_HELMET, + SECOND_TURRET_MOD, + THIRD_TURRET_MOD, + HAS_EJECTOR_SEATS, + UNK_0x2028D687, + HAS_JATO_BOOST_MOD, + IGNORE_TRAPPED_HULL_CHECK, + HOLD_TO_SHUFFLE, + TURRET_MOD_WITH_NO_STOCK_TURRET, + EQUIP_UNARMED_ON_ENTER, + DISABLE_CAMERA_PUSH_BEYOND, + HAS_VERTICAL_FLIGHT_MODE, + HAS_OUTRIGGER_LEGS, + CAN_NAVIGATE_TO_ON_VEHICLE_ENTRY, + DROP_SUSPENSION_WHEN_STOPPED, + DONT_CRASH_ABANDONED_NEAR_GROUND, + USE_INTERIOR_RED_LIGHT, + HAS_HELI_STRAFE_MODE, + HAS_VERTICAL_ROCKET_BOOST, + CREATE_WEAPON_MANAGER_ON_SPAWN, + USE_ROOT_AS_BASE_LOCKON_POS, + HEADLIGHTS_ON_TAP_ONLY, + CHECK_WARP_TASK_DURING_ENTER, + USE_RESTRICTED_DRIVEBY_HEIGHT_HIGH, + INCREASE_CAMBER_WITH_SUSPENSION_MOD, + NO_HEAVY_BRAKE_ANIMATION, + HAS_TWO_BONNET_BONES, + DONT_LINK_BOOT2, + HAS_INCREASED_RAMMING_FORCE_WITH_CHASSIS_MOD, + UNK_0x4C8630D9, + HAS_EXTENDED_COLLISION_MODS, + HAS_NITROUS_MOD, + HAS_JUMP_MOD, + HAS_RAMMING_SCOOP_MOD, + HAS_SUPER_BRAKES_MOD, + CRUSHES_OTHER_VEHICLES, + HAS_WEAPON_BLADE_MODS, + HAS_WEAPON_SPIKE_MODS, + FORCE_BONNET_CAMERA_INSTEAD_OF_POV, + RAMP_MOD, + HAS_TOMBSTONE, + HAS_SIDE_SHUNT, + HAS_FRONT_SPIKE_MOD, + HAS_RAMMING_BAR_MOD, + TURRET_MODS_ON_CHASSIS5, + HAS_SUPERCHARGER, + IS_TANK_WITH_FLAME_DAMAGE, + DISABLE_DEFORMATION, + ALLOW_RAPPEL_AI_ONLY, + USE_RESTRICTED_DRIVEBY_HEIGHT_MID_ONLY, + FORCE_AUTO_VAULT_ON_VEHICLE_WHEN_STUCK, + SPOILER_MOD_DOESNT_INCREASE_GRIP, + NO_REVERSING_ANIMATION, + IS_QUADBIKE_USING_BIKE_ANIMATIONS, + IS_FORMULA_VEHICLE, + LATCH_ALL_JOINTS, + REJECT_ENTRY_TO_VEHICLE_WHEN_STOOD_ON, + CHECK_IF_DRIVER_SEAT_IS_CLOSER_THAN_TURRETS_WITH_ON_BOARD_ENTER, + RENDER_WHEELS_WITH_ZERO_COMPRESSION, + USE_LENGTH_OF_VEHICLE_BOUNDS_FOR_PLAYER_LOCKON_POS, + PREFER_FRONT_SEAT +}; + #pragma pack(push, 1) class CVehicleModelInfo : public CBaseModelInfo { @@ -109,11 +317,25 @@ public: eVehicleClass m_vehicle_class; //0x0548 char pad_0549[11]; float m_min_seat_height; //0x0554 - char pad_0558[40]; //0x0558 - uint32_t m_is_jetski; //0x0580 - char pad_0584[7]; //0x0584 - uint16_t m_ability_flag; // 0x058B - char pad_058D[19]; // 0x058D -}; //Size: 0x05A0 -static_assert(sizeof(CVehicleModelInfo) == 0x5A0); -#pragma pack(pop) + char pad_0558[36]; //0x0558 + uint32_t m_vehicle_model_flags[7]; // 0x057C + + inline bool get_vehicle_model_flag(const CVehicleModelInfoFlags flag) + { + const auto index = static_cast(flag); + + return this->m_vehicle_model_flags[index / 32] & (1 << (index % 32)); + } + + inline void set_vehicle_model_flag(const CVehicleModelInfoFlags flag, bool toggle) + { + const auto index = static_cast(flag); + + if (toggle) + this->m_vehicle_model_flags[index / 32] |= (1 << (index % 32)); + else + this->m_vehicle_model_flags[index / 32] &= ~(1 << (index % 32)); + } +}; //Size: 0x0598 +static_assert(sizeof(CVehicleModelInfo) == 0x598); +#pragma pack(pop) \ No newline at end of file