Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <fvault>
- #include <cstrike>
- #include <wm_play>
- #define maxranks 15
- #define maxlevels 50
- #define xPrefix "XP 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_Mayor 10
- #define RANKS_Pro 11
- #define RANKS_SuperPro 12
- #define RANKS_Heroic 13
- #define RANKS_God 14
- 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",
- "Mayor",
- "Pro",
- "SuperPro",
- "Heroic",
- "God"
- }
- 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", "10000") // 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_Mayor
- 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
- }
- /*----------------------------------------------------------------------------------------------------------------
- -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 }
- */
Add Comment
Please, Sign In to add comment