Hi.
I have problems with nvault.
Sometimes my data what i need to save just lost somehow.
Here is the code :
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
#include <nvault>
#define PLUGIN "[ZP] Can Auto Save Ammo"
#define VERSION "0.1.0"
#define AUTHOR "HsK"
new g_save, g_ammo[33], g_ammo_can_save[33]
new cvar_save_in
#define MAX_SAVE 5000 // Max ammo packs save
#define MAX_SAVE2 5500 // ViP Max ammo packs save
#define APVIPACCESS ADMIN_LEVEL_H
new currentFrame2[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("DeathMsg","event_deathmsg","a")
cvar_save_in = register_cvar("zp_ammo_save_in", "0") // 0 = name / 1 = ip / 2 = steam id
g_save = nvault_open("g_ammo_save")
}
public client_PreThink(id)
{
if(currentFrame2[id] >= 800)
{
if (g_ammo_can_save[id])
Save_Ammo_date(id)
currentFrame2[id] = 0
}
currentFrame2[id]++
}
// Save Data when client kill ( infect, this is zombie event ) someone
public zp_user_infected_post(id, infector)
{
if (g_ammo_can_save[infector])
Save_Ammo_date(infector)
if (g_ammo_can_save[id])
Save_Ammo_date(id)
}
// save data if he buy something whit ammo packs ( ammo packs is like money or something like that )
public zp_extra_item_selected(id, itemid)
{
if (g_ammo_can_save[id])
Save_Ammo_date(id)
}
// When someone kill or die save data
public event_deathmsg()
{
new killer = read_data(1)
new victim = read_data(2)
if (!killer && !victim)
return PLUGIN_CONTINUE;
if (g_ammo_can_save[killer])
Save_Ammo_date(killer)
if (g_ammo_can_save[victim])
Save_Ammo_date(victim)
return PLUGIN_CONTINUE;
}
// when client disconnect , save data
public client_disconnect(id)
{
if(g_ammo_can_save[id])
Save_Ammo_date(id)
}
// When client connect, load data and set a bool cansave to true.
// I dont know why this plugin need that code :D
// Start
public client_putinserver(id)
set_task(2.0, "now_can_save", id)
public now_can_save(id)
{
Load_Ammo_date(id)
set_task(0.5, "can_save_true", id)
}
public can_save_true(id)
g_ammo_can_save[id] = true
// End
// I dont know why this plugin need that code :D
// save data code
public Save_Ammo_date(id)
{
new vaultkey[64], vaultdata[256]
new ammo_packs = zp_get_user_ammo_packs(id)
g_ammo[id] = ammo_packs
switch (get_pcvar_num(cvar_save_in))
{
case 0:
{
new name[33];
get_user_name(id,name,32)
format(vaultkey, 63, "%s-/", name)
}
case 1:
{
new player_ip[33]
get_user_ip(id, player_ip, 32);
format(vaultkey, 63, "%s-/", player_ip)
}
case 2:
{
new AuthID[33];
get_user_authid(id, AuthID, 32);
formatex(vaultkey, 64, "%s-/", AuthID);
}
}
format(vaultdata, 255, "%i#", g_ammo[id])
nvault_set(g_save, vaultkey, vaultdata)
return PLUGIN_CONTINUE;
}
// Load data code
public Load_Ammo_date(id)
{
new vaultkey[64], vaultdata[256]
switch (get_pcvar_num(cvar_save_in))
{
case 0:
{
new name[33];
get_user_name(id,name,32)
format(vaultkey, 63, "%s-/", name)
}
case 1:
{
new player_ip[33]
get_user_ip(id, player_ip, 32);
format(vaultkey, 63, "%s-/", player_ip)
}
case 2:
{
new AuthID[33];
get_user_authid(id, AuthID, 32);
formatex(vaultkey, 64, "%s-/", AuthID);
}
}
format(vaultdata, 255, "%i#", g_ammo[id])
nvault_get(g_save, vaultkey, vaultdata, 255)
replace_all(vaultdata, 255, "#", " ")
new playammo[32]
parse(vaultdata, playammo, 31)
g_ammo[id] = str_to_num(playammo)
set_ammo(id)
return PLUGIN_CONTINUE;
}
// Now set that data by anyohter plugin native
public set_ammo(id)
{
if (get_user_flags(id) & APVIPACCESS)
{
if (g_ammo[id] > MAX_SAVE2)
{
zp_set_user_ammo_packs(id, MAX_SAVE2)
g_ammo[id] = MAX_SAVE2
}
else
zp_set_user_ammo_packs(id, g_ammo[id])
client_print(id, print_chat, "Your Ammo is : %d (8000Max)", g_ammo[id])
}
else
{
if (g_ammo[id] > MAX_SAVE)
{
zp_set_user_ammo_packs(id, MAX_SAVE)
g_ammo[id] = MAX_SAVE
}
else
zp_set_user_ammo_packs(id, g_ammo[id])
client_print(id, print_chat, "Your Ammo is : %d (7500Max)", g_ammo[id])
}
}
// When client change his name then load data. ( For this they can not do a multi ammo packs by copyng anyohter players money. )
public client_infochanged(id)
{
new newname[32],oldname[32]
get_user_info(id, "name", newname,31)
get_user_name(id,oldname,31)
if(!equal(newname, oldname))
{
Load_Ammo_date(id)
}
}
Sometime data lost or something.
But not the all players data,
Like sometimes one or two players lost ammo packs, i dont know what is wrong.
PS: I dont know that, what gone wrong
Mayby the plugin save player name wrong or something.
I hope you guys can help me.
Thanks!