Yimura / GTAV-Classes

MIT License
198 stars 67 forks source link

Better CWeaponInfo #1

Open maybegreat48 opened 2 years ago

maybegreat48 commented 2 years ago

Haven't checked all of them, but they should be correct Offsets are automatically generated from parStructures

Registered struct CItemInfo, OFFSETS = 
    FIELDNAME = Name OFFSET = 0x10 TYPE = HASH
    FIELDNAME = Model OFFSET = 0x14 TYPE = HASH
    FIELDNAME = Audio OFFSET = 0x18 TYPE = HASH
    FIELDNAME = Slot OFFSET = 0x1C TYPE = HASH

Registered struct CAmmoInfo, OFFSETS = 
    BASE CLASS = CItemInfo
    FIELDNAME = AmmoMax OFFSET = 0x20 TYPE = INT
    FIELDNAME = AmmoMax50 OFFSET = 0x24 TYPE = INT
    FIELDNAME = AmmoMax100 OFFSET = 0x28 TYPE = INT
    FIELDNAME = AmmoMaxMP OFFSET = 0x2C TYPE = INT
    FIELDNAME = AmmoMax50MP OFFSET = 0x30 TYPE = INT
    FIELDNAME = AmmoMax100MP OFFSET = 0x34 TYPE = INT
    FIELDNAME = AmmoFlags OFFSET = 0x38 TYPE = BITSET
        BITSET NAME = InfiniteAmmo BIT = 0
        BITSET NAME = AddSmokeOnExplosion BIT = 1
        BITSET NAME = Fuse BIT = 2
        BITSET NAME = FixedAfterExplosion BIT = 3
    FIELDNAME = AmmoSpecialType OFFSET = 0x3C TYPE = ENUM
        ENUM NAME = None VALUE = 0
        ENUM NAME = ArmorPiercing VALUE = 1
        ENUM NAME = Explosive VALUE = 2
        ENUM NAME = FMJ VALUE = 3
        ENUM NAME = HollowPoint VALUE = 4
        ENUM NAME = Incendiary VALUE = 5
        ENUM NAME = Tracer VALUE = 6

Registered struct CAmmoProjectileInfo, OFFSETS = 
    BASE CLASS = CAmmoInfo
    FIELDNAME = Damage OFFSET = 0x40 TYPE = FLOAT
    FIELDNAME = LifeTime OFFSET = 0x44 TYPE = FLOAT
    FIELDNAME = FromVehicleLifeTime OFFSET = 0x48 TYPE = FLOAT
    FIELDNAME = LifeTimeAfterImpact OFFSET = 0x4C TYPE = FLOAT
    FIELDNAME = LifeTimeAfterExplosion OFFSET = 0x50 TYPE = FLOAT
    FIELDNAME = ExplosionTime OFFSET = 0x54 TYPE = FLOAT
    FIELDNAME = LaunchSpeed OFFSET = 0x58 TYPE = FLOAT
    FIELDNAME = SeparationTime OFFSET = 0x5C TYPE = FLOAT
    FIELDNAME = TimeToReachTarget OFFSET = 0x60 TYPE = FLOAT
    FIELDNAME = Damping OFFSET = 0x64 TYPE = FLOAT
    FIELDNAME = GravityFactor OFFSET = 0x68 TYPE = FLOAT
    FIELDNAME = RicochetTolerance OFFSET = 0x6C TYPE = FLOAT
    FIELDNAME = PedRicochetTolerance OFFSET = 0x70 TYPE = FLOAT
    FIELDNAME = VehicleRicochetTolerance OFFSET = 0x74 TYPE = FLOAT
    FIELDNAME = FrictionMultiplier OFFSET = 0x78 TYPE = FLOAT
    FIELDNAME = Explosion OFFSET = 0x7C TYPE = STRUCT
        STRUCT TYPE = H_0x13B6A1E8
    FIELDNAME = FuseFx OFFSET = 0x94 TYPE = HASH
    FIELDNAME = H_0xA70A2BEC OFFSET = 0x98 TYPE = HASH
    FIELDNAME = TrailFx OFFSET = 0x9C TYPE = HASH
    FIELDNAME = TrailFxUnderWater OFFSET = 0xA0 TYPE = HASH
    FIELDNAME = FuseFxFP OFFSET = 0xA8 TYPE = HASH
    FIELDNAME = PrimedFxFP OFFSET = 0xAC TYPE = HASH
    FIELDNAME = TrailFxFadeInTime OFFSET = 0xB0 TYPE = FLOAT
    FIELDNAME = TrailFxFadeOutTime OFFSET = 0xB4 TYPE = FLOAT
    FIELDNAME = PrimedFx OFFSET = 0xA4 TYPE = HASH
    FIELDNAME = DisturbFxDefault OFFSET = 0xB8 TYPE = HASH
    FIELDNAME = DisturbFxSand OFFSET = 0xBC TYPE = HASH
    FIELDNAME = DisturbFxWater OFFSET = 0xC0 TYPE = HASH
    FIELDNAME = DisturbFxDirt OFFSET = 0xC4 TYPE = HASH
    FIELDNAME = DisturbFxFoliage OFFSET = 0xC8 TYPE = HASH
    FIELDNAME = DisturbFxProbeDist OFFSET = 0xCC TYPE = FLOAT
    FIELDNAME = DisturbFxScale OFFSET = 0xD0 TYPE = FLOAT
    FIELDNAME = GroundFxProbeDistance OFFSET = 0xD4 TYPE = FLOAT
    FIELDNAME = H_0xCE7376F0 OFFSET = 0xD8 TYPE = BOOL
    FIELDNAME = LightOnlyActiveWhenStuck OFFSET = 0xD9 TYPE = BOOL
    FIELDNAME = LightFlickers OFFSET = 0xDA TYPE = BOOL
    FIELDNAME = LightSpeedsUp OFFSET = 0xDB TYPE = BOOL
    FIELDNAME = LightBone OFFSET = 0xDC TYPE = STRUCT
        STRUCT TYPE = H_0x96EF0B10
    FIELDNAME = LightColour OFFSET = 0xE0 TYPE = VECTOR3
    FIELDNAME = LightIntensity OFFSET = 0xF0 TYPE = FLOAT
    FIELDNAME = LightRange OFFSET = 0xF4 TYPE = FLOAT
    FIELDNAME = LightFalloffExp OFFSET = 0xF8 TYPE = FLOAT
    FIELDNAME = LightFrequency OFFSET = 0xFC TYPE = FLOAT
    FIELDNAME = LightPower OFFSET = 0x100 TYPE = FLOAT
    FIELDNAME = CoronaSize OFFSET = 0x104 TYPE = FLOAT
    FIELDNAME = CoronaIntensity OFFSET = 0x108 TYPE = FLOAT
    FIELDNAME = CoronaZBias OFFSET = 0x10C TYPE = FLOAT
    FIELDNAME = ProjectileFlags OFFSET = 0x168 TYPE = BITSET
        BITSET NAME = Sticky BIT = 0
        BITSET NAME = DestroyOnImpact BIT = 1
        BITSET NAME = ProcessImpacts BIT = 2
        BITSET NAME = HideDrawable BIT = 3
        BITSET NAME = TrailFxInactiveOnceWet BIT = 4
        BITSET NAME = TrailFxRemovedOnImpact BIT = 5
        BITSET NAME = DoGroundDisturbanceFx BIT = 6
        BITSET NAME = CanBePlaced BIT = 7
        BITSET NAME = NoPullPin BIT = 8
        BITSET NAME = DelayUntilSettled BIT = 9
        BITSET NAME = CanBeDestroyedByDamage BIT = 10
        BITSET NAME = CanBounce BIT = 11
        BITSET NAME = DoubleDamping BIT = 12
        BITSET NAME = H_0x8B0D0C23 BIT = 13
        BITSET NAME = H_0x2E3F9CBA BIT = 14
        BITSET NAME = H_0x6EE86D27 BIT = 15
        BITSET NAME = ApplyDamageOnImpact BIT = 16
        BITSET NAME = SetOnFireOnImpact BIT = 17
        BITSET NAME = DontFireAnyEvents BIT = 18
        BITSET NAME = AlignWithTrajectory BIT = 19
        BITSET NAME = ExplodeAtTrailFxPos BIT = 20
        BITSET NAME = ProximityDetonation BIT = 21
        BITSET NAME = AlignWithTrajectoryYAxis BIT = 22
        BITSET NAME = HomingAttractor BIT = 23
        BITSET NAME = Cluster BIT = 24
        BITSET NAME = H_0xE792E56F BIT = 25
        BITSET NAME = H_0x8A7D429C BIT = 26
        BITSET NAME = H_0xB63DD917 BIT = 27
    FIELDNAME = ProximityActivationTime OFFSET = 0x114 TYPE = FLOAT
    FIELDNAME = H_0xC956F49D OFFSET = 0x118 TYPE = FLOAT
    FIELDNAME = ProximityTriggerRadius OFFSET = 0x11C TYPE = FLOAT
    FIELDNAME = ProximityFuseTimePed OFFSET = 0x120 TYPE = FLOAT
    FIELDNAME = ProximityFuseTimeVehicleMin OFFSET = 0x124 TYPE = FLOAT
    FIELDNAME = ProximityFuseTimeVehicleMax OFFSET = 0x128 TYPE = FLOAT
    FIELDNAME = ProximityFuseTimeVehicleSpeed OFFSET = 0x12C TYPE = FLOAT
    FIELDNAME = ProximityLightColourUntriggered OFFSET = 0x130 TYPE = VECTOR3
    FIELDNAME = ProximityLightFrequencyMultiplierTriggered OFFSET = 0x140 TYPE = FLOAT
    FIELDNAME = H_0x57C7073A OFFSET = 0x110 TYPE = BOOL
    FIELDNAME = H_0xA634660A OFFSET = 0x111 TYPE = BOOL
    FIELDNAME = H_0x4E3BEED4 OFFSET = 0x144 TYPE = FLOAT
    FIELDNAME = ChargedLaunchTime OFFSET = 0x148 TYPE = FLOAT
    FIELDNAME = ChargedLaunchSpeedMult OFFSET = 0x14C TYPE = FLOAT
    FIELDNAME = ClusterExplosionTag OFFSET = 0x150 TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED! // the normal explosion enum
    FIELDNAME = ClusterExplosionCount OFFSET = 0x154 TYPE = UINT
    FIELDNAME = ClusterMinRadius OFFSET = 0x158 TYPE = FLOAT
    FIELDNAME = ClusterMaxRadius OFFSET = 0x15C TYPE = FLOAT
    FIELDNAME = ClusterInitialDelay OFFSET = 0x160 TYPE = FLOAT
    FIELDNAME = ClusterInbetweenDelay OFFSET = 0x164 TYPE = FLOAT

Registered struct CAmmoThrownInfo, OFFSETS = 
    BASE CLASS = CAmmoProjectileInfo
    FIELDNAME = ThrownForce OFFSET = 0x170 TYPE = FLOAT
    FIELDNAME = ThrownForceFromVehicle OFFSET = 0x174 TYPE = FLOAT
    FIELDNAME = AmmoMaxMPBonus OFFSET = 0x178 TYPE = INT

Registered struct CAmmoRocketInfo, OFFSETS = 
    BASE CLASS = CAmmoProjectileInfo
    FIELDNAME = ForwardDragCoeff OFFSET = 0x170 TYPE = FLOAT
    FIELDNAME = SideDragCoeff OFFSET = 0x174 TYPE = FLOAT
    FIELDNAME = TimeBeforeHoming OFFSET = 0x178 TYPE = FLOAT
    FIELDNAME = TimeBeforeSwitchTargetMin OFFSET = 0x17C TYPE = FLOAT
    FIELDNAME = TimeBeforeSwitchTargetMax OFFSET = 0x180 TYPE = FLOAT
    FIELDNAME = ProximityRadius OFFSET = 0x184 TYPE = FLOAT
    FIELDNAME = PitchChangeRate OFFSET = 0x188 TYPE = FLOAT
    FIELDNAME = YawChangeRate OFFSET = 0x18C TYPE = FLOAT
    FIELDNAME = RollChangeRate OFFSET = 0x190 TYPE = FLOAT
    FIELDNAME = MaxRollAngleSin OFFSET = 0x194 TYPE = FLOAT
    FIELDNAME = LifeTimePlayerVehicleLockedOverrideMP OFFSET = 0x198 TYPE = FLOAT
    FIELDNAME = H_0x37B6212D OFFSET = 0x19C TYPE = STRUCT
        STRUCT TYPE = H_0xDACB18BA

Registered struct CWeaponInfo, OFFSETS = 
    BASE CLASS = CItemInfo
    FIELDNAME = DamageType OFFSET = 0x20 TYPE = ENUM
        ENUM NAME = UNKNOWN VALUE = 0
        ENUM NAME = NONE VALUE = 1
        ENUM NAME = MELEE VALUE = 2
        ENUM NAME = BULLET VALUE = 3
        ENUM NAME = H_0xC5403EC0 VALUE = 4
        ENUM NAME = EXPLOSIVE VALUE = 5
        ENUM NAME = FIRE VALUE = 6
        ENUM NAME = H_0xA869C908 VALUE = 7
        ENUM NAME = FALL VALUE = 8
        ENUM NAME = H_0xCAE075C0 VALUE = 9
        ENUM NAME = ELECTRIC VALUE = 10
        ENUM NAME = BARBED_WIRE VALUE = 11
        ENUM NAME = FIRE_EXTINGUISHER VALUE = 12
        ENUM NAME = SMOKE VALUE = 13
        ENUM NAME = WATER_CANNON VALUE = 14
        ENUM NAME = H_0x1C8E59AE VALUE = 15
    FIELDNAME = Explosion OFFSET = 0x24 TYPE = STRUCT
        STRUCT TYPE = H_0xE2667659
    FIELDNAME = FireType OFFSET = 0x54 TYPE = ENUM
        ENUM NAME = NONE VALUE = 0
        ENUM NAME = MELEE VALUE = 1
        ENUM NAME = INSTANT_HIT VALUE = 2
        ENUM NAME = DELAYED_HIT VALUE = 3
        ENUM NAME = PROJECTILE VALUE = 4
        ENUM NAME = VOLUMETRIC_PARTICLE VALUE = 5
    FIELDNAME = WheelSlot OFFSET = 0x58 TYPE = ENUM
        ENUM NAME = WHEEL_PISTOL VALUE = 0
        ENUM NAME = WHEEL_SMG VALUE = 1
        ENUM NAME = WHEEL_RIFLE VALUE = 2
        ENUM NAME = WHEEL_SNIPER VALUE = 3
        ENUM NAME = WHEEL_UNARMED_MELEE VALUE = 4
        ENUM NAME = WHEEL_SHOTGUN VALUE = 5
        ENUM NAME = WHEEL_HEAVY VALUE = 6
        ENUM NAME = WHEEL_THROWABLE_SPECIAL VALUE = 7
    FIELDNAME = Group OFFSET = 0x5C TYPE = HASH
    FIELDNAME = AmmoInfo OFFSET = 0x60 TYPE = STRUCT
        STRUCT TYPE CANNOT BE DETERMINED! // CAmmoInfo
    FIELDNAME = AimingInfo OFFSET = 0x68 TYPE = STRUCT
        STRUCT TYPE CANNOT BE DETERMINED! // not sure
    FIELDNAME = ClipSize OFFSET = 0x70 TYPE = UINT
    FIELDNAME = AccuracySpread OFFSET = 0x74 TYPE = FLOAT
    FIELDNAME = AccurateModeAccuracyModifier OFFSET = 0x78 TYPE = FLOAT
    FIELDNAME = RunAndGunAccuracyModifier OFFSET = 0x7C TYPE = FLOAT
    FIELDNAME = RunAndGunAccuracyMinOverride OFFSET = 0x80 TYPE = FLOAT
    FIELDNAME = RecoilAccuracyMax OFFSET = 0x84 TYPE = FLOAT
    FIELDNAME = RecoilErrorTime OFFSET = 0x88 TYPE = FLOAT
    FIELDNAME = RecoilRecoveryRate OFFSET = 0x8C TYPE = FLOAT
    FIELDNAME = RecoilAccuracyToAllowHeadShotAI OFFSET = 0x90 TYPE = FLOAT
    FIELDNAME = MinHeadShotDistanceAI OFFSET = 0x94 TYPE = FLOAT
    FIELDNAME = MaxHeadShotDistanceAI OFFSET = 0x98 TYPE = FLOAT
    FIELDNAME = HeadShotDamageModifierAI OFFSET = 0x9C TYPE = FLOAT
    FIELDNAME = RecoilAccuracyToAllowHeadShotPlayer OFFSET = 0xA0 TYPE = FLOAT
    FIELDNAME = MinHeadShotDistancePlayer OFFSET = 0xA4 TYPE = FLOAT
    FIELDNAME = MaxHeadShotDistancePlayer OFFSET = 0xA8 TYPE = FLOAT
    FIELDNAME = HeadShotDamageModifierPlayer OFFSET = 0xAC TYPE = FLOAT
    FIELDNAME = Damage OFFSET = 0xB0 TYPE = FLOAT
    FIELDNAME = DamageTime OFFSET = 0xB4 TYPE = FLOAT
    FIELDNAME = DamageTimeInVehicle OFFSET = 0xB8 TYPE = FLOAT
    FIELDNAME = DamageTimeInVehicleHeadShot OFFSET = 0xBC TYPE = FLOAT
    FIELDNAME = H_0x2E225B8E OFFSET = 0xC0 TYPE = FLOAT
    FIELDNAME = H_0x1146DD49 OFFSET = 0xC4 TYPE = HASH
    FIELDNAME = HitLimbsDamageModifier OFFSET = 0xC8 TYPE = FLOAT
    FIELDNAME = NetworkHitLimbsDamageModifier OFFSET = 0xCC TYPE = FLOAT
    FIELDNAME = LightlyArmouredDamageModifier OFFSET = 0xD0 TYPE = FLOAT
    FIELDNAME = VehicleDamageModifier OFFSET = 0xD4 TYPE = FLOAT
    FIELDNAME = Force OFFSET = 0xD8 TYPE = FLOAT
    FIELDNAME = ForceHitPed OFFSET = 0xDC TYPE = FLOAT
    FIELDNAME = ForceHitVehicle OFFSET = 0xE0 TYPE = FLOAT
    FIELDNAME = ForceHitFlyingHeli OFFSET = 0xE4 TYPE = FLOAT
    FIELDNAME = OverrideForces OFFSET = 0xE8 TYPE = ARRAY
        ARRAY TYPE = STRUCT
            STRUCT TYPE = H_0x4B4F9BDC
    FIELDNAME = ForceMaxStrengthMult OFFSET = 0xF8 TYPE = FLOAT
    FIELDNAME = ForceFalloffRangeStart OFFSET = 0xFC TYPE = FLOAT
    FIELDNAME = ForceFalloffRangeEnd OFFSET = 0x100 TYPE = FLOAT
    FIELDNAME = ForceFalloffMin OFFSET = 0x104 TYPE = FLOAT
    FIELDNAME = ProjectileForce OFFSET = 0x108 TYPE = FLOAT
    FIELDNAME = FragImpulse OFFSET = 0x10C TYPE = FLOAT
    FIELDNAME = Penetration OFFSET = 0x110 TYPE = FLOAT
    FIELDNAME = VerticalLaunchAdjustment OFFSET = 0x114 TYPE = FLOAT
    FIELDNAME = DropForwardVelocity OFFSET = 0x118 TYPE = FLOAT
    FIELDNAME = Speed OFFSET = 0x11C TYPE = FLOAT
    FIELDNAME = BulletsInBatch OFFSET = 0x120 TYPE = UINT
    FIELDNAME = BatchSpread OFFSET = 0x124 TYPE = FLOAT
    FIELDNAME = ReloadTimeMP OFFSET = 0x128 TYPE = FLOAT
    FIELDNAME = ReloadTimeSP OFFSET = 0x12C TYPE = FLOAT
    FIELDNAME = VehicleReloadTime OFFSET = 0x130 TYPE = FLOAT
    FIELDNAME = AnimReloadRate OFFSET = 0x134 TYPE = FLOAT
    FIELDNAME = BulletsPerAnimLoop OFFSET = 0x138 TYPE = INT
    FIELDNAME = TimeBetweenShots OFFSET = 0x13C TYPE = FLOAT
    FIELDNAME = TimeLeftBetweenShotsWhereShouldFireIsCached OFFSET = 0x140 TYPE = FLOAT
    FIELDNAME = SpinUpTime OFFSET = 0x144 TYPE = FLOAT
    FIELDNAME = SpinTime OFFSET = 0x148 TYPE = FLOAT
    FIELDNAME = SpinDownTime OFFSET = 0x14C TYPE = FLOAT
    FIELDNAME = AlternateWaitTime OFFSET = 0x150 TYPE = FLOAT
    FIELDNAME = BulletBendingNearRadius OFFSET = 0x154 TYPE = FLOAT
    FIELDNAME = BulletBendingFarRadius OFFSET = 0x158 TYPE = FLOAT
    FIELDNAME = BulletBendingZoomedRadius OFFSET = 0x15C TYPE = FLOAT
    FIELDNAME = FirstPersonBulletBendingNearRadius OFFSET = 0x160 TYPE = FLOAT
    FIELDNAME = FirstPersonBulletBendingFarRadius OFFSET = 0x164 TYPE = FLOAT
    FIELDNAME = FirstPersonBulletBendingZoomedRadius OFFSET = 0x168 TYPE = FLOAT
    FIELDNAME = Fx OFFSET = 0x170 TYPE = STRUCT
        STRUCT TYPE = H_0x59D98C0F
    FIELDNAME = InitialRumbleDuration OFFSET = 0x250 TYPE = INT
    FIELDNAME = InitialRumbleIntensity OFFSET = 0x254 TYPE = FLOAT
    FIELDNAME = InitialRumbleIntensityTrigger OFFSET = 0x258 TYPE = FLOAT
    FIELDNAME = RumbleDuration OFFSET = 0x25C TYPE = INT
    FIELDNAME = RumbleIntensity OFFSET = 0x260 TYPE = FLOAT
    FIELDNAME = RumbleIntensityTrigger OFFSET = 0x264 TYPE = FLOAT
    FIELDNAME = RumbleDamageIntensity OFFSET = 0x268 TYPE = FLOAT
    FIELDNAME = InitialRumbleDurationFps OFFSET = 0x26C TYPE = INT
    FIELDNAME = InitialRumbleIntensityFps OFFSET = 0x270 TYPE = FLOAT
    FIELDNAME = RumbleDurationFps OFFSET = 0x274 TYPE = INT
    FIELDNAME = RumbleIntensityFps OFFSET = 0x278 TYPE = FLOAT
    FIELDNAME = NetworkPlayerDamageModifier OFFSET = 0x27C TYPE = FLOAT
    FIELDNAME = NetworkPedDamageModifier OFFSET = 0x280 TYPE = FLOAT
    FIELDNAME = NetworkHeadShotPlayerDamageModifier OFFSET = 0x284 TYPE = FLOAT
    FIELDNAME = LockOnRange OFFSET = 0x288 TYPE = FLOAT
    FIELDNAME = WeaponRange OFFSET = 0x28C TYPE = FLOAT
    FIELDNAME = BulletDirectionOffsetInDegrees OFFSET = 0x8FC TYPE = FLOAT
    FIELDNAME = BulletDirectionPitchOffset OFFSET = 0x900 TYPE = FLOAT
    FIELDNAME = BulletDirectionPitchHomingOffset OFFSET = 0x904 TYPE = FLOAT
    FIELDNAME = AiSoundRange OFFSET = 0x290 TYPE = FLOAT
    FIELDNAME = AiPotentialBlastEventRange OFFSET = 0x294 TYPE = FLOAT
    FIELDNAME = DamageFallOffRangeMin OFFSET = 0x298 TYPE = FLOAT
    FIELDNAME = DamageFallOffRangeMax OFFSET = 0x29C TYPE = FLOAT
    FIELDNAME = DamageFallOffModifier OFFSET = 0x2A8 TYPE = FLOAT
    FIELDNAME = VehicleWeaponHash OFFSET = 0x2B4 TYPE = HASH
    FIELDNAME = DefaultCameraHash OFFSET = 0x2B8 TYPE = HASH
    FIELDNAME = AimCameraHash OFFSET = 0x2BC TYPE = HASH
    FIELDNAME = FireCameraHash OFFSET = 0x2C0 TYPE = HASH
    FIELDNAME = CoverCameraHash OFFSET = 0x2C4 TYPE = HASH
    FIELDNAME = CoverReadyToFireCameraHash OFFSET = 0x2C8 TYPE = HASH
    FIELDNAME = RunAndGunCameraHash OFFSET = 0x2CC TYPE = HASH
    FIELDNAME = CinematicShootingCameraHash OFFSET = 0x2D0 TYPE = HASH
    FIELDNAME = AlternativeOrScopedCameraHash OFFSET = 0x2D4 TYPE = HASH
    FIELDNAME = RunAndGunAlternativeOrScopedCameraHash OFFSET = 0x2D8 TYPE = HASH
    FIELDNAME = CinematicShootingAlternativeOrScopedCameraHash OFFSET = 0x2DC TYPE = HASH
    FIELDNAME = PovTurretCameraHash OFFSET = 0x2E0 TYPE = HASH
    FIELDNAME = CameraFov OFFSET = 0x2FC TYPE = FLOAT
    FIELDNAME = FirstPersonAimFovMin OFFSET = 0x300 TYPE = FLOAT
    FIELDNAME = FirstPersonAimFovMax OFFSET = 0x304 TYPE = FLOAT
    FIELDNAME = FirstPersonScopeFov OFFSET = 0x308 TYPE = FLOAT
    FIELDNAME = FirstPersonScopeAttachmentFov OFFSET = 0x30C TYPE = FLOAT
    FIELDNAME = FirstPersonDrivebyIKOffset OFFSET = 0x310 TYPE = VECTOR3
    FIELDNAME = FirstPersonRNGOffset OFFSET = 0x320 TYPE = VECTOR3
    FIELDNAME = FirstPersonRNGRotationOffset OFFSET = 0x330 TYPE = VECTOR3
    FIELDNAME = FirstPersonLTOffset OFFSET = 0x340 TYPE = VECTOR3
    FIELDNAME = FirstPersonLTRotationOffset OFFSET = 0x350 TYPE = VECTOR3
    FIELDNAME = FirstPersonScopeOffset OFFSET = 0x360 TYPE = VECTOR3
    FIELDNAME = FirstPersonScopeAttachmentOffset OFFSET = 0x370 TYPE = VECTOR3
    FIELDNAME = FirstPersonScopeRotationOffset OFFSET = 0x380 TYPE = VECTOR3
    FIELDNAME = FirstPersonScopeAttachmentRotationOffset OFFSET = 0x390 TYPE = VECTOR3
    FIELDNAME = FirstPersonAsThirdPersonIdleOffset OFFSET = 0x3A0 TYPE = VECTOR3
    FIELDNAME = FirstPersonAsThirdPersonRNGOffset OFFSET = 0x3B0 TYPE = VECTOR3
    FIELDNAME = FirstPersonAsThirdPersonLTOffset OFFSET = 0x3C0 TYPE = VECTOR3
    FIELDNAME = FirstPersonAsThirdPersonScopeOffset OFFSET = 0x3D0 TYPE = VECTOR3
    FIELDNAME = FirstPersonAsThirdPersonWeaponBlockedOffset OFFSET = 0x3E0 TYPE = VECTOR3
    FIELDNAME = FirstPersonDofSubjectMagnificationPowerFactorNear OFFSET = 0x3F0 TYPE = FLOAT
    FIELDNAME = FirstPersonDofMaxNearInFocusDistance OFFSET = 0x3F4 TYPE = FLOAT
    FIELDNAME = FirstPersonDofMaxNearInFocusDistanceBlendLevel OFFSET = 0x3F8 TYPE = FLOAT
    FIELDNAME = FirstPersonScopeAttachmentData OFFSET = 0x400 TYPE = ARRAY
        ARRAY TYPE = STRUCT
            STRUCT TYPE = H_0x6355FAA8
    FIELDNAME = ZoomFactorForAccurateMode OFFSET = 0x410 TYPE = FLOAT
    FIELDNAME = RecoilShakeHash OFFSET = 0x2E4 TYPE = HASH
    FIELDNAME = RecoilShakeHashFirstPerson OFFSET = 0x2E8 TYPE = HASH
    FIELDNAME = AccuracyOffsetShakeHash OFFSET = 0x2EC TYPE = HASH
    FIELDNAME = MinTimeBetweenRecoilShakes OFFSET = 0x2F0 TYPE = UINT
    FIELDNAME = RecoilShakeAmplitude OFFSET = 0x2F4 TYPE = FLOAT
    FIELDNAME = ExplosionShakeAmplitude OFFSET = 0x2F8 TYPE = FLOAT
    FIELDNAME = IkRecoilDisplacement OFFSET = 0x580 TYPE = FLOAT
    FIELDNAME = IkRecoilDisplacementScope OFFSET = 0x584 TYPE = FLOAT
    FIELDNAME = IkRecoilDisplacementScaleBackward OFFSET = 0x588 TYPE = FLOAT
    FIELDNAME = IkRecoilDisplacementScaleVertical OFFSET = 0x58C TYPE = FLOAT
    FIELDNAME = ReticuleHudPosition OFFSET = 0x590 TYPE = VECTOR2
    FIELDNAME = ReticuleHudPositionOffsetForPOVTurret OFFSET = 0x598 TYPE = VECTOR2
    FIELDNAME = AimOffsetMin OFFSET = 0x420 TYPE = VECTOR3
    FIELDNAME = AimProbeLengthMin OFFSET = 0x450 TYPE = FLOAT
    FIELDNAME = AimOffsetMax OFFSET = 0x430 TYPE = VECTOR3
    FIELDNAME = AimProbeLengthMax OFFSET = 0x454 TYPE = FLOAT
    FIELDNAME = AimOffsetMinFPSIdle OFFSET = 0x460 TYPE = VECTOR3
    FIELDNAME = AimOffsetMedFPSIdle OFFSET = 0x470 TYPE = VECTOR3
    FIELDNAME = AimOffsetMaxFPSIdle OFFSET = 0x480 TYPE = VECTOR3
    FIELDNAME = AimOffsetMinFPSLT OFFSET = 0x490 TYPE = VECTOR3
    FIELDNAME = AimOffsetMaxFPSLT OFFSET = 0x4A0 TYPE = VECTOR3
    FIELDNAME = AimOffsetMinFPSRNG OFFSET = 0x4B0 TYPE = VECTOR3
    FIELDNAME = AimOffsetMaxFPSRNG OFFSET = 0x4C0 TYPE = VECTOR3
    FIELDNAME = AimOffsetMinFPSScope OFFSET = 0x4D0 TYPE = VECTOR3
    FIELDNAME = AimOffsetMaxFPSScope OFFSET = 0x4E0 TYPE = VECTOR3
    FIELDNAME = AimOffsetEndPosMinFPSIdle OFFSET = 0x4F0 TYPE = VECTOR3
    FIELDNAME = AimOffsetEndPosMedFPSIdle OFFSET = 0x500 TYPE = VECTOR3
    FIELDNAME = AimOffsetEndPosMaxFPSIdle OFFSET = 0x510 TYPE = VECTOR3
    FIELDNAME = AimOffsetEndPosMinFPSLT OFFSET = 0x520 TYPE = VECTOR3
    FIELDNAME = AimOffsetEndPosMedFPSLT OFFSET = 0x530 TYPE = VECTOR3
    FIELDNAME = AimOffsetEndPosMaxFPSLT OFFSET = 0x540 TYPE = VECTOR3
    FIELDNAME = AimProbeRadiusOverrideFPSIdle OFFSET = 0x550 TYPE = FLOAT
    FIELDNAME = AimProbeRadiusOverrideFPSIdleStealth OFFSET = 0x554 TYPE = FLOAT
    FIELDNAME = AimProbeRadiusOverrideFPSLT OFFSET = 0x558 TYPE = FLOAT
    FIELDNAME = AimProbeRadiusOverrideFPSRNG OFFSET = 0x55C TYPE = FLOAT
    FIELDNAME = AimProbeRadiusOverrideFPSScope OFFSET = 0x560 TYPE = FLOAT
    FIELDNAME = TorsoAimOffset OFFSET = 0x440 TYPE = VECTOR2
    FIELDNAME = TorsoCrouchedAimOffset OFFSET = 0x448 TYPE = VECTOR2
    FIELDNAME = LeftHandIkOffset OFFSET = 0x570 TYPE = VECTOR3
    FIELDNAME = ReticuleMinSizeStanding OFFSET = 0x5A0 TYPE = FLOAT
    FIELDNAME = ReticuleMinSizeCrouched OFFSET = 0x5A4 TYPE = FLOAT
    FIELDNAME = ReticuleScale OFFSET = 0x5A8 TYPE = FLOAT
    FIELDNAME = ReticuleStyleHash OFFSET = 0x5AC TYPE = HASH
    FIELDNAME = FirstPersonReticuleStyleHash OFFSET = 0x5B0 TYPE = HASH
    FIELDNAME = PickupHash OFFSET = 0x5B4 TYPE = HASH
    FIELDNAME = MPPickupHash OFFSET = 0x5B8 TYPE = HASH
    FIELDNAME = HumanNameHash OFFSET = 0x5BC TYPE = HASH
    FIELDNAME = MovementModeConditionalIdle OFFSET = 0x5C4 TYPE = HASH
    FIELDNAME = StatName OFFSET = 0x5F0 TYPE = HASH
    FIELDNAME = KnockdownCount OFFSET = 0x5F8 TYPE = INT
    FIELDNAME = KillshotImpulseScale OFFSET = 0x5FC TYPE = FLOAT
    FIELDNAME = NmShotTuningSet OFFSET = 0x600 TYPE = HASH
    FIELDNAME = AttachPoints OFFSET = 0x604 TYPE = ARRAY
        ARRAY TYPE = STRUCT
            STRUCT TYPE = H_0x71BF947F
    FIELDNAME = GunFeedBone OFFSET = 0x8C4 TYPE = STRUCT
        STRUCT TYPE = H_0x96EF0B10
    FIELDNAME = TargetSequenceGroup OFFSET = 0x8F8 TYPE = HASH
    FIELDNAME = WeaponFlags OFFSET = 0x8C8 TYPE = BITSET
        BITSET NAME = CarriedInHand BIT = 0
        BITSET NAME = Automatic BIT = 1
        BITSET NAME = Silenced BIT = 2
        BITSET NAME = FirstPersonScope BIT = 3
        BITSET NAME = ArmourPenetrating BIT = 4
        BITSET NAME = ApplyBulletForce BIT = 5
        BITSET NAME = Gun BIT = 6
        BITSET NAME = CanLockonOnFoot BIT = 7
        BITSET NAME = CanLockonInVehicle BIT = 8
        BITSET NAME = Homing BIT = 9
        BITSET NAME = CanFreeAim BIT = 10
        BITSET NAME = Heavy BIT = 11
        BITSET NAME = TwoHanded BIT = 12
        BITSET NAME = Launched BIT = 13
        BITSET NAME = MeleeBlade BIT = 14
        BITSET NAME = MeleeClub BIT = 15
        BITSET NAME = AnimReload BIT = 16
        BITSET NAME = AnimCrouchFire BIT = 17
        BITSET NAME = CreateVisibleOrdnance BIT = 18
        BITSET NAME = TreatAsOneHandedInCover BIT = 19
        BITSET NAME = H_0x433706FF BIT = 20
        BITSET NAME = Thrown BIT = 21
        BITSET NAME = Bomb BIT = 22
        BITSET NAME = UsableOnFoot BIT = 23
        BITSET NAME = UsableUnderwater BIT = 24
        BITSET NAME = UsableClimbing BIT = 25
        BITSET NAME = UsableInCover BIT = 26
        BITSET NAME = AllowEarlyExitFromFireAnimAfterBulletFired BIT = 27
        BITSET NAME = DisableRightHandIk BIT = 28
        BITSET NAME = DisableLeftHandIkInCover BIT = 29
        BITSET NAME = DontSwapWeaponIfNoAmmo BIT = 30
        BITSET NAME = H_0xFF2EED4F BIT = 31
        BITSET NAME = DoesRevivableDamage BIT = 32
        BITSET NAME = NoFriendlyFireDamage BIT = 33
        BITSET NAME = Detonator BIT = 34
        BITSET NAME = DisplayRechargeTimeHUD BIT = 35
        BITSET NAME = OnlyFireOneShot BIT = 36
        BITSET NAME = OnlyFireOneShotPerTriggerPress BIT = 37
        BITSET NAME = UseLegDamageVoice BIT = 38
        BITSET NAME = H_0x6913F3A8 BIT = 39
        BITSET NAME = CanBeFiredLikeGun BIT = 40
        BITSET NAME = OnlyAllowFiring BIT = 41
        BITSET NAME = NoLeftHandIK BIT = 42
        BITSET NAME = NoLeftHandIKWhenBlocked BIT = 43
        BITSET NAME = H_0x94214125 BIT = 44
        BITSET NAME = H_0x1D00ABC3 BIT = 45
        BITSET NAME = Vehicle BIT = 46
        BITSET NAME = EnforceAimingRestrictions BIT = 47
        BITSET NAME = ForceEjectShellAfterFiring BIT = 48
        BITSET NAME = NonViolent BIT = 49
        BITSET NAME = NonLethal BIT = 50
        BITSET NAME = Scary BIT = 51
        BITSET NAME = AllowCloseQuarterKills BIT = 52
        BITSET NAME = DisablePlayerBlockingInMP BIT = 53
        BITSET NAME = StaticReticulePosition BIT = 54
        BITSET NAME = CanPerformArrest BIT = 55
        BITSET NAME = H_0xF1DA2249 BIT = 56
        BITSET NAME = AllowMeleeIntroAnim BIT = 57
        BITSET NAME = ManualDetonation BIT = 58
        BITSET NAME = SuppressGunshotEvent BIT = 59
        BITSET NAME = HiddenFromWeaponWheel BIT = 60
        BITSET NAME = AllowDriverLockOnToAmbientPeds BIT = 61
        BITSET NAME = NeedsGunCockingInCover BIT = 62
        BITSET NAME = ThrowOnly BIT = 63
        BITSET NAME = NoAutoRunWhenFiring BIT = 64
        BITSET NAME = DisableIdleVariations BIT = 65
        BITSET NAME = HasLowCoverReloads BIT = 66
        BITSET NAME = HasLowCoverSwaps BIT = 67
        BITSET NAME = DontBreakRopes BIT = 68
        BITSET NAME = CookWhileAiming BIT = 69
        BITSET NAME = UseLeftHandIkWhenAiming BIT = 70
        BITSET NAME = DropWhenCooked BIT = 71
        BITSET NAME = NotAWeapon BIT = 72
        BITSET NAME = RemoveEarlyWhenEnteringVehicles BIT = 73
        BITSET NAME = DontBlendFireOutro BIT = 74
        BITSET NAME = DiscardWhenOutOfAmmo BIT = 75
        BITSET NAME = DelayedFiringAfterAutoSwap BIT = 76
        BITSET NAME = EnforceFiringAngularThreshold BIT = 77
        BITSET NAME = ForcesActionMode BIT = 78
        BITSET NAME = CreatesAPotentialExplosionEventWhenFired BIT = 79
        BITSET NAME = CreateBulletExplosionWhenOutOfTime BIT = 80
        BITSET NAME = DelayedFiringAfterAutoSwapPreviousWeapon BIT = 81
        BITSET NAME = DisableCombatRoll BIT = 82
        BITSET NAME = NoWheelStats BIT = 83
        BITSET NAME = ProcessGripAnim BIT = 84
        BITSET NAME = DisableStealth BIT = 85
        BITSET NAME = DangerousLookingMeleeWeapon BIT = 86
        BITSET NAME = QuitTransitionToIdleIntroOnWeaponChange BIT = 87
        BITSET NAME = DisableLeftHandIkWhenOnFoot BIT = 88
        BITSET NAME = IgnoreHelmets BIT = 89
        BITSET NAME = Rpg BIT = 90
        BITSET NAME = NoAmmoDisplay BIT = 91
        BITSET NAME = TorsoIKForWeaponBlock BIT = 92
        BITSET NAME = LongWeapon BIT = 93
        BITSET NAME = H_0xAF443B5F BIT = 94
        BITSET NAME = H_0xE3C63C3B BIT = 95
        BITSET NAME = H_0x1E3D23FF BIT = 96
        BITSET NAME = AssistedAimVehicleWeapon BIT = 97
        BITSET NAME = CanBlowUpVehicleAtZeroBodyHealth BIT = 98
        BITSET NAME = IgnoreAnimReloadRateModifiers BIT = 99
        BITSET NAME = DisableIdleAnimationFilter BIT = 100
        BITSET NAME = H_0x7B27E96A BIT = 101
        BITSET NAME = H_0xBDBBC7FE BIT = 102
        BITSET NAME = HomingToggle BIT = 103
        BITSET NAME = ApplyVehicleDamageToEngine BIT = 104
        BITSET NAME = Turret BIT = 105
        BITSET NAME = DisableAimAngleChecksForReticule BIT = 106
        BITSET NAME = AllowMovementDuringFirstPersonScope BIT = 107
        BITSET NAME = DriveByMPOnly BIT = 108
        BITSET NAME = H_0xD5E173D6 BIT = 109
        BITSET NAME = CreateWeaponWithNoModel BIT = 110
        BITSET NAME = RemoveWhenUnequipped BIT = 111
        BITSET NAME = BlockAmbientIdles BIT = 112
        BITSET NAME = NotUnarmed BIT = 113
        BITSET NAME = UseFPSAimIK BIT = 114
        BITSET NAME = DisableFPSScope BIT = 115
        BITSET NAME = DisableFPSAimForScope BIT = 116
        BITSET NAME = EnableFPSRNGOnly BIT = 117
        BITSET NAME = EnableFPSIdleOnly BIT = 118
        BITSET NAME = MeleeHatchet BIT = 119
        BITSET NAME = UseAlternateFPDrivebyClipset BIT = 120
        BITSET NAME = AttachFPSLeftHandIKToRight BIT = 121
        BITSET NAME = OnlyUseAimingInfoInFPS BIT = 122
        BITSET NAME = UseFPSAnimatedRecoil BIT = 123
        BITSET NAME = UseFPSSecondaryMotion BIT = 124
        BITSET NAME = HasFPSProjectileWeaponAnims BIT = 125
        BITSET NAME = AllowMeleeBlock BIT = 126
        BITSET NAME = DontPlayDryFireAnim BIT = 127
        BITSET NAME = SwapToUnarmedWhenOutOfThrownAmmo BIT = 128
        BITSET NAME = PlayOutOfAmmoAnim BIT = 129
        BITSET NAME = DisableIdleAnimationFilterWhenReloading BIT = 130
        BITSET NAME = OnFootHoming BIT = 131
        BITSET NAME = DamageCausesDisputes BIT = 132
        BITSET NAME = UsePlaneExplosionDamageCapInMP BIT = 133
        BITSET NAME = FPSOnlyExitFireAnimAfterRecoilEnds BIT = 134
        BITSET NAME = SkipVehiclePetrolTankDamage BIT = 135
        BITSET NAME = DontAutoSwapOnPickUp BIT = 136
        BITSET NAME = DisableTorsoIKAboveAngleThreshold BIT = 137
        BITSET NAME = MeleeFist BIT = 138
        BITSET NAME = NotAllowedForDriveby BIT = 139
        BITSET NAME = AttachReloadObjectToRightHand BIT = 140
        BITSET NAME = CanBeAimedLikeGunWithoutFiring BIT = 141
        BITSET NAME = MeleeMachete BIT = 142
        BITSET NAME = HideReticule BIT = 143
        BITSET NAME = UseHolsterAnimation BIT = 144
        BITSET NAME = BlockFirstPersonStateTransitionWhileFiring BIT = 145
        BITSET NAME = ForceFullFireAnimation BIT = 146
        BITSET NAME = DisableLeftHandIkInDriveby BIT = 147
        BITSET NAME = CanUseInVehMelee BIT = 148
        BITSET NAME = UseVehicleWeaponBoneForward BIT = 149
        BITSET NAME = UseManualTargetingMode BIT = 150
        BITSET NAME = IgnoreTracerVfxMuzzleDirectionCheck BIT = 151
        BITSET NAME = IgnoreHomingCloseThresholdCheck BIT = 152
        BITSET NAME = LockOnRequiresAim BIT = 153
        BITSET NAME = DisableCameraPullAround BIT = 154
        BITSET NAME = VehicleChargedLaunch BIT = 155
        BITSET NAME = ForcePedAsFiringEntity BIT = 156
        BITSET NAME = FiringEntityIgnoresExplosionDamage BIT = 157
        BITSET NAME = H_0xBB719965 BIT = 158
        BITSET NAME = H_0x8AA35BC0 BIT = 159
        BITSET NAME = H_0x11E55FB6 BIT = 160
        BITSET NAME = H_0xACD57DF5 BIT = 161
        BITSET NAME = H_0x562550DB BIT = 162
        BITSET NAME = H_0xAB04FFFF BIT = 163
        BITSET NAME = H_0xC0665B3C BIT = 164
        BITSET NAME = H_0x968627D2 BIT = 165
        BITSET NAME = H_0x276762D5 BIT = 166
        BITSET NAME = H_0x68F30C0A BIT = 167
        BITSET NAME = H_0x614E1388 BIT = 168
        BITSET NAME = H_0xA9CB74E6 BIT = 169
        BITSET NAME = H_0x53D0CED3 BIT = 170
        BITSET NAME = H_0x3E678BAC BIT = 171
        BITSET NAME = H_0xC2A180AE BIT = 172
        BITSET NAME = H_0xC03C4B08 BIT = 173
        BITSET NAME = H_0x7CACFF1F BIT = 174
        BITSET NAME = H_0x59E93B2E BIT = 175
        BITSET NAME = H_0x5D94EE44 BIT = 176
        BITSET NAME = H_0xB79F9589 BIT = 177
        BITSET NAME = H_0xE662D423 BIT = 178
    FIELDNAME = TintSpecValues OFFSET = 0x8E0 TYPE = STRUCT
        STRUCT TYPE CANNOT BE DETERMINED!
    FIELDNAME = FiringPatternAliases OFFSET = 0x8E8 TYPE = STRUCT
        STRUCT TYPE CANNOT BE DETERMINED!
    FIELDNAME = ReloadUpperBodyFixupExpressionData OFFSET = 0x8F0 TYPE = STRUCT
        STRUCT TYPE CANNOT BE DETERMINED!
    FIELDNAME = AmmoDiminishingRate OFFSET = 0x5C8 TYPE = UCHAR
    FIELDNAME = AimingBreathingAdditiveWeight OFFSET = 0x5D0 TYPE = FLOAT
    FIELDNAME = FiringBreathingAdditiveWeight OFFSET = 0x5D4 TYPE = FLOAT
    FIELDNAME = StealthAimingBreathingAdditiveWeight OFFSET = 0x5D8 TYPE = FLOAT
    FIELDNAME = StealthFiringBreathingAdditiveWeight OFFSET = 0x5DC TYPE = FLOAT
    FIELDNAME = AimingLeanAdditiveWeight OFFSET = 0x5E0 TYPE = FLOAT
    FIELDNAME = FiringLeanAdditiveWeight OFFSET = 0x5E4 TYPE = FLOAT
    FIELDNAME = StealthAimingLeanAdditiveWeight OFFSET = 0x5E8 TYPE = FLOAT
    FIELDNAME = StealthFiringLeanAdditiveWeight OFFSET = 0x5EC TYPE = FLOAT
    FIELDNAME = ExpandPedCapsuleRadius OFFSET = 0x91C TYPE = FLOAT
    FIELDNAME = AudioCollisionHash OFFSET = 0x5C0 TYPE = HASH
    FIELDNAME = HudDamage OFFSET = 0x5C9 TYPE = CHAR
    FIELDNAME = HudSpeed OFFSET = 0x5CA TYPE = CHAR
    FIELDNAME = HudCapacity OFFSET = 0x5CB TYPE = CHAR
    FIELDNAME = HudAccuracy OFFSET = 0x5CC TYPE = CHAR
    FIELDNAME = HudRange OFFSET = 0x5CD TYPE = CHAR
    FIELDNAME = VehicleAttackAngle OFFSET = 0x920 TYPE = FLOAT
    FIELDNAME = TorsoIKAngleLimit OFFSET = 0x924 TYPE = FLOAT
    FIELDNAME = H_0x806EA8CF OFFSET = 0x928 TYPE = FLOAT
    FIELDNAME = MeleeRightFistTargetHealthDamageScaler OFFSET = 0x92C TYPE = FLOAT
    FIELDNAME = AirborneAircraftLockOnMultiplier OFFSET = 0x930 TYPE = FLOAT
    FIELDNAME = ArmouredVehicleGlassDamageOverride OFFSET = 0x934 TYPE = FLOAT
    FIELDNAME = CamoDiffuseTexIdxs OFFSET = 0x938 TYPE = MAP
        MAP KEY TYPE = HASH
        MAP VALUE TYPE = MAP
            MAP KEY TYPE = UINT
            MAP VALUE TYPE = UINT
    FIELDNAME = RotateBarrelBone OFFSET = 0x950 TYPE = STRUCT
        STRUCT TYPE = H_0x96EF0B10
    FIELDNAME = RotateBarrelBone2 OFFSET = 0x952 TYPE = STRUCT
        STRUCT TYPE = H_0x96EF0B10
    FIELDNAME = FrontClearTestParams OFFSET = 0x3C TYPE = STRUCT
        STRUCT TYPE = H_0xD3809540

Registered struct H_0x13B6A1E8, OFFSETS = 
    FIELDNAME = Default OFFSET = 0x0 TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED! // standard explosion enum for all of them
    FIELDNAME = HitCar OFFSET = 0x4 TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED!
    FIELDNAME = HitTruck OFFSET = 0x8 TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED!
    FIELDNAME = HitBike OFFSET = 0xC TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED!
    FIELDNAME = HitBoat OFFSET = 0x10 TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED!
    FIELDNAME = HitPlane OFFSET = 0x14 TYPE = ENUM
        ENUM DATA CANNOT BE OBTAINED!
Yimura commented 2 years ago

Yooo thank you, I will definitely be adding this later on!

maybegreat48 commented 2 years ago

So i dumped literally struct i could and posted it here: https://gist.github.com/maybegreat48/04a1ea98d9ede4388bd36e4f1f84f331 Most of it looks useless to me but still very interesting

Yimura commented 2 years ago

Which tools do you use for this? I'd be intrigued in learning how to use these. Currently I'm just manually going in ReClass and mapping values like that.

maybegreat48 commented 2 years ago

Am dumping them from parStructures which basically parses the .ymt and .meta files, not all classes can be dumped this way of course the parStructure class can be found here, these structures are created as soon as the game starts and then they are populated with offsets from parStructureStaticData, the function that does that is

                using register_structure = void(*) (rage::parStructure* stru, rage::parStructureStaticData* data);
        early_batch.add("RS", "E8 ? ? ? ? 48 8B 43 10 48 83 C4 20 5B C3 48 8B C4", [this](memory::handle ptr)
        {
            m_register_structure = ptr.add(1).rip().as<functions::register_structure>();
        });

hooking this function allows you to examine the contents of rage::parStructureStaticData before it is lost forever, remember that you must hook it as soon as arxan deobfuscates GTA, see also this and this on how to get offsets from static data.

Yimura commented 2 years ago

I've updated the classes with what you've given me and I've partially implemented them, I prioritised what seemed nice to have right now, will move to the other stuff at a later date.

George0828Zhang commented 1 year ago

Hi, this looks extremely useful, any chance that the WeaponFlags field could be added to CWeaponInfo?

FIELDNAME = WeaponFlags OFFSET = 0x8C8 TYPE = BITSET
      BITSET NAME = CarriedInHand BIT = 0
      BITSET NAME = Automatic BIT = 1
      BITSET NAME = Silenced BIT = 2
               ...

I tried in Yimmenu to read the content of `(char*)weapon_info + 0x8C8' but the outputs does not correspond to the flags of the weapon I'm using...

George0828Zhang commented 1 year ago

I tried in Yimmenu to read the content of `(char*)weapon_info + 0x8C8' but the outputs does not correspond to the flags of the weapon I'm using...

(sorry for the commit message spam) I found the correct offset for WeaponFlags at 0x0900, check out my PR I also added most values found here, and tested them in game.

AngryCarrot789 commented 11 months ago

Sorry if this isn't the right place to ask but in regards to CWeaponInfo, is there a way to access the global weapon manager (i.e. the thing that stores all the CWeaponInfo instances) or at least find a specific CWeaponInfo instance by name?

Currently I have to search for a unique value that I set in the .xml files that is unlikely to be used anywhere else in the game (I chose a value of 0.2169420 for the AlternateWaitTime node in vehicleweapons_deluxo.meta, for the CWeaponInfo named VEHICLE_WEAPON_DELUXO_MISSILE), and using Cheat Engine that lands me 1 address

And then based on the CWeaponInfo.hpp class in this repo, I assumed that node maps to float m_alternate_wait_time which is offset by 0x150, and I can confirm that's correct as when I take the AlternateWaitTime address and subtract that offset, the first byte is 5, being the m_damage_type field which correctly maps to eDamageType::Explosive based on the .xml file

Yimura commented 11 months ago

@AngryCarrot789 try taking a look at the FILES::GET_DLC_WEAPON_DATA native. It seems to return a pointer to a CWeaponInfo object, perhaps there's some sort of data table in which weapons are stored that you can fetch the data from.

Similarly to how CModelInfo objects are stored there could be some map like structure that you need to reverse.

George0828Zhang commented 11 months ago

@AngryCarrot789 Luckily, I've already reversed the CWeaponInfoBlob pointer. For example, using Yimenu's lua api, you could access the WeaponInfos this way:

function get_at_array_addr(base_addr, offset)
    local at_array_addr = base_addr:add(offset)
    return at_array_addr:deref(), at_array_addr:add(0x8):get_word()
end

local InfoBlobAddress = memory.scan_pattern("48 8B 3D ? ? ? ? F3 0F 10 0D ? ? ? ? 45 33 D2"):add(3):rip()
local collected = {} -- key=weapon/ammo hash, value=base address
local info_blob_base, info_blob_count = get_at_array_addr(InfoBlobAddress, 0x0)
for i=0,info_blob_count-1 do
    for j=0,3 do -- 4 lists of info
        local info_array_base, info_count = get_at_array_addr(info_blob_base, 0xf8*i+0x10*j+0x90)
        for k=0,info_count-1 do
            local info_addr = info_array_base:add(0x8*k):deref()
            local name_hash = info_addr:add(0x10):get_dword()
            collected[name_hash] = info_addr:add(0x0):get_address()
        end
    end
end

In fact I found these using the method you described, I searched for values in CWeaponInfoBlob.Name which have unique value like DLC - Bullpup Rifle. From there it's easier to trace back to the static address. If you're interested, I made a WeaponEditor Lua mod which has complete control over the all the weapon-related Infos like WeaponInfos, WeaponComponentInfos, ExplosionTags etc.

AngryCarrot789 commented 11 months ago

Sweet! I'll check that out. I was literally just in the middle of commenting that I did manage to find a few pointers to the Deluxo's AWT with the help of CE: Pointer at GTA5.exe+0x2949870, then offset by 0xA40 and 0x150, which lands you at the address of AWT. I'm new to this type of low level stuff, but memory pattern scanning looks interesting so I might look into that too