There is my code, i started to mess up with nvault saving for this lvl, i just wanna make when player disconnect/server shutdown save levels and when player connects it load his level... Can anyone help me?
Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <nvault>
#include <ColorChat>
#include <fun>
#include <engine>
#include <zombieplague>
// Aktuelna verzija
#define PLUGIN_VERSION "3.0Fix"
new lvl[33];
new iskustvo[33];
new g_zm_dmg[33], g_human_dmg[33], g_human_hp[33], g_armor[33], g_zombie_hp[33];
new g_vault;
new g_szAuthID[33][35];
new SyncHudObj;
new cvar_xp_za_ubistvo, cvar_max_lvl, cvar_lvlup_ammopacks, cvar_lvl_zmdmg, cvar_lvl_humandmg, cvar_lvl_humanhp, cvar_lvl_armor, cvar_lvl_zombiehp;
new cvar_motd, cvar_vip, cvar_menu, cvar_shop_zmdmg, cvar_shop_humandmg;
new const cmd_file[] = "addons/amxmodx/configs/zp_level_system.txt"
public plugin_init()
{
register_plugin("PZP Leveling System", PLUGIN_VERSION, "Stereotype")
register_cvar("csflvlsystem","1",(FCVAR_SERVER|FCVAR_SPONLY))
register_concmd("zp_set_lvl", "SetLvL", ADMIN_BAN, "<name> <level>");
register_clcmd("say /mylevel","fCheckAbility")
register_clcmd("say /lvl","fMotdPluginInfo")
register_clcmd("say /shop","f_Shop")
register_clcmd( "say /savelevel" , "cmdSaveLevel" );
register_event("DeathMsg", "eDeath", "ade");
register_event("HLTV", "eRoundStart", "a", "1=0", "2=0")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
g_vault = nvault_open("csf_lvlsystem")
SyncHudObj = CreateHudSyncObj()
cvar_xp_za_ubistvo = register_cvar("zp_lvl_kill_xp","100")
cvar_lvlup_ammopacks = register_cvar("zp_lvl_ammopacks","10")
cvar_lvl_zmdmg = register_cvar("zp_lvl_zombiedmg","3")
cvar_lvl_humandmg = register_cvar("zp_lvl_humandmg","1")
cvar_max_lvl = register_cvar("zp_maxlvl","100")
cvar_lvl_humanhp = register_cvar("zp_lvl_humanhp","10")
cvar_lvl_zombiehp = register_cvar("zp_lvl_zombiehp","80")
cvar_lvl_armor = register_cvar("zp_bonus_armor","1")
cvar_motd = register_cvar("zp_motd_e","1")
cvar_vip = register_cvar("zp_lvlmax_givevip","1")
cvar_menu = register_cvar("zp_lvl_menu_e","1")
cvar_shop_zmdmg = register_cvar("zp_lvl_menu_zombiedmg","10")
cvar_shop_humandmg = register_cvar("zp_lvl_menu_humandmg","8")
register_menucmd(register_menuid("Menu_Lvl"),1023,"f_ShopItems");
register_clcmd("say", "handlesay")
set_task(90.0,"eReklama" , _ , _ , _ , "b")
}
public plugin_precache()
{
if(get_pcvar_num(cvar_vip) == 0)
return PLUGIN_HANDLED
if(!file_exists(cmd_file))
{
write_file(cmd_file,"Ovde se nalaze igraci koji su dosli na poslednji Level.")
write_file(cmd_file,"Njima treba da date VIP-a u configs/vips.ini")
write_file(cmd_file,"==================================================")
write_file(cmd_file," ")
}
return PLUGIN_HANDLED
}
public plugin_end()
{
//Close the vault when the plugin ends (map change\server shutdown\restart)
nvault_close( g_vault );
}
public client_authorized(id)
{
//Get the connecting users authid and store it in our global string array so it
//will not need to be retrieved every time we want to do an nvault transaction.
get_user_authid( id , g_szAuthID[id] , charsmax( g_szAuthID[] ) );
}
public cmdSaveLevel(id)
{
//Save a single item into the value of the entry.
//Example: STEAM_0:0:1234 16000
new szLevel[33];
new szKey[40]; //Key used to save money "STEAM_0:0:1234MONEY"
formatex( szKey , charsmax( szKey ) , "%sLVL" , g_szAuthID[id] );
formatex( szLevel , charsmax( szLevel ) , "%d" , g_szLevel[id] );
nvault_set( g_Vault , szKey , lvl );
client_print( id , print_chat , "* Your levels was saved to vault" );
}
public eRoundStart()
{
new players[32] , inum
get_players(players, inum)
for(new a = 0; a < inum; ++a)
set_task(3.0, "dajAbility", players[a])
}
public dajAbility(id) {
if(!is_user_alive(id)) return;
set_user_health(id, get_user_health(id) + g_human_hp[id])
set_user_armor(id, get_user_armor(id) + g_armor[id])
}
public client_connect(id)
{
UcitajInfo(id)
set_task(3.0, "Showinfo", id+672)
set_task(5.0, "PodigniNivo",id)
}
public PodigniNivo(id)
{
if(lvl[id] == 0)
{
lvl[id]++
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
SacuvajInfo(id)
remove_task(id+672)
}
public eDeath()
{
new id = read_data(2);
new attacker = read_data(1);
if(lvl[attacker] == get_pcvar_num(cvar_max_lvl))
return PLUGIN_HANDLED
if(attacker != id && is_user_connected(attacker))
{
set_hudmessage(0, 255, 0, -1.0, 0.76, 0, 6.0, 5.0)
show_hudmessage(attacker, "+ %d XP",get_pcvar_num(cvar_xp_za_ubistvo))
iskustvo[attacker] += get_pcvar_num(cvar_xp_za_ubistvo);
Checklvl(attacker);
}
return PLUGIN_HANDLED
}
public zp_user_infected_pre(id, infector)
{
if(lvl[infector] == get_pcvar_num(cvar_max_lvl))
return PLUGIN_HANDLED
set_hudmessage(0, 255, 0, -1.0, 0.76, 0, 6.0, 5.0)
show_hudmessage(infector, "+ %d XP",get_pcvar_num(cvar_xp_za_ubistvo))
iskustvo[infector] += get_pcvar_num(cvar_xp_za_ubistvo);
Checklvl(infector);
return PLUGIN_HANDLED
}
public Checklvl(id)
{
if(lvl[id] == get_pcvar_num(cvar_max_lvl))
return PLUGIN_HANDLED
while(iskustvo[id] >= lvl[id]*lvl[id]*60)
{
lvl[id]++;
iskustvo[id]=0;
g_zm_dmg[id] += get_pcvar_num(cvar_lvl_zmdmg);
g_human_dmg[id] += get_pcvar_num(cvar_lvl_humandmg);
g_human_hp[id] += get_pcvar_num(cvar_lvl_humanhp);
g_zombie_hp[id] += get_pcvar_num(cvar_lvl_zombiehp);
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(cvar_lvlup_ammopacks))
new nick[32]
get_user_name(id,nick,31)
set_hudmessage(0, 255, 0, 0.02, -1.0, 0, 6.0, 12.0)
show_hudmessage(id, "Welcome to %i level! ^nDMG Human++ | DMG Zombie++ | HP++",lvl[id])
ColorChat(0, TEAM_COLOR,"^4[PZP] ^1Player ^3 %s ^1is now level ^3 %i^1",nick,lvl[id])
if(lvl[id] >= get_pcvar_num(cvar_max_lvl) - 10)
{
g_human_hp[id] += get_pcvar_num(cvar_lvl_humanhp)*2
g_armor[id] += get_pcvar_num(cvar_lvl_armor)
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(cvar_lvlup_ammopacks)*2)
set_hudmessage(255, 255, 212, -1.0, 0.27, 0, 6.0, 12.0)
show_hudmessage(id, "You got bonus on %i Level! ^n||HP++*2|| AMMO++|| ARMOR+ ||",lvl[id])
ColorChat(0, TEAM_COLOR,"^4[PZP] ^1Igrac ^3 %s ^1je dobio bonus na levelu ^3 %i^1",nick,lvl[id])
}
if(lvl[id] == get_pcvar_num(cvar_max_lvl))
{
if(get_pcvar_num(cvar_vip) == 0)
return PLUGIN_HANDLED
new ime[33]
new steam[33]
new nesto[192]
get_user_name(id,ime,32)
get_user_authid(id,steam,32)
format(nesto, 191, "[Nick: ^"%s^" je ^"%i^"lvl ^"%s^"]", ime, lvl[id], steam)
write_file(cmd_file, nesto)
write_file(cmd_file, " ")
ColorChat(id, TEAM_COLOR,"^4[PZP] ^1Congratulations. You are now last level %i! ^4You will earn free V.I.P!^1",lvl[id])
ColorChat(id, TEAM_COLOR,"^4[PZP] ^1Head Admin will review your status and set you V.I.P!")
}
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public zp_user_infected_post(id, infector)
{
if(!is_user_alive(id)) return;
set_user_health(id, get_user_health(id) + g_zombie_hp[id])
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if (!zp_get_user_zombie(attacker) || is_user_alive(attacker))
{
SetHamParamFloat(4, damage + g_human_dmg[attacker])
}
else
{
SetHamParamFloat(4, damage + g_zm_dmg[attacker])
}
}
public Showinfo(id)
{
id -= 672;
set_task(0.1, "Showinfo", id+672);
if(!is_user_alive(id))
{
new target = entity_get_int(id, EV_INT_iuser2);
if(target == 0)
{
return;
}
set_hudmessage(255, 212, 42, 0.55, 0.44, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[XP: %i / %i]^n[Level: %i]^n/shop", iskustvo[target],lvl[target]*lvl[target]*60, lvl[target]);
}
else
{
set_hudmessage(0, 255, 0, 0.02, 0.65, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[XP: %i / %i]^n[Level: %i]^n/shop", iskustvo[id],lvl[id]*lvl[id]*60, lvl[id]);
}
}
public SetLvL(id, level, cid)
{
if(!cmd_access(id,level,cid,3))
{
client_print(id, print_console,"[PZP] No Acces")
return PLUGIN_HANDLED;
}
new arg1[33];
new arg2[6];
read_argv(1, arg1, 32);
read_argv(2, arg2, 5);
new player = cmd_target(id, arg1, CMDTARGET_NO_BOTS);
new value = str_to_num(arg2)-1;
if(!is_user_connected(player))
{
client_print(id, print_console,"[PZP] Igrac trenutno nije konektovan")
return PLUGIN_HANDLED;
}
if(value > get_pcvar_num(cvar_max_lvl))
{
client_print(id, print_console,"[PZP] Maksimalno mozete dati %d lvl ovom igracu!",get_pcvar_num(cvar_max_lvl)-lvl[player])
return PLUGIN_HANDLED
}
new name[32]
get_user_name(player, name, 31) //ime igraca kome dajemo lvl
client_print(id, print_console,"[PZP] Set %d lvl to %s",value,name)
lvl[player]+=value;
return PLUGIN_HANDLED
}
public f_Shop(id)
{
if(get_pcvar_num(cvar_menu) == 0)
{
ColorChat(id, TEAM_COLOR,"^4[PZP] ^1This option is turned off")
return PLUGIN_HANDLED
}
new szText[555 char]
formatex(szText, charsmax(szText), "\yPZP Level Shop")
new menu = menu_create(szText, "f_ShopItems")
if(lvl[id] < 5)
{
formatex(szText, charsmax(szText), "\rGravity [UNLOCK -5 Level]")
menu_additem(menu, szText, "1", 0)
}
else
{
formatex(szText, charsmax(szText), "\wGravity \y[5 Packs = 30 Sec.]")
menu_additem(menu, szText, "1", 0)
}
if(lvl[id] < 10)
{
formatex(szText, charsmax(szText), "\r200AM [UNLOCK -10 Level]")
menu_additem(menu, szText, "2", 0)
}
else
{
formatex(szText, charsmax(szText), "\w200AM \y[30 Packs]")
menu_additem(menu, szText, "2", 0)
}
if(lvl[id] < 30)
{
formatex(szText, charsmax(szText), "\r5000HP+500AM [UNLOCK -30 Level]")
menu_additem(menu, szText, "3", 0)
}
else
{
formatex(szText, charsmax(szText), "\w5000HP+500AM \y[80 Packs]")
menu_additem(menu, szText, "3", 0)
}
if(lvl[id] < 35)
{
formatex(szText, charsmax(szText), "\rZM DMG++ [UNLOCK -35 Level]")
menu_additem(menu, szText, "4", 0)
}
else
{
formatex(szText, charsmax(szText), "\wZM DMG++ \y[120 Packs]")
menu_additem(menu, szText, "4", 0)
}
if(lvl[id] < 45)
{
formatex(szText, charsmax(szText), "\rHuman DMG++ [UNLOCK -45 Level]")
menu_additem(menu, szText, "5", 0)
}
else
{
formatex(szText, charsmax(szText), "\wHuman DMG++ \y[220 Packs]")
menu_additem(menu, szText, "5", 0)
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu)
return PLUGIN_HANDLED
}
public f_ShopItems(id,menu,item)
{
if(item ==MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_CONTINUE
}
new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(iName), callback )
new key = str_to_num(data)
switch(key)
{
case 1:
{
if(lvl[id] < 5)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have level for this item!")
return PLUGIN_HANDLED
}
else
{
if(zp_get_user_ammo_packs(id) < 5)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have enough cash!")
return PLUGIN_HANDLED
}
else
{
set_user_gravity(id, 0.3)
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - 5)
set_task(30.0, "Iskljuci_Gravity",id)
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You have bought gravitation for 30 secs!")
}
}
}
case 2:
{
if(lvl[id] < 10)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have levels for this item!")
return PLUGIN_HANDLED
}
else
{
if(zp_get_user_ammo_packs(id) < 30)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have enough cash!")
return PLUGIN_HANDLED
}
else
{
if(get_user_armor(id) < 300)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You cant have more than 300 armour")
return PLUGIN_HANDLED
}
set_user_armor(id, get_user_armor(id) + 200)
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - 30)
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You have bought 200ARMOR")
}
}
}
case 3:
{
if(lvl[id] < 30)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have levels for this item!")
return PLUGIN_HANDLED
}
else
{
if(zp_get_user_ammo_packs(id) < 80)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have enough cash!")
return PLUGIN_HANDLED
}
else
{
if(get_user_armor(id) < 600)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You cant have more than 600 Armor")
return PLUGIN_HANDLED
}
set_user_armor(id, get_user_armor(id) + 500)
set_user_health(id, get_user_health(id) + 5000)
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - 80)
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You have bought 5000HP and 500AM")
}
}
}
case 4:
{
if(lvl[id] < 35)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have levels for this item!")
return PLUGIN_HANDLED
}
else
{
if(zp_get_user_ammo_packs(id) < 120)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have enough cash!")
return PLUGIN_HANDLED
}
else
{
g_zm_dmg[id] += get_pcvar_num(cvar_shop_zmdmg);
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - 120)
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1Your zombie damage is now +%d. DMG is added on your level damage.",get_pcvar_num(cvar_shop_zmdmg))
}
}
}
case 5:
{
if(lvl[id] < 45)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have levels for this item!")
return PLUGIN_HANDLED
}
else
{
if(zp_get_user_ammo_packs(id) < 220)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1You dont have enough cash!")
return PLUGIN_HANDLED
}
else
{
g_human_dmg[id] += get_pcvar_num(cvar_shop_humandmg);
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - 220)
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1Human Damage increased for +%d. DMG is added on your human damage.",get_pcvar_num(cvar_shop_humandmg))
}
}
}
}
return PLUGIN_HANDLED
}
public Iskljuci_Gravity(id)
{
if(is_user_connected(id))
{
set_user_gravity(id, 1.0)
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1Gravitation off")
}
return PLUGIN_HANDLED
}
public handlesay(id)
{
new said[192], name[30]
get_user_name(id, name, 29)
read_args(said,191)
remove_quotes(said)
ColorChat(0 , GREEN, "[PZP Level: %i] ^x03%s ^1: %s ",lvl[id], name, said)
return PLUGIN_HANDLED
}
public UcitajInfo(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-info",AuthID)
format(vaultdata,255,"%i#%i#%i#%i#%i#%i#%i#",lvl[id],iskustvo[id],g_human_dmg[id],g_zm_dmg[id],g_human_hp[id],g_armor[id],g_zombie_hp[id])
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new s1[6], s2[6], s3[6], s4[6], s5[6], s6[6], s7[6]
parse(vaultdata, s1,6, s2,6, s3,6, s4,6, s5,6, s6,6, s7,6)
lvl[id] = str_to_num(s1)
iskustvo[id] = str_to_num(s2)
g_human_dmg[id] = str_to_num(s3)
g_zm_dmg[id] = str_to_num(s4)
g_human_hp[id] = str_to_num(s5)
g_armor[id] = str_to_num(s6)
g_zombie_hp[id] = str_to_num(s7)
return PLUGIN_CONTINUE
}
public SacuvajInfo(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-info",AuthID)
format(vaultdata,255,"%i#%i#%i#%i#%i#%i#%i#",lvl[id],iskustvo[id],g_human_dmg[id],g_zm_dmg[id],g_human_hp[id],g_armor[id],g_zombie_hp[id])
nvault_set(g_vault,vaultkey,vaultdata)
lvl[id] = 0
iskustvo[id] = 0
g_human_dmg[id] = 0
g_zm_dmg[id] = 0
g_human_hp[id] = 0
g_armor[id] = 0
g_zombie_hp[id] = 0
return PLUGIN_CONTINUE
}
public fCheckAbility(id)
{
ColorChat(id, TEAM_COLOR,"^4[PZP] ^1+Human HP: %d , +Zombie HP: %d , +Human DMG: %d , +Zombie DMG: %d , +Armor: %d",g_human_hp[id],g_zombie_hp[id],g_human_dmg[id],g_zm_dmg[id],g_armor[id])
}
public fMotdPluginInfo(id)
{
if(get_pcvar_num(cvar_motd) == 0)
{
ColorChat(id, TEAM_COLOR, "^4[PZP] ^1Invalid option")
return PLUGIN_HANDLED
}
static motd[1501], len
len += format(motd[len], 1500-len,"<center><font color=^"red^"><B>This server is using level system made by Stereotype</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>That is system for leveling in Zombie Mode</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>and it is increasing human and zombie abilityes.</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>On your HUD your level and XP is showed.</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>For every level you need X numbers of XP.</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>On last 10 levels you get extra perks.</B> </font></center>")
len += format(motd[len], 1500-len,"<hr></hr>")
len += format(motd[len], 1500-len,"<center><h2><font color=^"red^"><B>Rewards for levels</B> </font></h2></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>On every level you get extra health,</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>for zombie, and humans</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>For every level you get 10 ammo packs</B> </font></center>")
len += format(motd[len], 1500-len,"<center><font color=^"white^"><B>When you reach 100 level you gte FREE VIP. </B> </font></center>")
len += format(motd[len], 1500-len,"<hr></hr>")
show_motd(id, motd, "PZP Leveling System")
return 0
}
public eReklama()
{
ColorChat(0, TEAM_COLOR,"^4[PZP] ^1PZP Leveling System ^3/lvl ^3/mylevel ^3/shop")
}