AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   [Help] Native error ZP XP (https://forums.alliedmods.net/showthread.php?t=324122)

elmedin 05-06-2020 19:26

[Help] Native error ZP XP
 
Hey im having an error when im trying to use the natives from this plugin;

Error message:

Code:

L 05/07/2020 - 01:25:21: [AMXX]    [0] zombie_xp.sma::native_zx_get_user_level (line 908)

L 05/07/2020 - 01:25:21: Unhandled dynamic native error

L 05/07/2020 - 01:25:21: [AMXX] Displaying debug trace (plugin "Zombie_Plague_Nightmare.amxx")

L 05/07/2020 - 01:25:21: [AMXX] Run time error 10: native error (native "zx_get_user_level")

L 05/07/2020 - 01:25:21: [AMXX]    [0] Zombie_Plague_Nightmare.sma::ShowHUD (line 10561)


And its coming from the zombie xp plugin

PHP Code:

/*===============================================================================
**Zombie XP system By K1llerZM**

=* Info *=
*- Add xp system (getting xp when killing zombie - infecting human )
*- Add the Abilty to register Items That will be unlocked with level ( non registred yet )
*- By dafult there 75 LEVELS
*- ITEM TEAM SUPPORT (human and zombie only)

=* Natives *=
*- zx_get_user_xp(id) 
*- zx_get_user_level(id)
*- zx_set_user_xp(id , amount)
*- zx_set_user_level(id , amount)
*- zx_get_next_class(id)
*- zx_get_current_class(id)
*- zx_get_registered_classes_count()
*- zx_set_next_class(id , const classid[])
*-  zx_register_zombie_class(const name[] , const description[] , const model[] ,const claw_model[] , health , Float:speed , Float:gravity , level)
*- zx_register_extra_item(const name[] , item_level , team)

=* Forward *=
*- zx_extra_item_selected_post(id , itemid)
*- zx_zombie_class_selected_post(id , classid)
*- zx_extra_item_selected_pre(id , itemid)

=* Commands *= 
*- say /xpmenu // show main menu

=* Updates  *=
*- v1.0 - first release , test . . .
*- v1,0a - some bugs fixed
*- v1,1 - fixed Native errors
*- v1.2 - fixed Somethings Thanks Donii
        - added cvar Creator
        - added other cvars
*- v1.3 - Fixed Native Params
        - Added support team chat
*- v1.4 - Add Zombie Classes System
*- v1.5 - Fixed Bugs According Zombie Classes System
*- v1.7 - Add Credtis
*- v1.8 - 

=*= Creditis =*=
*- DoNii - Some Fixes     
*- Dias 'Pednragon' Leon - Some help in models
*- ZinoZack - level up sound
*- Tenebere - Test and FeedBack
*- Arion - for say commands duplicates

*- Author Notes
*- You Aren't allowed to copy/paste any code without credits

================================================================================*/
/*=============================================================================== 
START OF PLUGIN
================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <nvault>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>
#include <cs_maxspeed_api>
#include <cs_weap_restrict_api>
#include "zx_const.cfg"
#include "zx_zombie_vars.cfg"
#include "zx_allowed_weapon.cfg"

#define PLUGIN "Zombie XP system"
#define VERSION "1.8"
#define AUTHOR "K1llerZM"

#define TEAM_ZOM (1<<0)
#define TEAM_HUM (1<<1)
#define is_user_valid(%1) (1 <= %1 <= g_MaxPlayers)
#define TASK_HUD_REMOVE 100

native cs_set_player_view_model(idweaponid, const view_model[])
native cs_reset_player_view_model(idweaponid)
native cs_set_player_weap_model(idweaponid, const weapon_model[])
native cs_reset_player_weap_model(idweaponid)
native cs_set_player_model(id, const model[])

// cvar Vars
new cvar_kill_xp cvar_hs_xp cvar_infect_xp cvar_save_type cvar_max cvar_allow_show cvar_show_type cvar_extra_item_enabled cvar_hud_r cvar_hud_b cvar_hud_g cvar_allow_classes
// XP Vars
new playerxp[33] , playerlvl[33] , lvl_vault xp_vault 
// Messages Vars
new g_saytxt 
new fade    
// Extra Item Varsx
new Array:i_name
new Array:i_lvl
new Array:i_team
new zx_items_count
new zx_item_selected_post zx_fw_return 
new zx_item_selected_pre pre_select_return
// Other Stuff
new g_MaxPlayers 
new zx_hud
new red green blue
new xp_change[3][33] , xp
new selected[33]
new 
sound[64] = "misc/zp_level_up.wav"

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
// Events
    
register_event("DeathMsg","event_death","a")
    
    
// Cvars
    
register_cvar("zombie_xp_version" VERSION FCVAR_SERVER)
    
    
cvar_kill_xp register_cvar("zx_kill_xp" "25")        // xp for every kill
    
    
cvar_hs_xp register_cvar("zx_headshot_xp" "50")        // xp for every kill with headshot
    
    
cvar_infect_xp register_cvar("zx_infect_xp" "35")      // xp for infect
    
    
cvar_max register_cvar("zx_max_level" "75")        // max level whenever you increase here increase limit in zx_const.cfg 
    
    
cvar_save_type register_cvar("zx_save_in" "1")      // save type : 1 = name , 2 = ip , 3 = staemid
    
    
cvar_allow_show register_cvar("zx_allow_show_xp" "1")  // allow show xp hud when killing (+ XP)
    
    
cvar_show_type register_cvar("zx_show_type" "1")     //  1 = hud wtih colors  - 0 = hud with normal color 
    
    
cvar_extra_item_enabled register_cvar("zx_allow_extra_items" "1"// allow extra items
    
    
cvar_hud_b  register_cvar("zx_hud_blue" "0")        // 
    
    
cvar_hud_g register_cvar("zx_hud_green" "255")
    
    
cvar_hud_r register_cvar("zx_hud_red" "0")    
    
    
cvar_allow_classes register_cvar("zx_allow_zombie_classes""1")
    
    
// Ham
    
RegisterHam(Ham_TakeDamage "player" "func_damage"// when user take damage , used for damage bonus
    
RegisterHam(Ham_Spawn "player" "func_spawn"// when user spawn not round start
    
    // Vaults
    
lvl_vault nvault_open("lvl_bank")
    
xp_vault nvault_open("xp_bank")
    
    
// Commands - last 2 not say commands used in console only
    
register_clcmd("say" "func_say"// used for prefix 
    
    
register_clcmd("say_team" "func_say_team"// team perfix
    
    
register_clcmd("say /xpmenu" "funcs"// show main menu
    
    
register_clcmd("say xpmenu" "funcs"// showing main menu
    
    
register_clcmd("info" "func_info"// option 2 in main menu
    
    
register_clcmd("xpitems" "func_menu"// items menu - option 1 
    
    
register_clcmd("zcnemu" "zclasses_menu")
    
    
// Forwards
    
zx_item_selected_post CreateMultiForward("zx_extra_item_selected_post" ET_CONTINUE FP_CELL FP_CELL)
    
zx_item_selected_pre CreateMultiForward("zx_extra_item_selected_pre" ET_CONTINUE FP_CELL FP_CELL)
    
zx_class_fw CreateMultiForward("zx_zombie_class_selected_post" ET_CONTINUE FP_CELL FP_CELL)
    
    
// Messages
    
fade get_user_msgid("ScreenFade")
    
g_saytxt get_user_msgid ("SayText")
    
register_message (g_saytxt"avoid_duplicated"// Thanks Arion LOL
    
    // Other Stuff
    
g_MaxPlayers get_maxplayers()
    
zx_hud CreateHudSyncObj()
    
register_dictionary("zombie_xp.txt")
}

public 
plugin_precache()
{
    
// Arrays
    
i_lvl ArrayCreate(,1)
    
i_name ArrayCreate(32 1)
    
i_team ArrayCreate(1,1)
    
Zc_Name ArrayCreate(64 ,1)
    
Zc_Desc ArrayCreate(64 ,1)
    
Zc_Model ArrayCreate(64 ,1)
    
Zc_Claw ArrayCreate(64 ,1)
    
Zc_Gravity ArrayCreate(,1)
    
Zc_speed ArrayCreate(1,1)
    
Zc_health ArrayCreate(1,1)
    
Zc_level ArrayCreate(1,1)
    
precache_sound(sound)
}


public 
plugin_cfg()
{
    new 
file[64]
    
get_configsdir(file 63)
    
format(file 63 "%s/zombie_xp.cfg" ,file)
    
    if(!
file_exists(file))
        
create_cvars_file()
}

public 
avoid_duplicated (msgIdmsgDestreceiver)
{
    return 
PLUGIN_HANDLED
}

// user spawn
public func_spawn(id)
{
    
    if (
playerlvl[id] == 0)
        
playerlvl[id] = 1
    
    
if(is_user_alive(id))
        
set_task(0.1 "zx_hud_show" id+TASK_HUD_REMOVE __"b"// show_hud
    //give_spawn_bonus(id)
    
set_task(1.0 "give_spawn_bonus"id)
    
    
}
// Show Hud
public zx_hud_show(id)
{
    
id -= TASK_HUD_REMOVE
    
    
if(is_user_valid(id))
    {
        
red get_pcvar_num(cvar_hud_r)
        
green get_pcvar_num(cvar_hud_g)
        
blue get_pcvar_num(cvar_hud_b)
        
set_hudmessage(redgreenblue0.00.3106.01.10.00.0, -1)
        if (
playerlvl[id] >= get_pcvar_num(cvar_max))
            
ShowSyncHudMsg(id ,zx_hud "[Zombie XP system]^n[XP : %i | MAXED]^n[LEVEL : %i]" playerxp[id] , playerlvl[id])
        else
            
ShowSyncHudMsg(id ,zx_hud "[Zombie XP system]^n[XP : %i | %i]^n[LEVEL : %i]" playerxp[id] , level[playerlvl[id]] , playerlvl[id])
    }
}

// Give Damage Bonus
public func_damage(victimidinflictorattackerFloat:damagedamagebits)
{
    if(
is_user_valid(attacker))
    {
        if (
playerlvl[attacker] >= && zp_get_user_human(attacker))
            
SetHamParamFloat(,damage 1.0)
        
        if (
playerlvl[attacker] >= 15 && zp_get_user_human(attacker))
            
SetHamParamFloat(damage 1.1)
        
        if (
playerlvl[attacker] >= 20 && zp_get_user_human(attacker))
            
SetHamParamFloat(damage 1.3)
        
        if (
playerlvl[attacker] >= 30 && zp_get_user_human(attacker))
            
SetHamParamFloat(damage 1.5 )
        
        if (
playerlvl[attacker] >= && zp_get_user_zombie(attacker))
            
SetHamParamFloat(damage 5.0)    
        
        if (
playerlvl[attacker] >= 10 && zp_get_user_zombie(attacker))
            
SetHamParamFloat(damage 20.0)
        
        if (
playerlvl[attacker] >= 20 && zp_get_user_zombie(attacker))
            
SetHamParamFloat(damage 40.0)
        
        if (
playerlvl[attacker] >= 30 && zp_get_user_zombie(attacker))
            
SetHamParamFloat(damage 50.0)
    }
}

// Give Some Bonus
public give_spawn_bonus(id)
{
    if(
is_user_alive(id) && is_user_valid(id))
    {
        if (
playerlvl[id] >= 5)
        {
            
set_bonus(id 150 30)
        }
        if (
playerlvl[id] >= 10)
        {
            
set_bonus(id 200 50)
        }
        if (
playerlvl[id] >= 15)
        {
            
set_bonus(id 250 80)
        }
        if (
playerlvl[id] >= 20)
        {
            
set_bonus(id 300 100)
        }
    }
}

// Natives
public plugin_natives()
{
    
register_native("zx_get_user_xp" "native_zx_get_user_xp" 1)
    
register_native("zx_get_user_level" "native_zx_get_user_level" 1)
    
register_native("zx_set_user_xp" "native_zx_set_user_xp" 1)
    
register_native("zx_set_user_level" "native_zx_set_user_level" 1)
    
register_native("zx_register_extra_item" "zx_register_extra_item" 1)
    
register_native("zx_register_zombie_class" "native_register_class" ,1
    
register_native("zx_get_next_class" "native_get_next_class" ,1
    
register_native("zx_get_current_class" "native_get_current_class" ,1
    
register_native("zx_get_registered_classes_count" "native_registered_count" ,1
    
register_native("zx_set_next_class" "native_set_next" ,1)
}

// After Infected
public zp_user_infected_post(id infector)
{
    
playerxp[infector] += get_pcvar_num(cvar_infect_xp)
    if(
selected[id])
        
set_task(1.0 ,     "attr_set" id)
}

public 
attr_set(id)
{
    if(
zclasses_count == 0)
    {
        return 
PLUGIN_HANDLED
    
}
    
    if(
zp_is_nemesis_round()) 
        return 
PLUGIN_HANDLED;

    
PlayerCurClass[id] = PlayerNextClass[id]
    
ExecuteForward(zx_class_fw zx_class_fw_return id PlayerCurClass[id])
    new 
modelx[64]
    
ArrayGetString(Zc_Model PlayerCurClass[id] , modelx 63)
    
cs_set_player_model(id  ,modelx)
    
    
//cs_set_user_model(id ,modelx)
    
set_user_gravity(id ,Float:ArrayGetCell(Zc_Gravity ,PlayerCurClass[id]))
    
cs_set_player_maxspeed_auto(id ,Float:ArrayGetCell(Zc_speed PlayerCurClass[id]))
    
set_user_health(id ArrayGetCell(Zc_health PlayerCurClass[id]))
    new 
Clawx[64]
    
ArrayGetString(Zc_Claw ,PlayerCurClass[id]  , Clawx  ,63)
    
cs_set_player_view_model(id CSW_KNIFE  ,Clawx)
    
cs_set_player_weap_restrict(id ,true ALLOWED_WEAPONS CSW_KNIFE)
    
cs_set_player_weap_model(idCSW_KNIFE"")
    return 
PLUGIN_HANDLED
}

public 
zp_user_humanized_post(id)
{
    
cs_reset_player_view_model(idCSW_KNIFE)
    
cs_reset_player_weap_model(idCSW_KNIFE)
    
    
cs_set_player_weap_restrict(id false)
}

// Players connect
public client_putinserver(id)
{
    
load_xp(id// load_xp
    
    
if(get_pcvar_num(cvar_allow_show))
        
set_task(3.0 "func_xp" id)    
}

// Thanks to someone i don't remeber
public func_xp(id)
{
    
xp playerxp[id]
    
xp_change[0][id] = xp
    xp_change
[1][id] = xp
    xp_change
[2][id] = xp
    set_task
(1.0,"xp_changed" id _,_,"b")
}

public 
xp_changed(id)
{
    
xp_change[1][id] = playerxp[id]
    new 
hold[33]
    
    if(
xp_change[1][id] !=xp_change[2][id])
    {
        if(
xp_change[1][id] > xp_change[2][id])
        {
            
xp xp_change[1][id] - xp_change[2][id]
            
format(hold charsmax(hold) ,"+ %i XP"xp)
        }
        
xp_change[2][id] = xp_change[1][id]
        if(
get_pcvar_num(cvar_show_type))
        {
            
set_hudmessage(025500.290.4600.13.00.10.1)
            
show_hudmessage(idhold)
        }
        else    
            
client_print(id ,print_center hold)
    }
}

// player disconnect 
public client_disconnect(id)
{
    
save_xp(id// save exp when disconnect  not including crash
    
if (!is_user_alive(id))
        
remove_task(id+TASK_HUD_REMOVE)
}

/*=========================================================================
STORE - VAULTS SECTION START HERE !
=========================================================================*/

public save_xp(id)
{
    
// Nvault Vars
    
new Xkey[65] , Lkey[65] , Xdate[256] , Ldate[256
    
    
// Save type
    
switch(get_pcvar_num(cvar_save_type))
    {
        case 
0:
        {
            new 
name[33]
            
get_user_name(id name 32)
            
            
format(Xkey 64 "%s-" name)
            
format(Lkey 64 "%s-" name)
        }
        case 
1:
        {
            new 
ip[36]
            
get_user_ip(id ip 35)
            
            
format(Xkey 64 "%s-" ip)
            
format(Lkey 64 "%s-" ip)
        }
        case 
2:
        {
            new 
steamid[35
            
get_user_authid(id steamid 34)
            
format(Xkey 64 "%s-" steamid)
            
format(Lkey 64 "%s-" steamid)
        }
    }
    
format(Xdate charsmax(Xdate) , "%i#" playerxp[id])
    
format(Ldate charsmax(Ldate) , "%i#" playerlvl[id])
    
    
nvault_set(lvl_vault Lkey Ldate)
    
nvault_set(xp_vault Xkey Xdate)
    return 
PLUGIN_CONTINUE
}

public 
load_xp(id)
{
    new 
Xkey[65] , Lkey[65] , Xdate[256] , Ldate[256
    
    switch(
get_pcvar_num(cvar_save_type))
    {
        case 
0:
        {
            new 
name[33]
            
get_user_name(id name 32)
            
            
format(Xkey 64 "%s-" name)
            
format(Lkey 64 "%s-" name)
        }
        case 
1:
        {
            new 
ip[36]
            
get_user_ip(id ip 35)
            
            
format(Xkey 64 "%s-" ip)
            
format(Lkey 64 "%s-" ip)
        }
        case 
2:
        {
            new 
steamid[35
            
get_user_authid(id steamid 34)
            
format(Xkey 64 "%s-" steamid)
            
format(Lkey 64 "%s-" steamid)
        }
    }
    
format(Xdate charsmax(Xdate) , "%i#" playerxp[id])
    
format(Ldate charsmax(Ldate) , "%i#" playerlvl[id])
    
    
nvault_get(lvl_vault Lkey Ldate 255)
    
nvault_get(xp_vault Xkey Xdate 255)
    
replace_all(Ldate 255 ,"#" ,"")
    
replace_all(Xdate 255 ,"#" ,""
    
    new 
xp[32] , lvl[32
    
parse(Ldate lvl 31)
    
parse(Xdate xp 31)
    
    
playerlvl[id] = str_to_num(lvl)
    
playerxp[id] = str_to_num(xp)
    return 
PLUGIN_CONTINUE
}
/*=========================================================================
END OF STORE - VAULTS SECTION , START OF MENU
=========================================================================*/

// Main Menu
public funcs(id)
{
    new 
menu_id2 menu[250]
    
formatex(menu charsmax(menu) , "\r%L" id "ZX_MAIN_TITLE")
    
menu_id2 menu_create(menu "main_handler")
    
    if (
get_pcvar_num(cvar_extra_item_enabled))
        
formatex(menu charsmax(menu) , "\w%L" ,id "ZX_EXTRA_NAME")
    else
        
formatex(menu charsmax(menu) , "\d%L" ,id "ZX_EXTRA_NAME_DES")
        
    
menu_additem(menu_id2 menu "" 0)
    
    
formatex(menu charsmax(menu) , "%s%L" , !get_pcvar_num(cvar_allow_classes) ? "\d":"\w",id "ZX_INFO_NAME")
    
menu_additem(menu_id2 menu ,"",0)
    
    
    
formatex(menu charsmax(menu) , "\w%L" id "ZX_ZOMBIE_MENU_NAME")    
    
menu_additem(menu_id2 menu "" 0)
    
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_BACK")
    
menu_setprop(menu_id2MPROP_BACKNAMEmenu)
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_NEXT")
    
menu_setprop(menu_id2MPROP_NEXTNAMEmenu)
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_EXIT")
    
menu_setprop(menu_id2MPROP_EXITNAMEmenu)
    
menu_display(id menu_id2 0)
}

public 
main_handler(id menu_id2 item)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu_id2)
        return 
PLUGIN_HANDLED
    
}
    switch(
item)
    {
        case 
0
        {
            if (
get_pcvar_num(cvar_extra_item_enabled))
                
func_menu(id)
            else
                
client_printcolor(id "%L" id "ZX_ITEMS_DISABLED")
        }
        case 
1
        {
            
func_info(id)
        }
        case 
2:
        {
            if (
get_pcvar_num(cvar_allow_classes))
                
zclasses_menu(id)
            else
                
client_printcolor(id "%L" id "ZX_CLASSES_DISABLED")
        }                
    }
    return 
PLUGIN_HANDLED
}

public 
zclasses_menu(id)
{
    if(
zclasses_count == 0)
    {
        
client_printcolor(id ,"%L" id ,"ZX_NO_CLASS")
        return 
PLUGIN_HANDLED
    
}
    
    static 
menu menu_a[300]
    new 
item
    formatex
(menu_a charsmax(menu_a) , "\r%L" id ,"ZX_CLASSES_TITLE")
    
menu menu_create(menu_a ,  "class_op")
    
    for(
item=0item zclasses_count item++)
    {
        new 
name[50] , desc[50] , cost 
        ArrayGetString
(Zc_Name item name charsmax(name))
        
ArrayGetString(Zc_Desc item desc charsmax(desc))
        
cost  ArrayGetCell(Zc_level item)
        
        if(
playerlvl[id] < ArrayGetCell(Zc_level item))
        {
            
formatex(menu_a 299 "\d%s [%s][%d]" name desc cost)
        }
        else if(
item == PlayerNextClass[id])
        {
            
formatex(menu_a 299 "\d%s [%s][%d][Selected]" name desc cost)
        }
        else 
            
formatex(menu_a 299 "%s [\r%s][%d]" name desc  ,cost)
        
        
        
name[0] = item
        name
[1] = 0
        menu_additem
(menu menu_a name)
    }
    
    
formatex(menu_acharsmax(menu), "%L"id"ZX_MENU_BACK")
    
menu_setprop(menuMPROP_BACKNAMEmenu_a)
    
formatex(menu_acharsmax(menu), "%L"id"ZX_MENU_NEXT")
    
menu_setprop(menuMPROP_NEXTNAMEmenu_a)
    
formatex(menu_acharsmax(menu), "%L"id"ZX_MENU_EXIT")
    
menu_setprop(menuMPROP_EXITNAMEmenu_a)
    
menu_display(id ,menu0)
    return 
PLUGIN_HANDLED
}

public 
class_op(id menu item)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    if (!
is_user_alive(id)) {
        
client_printcolor(id "%L" id "ZX_DEAD_MSG")
        
menu_destroy(menu)
    }
    new 
itemdata[2], dummyclassid
    menu_item_getinfo
(menuitemdummyitemdatacharsmax(itemdata), __dummy)
    
classid itemdata[0]
    
    if(
playerlvl[id] < ArrayGetCell(Zc_levelclassid)) {
        
zclasses_menu(id)
        
client_printcolor(id "%L" id "ZX_NOT_AT_LVL")
        return 
PLUGIN_HANDLED
    
}    
    
    
PlayerNextClass[id] = classid
    selected
[id] = true
    
    menu_destroy
(menu)
    return 
PLUGIN_HANDLED 
}

// Player Info
public func_info(id)
{
    new 
menu[250] ,menu_id_info
    formatex
(menu charsmax(menu) , "\r%L" id ,"ZX_INFO_TITLE")
    
menu_id_info menu_create(menu ,"p_handler")
    
    new 
players[32] , snum pl_id holder[500]
    
    new 
name[32]//, ///user_id[32]
    
    
get_players(players ,snum "")
    
    for (new 
i<snum;i++)
    {
        
pl_id players[i]
        
get_user_name(pl_id name charsmax(name))
        
//format(user_id ,charsmax(user_id) , "%d" ,get_user_userid(pl_id))
        
format(holder charsmax(holder) , "%s \r[\yLVL : \r%i][\yXP : \r%d]" name playerlvl[pl_id] , playerxp[pl_id])
        
menu_additem(menu_id_info ,holder)
    }
    
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_BACK")
    
menu_setprop(menu_id_infoMPROP_BACKNAMEmenu)
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_NEXT")
    
menu_setprop(menu_id_infoMPROP_NEXTNAMEmenu)
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_EXIT")
    
menu_setprop(menu_id_infoMPROP_EXITNAMEmenu)
    
menu_display(id menu_id_info 0)
}

public 
p_handler(id ,menu_id_info item)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu_id_info)
        return 
PLUGIN_HANDLED
    
}
    new 
szData[6], szName[64];
    new 
_accessitem_callback;
    
menu_item_getinfo(menu_id_info item_accessszData,charsmaxszData ), szName,charsmaxszName ), item_callback );
    
    new 
userid str_to_numszData );
    
    new 
player find_player"k"userid )
    
    if (
player )
    {
        
func_info(id)
    }
    
    
menu_destroy(menu_id_info  );
    return 
PLUGIN_HANDLED;
}

// Extra Items menu
public func_menu(id)
{
    
// Don't Open The menu If there no items
    
if (zx_items_count == 0) {
        
client_printcolor(id ,"%L" id "NO_ITEMS")
        return 
PLUGIN_HANDLED
    
}
    
    static 
menu[250] , menu_id item 
    
new holder[32] ,  check_team
    formatex
(menu charsmax(menu) , "\r%L" id "ZX_EXTRA_TITLE" playerlvl[id])
    
menu_id menu_create(menu "zx_hanlder")    
    
    for(
item =item zx_items_count item++)
    {
        
check_team ArrayGetCelli_team item)
        if(
zp_get_user_zombie(id) && !(check_team TEAM_ZOM) || (zp_get_user_human(id) && !(check_team TEAM_HUM))) // check user team
            
continue 
        
        
ArrayGetString(i_nameitem holder charsmax(holder))        // Get item name
        
if (playerlvl[id] < ArrayGetCell(i_lvl item))
            
format(menu charsmax(menu) , "\d%s \r[\yLVL:\r%d]" holder ArrayGetCell(i_lvl item)) // if user not at resusted level show grey color (disabled)
        
else
            
format(menu charsmax(menu) , "%s \r[\yLVL:\r%d]" holder ArrayGetCell(i_lvl item))
        
holder[0] = item
        holder
[1] = 0
        
// Add hte item
        
menu_additem(menu_id menu holder)
    }
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_BACK")
    
menu_setprop(menu_idMPROP_BACKNAMEmenu)
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_NEXT")
    
menu_setprop(menu_idMPROP_NEXTNAMEmenu)
    
formatex(menucharsmax(menu), "%L"id"ZX_MENU_EXIT")
    
menu_setprop(menu_idMPROP_EXITNAMEmenu)
    
menu_display(id menu_id 0)
    return 
PLUGIN_HANDLED
}

public 
zx_hanlder(id menu_id item)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu_id)
        return 
PLUGIN_HANDLED
    
}
    if (!
is_user_alive(id)) {
        
client_printcolor(id "%L" id "ZX_DEAD_MSG")
        
menu_destroy(menu_id)
    }
    if (
zp_get_user_survivor(id))
        
menu_destroy(menu_id)
        
    if (
zp_get_user_nemesis(id))
        
menu_destroy(menu_id)
    
    new 
itemdata[2], dummyitemid
    menu_item_getinfo
(menu_iditemdummyitemdatacharsmax(itemdata), __dummy)
    
itemid itemdata[0]
    
    
// Check user level if not as we want disable the item send message say Not at wanted level
    
if (playerlvl[id] < ArrayGetCell(i_lvl itemid))
    {
        
func_menu(id)
        
client_printcolor(id "%L" id "ZX_NOT_AT_LVL")
        return 
ITEM_DISABLED
    
}
    
    
ExecuteForward(zx_item_selected_pre pre_select_return id itemid)
    
// Item has Been bought
    
zx_item_bought(id itemid)
    
menu_destroy(menu_id)
    return 
PLUGIN_HANDLED
}

public 
zx_item_bought(iditemid)
{
    static 
check_team
    check_team 
ArrayGetCell(i_team itemid)
    
    if(
zp_get_user_zombie(id) && !(check_team TEAM_ZOM) || (zp_get_user_human(id) && !(check_team TEAM_HUM)))
    {
        
client_printcolor(id "%L" id "ZX_NO_ITEMS_FOR_YOUR_TEAM")
    }
    
    new 
name[32]
    
ArrayGetString(i_name itemid name charsmax(name))
    
client_printcolor(id "%L" id "ZX_ITEM_PURCHASED" ,name )
    
    
// Forward (zx_extra_item_selected
    
ExecuteForward(zx_item_selected_post zx_fw_return id itemid)
}

/*=============================================================================
END OF MENU SECTION - KILLS GIVING XP - LEVELS START HERE
=============================================================================*/

// When user is killed
public event_death()
{
    new 
attacker read_data(1)
    
//new victim = read_data(2)
    
new headshot read_data(3)
    
    if (
is_user_valid(attacker))
    {
        if (
headshot)
        {
            
playerxp[attacker] += get_pcvar_num(cvar_hs_xp)
        }
        else 
            
playerxp[attacker] += get_pcvar_num(cvar_kill_xp)
        
        
do_check(attacker)
        
    }
}

public 
do_check(id)
{
    if(
playerlvl[id] < get_pcvar_num(cvar_max))    
    {
        while(
playerxp[id] >= level[playerlvl[id]])
        {
            
playerlvl[id] += 1
            message_begin
(MSG_ONE_UNRELIABLEfade_id)
            
write_short(1<<12// duration
            
write_short(1// hold time
            
write_short(0x0000// fade type
            
write_byte(1// red
            
write_byte(195// green
            
write_byte(4// blue
            
write_byte(205// alpha
            
message_end()
            
client_printcolor(id "%L" ,id,"ZX_LEVEL_UP" ,playerlvl[id])
            
set_user_health(idget_user_health(id) + 50)
            
set_user_armor(id get_user_armor(id) +50)
            
emit_sound(id,CHAN_VOICE soundVOL_NORMATTN_NORM0PITCH_NORM)
        }    
    }
}

public 
func_say(id)
{
    new 
msg[191] , name[32
    
read_args(msg 191)
    
remove_quotes(msg)
    
get_user_name(id name 31)
    
    if (
equali(msg "") || equali(msg "") || !is_valid_mesg(msg))
        return 
PLUGIN_HANDLED_MAIN
    
    
if(is_user_alive(id))
        
format(msg 191 "^4[LVL : ^3%d] ^3%s : ^1%s" playerlvl[id] ,name msg)
    else
        
format(msg 191 "^1*DEAD*^4[LVL : ^3%d] ^3%s : ^1%s" playerlvl[id] ,name msg)
    
    for (new 
g_MaxPlayers;i++)
    {
        
send_message_lol(msg)
        
    }
    
    return 
PLUGIN_CONTINUE
}

public 
func_say_team(id)
{
    new 
msg[191] , name[32
    
read_args(msg 191)
    
remove_quotes(msg)
    
get_user_name(id name 31)
    
    if (
equali(msg "") || equali(msg "") || !is_valid_mesg(msg))
        return 
PLUGIN_HANDLED_MAIN
    
    
new CsTeams:team[33]
    
team[id] = cs_get_user_team(id)    
    
    if(
is_user_alive(id))
        
format(msg 191 "^1(%s)^4[LVL : ^3%d] ^3%s : ^1%s" ,team[id], playerlvl[id] ,name msg)
    else
        
format(msg 191 "^1(%s)^1*DEAD*^4[LVL : ^3%d] ^3%s : ^1%s" ,team[id], playerlvl[id] ,name msg)
    
    for (new 
g_MaxPlayers;i++)
    {
        
send_message_lol(msg)
        
    }
    
    return 
PLUGIN_CONTINUE
}

/*========================================================================
END OF KILLS - LEVEL SECTION , START OF NATIVES
=========================================================================*/

// zx_get_user_xp         get_user_xp when used in other plugins
public native_zx_get_user_xp(plugin_idnum_params)
{
    new 
id get_param(1)
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id)
        return -
1
    
}
    return 
playerxp[id]
}

// zx_get_user_levle       get_user_level when used in other plugins
public native_zx_get_user_level(plugin_idnum_params)
{
    new 
id get_param(1)
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id)
        return -
1
    
}
    return 
playerlvl[id
}

// zx_set_user_xp         set user xp when used in other plugins
public native_zx_set_user_xp(plugin_idnum_params)
{
    new 
id get_param(1)
    new 
amount get_param(2)
    
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id)
        return 
false
    
}
    
    
playerxp[id] = amount
    
return true
}

// zx_set_user_level         set_user_level when used in other plugins
public native_zx_set_user_level(plugin_idnum_params)
{
    new 
id get_param(1)
    new 
amount get_param(2)
    
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id// number of id 
        
return false
    
}
    
    
playerlvl[id] = amount
    
return true
}

// The native That register the item
public zx_register_extra_item(const name[] , item_level team)
{
    
param_convert(1)
    
ArrayPushString(i_name name)
    
ArrayPushCell(i_lvl item_level)
    
ArrayPushCell(i_team team)
    
zx_items_count++ // increase the item count
    
    
return zx_items_count-// to work proberly
}

public 
native_register_class(const name[] , const description[] , const player_model[] ,const claw_model[] , health Float:speed Float:gravity level)
{
    
param_convert(1)
    
param_convert(2)
    
param_convert(3)
    
param_convert(4)
    
    
ArrayPushString(Zc_Name name)
    
ArrayPushString(Zc_Desc description)
    
ArrayPushString(Zc_Model player_model)
    
ArrayPushString(Zc_Claw claw_model)
    
ArrayPushCell(Zc_health health)
    
ArrayPushCell(Zc_speed speed)
    
ArrayPushCell(Zc_Gravity gravity)    
    
ArrayPushCell(Zc_level level)
    
    new 
model_path[128]
    
formatex(model_pathcharsmax(model_path), "models/player/%s/%s.mdl"player_modelplayer_model)    
    if(
file_exists(model_path)) //precache_model(model_path)
        
engfunc(EngFunc_PrecacheModel ,model_path)
    
    
engfunc(EngFunc_PrecacheModel ,claw_model)    
    
    
zclasses_count++
    
    return 
zclasses_count-1
}

public 
native_get_next_class(plugin_idnum_params)
{
    new 
id get_param(1)
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id// number of id 
        
return false
    
}
    return 
PlayerNextClass[id]
}

public 
native_registered_count(plugin_idnum_params)
{
    return 
zclasses_count
}

public 
native_set_next(plugin_idnum_params)
{
    new 
id get_param(1)
    new 
classid get_param(2)
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id// number of id 
        
return false
    
}
    
PlayerNextClass[id] = classid
    
return true
}

public 
native_get_current_class(plugin_idnum_params)
{
    new 
id get_param(1)
    if(!
is_user_valid(id))
    {
        
log_error(AMX_ERR_NATIVE "[ZX] Invaild Player (%d)" id// number of id 
        
return false
    
}
    return 
PlayerCurClass[id]
}
/*==============================================================================
END OF NATIVES -  START OF STOCKES
==============================================================================*/

// Some Stocks
stock set_bonus(id health armor)
{
    if(
is_user_valid(id))
    {
        
set_user_health(id health)
        
set_user_armor(id armor)
    }
}

stock bool:zp_get_user_human(id)
{
    if(!
zp_get_user_nemesis(id) && !zp_get_user_zombie(id) && !zp_get_user_survivor(id) && is_user_valid(id))
        return 
true
    
else
        return 
false
    
    
return true    
}

public 
send_message_lol(id ,  msg[])
{
    
message_begin (MSG_ONEg_saytxt, {000}, id)
    
write_byte(id)
    
write_string(msg)
    
message_end()
}

bool:is_valid_mesg(const message[])
{
    if(
message[0] == '@' || message[0] == '/' || message[0] == '!' || !strlen(message))
        return 
false
    
else        
        return 
true
    
    
return true
    
}

stock client_printcolor(const id, const input[], any:...) 

    new 
count 1players[32]; 
    static 
msg[191]; 
    
vformat(msg190input3); 
    
replace_all(msg190"!g""^4"); // Green Color 
    
replace_all(msg190"!y""^1"); // Default Color
    
replace_all(msg190"!t""^3"); // Team Color 
    
if (idplayers[0] = id; else get_players(playerscount"ch"); 
    for ( new 
0counti++ ) 
    { 
        if ( 
is_user_connected(players[i]) ) 
        { 
            
message_begin(MSG_ONE_UNRELIABLEg_saytxt _players[i]); 
            
write_byte(players[i]); 
            
write_string(msg); 
            
message_end(); 
        } 
    } 


create_cvars_file()
{
    new 
file[64] , fmt[1000]
    
get_configsdir(filecharsmax(file))
    
format(file charsmax(file) , "%s/zombie_xp",file)
    
add(file charsmax(file) ,".cfg")
    
    
fopen(file "wt")
    
    if (
file_exists(file)) {
        
server_cmd("exec %s" ,file)
    }
    
    new 
pug    file_n[300] , plug_name[200] , plug_ver[300] , plug_auther[300]
    
pug get_plugin(-,file_ncharsmax(file_n) , plug_name charsmax(plug_name) , plug_ver charsmax(plug_ver) , plug_auther charsmax(plug_auther))    
    
    
format(fmt charsmax(fmt) ,"; %s configuration file By %s ^n" plug_name plug_auther)
    
fprintf(fmt)
    
    new 
cvars get_plugins_cvarsnum()
    new 
cvarsd cvar_name[300] , cvar_value[30] ,id_pl
    fprintf
("^nCvars :^n")
    
    for(new 
cvars  ;i++)
    {
        
get_plugins_cvar(,cvar_name charsmax(cvar_name) ,_id_pl cvarsd)
        if (
id_pl == pug)
        {
            
get_pcvar_string(cvarsd cvar_value ,charsmax(cvar_value))
            
fprintf("^n%s %s^n" cvar_name cvar_value)
        }
    }
    
fclose(f)
}

/*=====================================================================
END OF PLUGIN - HAVE FUN 
=====================================================================*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1025\\ f0\\ fs16 \n\\ par }
*/ 



All times are GMT -4. The time now is 16:49.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.