User
Pass
2FA
 
 

[Problema]Zombie_xp.amxx

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Freakz Forum Index -> Trash Bin -> CS 2006-2019 (Archived) -> Plugins - Help / Support
Author Message2177
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 14-02-2017, 11:47:40 | Translate post to: ... (Click for more languages)

Nume:Zombie_xp
Descriere plugin: vreau si eu sa stiu cum sa resetez la toti playerii levelul?
Alte detalii: -
Exemplu: -

0 0
  
Back to top
View user's profile Send private message
destroi112

[DEV]



Status: Offline
(since 12-03-2020 22:13)
Joined: 24 May 2014
Posts: 4042, Topics: 119
Location: ---------

Reputation: 515.9
Votes: 118

   
Post Posted: 16-02-2017, 02:53:46 | Translate post to: ... (Click for more languages)

Stergi tabelul pt xp din baza de date / fisierul .txt in care sunt salvate datele playerilor.


Retired from Amxmodx

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 18-02-2017, 17:55:41 | Translate post to: ... (Click for more languages)

Nu gasesc ... Am zombie_xp pluginul si nu stiu cum sa fac ca toti sa aiba lvl 1..
0 0
  
Back to top
View user's profile Send private message
ZPLegendary

[Mentally Stable]



Status: Offline
(since 03-10-2019 20:59)
Joined: 13 Jan 2017
Posts: 142, Topics: 7
Location: Polovragi, GJ

Reputation: 15.4
Votes: 17

     
Post Posted: 18-02-2017, 19:01:46 | Translate post to: ... (Click for more languages)

intra in data>vault si sterge fisierul numit ZP XP by redomin8
Daca nu ai modificat numele pluginului, asa ar trebui sa se numeasca.


Be the one, not anyone.
Currently working on Zombie Legendary 8.1


0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 19-02-2017, 08:11:20 | Translate post to: ... (Click for more languages)

nu merge boss..am intrat in data >> vault si am sters alea care ai zis tu (asa se numeau cum ai zis tu) , am dat si restart la sv si tot lvl 25 am..
0 0
  
Back to top
View user's profile Send private message
ZPLegendary

[Mentally Stable]



Status: Offline
(since 03-10-2019 20:59)
Joined: 13 Jan 2017
Posts: 142, Topics: 7
Location: Polovragi, GJ

Reputation: 15.4
Votes: 17

     
Post Posted: 19-02-2017, 10:32:17 | Translate post to: ... (Click for more languages)

Da-mi pluginul tau zombie xp si iti bag eu o comanda ca sa poti reseta nivelele

Be the one, not anyone.
Currently working on Zombie Legendary 8.1


0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 19-02-2017, 13:31:54 | Translate post to: ... (Click for more languages)

#include <amxmodx>

#include <amxmisc>

#include <nvault>

#include <fakemeta>

#include <zombieplague>

#include <hamsandwich>

#include <fun>



/*================================================================================

Info

==================================================================================



Zombie XP Mode by redomin8

MeRcyLeZZ coded a huuuuge portion of the code, and I learned

from his genius and maybe made some changes (some was perfect)



Also, I'd very much like to thank G-Dog for all the help with creating

ZP Bank, I used his code to learn nvault. Good job guys!



Thanks to AssKicR and xeroblood for making ExplodeString.



Enjoy it, take it apart, make a better one. Have fun!



================================================================================

Editable Section follows

================================================================================*/



// Uncomment to have an item added to zp's extra menu

//#define TRIGGER_ZP_ITEM



// Uncomment to use say commands like "xp", "levels", "class", etc

#define TRIGGER_SAYMENU



// Uncomment if you have redomin8's [ZP] Bank - With Autosave installed (fixes spending spree bug)

#define ZP_BANK_AUTOSAVE



// Uncomment to allow experimental menu alignment

//#define ZP_ALIGN_TEXT



//Uncomment to give levels to people

//#define ZP_GAMERUINER



//Uncomment to automatically bind a letter to show our menu

#define ZP_BINDMENU "j"



/*================================================================================

End Editable Section

================================================================================*/



#if defined TRIGGER_ZP_ITEM

new g_TriggerItem

#endif

#if defined ZP_BANK_AUTOSAVE

//compatibility with zp_banks spending spree mode

native zp_bank_get_packs(id)

native zp_bank_set_packs(id, value)

#endif



// Plugin info

static const PLUGIN_NAME[] = "ZP XP by redomin8"

static const PLUGIN_VERSION[] = "0.8"



// Forwards for our zombie plugins

new g_fwRoundStart, g_fwDummyResult



// nVault parameters

new gvault;

#define VAULT_LEVEL 0

#define VAULT_HCLASS 1

#define VAULT_ZCLASS 2



// Internal variables

enum pcvar

{

enable = 0,

packslevelup //(current level) * packslevelup = price to level up

}

new pcvars[pcvar];

new userLevel[33], userAuthID[33][32], userNeededPacks[33]

new g_modname[32] // for formating the mod name

new g_maxplayers // max players counter



/*================================================================================

Required Code from zombie_plague (modified to suite the plugin)

================================================================================*/



const MAX_CLASSSES = 40



// Note: keep g_zclass_name and g_hclass_name the same array size!

// Zombie Classes vars

new g_zclass_name[MAX_CLASSSES][32] // name

new g_zclass_info[MAX_CLASSSES][32] // description

new g_zclass_model[MAX_CLASSSES][32] // player model

new g_zclass_clawmodel[MAX_CLASSSES][32] // claw model

new g_zclass_hp[MAX_CLASSSES] // health

new g_zclass_spd[MAX_CLASSSES] // speed

new g_zclass_lvl[MAX_CLASSSES] // level

new Float:g_zclass_grav[MAX_CLASSSES] // gravity

new Float:g_zclass_kb[MAX_CLASSSES] // knockback

new g_zclass_load[MAX_CLASSSES][40] // loading identifier

new g_zclass_i // loaded zombie classes counter



// Human Classes vars

new g_hclass_name[MAX_CLASSSES][32] // name

new g_hclass_info[MAX_CLASSSES][32] // description

new g_hclass_model[MAX_CLASSSES][32] // player model

new g_hclass_weapons[MAX_CLASSSES][32] // claw model

new g_hclass_hp[MAX_CLASSSES] // health

new g_hclass_spd[MAX_CLASSSES] // speed

new g_hclass_lvl[MAX_CLASSSES] // level

new Float:g_hclass_grav[MAX_CLASSSES] // gravity

new g_hclass_load[MAX_CLASSSES][40] // loading identifier

new g_hclass_i // loaded zombie classes counter



// For menu handlers

#define ZCLASSES_STARTID g_menu_data[id][0]

#define ZCLASSES_SELECTION (g_menu_data[id][0]+key)
#define HCLASSES_STARTID g_menu_data[id][1]

#define HCLASSES_SELECTION (g_menu_data[id][1]+key)

new g_menu_data[33][8] // data for various menus

const MENU_KEY_BACK = 7

const MENU_KEY_NEXT = 8

const MENU_KEY_EXIT = 9

const KEYSMENU = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)



// Cvars

new cvar_welcomemsg, cvar_removeweapons, cvar_removexp, cvar_removezombie;



// Vars

new g_zombieclassnext[33] // zombie class for next infection

new g_humanclassnext[33] // zombie class for next infection

new g_zombieclass[33] // zombie class

new g_humanclass[33] // zombie class

new g_resetparams[33] // reset params?

new bool:g_hclass_showmenu[33]

new bool:g_zclass_showmenu[33]



const OFFSET_CSTEAMS = 114

const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds

enum

{

CS_TEAM_UNASSIGNED = 0,

CS_TEAM_T,

CS_TEAM_CT,

CS_TEAM_SPECTATOR

}

new g_freezetime; // whether it's freeze time

new bool:g_human[33]; // is zombie

new bool:loadedZombies //bugfix for cvar_removezombies being enabled after it was disabled first (and no zombies loaded)

/* --- FOR OUR HUD --- */

// Tasks for events

enum (+= 100)

{

TASK_SHOWHUD

}



// IDs inside tasks

#define ID_SHOWHUD (taskid - TASK_SHOWHUD)



// Message sync object

new g_MsgSync2



// Message IDs vars

new g_msgSayText



// Constants

const PEV_SPEC_TARGET = pev_iuser2

new const textHeader[] = "[ZPXP]"

new const textHeaderOrig[] = "[ZP]" //imitate Zombie Plague alerts



// HUD messages

const Float:HUD_EVENT_X = -1.0

const Float:HUD_EVENT_Y = 0.17

const Float:HUD_INFECT_X = 0.05

const Float:HUD_INFECT_Y = 0.45

const Float:HUD_SPECT_X = 0.6

const Float:HUD_SPECT_Y = 0.85

const Float:HUD_STATS_X = 1.005 //changed to right align

const Float:HUD_STATS_Y = 0.9



/*================================================================================

Constants JUST for giving guns

================================================================================*/



// CS Offsets

#if cellbits == 32

const OFFSET_CSTEAMS = 114

const OFFSET_CSMONEY = 115

const OFFSET_NVGOGGLES = 129

const OFFSET_ZOOMTYPE = 363

const OFFSET_CSDEATHS = 444

const OFFSET_AWM_AMMO = 377

const OFFSET_SCOUT_AMMO = 378

const OFFSET_PARA_AMMO = 379

const OFFSET_FAMAS_AMMO = 380

const OFFSET_M3_AMMO = 381

const OFFSET_USP_AMMO = 382

const OFFSET_FIVESEVEN_AMMO = 383

const OFFSET_DEAGLE_AMMO = 384

const OFFSET_P228_AMMO = 385

const OFFSET_GLOCK_AMMO = 386

const OFFSET_FLASH_AMMO = 387

const OFFSET_HE_AMMO = 388

const OFFSET_SMOKE_AMMO = 389

const OFFSET_C4_AMMO = 390

const OFFSET_CLIPAMMO = 51

#else

const OFFSET_CSTEAMS = 139

const OFFSET_CSMONEY = 140

const OFFSET_NVGOGGLES = 155

const OFFSET_ZOOMTYPE = 402

const OFFSET_CSDEATHS = 493

const OFFSET_AWM_AMMO = 426

const OFFSET_SCOUT_AMMO = 427

const OFFSET_PARA_AMMO = 428

const OFFSET_FAMAS_AMMO = 429

const OFFSET_M3_AMMO = 430

const OFFSET_USP_AMMO = 431

const OFFSET_FIVESEVEN_AMMO = 432

const OFFSET_DEAGLE_AMMO = 433

const OFFSET_P228_AMMO = 434

const OFFSET_GLOCK_AMMO = 435

const OFFSET_FLASH_AMMO = 46

const OFFSET_HE_AMMO = 437

const OFFSET_SMOKE_AMMO = 438

const OFFSET_C4_AMMO = 439

const OFFSET_CLIPAMMO = 65

#endif



// Buy Menu: Primary and Secondary Weapons

new const g_primary_items[][] = { "weapon_galil", "weapon_famas", "weapon_m4a1", "weapon_ak47", "weapon_sg552", "weapon_aug", "weapon_scout",

"weapon_m3", "weapon_xm1014", "weapon_tmp", "weapon_mac10", "weapon_ump45", "weapon_mp5navy", "weapon_p90" }

new const g_secondary_items[][] = { "weapon_glock18", "weapon_usp", "weapon_p228", "weapon_deagle", "weapon_fiveseven", "weapon_elite" }





// Max BP ammo for weapons

new const MAXBPAMMO[] = { -1, 52, -1, 90, 1, 32, 32, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120,

30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, -1, 100 }



// Additional Items to give after buying all weapons (e.g. grenades)

new const g_additional_items[][] = { "weapon_hegrenade", "weapon_flashbang", "weapon_smokegrenade" }



// Weapon bitsums

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)

const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)



const PEV_ADDITIONAL_AMMO = pev_iuser1



/*================================================================================

The code starts here

================================================================================*/



public plugin_precache()

{

// Register all our cvars

cvar_welcomemsg = register_cvar("zp_xp_welcomemsg", "1");

cvar_removeweapons = register_cvar("zp_xp_removeweapons", "1");

cvar_removexp = register_cvar("zp_xp_removexp", "0");

cvar_removezombie = register_cvar("zp_xp_removezombie", "0");

}



public plugin_init()

{

// Register the plugin

register_plugin(PLUGIN_NAME, PLUGIN_VERSION, "Huh?")



// Language files

register_dictionary("zombie_xp.txt")



// Register the menus

register_menu("Game Menu", KEYSMENU, "menu_game")

register_menu("Zombie Class Menu", KEYSMENU, "menu_zclass")

register_menu("Human Class Menu", KEYSMENU, "menu_hclass")



// For setting human's skills

register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")



// For setting the user human on connecting

RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)



// For setting humans speed also

register_logevent("logevent_round_start",2, "1=Round_Start")



// Register event round start for humans

register_event("HLTV", "event_round_start", "a", "1=0", "2=0");



// Register forward for our plugins

g_fwRoundStart = CreateMultiForward("zp_round_started_human", ET_IGNORE, FP_CELL)



// Set our vars to disable zombie plague functions

set_task(1.0, "set_cvars")



// Register variables

pcvars[enable] = register_cvar("zp_xp_enable", "1")

pcvars[packslevelup] = 100



// Register client commands

register_clcmd("zp_xp_costscale", "SetPacksLevelUp")

register_clcmd("zp_xp_set_level", "SetLevel")

register_clcmd("zp_xp_removexp", "RemoveXP")

register_clcmd("zp_xp_removezombies", "RemoveZombies")

register_clcmd("zp_xp_removeweapons", "RemoveWeapons")



//trigger for handling the menu

#if defined TRIGGER_ZP_ITEM

g_TriggerItem = zp_register_extra_item("Zombie XP Menu", 0, 0)

#endif

#if defined TRIGGER_SAYMENU

register_clcmd("say xp", "handle_say_xp")

register_clcmd("say level", "handle_say_level")

register_clcmd("say class", "handle_say_class")

register_clcmd("say xpmenu", "handle_say_xpmenu")

#endif



//Settings variables

g_msgSayText = get_user_msgid("SayText")



// Format mod name

formatex(g_modname, sizeof g_modname - 1, "Zombie XP %s", PLUGIN_VERSION)



// Get Max Players

g_maxplayers = get_maxplayers()



//nVault

gvault = nvault_open(PLUGIN_NAME);



//for our HUD (shows level on screen)

g_MsgSync2 = CreateHudSyncObj()

}



public set_cvars()

{

// Disable zombie_plague's zombie auto menu

if( get_pcvar_num(cvar_removezombie) == 0) set_cvar_num("zp_zombie_classes", 0);

if( get_pcvar_num(cvar_removeweapons) == 0) set_cvar_num("zp_buy_custom", 0);

}



public plugin_natives()

{

//natives

register_native("zpxp_register_extra_item", "native_register_extra_item", 1)

register_native("zpxp_register_human_class", "native_register_human_class", 1)

register_native("zpxp_register_zombie_class", "native_register_zombie_class", 1)

register_native("zp_get_user_human_class", "native_get_user_human_class", 1)

}

public plugin_end()

{

if( get_pcvar_num(cvar_removexp) == 0)

{

// Save everyone's data first

server_print("%s Saving your clients XP.", textHeader);



for( new o = 1; o < 33; o++)

{

//if ( !is_user_connected(o) || is_user_bot(o) ) continue;

if ( !is_user_connected(o) ) continue;

if ( is_user_bot(o) ) continue;



save_data(o);

}

}



nvault_close(gvault)



//Bugfix:

if( (loadedZombies == false) && ( get_pcvar_num(cvar_removezombie) == 0 ))

{

set_pcvar_num(cvar_removezombie, 0);

set_cvar_num("zp_zombie_classes", 0)

}

}



#if defined TRIGGER_SAYMENU

public handle_say_xp(id)

{



#if defined ZP_BINDMENU

new strLetter[2];

copy(strLetter, sizeof strLetter - 1, ZP_BINDMENU);

strtoupper(strLetter);

strtoupper(ZP_BINDMENU);



zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "SAY_INFO_KEY", strLetter)

#else

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "SAY_INFO")

#endif

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "SAY_XP", pcvars[packslevelup] * userLevel[id], userLevel[id])

return PLUGIN_HANDLED

}

public handle_say_level(id)

{

//return level

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "SAY_LEVEL", userLevel[id])

return PLUGIN_HANDLED

}

public handle_say_class(id)

{

//return class

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "SAY_CLASS", g_hclass_name[g_humanclass[id]], g_zclass_name[g_zombieclass[id]])

return PLUGIN_HANDLED

}

public handle_say_xpmenu(id)

{

show_menu_game(id);

return PLUGIN_HANDLED

}

#endif



#if defined TRIGGER_ZP_ITEM

public zp_extra_item_selected(player, itemid)

{

if(itemid == g_TriggerItem)

{

//show the menu

show_menu_game(player);

}

}

#endif



#if defined ZP_BANK_AUTOSAVE

public getAmmoPacks(id)

{

return zp_bank_get_packs(id);

}

public setAmmoPacks(id, value)

{

return zp_bank_set_packs(id, value);

}

#else

public getAmmoPacks(id)

{

return zp_get_user_ammo_packs(id);

}

public setAmmoPacks(id, value)

{

return zp_set_user_ammo_packs(id, value);

}

#endif





public SetLevel(id)

{

//Multilang is not enabled here since I plan to remove this funtionality once this leaves BETA

#if defined ZP_GAMERUINER

if ( read_argc() > 3 ) return PLUGIN_HANDLED;



new arg1[32], arg2[10], amount;

read_argv(1, arg1, sizeof(arg1) - 1);

read_argv(2, arg2, sizeof(arg2) - 1);



amount = str_to_num(arg2);

if( amount <= 0) amount = 1;

new target = cmd_target(0, arg1, 2);



if ( target == 0 )

{

//couldnt find them

zp_colored_print(id, "^x04%s^x01 Could not find the requested user.", textHeader);



return PLUGIN_HANDLED;



} else {



//we found them!

userLevel[id] = amount

ShowHUD(id)



if(id == target)

{

zp_colored_print(id, "^x04%s^x01 You have set yourself to level %d!", textHeader, amount );

} else {

new targetName[64];

get_user_name(target, targetName, 63);



zp_colored_print(id, "^x04%s^x01 You have set %s to level %d!", textHeader , targetName, amount );

zp_colored_print(target, "^x04%s^x01 You have been set to level %d!", textHeader , amount );

}

return PLUGIN_HANDLED;

}

#else

zp_colored_print(id, "^x04%s^x01 This functionality has been disabled.", textHeader);

client_print(id, print_console, "^x04%s^x01 This functionality has been disabled.", textHeader);

#endif

return PLUGIN_HANDLED;



}



public getNeededPacks(id)

{

switch(userLevel[id])

{

case 1 : return 100

case 2 : return 200

case 3 : return 300

case 4 : return 400

case 5 : return 800

case 6 : return 1600

case 7 : return 3200

case 8 : return 6400

case 9 : return 12800

}

}



public SetPacksLevelUp(id, value)

{

//this allows the user to change the multiplier for ammo cost

new arg[10], arg2

read_argv(1, arg, sizeof arg - 1)



arg2 = str_to_num(arg)

if(arg2 > 0)

{

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

pcvars[packslevelup] = arg2;



//go through each player and change the amount required to level up

for( new o = 1; o < 33; o++)

{

if ( !is_user_connected(o) ) continue;

userNeededPacks[id] = getNeededPacks(id)

}

} else {

//must be a positive number - PRINTS TO CONSOLE, LEAVE ALONE!

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_NEGATIVE");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_NEGATIVE")

}



return PLUGIN_HANDLED;

}





//-----------------------CVAR Handlers--------------------------



public RemoveXP(id)

{

//this allows the user to enable or disable XP

new arg[10], arg2

read_argv(1, arg, sizeof arg - 1)



arg2 = str_to_num(arg)

if(arg2 >= 0)

{

if(arg2 == 1) {

// Disable the XP

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

set_pcvar_num(cvar_removexp, arg2);



} else if (arg2 == 0) {

// Enable the XP

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

set_pcvar_num(cvar_removexp, arg2);



} else {

// They typed something wrong

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_INVALIDENTRY");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_INVALIDENTRY");

return PLUGIN_HANDLED;

}

} else {

//must be a positive number - PRINTS TO CONSOLE, LEAVE ALONE!

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_NEGATIVE");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_NEGATIVE")

}



return PLUGIN_HANDLED;



}



public RemoveZombies(id)

{

//this allows the user to enable or disable zombie classes

new arg[10], arg2

read_argv(1, arg, sizeof arg - 1)



arg2 = str_to_num(arg)

if(arg2 >= 0)

{

if (arg2 == 0) {

// Enable the zombie classes



if( loadedZombies == true )

{

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

set_pcvar_num(cvar_removezombie, 0);

set_cvar_num("zp_zombie_classes", 0)

} else {

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM_NEXTROUND");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM_NEXTROUND")

//set_pcvar_num(cvar_removezombie, 0);

//set_cvar_num("zp_zombie_classes", 0)

}

} else if (arg2 == 1) {

// Disable the zombie classes

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

set_pcvar_num(cvar_removezombie, 1);

set_cvar_num("zp_zombie_classes", 1)



} else if (arg2 == 2) {

// Disable, and dont add zombies to zombie plague

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM_NEXTROUND");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM_NEXTROUND")

set_pcvar_num(cvar_removezombie, 1);

set_cvar_num("zp_zombie_classes", 2)



} else {

// They typed something wrong

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_INVALIDENTRY");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_INVALIDENTRY");

return PLUGIN_HANDLED;



}

} else {

//must be a positive number - PRINTS TO CONSOLE, LEAVE ALONE!

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_NEGATIVE");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_NEGATIVE")

}



return PLUGIN_HANDLED;



}



public RemoveWeapons(id)

{

//this allows the user to enable or disable zombie classes

new arg[10], arg2

read_argv(1, arg, sizeof arg - 1)



arg2 = str_to_num(arg)

if(arg2 >= 0)

{

if(arg2 == 1) {

// Disable the custom human weapons

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

set_pcvar_num(cvar_removeweapons, 1);

set_cvar_num("zp_buy_custom", 1);



} else if (arg2 == 0) {

// Enable the custom human weapons

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ADMIN_CONFIRM");

client_print(id, print_console, "%s %L", textHeader, id, "ADMIN_CONFIRM")

set_pcvar_num(cvar_removeweapons, 0);

set_cvar_num("zp_buy_custom", 0);



} else {

// They typed something wrong

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_INVALIDENTRY");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_INVALIDENTRY");

return PLUGIN_HANDLED;

}

} else {

//must be a positive number - PRINTS TO CONSOLE, LEAVE ALONE!

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_NEGATIVE");

client_print(id, print_console, "%s %L", textHeader, id, "ERR_NEGATIVE")

}



return PLUGIN_HANDLED;



}



public show_menu_game(id)

{

// Show our menu

static menu[250], len, index;

len = 0

index = 1;



// Title

len += formatex(menu[len], sizeof menu - 1 - len, "\y%s^n^n", g_modname)



if( get_pcvar_num(cvar_removexp) == 0 )

{

// 1. Buy a level up

if(getAmmoPacks(id) >= getNeededPacks(id))

{

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %L", index, id, "MENU_BUY_XP")

len += formatex(menu[len], sizeof menu - 1 - len, " \y%d %L^n", getNeededPacks(id), id, "AMMO_PACKS_XP")

} else {

len += formatex(menu[len], sizeof menu - 1 - len, "\d%d. %L", index, id, "MENU_BUY_XP")

len += formatex(menu[len], sizeof menu - 1 - len, " \d%d %L^n", getNeededPacks(id), id, "AMMO_PACKS_XP")

}



index++;

}



//Human class

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %L^n", index, id,"MENU_HCLASS")



if (get_pcvar_num(cvar_removezombie) == 0)

{

//Zombie class

index++;

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %L^n", index, id,"MENU_ZCLASS")

}



// 0. Exit

len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "MENU_EXIT")



show_menu(id, KEYSMENU, menu, -1, "Game Menu")

}



public save_data(id)

{

new vaultkey[40],vaultData[256];



new g_selected_zclass[sizeof g_zclass_load[]] , g_selected_hclass[sizeof g_hclass_load[]] //bug fix for not showing menu if the user hasnt picked a zombie

if( g_hclass_showmenu[id] == true) { g_selected_hclass = "-1"; } else { formatex(g_selected_hclass, sizeof g_selected_hclass - 1, g_hclass_load[g_humanclassnext[id]]); }

if( g_zclass_showmenu[id] == true) { g_selected_zclass = "-1"; } else { formatex(g_selected_zclass, sizeof g_selected_zclass -1, g_zclass_load[g_zombieclassnext[id]]); }



formatex( vaultkey, sizeof vaultkey - 1, "%s_stats", userAuthID[id]);

formatex( vaultData, sizeof vaultData - 1, "0=%i;1=%s;2=%s;", userLevel[id], g_selected_hclass, g_selected_zclass);



nvault_set(gvault, vaultkey, vaultData);

}



public load_data(id)

{

if( get_pcvar_num(cvar_removexp) != 0)

{

// Do not load or save data

g_hclass_showmenu[id] = true;

g_zclass_showmenu[id] = true;

return;

}



new vaultkey[40], vaultReturn[256];

new vaultData[4][40], vaultResults[3][40];



// Get the Level

format(vaultkey, sizeof vaultkey - 1, "%s_stats", userAuthID[id]);

nvault_get(gvault, vaultkey, vaultReturn, sizeof vaultReturn - 1);



new Count = ExplodeString(vaultData, sizeof vaultData - 1, sizeof vaultData[] - 1, vaultReturn, ';')



if(Count == sizeof vaultResults - 1)

{

new ivaultLevel, i_hclass_id = -1, i_zclass_id = -1;



for( new i = 0; i < sizeof vaultData - 1; i++)

{

ExplodeString(vaultResults, sizeof vaultResults - 1, sizeof vaultResults[] - 1, vaultData[i], '=');



// We now have our items

switch (str_to_num(vaultResults[0]))

{

case VAULT_LEVEL:

{

ivaultLevel = str_to_num(vaultResults[1]);



if (ivaultLevel == 0) ivaultLevel = 1;
userLevel[id] = ivaultLevel

}



case VAULT_HCLASS:

{

// Look for our human class

if( !equali(vaultResults[1], "-1") )

{

for (new i2 = 0; i2 < g_hclass_i; i2++)

{

if( equali(vaultResults[1], g_hclass_load[i2]) )

{

i_hclass_id = i2;

break;

}

}

}



if ( i_hclass_id == -1)

{

// Couldnt find them

g_hclass_showmenu[id] = true;

} else {

// We found their zombie class

g_humanclassnext[id] = i_hclass_id;

g_hclass_showmenu[id] = false;

}

}



case VAULT_ZCLASS:

{

if( !equali(vaultResults[1], "-1") )

{

for (new i2 = 0; i2 < g_zclass_i; i2++)

{

if( equali(vaultResults[1], g_zclass_load[i2]) )

{

i_zclass_id = i2;

break;

}

}

}



if ( i_zclass_id == -1)

{

g_zclass_showmenu[id] = true;

} else {

g_zombieclassnext[id] = i_zclass_id;

g_zclass_showmenu[id] = false;

zp_set_user_zombie_class(id, i_zclass_id);

}

}

}

}

} else {

g_hclass_showmenu[id] = true;

g_zclass_showmenu[id] = true;



}

}



public client_connect(id)

{

// Do we bind a key

#if defined ZP_BINDMENU

client_cmd(id,"bind %s ^"say xpmenu^"", ZP_BINDMENU);

#endif

}

public client_putinserver(id)

{

// Reset vars

resetvars(id)



// Make sure zombieplague doesnt load the last plugin as the default zombie

zp_set_user_zombie_class(id, 0)



// Load their data

load_data(id);



// Set amount of levels to level up (called after load_data)

userNeededPacks[id] = getNeededPacks(id)



// Set the custom HUD display task

set_task(1.0, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")

}



public client_disconnect(id)

{

// Save the data

save_data(id);



// Remove tasks

remove_task(id+TASK_SHOWHUD)

}



public fw_PlayerSpawn_Post(id)

{

// Both humans and zombies spawn and call this

// Zombies can respawn if deathmatch is enabled



//TODO: Check if this works

if (zp_get_user_zombie(id))

return FMRES_IGNORED;



if (!is_user_alive(id)) // you could also use is_user_connected()

return FMRES_IGNORED;



// Set selected human and zombie class

g_humanclass[id] = g_humanclassnext[id]

g_zombieclass[id] = g_zombieclassnext[id]



// Change the default human variables

humanme(id)



// We know for sure they are a human, only give guns+speed+grav if they've picked a class

//if (( g_hclass_showmenu[id] == false ) /*(get_pcvar_num(cvar_removeweapons) == 0)*/)

//{

setHumanParameters(id)

//giveWeapons(id) //give weapons

//}



return FMRES_IGNORED;

}



public event_round_start()

{

static team;



// Set our humans hp, speed, etc

for( new o = 1; o < 33; o++)

{

// Not connected

if ( !is_user_connected(o) ) continue;



// Not playing

team = fm_get_user_team(o)

if (team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED) continue;



// Set our human vars

//humanme(o)



// Our next vars are now current

//g_humanclass[o] = g_humanclassnext[o]

//g_zombieclass[o] = g_zombieclassnext[o]



// The round has started

ExecuteForward(g_fwRoundStart, g_fwDummyResult, o);

}



// Set our vars

g_freezetime = true



// Do we show a welcome message?

if( get_pcvar_num(cvar_welcomemsg) )

set_task(2.0, "welcome_msg")

}



public zp_user_infected_pre(id, infector)

{

// Make sure he is not a human

g_human[id] = false



// Strip his guns (so they dont fall on the floor)

strip_weapons(id);

}



public zp_user_infected_post(id, infector)

{

// Do we show the menu?

if ((g_zclass_showmenu[id] == true) && get_pcvar_num(cvar_removezombie) ==0) show_menu_zclass(id);



}



public zp_user_humanized_pre(id)

{

// Set selected human class, incase he buys antidote

g_humanclass[id] = g_humanclassnext[id];

g_zombieclass[id] = g_zombieclassnext[id];

}



public zp_user_humanized_post(id)

{

// Hes become human again, set our vars

if( !zp_get_user_survivor(id) )

{

humanme(id)

setHumanParameters(id)

if( get_pcvar_num(cvar_removeweapons) == 0) giveWeapons(id) //give weapons

} else {

// He has become a survivor

g_human[id] = false

}



ShowHUD(id)

}









enum

{

WEAPON_GALIL = 0,

WEAPON_FAMAS,

WEAPON_M4A1,

}



public humanme(id)

{

// Set our human's height, jump, etc



if( g_hclass_showmenu[id] == true)

{

// They just entered, and no data was loaded for them

// Show the menu (despite the fact that they are automatically lvl. 1)

if (get_pcvar_num(cvar_removezombie) == 0)

{ set_task(0.1, "show_menu_hclass", id); } else { set_task(0.5, "show_menu_hclass", id); }

}



// They are human

g_human[id] = true;

}



public giveWeapons(id)

{

// Strip weapons first

strip_weapons(id);



// Give all weapons (everything is in g_hclass_weapons)

static i, weaponid;

for (i = 0; i < sizeof g_hclass_weapons; i++)

{

weaponid = g_hclass_weapons[g_humanclass[id]][i];



if (weaponid >= 1 && weaponid <= 14) {

// Give main weapon

give_primary_weapon(id, weaponid - 1);



} else if ( weaponid >= 15 && weaponid <= 20) {

// Give secondary gun

give_secondary_weapon(id, weaponid - 15);



} else if ( weaponid >= 21 && weaponid <=23) {

// Give grenades

fm_give_item(id, g_additional_items[weaponid - 21]);



} else {

// We have given them all their item, or they dont have any

return;

}

}

}



public setHumanParameters(id)

{

set_pev(id, pev_gravity, g_hclass_grav[g_humanclass[id]])

fm_set_user_health(id, g_hclass_hp[g_humanclass[id]])

}



public resetvars(id)

{

// This should only be called whenever a person connects!

// Otherwise it erases a persons choices

// Reset our human's variables

g_zombieclassnext[id] = 0;

g_humanclassnext[id] = 0;

g_zombieclass[id] = 0;

g_humanclass[id] = 0;



g_hclass_showmenu[id] = false;

g_zclass_showmenu[id] = false;



userLevel[id] = 1;



get_user_name(id, userAuthID[id], 31)

g_resetparams[id] = false

}



/*================================================================================

Begin Functions from the internet

================================================================================*/



//http://forums.alliedmods.net/showthread.php?p=67207#post67207

stock ExplodeString( Output[][], Max, Size, Input[], Delimiter )

{

new Idx, l = strlen(Input), Len;

do Len += (1 + copyc( Output[Idx], Size, Input[Len], Delimiter ));

while( (Len < l) && (++Idx < Max) )

return Idx;

}





/*================================================================================

Begin Code from zombie_plague (modified to suit the plugin)

================================================================================*/



// Set player's health (from fakemeta_util)

stock fm_set_user_health(id, health)

{

(health > 0) ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);

}





// Forward Player PreThink

public fw_PlayerPreThink(id)

{

// Not alive

if (!is_user_alive(id)) return;



// Not human, survivor will count as not a human

if(!g_human[id]) return;



// Set Player MaxSpeed

if (!g_freezetime)

{

if (g_human[id])

{

set_pev(id, pev_maxspeed, float(g_hclass_spd[g_humanclass[id]]))

return

}

}

}



public show_menu_zclass(id)

{

// Player disconnected

if (!is_user_connected(id))

return;



// Bots pick default classes

if (is_user_bot(id))

{

g_zombieclassnext[id] = 0 //basic zombie

return;

}



static menu[800], len, class, removexp;

new curClassIcon[2];



len = 0

removexp = get_pcvar_num(cvar_removexp);



// Title

len += formatex(menu[len], sizeof menu - 1 - len, "\y%L \r [%d-%d]^n^n", id, "MENU_ZCLASS_TITLE", ZCLASSES_STARTID+1, min(ZCLASSES_STARTID+7, g_zclass_i))



#if defined ZP_ALIGN_TEXT

// Align text

new spacers[400], g_zclass_spacers1, g_zclass_spacers2

new maxSpace1, maxSpace2, curSpace1[32], curSpace2[32]



// Get max width first

for (class = ZCLASSES_STARTID; class < min(ZCLASSES_STARTID+7, g_zclass_i); class++)

{

formatex(spacers, sizeof spacers - 1, "%d. %s", class-ZCLASSES_STARTID+1, g_zclass_name[class])



g_zclass_spacers1 = strlen(spacers)

g_zclass_spacers2 = strlen(g_zclass_info[class])



if(g_zclass_spacers1 > maxSpace1) maxSpace1 = g_zclass_spacers1

if(g_zclass_spacers2 > maxSpace2) maxSpace2 = g_zclass_spacers2

}



// 1-7. Class List

for (class = ZCLASSES_STARTID; class < min(ZCLASSES_STARTID+7, g_zclass_i); class++)

{

formatex(spacers, sizeof spacers - 1, "%d. %s", class-ZCLASSES_STARTID+1, g_zclass_name[class])



g_zclass_spacers1 = maxSpace1 - strlen(spacers)

g_zclass_spacers2 = maxSpace2 - strlen(g_zclass_info[class])



arrayset(curSpace1, '^0', sizeof curSpace1 - 1)

arrayset(curSpace2, '^0', sizeof curSpace2 - 1)



if(g_zclass_spacers1 != 0) arrayset(curSpace1, '^t', g_zclass_spacers1)

if(g_zclass_spacers2 != 0) arrayset(curSpace2, '^t', g_zclass_spacers2)



if (((class == g_zombieclassnext[id] && g_zclass_showmenu[id] == false) || (userLevel[id] < g_zclass_lvl[class])) && (removexp == 0))

{

if (class == g_zombieclassnext[id]) { curClassIcon = "*"; } else { curClassIcon = ""; }



len += formatex(menu[len], sizeof menu - 1 - len, "\d%s%d. %s %s %s %s %L %d^n", curClassIcon, class-ZCLASSES_STARTID+1, g_zclass_name[class], curSpace1, g_zclass_info[class], curSpace2, id, "BOTH_ATTRIB_LEVEL", g_zclass_lvl[class])

} else if (removexp == 1) {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s\y %s %s^n", class-ZCLASSES_STARTID+1, g_zclass_name[class], curSpace1, g_zclass_info[class])

} else {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s\y %s %s\w %s %L %d^n", class-ZCLASSES_STARTID+1, g_zclass_name[class], curSpace1, g_zclass_info[class], curSpace2, id, "BOTH_ATTRIB_LEVEL", g_zclass_lvl[class])

}

}

#else

for (class = ZCLASSES_STARTID; class < min(ZCLASSES_STARTID+7, g_zclass_i); class++)

{

if (((class == g_zombieclassnext[id] && g_zclass_showmenu[id] == false) || (userLevel[id] < g_zclass_lvl[class])) && (removexp == 0))

{

if (class == g_zombieclassnext[id]) { curClassIcon = "*"; } else { curClassIcon = ""; }



len += formatex(menu[len], sizeof menu - 1 - len, "\d%s%d. %s - %s - %L %d^n", curClassIcon, class-ZCLASSES_STARTID+1, g_zclass_name[class], g_zclass_info[class], id, "BOTH_ATTRIB_LEVEL", g_zclass_lvl[class])

} else if (removexp == 1) {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s -\y %s^n", class-ZCLASSES_STARTID+1, g_zclass_name[class], g_zclass_info[class]);

} else {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s -\y %s\w - %L %d^n", class-ZCLASSES_STARTID+1, g_zclass_name[class], g_zclass_info[class], id, "BOTH_ATTRIB_LEVEL", g_zclass_lvl[class]);

}

}

#endif



// 8. Back - 9. Next - 0. Exit

len += formatex(menu[len], sizeof menu - 1 - len, "^n\r8.\w %L^n\r9.\w %L^n^n\r0.\w %L", id, "MENU_BACK", id, "MENU_NEXT", id, "MENU_EXIT")



show_menu(id, KEYSMENU, menu, -1, "Zombie Class Menu")

}





public show_menu_hclass(id)

{

// Player disconnected

if (!is_user_connected(id))

return;



// Bots pick default classes

if (is_user_bot(id))

{

g_humanclassnext[id] = 0

return;

}



static menu[800], len, class, removexp

new curClassIcon[2]

len = 0

removexp = get_pcvar_num(cvar_removexp);



// Title

len += formatex(menu[len], sizeof menu - 1 - len, "\y%L \r[%d-%d]^n^n", id, "MENU_HCLASS_TITLE", HCLASSES_STARTID+1, min(HCLASSES_STARTID+7, g_hclass_i))



#if defined ZP_ALIGN_TEXT

// Align text

new spacers[400], g_hclass_spacers1, g_hclass_spacers2

new maxSpace1, maxSpace2, curSpace1[32], curSpace2[32]



// Get max width first

for (class = HCLASSES_STARTID; class < min(HCLASSES_STARTID+7, g_hclass_i); class++)

{

formatex(spacers, sizeof spacers - 1, "%d. %s", class-HCLASSES_STARTID+1, g_hclass_name[class])



g_hclass_spacers1 = strlen(spacers)

g_hclass_spacers2 = strlen(g_hclass_info[class])



if(g_hclass_spacers1 > maxSpace1) maxSpace1 = g_hclass_spacers1

if(g_hclass_spacers2 > maxSpace2) maxSpace2 = g_hclass_spacers2

}



// 1-7. Class List

for (class = HCLASSES_STARTID; class < min(HCLASSES_STARTID+7, g_hclass_i); class++)

{

formatex(spacers, sizeof spacers - 1, "%d. %s", class-HCLASSES_STARTID+1, g_hclass_name[class])



g_hclass_spacers1 = maxSpace1 - strlen(spacers)

g_hclass_spacers2 = maxSpace2 - strlen(g_hclass_info[class])



arrayset(curSpace1, '^0', sizeof curSpace1 - 1)

arrayset(curSpace2, '^0', sizeof curSpace2 - 1)



if(g_hclass_spacers1 != 0) arrayset(curSpace1, '^t', g_hclass_spacers1)

if(g_hclass_spacers2 != 0) arrayset(curSpace2, '^t', g_hclass_spacers2)



if (((class == g_humanclassnext[id] && g_hclass_showmenu[id] == false) || (userLevel[id] < g_hclass_lvl[class])) && (removexp == 0))

{

if (class == g_humanclassnext[id]) { curClassIcon = "*"; } else { curClassIcon = ""; }



len += formatex(menu[len], sizeof menu - 1 - len, "\d%s%d. %s %s %s %s %L %d^n", curClassIcon, class-HCLASSES_STARTID+1, g_hclass_name[class], curSpace1, g_hclass_info[class], curSpace2, id, "BOTH_ATTRIB_LEVEL", g_hclass_lvl[class])

} else if (removexp == 1) {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s\y %s %s^n", class-HCLASSES_STARTID+1, g_hclass_name[class], curSpace1, g_hclass_info[class])

} else {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s\y %s %s\w %s %L %d^n", class-HCLASSES_STARTID+1, g_hclass_name[class], curSpace1, g_hclass_info[class], curSpace2, id, "BOTH_ATTRIB_LEVEL", g_hclass_lvl[class])

}

}



#else

for (class = HCLASSES_STARTID; class < min(HCLASSES_STARTID+7, g_hclass_i); class++)

{

if (((class == g_humanclassnext[id] && g_hclass_showmenu[id] == false) || (userLevel[id] < g_hclass_lvl[class])) && (removexp == 0))

{

if (class == g_humanclassnext[id]) { curClassIcon = "*"; } else { curClassIcon = ""; }



len += formatex(menu[len], sizeof menu - 1 - len, "\d%s%d. %s - %s - %L %d^n", curClassIcon, class-HCLASSES_STARTID+1, g_hclass_name[class], g_hclass_info[class], id, "BOTH_ATTRIB_LEVEL", g_hclass_lvl[class])

} else if (removexp == 1) {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s -\y %s^n", class-HCLASSES_STARTID+1, g_hclass_name[class], g_hclass_info[class]);

} else {

len += formatex(menu[len], sizeof menu - 1 - len, "\r%d.\w %s -\y %s\w - %L %d^n", class-HCLASSES_STARTID+1, g_hclass_name[class], g_hclass_info[class], id, "BOTH_ATTRIB_LEVEL", g_hclass_lvl[class])

}

}

#endif



// 8. Back - 9. Next - 0. Exit

len += formatex(menu[len], sizeof menu - 1 - len, "^n\r8.\w %L^n\r9.\w %L^n^n\r0.\w %L", id, "MENU_BACK", id, "MENU_NEXT", id, "MENU_EXIT")



show_menu(id, KEYSMENU, menu, -1, "Human Class Menu")

}



/* ----------------------- Menu Handlers -------------------------*/



// Game Menu

public menu_game(id, key)

{

if(get_pcvar_num(cvar_removexp) == 1) key++;



switch (key)

{

case 0: // Buy a level up

{

if(getAmmoPacks(id) >= getNeededPacks(id))

{

if(userLevel[id]<10)

{

setAmmoPacks(id, getAmmoPacks(id) - getNeededPacks(id))

userLevel[id] += 1

save_data(id)



// Inform the user they leveled up

zp_colored_print(id, "^x04%s^x01 %L %d", textHeader, id ,"MENU_BUY_LEVEL", userLevel[id])

ShowHUD(id)

}

else zp_colored_print(id, "^x04%s^x01 Max level reached !", textHeader)

} else {

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id ,"ERR_NOTENOUGHPACKS")

}



// Return to the main xp menu

show_menu_game(id);



}



case 1: // Human Classes

{

// Restrict it here if we wanted to

show_menu_hclass(id)

}



case 2: // Zombie Classes

{

if (get_pcvar_num(cvar_removezombie) == 0)

{

// Restrict it here if we wanted to

show_menu_zclass(id)

}

}

}



return PLUGIN_HANDLED;

}



// Zombie Class Menu

public menu_zclass(id, key)

{

// Special keys / items list exceeded

if (key >= MENU_KEY_BACK || ZCLASSES_SELECTION >= g_zclass_i)

{

switch (key)

{

case MENU_KEY_BACK: // back

{

if (ZCLASSES_STARTID-7 >= 0) ZCLASSES_STARTID -= 7

}

case MENU_KEY_NEXT: // next

{

if (ZCLASSES_STARTID+7 < g_zclass_i) ZCLASSES_STARTID += 7

}

case MENU_KEY_EXIT: // exit

{

return PLUGIN_HANDLED;

}

}



// Show extra items menu again

show_menu_zclass(id)

return PLUGIN_HANDLED;

}



// They selected their own class

if (ZCLASSES_SELECTION == g_zombieclassnext[id])

{

//Plugin continues if this is false (sets class info on connect)

if( g_zclass_showmenu[id] == false) //when a client first connects, the menu shows all zombies as a choice even the one the client defaults to (index of 0)

{

// Alert them they already have chosen a zombie

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_ALREADYSELECTED")

show_menu_zclass(id)



// They had already chosen this zombie, dont rerun the command

return PLUGIN_HANDLED;

}

}



if (get_pcvar_num(cvar_removexp) == 0)

{

if (g_zclass_lvl[HCLASSES_SELECTION] > userLevel[id])

{

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_NOTLEVEL")

show_menu_zclass(id)

return PLUGIN_HANDLED;

}

}



// Store selection for the next infection

g_zombieclassnext[id] = ZCLASSES_SELECTION;



// Disable showing menu since theyve chosen

g_zclass_showmenu[id] = false;



// Show selected zombie class info and stats

zp_colored_print(id, "^x04%s^x01 %L: %s", textHeader, id, "ZOMBIE_SELECT_XP", g_zclass_name[g_zombieclassnext[id]])

zp_colored_print(id, "^x04%s^x01 %L: %d %L: %d %L: %d %L: %d%%", textHeader, id, "ZOMBIE_ATTRIB1_XP", g_zclass_hp[g_zombieclassnext[id]], id, "ZOMBIE_ATTRIB2_XP", g_zclass_spd[g_zombieclassnext[id]],

id, "ZOMBIE_ATTRIB3_XP", floatround(g_zclass_grav[g_zombieclassnext[id]]*800), id, "ZOMBIE_ATTRIB4_XP", floatround(g_zclass_kb[g_zombieclassnext[id]]*100))



// Set the class for zombie plague

zp_set_user_zombie_class(id, g_zombieclassnext[id])



return PLUGIN_HANDLED;

}



// Human Class Menu

public menu_hclass(id, key)

{

// Special keys / items list exceeded

if (key >= MENU_KEY_BACK || HCLASSES_SELECTION >= g_hclass_i)

{

switch (key)

{

case MENU_KEY_BACK: // back

{

if (HCLASSES_STARTID-7 >= 0) HCLASSES_STARTID -= 7

}

case MENU_KEY_NEXT: // next

{

if (HCLASSES_STARTID+7 < g_hclass_i) HCLASSES_STARTID += 7

}

case MENU_KEY_EXIT: // exit

{

return PLUGIN_HANDLED;

}

}



// Show human list again

show_menu_hclass(id)

return PLUGIN_HANDLED;

}



if (HCLASSES_SELECTION == g_humanclassnext[id])

{

// When a client first connects, the menu shows all zombies as a choice even the one the client defaults to (index of 0)

if( g_hclass_showmenu[id] == false)

{

// Alert them they alaerdy have chosen a zombie

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_ALREADYSELECTED")

show_menu_hclass(id)

return PLUGIN_HANDLED; //they had already chosen this zombie, dont rerun the command

}

}



if (get_pcvar_num(cvar_removexp) == 0)

{

if (g_hclass_lvl[HCLASSES_SELECTION] > userLevel[id])

{

zp_colored_print(id, "^x04%s^x01 %L", textHeader, id, "ERR_NOTLEVEL")

show_menu_hclass(id)

return PLUGIN_HANDLED;

}

}



// Store selection for the next infection

g_humanclassnext[id] = HCLASSES_SELECTION;



// Disable showing menu since theyve chosen

g_hclass_showmenu[id] = false;



// Show selected human class info and stats

zp_colored_print(id, "^x04%s^x01 %L: %s", textHeader, id, "HUMAN_SELECT_XP", g_hclass_name[g_humanclassnext[id]])

zp_colored_print(id, "^x04%s^x01 %L: %d %L: %d %L: %d", textHeader, id, "HUMAN_ATTRIB1_XP", g_hclass_hp[g_humanclassnext[id]], id, "HUMAN_ATTRIB2_XP", g_hclass_spd[g_humanclassnext[id]],

id, "HUMAN_ATTRIB3_XP", floatround(g_hclass_grav[g_humanclassnext[id]]*800), id)



return PLUGIN_HANDLED;

}



public ShowHUD(taskid)

{

//if (get_pcvar_num(cvar_removexp) == 1 ) return;



static id;



// Our ID

id = ID_SHOWHUD;



// Player died?

if (!is_user_alive(id))

{

// Get spectating target

id = pev(id, PEV_SPEC_TARGET) //other persons ID



// Target not alive

if (!is_user_alive(id)) return;

}



// Format the classname

static red, green, blue, g_name[sizeof g_hclass_name]; // Hopefully g_zclass_name and g_zclass_name will be left the same array size



if ( g_human[id] == false ) // zombies

{

red = 200

green = 250

blue = 0



formatex(g_name, sizeof g_name - 1, "%L", id, "HUD_ZOMBIE");

}

else // humans

{

red = 0

green = 0

blue = 255



copy(g_name, sizeof g_name - 1, g_hclass_name[g_humanclass[id]]);

}



if (id != ID_SHOWHUD)

{

if (get_pcvar_num(cvar_removexp) == 0 )

{

// Set our HUD in position for spectating

set_hudmessage(255, 255, 255, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1);

ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync2, "%L: %s - %L: %d", ID_SHOWHUD, "HUD_CLASS", g_name, ID_SHOWHUD, "HUD_LEVEL", userLevel[id]);

} else {

// Just show the class information

set_hudmessage(255, 255, 255, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1);

ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync2, "%L: %s", ID_SHOWHUD, "HUD_CLASS", g_name);

}

} else {

if (get_pcvar_num(cvar_removexp) == 0 )

{

// Set our HUD in position for the player

set_hudmessage(red, green, blue, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1);

ShowSyncHudMsg(id, g_MsgSync2, "%L: %s - %L: %d^t^t^t", id, "HUD_CLASS", g_name, id, "HUD_LEVEL", userLevel[id]);

} else {

// Just show the class information

set_hudmessage(red, green, blue, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1);

ShowSyncHudMsg(id, g_MsgSync2, "%L: %s^t^t^t", id, "HUD_CLASS", g_name);

}

}

}



// Native: native_get_user_human_class

public native_get_user_human_class(id)

{

return g_humanclass[id];

}



// Native: zpxp_register_human_class

public native_register_human_class(const name[], const info[], const model[], const weapons[], hp, speed, Float:gravity, level)

{

// Reached human classes limit

if (g_hclass_i >= sizeof g_hclass_name)

return -1;



// Strings passed byref

param_convert(1)

param_convert(2)

param_convert(3)

param_convert(4)



// Add the class

copy(g_hclass_name[g_hclass_i], sizeof g_hclass_name[] - 1, name)

copy(g_hclass_info[g_hclass_i], sizeof g_hclass_info[] - 1, info)

copy(g_hclass_model[g_hclass_i], sizeof g_hclass_model[] - 1, model)

copy(g_hclass_weapons[g_hclass_i], sizeof g_hclass_weapons[] - 1, weapons)

g_hclass_hp[g_hclass_i] = hp

g_hclass_spd[g_hclass_i] = speed

g_hclass_grav[g_hclass_i] = gravity

g_hclass_lvl[g_hclass_i] = level





// For the load_data and save_data

new tSave[40]

formatex(tSave, sizeof tSave - 1, "%s%s", name, info);

replace_all(tSave, sizeof tSave - 1, ";", "")

replace_all(tSave, sizeof tSave - 1, " ", "")

g_hclass_load[g_hclass_i] = tSave;



// Increase registered classes counter

g_hclass_i++



// Return id under which we registered the class

return g_hclass_i-1;

}



// Native: zpxp_register_zombie_class

public native_register_zombie_class(const name[], const info[], const model[], const clawmodel[], hp, speed, Float:gravity, Float:knockback, level)

{

// Dont return -1, we wil get lots of server window print errors from the plugins

if( get_pcvar_num(cvar_removezombie) == 2) return 0;



//Bugfix for loading zombies

loadedZombies = true;



// Strings passed byref

param_convert(1)

param_convert(2)

param_convert(3)

param_convert(4)



// Save the name, level required, and classid

copy(g_zclass_name[g_zclass_i], sizeof g_zclass_name[] - 1, name)

copy(g_zclass_info[g_zclass_i], sizeof g_zclass_info[] - 1, info)

copy(g_zclass_model[g_zclass_i], sizeof g_zclass_model[] - 1, model)

copy(g_zclass_clawmodel[g_zclass_i], sizeof g_zclass_clawmodel[] - 1, clawmodel)



g_zclass_hp[g_zclass_i] = hp

g_zclass_spd[g_zclass_i] = speed

g_zclass_grav[g_zclass_i] = gravity

g_zclass_kb[g_zclass_i] = knockback

g_zclass_lvl[g_zclass_i] = level



// For the load_data and save_data

new tSave[40]

formatex(tSave, sizeof tSave - 1, "%s%s", name, info);

replace_all(tSave, sizeof tSave - 1, ";", "")

replace_all(tSave, sizeof tSave - 1, " ", "")

g_zclass_load[g_zclass_i] = tSave;



// Get the classid from zombie plague

new g_returnclass_id;

g_returnclass_id = zp_register_zombie_class(g_zclass_name[g_zclass_i], g_zclass_info[g_zclass_i], g_zclass_model[g_zclass_i], g_zclass_clawmodel[g_zclass_i], g_zclass_hp[g_zclass_i] / 2, g_zclass_spd[g_zclass_i], g_zclass_grav[g_zclass_i], g_zclass_kb[g_zclass_i]);



// Make sure there was no error

if( g_returnclass_id == -1 )

{

server_print("%s %L", textHeader, LANG_PLAYER, "ERR_BADRETURN");

return -1

}



// Increase registered classes counter

g_zclass_i++



// Return id under which we registered the class

return g_zclass_i-1;

}



public native_register_extra_item(const name[], cost, team)

{

//TO DO



}



/*================================================================================

--The following are copied directly from zombie_plague, no reinventing wheels...

[Shared Functions]

=================================================================================*/



// Welcome Message Task

public welcome_msg()

{

// Show mod info

zp_colored_print(0, "^x04%s^x01 %L", textHeaderOrig, LANG_PLAYER, "NOTICE_INFO_XP")

}



// Log Event Round Start

public logevent_round_start()

{

// Freezetime ends

g_freezetime = false

}



// Get User Team

stock fm_get_user_team(id)

{

return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);

}



zp_colored_print(target, const message[], any:...)

{

static buffer[512], i, argscount

argscount = numargs()



// Send to everyone

if (!target)

{

static player

for (player = 1; player <= g_maxplayers; player++)

{

// Not connected

if (!is_user_connected(player))

continue;



// Remember changed arguments

static changed[5], changedcount // [5] = max LANG_PLAYER occurencies

changedcount = 0



// Replace LANG_PLAYER with player id

for (i = 2; i < argscount; i++)

{

if (getarg(i) == LANG_PLAYER)

{

setarg(i, 0, player)

changed[changedcount] = i

changedcount++

}

}



// Format message for player

vformat(buffer, sizeof buffer - 1, message, 3)



// Send it

message_begin(MSG_ONE, g_msgSayText, _, player)

write_byte(player)

write_string(buffer)

message_end()



// Replace back player id's with LANG_PLAYER

for (i = 0; i < changedcount; i++)

setarg(changed[i], 0, LANG_PLAYER)

}

}



// Send to specific target

else

{

// Replace LANG_PLAYER with player id

for (i = 2; i < argscount; i++)

{

if (getarg(i) == LANG_PLAYER)

setarg(i, 0, target)

}



// Format message for player

vformat(buffer, sizeof buffer - 1, message, 3)



// Send it

message_begin(MSG_ONE, g_msgSayText, _, target)

write_byte(target)

write_string(buffer)

message_end()

}

}



/*================================================================================

Code JUST for giving guns

================================================================================*/



// Drop primary/secondary weapons

stock drop_weapons(id, dropwhat)

{

// Get user weapons

static weapons[32], num, i, weaponid

num = 0 // reset passed weapons count (bugfix)

get_user_weapons(id, weapons, num)



// Loop through them and drop primaries or secondaries

for (i = 0; i < num; i++)

{

// Prevent re-indexing the array

weaponid = weapons[i]



if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))

{

// Get the weapon entity

static wname[32], weapon_ent

get_weaponname(weaponid, wname, sizeof wname - 1)

weapon_ent = fm_find_ent_by_owner(-1, wname, id);



// Hack: store weapon bpammo on PEV_ADDITIONAL_AMMO

set_pev(weapon_ent, PEV_ADDITIONAL_AMMO, fm_get_user_bpammo(id, weaponid))



// Player drops the weapon and looses his bpammo

engclient_cmd(id, "drop", wname)

fm_set_user_bpammo(id, weaponid, 0)

}

}

}



// Set User BP Ammo

stock fm_set_user_bpammo(id, weapon, amount)

{

static offset



switch(weapon)

{

case CSW_AWP: offset = OFFSET_AWM_AMMO;

case CSW_SCOUT,CSW_AK47,CSW_G3SG1: offset = OFFSET_SCOUT_AMMO;

case CSW_M249: offset = OFFSET_PARA_AMMO;

case CSW_M4A1,CSW_FAMAS,CSW_AUG,CSW_SG550,CSW_GALI,CSW_SG552: offset = OFFSET_FAMAS_AMMO;

case CSW_M3,CSW_XM1014: offset = OFFSET_M3_AMMO;

case CSW_USP,CSW_UMP45,CSW_MAC10: offset = OFFSET_USP_AMMO;

case CSW_FIVESEVEN,CSW_P90: offset = OFFSET_FIVESEVEN_AMMO;

case CSW_DEAGLE: offset = OFFSET_DEAGLE_AMMO;

case CSW_P228: offset = OFFSET_P228_AMMO;

case CSW_GLOCK18,CSW_MP5NAVY,CSW_TMP,CSW_ELITE: offset = OFFSET_GLOCK_AMMO;

case CSW_FLASHBANG: offset = OFFSET_FLASH_AMMO;

case CSW_HEGRENADE: offset = OFFSET_HE_AMMO;

case CSW_SMOKEGRENADE: offset = OFFSET_SMOKE_AMMO;

case CSW_C4: offset = OFFSET_C4_AMMO;

default: return;

}



set_pdata_int(id, offset, amount, OFFSET_LINUX)

}



// Get User BP Ammo

stock fm_get_user_bpammo(id, weapon)

{

static offset



switch(weapon)

{

case CSW_AWP: offset = OFFSET_AWM_AMMO;

case CSW_SCOUT,CSW_AK47,CSW_G3SG1: offset = OFFSET_SCOUT_AMMO;

case CSW_M249: offset = OFFSET_PARA_AMMO;

case CSW_M4A1,CSW_FAMAS,CSW_AUG,CSW_SG550,CSW_GALI,CSW_SG552: offset = OFFSET_FAMAS_AMMO;

case CSW_M3,CSW_XM1014: offset = OFFSET_M3_AMMO;

case CSW_USP,CSW_UMP45,CSW_MAC10: offset = OFFSET_USP_AMMO;

case CSW_FIVESEVEN,CSW_P90: offset = OFFSET_FIVESEVEN_AMMO;

case CSW_DEAGLE: offset = OFFSET_DEAGLE_AMMO;

case CSW_P228: offset = OFFSET_P228_AMMO;

case CSW_GLOCK18,CSW_MP5NAVY,CSW_TMP,CSW_ELITE: offset = OFFSET_GLOCK_AMMO;

case CSW_FLASHBANG: offset = OFFSET_FLASH_AMMO;

case CSW_HEGRENADE: offset = OFFSET_HE_AMMO;

case CSW_SMOKEGRENADE: offset = OFFSET_SMOKE_AMMO;

case CSW_C4: offset = OFFSET_C4_AMMO;

default: return -1;

}



return get_pdata_int(id, offset, OFFSET_LINUX);

}



// Give an item to a player (from fakemeta_util)

stock fm_give_item(id, const item[])

{

static ent

ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))

if (!pev_valid(ent)) return;



static Float:originF[3]

pev(id, pev_origin, originF)

set_pev(ent, pev_origin, originF)

set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)

dllfunc(DLLFunc_Spawn, ent)



static save

save = pev(ent, pev_solid)

dllfunc(DLLFunc_Touch, ent, id)

if (pev(ent, pev_solid) != save)

return;



engfunc(EngFunc_RemoveEntity, ent)

}



// Strip user weapons (from fakemeta_util)

stock fm_strip_user_weapons(id)

{

static ent

ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"))

if (!pev_valid(ent)) return;



dllfunc(DLLFunc_Spawn, ent)

dllfunc(DLLFunc_Use, ent, id)

engfunc(EngFunc_RemoveEntity, ent)

}





// Find entity by its owner (from fakemeta_util)

stock fm_find_ent_by_owner(entity, const classname[], owner)

{

while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) {}



return entity;

}



strip_weapons (id)

{

if( !get_pcvar_num(cvar_removeweapons) )

{

// Drop previous weapons

drop_weapons(id, 1)

drop_weapons(id, 2)

}



// Strip off from weapons

fm_strip_user_weapons(id)

fm_give_item(id, "weapon_knife")

}



// Buy Primary Weapon

give_primary_weapon(id, key)

{

// Get weapon index

static weaponid

weaponid = get_weaponid(g_primary_items[key])



// Give the new weapon

fm_give_item(id, g_primary_items[key])

fm_set_user_bpammo(id, weaponid, MAXBPAMMO[key])



/*

// Give additional items

static i

for (i = 0; i < sizeof g_additional_items; i++)

fm_give_item(id, g_additional_items[i])

*/

}



give_secondary_weapon(id, key)

{

// Get weapon index

static weaponid

weaponid = get_weaponid(g_secondary_items[key])



// Give the new weapon with full ammo

fm_give_item(id, g_secondary_items[key])

fm_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid])

}



/*================================================================================

End Code just for giving guns

================================================================================*/

uite-l

0 0
  
Back to top
View user's profile Send private message
BlueSkiLz

[Mentally Stable]



Status: Offline
(since 16-07-2019 08:32)
Joined: 18 Oct 2016
Posts: 111, Topics: 33
Location: Romania

Reputation: 34.7

Post Posted: 21-02-2017, 19:20:23 | Translate post to: ... (Click for more languages)

Imi bagi comanda aia pe care ai spus ca mi-o bagi sau..?
0 0
  
Back to top
View user's profile Send private message
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Freakz Forum Index -> Trash Bin -> CS 2006-2019 (Archived) -> Plugins - Help / Support  


The time now is 25-04-2024, 17:05:32
Copyright info

Based on phpBB ro/com
B

 
 
 







I forgot my password


This message appears only once, so
like us now until it's too late ! :D
x