Allied Modders en español
Quiero unir estos 2 plugins - Versión para impresión

+- Allied Modders en español (https://amxmodx-es.com)
+-- Foro: SourceMod (https://amxmodx-es.com/Forum-SourceMod)
+--- Foro: Scripting (https://amxmodx-es.com/Forum-Scripting--32)
+--- Tema: Quiero unir estos 2 plugins (/Thread-Quiero-unir-estos-2-plugins)



Quiero unir estos 2 plugins - jbs - 19/04/2021

Buenas alguien tan amable de unir estos plugins, uno es de un sistema de niveles para zp y el otro es un top10 de niveles


top10:
Código PHP:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <csx>
#include <nvault>
#include <fakemeta>

#define PLUGIN    "Top10 + Levels"
#define AUTHOR    "Frnc + Bugsy"
#define VERSION    "1.0"

#define VAULT_MAGIC  0x6E564C54    //nVLT
#define VAULT_VERSION 0x0200        //second version

new const LEVELS[10000] = 
{
    8,    // 1
    11,    // 2
    14,    // 3
    17,    // 4
    20,    // 5
    23,    // 6
    26,    // 7
    29,    // 8
    32,    // 9
    35,    // 10
    38,    // 11
    41,    // 12
    44,    // 13
    47,    // 14
    50,    // 15
    53      // 16
}

new 
PFRAGS[33
new 
PLEVEL[33
new 
PDEADS[33]

new Array:
TopName
new Array:TopData

const MaxKeyLen  255;    //Max 255
const MaxValLen  512;    //Max 65535
const DataBuffer 128;    //Make this the greater of (MaxKeyLen / 4) or (MaxValLen / 4)

public plugin_init()
{
    register_plugin(PLUGINVERSIONAUTHOR)
    
    register_event
("DeathMsg""EventDeathMsg""a")
    
    register_clcmd
("say /level""printLevel")
    register_clcmd("say /top10""show_top")
    
    TopName 
ArrayCreate(1024)
    TopData ArrayCreate(1024)
}

public 
plugin_cfg()
    ReadVault("mro")

public 
plugin_end()
{
    ArrayDestroy(TopName)
    ArrayDestroy(TopData)
}

public 
ReadVault(const szVault[])
{
    new szFile[64], iFile
    
new iVaultMagiciVaultVersioniVaultEntries
    
new iKeyLeniValLeniTimeStamp
    
new szKey[MaxKeyLen+1], szVal[MaxValLen+1], RawData[DataBuffer]
    
    formatex
(szFile[get_datadir(szFilecharsmax(szFile))], charsmax(szFile), "/vault/%s.vault"szVault)
    
    iFile 
fopen(szFile"rb")
    
    
if(!iFile)
        return 0;
    
    
// Vault Magic
    fread_raw(iFileRawData1BLOCK_INT)
    iVaultMagic RawData[0]
    
    
if(iVaultMagic != VAULT_MAGIC)
        set_fail_state("Error reading nVault: Vault Magic")
    
    
// Vault Version
    fread_raw(iFileRawData1BLOCK_SHORT)
    iVaultVersion RawData[0] & 0xFFFF
    
    
if(iVaultVersion != VAULT_VERSION)
        set_fail_state("Error reading nVault: Vault Version")
    
    
// Vault Entries
    fread_raw(iFileRawData1BLOCK_INT)
    iVaultEntries RawData[0]

    server_print("nVault | Magic=%d Version=%d Entries=%d"iVaultMagiciVaultVersioniVaultEntries)
    server_print(" ")
    
    
for(new iEntry 0iEntry iVaultEntriesiEntry++)
    {
        // TimeStamp
        fread_raw(iFileRawData1BLOCK_INT)
        iTimeStamp RawData[0]
        
        
// Key Length
        fread_raw(iFileRawData1BLOCK_BYTE)
        iKeyLen RawData[0] & 0xFF
        
        
// Val Length
        fread_raw(iFileRawData1BLOCK_SHORT)
        iValLen RawData[0] & 0xFFFF
        
        
// Key Data
        fread_raw(iFileRawDataiKeyLenBLOCK_CHAR)
        ReadString(szKeyiKeyLencharsmax(szKey), RawData)
        
        
// Val Data
        fread_raw(iFileRawDataiValLenBLOCK_CHAR)
        ReadString(szValiValLencharsmax(szVal), RawData)
        
        
/*server_print("Entry=%d KeyLen=%d ValLen=%d TimeStamp=%d", iEntry, iKeyLen, iValLen, iTimeStamp)
        server_print("Key=^"%s^"", szKey)
        server_print("Val=^"%s^"", szVal)
        server_print(" ")*/
        
        ArrayPushString
(TopNameszKey)
        ArrayPushString(TopDataszVal)
        
        
if(iEntry 1022)
        {
            set_fail_state("Aumenta los numeros de la linea 133 y 134 en el codigo")
        }
    }
    fclose(iFile)
    return iVaultEntries
}

ReadString(szDestString[], iLeniMaxLenSourceData[])
{
    new iStrPos = -1
    
new iRawPos 0
    
    
while((++iStrPos iLen) && (iStrPos iMaxLen) && (iRawPos DataBuffer))
    {
        szDestString[iStrPos] = (SourceData[iRawPos] >> ((iStrPos 4) * 8)) & 0xFF
        
        
if(iStrPos &&((iStrPos 4) == 3))
            iRawPos++
    }
    szDestString[iStrPos] = EOS
}

public 
client_putinserver(id)
{
    PDEADS[id] = 0
    PLEVEL
[id] = 0
    PFRAGS
[id] = 0
    Load
(id)
}

public 
client_disconnect(id)

    Save(id
    PDEADS[id] = 0
    PLEVEL
[id] = 0
    PFRAGS
[id] = 0
}

public 
EventDeathMsg()
{
    new killer read_data(1)
    new victim read_data(2)
    
    
if(victim == killer
    {
        return PLUGIN_CONTINUE
    
}
    
    
if(victim)
        PDEADS[victim]++
    
    
if(killer)
        PFRAGS[killer]++
    
    check_level
(killer
    return PLUGIN_CONTINUE
}

public 
check_level(id)
{
    if(PFRAGS[id] >= LEVELS[PLEVEL[id]])
    {
        PLEVEL[id]++
        print_color(id"!gSubiste A Nivel: !t%d"PLEVEL[id])
    }
}

public 
printLevel(id
{
    new newlevel LEVELS[PLEVEL[id]]-PFRAGS[id]
    print_color(id"!gTu Nivel Es !t%d !gY Te Faltan !t%d !gFrags Para Subir"PLEVEL[id], newlevel)
}

public 
Load(id)
{
    new timestamp
    
new g_vault nvault_open("mro")
    new name[32], key[40], data[200], szfrags[15], szLevel[15], szMuertes[15]
    get_user_name(idnamecharsmax(name))
    formatex(keycharsmax(key), "^"%s^""name)
    
    
if(nvault_lookup(g_vaultkeydatacharsmax(data), timestamp))
    {
        parse(dataszfrags14szLevel14szMuertes14)
        PFRAGS[id] = str_to_num(szfrags)
        PLEVEL[id] = str_to_num(szLevel)
        PDEADS[id] = str_to_num(szMuertes)
    }
    nvault_close(g_vault)
}

public 
Save(id)
{
    new g_vault nvault_open("mro")
    new name[32], key[40], szValue[64]
    get_user_name(id,name,charsmax(name))
    formatex(keycharsmax(key), "^"%s^""name)
    formatex(szValuecharsmax(szValue), "%d %d %d"PFRAGS[id], PLEVEL[id], PDEADS[id])
    nvault_set(g_vaultkeyszValue)
    nvault_close(g_vault)
}

public 
show_top(id)
{
    if(ArraySize(TopName) > 511)
    {
        print_color(id"AUMENTAMEEEE Sort[512 <- QUIERO MAAS][4]")
        return PLUGIN_HANDLED
    
}
    
    
new ff[9], ll[9], mm[9], temp[9*3], count
    
static Sort[512][4// Pendiente aca
    
    
for(new iArraySize(TopName); i++)
    {
        ArrayGetString(TopDataitempcharsmax(temp))
        parse(tempffcharsmax(ff), llcharsmax(ll), mmcharsmax(mm))
        
        Sort
[count][0] = i
        Sort
[count][1] = str_to_num(ll)
        Sort[count][2] = str_to_num(ff)
        Sort[count][3] = str_to_num(mm
        count++
    }
    
    SortCustom2D
(Sortcount"compare_xp")
    
    
new motd[1501], iLen
    iLen 
format(motdsizeof motd 1"<body bgcolor=#000000 text=#98f5ff><pre>")
    iLen += format(motd[iLen], (sizeof motd 1) - iLen,"%s %-22.22s %3s %6s %6s^n""#""Name""Nivel""Asesinatos""Muertes")
    
    
new clamp(count010)
    new name[32]
    
    
for(new 0yx++)
    {
        ArrayGetString(TopNameSort[x][0], namecharsmax(name))
        iLen += format(motd[iLen], (sizeof motd 1) - iLen"%d %-22.22s %6d %6d %6d^n"1nameSort[x][1],Sort[x][2],Sort[x][3])
    }
    iLen += format(motd[iLen], (sizeof motd 1) - iLen,"</body></pre>")
    show_motd(id,motd"Top 10")
    
    
return PLUGIN_CONTINUE
}

public 
compare_xp(elem1[], elem2[])
{
    if(elem1[1] > elem2[1])
        return -1
    
else if(elem1[1] < elem2[1])
        return 1
    
    
return 0
}

stock print_color(id, const msg[], any:...)
{
    static buffer[512], msg_SayText 0
    
    
if(!msg_SayText)
        msg_SayText get_user_msgid("SayText")
        
    vformat
(buffercharsmax(buffer), msg3)
    replace_allbuffercharsmaxbuffer ), "!n""^1" ); // Default Color
    replace_allbuffercharsmaxbuffer ), "!g""^4" ); // Green Color
    replace_allbuffercharsmaxbuffer ), "!t""^3" ); // Team Color
        
    message_begin
(MSG_ONE_UNRELIABLEmsg_SayText_id)
    write_byte(id)
    write_string(buffer)
    message_end()


zp niveles:
Código PHP:
/*================================================================================
 
 ***********************************************************
 ************ [ [ZP] Ultimate LvL System 2.0 ] *************
 ***********************************************************
 **************** [ PLUGIN STATUS: PUBLIC ] ****************
 ***********************************************************
 
 -------------------
 -*- Description -*-
 -------------------
 
 This is leveling system created for Zombie Plague 4.3.
 By default: 1Kill=2XP, 750DMG=1XP and XP need for new level is:
 XpForLevel = 5 * Level + 3
 When you are at higher level, you are more powerful.
 
 --------------------
 -*- Requirements -*-
 --------------------
 
 * Mods: Zombie Plague 4.3
 * AMXX: Version 1.8.0 or later
 * Module: amxmodx, amxmisc, zombieplague, nvault, fun, colorchat,
   hamsandwich, cstrike, engine
 
 ----------------
 -*- Commands -*-
 ----------------
 
 * /lvlshop - open shop menu
 * /lvlstats - show your stats in chat
 * /lvladmin - show admin menu
 
 -------------------------------
 -*- CVARS and Customization -*-
 -------------------------------
 
 For a complete and in-depth cvar list, look at the zp_lvl_system.cfg file
 located in the amxmodx\configs directory.
 
 -----------------
 -*- Changelog -*-
 -----------------
 
 * v1.0 - Basic function created
 * v1.1 - Shop added to plugin
 * v1.2 - Bug fixes at shop
 * v1.3 - Configuration file added
 * v1.4 - Added showing info while you cross over player with mouse
 * v1.5 - Added Cvar for setting X and Y position of HUD
       - Removed function for buying levels (cause its sucks)
       - Code optimized
 * v1.6 - Added Multy-Lingual System (LANG)
 * v1.7 - Added Natives for registering items in shop. (Payed with Money($))
 * v1.8 - Now items can be payed via Money($) or via Ammo Packs(depending on item)
 * v1.9 - Added lot of CVARs.
       - Added Level UP sound
       - Added prefix [ LVL: %i ]
 * v2.0 - Now you can get XP while making damage or killing.
       - Added admin menu
       - Added system for calculating needed xp for new level
 
 ---------------
 -*- Credits -*-
 ---------------
 
 * KliPPy   - For theaching me to do job with natives.
 * dEfuse[R]s^|-BS - I used some code from his level plugin 
     (Levels 1.0)
 * Re.Act!ve      - I used some code from his level plugin
     ([ZP] Server Addon: LevelUp System XP 3.2b)
     
=================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <zombieplague>
#include <nvault>
#include <fun>
#include <colorchat>
#include <hamsandwich>
#include <cstrike>
#include <engine>

#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_BAN

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(PLUGINVERSIONAUTHOR)
 
 
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")
 
 
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_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""1"// 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""50")
 
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""50")
 
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""1"// 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_CONTINUEFP_CELLFP_CELL)
 
ITEMS ArrayCreate(ITEM_INFO16)
 
 
g_maxplayers get_maxplayers()
}
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)
}
public 
plugin_cfg()
{
 new 
cfgdir[33]
 
get_configsdir(cfgdircharsmax(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(idszNamecharsmax(szName))
 
read_args(szArgscharsmax(szArgs))
 
remove_quotes(szArgs)
 if(!
is_user_alive(id))
 {
 
ColorChat(0GREEN"^1*DEAD*^4 [ LVL: %i ]^3 %s^1 : %s"PlayerLevel[id], szNameszArgs)
 }
 if(
is_user_alive(id))
 {
 
ColorChat(0GREEN"[ LVL: %i ]^3 %s^1 : %s"PlayerLevel[id], szNameszArgs)
 }
 return 
PLUGIN_HANDLED
        
}
        return PLUGIN_CONTINUE
}
public 
hide_status(id)
{
    set_hudmessage(0000.00.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(00255, -1.00.6010.017.00.010.014)
 
show_hudmessage(id,"[%L: %s]^n[%L: %i]"id"ML_NAME"player_nameid"ML_LEVEL"PlayerLevel[pid])
 }
 if (
zp_get_user_zombie(pid) && zp_get_user_zombie(id))
 {
 
set_hudmessage(25500, -1.00.6010.017.00.010.014)
 
show_hudmessage(id,"[%L: %s]^n[%L: %i]"id"ML_NAME"player_nameid"ML_LEVEL"PlayerLevel[pid])
 }
 return 
PLUGIN_CONTINUE
 
}
 return 
PLUGIN_HANDLED
}
public 
Stats(id)
{
 switch(
get_pcvar_num(cvar_statsmode))
 {
 case 
1ColorChat(idGREEN"[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 
2ColorChat(idGREEN"[LVL]^3 [^1ZM HP:^4+%i^3] [^1HM HP:^4+%i^3] [^1HM AP:^4+%i^3]"PlayerZmHP[id], PlayerHmHP[id], PlayerAP[id])
 case 
3ColorChat(idGREEN"[LVL]^3 [^1HM DMG:^4+%i^3] [^1ZM DMG:^4+%i^3]"PlayerHmDmg[id], PlayerZmDmg[id])
 }
}
public 
TakeDamage(victiminflictorattackerFloat:damagedamage_bits)
{
 if (
get_pcvar_num(cvar_statsmode) == || get_pcvar_num(cvar_statsmode) == 3)
 {
 if (!
zp_get_user_zombie(attacker)) 
 {
 if (
is_user_alive(attacker))
 {
 
SetHamParamFloat(4damage 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(4damage 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(idinfector)
{
 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] = 5*PlayerLevel[id]+3
 
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(idzp_get_user_ammo_packs(id) + get_pcvar_num(cvar_lvlrevard))
 
ColorChat(idGREEN"%L"id"ML_REWARD1"'^1')
 
ColorChat(idGREEN"%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(idszAuthIDcharsmax(szAuthID))
 
get_user_ip(idszIPcharsmax(szIP))
 if(!
equal(szAuthID"VALVE_ID_LAN"))
 {
 
formatex(szDatacharsmax(szData), "^"%s^" ^"^" ^"b^" ^"ce^""szAuthID)
 }
 else
 {
 
formatex(szDatacharsmax(szData), "^"%s^" ^"^" ^"b^" ^"de^""szIP)
 }
 
write_file(g_users_initszData)
 
ColorChat(idGREEN"%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(idszPlayerNamecharsmax(szPlayerName))
 
ColorChat(0GREEN"%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(idinfector)
{
 if (!
is_user_alive(id)) return
 if (
get_pcvar_num(cvar_statsmode) == || get_pcvar_num(cvar_statsmode) == 2)
 {
 
set_user_health(idget_user_health(id) + PlayerZmHP[id])
 }
 if (
PlayerLevel[id] == get_pcvar_num(cvar_maxlevel) && get_pcvar_num(cvar_giveinfbomb) == 1  && zp_get_user_zombie(id))
 {
 new 
random random_num(016)
 if ((
random == || random == 14) && !zp_is_survivor_round())
 {
 
give_item(id"weapon_hegrenade")
 
ColorChat(idGREEN"%L"id"ML_INFECTION_GRENADE1"'^1''^4''^1')
 }
 
ColorChat(idGREEN"%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
(playersnum)
 
 for(new 
id 1id numid++)
 {
 
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) == || get_pcvar_num(cvar_statsmode) == 2)
 {
 
set_user_armor(idget_user_health(id) + PlayerAP[id])
 
set_user_health(idget_user_armor(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(percentcharsmax(percent), "%")
 if(!
is_user_alive(id))  
 
{  
 
new target entity_get_int(idEV_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(idg_msg_sync"[ %L: %i ]"id"ML_LEVEL"PlayerLevel[target])
 }
 else
 {
 
ShowSyncHudMsg(idg_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(idg_msg_sync"[ %L: %i ]"id"ML_LEVEL"PlayerLevel[id])
 }
 else
 {
 
ShowSyncHudMsg(idg_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
}
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(idGREEN"%L"id"ML_ADVERT1"'^1''^3''^1''^3''^1')
 
ColorChat(idGREEN"%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(szDatacharsmax(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(idszSavecharsmax(szSave))
 
nvault_set(g_vaultszSaveszData)
}
public 
LoadInfo(id)
{
 new 
szData[256], szInfo[7][33], szLoad[32]
 
get_save_type(idszLoadcharsmax(szLoad))
 
nvault_get(g_vaultszLoadszDatacharsmax(szData))
 
parse(szDataszInfo[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[ZP] LvL Shop""ShopHandler")
 new 
szBuffer[64]
 new 
item_info[ITEM_INFO]
 for(new 
0ITEMS_NUMi++)
 {
 
ArrayGetArray(ITEMSiitem_info)
 if (
is_user_alive(id) && PlayerLevel[id] >= item_info[LEVEL] && item_info[PAY] == && cs_get_user_money(id) >= item_info[PRICE] && ((item_info[TEAM] == && !zp_get_user_zombie(id)) || (item_info[TEAM] == && zp_get_user_zombie(id)) || item_info[TEAM] == 3))
 {
 
formatex(szBuffercharsmax(szBuffer), "\w%s -\y %i$"item_info[NAME], item_info[PRICE])
 }
 if (
is_user_alive(id) && PlayerLevel[id] >= item_info[LEVEL] && item_info[PAY] == && zp_get_user_ammo_packs(id) >= item_info[PRICE] && ((item_info[TEAM] == && !zp_get_user_zombie(id)) || (item_info[TEAM] == && zp_get_user_zombie(id)) || item_info[TEAM] == 3))
 {
 
formatex(szBuffercharsmax(szBuffer), "\w%s -\y %i %L"item_info[NAME], item_info[PRICE], id"ML_AMMO_PACKS")
 }
 if (
PlayerLevel[id] < item_info[LEVEL])
 {
 
formatex(szBuffercharsmax(szBuffer), "\r%s - %L %iLvL"item_info[NAME], id"ML_UNLOCK"item_info[LEVEL])
 }
 if(!
is_user_alive(id) || (item_info[PAY] == && cs_get_user_money(id) < item_info[PRICE]) || item_info[TEAM] == && zp_get_user_zombie(id) || item_info[TEAM] == && !zp_get_user_zombie(id))
 {
 
formatex(szBuffercharsmax(szBuffer), "\d%s - %i$"item_info[NAME], item_info[PRICE])
 }
 if(!
is_user_alive(id) || (item_info[PAY] == && zp_get_user_ammo_packs(id) < item_info[PRICE]) || item_info[TEAM] == && zp_get_user_zombie(id) || item_info[TEAM] == && !zp_get_user_zombie(id))
 {
 
formatex(szBuffercharsmax(szBuffer), "\d%s - %i %L"item_info[NAME], item_info[PRICE], id"ML_AMMO_PACKS")
 }
 
menu_additem(iMenuszBuffer)
 }
 
menu_display(idiMenu)
}
public 
ShopHandler(idiMenuiItem)
{
 if(
iItem == MENU_EXIT)
 {
 
menu_destroy(iMenu)
 return 
PLUGIN_HANDLED
 
}
 
 new 
item_info[ITEM_INFO]
 
ArrayGetArray(ITEMSiItemitem_info)
 
 if (!
is_user_alive(id))
 {
 
ColorChat(idGREEN"%L"id"ML_YOU_ARE_DEAD"'^1')
 }
 else if(
PlayerLevel[id] < item_info[LEVEL])
 {
 
ColorChat(idGREEN"%L"id"ML_NOT_REQUERED_LVL"'^1''^4'item_info[NAME], '^1')
 }
 else if (
zp_get_user_zombie(id) && item_info[TEAM] == 1)
 {
 
ColorChat(idGREEN"%L"id"ML_CANT_BUY_ZM"'^1')
 }
 else if (!
zp_get_user_zombie(id) && item_info[TEAM] == 2)
 {
 
ColorChat(idGREEN"%L"id"ML_CANT_BUY_HM"'^1')
 }
 else if(
cs_get_user_money(id) < item_info[PRICE] && item_info[PAY] == 1)
 {
 
ColorChat(idGREEN"%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(idGREEN"%L"id"ML_NOT_ENOUGH_AMMO_PACKS"'^1''^4'item_info[NAME], '^1')
 }
 else
 {
 new 
iReturn PLUGIN_CONTINUE
 ExecuteForward
(ITEM_BOUGHTiReturnidiItem)
 if(
iReturn == PLUGIN_HANDLED)
 {
 goto 
plugin_handled
 
}
 if (
item_info[PAY] == 1)
 {
 
cs_set_user_money(idcs_get_user_money(id) - item_info[PRICE])
 
ColorChat(idGREEN"%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(idzp_get_user_ammo_packs(id) - item_info[PRICE])
 
ColorChat(idGREEN"%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=0sizeof szItemsNamei++)
 {
 
formatex(szItemscharsmax(szItems), "%L"idszItemsName[i])
 
menu_additem(iMenuszItems)
 }
 
menu_display(idiMenu)
 }
}
public 
AdminMenuHandler(idmenuitem)
{
 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 
numplayers[32], szIndexszIndex2[10], szPlayerName[32], szText[64], szText2[64]
 
get_players (playersnum)
 
formatex(szText2charsmax(szText2), "%L"id"ML_ADMIN_AMOUNT_TO_GIVE"g_amount)
 
menu_additem(iMenuszText2)
 for (new 
0numi++) 
 {
 
szIndex players[i]
 
get_user_name(szIndexszPlayerNamecharsmax(szPlayerName))
 
num_to_str(szIndexszIndex2charsmax(szIndex2))
 
formatex(szTextcharsmax(szText), "%s\r[\y%i\r]"szPlayerNamePlayerLevel[szIndex])
 
menu_additem(iMenuszTextszIndex20)
 }
 
menu_display(idiMenu)
 return 
PLUGIN_CONTINUE
}
public 
TakeLevels(id)
{
 new 
iMenu menu_create ("[LvL] Take Levels""TakeLevelsHandler")
 new 
numplayers[32], szIndexszIndex2[10], szPlayerName[32], szText[64], szText2[64]
 
get_players (playersnum)
 
formatex(szText2charsmax(szText2), "%L"id"ML_ADMIN_AMOUNT_TO_TAKE"g_amount)
 
menu_additem(iMenuszText2)
 for (new 
0numi++) 
 {
 
szIndex players[i]
 
get_user_name(szIndexszPlayerNamecharsmax(szPlayerName))
 
num_to_str(szIndexszIndex2charsmax(szIndex2))
 
formatex(szTextcharsmax(szText), "%s\r[\y%i\r]"szPlayerNamePlayerLevel[szIndex])
 
menu_additem(iMenuszTextszIndex20)
 }
 
menu_display(idiMenu)
}
public 
GiveLevelsHandler(idmenuitem)
{
 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], accesscallback
 menu_item_getinfo
(menuitemaccessszDatacharsmax(szData), szNamecharsmax(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(idmenuitem)
{
 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], accesscallback
 menu_item_getinfo
(menuitemaccessszDatacharsmax(szData), szNamecharsmax(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(1szArgvcharsmax(szArgv))
 
AMOUNT[id] = str_to_num(szArgv)
 if(
AMOUNT[id] <= 0)
 {
 
ColorChat(idGREEN"%L"id"ML_WRONG_DATA_INPUT"'^1')
 }
 else
 {
 new 
iMenu menu_create ("[LvL] Set Levels""SetLevelsHandler")
 new 
numplayers[32], szIndexszIndex2[10], szPlayerName[32], szText[64]
 
get_players (playersnum)
 for (new 
0numi++) 
 {
 
szIndex players[i]
 
get_user_name(szIndexszPlayerNamecharsmax(szPlayerName))
 
num_to_str(szIndexszIndex2charsmax(szIndex2))
 
formatex(szTextcharsmax(szText), "%s\r[\y%i\r]"szPlayerNamePlayerLevel[szIndex])
 
menu_additem(iMenuszTextszIndex20)
 }
 
menu_display(idiMenu)
 }
 return 
PLUGIN_CONTINUE
}
public 
SetLevelsHandler(idmenuitem)
{
 if(
item == MENU_EXIT)
 {
 
AdminMenu(id)
 return 
PLUGIN_HANDLED
 
}
 new 
szData[6], szName[64], accesscallback
 menu_item_getinfo
(menuitemaccessszDatacharsmax(szData), szNamecharsmax(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 
numplayers[32], szIndexszIndex2[10], szPlayerName[32], szText[64]
 
get_players (playersnum)
 for (new 
0numi++) 
 {
 
szIndex players[i]
 
get_user_name(szIndexszPlayerNamecharsmax(szPlayerName))
 
num_to_str(szIndexszIndex2charsmax(szIndex2))
 
formatex(szTextcharsmax(szText), "%s\r[\y%i\r]"szPlayerNamePlayerLevel[szIndex])
 
menu_additem(iMenuszTextszIndex20)
 }
 
menu_display(idiMenu)
}
public 
ResetLevelsHandler(idmenuitem)
{
 if(
item == MENU_EXIT)
 {
 
AdminMenu(id)
 return 
PLUGIN_HANDLED
 
}
 new 
szData[6], szName[64], accesscallback
 menu_item_getinfo
(menuitemaccessszDatacharsmax(szData), szNamecharsmax(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_UNRELIABLEg_msg_screenfade_index);
 
write_short((<< 12) * 1); 
 
write_short(floatround((<< 12) * 0.1));
 
write_short(0x0000);
 
write_byte(0);
 
write_byte(170);
 
write_byte(255); 
 
write_byte(150); 
 
message_end();
}
stock get_save_type(iddata[], len)
{
 switch(
get_pcvar_num(cvar_save_type)) 
 {
 case 
1get_user_authid(iddatalen)
 case 
2get_user_ip(iddatalen)
 case 
3get_user_name(iddatalen)
 }
}

/* zp_lvl_shop_register_item(const name[], price, level, team, pay) */
public native_register_item(iPluginiParams)
{
 new 
item_info[ITEM_INFO]
 
get_string(1item_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(ITEMSitem_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