| .Dare Devil. |
11-28-2011 05:59 |
nvault problems, need some help.
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!
|