Моля, помогнете..
искам да добавя команда \guns в този мод
Код за потвърждение: Избери целия код
#include "gunxpmod.cfg"
#if defined ZOMBIE_BIOHAZARD
#include <biohazard>
#endif
#if defined ZOMBIE_PLAGUE
#include <zombieplague>
#endif
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <hamsandwich>
#define PLUGIN "Gun Xp Mod"
#define AUTHOR "xbatista"
#define VERSION "2.3"
#define OFFSET_PRIMARYWEAPON 116
#define TASK_SHOW_LEVEL 10113
#define fm_cs_set_user_nobuy(%1) set_pdata_int(%1, 235, get_pdata_int(%1, 235) & ~(1<<0) ) //no weapon buy
new PlayerXp[33];
new PlayerLevel[33];
new g_Vault;
new g_remember_selection[33], g_kills[33], g_remember_selection_pistol[33];
new g_maxplayers, g_msgHudSync1, SayTxT, enable_grenades;
new levelspr, levelspr2, show_level_text, show_rank;
new savexp, save_type, xp_kill, xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, p_Enabled, level_style;
new enable_admin_xp, admin_xp;
/*================================================================================
[MySQLx Vars, other]
=================================================================================*/
new Handle:g_hTuple;
new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass;
new const szTables[][] =
{
"CREATE TABLE IF NOT EXISTS `mytable` ( `player_id` varchar(32) NOT NULL,`player_level` int(8) default NULL,`player_xp` int(16) default NULL,PRIMARY KEY (`player_id`) ) TYPE=MyISAM;"
}
new const WEAPONCONST[MAXLEVEL][] = { "weapon_glock18", "weapon_usp", "weapon_p228", "weapon_fiveseven", "weapon_deagle", "weapon_elite", "weapon_tmp",
"weapon_mac10", "weapon_ump45", "weapon_mp5navy", "weapon_p90", "weapon_scout", "weapon_awp", "weapon_famas", "weapon_galil", "weapon_m3", "weapon_xm1014",
"weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_sg552", "weapon_sg550", "weapon_g3sg1", "weapon_m249"
}; // Give Weapons
new const WEAPONMDL[MAXLEVEL][] = { "models/w_glock18.mdl", "models/w_usp.mdl", "models/w_p228.mdl", "models/w_fiveseven.mdl", "models/w_deagle.mdl", "models/w_elite.mdl", "models/w_tmp.mdl",
"models/w_mac10.mdl", "models/w_ump45.mdl", "models/w_mp5.mdl", "models/w_p90.mdl", "models/w_scout.mdl", "models/w_awp.mdl", "models/w_famas.mdl", "models/w_galil.mdl", "models/w_m3.mdl", "models/w_xm1014.mdl",
"models/w_ak47.mdl", "models/w_m4a1.mdl", "models/w_aug.mdl", "models/w_sg552.mdl", "models/w_sg550.mdl", "models/w_g3sg1.mdl", "models/w_m249.mdl"
}; // Blocks pick up weapon, don't change!
new const AMMOCONST[MAXLEVEL] = { 17, 16, 1, 11, 26, 10, 23, 7, 12, 19, 30, 3, 18,
15, 14, 21, 5, 28, 22, 8, 27, 13, 24, 20
}; // Weapons ID(CSW) don't change!
/*================================================================================
[Plugin natives,precache,init]
=================================================================================*/
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("gxm_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
set_cvar_string("gxm_version", VERSION)
register_concmd("set_level", "cmd_give_level", ADMIN_RCON, "set_level <name> <amount>" );
register_clcmd("say level", "showlevel");
register_clcmd("say /level", "showlevel");
register_clcmd("say /top20","showtop20");
register_clcmd("say /menu","show_main_menu_info");
register_clcmd("say menu","show_main_menu_info");
register_clcmd("say guns", "enableMenu")
register_clcmd("say /guns", "enableMenu")
p_Enabled = register_cvar( "gxm_enable", "1" ); // Plugin enabled? 1 = Yes, 0 = No.
save_type = register_cvar("gxm_savetype","1"); // Save Xp to : 1 = MySQL, 0 = NVault.
savexp = register_cvar("gxm_save","0"); // Save Xp by : 1 = SteamID, 0 = IP.
xp_kill = register_cvar("gxm_xp","10"); // How much xp gain if you killed someone?
show_level_text = register_cvar("gxm_level_text","0"); // Show your level by : 1 = HUD message, 0 = Simple colored text message.
show_rank = register_cvar("gxm_show_rank","1"); // Show rank in /top20? 1 = Yes, 0 = No.
level_style = register_cvar("gxm_level_style","0"); // You will gain each level new gun : 1 = Yes, 0 = No,select your gun by menu.
enable_grenades = register_cvar("gxm_grenades","0"); // Give to player grenades? 1 = Yes, 0 = No.
enable_triple = register_cvar("gxm_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
xp_triple = register_cvar("gxm_triple_xp","20"); // How much bonus xp give for Triple Kill?
triple_kills = register_cvar("gxm_triple_kills","25"); // How much kills needed to give bonus xp?
enable_ultra = register_cvar("gxm_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
xp_ultra = register_cvar("gxm_ultra_xp","35"); // How much bonus xp give for Ultra Kill?
ultra_kills = register_cvar("gxm_ultra_kills","30"); // How much kills needed to give bonus xp?
enable_admin_xp = register_cvar("gxm_admin_xp","1"); // Enable Extra xp for killing? 1 = Yes, 0 = No.
admin_xp = register_cvar("gxm_extra_xp","50"); // How much extra xp give to admins?
// SQLx cvars
mysqlx_host = register_cvar ("gxm_host", ""); // The host from the db
mysqlx_user = register_cvar ("gxm_user", ""); // The username from the db login
mysqlx_pass = register_cvar ("gxm_pass", ""); // The password from the db login
mysqlx_db = register_cvar ("gxm_dbname", ""); // The database name
// Events //
register_event("DeathMsg", "event_deathmsg", "a");
register_event("StatusValue", "Event_StatusValue", "bd", "1=2")
// Forwards //
RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
register_forward(FM_Touch, "fwd_Touch");
// Messages //
#if defined NORMAL_MOD || defined ZOMBIE_SWARM
register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
#endif
// Other //
register_menucmd(register_menuid("Main Menu"), 1023, "main_menu_info")
register_dictionary("gunxpmod.txt");
MySQLx_Init()
SayTxT = get_user_msgid("SayText");
g_msgHudSync1 = CreateHudSyncObj()
g_maxplayers = get_maxplayers();
}
public plugin_natives()
{
// Player natives //
register_native("get_user_xp", "native_get_user_xp", 1);
register_native("set_user_xp", "native_set_user_xp", 1);
register_native("get_user_level", "native_get_user_level", 1);
register_native("set_user_level", "native_set_user_level", 1);
register_native("get_user_max_level", "native_get_user_max_level", 1);
}
public plugin_precache()
{
levelspr = engfunc(EngFunc_PrecacheModel, "sprites/xfire.spr");
levelspr2 = engfunc(EngFunc_PrecacheModel, "sprites/xfire2.spr");
engfunc(EngFunc_PrecacheSound, LevelUp);
}
public plugin_cfg()
{
new ConfDir[32], File[192];
get_configsdir( ConfDir, charsmax( ConfDir ) );
formatex( File, charsmax( File ), "%s/gunxpmod.cfg", ConfDir );
if( !file_exists( File ) )
{
server_print( "File %s doesn't exist!", File );
write_file( File, " ", -1 );
}
else
{
server_print( "%s successfully loaded.", File );
server_cmd( "exec %s", File );
}
//Open our vault and have g_Vault store the handle.
g_Vault = nvault_open( "gunxpmod" );
//Make the plugin error if vault did not successfully open
if ( g_Vault == INVALID_HANDLE )
set_fail_state( "Error opening GunXpMod nVault, file does not exist!" );
}
public plugin_end()
{
//Close the vault when the plugin ends (map change\server shutdown\restart)
nvault_close( g_Vault );
}
public client_connect(id)
{
g_remember_selection[id] = MAX_PISTOLS_MENU;
g_remember_selection_pistol[id] = 0;
LoadLevel(id)
}
public client_disconnect(id)
{
SaveLevel(id)
PlayerXp[id] = 0;
PlayerLevel[id] = 0;
remove_task( TASK_SHOW_LEVEL + id );
}
public Message_StatusIcon(iMsgId, MSG_DEST, id)
{
if( !get_pcvar_num(p_Enabled) )
return PLUGIN_HANDLED;
static szIcon[5]
get_msg_arg_string(2, szIcon, 4)
if( szIcon[0] == 'b' && szIcon[2] == 'y' && szIcon[3] == 'z' )
{
if( get_msg_arg_int(1))
{
fm_cs_set_user_nobuy(id)
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public fwd_Touch(ent, id)
{
if (!is_user_alive(id) || !pev_valid( ent ) )
return FMRES_IGNORED;
static szEntModel[32];
pev( ent , pev_model , szEntModel , 31 );
for (new level_equip_id = PlayerLevel[id] + 1; level_equip_id < MAXLEVEL; level_equip_id++)
{
if ( equali( szEntModel , WEAPONMDL[level_equip_id] ) )
{
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public fwd_PlayerSpawn(id)
{
if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
return;
g_kills[id] = 0
#if defined ZOMBIE_SWARM
if ( !get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
{
StripPlayerWeapons(id);
set_task(2.0, "show_main_menu_level", id)
}
#endif
#if defined NORMAL_MOD || defined ZOMBIE_INFECTION
if ( !get_pcvar_num(level_style))
{
StripPlayerWeapons(id);
set_task(2.0, "show_main_menu_level", id)
}
#endif
if( get_pcvar_num(show_level_text) )
{
remove_task( TASK_SHOW_LEVEL + id );
set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
}
#if defined ZOMBIE_SWARM
if ( get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
{
set_task(0.3, "give_weapon", id);
}
#endif
#if defined NORMAL_MOD || defined ZOMBIE_INFECTION
if ( get_pcvar_num(level_style) )
{
set_task(0.3, "give_weapon", id);
}
#endif
}
#if defined ZOMBIE_PLAGUE
public zp_user_humanized_post(id, survivor)
{
if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
return;
set_task(1.0, "show_main_menu_level", id);
}
#endif
#if defined ZOMBIE_BIOHAZARD
public event_infect(g_victim, g_attacker)
{
if( !get_pcvar_num(p_Enabled) )
return;
new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple) + get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0
new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra) + get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0
if((1 <= g_attacker <= g_maxplayers))
{
if(g_victim != g_attacker)
{
g_kills[g_attacker]++;
if(PlayerLevel[g_attacker] < MAXLEVEL-1)
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
{
PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
}
if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
{
PlayerXp[g_attacker] += counted_triple
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
{
PlayerXp[g_attacker] += counted_ultra
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
}
else
{
PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
}
check_level(g_attacker)
}
}
}
}
#endif
#if defined ZOMBIE_PLAGUE
public zp_user_infected_post(g_victim, g_attacker)
{
if( !get_pcvar_num(p_Enabled) )
return;
new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
if((1 <= g_attacker <= g_maxplayers))
{
if(g_victim != g_attacker)
{
g_kills[g_attacker]++;
if(PlayerLevel[g_attacker] < MAXLEVEL-1)
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
{
PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
}
if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
{
PlayerXp[g_attacker] += counted_triple
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
{
PlayerXp[g_attacker] += counted_ultra
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
}
else
{
PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
}
check_level(g_attacker)
}
}
}
}
#endif
public event_deathmsg()
{
if( !get_pcvar_num(p_Enabled) )
return;
new g_attacker = read_data(1);
new g_victim = read_data(2);
new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
if((1 <= g_attacker <= g_maxplayers))
{
if(g_victim != g_attacker)
{
g_kills[g_attacker]++;
if(PlayerLevel[g_attacker] < MAXLEVEL-1)
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
{
PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
}
if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
{
PlayerXp[g_attacker] += counted_triple
set_hudmessage(0, 40, 255, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
{
PlayerXp[g_attacker] += counted_ultra
set_hudmessage(255, 30, 0, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
}
else
{
PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
}
check_level(g_attacker)
}
}
}
}
public Event_StatusValue(id)
{
new target = read_data(2)
if(target != id && target != 0 && get_pcvar_num(p_Enabled))
{
static sName[32];
get_user_name(target, sName, 31)
set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 2)
ShowSyncHudMsg(id, g_msgHudSync1, "%L", LANG_SERVER, "LEVEL_TEXT", sName, PlayerLevel[target], RANKLEVELS[PlayerLevel[target]])
}
}
public task_show_level(task)
{
new id = task - TASK_SHOW_LEVEL
if(!is_user_alive(id) || !get_pcvar_num(show_level_text) || !get_pcvar_num(p_Enabled) )
return;
set_hudmessage(255, 0, 0, 0.02, 0.33, 0, 0.0, 0.3, 0.0, 0.0)
ShowSyncHudMsg(id, g_msgHudSync1 , "%L", LANG_SERVER, "LEVEL_HUD_TEXT", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]], RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
}
public showlevel(id)
{
if ( !get_pcvar_num(p_Enabled) || get_pcvar_num(show_level_text) )
return PLUGIN_HANDLED;
client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT2", PlayerLevel[id] , PlayerXp[id], LEVELS[PlayerLevel[id]]);
client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]);
return PLUGIN_HANDLED;
}
public descriptionx(id)
{
new szMotd[2048], szTitle[64], iPos = 0
format(szTitle, 63, "Info")
iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
iPos += format(szMotd[iPos], 2047-iPos, "%L^n", LANG_SERVER, "DESCRIPTION")
iPos += format(szMotd[iPos], 2047-iPos, "%L", LANG_SERVER, "DESCRIPTION2")
show_motd(id, szMotd, szTitle)
return PLUGIN_HANDLED;
}
public check_level(id)
{
if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(p_Enabled))
{
while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
{
PlayerLevel[id]++;
if(is_user_alive(id))
{
if ( get_pcvar_num(level_style) )
{
give_weapon(id);
}
new p_origin[3];
get_user_origin(id, p_origin, 0);
set_sprite(p_origin, levelspr, 30)
set_sprite(p_origin, levelspr2, 30)
}
emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
static name[32] ; get_user_name(id, name, charsmax(name));
client_printcolor(0, "%L", LANG_SERVER, "LEVEL_UP", name, PlayerLevel[id]);
}
}
}
// Main Menu Info
public show_main_menu_info(id)
{
if ( !get_pcvar_num(p_Enabled) )
return;
static menu[510], len;
len = 0;
new xKeys3 = MENU_KEY_0|MENU_KEY_1;
// Title
len += formatex(menu[len], sizeof menu - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_INFO")
len += formatex(menu[len], sizeof menu - 1 - len, "\r1. \w%L", id, "INFO")
if ( get_pcvar_num(show_rank) )
{
xKeys3 |= (MENU_KEY_2)
len += formatex(menu[len], sizeof menu - 1 - len, "^n\r2. \wTop 20^n")
}
else
{
len += formatex(menu[len], sizeof menu - 1 - len, "^n\d2. Top 20^n")
}
if(find_plugin_byfile("gunxpmod_shop.amxx") != INVALID_PLUGIN_ID)
{
xKeys3 |= (MENU_KEY_3)
len += formatex(menu[len], sizeof menu - 1 - len, "\r3. \w%L^n", id, "ITEM_LIST")
if ( is_user_alive(id) )
{
xKeys3 |= (MENU_KEY_4)
len += formatex(menu[len], sizeof menu - 1 - len, "\r4. \w%L^n", id, "UNLOCKS_SHOP_TEXT")
}
}
len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "EXIT_MENU")
show_menu(id, xKeys3, menu, -1, "Main Menu")
}
public main_menu_info(id, key)
{
switch (key)
{
case 0:
{
show_main_menu_info(id)
descriptionx(id)
}
case 1:
{
showtop20(id)
show_main_menu_info(id)
}
case 2:
{
show_main_menu_info(id)
if(callfunc_begin( "display_items","gunxpmod_shop.amxx") == 1)
{
callfunc_push_int( id );
callfunc_end();
}
}
case 3:
{
if(callfunc_begin("item_upgrades","gunxpmod_shop.amxx") == 1)
{
callfunc_push_int( id );
callfunc_end();
}
}
case 9:
{
return PLUGIN_HANDLED;
}
}
return PLUGIN_HANDLED;
}
// Main Menu Level Style
public show_main_menu_level(id)
{
if ( !is_user_alive(id) )
return;
new szInfo[60], szChooseT[40], szLastG[40];
formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
new menu = menu_create(szInfo , "main_menu_level");
formatex(szChooseT, charsmax(szChooseT), "%L", LANG_SERVER, "CHOOSE_TEXT");
menu_additem(menu, szChooseT, "1", 0);
formatex(szLastG, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS");
menu_additem(menu, szLastG, "2", 0);
new szExit[15];
formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
menu_setprop(menu, MPROP_EXITNAME, szExit);
menu_display(id , menu , 0);
}
public main_menu_level(id , menu , item)
{
if ( !is_user_alive(id) )
{
return PLUGIN_HANDLED;
}
#if defined ZOMBIE_PLAGUE
if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
return PLUGIN_HANDLED;
#endif
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new item_id = str_to_num(data);
switch (item_id)
{
case 1: // show pistols
{
show_menu_level_pistol(id);
}
case 2: // last weapons
{
if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
{
give_weapon_menu(id, g_remember_selection[id], 1, 1);
give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
}
else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
{
give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
}
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
// Menu Level Style Pistols
public show_menu_level_pistol(id)
{
if ( !is_user_alive(id) )
return;
new szInfo[60];
formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
new menu = menu_create(szInfo , "pistol_menu");
for (new item_id = 0; item_id < MAX_PISTOLS_MENU; item_id++)
{
new szItems[60], szTempid[32];
if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
{
formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
num_to_str(item_id, szTempid, charsmax(szTempid) );
menu_additem(menu, szItems, szTempid, 0);
}
else
{
formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
}
}
new szNext[15], szBack[15], szExit[15];
formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
menu_setprop(menu, MPROP_BACKNAME, szBack)
menu_setprop(menu, MPROP_NEXTNAME, szNext)
menu_setprop(menu, MPROP_EXITNAME, szExit)
menu_display(id , menu , 0);
}
public pistol_menu(id , menu , item)
{
if ( !is_user_alive(id) )
{
return PLUGIN_HANDLED;
}
#if defined ZOMBIE_PLAGUE
if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
return PLUGIN_HANDLED;
#endif
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new item_id = str_to_num(data);
g_remember_selection_pistol[id] = item_id;
give_weapon_menu(id, item_id, 1, 1);
if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
{
show_menu_level(id);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
// Menu Level Style Primary
public show_menu_level(id)
{
if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
return;
new szInfo[100];
formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
new menu = menu_create(szInfo , "level_menu");
for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL; item_id++)
{
new szItems[512], szTempid[32];
if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
{
formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
num_to_str(item_id, szTempid, charsmax(szTempid) );
menu_additem(menu, szItems, szTempid, 0);
}
else
{
formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
}
}
new szNext[15], szBack[15], szExit[15];
formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
menu_setprop(menu, MPROP_BACKNAME, szBack)
menu_setprop(menu, MPROP_NEXTNAME, szNext)
menu_setprop(menu, MPROP_EXITNAME, szExit)
menu_display(id , menu , 0);
}
public level_menu(id , menu , item)
{
if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
{
return PLUGIN_HANDLED;
}
#if defined ZOMBIE_PLAGUE
if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
return PLUGIN_HANDLED;
#endif
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new item_id = str_to_num(data);
g_remember_selection[id] = item_id;
give_weapon_menu(id, item_id, 0, 0);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public CallbackMenu(id, menu, item)
{
return ITEM_DISABLED;
}
// Selected by menu or remember selection and give item
public give_weapon_menu(id, selection, strip, givegren)
{
#if defined ZOMBIE_SWARM
if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled) )
{
if ( strip )
{
StripPlayerWeapons(id);
}
if ( get_pcvar_num(enable_grenades) && givegren )
{
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
}
give_item(id, WEAPONCONST[selection]);
cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
}
#endif
#if defined ZOMBIE_INFECTION || defined NORMAL_MOD
if(is_user_alive(id) && get_pcvar_num(p_Enabled))
{
if ( strip )
{
StripPlayerWeapons(id);
}
if ( get_pcvar_num(enable_grenades) && givegren )
{
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
}
give_item(id, WEAPONCONST[selection]);
cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
}
#endif
}
public give_weapon(id)
{
#if defined ZOMBIE_SWARM
if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled))
{
StripPlayerWeapons(id);
if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
{
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
}
give_item(id, WEAPONCONST[PlayerLevel[id]]);
cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
}
#endif
#if defined ZOMBIE_INFECTION || defined NORMAL_MOD
if(is_user_alive(id) && get_pcvar_num(p_Enabled))
{
StripPlayerWeapons(id);
if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
{
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
}
give_item(id, WEAPONCONST[PlayerLevel[id]]);
cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
}
#endif
}
public set_sprite(p_origin[3], sprite, radius)
{
// Explosion
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, p_origin)
write_byte(TE_EXPLOSION)
write_coord(p_origin[0])
write_coord(p_origin[1])
write_coord(p_origin[2])
write_short(sprite)
write_byte(radius)
write_byte(15)
write_byte(4)
message_end()
}
//Shows Top 20
public showtop20(id)
{
if( !get_pcvar_num(p_Enabled) && !get_pcvar_num(show_rank) )
return;
static Sort[33][2];
new players[32],num,count,index;
get_players(players,num);
for(new i = 0; i < num; i++)
{
index = players[i];
Sort[count][0] = index;
Sort[count][1] = PlayerXp[index];
count++;
}
SortCustom2D(Sort,count,"CompareXp");
new motd[1501],iLen;
iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s %-22.22s %3s^n", "#", "Name", "# Experience");
new y = clamp(count,0,20);
new name[32],kindex;
for(new x = 0; x < y; x++)
{
kindex = Sort[x][0];
get_user_name(kindex,name,sizeof name - 1);
iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%d %-22.22s %d^n", x + 1, name, Sort[x][1]);
}
iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>");
show_motd(id,motd, "GunXpMod Top 20");
}
public CompareXp(elem1[], elem2[])
{
if(elem1[1] > elem2[1])
return -1;
else if(elem1[1] < elem2[1])
return 1;
return 0;
}
// Command to set player Level
public cmd_give_level(id, level, cid)
{
if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
{
return PLUGIN_HANDLED;
}
new Arg1[64], Target
read_argv(1, Arg1, 63)
Target = cmd_target(id, Arg1, 0)
new iLevel[32], Value
read_argv(2, iLevel, 31)
Value = str_to_num(iLevel)
if(iLevel[0] == '-')
{
console_print(id, "You can't have a '-' in the value!")
return PLUGIN_HANDLED;
}
if(!Target)
{
console_print(id, "Tselta ne e namerena!")
return PLUGIN_HANDLED;
}
if(Value > MAXLEVEL-1)
{
console_print(id, "Vie ne mozhete da zadadete poveche ot %d!", MAXLEVEL-1)
return PLUGIN_HANDLED;
}
if(Value < 1)
{
console_print(id, "Ne mozhete da zadadete po-malko ot 1!")
return PLUGIN_HANDLED;
}
new AdminName[32]
get_user_name(id, AdminName, 31)
new TargetName[32]
get_user_name(Target, TargetName, 31)
PlayerLevel[Target] = Value - 1
PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
check_level(Target)
client_printcolor(Target, "/gADMINISTRATOR: /ctr%s /ypromeni vasheto nivo na /g%d", AdminName, Value)
return PLUGIN_HANDLED;
}
// ============================================================//
// [~ Saving datas ~] //
// ============================================================//
public MySQLx_Init()
{
if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(save_type) )
return;
new szHost[64], szUser[32], szPass[32], szDB[128];
get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
for ( new i = 0; i < sizeof szTables; i++ )
{
SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
}
}
public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{
if( iFailState == TQUERY_CONNECT_FAILED
|| iFailState == TQUERY_QUERY_FAILED )
{
log_amx( "%s", szError );
return;
}
}
SaveLevel(id)
{
new szAuth[33];
new szKey[64];
if ( get_pcvar_num(savexp) == 0 )
{
get_user_ip( id, szAuth , charsmax(szAuth), 1);
formatex( szKey , 63 , "%s-IP" , szAuth);
}
else if ( get_pcvar_num(savexp) == 1 )
{
get_user_authid( id , szAuth , charsmax(szAuth) );
formatex( szKey , 63 , "%s-ID" , szAuth);
}
else if ( get_pcvar_num(savexp) == 2 )
{
get_user_name( id, szAuth , charsmax(szAuth) );
formatex( szKey , 63 , "%s-NAME" , szAuth);
}
if ( !get_pcvar_num(save_type) )
{
new szData[256];
formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
nvault_set( g_Vault , szKey , szData );
}
else
{
static szQuery[ 128 ];
formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", szAuth , PlayerLevel[id], PlayerXp[id] );
SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
}
}
LoadLevel(id)
{
new szAuth[33];
new szKey[40];
if ( get_pcvar_num(savexp) == 0 )
{
get_user_ip( id, szAuth , charsmax(szAuth), 1);
formatex( szKey , 63 , "%s-IP" , szAuth);
}
else if ( get_pcvar_num(savexp) == 1 )
{
get_user_authid( id , szAuth , charsmax(szAuth) );
formatex( szKey , 63 , "%s-ID" , szAuth);
}
else if ( get_pcvar_num(savexp) == 2 )
{
get_user_name( id, szAuth , charsmax(szAuth) );
formatex( szKey , 63 , "%s-NAME" , szAuth);
}
if ( !get_pcvar_num(save_type) )
{
new szData[256];
formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
nvault_get(g_Vault, szKey, szData, 255)
replace_all(szData , 255, "#", " ")
new xp[32], level[32]
parse(szData, level, 31, xp, 31)
PlayerLevel[id] = str_to_num(level)
PlayerXp[id] = str_to_num(xp)
}
else
{
static szQuery[ 128 ], iData[ 1 ];
formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", szAuth );
iData[ 0 ] = id;
SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
}
}
public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{
if( iFailState == TQUERY_CONNECT_FAILED
|| iFailState == TQUERY_QUERY_FAILED )
{
log_amx( "%s", szError );
return;
}
else
{
new id = iData[ 0 ];
new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
while (SQL_MoreResults(hQuery))
{
PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
SQL_NextRow(hQuery)
}
}
}
public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{
if( iFailState == TQUERY_CONNECT_FAILED
|| iFailState == TQUERY_QUERY_FAILED )
{
log_amx( "%s", szError );
return;
}
}
// ============================================================//
// [~ Natives ~] //
// ============================================================//
// Native: get_user_xp
public native_get_user_xp(id)
{
return PlayerXp[id];
}
// Native: set_user_xp
public native_set_user_xp(id, amount)
{
PlayerXp[id] = amount;
}
// Native: get_user_level
public native_get_user_level(id)
{
return PlayerLevel[id];
}
// Native: set_user_xp
public native_set_user_level(id, amount)
{
PlayerLevel[id] = amount;
}
// Native: Gets user level by Xp
public native_get_user_max_level(id)
{
return LEVELS[PlayerLevel[id]];
}
// ============================================================//
// [~ Stocks ~] //
// ============================================================//
stock client_printcolor(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg,190,input,3);
replace_all(msg,190,"/g","^4");// green txt
replace_all(msg,190,"/y","^1");// orange txt
replace_all(msg,190,"/ctr","^3");// team txt
replace_all(msg,190,"/w","^0");// team txt
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i = 0; i < count; i++)
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, SayTxT, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
public StripPlayerWeapons(id)
{
strip_user_weapons(id)
set_pdata_int(id, OFFSET_PRIMARYWEAPON, 0)
give_item(id, "weapon_knife");
}
Код за потвърждение: Избери целия код
/**
* csdm_equip.sma
* Allows for Counter-Strike to be played as DeathMatch.
*
* CSDM Equipment Menu
*
* By Freecode and BAILOPAN
* (C)2003-2006 David "BAILOPAN" Anderson
*
* Give credit where due.
* Share the source - it sets you free
* http://www.opensource.org/
* http://www.gnu.org/
*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csdm>
#include <fakemeta>
//Tampering with the author and name lines can violate the copyright
new PLUGINNAME[] = "CSDM Equip"
new VERSION[] = CSDM_VERSION
new AUTHORS[] = "CSDM Team"
#define EQUIP_PRI (1<<0)
#define EQUIP_SEC (1<<1)
#define EQUIP_ARMOR (1<<2)
#define EQUIP_GREN (1<<3)
#define EQUIP_ITEMS (1<<4)
#define EQUIP_ALL (EQUIP_PRI|EQUIP_SEC|EQUIP_ARMOR|EQUIP_GREN|EQUIP_ITEMS)
//Menus
new g_SecMenu[] = "CSDM: Secondary Weapons" // Menu Name
new g_SecMenuID = -1 // Menu ID
new g_cSecondary // Menu Callback
new bool:g_mSecStatus = true // Menu Available?
new g_PrimMenu[] = "CSDM: Primary Weapons"
new g_PrimMenuID = -1
new g_cPrimary
new bool:g_mPrimStatus = true
new g_ArmorMenu[] = "CSDM: Armor"
new g_ArmorMenuID = -1
new bool:g_mArmorStatus = true
new g_NadeMenu[] = "CSDM: Grenades"
new g_NadeMenuID = -1
new bool:g_mNadeStatus = true
new g_EquipMenu[] = "CSDM: Equip"
new g_EquipMenuID = -1
new bool:g_mShowuser[33] = true
new bool:g_mAutoNades = false
new bool:g_mAutoArmor = false
//Weapon Selections
new g_SecWeapons[33][18]
new g_PrimWeapons[33][18]
new bool:g_mNades[33]
new bool:g_mArmor[33]
//Config weapon storage holders
new g_BotPrim[MAX_WEAPONS][18]
new g_iNumBotPrim
new g_BotSec[MAX_WEAPONS][18]
new g_iNumBotSec
new g_Secondary[MAX_SECONDARY][18]
new bool:g_DisabledSec[MAX_WEAPONS]
new g_iNumSec
new g_Primary[MAX_PRIMARY][18]
new bool:g_DisabledPrim[MAX_WEAPONS]
new g_iNumPrim
#define SILENCED_M4A1 0
#define SILENCED_USP 1
new bool:g_Silenced[33][2]
//Misc
new g_Armor = 0
new fnadesnum = 0
new bool:g_Flash = false
new bool:g_Nade = false
new bool:g_Smoke = false
new bool:g_NightVision = false
new bool:g_DefuseKit = false
//Quick Fix for menu pages
new g_MenuState[33] = {0}
public csdm_Init(const version[])
{
if (version[0] == 0)
{
set_fail_state("CSDM failed to load.")
return
}
// Menus and callbacks
g_SecMenuID = menu_create(g_SecMenu, "m_SecHandler", 0)
g_PrimMenuID = menu_create(g_PrimMenu, "m_PrimHandler", 0)
g_ArmorMenuID = menu_create(g_ArmorMenu, "m_ArmorHandler", 0)
g_NadeMenuID = menu_create(g_NadeMenu, "m_NadeHandler", 0)
g_EquipMenuID = menu_create(g_EquipMenu, "m_EquipHandler", 0)
menu_setprop(g_PrimMenuID, MPROP_EXIT, MEXIT_NEVER)
menu_setprop(g_SecMenuID, MPROP_EXIT, MEXIT_NEVER)
g_cSecondary = menu_makecallback("c_Secondary")
g_cPrimary = menu_makecallback("c_Primary")
}
public csdm_CfgInit()
{
// Config reader
csdm_reg_cfg("equip", "cfgSetting")
// In order for weapon menu
csdm_reg_cfg("secondary", "cfgSecondary")
csdm_reg_cfg("primary", "cfgPrimary")
csdm_reg_cfg("botprimary", "cfgBotPrim")
csdm_reg_cfg("botsecondary", "cfgBotSec")
}
public plugin_init()
{
register_plugin(PLUGINNAME, VERSION, AUTHORS)
// Build Armor/Nade/Equip Menu's
buildMenu()
register_clcmd("say guns", "enableMenu")
register_clcmd("say /guns", "enableMenu")
register_clcmd("say menu", "enableMenu")
register_clcmd("say enablemenu", "enableMenu")
register_clcmd("say enable_menu", "enableMenu")
}
public client_connect(id)
{
g_mShowuser[id] = true
g_mNades[id] = false
g_mArmor[id] = false
g_Silenced[id][SILENCED_M4A1] = false
g_Silenced[id][SILENCED_USP] = false
return PLUGIN_CONTINUE
}
public client_disconnect(id)
{
g_mShowuser[id] = true
g_mNades[id] = false
g_mArmor[id] = false
return PLUGIN_CONTINUE
}
public csdm_RemoveWeapon(owner, entity_id, boxed_id)
{
new classname[32], weapon
if (!pev_valid(entity_id))
{
return PLUGIN_CONTINUE
}
pev(entity_id, pev_classname, classname, 31)
weapon = get_weaponid(classname)
if (weapon == CSW_M4A1)
{
g_Silenced[owner][SILENCED_M4A1] = cs_get_weapon_silen(entity_id) ? true : false
} else if (weapon == CSW_USP) {
g_Silenced[owner][SILENCED_USP] = cs_get_weapon_silen(entity_id) ? true : false
}
return PLUGIN_CONTINUE
}
public csdm_PostDeath(killer, victim, headshot, const weapon[])
{
/* Clean up any defusal kits we might have made! */
if (!g_DefuseKit)
{
return
}
/* This might have a race condition for team switches... */
if (cs_get_user_team(victim) == CS_TEAM_CT)
{
cs_set_user_defuse(victim, 0)
}
}
public cfgSecondary(readAction, line[], section[])
{
if (readAction == CFG_READ)
{
if (g_iNumSec >= MAX_SECONDARY)
return PLUGIN_HANDLED
new wep[16], display[48], dis[4]
new cmd[6]
parse(line, wep, 15, display, 47, dis, 3)
new disabled = str_to_num(dis)
//Copy weapon into array
format(g_Secondary[g_iNumSec], 17, "weapon_%s", wep)
g_DisabledSec[g_iNumSec] = disabled ? false : true
format(cmd,5,"%d ",g_iNumSec)
g_iNumSec++
//TODO: Add menu_destroy_items to remake menu on cfg reload
menu_additem(g_SecMenuID, display, cmd, 0, g_cSecondary)
}
else if (readAction == CFG_RELOAD)
{
g_SecMenuID = menu_create(g_SecMenu, "m_SecHandler", 0)
g_iNumSec = 0
}
else if (readAction == CFG_DONE)
{
//Nothing for now
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public cfgPrimary(readAction, line[], section[])
{
if (readAction == CFG_READ)
{
if (g_iNumPrim >= MAX_PRIMARY)
return PLUGIN_HANDLED
new wep[16], display[48], dis[4]
new cmd[6]
parse(line, wep, 15, display, 47, dis, 3)
new disabled = str_to_num(dis)
//Copy weapon into array
format(g_Primary[g_iNumPrim], 17, "weapon_%s", wep)
g_DisabledPrim[g_iNumPrim] = disabled ? false : true
format(cmd, 5, "%d", g_iNumPrim)
g_iNumPrim++
//TODO: Add menu_destroy_items to remake menu on cfg reload
menu_additem(g_PrimMenuID, display, cmd, 0, g_cPrimary)
} else if (readAction == CFG_RELOAD) {
g_PrimMenuID = menu_create(g_PrimMenu, "m_PrimHandler", 0)
g_iNumPrim = 0
} else if (readAction == CFG_DONE) {
//Nothing for now
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public cfgBotPrim(readAction, line[], section[])
{
if (readAction == CFG_READ)
{
new wep[16], display[32]
parse(line, wep, 15, display, 31)
//Copy weapon into array
format(g_BotPrim[g_iNumBotPrim], 17, "weapon_%s", wep)
g_iNumBotPrim++
} else if (readAction == CFG_RELOAD) {
g_iNumBotPrim = 0
} else if (readAction == CFG_DONE) {
//Nothing for now
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public cfgBotSec(readAction, line[], section[])
{
if (readAction == CFG_READ)
{
new wep[16], display[32]
parse(line, wep, 15, display, 31)
//Copy weapon into array
format(g_BotSec[g_iNumBotSec], 17, "weapon_%s", wep)
g_iNumBotSec++
} else if (readAction == CFG_RELOAD) {
g_iNumBotSec = 0
} else if (readAction == CFG_DONE) {
//Nothing for now
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public cfgSetting(readAction, line[], section[])
{
if (readAction == CFG_READ)
{
new setting[16], sign[3], value[6]
parse(line, setting, 15, sign, 2, value, 5)
// Menus settings
if (contain(setting,"menus") != -1)
{
if (containi(value, "p") != -1)
{
g_mPrimStatus = true
}
if (containi(value, "s") != -1)
{
g_mSecStatus = true
}
if (containi(value, "a") != -1)
{
g_mArmorStatus = true
}
if (containi(value, "g") != -1)
{
g_mNadeStatus = true
}
return PLUGIN_HANDLED
} else if (contain(setting, "autoitems") != -1) {
if (containi(value, "a") != -1)
{
//Disable Armor Menu
g_mArmorStatus = false
g_mAutoArmor = true
g_Armor = 1
}
if (containi(value, "h") != -1)
{
//Disable Armor Menu
g_mArmorStatus = false
g_mAutoArmor = true
g_Armor = 2
}
if (containi(value, "g") != -1)
{
//Disable Grenade Menu
g_mNadeStatus = false
g_mAutoNades = true
}
if (containi(value, "d") != -1)
{
g_DefuseKit = true
}
if (containi(value, "n") != -1)
{
g_NightVision = true
}
return PLUGIN_HANDLED
} else if (contain(setting, "grenades") != -1) {
if (containi(value, "f") != -1)
{
g_Flash = true
}
if (containi(value, "h") != -1)
{
g_Nade = true
}
if (containi(value, "s") != -1)
{
g_Smoke = true
}
} else if (contain(setting, "fnadesnum") != -1) {
fnadesnum = str_to_num(value)
}
return PLUGIN_HANDLED
} else if (readAction == CFG_RELOAD) {
g_mArmorStatus = false
g_mNadeStatus = false
g_Flash = false
g_Nade = false
g_Smoke = false
g_Armor = 0
g_mSecStatus = false
g_mPrimStatus = false
g_mAutoNades = false
g_DefuseKit = false
g_NightVision = false
fnadesnum = 1
} else if (readAction == CFG_DONE) {
//Nothing for now
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
//Secondary Weapon Callback
public c_Secondary(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
new dis = str_to_num(cmd)
//Check to see if item is disabled
if (g_DisabledSec[dis])
{
return ITEM_DISABLED
}
else
{
return ITEM_ENABLED
}
return PLUGIN_HANDLED
}
//Primary Weapon Callback
public c_Primary(id, menu, item)
{
if (item < 0)
return PLUGIN_CONTINUE
// Get item info
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
new dis = str_to_num(cmd)
//Check to see if item is disabled
if (g_DisabledPrim[dis])
{
return ITEM_DISABLED
}
else
{
return ITEM_ENABLED
}
return PLUGIN_HANDLED
}
//Equipment Menu handler
public m_EquipHandler(id, menu, item)
{
if (item < 0)
{
return PLUGIN_CONTINUE
}
// Get item info
new cmd[2], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 1, iName, 63, callback)
new choice = str_to_num(cmd)
switch(choice)
{
case 1:
{
if (g_mSecStatus)
{
menu_display(id, g_SecMenuID, 0)
}
else if (g_mPrimStatus)
{
menu_display(id, g_PrimMenuID, 0)
}
else if (g_mArmorStatus)
{
menu_display(id, g_ArmorMenuID, 0)
}
else if (g_mNadeStatus)
{
if (g_mAutoArmor)
{
equipUser(id, EQUIP_ARMOR)
}
menu_display(id, g_NadeMenuID, 0)
} else {
if (g_mAutoArmor)
{
equipUser(id, EQUIP_ARMOR)
}
if (g_mAutoNades)
{
equipUser(id, EQUIP_GREN)
}
equipUser(id, EQUIP_ITEMS)
}
}
case 2:
{
// Equip person with last settings
equipUser(id, EQUIP_ALL)
}
case 3:
{
g_mShowuser[id] = false
client_print(id, print_chat, "[CSDM] Type ^"guns^" in chat to re-enable your equip menu.")
equipUser(id, EQUIP_ALL)
}
}
return PLUGIN_HANDLED
}
//Secondary Wep Menu handler
public m_SecHandler(id, menu, item)
{
// Get item info
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
new wep = str_to_num(cmd)
copy(g_SecWeapons[id],17,g_Secondary[wep])
equipUser(id, EQUIP_SEC)
// Show next menu here
if (g_mPrimStatus)
{
menu_display(id, g_PrimMenuID, 0)
}
else if (g_mArmorStatus)
{
menu_display(id, g_ArmorMenuID, 0)
}
else if (g_mNadeStatus)
{
if (g_mAutoArmor)
{
equipUser(id, EQUIP_ARMOR)
}
menu_display(id, g_NadeMenuID, 0)
}
else
{
if (g_mAutoArmor)
{
equipUser(id, EQUIP_ARMOR)
}
if (g_mAutoNades)
{
equipUser(id, EQUIP_GREN)
}
equipUser(id, EQUIP_ITEMS)
}
return PLUGIN_HANDLED
}
//Primary Wep Menu handler
public m_PrimHandler(id, menu, item)
{
if (item < 0) return PLUGIN_HANDLED
// Get item info
new cmd[6], iName[64]
new access, callback
if (menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback))
{
new wep = str_to_num(cmd)
copy(g_PrimWeapons[id], 17, g_Primary[wep])
equipUser(id, EQUIP_PRI)
}
// Show next menu here
if (g_mArmorStatus)
{
menu_display(id, g_ArmorMenuID, 0)
}
else if (g_mNadeStatus)
{
if (g_mAutoArmor)
{
equipUser(id, EQUIP_ARMOR)
}
menu_display(id, g_NadeMenuID, 0)
} else {
if (g_mAutoArmor)
{
equipUser(id, EQUIP_ARMOR)
}
if (g_mAutoNades)
{
equipUser(id, EQUIP_GREN)
}
equipUser(id, EQUIP_ITEMS)
}
return PLUGIN_HANDLED
}
//Armor Menu handler
public m_ArmorHandler(id, menu, item)
{
if (item < 0) return PLUGIN_CONTINUE
// Get item info
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
new choice = str_to_num(cmd)
if (choice == 1)
{
g_mArmor[id] = true
}
else if (choice == 2)
{
g_mArmor[id] = false
}
equipUser(id, EQUIP_ARMOR)
// Show next menu here
if (g_mNadeStatus)
{
menu_display(id, g_NadeMenuID, 0)
} else {
if (g_mAutoNades)
{
equipUser(id, EQUIP_GREN)
}
equipUser(id, EQUIP_ITEMS)
}
return PLUGIN_HANDLED
}
//Nade Menu handler
public m_NadeHandler(id, menu, item)
{
if (item < 0) return PLUGIN_CONTINUE
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
new choice = str_to_num(cmd)
if (choice == 1)
{
g_mNades[id] = true
}
else if (choice == 2)
{
g_mNades[id] = false
}
equipUser(id, EQUIP_GREN)
equipUser(id, EQUIP_ITEMS)
return PLUGIN_HANDLED
}
buildMenu()
{
//Equip Menu
menu_additem(g_EquipMenuID, "New Weapons", "1", 0, -1)
menu_additem(g_EquipMenuID, "Previous Setup", "2", 0, -1)
menu_additem(g_EquipMenuID, "2+Don't show menu again", "3", 0, -1)
menu_setprop(g_EquipMenuID, MPROP_EXIT, MEXIT_NEVER)
//Armor Menu
menu_additem(g_ArmorMenuID, "Yes, armor up", "1", 0, -1)
menu_additem(g_ArmorMenuID, "No Armor", "2", 0, -1)
menu_setprop(g_ArmorMenuID, MPROP_EXIT, MEXIT_NEVER)
//Nade Menu
menu_additem(g_NadeMenuID, "All Grenades", "1", 0, -1)
menu_additem(g_NadeMenuID, "No Grenades", "2", 0, -1)
menu_setprop(g_NadeMenuID, MPROP_EXIT, MEXIT_NEVER)
return PLUGIN_HANDLED
}
equipUser(id, to)
{
if (!is_user_alive(id) )
return
if (to & EQUIP_SEC)
{
//Give Secondary
GiveUserFullWeapon(id, g_SecWeapons[id])
}
if (to & EQUIP_PRI)
{
//Give Primary
GiveUserFullWeapon(id, g_PrimWeapons[id])
}
if (to & EQUIP_ARMOR)
{
//Give Armor
if (g_mAutoArmor || g_mArmor[id])
{
new armor = g_mArmor[id] ? 2 : g_Armor
cs_set_user_armor(id, DEFAULT_ARMOR, CsArmorType:armor)
}
}
if (to & EQUIP_GREN)
{
//Give Nades
if (g_mNades[id] || g_mAutoNades)
{
if (g_Nade)
{
GiveUserFullWeapon(id,"weapon_hegrenade")
}
if (g_Smoke)
{
GiveUserFullWeapon(id, "weapon_smokegrenade")
}
if (g_Flash && fnadesnum)
{
GiveUserFullWeapon(id, "weapon_flashbang")
if (fnadesnum == 2)
{
GiveUserFullWeapon(id, "weapon_flashbang")
}
}
}
}
if (to & EQUIP_ITEMS)
{
if (g_DefuseKit && (cs_get_user_team(id) == CS_TEAM_CT))
{
cs_set_user_defuse(id, 1)
}
if (g_NightVision)
{
cs_set_user_nvg(id, 1)
}
}
}
GiveUserFullWeapon(id, const wp[])
{
/** First check to make sure the user does not have a weapon in this slot */
new wpnid = get_weaponid(wp)
new weapons[MAX_WEAPONS], num
new name[24], weap
new slot
if (wpnid == 0)
{
if (equal(wp, "weapon_shield"))
{
slot = SLOT_PRIMARY
wpnid = -1
}
} else {
slot = g_WeaponSlots[wpnid]
}
if ((slot == SLOT_SECONDARY || slot == SLOT_PRIMARY)
&& wpnid > 0)
{
get_user_weapons(id, weapons, num)
for (new i=0; i<num; i++)
{
weap = weapons[i]
if (weap == wpnid)
{
continue
}
if (g_WeaponSlots[weap] == slot)
{
if (slot == SLOT_SECONDARY && cs_get_user_shield(id))
{
//temporary fix!
drop_with_shield(id, weap)
} else {
get_weaponname(weap, name, 23)
csdm_force_drop(id, name)
}
}
}
} else if (slot == SLOT_PRIMARY && wpnid == -1 && cs_get_user_shield(id)) {
return
}
if (slot == SLOT_PRIMARY && cs_get_user_shield(id) && wpnid > 0)
{
csdm_fwd_drop(id, -1, "weapon_shield")
}
new item_id = csdm_give_item(id, wp)
if (item_id > 0)
{
if (wpnid == CSW_M4A1)
{
cs_set_weapon_silen(item_id, g_Silenced[id][SILENCED_M4A1], 1)
} else if (wpnid == CSW_USP) {
cs_set_weapon_silen(item_id, g_Silenced[id][SILENCED_USP], 1)
}
}
if (wpnid > 0)
{
new bpammo = g_MaxBPAmmo[wpnid]
if (bpammo)
{
cs_set_user_bpammo(id, wpnid, bpammo)
}
}
}
// MAIN FUNCTION OF THE PLUGIN
public csdm_PostSpawn(player)
{
if (is_user_bot(player))
{
new randPrim = random_num(0, g_iNumBotPrim-1)
new randSec = random_num(0, g_iNumBotSec-1)
// By our lMOSTeast favorite guy KWo RIP - 02.11.2005.
new randArm = random_num(0, 2)
new randGre = random_num(0, 2)
GiveUserFullWeapon(player, g_BotPrim[randPrim])
GiveUserFullWeapon(player, g_BotSec[randSec])
g_mArmor[player] = (g_mArmorStatus && randArm)
g_mNades[player] = (g_mNadeStatus && randGre)
if (g_mAutoArmor || g_mArmor[player])
{
equipUser(player, EQUIP_ARMOR)
}
if (g_mAutoNades || g_mNades[player])
{
equipUser(player, EQUIP_GREN)
}
if (g_DefuseKit)
{
equipUser(player, EQUIP_ITEMS)
}
} else {
if (g_mShowuser[player])
{
g_MenuState[player] = 1
menu_display(player, g_EquipMenuID, 0)
} else {
g_MenuState[player] = 0
equipUser(player, EQUIP_ALL)
}
}
return PLUGIN_CONTINUE
}
public enableMenu(id)
{
if (!csdm_active())
return PLUGIN_CONTINUE
if (!g_mShowuser[id])
{
g_mShowuser[id] = true
client_print(id, print_chat, "[CSDM] Your equip menu has been re-enabled.")
if (!g_MenuState[id])
{
g_MenuState[id] = 1
menu_display(id, g_EquipMenuID, 0)
}
} else {
client_print(id, print_chat, "[CSDM] Your equip menu is already enabled.")
}
return PLUGIN_HANDLED
}