F.A.Q
Setup
No. It talks to the framework only through ml_bridge, so the same build runs on ESX, QBCore, QBox and Standalone.
No. ml_recoil creates no tables and stores no data. All recoil state is per-client and in memory.
Only weapons listed in Config.Weapons get recoil. Add a profile keyed by joaat('WEAPON_NAME') to include it.
Recoil & Damage
Raise VerticalRecoil, HorizontalRecoil, ShakeIntensity or ClassicRecoilAmt in that weapon's profile. Sustained-fire growth is controlled by Config.ProgressiveRecoil.
It computes Damage / VanillaDamage[hash] and applies it with SetWeaponDamageModifier, so you never edit weapons.meta. Keep shared/vanilla_damage.lua in sync with your server's base values.
Yes. Config.PvP.DisableHeadshotKills = true makes headshots deal normal damage instead of an instant kill.
Yes. Config.Stance scales recoil by movement state: crouch lowers it, walking and sprinting raise it.
Integration
With ml_skills running, the client reads GetActiveEffect('betterAccuracy') and trims recoil by 10% per rank, down to a 0.1 floor. Without ml_skills the multiplier stays at 1.0.
Yes. Add your XP call inside OnShotFired in client/main_open.lua. See the Developer page for an example.
Set Config.XPSystem.Type. 'client' resolves it locally; 'server' fetches it through the callback so the value is server-authoritative.
Profiles for the optional DGM Apoc weapon pack. They are harmless if the pack is not installed and can be removed.
Updates
Replace the resource folder with the new release, keeping your edited shared/config.lua, shared/vanilla_damage.lua and open hook files, then restart the resource.
The config and hook files are escrow-ignored, so back them up before replacing the folder and copy your values back in.