This game majority is using DOUBLE as their numbers storage.
For ammo, the game stored one separate address for "displayed ammo" and actual ammo of each gun. Freezing the display doesn't work. So you have to do with the actual ammo instead.
Since there are like 12 player's guns, that means there are 12 addresses to check. Breaking the function which writes into these ammo addreses is not recommended since the game used the same function to update other stuffs like what gun you currently used, current aim position (where the red line is aiming) and the character's model. However, freezing these ammo addresses works; It will let you keep fire the gun infinitely and the "displayed ammo" will go minus (red numbers). Switching guns will fix the "displayed ammo".
It is possible by setting up a certain AOB-pointer for the table, for example using the LMG ammo. But this means the table must be loaded/activated only when certain condition is met so the table can search for the AOB (eg: player is in the preparation room and the guns ammo must be fully reloaded)