i have update this plugin with some help from Z.Louly , we've added top level and save every 2 second .
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <zombieplague>
#include <nvault>
#include <fun>
#include <colorchat>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fvault>
#define PLUGIN "[ZP] Ultimate LvL System"
#define VERSION "2.0"
#define AUTHOR "Kegla"
#define is_user_valid(%1) (1 <= %1 <= g_maxplayers)
#define FLAG ADMIN_RCON
new const file_dir[] = "addons/amxmodx/data/file_vault"
new key[64], name[65], data_[328];
new path[128], data[256], top_level[33], top_exp[33], top_exp2[33], top_name[33][33];
#define TOP 15
new PlayerXP[33] // Player experience
new PlayerLevel[33] // Player level
new PlayerXpForLevel[33] // Needed XP for reaching next level
new PlayerAP[33] // Player bonus armor
new PlayerZmHP[33] // Player bonus zombie health
new PlayerHmHP[33] // Player bonus human health
new PlayerHmDmg[33] // Player bonus human damage
new PlayerZmDmg[33] // Player bonus zombie damage
new g_msg_screenfade // Screenfade while becoming new level
new g_vault // Nvault file
new g_maxplayers // Maximum amount of players on server
new g_msg_sync // Main HUD
new g_damagedealt[33] // Damage done to players
new AMOUNT[33] // Amount of levels (admin cmd: Set Levels)
new g_amount = 1
new g_users_init[] = "addons/amxmodx/configs/users.ini" // Needed for giving slot
enum _:ITEM_INFO
{
NAME[32],
PRICE,
LEVEL,
TEAM,
PAY
}
new Array:ITEMS
new ITEMS_NUM = 0
new ITEM_BOUGHT
// CVARS
new cvar_PlayerAP
new cvar_PlayerZmHP
new cvar_PlayerHmHP
new cvar_PlayerHmDmg
new cvar_PlayerZmDmg
new cvar_maxlevel
new cvar_statsmode
new cvar_allow_lvlreward
new cvar_lvlrevard
new cvar_giveinfbomb
new cvar_give_slot
new cvar_cross_over_allow
new cvar_hud_allow
new cvar_hud_x_pos
new cvar_hud_y_pos
new cvar_hud_red
new cvar_hud_green
new cvar_hud_blue
new cvar_hud_spec_x_pos
new cvar_hud_spec_y_pos
new cvar_hud_spec_red
new cvar_hud_spec_green
new cvar_hud_spec_blue
new cvar_save_type
new cvar_allow_lvl_up_sound
new cvar_allow_lvl_up_screenfade
new cvar_allow_prefix
new cvar_xp_for_kill
new cvar_xp_for_dmg
new cvar_dmg_for_xp
new bool:can_advertise[33]
new cvar_advert_spam_allow
new cvar_advert_delay
new Float:PlayerDonePercent[33]
public plugin_precache()
{
precache_sound("misc/zp_uls_lvl_up.wav")
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("zp_uls_by_kegla", "1", (FCVAR_SERVER|FCVAR_SPONLY))
g_vault = nvault_open("[ZP] LVL SYSTEM BY KEGLA")
register_dictionary("zp_lvl_system.txt")
register_event("DeathMsg", "DeathMsg", "a")
register_event("HLTV", "RoundStart", "a", "1=0", "2=0")
register_event("StatusValue","show_status","be","1=2","2!0")
register_event("StatusValue","hide_status","be","1=1","2=0")
set_task(2.0, "save_data", _, _, _, "b")
RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
register_clcmd("say /lvlstats", "Stats")
register_clcmd("say_team /lvlstats", "Stats")
register_clcmd("say /lvlshop", "ShopMenu")
register_clcmd("say_team /lvlshop", "ShopMenu")
register_clcmd("say /lvladmin", "AdminMenu")
register_clcmd("say_team /lvladmin", "AdminMenu")
register_clcmd("say /toplevel", "show_top")
register_concmd("SET_LEVELS","SetLevels")
register_clcmd("say", "HookSay")
g_msg_screenfade = get_user_msgid("ScreenFade")
g_msg_sync = CreateHudSyncObj()
cvar_maxlevel = register_cvar("zp_lvl_max_levels", "100")
cvar_statsmode = register_cvar("zp_lvl_stats_mode", "2") // 1-All; 2-HP,AP; 3-DMG
cvar_xp_for_kill = register_cvar("zp_lvl_xp_for_kill", "2")
cvar_allow_lvlreward = register_cvar("zp_lvl_allow_lvlreward", "1")
cvar_lvlrevard = register_cvar("zp_lvl_ammo_packs_reward", "10")
cvar_giveinfbomb = register_cvar("zp_lvl_give_inf_bomb", "1")
cvar_PlayerAP = register_cvar("zp_lvl_stats_armor", "1")
cvar_PlayerZmHP = register_cvar("zp_lvl_stats_zmhp", "5")
cvar_PlayerHmHP = register_cvar("zp_lvl_stats_hmhp", "5")
cvar_PlayerHmDmg = register_cvar("zp_lvl_stats_hmdmg", "1")
cvar_PlayerZmDmg = register_cvar("zp_lvl_stats_zmdmg", "1")
cvar_give_slot = register_cvar("zp_lvl_give_slot", "1")
cvar_cross_over_allow = register_cvar("zp_lvl_allow_cross_over_info", "1")
cvar_hud_allow = register_cvar("zp_lvl_hud_allow", "1")
cvar_hud_x_pos = register_cvar("zp_lvl_hud_x_pos", "0.02")
cvar_hud_y_pos = register_cvar("zp_lvl_hud_y_pos", "0.3236")
cvar_hud_red = register_cvar("zp_lvl_hud_red", "0")
cvar_hud_green = register_cvar("zp_lvl_hud_green", "255")
cvar_hud_blue = register_cvar("zp_lvl_hud_blue", "0")
cvar_hud_spec_x_pos = register_cvar("zp_lvl_hud_spec_x_pos", "0.02")
cvar_hud_spec_y_pos = register_cvar("zp_lvl_hud_spec_y_pos", "0.3236")
cvar_hud_spec_red = register_cvar("zp_lvl_hud_spec_red", "155")
cvar_hud_spec_green = register_cvar("zp_lvl_hud_spec_green", "155")
cvar_hud_spec_blue = register_cvar("zp_lvl_hud_spec_blue", "155")
cvar_save_type = register_cvar("zp_lvl_save_type", "3") // 1-SteamID 2-IP 3-Nick
cvar_allow_lvl_up_sound = register_cvar("zp_lvl_allow_lvl_up_sound", "1")
cvar_allow_lvl_up_screenfade = register_cvar("zp_lvl_allow_lvl_up_screenfade", "1")
cvar_allow_prefix = register_cvar("zp_lvl_allow_chat_prefix", "1")
cvar_xp_for_dmg = register_cvar("zp_lvl_xp_for_n_dmg", "1")
cvar_dmg_for_xp = register_cvar("zp_lvl_dmg_for_n_xp", "750")
cvar_advert_spam_allow = register_cvar("zp_lvl_allow_advert_repeat", "1")
cvar_advert_delay = register_cvar("zp_lvl_advert_delay", "30.0")
ITEM_BOUGHT = CreateMultiForward("zp_lvl_shop_item_selected", ET_CONTINUE, FP_CELL, FP_CELL)
ITEMS = ArrayCreate(ITEM_INFO, 16)
g_maxplayers = get_maxplayers()
read_top();
if(!dir_exists(file_dir)) mkdir(file_dir);
}
public plugin_natives()
{
register_native("zp_lvl_shop_register_item", "native_register_item", 0)
register_native("zp_lvl_get_user_lvl", "native_get_user_lvl", 1)
register_native("zp_lvl_get_user_xp", "native_get_user_xp", 1)
register_native("zp_lvl_get_xp_for_lvl", "native_get_user_xp_for_lvl", 1)
register_native("zp_lvl_get_max_lvl", "native_get_max_lvl", 1)
register_native("zp_level_adminmenu", "native_get_adminmenu", 1)
register_native("zp_shop_level_menu", "native_get_shopmenu", 1)
register_native("zp_top_level", "native_get_toplevel", 1)
}
public plugin_cfg()
{
new cfgdir[33]
get_configsdir(cfgdir, charsmax(cfgdir))
server_cmd("exec %s/zp_lvl_system.cfg", cfgdir)
}
public HookSay(id)
{
if(get_pcvar_num(cvar_allow_prefix) == 1)
{
new szName[33], szArgs[256]
get_user_name(id, szName, charsmax(szName))
read_args(szArgs, charsmax(szArgs))
remove_quotes(szArgs)
if(!is_user_alive(id))
{
ColorChat(0, GREEN, "^1*DEAD*^4 [ LVL: %i ]^3 %s^1 : %s", PlayerLevel[id], szName, szArgs)
}
if(is_user_alive(id))
{
ColorChat(0, GREEN, "[ LVL: %i ]^3 %s^1 : %s", PlayerLevel[id], szName, szArgs)
}
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public hide_status(id)
{
set_hudmessage(0, 0, 0, 0.0, 0.0)
show_hudmessage(id,"")
}
public show_status(id)
{
if (get_pcvar_num(cvar_cross_over_allow) == 1)
{
new player_name[32], pid = read_data(2)
get_user_name(pid,player_name,charsmax(player_name))
if (!zp_get_user_zombie(pid) && !zp_get_user_zombie(id))
{
set_hudmessage(0, 0, 255, -1.0, 0.60, 1, 0.01, 7.0, 0.01, 0.01, 4)
show_hudmessage(id,"[%L: %s]^n[%L: %i]", id, "ML_NAME", player_name, id, "ML_LEVEL", PlayerLevel[pid])
}
if (zp_get_user_zombie(pid) && zp_get_user_zombie(id))
{
set_hudmessage(255, 0, 0, -1.0, 0.60, 1, 0.01, 7.0, 0.01, 0.01, 4)
show_hudmessage(id,"[%L: %s]^n[%L: %i]", id, "ML_NAME", player_name, id, "ML_LEVEL", PlayerLevel[pid])
}
return PLUGIN_CONTINUE
}
return PLUGIN_HANDLED
}
public Stats(id)
{
switch(get_pcvar_num(cvar_statsmode))
{
case 1: ColorChat(id, GREEN, "[LVL]^3 [^1ZM HP:^4+%i^3] [^1HM HP:^4+%i^3] [^1HM AP:^4+%i^3] [^1HM DMG:^4+%i^3] [^1ZM DMG:^4+%i^3]", PlayerZmHP[id], PlayerHmHP[id], PlayerAP[id], PlayerHmDmg[id], PlayerZmDmg[id])
case 2: ColorChat(id, GREEN, "[LVL]^3 [^1ZM HP:^4+%i^3] [^1HM HP:^4+%i^3] [^1HM AP:^4+%i^3]", PlayerZmHP[id], PlayerHmHP[id], PlayerAP[id])
case 3: ColorChat(id, GREEN, "[LVL]^3 [^1HM DMG:^4+%i^3] [^1ZM DMG:^4+%i^3]", PlayerHmDmg[id], PlayerZmDmg[id])
}
}
public TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{
if (get_pcvar_num(cvar_statsmode) == 1 || get_pcvar_num(cvar_statsmode) == 3)
{
if (!zp_get_user_zombie(attacker))
{
if (is_user_alive(attacker))
{
SetHamParamFloat(4, damage + PlayerHmDmg[attacker])
}
g_damagedealt[attacker] += floatround(damage)
while (g_damagedealt[attacker] > get_pcvar_num(cvar_dmg_for_xp))
{
PlayerXP[attacker] += get_pcvar_num(cvar_xp_for_dmg)
g_damagedealt[attacker] -= get_pcvar_num(cvar_dmg_for_xp)
}
}
if (zp_get_user_zombie(attacker) && is_user_alive(attacker))
{
SetHamParamFloat(4, damage + PlayerZmDmg[attacker])
}
CheckLevel(attacker)
return PLUGIN_CONTINUE
}
return PLUGIN_HANDLED
}
public DeathMsg()
{
new attacker = read_data(1)
new victim = read_data(2)
if (is_user_connected(attacker))
{
if (attacker == victim) return
if (PlayerLevel[attacker] == get_pcvar_num(cvar_maxlevel)) return
PlayerXP[attacker] += get_pcvar_num(cvar_xp_for_kill)
CheckLevel(attacker)
}
}
public zp_user_infected_pre(id, infector)
{
if (is_user_connected(infector))
{
if (id == infector) return
if (PlayerLevel[infector] == get_pcvar_num(cvar_maxlevel)) return
PlayerXP[infector] += get_pcvar_num(cvar_xp_for_kill)
CheckLevel(infector)
}
}
public Check(id)
{
PlayerXpForLevel[id] = 10*PlayerLevel[id]
new Float:g_one = float(PlayerXpForLevel[id])
new Float:g_two = float(PlayerXP[id])
PlayerDonePercent[id] = 100.00/Float:g_one*Float:g_two
}
public CheckLevel(id)
{
if (PlayerXP[id] >= PlayerXpForLevel[id])
{
PlayerLevel[id]++
PlayerXP[id] = 0
if (get_pcvar_num(cvar_allow_lvlreward) == 1)
{
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(cvar_lvlrevard))
ColorChat(id, GREEN, "%L", id, "ML_REWARD1", '^1')
ColorChat(id, GREEN, "%L", id, "ML_REWARD2", '^1', '^3', get_pcvar_num(cvar_lvlrevard), '^1')
}
if (PlayerLevel[id] == get_pcvar_num(cvar_maxlevel) && get_pcvar_num(cvar_give_slot) == 1)
{
new szAuthID[33], szIP[33], szData[256]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_ip(id, szIP, charsmax(szIP))
if(!equal(szAuthID, "VALVE_ID_LAN"))
{
formatex(szData, charsmax(szData), "^"%s^" ^"^" ^"b^" ^"ce^"", szAuthID)
}
else
{
formatex(szData, charsmax(szData), "^"%s^" ^"^" ^"b^" ^"de^"", szIP)
}
write_file(g_users_init, szData)
ColorChat(id, GREEN, "%L", id, "ML_SLOT", '^1')
}
switch(get_pcvar_num(cvar_statsmode))
{
case 1:
{
PlayerAP[id] += get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[id] += get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[id] += get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[id] += get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[id] += get_pcvar_num(cvar_PlayerZmDmg)
}
case 2:
{
PlayerAP[id] += get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[id] += get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[id] += get_pcvar_num(cvar_PlayerHmHP)
}
case 3:
{
PlayerHmDmg[id] += get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[id] += get_pcvar_num(cvar_PlayerZmDmg)
}
}
new szPlayerName[33]
get_user_name(id, szPlayerName, charsmax(szPlayerName))
ColorChat(0, GREEN, "%L", 0, "ML_CHAT", '^1', '^3', szPlayerName, '^1', '^3', PlayerLevel[id], '^1')
if (get_pcvar_num(cvar_allow_lvl_up_sound) == 1)
{
client_cmd(id, "spk misc/zp_uls_lvl_up.wav")
}
if (get_pcvar_num(cvar_allow_lvl_up_screenfade) == 1)
{
set_user_fade(id)
}
}
}
public zp_user_infected_post(id, infector)
{
if (!is_user_alive(id)) return
if (get_pcvar_num(cvar_statsmode) == 1 || get_pcvar_num(cvar_statsmode) == 2)
{
set_user_health(id, get_user_health(id) + (get_user_health(id)*(PlayerZmHP[id]/100)))
}
if (PlayerLevel[id] == get_pcvar_num(cvar_maxlevel) && get_pcvar_num(cvar_giveinfbomb) == 1 && zp_get_user_zombie(id))
{
new random = random_num(0, 16)
if ((random == 5 || random == 14) && !zp_is_survivor_round())
{
give_item(id, "weapon_hegrenade")
ColorChat(id, GREEN, "%L", id, "ML_INFECTION_GRENADE1", '^1', '^4', '^1')
}
ColorChat(id, GREEN, "%L", id, "ML_INFECTION_GRENADE2", '^1', '^4', '^1')
}
}
public zp_user_humanized_post(id)
{
set_task(1.0, "GiveBonus", id)
}
public RoundStart()
{
new players[32] , num
get_players(players, num)
for(new id = 1; id < num; id++)
{
set_task(1.0, "GiveBonus", id)
}
}
public GiveBonus(id)
{
if (!is_user_alive(id) || zp_get_user_zombie(id)) return
if (get_pcvar_num(cvar_statsmode) == 1 || get_pcvar_num(cvar_statsmode) == 2)
{
set_user_armor(id, get_user_armor(id) + PlayerAP[id])
set_user_health(id, get_user_health(id) + PlayerHmHP[id])
}
}
public client_connect(id)
{
set_task(1.0, "LvlUp", id)
set_task(22.0, "Advert", id)
set_task(1.0, "MainHUD", id, _, _, "b")
set_task(1.0, "Check", id, _, _, "b")
LoadInfo(id)
g_damagedealt[id] = 0
if(get_pcvar_num(cvar_advert_spam_allow) == 1)
{
can_advertise[id] = true
}
else
{
can_advertise[id] = false
}
}
public MainHUD(id)
{
if (get_pcvar_num(cvar_hud_allow) == 1)
{
new percent[33]
formatex(percent, charsmax(percent), "%")
if(!is_user_alive(id))
{
new target = entity_get_int(id, EV_INT_iuser2)
if(target == 0) return PLUGIN_HANDLED
set_hudmessage(get_pcvar_num(cvar_hud_spec_red), get_pcvar_num(cvar_hud_spec_green), get_pcvar_num(cvar_hud_spec_blue), get_pcvar_float(cvar_hud_spec_x_pos), get_pcvar_float(cvar_hud_spec_y_pos))
if (PlayerLevel[target] == get_pcvar_num(cvar_maxlevel))
{
ShowSyncHudMsg(id, g_msg_sync, "[ %L: %i ]", id, "ML_LEVEL", PlayerLevel[target])
}
else
{
ShowSyncHudMsg(id, g_msg_sync, "[ %L: %i ]^n[ %i %L / %i %L ]^n[ %.2f%s ]", id, "ML_LEVEL", PlayerLevel[target], PlayerXP[target], id, "ML_XP", PlayerXpForLevel[target], id, "ML_XP", Float:PlayerDonePercent[target], percent)
}
}
else
{
set_hudmessage(get_pcvar_num(cvar_hud_red), get_pcvar_num(cvar_hud_green), get_pcvar_num(cvar_hud_blue), get_pcvar_float(cvar_hud_x_pos), get_pcvar_float(cvar_hud_y_pos))
if (PlayerLevel[id] == get_pcvar_num(cvar_maxlevel))
{
ShowSyncHudMsg(id, g_msg_sync, "[ %L: %i ]", id, "ML_LEVEL", PlayerLevel[id])
}
else
{
ShowSyncHudMsg(id, g_msg_sync, "[ %L: %i ]^n[ %i %L / %i %L ]^n[ %.2f%s ]", id, "ML_LEVEL", PlayerLevel[id], PlayerXP[id], id, "ML_XP", PlayerXpForLevel[id], id, "ML_XP", Float:PlayerDonePercent[id], percent)
}
}
return PLUGIN_CONTINUE
}
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
SaveInfo(id)
can_advertise[id] = false
save_data(id)
}
public client_putinserver(id)
{
set_task(2.0 ,"check_save", id, _, _, "b");
}
public save_data(id)
{
get_user_name(id, name, 34);
format(key, 63, "%s", name);
format(data_, 327, "^"%d^" ^"%d^" ^"%d^"", PlayerLevel[id], PlayerXP[id], PlayerXpForLevel[id]);
fvault_set_data("top_level", key, data_);
}
///** ----------------------------------------- [ top level ] ------------------------------------------------- **///
public check_save(id)
{
if(get_user_team(id) == 3) return;
save_data(id); update_top(id, PlayerLevel[id], PlayerXP[id], PlayerXpForLevel[id]);
}
public save_top()
{
formatex(path, 127, "%s/top_top_v2.txt", file_dir);
if(file_exists(path))
delete_file(path);
new f = fopen(path, "at");
for(new i = 0; i < TOP; i++)
{
formatex(data, 255, "^"%s^" ^"%d^" ^"%d^" ^"%d^"^n", top_name[i], top_level[i], top_exp[i], top_exp2[i]);
fputs(f, data);
}
fclose(f);
}
public read_top()
{
formatex(path, 127, "%s/top_top_v2.txt", file_dir);
new f = fopen(path, "rt");
new i = 0;
new level[25], exp[25], exp2[25];
while(!feof(f) && i < TOP+1)
{
fgets(f, data, 255);
parse(data, top_name[i], 31, level, 25, exp, 25, exp2, 25);
top_level[i] = str_to_num(level);
top_exp[i] = str_to_num(exp);
top_exp2[i] = str_to_num(exp2);
i++;
}
fclose(f);
}
public show_top(id)
{
static buffer[2368], name[131], len, i;
len = format(buffer[len], 2367-len,"<style>body{background:black}th{background:#303B4A;color:#FFF;padding:1px;text-align:center;}");
len += format(buffer[len], 2367-len, "td{border-bottom:1px #E7F0D0 solid;padding:1px;text-align:center;}");
len += format(buffer[len], 2367-len, "table{background:#EFF1F3;font-size:15px;color:#222;border:1px solid #EFF1F3;text-align:center;}</style>");
len += format(buffer[len], 2367-len, "<table width=100%% />");
len += format(buffer[len], 2367-len, "<tr><th width=5%>%s</th><th width=41%>%s</th><th width=27%>%s</th><th width=27%>%s</th></tr>","#","Name","Level","Exp");
for(i = 0; i < TOP; i++)
{
name = top_name[i];
if(top_level[i]== 0)
{
len += format(buffer[len], 2367-len, "<tr><td>%d.<td>%s<td>%s<td>%s/%s</tr>", (i+1), "-", "-", "-", "-");
}
else
{
while(containi(name, "<") != -1) replace(name, 129, "<", "<");
while(containi(name, ">") != -1) replace(name, 129, ">", ">");
len += format(buffer[len], 2367-len, "<tr><td>%d.<td>%s<td>%d<td>%d/%d</tr>", (i+1), name, top_level[i], top_exp[i], top_exp2[i]);
}
}
static strin[20]; format(strin,33, "Top 10 Levels");
show_motd(id, buffer, strin);
return PLUGIN_CONTINUE
}
public update_top(id, level, exp, exp2)
{
static name[32]; get_user_name(id, name, charsmax(name) - 1);
for(new i = 0; i < TOP; i++)
{
if(level > top_level[i] || level == top_level[i] && exp > top_exp[i])
{
new pos = i;
while(!equal(top_name[pos], name) && pos < TOP)
pos++;
for(new j = pos; j > i; j--)
{
formatex(top_name[j], 31, top_name[j-1])
top_level[j] = top_level[j-1]
top_exp[j] = top_exp[j-1]
}
formatex(top_name[i], charsmax(name) - 1, name)
top_level[i] = level
top_exp[i] = exp
top_exp2[i] = exp2
save_top()
break;
}
else if(equal(top_name[i], name))
break;
}
}
public LvlUp(id)
{
if(PlayerLevel[id] == 0)
{
PlayerLevel[id] = 1
switch(get_pcvar_num(cvar_statsmode))
{
case 1:
{
PlayerAP[id] = get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[id] = get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[id] = get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[id] = get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[id] = get_pcvar_num(cvar_PlayerZmDmg)
}
case 2:
{
PlayerAP[id] = get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[id] = get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[id] = get_pcvar_num(cvar_PlayerHmHP)
}
case 3:
{
PlayerHmDmg[id] = get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[id] = get_pcvar_num(cvar_PlayerZmDmg)
}
}
}
return PLUGIN_HANDLED
}
public Advert(id)
{
ColorChat(id, GREEN, "%L", id, "ML_ADVERT1", '^1', '^3', '^1', '^3', '^1')
ColorChat(id, GREEN, "%L", id, "ML_ADVERT2", '^1', '^3', '^1', '^3', '^1')
if (can_advertise[id] == true)
{
set_task(get_pcvar_float(cvar_advert_delay), "Advert", id)
}
}
public SaveInfo(id)
{
new szData[256], szSave[32]
formatex(szData, charsmax(szData), "%i %i %i %i %i %i %i", PlayerLevel[id], PlayerXP[id], PlayerHmHP[id], PlayerZmHP[id], PlayerAP[id], PlayerHmDmg[id], PlayerZmDmg[id])
get_save_type(id, szSave, charsmax(szSave))
nvault_set(g_vault, szSave, szData)
}
public LoadInfo(id)
{
new szData[256], szInfo[7][33], szLoad[32]
get_save_type(id, szLoad, charsmax(szLoad))
nvault_get(g_vault, szLoad, szData, charsmax(szData))
parse(szData, szInfo[0], charsmax(szInfo[]), szInfo[1], charsmax(szInfo[]), szInfo[2], charsmax(szInfo[]), szInfo[3], charsmax(szInfo[]), szInfo[4], charsmax(szInfo[]), szInfo[5], charsmax(szInfo[]), szInfo[6], charsmax(szInfo[]))
PlayerLevel[id] = str_to_num(szInfo[0])
PlayerXP[id] = str_to_num(szInfo[1])
PlayerHmHP[id] = str_to_num(szInfo[2])
PlayerZmHP[id] = str_to_num(szInfo[3])
PlayerAP[id] = str_to_num(szInfo[4])
PlayerHmDmg[id] = str_to_num(szInfo[5])
PlayerZmDmg[id] = str_to_num(szInfo[6])
}
public ShopMenu(id)
{
new iMenu = menu_create("\y[LvL] Extra items", "ShopHandler")
new szBuffer[64]
new item_info[ITEM_INFO]
for(new i = 0; i < ITEMS_NUM; i++)
{
ArrayGetArray(ITEMS, i, item_info)
if (is_user_alive(id) && PlayerLevel[id] >= item_info[LEVEL] && item_info[PAY] == 1 && cs_get_user_money(id) >= item_info[PRICE] && ((item_info[TEAM] == 1 && !zp_get_user_zombie(id)) || (item_info[TEAM] == 2 && zp_get_user_zombie(id)) || item_info[TEAM] == 3))
{
formatex(szBuffer, charsmax(szBuffer), "\w%s\y %i$", item_info[NAME], item_info[PRICE])
}
if (is_user_alive(id) && PlayerLevel[id] >= item_info[LEVEL] && item_info[PAY] == 2 && zp_get_user_ammo_packs(id) >= item_info[PRICE] && ((item_info[TEAM] == 1 && !zp_get_user_zombie(id)) || (item_info[TEAM] == 2 && zp_get_user_zombie(id)) || item_info[TEAM] == 3))
{
formatex(szBuffer, charsmax(szBuffer), "\w%s\y %i %L", item_info[NAME], item_info[PRICE], id, "ML_AMMO_PACKS")
}
if(!is_user_alive(id) || (item_info[PAY] == 1 && cs_get_user_money(id) < item_info[PRICE]) || item_info[TEAM] == 1 && zp_get_user_zombie(id) || item_info[TEAM] == 2 && !zp_get_user_zombie(id))
{
formatex(szBuffer, charsmax(szBuffer), "\d%s\y %i$", item_info[NAME], item_info[PRICE])
}
if(!is_user_alive(id) || (item_info[PAY] == 2 && zp_get_user_ammo_packs(id) < item_info[PRICE]) || item_info[TEAM] == 1 && zp_get_user_zombie(id) || item_info[TEAM] == 2 && !zp_get_user_zombie(id))
{
formatex(szBuffer, charsmax(szBuffer), "\d%s\y %i %L", item_info[NAME], item_info[PRICE], id, "ML_AMMO_PACKS")
}
if (PlayerLevel[id] < item_info[LEVEL])
{
formatex(szBuffer, charsmax(szBuffer), "\d%s\d [\y%L level %i\d]", item_info[NAME], id, "ML_UNLOCK", item_info[LEVEL])
}
menu_additem(iMenu, szBuffer)
}
menu_display(id, iMenu)
return PLUGIN_CONTINUE
}
public ShopHandler(id, iMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
new item_info[ITEM_INFO]
ArrayGetArray(ITEMS, iItem, item_info)
if (!is_user_alive(id))
{
ColorChat(id, GREEN, "%L", id, "ML_YOU_ARE_DEAD", '^1')
}
else if(PlayerLevel[id] < item_info[LEVEL])
{
ColorChat(id, GREEN, "%L", id, "ML_NOT_REQUERED_LVL", '^1', '^4', item_info[NAME], '^1')
}
else if (zp_get_user_zombie(id) && item_info[TEAM] == 1)
{
ColorChat(id, GREEN, "%L", id, "ML_CANT_BUY_ZM", '^1')
}
else if (!zp_get_user_zombie(id) && item_info[TEAM] == 2)
{
ColorChat(id, GREEN, "%L", id, "ML_CANT_BUY_HM", '^1')
}
else if(cs_get_user_money(id) < item_info[PRICE] && item_info[PAY] == 1)
{
ColorChat(id, GREEN, "%L", id, "ML_NOT_ENOUGH_MONEY", '^1', '^4', item_info[NAME], '^1')
}
else if(zp_get_user_ammo_packs(id) < item_info[PRICE] && item_info[PAY] == 2)
{
ColorChat(id, GREEN, "%L", id, "ML_NOT_ENOUGH_AMMO_PACKS", '^1', '^4', item_info[NAME], '^1')
}
else
{
new iReturn = PLUGIN_CONTINUE
ExecuteForward(ITEM_BOUGHT, iReturn, id, iItem)
if(iReturn == PLUGIN_HANDLED)
{
goto plugin_handled
}
if (item_info[PAY] == 1)
{
cs_set_user_money(id, cs_get_user_money(id) - item_info[PRICE])
ColorChat(id, GREEN, "%L", id, "ML_BOUGHT_MONEY", '^1', '^4', item_info[NAME], '^1', '^4', item_info[PRICE], '^1')
}
if (item_info[PAY] == 2)
{
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - item_info[PRICE])
ColorChat(id, GREEN, "%L", id, "ML_BOUGHT_AMMO_PACKS", '^1', '^4', item_info[NAME], '^1', '^4', item_info[PRICE], '^1')
}
}
plugin_handled:
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public AdminMenu(id)
{
if (get_user_flags(id) & FLAG)
{
new iMenu = menu_create("\y[LvL] Admin Menu", "AdminMenuHandler")
new const szItemsName[][] = { "ML_ADMIN_GIVE_LEVELS", "ML_ADMIN_TAKE_LEVELS", "ML_ADMIN_SET_LEVEL", "ML_ADMIN_RESET_LEVEL" }
new szItems[64]
for (new i=0; i < sizeof szItemsName; i++)
{
formatex(szItems, charsmax(szItems), "%L", id, szItemsName[i])
menu_additem(iMenu, szItems)
}
menu_display(id, iMenu)
}
return PLUGIN_HANDLED
}
public AdminMenuHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_CONTINUE
}
switch(item)
{
case 0:
{
GiveLevels(id)
}
case 1:
{
TakeLevels(id)
}
case 2:
{
client_cmd(id,"messagemode SET_LEVELS")
}
case 3:
{
ResetLevels(id)
}
}
return PLUGIN_CONTINUE
}
public GiveLevels(id)
{
new iMenu = menu_create ("[LvL] Give Levels", "GiveLevelsHandler")
new num, players[32], szIndex, szIndex2[10], szPlayerName[32], szText[64], szText2[64]
get_players (players, num)
formatex(szText2, charsmax(szText2), "%L", id, "ML_ADMIN_AMOUNT_TO_GIVE", g_amount)
menu_additem(iMenu, szText2)
for (new i = 0; i < num; i++)
{
szIndex = players[i]
get_user_name(szIndex, szPlayerName, charsmax(szPlayerName))
num_to_str(szIndex, szIndex2, charsmax(szIndex2))
formatex(szText, charsmax(szText), "%s\r[\y%i\r]", szPlayerName, PlayerLevel[szIndex])
menu_additem(iMenu, szText, szIndex2, 0)
}
menu_display(id, iMenu)
return PLUGIN_CONTINUE
}
public TakeLevels(id)
{
new iMenu = menu_create ("[LvL] Take Levels", "TakeLevelsHandler")
new num, players[32], szIndex, szIndex2[10], szPlayerName[32], szText[64], szText2[64]
get_players (players, num)
formatex(szText2, charsmax(szText2), "%L", id, "ML_ADMIN_AMOUNT_TO_TAKE", g_amount)
menu_additem(iMenu, szText2)
for (new i = 0; i < num; i++)
{
szIndex = players[i]
get_user_name(szIndex, szPlayerName, charsmax(szPlayerName))
num_to_str(szIndex, szIndex2, charsmax(szIndex2))
formatex(szText, charsmax(szText), "%s\r[\y%i\r]", szPlayerName, PlayerLevel[szIndex])
menu_additem(iMenu, szText, szIndex2, 0)
}
menu_display(id, iMenu)
}
public GiveLevelsHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
AdminMenu(id)
return PLUGIN_HANDLED
}
switch(item)
{
case 0:
{
if(g_amount == 10)
{
g_amount = 1
GiveLevels(id)
}
else
{
g_amount++
GiveLevels(id)
}
}
}
new szData[6], szName[64], access, callback
menu_item_getinfo(menu, item, access, szData, charsmax(szData), szName, charsmax(szName), callback)
new szIndex = str_to_num(szData)
new lvl_plus_amount = PlayerLevel[szIndex]+g_amount
if (lvl_plus_amount >= get_pcvar_num(cvar_maxlevel))
{
PlayerLevel[szIndex] = get_pcvar_num(cvar_maxlevel)
if (get_pcvar_num(cvar_statsmode) == 1)
{
PlayerAP[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerZmDmg)
}
if (get_pcvar_num(cvar_statsmode) == 2)
{
PlayerAP[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerHmHP)
}
if (get_pcvar_num(cvar_statsmode) == 3)
{
PlayerHmDmg[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = get_pcvar_num(cvar_maxlevel)*get_pcvar_num(cvar_PlayerZmDmg)
}
GiveLevels(id)
return PLUGIN_HANDLED
}
else
{
PlayerLevel[szIndex] += g_amount
if (get_pcvar_num(cvar_statsmode) == 1)
{
PlayerAP[szIndex] += g_amount*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] += g_amount*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] += g_amount*get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[szIndex] += g_amount*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] += g_amount*get_pcvar_num(cvar_PlayerZmDmg)
}
if (get_pcvar_num(cvar_statsmode) == 2)
{
PlayerAP[szIndex] += g_amount*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] += g_amount*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] += g_amount*get_pcvar_num(cvar_PlayerHmHP)
}
if (get_pcvar_num(cvar_statsmode) == 3)
{
PlayerHmDmg[szIndex] += g_amount*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] += g_amount*get_pcvar_num(cvar_PlayerZmDmg)
}
GiveLevels(id)
}
return PLUGIN_CONTINUE
}
public TakeLevelsHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
AdminMenu(id)
return PLUGIN_HANDLED
}
switch(item)
{
case 0:
{
if(g_amount == 10)
{
g_amount = 1
TakeLevels(id)
}
else
{
g_amount++
TakeLevels(id)
}
}
}
new szData[6], szName[64], access, callback
menu_item_getinfo(menu, item, access, szData, charsmax(szData), szName, charsmax(szName), callback)
new szIndex = str_to_num(szData)
new lvl_minus_amount = PlayerLevel[szIndex]-g_amount
if (lvl_minus_amount <= 0)
{
PlayerLevel[szIndex] = 1
if (get_pcvar_num(cvar_statsmode) == 1)
{
PlayerAP[szIndex] = get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[szIndex] = get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = get_pcvar_num(cvar_PlayerZmDmg)
}
if (get_pcvar_num(cvar_statsmode) == 2)
{
PlayerAP[szIndex] = get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = get_pcvar_num(cvar_PlayerHmHP)
}
if (get_pcvar_num(cvar_statsmode) == 3)
{
PlayerHmDmg[szIndex] = get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = get_pcvar_num(cvar_PlayerZmDmg)
}
TakeLevels(id)
return PLUGIN_HANDLED
}
else
{
PlayerLevel[szIndex] -= g_amount
if (get_pcvar_num(cvar_statsmode) == 1)
{
PlayerAP[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerZmDmg)
}
if (get_pcvar_num(cvar_statsmode) == 2)
{
PlayerAP[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerHmHP)
}
if (get_pcvar_num(cvar_statsmode) == 3)
{
PlayerHmDmg[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] -= g_amount*get_pcvar_num(cvar_PlayerZmDmg)
}
TakeLevels(id)
}
return PLUGIN_HANDLED
}
public SetLevels(id)
{
new szArgv[33]
read_argv(1, szArgv, charsmax(szArgv))
AMOUNT[id] = str_to_num(szArgv)
if(AMOUNT[id] <= 0)
{
ColorChat(id, GREEN, "%L", id, "ML_WRONG_DATA_INPUT", '^1')
}
else
{
new iMenu = menu_create ("[LvL] Set Levels", "SetLevelsHandler")
new num, players[32], szIndex, szIndex2[10], szPlayerName[32], szText[64]
get_players (players, num)
for (new i = 0; i < num; i++)
{
szIndex = players[i]
get_user_name(szIndex, szPlayerName, charsmax(szPlayerName))
num_to_str(szIndex, szIndex2, charsmax(szIndex2))
formatex(szText, charsmax(szText), "%s\r[\y%i\r]", szPlayerName, PlayerLevel[szIndex])
menu_additem(iMenu, szText, szIndex2, 0)
}
menu_display(id, iMenu)
}
return PLUGIN_CONTINUE
}
public SetLevelsHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
AdminMenu(id)
return PLUGIN_HANDLED
}
new szData[6], szName[64], access, callback
menu_item_getinfo(menu, item, access, szData, charsmax(szData), szName, charsmax(szName), callback)
new szIndex = str_to_num(szData)
PlayerLevel[szIndex] = AMOUNT[id]
if (get_pcvar_num(cvar_statsmode) == 1)
{
PlayerAP[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerZmDmg)
}
if (get_pcvar_num(cvar_statsmode) == 2)
{
PlayerAP[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerHmHP)
}
if (get_pcvar_num(cvar_statsmode) == 3)
{
PlayerHmDmg[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = AMOUNT[id]*get_pcvar_num(cvar_PlayerZmDmg)
}
return PLUGIN_HANDLED
}
public ResetLevels(id)
{
new iMenu = menu_create ("[LvL] Reset Levels", "ResetLevelsHandler")
new num, players[32], szIndex, szIndex2[10], szPlayerName[32], szText[64]
get_players (players, num)
for (new i = 0; i < num; i++)
{
szIndex = players[i]
get_user_name(szIndex, szPlayerName, charsmax(szPlayerName))
num_to_str(szIndex, szIndex2, charsmax(szIndex2))
formatex(szText, charsmax(szText), "%s\r[\y%i\r]", szPlayerName, PlayerLevel[szIndex])
menu_additem(iMenu, szText, szIndex2, 0)
}
menu_display(id, iMenu)
}
public ResetLevelsHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
AdminMenu(id)
return PLUGIN_HANDLED
}
new szData[6], szName[64], access, callback
menu_item_getinfo(menu, item, access, szData, charsmax(szData), szName, charsmax(szName), callback)
new szIndex = str_to_num(szData)
PlayerLevel[szIndex] = 1
if (get_pcvar_num(cvar_statsmode) == 1)
{
PlayerAP[szIndex] = get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = get_pcvar_num(cvar_PlayerHmHP)
PlayerHmDmg[szIndex] = get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = get_pcvar_num(cvar_PlayerZmDmg)
}
if (get_pcvar_num(cvar_statsmode) == 2)
{
PlayerAP[szIndex] = get_pcvar_num(cvar_PlayerAP)
PlayerZmHP[szIndex] = get_pcvar_num(cvar_PlayerZmHP)
PlayerHmHP[szIndex] = get_pcvar_num(cvar_PlayerHmHP)
}
if (get_pcvar_num(cvar_statsmode) == 3)
{
PlayerHmDmg[szIndex] = get_pcvar_num(cvar_PlayerHmDmg)
PlayerZmDmg[szIndex] = get_pcvar_num(cvar_PlayerZmDmg)
}
ResetLevels(id)
return PLUGIN_HANDLED
}
stock set_user_fade(index)
{
message_begin(MSG_ONE_UNRELIABLE, g_msg_screenfade, _, index);
write_short((1 << 12) * 1);
write_short(floatround((1 << 12) * 0.1));
write_short(0x0000);
write_byte(0);
write_byte(170);
write_byte(255);
write_byte(150);
message_end();
}
stock get_save_type(id, data[], len)
{
switch(get_pcvar_num(cvar_save_type))
{
case 1: get_user_authid(id, data, len)
case 2: get_user_ip(id, data, len)
case 3: get_user_name(id, data, len)
}
}
/* zp_lvl_shop_register_item(const name[], price, level, team, pay) */
public native_register_item(iPlugin, iParams)
{
new item_info[ITEM_INFO]
get_string(1, item_info[NAME], charsmax(item_info[NAME]))
item_info[PRICE] = get_param(2)
item_info[LEVEL] = get_param(3)
item_info[TEAM] = get_param(4)
item_info[PAY] = get_param(5)
ArrayPushArray(ITEMS, item_info)
ITEMS_NUM++
return ITEMS_NUM - 1
}
/* zp_lvl_get_user_lvl(id) */
public native_get_user_lvl(id)
{
if (!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return -1
}
return PlayerLevel[id]
}
/* zp_lvl_get_user_xp(id) */
public native_get_user_xp(id)
{
if (!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return -1
}
return PlayerXP[id]
}
/* zp_lvl_get_xp_for_lvl(id) */
public native_get_user_xp_for_lvl(id)
{
if (!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return -1
}
return PlayerXpForLevel[id]
}
/* zp_lvl_get_max_lvl() */
public native_get_max_lvl()
{
new max_level = get_pcvar_num(cvar_maxlevel)
return max_level
}
public native_get_adminmenu(id)
{
return AdminMenu(id)
}
public native_get_shopmenu(id)
{
return ShopMenu(id)
}
public native_get_toplevel(id)
{
return show_top(id)
}