#include <amxmodx>
#include <fvault>
#include <zp50_ammopacks>
#define AUTOSAVE_INTERVAL 20.0
#define AMMOPACK_LIMIT 999
#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
#define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))
new const g_vault_name[] = "ammobank"
new g_LoadSuccess, g_IsConnected, g_MaxPlayers
new g_name[33][35]
new g_ammo[33]
#define is_user_valid(%1) (1 <= %1 <= g_MaxPlayers)
public plugin_init()
{
register_plugin("ZP AmmoSaving(fvault)", "1.0.5", "wbyokomo")
register_logevent("logevent_round_end", 2, "1=Round_End")
g_MaxPlayers = get_maxplayers()
}
public plugin_cfg()
{
set_task(AUTOSAVE_INTERVAL, "TaskAutoSave",_,_,_,"b")
}
public client_putinserver(id)
{
if(is_user_hltv(id) || is_user_bot(id)) return;
flag_set(g_IsConnected,id)
get_user_name(id, g_name[id], 34)
LoadAmmo(id)
}
public client_disconnect(id)
{
if(flag_get(g_LoadSuccess,id))
{
SaveAmmo(id)
flag_unset(g_LoadSuccess,id)
}
flag_unset(g_IsConnected,id)
}
public logevent_round_end() TaskAutoSave();
public TaskAutoSave()
{
for(new id = 1; id <= g_MaxPlayers; id++)
{
if(is_user_valid(id) && flag_get(g_IsConnected,id) && flag_get(g_LoadSuccess,id)) SaveAmmo(id);
}
}
LoadAmmo(id)
{
new data[16]
if(fvault_get_data(g_vault_name, g_name[id], data, 15))
{
g_ammo[id] = str_to_num(data)
zp_ammopacks_set(id, g_ammo[id])
}
flag_set(g_LoadSuccess,id)
}
SaveAmmo(id)
{
if(!flag_get(g_LoadSuccess,id))
{
server_print("[AutoSaveAmmoPack] User [%i] failed to save AP because it not loaded yet!", id)
return
}
g_ammo[id] = zp_ammopacks_get(id)
if(g_ammo[id] >= AMMOPACK_LIMIT)
{
g_ammo[id] = AMMOPACK_LIMIT
}
new data[16]
num_to_str(g_ammo[id], data, 15)
fvault_set_data(g_vault_name, g_name[id], data)
}