1. "infractions acumulation" -> "infractions accumulation".
2. "infractions accumulation" should be ML like all others.
if ( ++g_iInfractionsCount[ iPlayer ] == g_iCacheCvarMaxInfractions )
if ( ++g_iInfractionsCount[ iPlayer ] >= g_iCacheCvarMaxInfractions )
Could bug if the max is changed and players infractions become higher than the max, thus adding more infractions won't ever equal the max.
That occurs a few times throughout the plugin.
4. nfvault uses an actual file to be passed to the functions.
Therefore, "amx_infractions" would be this path: "cstrike/amx_infractions" where it would be a file with no extension.
nfvault has a built-in function for you to use:
new g_szVaultFile[ 128 ];
public plugin_init( )
nfv_file( "amx_infractions.txt", g_szVaultFile, charsmax( g_szVaultFile ) );