All pastes #1567687 Raw Edit

Rank/EXP Mod

public text v1 · immutable
#1567687 ·published 2009-09-15 23:49 UTC
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) 
	}
}