/*
<Half-Life Rank System>
Version : 1.3.16
Author : BIGs
Site : https://hl-hev.ru/
Thanks :
D-AIRY[Ds-Servers.com] - Help in adjusting the code.
Turanga_Leela[aghl.ru] - Help in adjusting the code and testing.
TEPA6ANT[HL-HEV Team] - Help in testing the plugin.
Community HL-HEV | All for Half-Life <c>2018
*/
#include <amxmodx>
#include <hamsandwich>
#include <nvault>
#include <fun>
#include <fakemeta>
#pragma semicolon 1
#pragma ctrlchar '\'
#define PLUGIN "Half-Life : Rank System"
#define VERSION "1.3.16"
#define AUTHOR "BIGs & Turanga_Leela"
#define RANK_SCORE_MIN 0
#define RANK_SCORE_MAX 1
#define RANK_SCORES 2
#define RANK_0 0
#define RANK_I 1
#define RANK_II 2
#define RANK_III 3
#define RANK_IV 4
#define RANK_V 5
#define RANK_VI 6
#define RANK_VII 7
#define RANK_VIII 8
#define RANK_0_SCORE_MIN 0
#define RANK_0_SCORE_MAX 50
#define RANK_I_SCORE_MIN 51
#define RANK_I_SCORE_MAX 100
#define RANK_II_SCORE_MIN 101
#define RANK_II_SCORE_MAX 300
#define RANK_III_SCORE_MIN 301
#define RANK_III_SCORE_MAX 500
#define RANK_IV_SCORE_MIN 501
#define RANK_IV_SCORE_MAX 1000
#define RANK_V_SCORE_MIN 1001
#define RANK_V_SCORE_MAX 2000
#define RANK_VI_SCORE_MIN 2001
#define RANK_VI_SCORE_MAX 3500
#define RANK_VII_SCORE_MIN 3501
#define RANK_VII_SCORE_MAX 5000
#define RANK_VIII_SCORE_MIN 5001
#define RANK_VIII_SCORE_MAX 10000
#define RANKS_TOTAL 9
#define MAX_RANK (RANKS_TOTAL - 1)
#define CROSSBOW_AMMO_PACKS 8
#define AMMO_PACKS_357 3
#define SHOTGUN_AMMO_PACKS 4
#define SNARK_AMMO_PACKS 3
#define TRIPMINE_AMMO_PACKS 2
#define SATCHEL_AMMO_PACKS 3
#define GAUSS_AMMO_PACKS 5
#define EGON_AMMO_PACKS 5
new const g_scores[RANKS_TOTAL][RANK_SCORES] = {
{ RANK_0_SCORE_MIN, RANK_0_SCORE_MAX },
{ RANK_I_SCORE_MIN, RANK_I_SCORE_MAX },
{ RANK_II_SCORE_MIN, RANK_II_SCORE_MAX },
{ RANK_III_SCORE_MIN, RANK_III_SCORE_MAX },
{ RANK_IV_SCORE_MIN, RANK_IV_SCORE_MAX },
{ RANK_V_SCORE_MIN, RANK_V_SCORE_MAX },
{ RANK_VI_SCORE_MIN, RANK_VI_SCORE_MAX },
{ RANK_VII_SCORE_MIN, RANK_VII_SCORE_MAX },
{ RANK_VIII_SCORE_MIN, RANK_VIII_SCORE_MAX }
};
static const PlayerRankList[RANKS_TOTAL][] = {
"soldier",
"sergeant",
"officer",
"captain",
"major",
"colonel",
"general",
"genegalisimus",
"God of Half-Life"
};
#define rank_id_to_title(%0) PlayerRankList[reduce_rank_id(%0)]
//Constants and other
new PlayerIpList[33][16];
new PlayerSteamId[33][33];
new g_aiScoresOfPlayers[33]; // Kills
//Cvars
new cv_weapons , cv_rs ,cv_hud_r,cv_hud_g,cv_hud_b;
//Gets_Cvars
new gcv_weapons , gcv_rs ,gcv_hud_r,gcv_hud_g,gcv_hud_b;
rank_id_to_max_score(rank_id)
{
static const ScoreTab[] = {
50,
100,
300,
500,
1000,
2000,
3500,
5000,
10000
};
return ScoreTab[reduce_rank_id(rank_id)];
}
reduce_rank_id(rank_id)
{
if(rank_id > MAX_RANK)
{
return MAX_RANK;
}
if(rank_id < RANK_0)
{
return RANK_0;
}
return rank_id;
}
get_user_score(id)
{
return g_aiScoresOfPlayers[id];
}
set_user_score(const id, const new_score, const update_nvault = true)
{
new const nvault_score = rs_get_score(PlayerSteamId[id]);
new const tmp_score = get_user_score(id);
if(tmp_score != nvault_score)
{
// ERROR!
}
g_aiScoresOfPlayers[id] = new_score;
if(update_nvault)
{
new form[11];
format(form, charsmax(form), "%i", new_score);
rs_set_score(PlayerSteamId[id], form);
}
}
update_user_score(const id, const score = 1, const update_nvault = true)
{
set_user_score(id, get_user_score(id) + score, update_nvault);
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_Killed,"player","HamPlayerKill");
RegisterHam(Ham_Spawn,"player","HamPlayerSpawn" , 1);
//Create DataFile
new fp = nvault_open("hlrs");
nvault_close(fp);
set_task(45.0 , "ChatInfo",_,_,_,"b");
register_clcmd("say /rs","rs_reset_score");
register_clcmd("say_team /rs","rs_reset_score");
register_clcmd("/rs","rs_reset_score");
}
public plugin_cfg()
{
if(is_linux_server())
{
new sMsg[512];
formatex(sMsg , 511,"\n\e[01;38;05;46m [HLRS] : Rank System... Started!\n [HLRS] : Version \e[01;38;05;214m%s\e[0m" , VERSION);
server_print("%s" ,sMsg);
if(file_exists("addons/amxmodx/data/vault/hlrs.vault"))
{
server_print("\e[01;38;05;46m [HLRS] : nVault file... Detected!\e[0m\n");
}
} else {
server_print("--------------------------------------------------------------------------------");
server_print(" [HLRS] : Rank System... Started!");
if(file_exists("addons/amxmodx/data/vault/hlrs.vault")) {
server_print(" [HLRS] : nVault file... Detected!");
}
server_print(" [HLRS] : Version %s" , VERSION);
server_print(" Copyright <c> 2018 (Community HL-HEV.RU)");
server_print("--------------------------------------------------------------------------------");
}
//Cvars
register_cvar("hlrs_version",VERSION,FCVAR_SERVER);
cv_weapons = register_cvar("hlrs_weapons" ,"1");
cv_rs = register_cvar("hlrs_rs" , "1");
cv_hud_r = register_cvar("hlrs_hud_r" , "0");
cv_hud_g = register_cvar("hlrs_hud_g" , "255");
cv_hud_b = register_cvar("hlrs_hud_b" , "0");
gcv_weapons = get_pcvar_num(cv_weapons);
gcv_rs = get_pcvar_num(cv_rs);
gcv_hud_r = get_pcvar_num(cv_hud_r);
gcv_hud_g = get_pcvar_num(cv_hud_g);
gcv_hud_b = get_pcvar_num(cv_hud_b);
if(file_exists("addons/amxmodx/configs/hlrs_config.cfg"))
{
server_print("[HLRS] : Config loaded successfuly!");
server_cmd("exec addons/amxmodx/configs/hlrs_config.cfg");
} else {
server_print("[HLRS] : Config loaded failing!");
}
}
public plugin_natives()
{
register_native("hlrs_set_score", "rs_set_score", 1);
register_native("hlrs_get_score", "rs_get_score", 1);
register_native("hlrs_get_user_rank", "rs_get_user_rank", 1);
}
public rs_get_user_rank(score)
{
return PlayerRankList[get_rank(score)];
}
public rs_reset_score(id)
{
if(gcv_rs)
{
new fp = nvault_open("hlrs");
nvault_remove(fp , PlayerSteamId[id]);
client_print(id , print_chat ,"[HLRS] : Your score reset!");
nvault_close(fp);
} else {
client_print(id , print_chat ,"[HLRS] : It's function is disabled!");
}
}
public ChatInfo()
{
static const ChatLst[][] = {
"[HLRS] : Print /rs for reset you Score.",
"<Half-Life Rank System>"
};
client_print(0, print_chat, "%s", ChatLst[random_num(0,1)]);
}
public client_putinserver(id)
{
if(!is_user_bot(id))
{
get_user_ip(id, PlayerIpList[id], 15);
get_user_authid(id, PlayerSteamId[id], 32);
set_user_score(id, rs_get_score(PlayerSteamId[id]), false);
InfoHudMsg(id);
}
}
public InfoHudMsg(id)
{
if(is_user_alive(id))
{
set_hudmessage(gcv_hud_r, gcv_hud_g, gcv_hud_b, 0.03, 0.68, 0, 6.0, 12.0, 0.08, 2.0, true);
new const score = get_user_score(id);
new const rank_id = score_to_rank_id(score);
new nickname[32];
get_user_name(id, nickname, charsmax(nickname));
show_hudmessage(id, "-------------------------------\nName : %s \nScore : %i/%i\nRank : %s\n-------------------------------" ,
nickname,
score,
rank_id_to_max_score(rank_id + 1),
rank_id_to_title(rank_id));
}
set_task(3.0, "InfoHudMsg", id);
}
public HamPlayerKill(victim, killer)
{
killer = deduce_player(killer);
if(killer && killer != victim)
{
if(!is_user_bot(killer))
{
update_user_score(killer);
}
if(!is_user_bot(victim))
{
update_user_score(victim, -1);
}
}
}
get_user_rand_id(id)
{
return score_to_rank_id(get_user_score(id));
}
public HamPlayerSpawn(id)
{
if(is_user_alive(id) && gcv_weapons)
{
switch(get_user_rand_id(id))
{
case RANK_0:
{
give_equipment_for_rank_0(id);
}
case RANK_I:
{
give_equipment_for_rank_I(id);
}
case RANK_II:
{
give_equipment_for_rank_II(id);
give_weapon_satchel(id);
}
case RANK_III:
{
give_equipment_for_rank_III(id);
}
case RANK_IV:
{
give_equipment_for_rank_IV(id);
}
case RANK_V:
{
give_equipment_for_rank_V(id);
}
case RANK_VI:
{
give_equipment_for_rank_VI(id);
}
case RANK_VII:
{
give_equipment_for_rank_VII(id);
}
case RANK_VIII:
{
give_equipment_for_rank_VIII(id);
}
default:
{
give_equipment_for_rank_VIII(id);
}
}
}
}
public rs_set_score(steamid [],score[])
{
new fp = nvault_open("hlrs");
nvault_set(fp, steamid, score);
nvault_close(fp);
}
public rs_get_score(steamid[])
{
new fp = nvault_open("hlrs");
new score = nvault_get(fp, steamid);
nvault_close(fp);
return score;
}
give_weapon_gauss(id, ammo = GAUSS_AMMO_PACKS)
{
give_item(id, "weapon_gauss");
give_item_repeatedly(id, "ammo_gaussclip", ammo);
}
give_weapon_egon(id, ammo = EGON_AMMO_PACKS)
{
give_item(id, "weapon_egon");
give_item_repeatedly(id, "ammo_gaussclip", ammo);
}
give_weapon_9mmAR(id)
{
give_item(id, "weapon_9mmAR");
give_item(id, "ammo_9mmbox");
give_item(id, "ammo_ARgrenades");
}
give_weapon_satchel(id, ammo = SATCHEL_AMMO_PACKS)
{
give_item_repeatedly(id, "weapon_satchel", ammo);
}
give_weapon_tripmine(id, ammo = TRIPMINE_AMMO_PACKS)
{
give_item_repeatedly(id, "weapon_tripmine", ammo);
}
give_weapon_snark(id, ammo = SNARK_AMMO_PACKS)
{
give_item_repeatedly(id, "weapon_snark", ammo);
}
give_weapon_hornetgun(id)
{
give_item(id ,"weapon_hornetgun");
}
give_weapon_shotgun(id, ammo = SHOTGUN_AMMO_PACKS)
{
give_item(id, "weapon_shotgun");
give_item_repeatedly(id, "ammo_buckshot", ammo);
}
give_weapon_crossbow(id, ammo = CROSSBOW_AMMO_PACKS)
{
give_item(id, "weapon_crossbow");
give_item_repeatedly(id, "ammo_crossbow", ammo);
}
give_weapon_357(id, ammo = AMMO_PACKS_357)
{
give_item(id, "weapon_357");
give_item_repeatedly(id, "ammo_357", ammo);
}
give_item_repeatedly(id, item_class[], count = 1)
{
if(0 >= count)
{
return;
}
do {
give_item(id, item_class);
--count;
} while(count > 0);
}
set_full_armor(id)
{
set_user_armor(id ,100);
}
set_full_pack_of_ARgrenades(id)
{
give_item_repeatedly(id, "ammo_ARgrenades", 4);
}
set_full_pack_of_gaussclip(id)
{
give_item_repeatedly(id, "ammo_gaussclip", 5);
}
give_equipment_for_rank_0(id)
{
give_weapon_357(id);
give_weapon_tripmine(id);
}
give_equipment_for_rank_I(id)
{
give_equipment_for_rank_0(id);
give_weapon_9mmAR(id);
}
give_equipment_for_rank_II(id)
{
give_equipment_for_rank_I(id);
give_weapon_shotgun(id);
}
give_equipment_for_rank_III(id)
{
give_equipment_for_rank_II(id);
give_weapon_crossbow(id);
}
give_equipment_for_rank_IV(id)
{
give_equipment_for_rank_III(id);
set_full_pack_of_ARgrenades(id);
set_full_pack_of_gaussclip(id);
give_weapon_snark(id);
}
give_equipment_for_rank_V(id)
{
give_equipment_for_rank_IV(id);
give_weapon_hornetgun(id);
}
give_equipment_for_rank_VI(id)
{
give_equipment_for_rank_V(id);
give_weapon_gauss(id, 0);
}
give_equipment_for_rank_VII(id)
{
give_equipment_for_rank_VI(id);
give_weapon_egon(id, 0);
}
give_equipment_for_rank_VIII(id)
{
give_equipment_for_rank_VII(id);
set_full_armor(id);
}
score_to_rank_id(score)
{
for(new rank = RANK_0; rank < RANKS_TOTAL; rank++)
{
if(score > g_scores[rank][RANK_SCORE_MAX])
{
continue;
}
return rank;
}
return MAX_RANK;
}
deduce_player(id)
{
if(!pev_valid(id))
{
return 0;
}
if(is_player(id))
{
return id;
} else {
new owner = pev(id, pev_owner);
if(is_player(owner))
{
return owner;
}
}
return 0;
}
is_player(id)
{
return (id > 0 && id <= get_maxplayers());
}