New Member
Join Date: Mar 2020
Location: Bucharest
|
03-18-2020
, 06:00
Re: XP + Level + Rank System v2.2
|
#117
|
Code:
Quote:
#include <amxmodx>
#include <fvault>
#include <cstrike>
#include <wm_play>
#define maxranks 20
#define maxlevels 50
#define xPrefix "System"
#define RANKS_Noobest 0
#define RANKS_Noob 1
#define RANKS_Newbiee 2
#define RANKS_Easy 3
#define RANKS_Normal 4
#define RANKS_Hard 5
#define RANKS_Expert 6
#define RANKS_SuperExpert 7
#define RANKS_Specialist 8
#define RANKS_Leader 9
#define RANKS_Amateur 10
#define RANKS_Pro 11
#define RANKS_SuperPro 12
#define RANKS_Heroic 13
#define RANKS_God 14
#define RANKS_SuperGod 15
#define RANKS_ArmyGunner 16
#define RANKS_SpecialForces 17
#define RANKS_Sniper 18
#define RANKS_Rambo 19
new const VERSION[] = "1.1"
new SzMaxPlayers, SzSayText;
new playerPrefix,rankLevelBonus,rankSaveType;
new const db_save[] = "cs_rank_system"
new level[33], xp[33], rank[33], g_status_sync
new SzGTeam[3][] = {
"Spectator",
"Terrorist",
"Counter-Terrorist"
}
new const xp_num[maxlevels+1] =
{
15, 70, 150, 250, 350, 450, 550, 650, 750, 850, 950, 1050, 1150, 1250, 1350, 1450, 1550, 1650,
1750, 1850, 1950, 2050, 2150, 2250, 2350, 2450, 2550,2650, 2750, 2850, 2950, 3050, 3150, 3250, 3350, 3450, 3550, 3650,
3750, 3850, 3950, 4050, 4150, 4250, 4350, 4450, 4550, 4650, 4750, 5000
}
new const ranks_names[maxranks][]=
{
"Noobest",
"Noob",
"Newbiee",
"Easy",
"Normal",
"Hard",
"Expert",
"SuperExpert",
"Specialist",
"Leader",
"Amateur",
"Pro",
"SuperPro",
"Heroic",
"God",
"SuperGod",
"ArmyGunner",
"SpecialForces",
"Sniper",
"Rambo",
}
public plugin_init()
{
register_plugin("XP + LEVEL + RANK SYSTEM", VERSION, AUTHOR)
// system of xp+lvl+rank
playerPrefix = register_cvar("Player Prefix", "1") //1-Prefix by RANK, 2-Prefix by LEVEL
rankLevelBonus = register_cvar("Level Up Bonus", "0") // Amount of money when passing level.
rankSaveType = register_cvar("XP Save Type", "2") // 1 - IP || 2 - Nick || 3 - SteamID
register_cvar("XPLvlRankSystem", VERSION, FCVAR_SERVER | FCVAR_SPONLY ) //Search for variable on Gametracker.com
register_event("StatusValue", "showStatus", "be", "1=2", "2!0")
register_event("StatusValue", "hideStatus", "be", "1=1", "2=0")
register_clcmd("say", "hook_say");
register_clcmd("say_team", "hook_say_team");
register_dictionary("cs_rank_system.txt");
SzSayText = get_user_msgid ("SayText");
SzMaxPlayers = get_maxplayers();
register_message(SzSayText, "MsgDuplicate");
g_status_sync = CreateHudSyncObj()
}
/*----------------------------------------------------------------------------------------------------------------
-HUD OF THE GAME
----------------------------------------------------------------------------------------------------------------*/
public hud_status(id)
{
if(!is_user_alive(id) || !is_user_connected(id) )
return;
if(level[id] >= maxlevels)
{
static r, g, b; r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255);
set_hudmessage(r, g, b, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1)
show_hudmessage(id,"» Level: %d/%d^n» Rank: %s^n» XP: %d/%d", level[id], maxlevels, ranks_names[rank[id]], xp[id], xp[id])
}
else
{
set_hudmessage(255, 255, 255, 0.80, -1.0, 0, 1.0, 1.1, 0.0, 0.0, -1)
show_hudmessage(id,"» Level: %d/%d^n» Rank: %s^n» XP: %d/%d", level[id], maxlevels, ranks_names[rank[id]], xp[id], xp_num[level[id]])
}
}
/*----------------------------------------------------------------------------------------------------------------
-CHAT PREFIX
----------------------------------------------------------------------------------------------------------------*/
public MsgDuplicate(id){ return PLUGIN_HANDLED; }
public hook_say(id)
{
new SzMessages[192], SzName[32];
new SzAlive = is_user_alive(id);
read_args(SzMessages, 191);
remove_quotes(SzMessages);
get_user_name(id, SzName, 31);
if(!is_valid_msg(SzMessages))
return PLUGIN_CONTINUE;
switch(get_pcvar_num(playerPrefix))
{
case 1 :(SzAlive ? format(SzMessages, 191, "^4[%s] ^3%s : ^1%s", ranks_names[rank[id]], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^4[%s] ^3%s : ^1%s", ranks_names[rank[id]], SzName, SzMessages));
case 2 :(SzAlive ? format(SzMessages, 191, "^4[Level %d] ^3%s : ^1%s", level[id], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^4[Level %d] ^3%s : ^1%s", level[id], SzName, SzMessages));
}
for(new i = 1; i <= SzMaxPlayers; i++)
{
if(!is_user_connected(i))
continue;
message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i);
write_byte(id);
write_string(SzMessages);
message_end();
}
return PLUGIN_CONTINUE;
}
public hook_say_team(id)
{
new SzMessages[192], SzName[32];
new SzAlive = is_user_alive(id);
new SzGetTeam = get_user_team(id);
read_args(SzMessages, 191);
remove_quotes(SzMessages);
get_user_name(id, SzName, 31);
if(!is_valid_msg(SzMessages))
return PLUGIN_CONTINUE;
switch(get_pcvar_num(playerPrefix))
{
case 1 : (SzAlive ? format(SzMessages, 191, "^1(%s) ^4[%s] ^3%s : ^1%s", SzGTeam[SzGetTeam], ranks_names[rank[id]], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^1(%s) ^4[%s] ^3%s : ^1%s", SzGTeam[SzGetTeam], ranks_names[rank[id]], SzName, SzMessages));
case 2 : (SzAlive ? format(SzMessages, 191, "^1(%s) ^4[Level %d] ^3%s : ^1%s", SzGTeam[SzGetTeam], level[id], SzName, SzMessages) : format(SzMessages, 191, "^1*DEAD* ^1(%s) ^4[Level %d] ^3%s : ^1%s", SzGTeam[SzGetTeam], level[id], SzName, SzMessages));
}
for(new i = 1; i <= SzMaxPlayers; i++)
{
if(!is_user_connected(i))
continue;
if(get_user_team(i) != SzGetTeam)
continue;
message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i);
write_byte(id);
write_string(SzMessages);
message_end();
}
return PLUGIN_CONTINUE;
}
bool:is_valid_msg(const SzMessages[])
{
if( SzMessages[0] == '@'
|| !strlen(SzMessages)){ return false; }
return true;
}
/*----------------------------------------------------------------------------------------------------------------
-EVENT TO ADD XP
----------------------------------------------------------------------------------------------------------------*/
public client_death(killer, victim, weapon, hitplace)
{
new victim_name[32]
get_user_name(victim, victim_name, charsmax(victim_name))
new killer_team = get_user_team(killer)
new victim_team = get_user_team(victim)
//NORMAL KILL
if((killer != victim) && !(killer_team == victim_team) && !(hitplace == HIT_HEAD) && !(weapon == CSW_HEGRENADE) && !(weapon == CSW_KNIFE))
{
xp[killer]++
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_NORMAL_KILL", victim_name)
}
//HEADSHOT
if(hitplace == HIT_HEAD && !(weapon == CSW_KNIFE) && !(killer_team == victim_team))
{
xp[killer]+=3
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_HEADSHOT_KILL", victim_name)
}
//KNIFE KILL
if(weapon == CSW_KNIFE && !(hitplace == HIT_HEAD) && !(killer_team == victim_team))
{
xp[killer]+=5
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_KNIFE_KILL", victim_name)
}
//KNIFE + HEADSHOT
if(weapon == CSW_KNIFE && (hitplace == HIT_HEAD) && !(killer_team == victim_team))
{
xp[killer]+=7
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_KNIFE_HEAD_KILL", victim_name)
}
//GRENADE KILL
if(weapon == CSW_HEGRENADE && (killer != victim) && !(killer_team == victim_team))
{
xp[killer]+=5
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_GRENADE_KILL", victim_name)
}
//SUICIDE
if(killer == victim)
{
xp[killer]-=2
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_SUICIDE")
}
//TEAM KILL
if(killer != victim && (killer_team == victim_team))
{
xp[killer]-=10
client_print_color(killer, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_TEAM_KILL")
}
check_level(killer, 1)
save_data(killer)
}
/*----------------------------------------------------------------------------------------------------------------
-CHECK LEVEL OF ADD ++
----------------------------------------------------------------------------------------------------------------*/
public check_level(id, sound)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
new name[32]; get_user_name(id, name, 31)
if(level[id] < maxlevels)
{
while(xp[id] >= xp_num[level[id]])
{
level[id]++
if(sound)
{
if(level[id] == maxlevels)
{
client_print_color(id, "!g[%s] %L", xPrefix, LANG_PLAYER, "MSG_MAXLVL_ID", level[id])
client_print_color(0, "!g[%s] %L",xPrefix, LANG_PLAYER, "MSG_MAXLVL_ALL", name, level[id])
client_cmd(0, "spk ambience/wolfhowl02.wav")
return PLUGIN_HANDLED
}
client_print_color(id,"!g[%s] %L",xPrefix,LANG_PLAYER, "MSG_RAISE_LEVEL_ID", get_pcvar_num(rankLevelBonus))
client_print_color(0, "!g[%s] %L",xPrefix,LANG_PLAYER, "MSG_RAISE_LEVEL_ALL", name, get_pcvar_num(rankLevelBonus))
cs_set_user_money(id, cs_get_user_money(id) + get_pcvar_num(rankLevelBonus))
client_cmd(0, "spk ambience/lv_fruit1.wav")
set_ranks(id)
}
}
}
// Bug Preventions... (Back to top)
if(level[id] == maxlevels && xp[id] > xp_num[level[id]-1])
{
xp[id] = xp_num[level[id]-1]
save_data(id)
}
if(level[id] >= maxlevels)
{
level[id] = maxlevels
xp[id] = xp_num[level[id]-1]
save_data(id)
}
return PLUGIN_HANDLED
}
/*----------------------------------------------------------------------------------------------------------------
-SET THE RANK POSITION
----------------------------------------------------------------------------------------------------------------*/
public set_ranks(id)
{
if(level[id] <= 2) rank[id] = RANKS_Noobest
if(level[id] >= 2) rank[id] = RANKS_Noob
if(level[id] >= 5) rank[id] = RANKS_Newbiee
if(level[id] >= 8) rank[id] = RANKS_Easy
if(level[id] >= 11) rank[id] = RANKS_Normal
if(level[id] >= 14) rank[id] = RANKS_Hard
if(level[id] >= 17) rank[id] = RANKS_Expert
if(level[id] >= 20) rank[id] = RANKS_SuperExpert
if(level[id] >= 23) rank[id] = RANKS_Specialist
if(level[id] >= 26) rank[id] = RANKS_Leader
if(level[id] >= 29) rank[id] = RANKS_Amateur
if(level[id] >= 32) rank[id] = RANKS_Pro
if(level[id] >= 33) rank[id] = RANKS_SuperPro
if(level[id] >= 36) rank[id] = RANKS_Heroic
if(level[id] >= 43) rank[id] = RANKS_God
if(level[id] >= 43) rank[id] = RANKS_SuperGod
if(level[id] >= 43) rank[id] = RANKS_ArmyGunner
if(level[id] >= 43) rank[id] = RANKS_SpecialForces
if(level[id] >= 43) rank[id] = RANKS_Sniper
if(level[id] >= 43) rank[id] = RANKS_Rambo
}
/*----------------------------------------------------------------------------------------------------------------
-SAVE LEVEL, XP AND RANK
----------------------------------------------------------------------------------------------------------------*/
public save_data(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
new auth[40], data[50]
switch(get_pcvar_num(rankSaveType))
{
case 1: get_user_ip(id, auth, charsmax(auth), 1)
case 2: get_user_name(id, auth, charsmax(auth))
case 3: get_user_authid(id, auth, charsmax(auth))
}
formatex(data, charsmax(data), "%d %d", level[id], xp[id])
fvault_pset_data(db_save, auth, data)
return PLUGIN_HANDLED;
}
/*----------------------------------------------------------------------------------------------------------------
-LOAD DATA
----------------------------------------------------------------------------------------------------------------*/
public client_authorized(id)
{
new auth[40], data[50], x1[10], x2[10]
switch(get_pcvar_num(rankSaveType))
{
case 1: get_user_ip(id, auth, charsmax(auth), 1)
case 2: get_user_name(id, auth, charsmax(auth))
case 3: get_user_authid(id, auth, charsmax(auth))
}
fvault_get_data(db_save, auth, data, charsmax(data))
parse(data, x1, charsmax(x1), x2, charsmax(x2))
level[id] = str_to_num(x1)
xp[id] = str_to_num(x2)
set_task(2.0, "set_ranks", id)
check_level(id, 0)
set_task(1.1, "hud_status", id, _, _, "b")
}
/*----------------------------------------------------------------------------------------------------------------
-SHOW XP BY LOOKING AT THE PERSON
----------------------------------------------------------------------------------------------------------------*/
public showStatus(id)
{
if(!is_user_bot(id) && is_user_connected(id))
{
new name[32], pid = read_data(2)
get_user_name(pid, name, 31)
new xxx = get_user_team(id)
new xxx2 = get_user_team(pid)
static r, g, b;
r = random_num(0, 255), g = random_num(0, 255), b = random_num(0, 255);
if (xxx == xxx2) // friend
{
set_hudmessage(r, g, b, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1)
ShowSyncHudMsg(id, g_status_sync, "Name: %s^nRank: %s^nLevel: %d^nXP: %d/%d", name, ranks_names[rank[pid]], level[pid], xp[pid], xp_num[level[pid]])
}
}
}
public hideStatus(id)
{
ClearSyncHud(id, g_status_sync)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1046\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang16393\\ f0\\ fs16 \n\\ par }
*/
|
Hello , i can't compile this , i have this errors :
fatal error 100: cannot read from file: "fvault"
fatal error 100: cannot read from file: "wm_play"
i have them and still not working
Hello , i can't compile this , i have this errors :
fatal error 100: cannot read from file: "fvault"
fatal error 100: cannot read from file: "wm_play"
i have them and still not working
Last edited by Antic; 03-18-2020 at 06:01.
|
|