Raised This Month: $ Target: $400
 0% 

[Help] Native error ZP XP


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
elmedin
Senior Member
Join Date: Nov 2013
Location: Bruh
Old 05-06-2020 , 19:26   [Help] Native error ZP XP
Reply With Quote #1

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 }
*/ 
elmedin is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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