rendered paste body#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#define VERSION "1.0"
#define ADMIN_EXTRA ADMIN_LEVEL_H
#define TASK_SHOW_LEVEL 10113
#define MAXLEVEL 10
new const LevelUp[] = "events/task_complete.wav";
new const KillSound[] = "events/tutor_msg.wav";
new const LEVELS[MAXLEVEL] =
{
50,
100,
250,
400,
500,
700,
850,
1000,
1500,
3000
}
new const RANKLEVELS[MAXLEVEL][] =
{
"Recruit",
"Captain",
"Major",
"Colonel",
"Specialist",
"Sergeant",
"Staff Sergeant",
"Field Officier",
"Golden Officier",
"General"
}
new PlayerXP[33], PlayerLevel[33], g_remember_selection[33];
new gVault;
new gKills[33];
new cToggle, xpKill, enable_admin_xp, admin_xp, savexp;
new xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, show_level_text;
new gMaxPlayers, g_msgHudSync1;
public plugin_init()
{
register_plugin("GM Rank Mod", VERSION, "BOYSplayCS");
RegisterHam(Ham_Spawn, "player", "playerSpawn", 1);
register_event("DeathMsg", "eventDeath", "a");
register_event("StatusValue", "Event_StatusValue", "bd", "1=2");
register_concmd("set_level", "cmdGiveLevel", ADMIN_KICK, "<name> <amount>");
cToggle = register_cvar("gmrank_enable", "1");
savexp = register_cvar("gmrank_save", "0");
xpKill = register_cvar("gmrank_xp_kill", "3");
enable_admin_xp = register_cvar("gmrank_admin", "1");
admin_xp = register_cvar("gmrank_admin_xp", "1");
show_level_text = register_cvar("gmrank_level_text", "1");
enable_triple = register_cvar("gxm_triple","1");
xp_triple = register_cvar("gxm_triple_xp","3");
triple_kills = register_cvar("gxm_triple_kills","3");
enable_ultra = register_cvar("gxm_ultra","1");
xp_ultra = register_cvar("gxm_ultra_xp","5");
ultra_kills = register_cvar("gxm_ultra_kills","6");
gMaxPlayers = get_maxplayers();
g_msgHudSync1 = CreateHudSyncObj()
}
public plugin_precache()
{
precache_sound(LevelUp);
precache_sound(KillSound);
}
public plugin_cfg()
{
gVault = nvault_open("gmrankmod");
if (gVault == INVALID_HANDLE)
set_fail_state("Fatal Error: file 'gmrankmod' does not exist!");
}
public plugin_end()
{
nvault_close(gVault);
}
public client_authorized(id)
{
g_remember_selection[id] = 0;
LoadLevel(id)
}
public client_disconnect(id)
{
SaveLevel(id)
}
public playerSpawn(id)
{
if (!get_pcvar_num(cToggle))
return;
gKills[id] = 0
if (is_user_alive(id))
{
if(!task_exists(TASK_SHOW_LEVEL + id) && get_pcvar_num(show_level_text))
{
set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
}
}
}
public eventDeath()
{
if (!get_pcvar_num(cToggle))
return;
new gAttacker = read_data(1);
new gVictim = read_data(2);
new counted_triple = get_pcvar_num(xpKill) + get_pcvar_num(xp_triple)
new counted_ultra = get_pcvar_num(xpKill) + get_pcvar_num(xp_ultra)
client_cmd(gAttacker, "spk %s", KillSound);
if ((1 <= gAttacker <= gMaxPlayers))
{
if (gVictim != gAttacker)
{
gKills[gAttacker]++;
if (PlayerLevel[gAttacker] < MAXLEVEL-1)
{
if ( get_pcvar_num(enable_triple) && gKills[gAttacker] < get_pcvar_num(triple_kills) || gKills[gAttacker] > get_pcvar_num(triple_kills)
|| get_pcvar_num(enable_ultra) && gKills[gAttacker] < get_pcvar_num(ultra_kills) || gKills[gAttacker] > get_pcvar_num(ultra_kills) )
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA)
{
PlayerXP[gAttacker] += get_pcvar_num(admin_xp)
}
PlayerXP[gAttacker] += get_pcvar_num(xpKill)
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i", get_pcvar_num(xpKill))
}
else if ( !get_pcvar_num(enable_triple) || !get_pcvar_num(enable_ultra) )
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA)
{
PlayerXP[gAttacker] += get_pcvar_num(admin_xp)
}
PlayerXP[gAttacker] += get_pcvar_num(xpKill)
set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i", get_pcvar_num(xpKill))
}
if ( gKills[gAttacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA)
{
PlayerXP[gAttacker] += get_pcvar_num(admin_xp)
}
PlayerXP[gAttacker] += counted_triple
set_hudmessage(0, 255, 50, 0.45, 0.33, 1, 2.0, 2.0)
ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i TRIPLE KILL", counted_triple)
}
else if ( gKills[gAttacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
{
if ( get_pcvar_num(enable_admin_xp) && get_user_flags(gAttacker) & ADMIN_EXTRA)
{
PlayerXP[gAttacker] += get_pcvar_num(admin_xp)
}
PlayerXP[gAttacker] += counted_ultra
set_hudmessage(0, 255, 50, 0.45, 0.33, 1, 2.0, 2.0)
ShowSyncHudMsg(gAttacker, g_msgHudSync1, "+%i ULTRA KILL", counted_ultra)
}
}
}
check_level(gAttacker)
}
}
public Event_StatusValue(id)
{
new target = read_data(2)
if(target != id && target != 0 && get_pcvar_num(cToggle))
{
static sName[32];
get_user_name(target, sName, 31)
set_hudmessage(255, 0, 100, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 2)
ShowSyncHudMsg(id, g_msgHudSync1, "Name: %s^n Level: %d^n Rank: %s^n", 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) )
return PLUGIN_HANDLED;
set_hudmessage(255, 100, 0, 0.02, 0.33, 1, 0.0, 0.3, 0.0, 0.0)
ShowSyncHudMsg(id, g_msgHudSync1 , "[Level : %i] [XP : %i / %i]^n[Rank : %s]", PlayerLevel[id], PlayerXP[id], LEVELS[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
return PLUGIN_CONTINUE;
}
public check_level(id)
{
if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(cToggle))
{
while(PlayerXP[id] >= LEVELS[PlayerLevel[id]])
{
PlayerLevel[id]++;
client_cmd(id, "spk %s", LevelUp);
static name[32] ; get_user_name(id, name, charsmax(name));
client_print(0, print_chat, "* %s has reached level %i!", name, PlayerLevel[id]);
}
}
}
public cmdGiveLevel(id, level, cid)
{
if(!cmd_access(id, level, cid, 3) || !get_pcvar_num(cToggle))
{
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_print(Target, print_chat, "ADMIN: %s has set your level to %d", AdminName, Value)
return PLUGIN_HANDLED;
}
SaveLevel(id)
{
if ( get_pcvar_num(savexp) )
{
new authid[32]
get_user_authid(id, authid, 31)
new szData[256];
new szKey[64];
formatex( szKey , 63 , "%s-ID" , authid);
formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXP[id] );
nvault_set( gVault , szKey , szData );
}
else
{
new authip[32]
get_user_ip(id,authip,31,1)
new szData[256];
new szKey[64];
formatex( szKey , 63 , "%s-IP" , authip );
formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXP[id] );
nvault_set( gVault , szKey , szData );
}
}
LoadLevel(id)
{
if ( get_pcvar_num(savexp) )
{
new authid[32]
get_user_authid(id, authid, 31)
new szData[256];
new szKey[40];
formatex( szKey , 39 , "%s-ID" , authid );
formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXP[id])
nvault_get(gVault, 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
{
new authip[32]
get_user_ip(id, authip, 31, 1)
new szData[256];
new szKey[40];
formatex( szKey , 39 , "%s-IP" , authip );
formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXP[id])
nvault_get(gVault, 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)
}
}