Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <fvault>
#include <cromchat>
#include <fakemeta>
#define MaxLevels 11
#define VaultName "RankSystem1"
//Tuk poakzvate kak da izglejdat syobshteniqta!!!
//Info:
//&dead& - tova pokazva dali e umrql igracha!
//&rank& - tova pokazva ranka na igracha!
//&name& - tova pokazva imeto na igracha!
//&message& - tova pokazva syobshtenieto na igracha!
//&prefix& - tova pokazva admin prefixa na igracha samo za admin syobshteniq!
//&team& - tova pokazva otbora na igracha!
//Tuk syobshtenie na chata za vsichki koeto ne ot admin
#define SayMsg "&dead&^1[^3&rank&^1]^3&name& ^1: &message&"
//Tuk syobshtenie na chata za vsichki koeto e ot admin
#define SayMsgAdmin "&dead&^3[^4&prefix&^3]^1[^3&rank&^1]^3&name&^1 : ^4&message&"
//Tuk syobshtenie na otborniq chat koeto ne ot admin
#define SayTeamMsg "&dead&^4(^3&team&^4)^1[^3&rank&^1]^3&name& ^1: &message&"
//Tuk syobshtenie na otborniq chat koeto e ot admin
#define SayTeamMsgAdmin "&dead&^4(^3&team&^4)^3[^4&prefix&^3]^1[^3&rank&^1]^3&name&^1 : ^4&message&"
new syncObj, sayText, teamInfo, g_iLevel[33], g_iXPl[33], g_iMaxLevel[5], g_iPlayerLevel[5], g_szPrefix[33]
new Cvar_Hud, Cvar_KnifeXP, Cvar_HEXP, Cvar_HSXP, Cvar_KillXP, Cvar_SuicideXP, Cvar_Msg, Cvar_AdmListen, Cvar_AdmListenFlag, Cvar_RankUPMsg, Cvar_HudRed,Cvar_HudGreen,Cvar_HudBlue,Cvar_HudX,Cvar_HudY, Cvar_HudEff, Cvar_Prefix
new Vip, VipFlag, VipX
new const g_vault_name[] = VaultName;
new const Levels[MaxLevels+1] =
{
0,
50,
150,
350,
750,
1250,
1750,
3000,
4000,
5000,
7500
}
new const Prefix[MaxLevels][] =
{
"NewbiE",
"PlayeR",
"Frozen",
"Advanced",
"KilleR",
"Semi-prO",
"PrO",
"Mega-PrO",
"Hiper-PrO",
"BooS",
"LEDEND"
}
new const szTag[][] =
{
"",
"OwneR",
"Administrator",
"Moderator",
"Admin",
"MEGA VIP",
"VIP"
}
new const szFlags[][] =
{
"",
"l",
"m",
"n",
"o",
"q",
"b"
}
new const szBadStarts[][] =
{
"",
"@",
"/",
"$",
"!",
"#"
}
new const szDead[4][] =
{
"",
"^4*^1DEAD^4*", //Za Treroristite
"^4*^1DEAD^4*", //Za Counter Treroristite
"^4*^1SPEC^4*" //Za Spektatorite
}
new const szTeams[4][] =
{
"",
"Terrorist", //Za Treroristite
"CT", //Za Counter Treroristite
"Spec" //Za Spketatorite
}
public plugin_init()
{
register_plugin("AdminPreifx+RankSystem", "1.5", "mi0");
register_clcmd ("say", "hook_say")
register_clcmd ("say_team", "hook_teamsay")
register_event("DeathMsg","DeathMessage","a")
register_clcmd("say /myrank", "cmdRank")
register_clcmd("say_team /myrank", "cmdRank")
register_clcmd("say /xp", "cmdRank")
register_clcmd("say_team /xp", "cmdRank")
Vip = register_cvar("rsys_vipxp", "1")
VipFlag = register_cvar("rsys_vipflag", "b")
VipX = register_cvar("rsys_vipmultiple", "2")
Cvar_Hud = register_cvar("rsys_hud", "1")
Cvar_Prefix = register_cvar("rsys_prefix", "VanBaseBuilder");
Cvar_KnifeXP = register_cvar("rsys_knifexp", "6")
Cvar_HEXP = register_cvar("rsys_hexp", "4")
Cvar_HSXP = register_cvar("rsys_hsxp", "3")
Cvar_KillXP = register_cvar("rsys_killxp", "2")
Cvar_SuicideXP = register_cvar("rsys_suicxp", "0")
Cvar_Msg = register_cvar("rsys_msg", "1")
Cvar_AdmListen = register_cvar("rsys_admlisten", "1")
Cvar_AdmListenFlag = register_cvar("rsys_admlistenflag", "i")
Cvar_RankUPMsg = register_cvar("rsys_rankupmsg", "1")
Cvar_HudRed = register_cvar("rsys_hudred", "139")
Cvar_HudGreen = register_cvar("rsys_hudgreen", "0")
Cvar_HudBlue = register_cvar("rsys_hudblue", "139")
Cvar_HudX = register_cvar("rsys_hudx", "0.01")
Cvar_HudY = register_cvar("rsys_hudy", "0.14")
Cvar_HudEff = register_cvar("rsys_hudeff", "0")
sayText = get_user_msgid("SayText")
teamInfo = get_user_msgid("TeamInfo")
register_message(sayText, "avoid_duplicated")
register_concmd("rank_givexp", "CmdAddXP", ADMIN_LEVEL_A, "<nick | ct | t | @all> <xp>")
register_forward(FM_ClientKill, "Fwd_Kill")
syncObj = CreateHudSyncObj()
fvault_load(g_vault_name)
}
public getPrefix()
{
new Prefix[33]
get_pcvar_string(Cvar_Prefix, Prefix, 32)
return Prefix
}
public ShowHud(id)
{
if(get_pcvar_num(Cvar_Hud) == 1)
{
set_hudmessage(get_pcvar_num(Cvar_HudRed), get_pcvar_num(Cvar_HudGreen), get_pcvar_num(Cvar_HudBlue), get_pcvar_float(Cvar_HudX), get_pcvar_float(Cvar_HudY), get_pcvar_num(Cvar_HudEff), 6.0, 1.0, 0.0, 0.0, -1)
if(MaxLevels == g_iLevel[id]+1)
ShowSyncHudMsg(id, syncObj,"|RanK - %s|XP - %d|", Prefix[g_iLevel[id]], g_iXPl[id])
else
ShowSyncHudMsg(id, syncObj,"|RanK - %s|XP - %d|NexTRanK - %s|",Prefix[g_iLevel[id]], g_iXPl[id], Prefix[g_iLevel[id]+1])
}
}
public cmdRank(id)
{
if(MaxLevels == g_iLevel[id]+1)
CC_SendMatched(id, CC_COLOR_RED, "^4[%s]^3 My Rank^1:^4 %s^1 | ^3Level^1: ^4%d ^1| ^3XP^1: ^4%d^1.", getPrefix(), g_szPrefix[g_iLevel[id]], g_iLevel[id]+1, g_iXPl[id])
else
CC_SendMatched(id, CC_COLOR_RED, "^4[%s]^3 My Rank^1:^4 %s^1 | ^3Level^1: ^4%d ^1/ ^4%d ^1| ^3XP^1: ^4 %d ^1/ ^4%d ^1to become ^4%s^1.",getPrefix(), g_szPrefix[g_iLevel[id]], g_iLevel[id]+1, MaxLevels, g_iXPl[id], Levels[g_iLevel[id]+1], Prefix[g_iLevel[id]+1])
}
public client_connect(id)
{
Load(id)
}
public client_disconnect(id)
{
Save(id)
g_iXPl[id] = 0
g_iLevel[id] = 0
remove_task(id)
}
public client_putinserver(id)
{
set_task(1.0, "ShowHud", id, _, _, "b")
new currentPlayerRank = 0;
while(currentPlayerRank < (MaxLevels - 1))
{
if(g_iXPl[id] >= Levels[currentPlayerRank + 1])
++currentPlayerRank;
else
break;
}
g_iLevel[id] = currentPlayerRank;
}
public Fwd_Kill(id)
{
if(is_user_alive(id) && Cvar_SuicideXP != 0) {
g_iXPl[id] -= get_pcvar_num(Cvar_SuicideXP)
CheckLevel(id)
Save(id)
if(get_pcvar_num(Cvar_Msg) == 1)
CC_SendMatched(id, CC_COLOR_RED, "^4[%s]^1 You committed ^3suicide ^1and ^3lost^4 %d XP^1.", getPrefix(), get_pcvar_num(Cvar_SuicideXP))
}
return PLUGIN_CONTINUE
}
public DeathMessage()
{
new killer = read_data(1)
new victim = read_data(2)
new headshot = read_data(3)
new Weapon[32]
new szMsg[100]
new temp_flag[2]
read_data( 4, Weapon, charsmax( Weapon ) );
format( Weapon, charsmax( Weapon ), "weapon_%s", Weapon );
if( contain( Weapon, "nade" ) >= 0 )
Weapon = "weapon_hegrenade"
new iWeapon = get_weaponid( Weapon );
if(killer == victim)
return PLUGIN_CONTINUE;
if(!killer || killer > get_maxplayers())
return PLUGIN_CONTINUE;
new victim_name[32];
get_user_name(victim, victim_name, 31);
get_pcvar_string(VipFlag, temp_flag, charsmax(temp_flag));
if(get_pcvar_num(Vip) == 1 && get_user_flags(killer) & read_flags(temp_flag)) {
if(iWeapon == CSW_HEGRENADE)
{
g_iXPl[killer] += get_pcvar_num(Cvar_HEXP)*get_pcvar_float(VipX)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3HE Grenade^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus %dX^1 ]",victim_name, get_pcvar_num(Cvar_HEXP)*2, get_pcvar_float(VipX))
}
else if(iWeapon == CSW_KNIFE)
{
g_iXPl[killer] += get_pcvar_num(Cvar_KnifeXP)*get_pcvar_float(VipX)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3Knife^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus %dX^1 ]",victim_name, get_pcvar_num(Cvar_KnifeXP)*2, get_pcvar_float(VipX))
}
else if(headshot)
{
g_iXPl[killer] += get_pcvar_num(Cvar_HSXP)*get_pcvar_float(VipX)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3Head^4Shot^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus %dX^1 ]",victim_name, get_pcvar_num(Cvar_HSXP)*2, get_pcvar_float(VipX))
}
else
{
g_iXPl[killer] += get_pcvar_num(Cvar_KillXP)*get_pcvar_float(VipX)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 and got^4 %d XP^1.[ ^4V.I.P Bonus %dX^1 ]",victim_name, get_pcvar_num(Cvar_KillXP)*2, get_pcvar_float(VipX))
}
}
else
{
if(iWeapon == CSW_HEGRENADE)
{
g_iXPl[killer] += get_pcvar_num(Cvar_HEXP)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3HE Grenade^1 and got^4 %d XP^1.",victim_name, get_pcvar_num(Cvar_HEXP))
}
else if(iWeapon == CSW_KNIFE)
{
g_iXPl[killer] += get_pcvar_num(Cvar_KnifeXP)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3Knife^1 and got^4 %d XP^1.",victim_name, get_pcvar_num(Cvar_KnifeXP))
}
else if(headshot)
{
g_iXPl[killer] += get_pcvar_num(Cvar_HSXP)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3Head^4Shot^1 and got^4 %d XP^1.",victim_name, get_pcvar_num(Cvar_HSXP))
}
else
{
g_iXPl[killer] += get_pcvar_num(Cvar_KillXP)
format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 and got^4 %d XP^1.",victim_name, get_pcvar_num(Cvar_KillXP))
}
}
if(get_pcvar_num(Cvar_Msg) == 1){
CC_SendMatched(killer, CC_COLOR_RED, "%s",szMsg)
return PLUGIN_CONTINUE
}
CheckLevel(killer)
Save(killer)
return PLUGIN_CONTINUE
}
public CheckLevel(id)
{
new currentPlayerRank = 0;
while(currentPlayerRank < (MaxLevels - 1))
{
if(g_iXPl[id] >= Levels[currentPlayerRank + 1])
++currentPlayerRank;
else
break;
}
if(g_iLevel[id] != currentPlayerRank)
{
g_iLevel[id] = currentPlayerRank;
if(get_pcvar_num(Cvar_RankUPMsg) == 1)
{
new szName[33]
get_user_name(id, szName, charsmax(szName))
CC_SendMatched(0, CC_COLOR_RED, "^4[%s]^3 %s ^1is now rank ^3%s^1!", getPrefix(), szName, Prefix[g_iLevel[id]])
}
}
}
public CmdAddXP (index, level, cid)
{
if(!cmd_access(index, level, cid, 3)) return PLUGIN_HANDLED;
new arg [32]
read_argv (1, arg, 31)
new AddXP [32]
read_argv (2, AddXP, charsmax (AddXP))
new XPtoGive = str_to_num (AddXP)
new AdminName [32]
new TargetName [32]
get_user_name (index, AdminName, charsmax (AdminName))
new players[32], totalplayers
get_players(players, totalplayers)
if(arg[0]=='@')
{
if(equali(arg[1],"All") || equali(arg[1],"ALL"))
{
for (new i = 0; i < totalplayers; i++)
{
if(g_iXPl[players[i]] + XPtoGive < 0)
g_iXPl[players[i]] = 0
else
g_iXPl[players[i]] += XPtoGive
}
format(TargetName, charsmax(TargetName), "everyone")
}
else if(equali(arg[1],"CT") || equali(arg[1],"Ct"))
{
for (new i = 0; i < totalplayers; i++)
if(get_user_team(i) == 2)
{
if(g_iXPl[players[i]] + XPtoGive < 0)
g_iXPl[players[i]] = 0
else
g_iXPl[players[i]] += XPtoGive
}
format(TargetName, charsmax(TargetName), "Counter-Terrorists")
}
else if(equali(arg[1],"T") || equali(arg[1],"t"))
{
for (new i = 0; i < totalplayers; i++)
if(get_user_team(i) == 1)
{
if(g_iXPl[players[i]] + XPtoGive < 0)
g_iXPl[players[i]] = 0
else
g_iXPl[players[i]] += XPtoGive
}
format(TargetName, charsmax(TargetName), "Terrorists")
}
}
else
{
new iTarget = cmd_target(index, arg, 3)
get_user_name (iTarget, TargetName, charsmax (TargetName))
if(iTarget)
{
if(g_iXPl[players[iTarget]] + XPtoGive < 0)
g_iXPl[players[iTarget]] = 0
else
g_iXPl[iTarget] += XPtoGive
}
}
CC_SendMatched(0, CC_COLOR_RED, "^4[%s] ^3%s^1 gave^3 %i XP^1 to ^3%s^1!", getPrefix(), AdminName, XPtoGive, TargetName)
for(new i = 1; i < 33; i++)
CheckLevel(i)
return PLUGIN_HANDLED
}
public avoid_duplicated(msgId, msgDest, receiver)
{
return PLUGIN_HANDLED
}
public hook_say(id)
{
if(!is_user_connected(id)) {
return PLUGIN_HANDLED_MAIN
}
new szArgs[192]
read_args(szArgs, 191)
remove_quotes(szArgs)
for(new i = 0; i < sizeof(szBadStarts); i++)
{
if(equal(szArgs[0], szBadStarts[i]))
{
return PLUGIN_HANDLED_MAIN
}
}
new iPlayers[ 32 ], iNum
get_players(iPlayers, iNum)
new PlayerFlags[32]
get_flags(get_user_flags(id), PlayerFlags, charsmax(PlayerFlags))
new szMsg[100]
if(is_user_admin(id))
{
for(new i = 0; i < sizeof(szFlags); i++)
if(containi(PlayerFlags, szFlags[i]) != -1)
{
format(g_szPrefix[id], charsmax(g_szPrefix), szTag[i])
format(szMsg, charsmax(szMsg), SayMsgAdmin)
break;
}
}
else
format(szMsg, charsmax(szMsg), SayMsg)
szMsg = ReplaceMsg(id, szMsg, szArgs)
replace_all(szMsg, charsmax(szMsg), " ", "")
if(equal(szArgs, "") || equal(szArgs, " ") || equal(szArgs, " "))
return PLUGIN_HANDLED_MAIN
new JFlags[32], AdmFlags[2]
get_flags(get_user_flags(id), JFlags, charsmax(JFlags))
get_pcvar_string(Cvar_AdmListenFlag, AdmFlags, charsmax(AdmFlags))
for(new j = 1; j <= iNum; j++)
{
if(is_user_alive(id) == is_user_alive(j) && get_pcvar_num(Cvar_AdmListen) != 1)
CC_SendMatched(j, id, "%s", szMsg)
else if(is_user_alive(id) == is_user_alive(j) && containi(JFlags, AdmFlags) != -1 && get_pcvar_num(Cvar_AdmListen) == 1)
CC_SendMatched(j, id, "%s", szMsg)
}
return PLUGIN_HANDLED_MAIN
}
public hook_teamsay(id) {
if(!is_user_connected(id)) {
return PLUGIN_HANDLED_MAIN
}
new szArgs[192]
read_args(szArgs, 191)
remove_quotes(szArgs)
for(new i = 0; i < sizeof(szBadStarts); i++)
{
if(equal(szArgs[0], szBadStarts[i]))
{
return PLUGIN_HANDLED_MAIN
}
}
new iPlayers[32], iNum
get_players(iPlayers, iNum)
new PlayerFlags[32]
get_flags(get_user_flags(id), PlayerFlags, charsmax(PlayerFlags))
new szMsg[100]
if(is_user_admin(id))
{
for(new i = 0; i < sizeof(szFlags); i++)
if(containi(PlayerFlags, szFlags[i]) != -1)
{
format(g_szPrefix[id], charsmax(g_szPrefix), szTag[i])
format(szMsg, charsmax(szMsg), SayTeamMsgAdmin)
break;
}
}
else
format(szMsg, charsmax(szMsg), SayTeamMsg)
szMsg = ReplaceMsg(id, szMsg, szArgs)
replace_all(szMsg, charsmax(szMsg), " ", "")
if(equal(szArgs, "") || equal(szArgs, " ") || equal(szArgs, " "))
return PLUGIN_HANDLED_MAIN
new JFlags[32], AdmFlags[2]
get_flags(get_user_flags(id), JFlags, charsmax(JFlags))
get_pcvar_string(Cvar_AdmListenFlag, AdmFlags, charsmax(AdmFlags))
for(new j = 1; j <= iNum; j++)
{
if(get_user_team(id) == get_user_team(j) && get_pcvar_num(Cvar_AdmListen) != 1)
CC_SendMatched(j, id, "%s", szMsg)
else if(get_user_team(id) == get_user_team(j) && containi(JFlags, AdmFlags) != -1 && get_pcvar_num(Cvar_AdmListen) == 1)
CC_SendMatched(j, id, "%s", szMsg)
}
return PLUGIN_HANDLED_MAIN
}
public Save(id)
{
new name[32];
get_user_name(id,name,31);
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s", name);
format(vaultdata,255,"%i#%i#",g_iXPl[id],g_iLevel[id]);
fvault_set_data(g_vault_name,vaultkey,vaultdata);
return PLUGIN_CONTINUE;
}
public Load(id)
{
new name[32];
get_user_name(id,name,31);
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",name);
format(vaultdata,255,"%i#%i#",g_iXPl[id],g_iLevel[id]);
fvault_get_data(g_vault_name,vaultkey,vaultdata,charsmax(vaultdata));
replace_all(vaultdata, 255, "#", " ");
new playerxp[32], playerlevel[32];
parse(vaultdata, playerxp, 31, playerlevel, 31);
g_iXPl[id] = str_to_num(playerxp);
g_iLevel[id] = str_to_num(playerlevel);
return PLUGIN_CONTINUE;
}
public ReplaceMsg(id, szMsg[100], szArgs[192])
{
new szName[33]
get_user_name(id, szName, charsmax(szName))
format(g_iPlayerLevel, charsmax(g_iPlayerLevel), "%i", g_iLevel[id]+1)
format(g_iMaxLevel, charsmax(g_iMaxLevel), "%i", MaxLevels)
if(!is_user_alive(id))
replace_all(szMsg, charsmax(szMsg), "&dead&", szDead[get_user_team(id)])
else
replace_all(szMsg, charsmax(szMsg), "&dead&", "")
replace_all(szMsg, charsmax(szMsg), "&rank&", Prefix[g_iLevel[id]])
if(is_user_admin(id))
replace_all(szMsg, charsmax(szMsg), "&prefix&", g_szPrefix[id])
else
replace_all(szMsg, charsmax(szMsg), "&prefix&", "")
replace_all(szMsg, charsmax(szMsg), "&name&", szName)
replace_all(szMsg, charsmax(szMsg), "&message&", szArgs)
replace_all(szMsg, charsmax(szMsg), "&team&", szTeams[get_user_team(id)])
replace_all(szMsg, charsmax(szMsg), "&nextrank&", Prefix[g_iLevel[id]+1])
replace_all(szMsg, charsmax(szMsg), "&exp&", g_iXPl[id])
replace_all(szMsg, charsmax(szMsg), "&needexp&", Levels[g_iLevel[id]+1])
replace_all(szMsg, charsmax(szMsg), "&level&", g_iPlayerLevel)
replace_all(szMsg, charsmax(szMsg), "&maxlevel&", g_iMaxLevel)
return szMsg
}
public changeTeamInfo(player, team[])
{
message_begin(MSG_ONE, teamInfo, _, player)
write_byte(player)
write_string(team)
message_end()
}