Апък аз искам да има меню който да можеш да си избереш мотод на запазване на левел.
1.Steam ID
2.IP Adress
3.Nick
Ето и Плъгина
Код за потвърждение: Избери целия код
#include "gunxpmod.cfg"
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <hamsandwich>
#include <gunxp>
#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) )
new PlayerXp[33];
new PlayerLevel[33];
new PlayerPrestige[33];
new PrestigeFile[33];
new g_Vault;
new g_remember_selection[33], g_kills[33], g_remember_selection_pistol[33], g_bSave[33];
new g_maxplayers, g_msgHudSync1, SayTxT, enable_grenades;
new levelspr, levelspr2, show_level_text, show_rank;
new savexp, save_type, xp_kill, xp_ultra, ultra_kills, enable_ultra, enable_triple, triple_kills, xp_triple, p_Enabled, level_style;
new enable_admin_xp, admin_xp, enable_monster, monster_kills, xp_monster, enable_mega, mega_kills, xp_mega
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[MAXLEVEL2][] = { "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" };
new const WEAPONMDL[MAXLEVEL2][] = { "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" };
new const AMMOCONST[MAXLEVEL2] = { 17, 16, 1, 11, 10, 26, 23, 19, 15, 7, 21, 22, 12, 5, 14, 30, 28, 3, 8, 18, 27, 24, 13, 20 };
public plugin_init()
{
register_plugin("Gun Xp Mod","2.3","ValentinIvanovNewMOD");
register_concmd("level_give", "cmd_give_level", ADMIN_IMMUNITY, "<name> <amount>");
register_concmd("prestige_give", "set_prestige", ADMIN_IMMUNITY, "<name> <amount>");
register_clcmd("say /save", "glMenu")
register_clcmd("say /top20","showtop20");
register_clcmd("say /level","showlevel");
register_clcmd("say level","showlevel");
register_clcmd("say /prs", "CmdPrestigeMenu");
register_clcmd("say /prestige", "CmdPrestigeMenu");
register_clcmd("say prs", "CmdPrestigeMenu");
register_clcmd("say prestige", "CmdPrestigeMenu");
p_Enabled = register_cvar( "gxm_enable", "1" ); // Plugin enabled? 1 = Yes, 0 = No.
save_type = register_cvar("gxm_savetype", "0"); // Save Xp to : 1 = MySQL, 0 = NVault.
savexp = register_cvar("gxm_save", "1"); // Save Xp by : 1 = Nick.
xp_kill = register_cvar("gxm_xp", "150"); // How much xp gain if you killed someone?
show_level_text = register_cvar("gxm_level_text", "1"); // 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", "1"); // 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", "15"); // How much bonus xp give for Triple Kill?
triple_kills = register_cvar("gxm_triple_kills", "3"); // 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", "30"); // How much bonus xp give for Ultra Kill?
ultra_kills = register_cvar("gxm_ultra_kills", "6"); // How much kills needed to give bonus xp?
enable_mega = register_cvar("gxm_enable_mega", "1"); // Enable Mega Kill bonus xp? 1 = Yes, 0 = No.
xp_mega = register_cvar("gxm_mega_xp", "50"); // How much bonus xp give for Mega Kill?
mega_kills = register_cvar("gxm_mega_kills", "9"); // How much kills needed to give bonus xp?
enable_monster = register_cvar("gxm_enable_monster", "1"); // Enable monster Kill bonus xp? 1 = Yes, 0 = No.
xp_monster = register_cvar("gxm_monster_xp", "70"); // How much bonus xp give for Monster Kill?
monster_kills = register_cvar("gxm_mega_kills", "13"); // 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", "300"); // How much extra xp give to admins?
admin_xp = register_cvar("gxm_extra_xp","1");
mysqlx_host = register_cvar ("gxm_host", "");
mysqlx_user = register_cvar ("gxm_user", "");
mysqlx_pass = register_cvar ("gxm_pass", "");
mysqlx_db = register_cvar ("gxm_dbname", "");
new DataDir[64]
get_datadir(DataDir, 63)
format(PrestigeFile, 127, "%s/Prestige.dat", DataDir)
register_event("DeathMsg", "event_deathmsg", "a");
register_event("StatusValue", "Event_StatusValue", "bd", "1=2")
RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
register_forward(FM_Touch, "fwd_Touch");
register_dictionary("gunxpmod.txt");
MySQLx_Init()
SayTxT = get_user_msgid("SayText");
g_msgHudSync1 = CreateHudSyncObj()
g_maxplayers = get_maxplayers();
}
public plugin_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()
{
g_Vault = nvault_open( "gunxpmod" );
if ( g_Vault == INVALID_HANDLE )
set_fail_state( "Error opening GunXpMod nVault, file does not exist!" );
}
public plugin_end()
{
nvault_close( g_Vault );
}
public client_connect(id)
{
g_remember_selection[id] = MAX_PISTOLS_MENU;
g_remember_selection_pistol[id] = 0;
LoadLevel(id);
LoadPrestige(id);
}
public client_putinserver(id)
{
LoadLevel(id);
LoadPrestige(id);
}
public client_disconnected(id)
{
SaveLevel(id);
SavePrestige(id);
PlayerXp[id] = 0;
PlayerLevel[id] = 0;
remove_task( TASK_SHOW_LEVEL + id );
}
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 < MAXLEVEL2; 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 ( !get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
{
StripPlayerWeapons(id);
set_task(0.7, "show_main_menu_level", id)
}
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 ( !get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
{
set_task(0.3, "give_weapon", id);
}
}
public zp_user_humanized_post(id, survivor)
{
if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
return;
set_task(0.7, "show_main_menu_level", id);
}
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)
new counted_mega = get_pcvar_num(xp_kill) + get_pcvar_num(xp_mega)
new counted_monster = get_pcvar_num(xp_kill) + get_pcvar_num(xp_monster)
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_CHAT)
{
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_CHAT ? 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_CHAT ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(mega_kills) && get_pcvar_num(enable_mega) )
{
PlayerXp[g_attacker] += counted_mega
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "MEGA_XP", counted_mega + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_CHAT ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(monster_kills) && get_pcvar_num(enable_monster) )
{
PlayerXp[g_attacker] += counted_monster
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "MOSTER_XP", counted_monster + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_CHAT ? 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, "%L", LANG_SERVER, "KILL_XP", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_CHAT ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
}
check_level(g_attacker)
}
}
}
}
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)
new counted_mega = get_pcvar_num(xp_kill) + get_pcvar_num(xp_mega)
new counted_monster = get_pcvar_num(xp_kill) + get_pcvar_num(xp_monster)
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_CHAT)
{
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_CHAT ? 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_CHAT ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(mega_kills) && get_pcvar_num(enable_mega) )
{
PlayerXp[g_attacker] += counted_mega
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "MEGA_XP", counted_mega + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_CHAT ? get_pcvar_num(admin_xp) : 0))
}
else if ( g_kills[g_attacker] == get_pcvar_num(monster_kills) && get_pcvar_num(enable_monster) )
{
PlayerXp[g_attacker] += counted_monster
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
show_hudmessage(g_attacker, "%L", LANG_SERVER, "MOSTER_XP", counted_monster + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_CHAT ? 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, "%L", LANG_SERVER, "XP_KILL", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_CHAT ? 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(0, 255, 0, 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], PlayerXp[target], RANKLEVELS[PlayerLevel[target]], PlayerPrestige[target])
}
}
public task_show_level(task, id)
{
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(0, 255, 0, 0.00, 0.22, 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]], RANK2[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]], PlayerPrestige[id], get_user_xp(id), get_user_max_level(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]], PlayerPrestige[id]);
client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]);
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]);
}
}
}
public show_main_menu_level(id)
{
if ( !is_user_alive(id) )
return;
new szInfo[60], szChooseT[40], szLastG[40], szLastGs[40];
formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]], PlayerPrestige[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);
formatex(szLastGs, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS_SAVE");
menu_additem(menu, szLastGs, "3", 0);
g_bSave[id] = true;
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(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_menu_level_pistol(id);
}
case 2:
{
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;
}
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]], PlayerPrestige[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(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;
}
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]], PlayerPrestige[id]);
new menu = menu_create(szInfo , "level_menu");
for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL2; 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(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;
}
public give_weapon_menu(id, selection, strip, givegren)
{
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])
}
}
public give_weapon(id)
{
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]])
}
}
public set_sprite(p_origin[3], sprite, radius)
{
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()
}
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 of players", "Counts 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, "Top 20 of biggest expirience");
}
public CompareXp(elem1[], elem2[])
{
if(elem1[1] > elem2[1])
return -1;
else if(elem1[1] < elem2[1])
return 1;
return 0;
}
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, "Target not found!")
return PLUGIN_HANDLED;
}
if(Value > MAXLEVEL-1)
{
console_print(id, "You can't set a more than %d!", MAXLEVEL-1)
return PLUGIN_HANDLED;
}
if(Value < 1)
{
console_print(id, "You can't set less than 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, "/g[SERVER] /yADMIN: /ctr%s /ygive your level to /g%d", AdminName, Value)
return PLUGIN_HANDLED;
}
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) == 1 )
{
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], PlayerPrestige[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], PlayerPrestige[id] );
SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
}
}
LoadLevel(id)
{
new szAuth[33];
new szKey[40];
if ( get_pcvar_num(savexp) == 1 )
{
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], PlayerPrestige[id])
nvault_get(g_Vault, szKey, szData, 255)
replace_all(szData , 255, "#", " ")
new xp[32], level[32], prestige[32]
parse(szData, level, 31, xp, 31, prestige, 31)
PlayerLevel[id] = str_to_num(level)
PlayerXp[id] = str_to_num(xp)
PlayerPrestige[id] = str_to_num(prestige)
}
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;
}
}
public native_get_user_xp(id)
{
return PlayerXp[id];
}
public native_set_user_xp(id, amount)
{
PlayerXp[id] = amount;
}
public native_get_user_level(id)
{
return PlayerLevel[id];
}
public native_set_user_level(id, amount)
{
PlayerLevel[id] = amount;
}
public native_get_user_max_level(id)
{
return LEVELS[PlayerLevel[id]];
}
stock client_printcolors(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg,190,input,3);
replace_all(msg,190,"/g","^4");
replace_all(msg,190,"/y","^1");
replace_all(msg,190,"/ctr","^3");
replace_all(msg,190,"/w","^0");
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");
}
public set_user_prestige(id, prestige) {
if(is_user_connected(id)) {
PlayerPrestige[id] = prestige
SavePrestige(id)
}
}
public get_user_prestige(id) {
return is_user_connected(id) ? PlayerPrestige[id] : 0
}
public CmdPrestigeMenu(id) {
new Title[128], Menu
formatex(Title, sizeof(Title)-1, "\r[\yGunXP\r] \wPrestige Shop^n\yAvailable XP: \r%d", get_user_xp(id))
Menu = menu_create(Title, "CmdBuyPrestige")
if(get_user_xp(id) >= 150000)
menu_additem(Menu, "\w1 Prestige - \r150000\y XP", "1", 0)
else
menu_additem(Menu, "\d1 Prestige - \r150000 XP", "1", 0)
if(get_user_xp(id) >= 450000)
menu_additem(Menu, "\w3 Prestige - \r450000\y XP", "2", 0)
else
menu_additem(Menu, "\d3 Prestige - \r450000 XP", "2", 0)
if(get_user_xp(id) >= 750000)
menu_additem(Menu, "\w5 Prestige - \r750000\y XP", "3", 0)
else
menu_additem(Menu, "\d5 Prestige - \r750000 XP", "3", 0)
if(get_user_xp(id) >= 1500000)
menu_additem(Menu, "\w10 Prestige - \r1500000\y XP", "4", 0)
else
menu_additem(Menu, "\d10 Prestige - \r1500000 XP", "4", 0)
menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, Menu, 0);
}
public CmdBuyPrestige(id, menu, item) {
if(item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new Data[6], Name[64];
new Access, CallBack;
menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
new Key = str_to_num(Data);
switch(Key) {
case 1: {
new PrestigeCost = get_user_xp(id) - 150000
if(PrestigeCost < 0)
ColorChat(id, "!t[GunXP]!y You dont have enought !tXP!n to buy!g 1 prestige!g !")
else {
set_user_prestige(id, get_user_prestige(id) + 1)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!t[GunXP]!1 You buyed !g1 prestige !")
}
}
case 2: {
new PrestigeCost = get_user_xp(id) - 450000
if(PrestigeCost < 0)
ColorChat(id, "!t[GunXP]!y You dont have enought !tXP!n to buy!g 3 prestige!g !")
else {
set_user_prestige(id, get_user_prestige(id) + 3)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!t[GunXP]!1 You buyed !g3 prestige !")
}
}
case 3: {
new PrestigeCost = get_user_xp(id) - 750000
if(PrestigeCost < 0)
ColorChat(id, "!t[GunXP]!y You dont have enought !tXP!n to buy!g 5 prestige!g !")
else {
set_user_prestige(id, get_user_prestige(id) + 5)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!t[GunXP]!1 You buyed !g5 prestige !")
}
}
case 4: {
new PrestigeCost = get_user_xp(id) - 1500000
if(PrestigeCost < 0)
ColorChat(id, "!t[GunXP]!y You dont have enought !tXP!n to buy!g 10 prestige!g !")
else {
set_user_prestige(id, get_user_prestige(id) + 10)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!t[GunXP]!1 You buyed !g10 prestige !")
}
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
// Save Prestige
public SavePrestige(id) {
if(!is_user_connected(id)) return 1;
new Name[32];
get_user_name(id, Name, 31);
static Data[1024]
formatex(Data, sizeof(Data) - 1, "^"%i^"", PlayerPrestige[id])
new Save[512]
format(Save, 511, "^"%s^" %s", Name, Data)
new Line[128], Linie, IsPlayer = false, Arg1[32]
new FileOpen = fopen(PrestigeFile, "rt")
while(!feof(FileOpen)) {
fgets(FileOpen, Line, 127)
trim(Line)
parse(Line, Arg1, 31)
if (equali(Arg1, Name)) {
write_file(PrestigeFile, Save, Linie)
IsPlayer = true
break
}
Linie++
}
fclose(FileOpen)
if (!IsPlayer) {
write_file(PrestigeFile, Save, -1)
}
return PLUGIN_HANDLED
}
// Give Prestige
public set_prestige (id, level, cid) {
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED;
new arg[32], arg2[32];
read_argv(1, arg, 32);
read_argv(2, arg2, 31);
new player = cmd_target(id,arg,2);
if(!player) return PLUGIN_HANDLED;
new prestigeamount = str_to_num(arg2);
set_user_prestige(player, get_user_prestige(player) + prestigeamount);
if( prestigeamount < 0 )
{
console_print(id, "You can't give player prestige lower that 0");
return PLUGIN_HANDLED;
}
new player_name[32], admin_name[32];
get_user_name(player, player_name, 31);
get_user_name(id, admin_name, 31);
switch(get_cvar_num("amx_show_activity"))
{
case 2: ColorChat(id, "!gADMIN !y%s: give !t%s %i !gPrestige", admin_name, player_name, prestigeamount);
case 1: ColorChat(id, "!gADMIN: !ygive !t%s %i !gPrestige", player_name, prestigeamount);
}
return PLUGIN_HANDLED;
}
// Load Prestige
public LoadPrestige(id) {
if(!is_user_connected(id)) return 1;
new Name[32];
get_user_name(id, Name, 31);
new Line[128], Arg1[32], Arg2[32];
new FileOpen = fopen(PrestigeFile, "rt")
while(!feof(FileOpen)) {
fgets(FileOpen, Line, 127)
trim(Line)
parse(Line, Arg1, 31, Arg2, 31)
if (equali(Arg1, Name)) {
PlayerPrestige[id] = str_to_num(Arg2)
break
}
}
fclose(FileOpen)
return PLUGIN_HANDLED
}
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
stock HudMessage(const id, const message[], red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 0.01, Float:holdtime = 3.0, Float:fadeintime = 0.01, Float:fadeouttime = 0.01) {
new count = 1, players[32];
if(id) players[0] = id;
else get_players(players, count, "ch"); {
for(new i = 0; i < count; i++) {
if(is_user_connected(players[i])) {
new color = pack_color(clamp_byte(red), clamp_byte(green), clamp_byte(blue))
message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, players[i]);
write_byte(strlen(message) + 31);
write_byte(DRC_CMD_MESSAGE);
write_byte(effects);
write_long(color);
write_long(_:x);
write_long(_:y);
write_long(_:fadeintime);
write_long(_:fadeouttime);
write_long(_:holdtime);
write_long(_:fxtime);
write_string(message);
message_end();
}
}
}
}
stock ColorChat(const id, const input[], any:...) {
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!y", "^1");
replace_all(msg, 190, "!t", "^3");
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, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}