- Код: Выделить всё
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < engine >
#include < colorchat >
#include < hamsandwich >
#include < fun >
#include < nvault >
#define MAXRANKS 32
#define PLUGIN "BP Admin prefix with ranks"
#define VERSION "1.0"
#define AUTHOR "V e n { } m"
//ПРОМЕНЛРР’Р
new PlayerRank[33], message[192]
new sayText, teamInfo, maxPlayers, g_AdminListen, g_AdminListenFlag,g_MsgHud, gVault
new strName[191], strText[191], alive[11], temp_cvar[2], g_name[32]
new gPlayerPoints[33], give[33],iTarget[33]
new const g_szTag[][] = {
"",
"MC Owner",
"Server Admin",
"Beauty One",
"V.I.P",
"Super V.I.P",
"Dpmator",
"Test Admin",
"SMS Admin",
"BOOSTER"
}
new const rankNames[MAXRANKS][] =
{
"•^3Maina User^4•",
"•^3Noob^4•",
"•^3Bot^4•",
"•^3BEginner^4•",
"•^3Learning^4•",
"•^3Medium^4•",
"•^3Pro^4•",
"•^3Ultra Killer^4•",
"•^3Mega Killer^4•",
"•^3Super Killer^4•",
"•^3Unique Killer^4•",
"•^3Ultimate Killer^4•",
"•^3Silver Player^4•",
"•^3Bronze Player^4•",
"•^3Gold Player^4•",
"•^3Terminator^4•",
"•^3Unstippable^4•",
"•^3Night Killer^4•",
"•^3Assassin^4•",
"•^3Ninja^4•",
"•^3Black Ninja^4•",
"•^3White Ninja^4•",
"•^3Sensei^4•",
"•^3Freak^4•",
"•^3Demonic^4•",
"•^3Super Duper^4•",
"•^3Untouchable^4•",
"•^3I got ballzz^4•",
"•^3Fantastic^4•",
"•^3Bombastic^4•",
"•^3One and Only^4•",
"•GOD•"
};
new const rankXP[MAXRANKS] =
{
0, 25, 50, 100, 150, 200, 350, 500, 700, 850, 1100, 1400, 1800, 2400, 3000, 3500, 4300, 5200, 5800, 6500, 7300, 8000, 9600, 10500, 12000, 13800, 15000, 17200, 20000, 21500, 24000, 26000
};
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_AdminListen = register_cvar("amx_listen", "1")
g_AdminListenFlag = register_cvar("amx_listen_flag", "c")
register_clcmd("say", "hook_say")
register_clcmd("say_team", "hook_teamsay")
register_clcmd("say /myrank", "cmdJumpRank")
register_clcmd("say_team /myrank", "cmdJumpRank")
register_clcmd("say /xp", "cmdCheckLevel")
register_clcmd("say_team /checkrank", "cmdCheckLevel")
register_clcmd("say /givexp", "cmdRankMenu", ADMIN_RCON)
register_clcmd("say_team /givexp", "cmdRankMenu", ADMIN_RCON)
register_concmd("Points_Amount", "cmdTyped", ADMIN_RCON);
sayText = get_user_msgid("SayText")
teamInfo = get_user_msgid("TeamInfo")
maxPlayers = get_maxplayers()
g_MsgHud = CreateHudSyncObj()
register_message(sayText, "avoid_duplicated")
register_event("DeathMsg", "Hook_Deathmessage", "a");
RegisterHam(Ham_Spawn, "player", "player_spawn", 1);
set_task(1.0, "taskHud", 0, _, _, "b")
gVault = nvault_open( "PlayerRanks" );
}
public player_spawn(id)
{
if(!is_user_alive(id) ) return;
new bonus = (PlayerRank[ id ] > 30) ? 30 + (PlayerRank[ id ] - 30) * 5 : PlayerRank[ id ];
set_user_health( id, get_user_health( id ) + bonus );
switch( PlayerRank[ id ] )
{
case 1: set_user_health(id, get_user_health( id ) + 1 );
case 2: set_user_health( id, get_user_health( id ) + 2 );
case 3: set_user_health( id, get_user_health( id ) + 3 );
case 4: set_user_health( id, get_user_health( id ) + 4 );
case 5: set_user_health( id, get_user_health( id ) + 5 );
case 6: set_user_health( id, get_user_health( id ) + 6 );
case 7: set_user_health( id, get_user_health( id ) + 7 );
case 8: set_user_health( id, get_user_health( id ) + 8 );
case 9: set_user_health( id, get_user_health( id ) + 9 );
case 10: set_user_health( id, get_user_health( id ) + 10 );
case 11: set_user_health( id, get_user_health( id ) + 11 );
case 12: set_user_health( id, get_user_health( id ) + 12 );
case 13: set_user_health( id, get_user_health( id ) + 13 );
case 14: set_user_health( id, get_user_health( id ) + 14 );
case 15: set_user_health( id, get_user_health( id ) + 15 );
case 16: set_user_health( id, get_user_health( id ) + 16 );
case 17: set_user_health( id, get_user_health( id ) + 17 );
case 18: set_user_health( id, get_user_health( id ) + 18 );
case 19: set_user_health( id, get_user_health( id ) + 19 );
case 20: set_user_health( id, get_user_health( id ) + 20 );
case 21: set_user_health( id, get_user_health( id ) + 21 );
case 22: set_user_health( id, get_user_health( id ) + 22 );
case 23: set_user_health( id, get_user_health( id ) + 23 );
case 24: set_user_health( id, get_user_health( id ) + 24 );
case 25: set_user_health( id, get_user_health( id ) + 25 );
case 26: set_user_health( id, get_user_health( id ) + 26 );
case 27: set_user_health( id, get_user_health( id ) + 27 );
case 28: set_user_health( id, get_user_health( id ) + 28 );
case 29: set_user_health( id, get_user_health( id ) + 29 );
case 30: set_user_health( id, get_user_health( id ) + 30 );
case 31: set_user_health( id, get_user_health( id ) + 35 );
case 32: set_user_health( id, get_user_health( id ) + 40 );
}
}
public cmdCheckLevel(id)
{
new iMenu = menu_create("\rMaina City \d- \wChoose Player\r:", "checklevel_menu_handler")
new iPlayers[32], iNum, iTarget;
new UserName[34], szTempID[10];
get_players(iPlayers, iNum);
for(new i; i < iNum; i++)
{
iTarget = iPlayers[i];
if(!is_user_connected(iTarget))
continue;
get_user_name(iTarget, UserName, sizeof UserName - 1);
num_to_str(iTarget, szTempID, charsmax(szTempID));
menu_additem(iMenu, UserName, szTempID);
}
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0);
}
public checklevel_menu_handler(id, iMenu, Item)
{
if(Item == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
new iData[6], iName[64];
new access, callback;
menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
new target = str_to_num(iData);
if(!is_user_connected(target))
{
ColorChat(id, GREEN, "^4[^3Maina City^4]^3 The player you chose is not in the server.")
menu_destroy(iMenu);
cmdCheckLevel(id);
return PLUGIN_HANDLED;
}
menu_destroy(iMenu);
new szText[256], player_name[32];
get_user_name(target, player_name, 31);
if(MAXRANKS == PlayerRank[target]+1)
formatex(szText, charsmax(szText), "<html><head></head><body><br/>Name: %s<br/>Kills: %d<br/>Level: %d/%d<br/>Rank: %s<br/></body></html>", player_name, gPlayerPoints[target], PlayerRank[target]+1, MAXRANKS, rankNames[PlayerRank[target]]);
else
formatex(szText, charsmax(szText), "<html><head></head><body><br/>Name: %s<br/>Kills: %d/%d<br/>Level: %d/%d<br/>Rank: %s<br/>Next Rank: %s</body></html>", player_name, gPlayerPoints[target], rankXP[PlayerRank[target]+1], PlayerRank[target]+1, MAXRANKS, rankNames[PlayerRank[target]], rankNames[PlayerRank[target]+1]);
show_motd(id, szText, "Maina City Rank System");
cmdCheckLevel(id);
return PLUGIN_HANDLED;
}
public taskHud()
{
new iPlayers[32], iNum, iTarget;
get_players(iPlayers, iNum);
for(new i; i < iNum; i++)
{
iTarget = iPlayers[i];
if(!is_user_connected(iTarget))
continue;
set_hudmessage(255, 0, 0, 0.70, 0.94, 1, 6.0, 12.0)
if(MAXRANKS == PlayerRank[iTarget]+1)
ShowSyncHudMsg(iTarget, g_MsgHud, "LvL: %d of %d Rank : %s Kills : %d ^n",PlayerRank[iTarget]+1, MAXRANKS, rankNames[PlayerRank[iTarget]], gPlayerPoints[iTarget])
else
ShowSyncHudMsg(iTarget, g_MsgHud, "LvL: %d of %d Rank : %s Kills : %d of %d",PlayerRank[iTarget]+1, MAXRANKS, rankNames[PlayerRank[iTarget]], gPlayerPoints[iTarget], rankXP[PlayerRank[iTarget]+1])
}
}
public cmdJumpRank(id)
{
if(MAXRANKS == PlayerRank[id]+1)
ColorChat(id, RED, "^4[^3Maina City^4]^3 Your level is ^x04#%d ^x01| Rank ^x04%s ^x01| Kills:^x03 %d", PlayerRank[id]+1, rankNames[PlayerRank[id]], gPlayerPoints[id])
else
ColorChat(id, RED, "^4[^3Maina City^4]^3 Your level is ^x04#%d ^x01| Rank ^x04%s ^x01| Kills:^x03 %d^x01 /^x04 %d^x01 to become^x04 %s^x01.", PlayerRank[id]+1, rankNames[PlayerRank[id]], gPlayerPoints[id], rankXP[PlayerRank[id]+1], rankNames[PlayerRank[id]+1])
}
public cmdRankMenu(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
new iMenu = menu_create("Rank Menu", "rankmenu_menu_handler")
menu_additem(iMenu, "Give Points", "1");
menu_additem(iMenu, "Take Points", "2");
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0);
return PLUGIN_CONTINUE;
}
public rankmenu_menu_handler(id, iMenu, Item)
{
if(Item == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
new iData[6], iName[64];
new access, callback;
menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
give[id] = str_to_num(iData);
GiveTakeMenu(id);
return PLUGIN_HANDLED;
}
public GiveTakeMenu(id)
{
static szText[64]
formatex(szText, 63, "%s Points", give[id] == 1 ? "Give" : "Take")
new iMenu = menu_create(szText, "givetake_menu_handler")
new iPlayers[32], iNum, iTarget;
new UserName[34], szTempID[10];
get_players(iPlayers, iNum);
for(new i; i < iNum; i++)
{
iTarget = iPlayers[i];
if(!is_user_connected(iTarget))
continue;
get_user_name(iTarget, UserName, sizeof UserName - 1);
num_to_str(iTarget, szTempID, charsmax(szTempID));
menu_additem(iMenu, UserName, szTempID);
}
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0);
}
public givetake_menu_handler(id, iMenu, Item)
{
if(Item == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
new iData[6], iName[64];
new access, callback;
menu_item_getinfo(iMenu, Item, access, iData, charsmax(iData), iName, charsmax(iName), callback);
iTarget[id] = str_to_num(iData);
if(!is_user_connected(iTarget[id]))
{
iTarget[id] = 0
ColorChat(id, GREEN, "^4[^3Maina City^4]^3 The player you chose is not in the server.")
return PLUGIN_HANDLED;
}
menu_destroy(iMenu);
client_cmd(id, "messagemode Points_Amount");
return PLUGIN_HANDLED;
}
public cmdTyped(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
if(!iTarget[id] || give[id] <= 0)
return PLUGIN_HANDLED;
if(!is_user_connected(iTarget[id]))
{
ColorChat(id, RED, "^4[^3Maina City^4]^3 The player you chose is not in the server.")
return PLUGIN_HANDLED;
}
new iTyped[12];
read_argv(1, iTyped, sizeof iTyped - 1);
new g_points = str_to_num(iTyped)
new AdminName[32], PlayerName[32];
get_user_name(id, AdminName, 31)
get_user_name(iTarget[id], PlayerName, 31)
if(give[id] == 1)
{
gPlayerPoints[iTarget[id]] += g_points
ColorChat(0, GREEN,"^4[^3Maina City^4]^3 %s^x01 gave^x04 %d^x01 rank points to^x03 %s^x01.", AdminName, g_points, PlayerName)
}
else
{
if(g_points > gPlayerPoints[iTarget[id]])
gPlayerPoints[iTarget[id]] = 0
else
gPlayerPoints[iTarget[id]] -= g_points;
ColorChat(0, GREEN,"^4[^3Maina City^4]^3 took^x04 %d^x01 rank points from^x03 %s^x01.", AdminName, g_points, PlayerName)
}
new currentPlayerRank = 0;
while(currentPlayerRank < (MAXRANKS - 1))
{
if(gPlayerPoints[iTarget[id]] >= rankXP[currentPlayerRank + 1])
++currentPlayerRank;
else
break;
}
PlayerRank[iTarget[id]] = currentPlayerRank;
iTarget[id] = 0;
GiveTakeMenu(id);
Save( id );
return PLUGIN_HANDLED;
}
public client_authorized( id )
{
Load( id );
}
public client_disconnect( id )
{
Save( id );
}
public client_putinserver(id)
{
new currentPlayerRank = 0;
while(currentPlayerRank < (MAXRANKS - 1))
{
if(gPlayerPoints[id] >= rankXP[currentPlayerRank + 1])
++currentPlayerRank;
else
break;
}
PlayerRank[id] = currentPlayerRank;
}
public Load( id )
{
if( !is_user_bot( id ) && !is_user_hltv( id ) )
{
new vaultkey[ 64 ], vaultdata[ 256 ], points[ 33 ], UserName[ 33 ];
get_user_name( id, UserName, charsmax( UserName ) );
format( vaultkey, charsmax( vaultkey ), "%s", UserName );
format( vaultdata, charsmax( vaultdata ), "%i#", gPlayerPoints[ id ] );
nvault_get( gVault, vaultkey, vaultdata, 255 );
replace_all( vaultdata, 255, "#", " " );
parse( vaultdata, points, 32 );
gPlayerPoints[ id ] = str_to_num( points );
}
}
public Save( id )
{
if( !is_user_bot( id ) && !is_user_hltv( id ) )
{
new vaultkey[ 64 ], vaultdata[ 256 ], UserName[ 33 ];
get_user_name( id, UserName, charsmax( UserName ) );
format( vaultkey, charsmax( vaultkey ), "%s", UserName );
format( vaultdata, charsmax( vaultdata ), "%i#", gPlayerPoints[ id ] );
nvault_set( gVault, vaultkey, vaultdata );
}
}
public avoid_duplicated(msgId, msgDest, receiver)
return PLUGIN_HANDLED;
public hook_say(id)
{
read_args(message, 191)
remove_quotes(message)
if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, ""))
return PLUGIN_CONTINUE
get_user_name(id, g_name, charsmax(g_name))
new isAlive
new admin = 0, iFlags = get_user_flags(id)
if(iFlags & ADMIN_LEVEL_B) admin = 1 //owner
else if(iFlags & ADMIN_LEVEL_C) admin = 2 //administrator
else if(iFlags & ADMIN_LEVEL_D) admin = 3 //global
else if(iFlags& ADMIN_LEVEL_G) admin=4 //otgowornik
else if(iFlags& ADMIN_LEVEL_H) admin=5 //ekip banove
else if(iFlags & ADMIN_BAN) admin = 6 //admin
else if(iFlags & ADMIN_LEVEL_F) admin = 7 //test
else if(iFlags & ADMIN_LEVEL_E) admin = 8 //vip
else if(iFlags & ADMIN_CHAT) admin = 9 //sms admin
if(is_user_alive(id))
{
isAlive = 1
alive = "^x01"
}
else
{
isAlive = 0
alive = "^x01*DEAD* "
}
static color[10]
if(admin)
{
get_user_team(id, color, 9)
format(strName, 191, "%s^x01[^x04%s^x01] ^x03%s ", alive, g_szTag[admin], g_name)
format(strText, 191, "^x01%s", message)
}
else
{
get_user_name(id, g_name, 32)
get_user_team(id, color, 9)
format(strName, 191, "%s^x04%s ^x03%s", alive, rankNames[PlayerRank[id]], g_name)
format(strText, 191, "%s", message)
}
format(message, 191, "%s ^x01: %s", strName, strText)
sendMessage(color, isAlive)// Sends the colored message
return PLUGIN_CONTINUE;
}
public hook_teamsay(id)
{
read_args(message, 191)
remove_quotes(message)
if(message[0] == '@' || message[0] == '/' || message[0] == '!' || message[0] == '#' || message[0] == '$' || equal(message, "")) // Ignores Admin Hud Messages, Admin Slash commands
return PLUGIN_CONTINUE
new playerTeam = get_user_team(id)
new playerTeamName[19]
switch(playerTeam) // Team names which appear on team-only messages
{
case 1: copy(playerTeamName, 11, "Terrorists")
case 2: copy(playerTeamName, 18, "Counter-Terrorists")
default: copy(playerTeamName, 9, "Spectator")
}
get_user_name(id, g_name, charsmax(g_name))
new isAlive
new admin = 0, iFlags = get_user_flags(id)
if(iFlags & ADMIN_LEVEL_B) admin = 1 //owner
else if(iFlags & ADMIN_LEVEL_C) admin = 2 //administrator
else if(iFlags & ADMIN_LEVEL_D) admin = 3 //global
else if(iFlags& ADMIN_LEVEL_G) admin=4 //otgowornik
else if(iFlags& ADMIN_LEVEL_H) admin=5 //ekip banove
else if(iFlags & ADMIN_BAN) admin = 6 //admin
else if(iFlags & ADMIN_LEVEL_F) admin = 7 //test
else if(iFlags & ADMIN_LEVEL_E) admin = 8 //vip
else if(iFlags & ADMIN_CHAT) admin = 9 //sms admin
if(is_user_alive(id))
{
isAlive = 1
alive = "^x01"
}
else
{
isAlive = 0
alive = "^x01*DEAD* "
}
static color[10]
if(admin)
{
get_user_team(id, color, 9)
format(strName, 191, "%s(%s) ^x01[^x04%s^x01] ^x03%s ", alive, playerTeamName, g_szTag[admin], g_name)
format(strText, 191, "^x01%s", message)
}
else
{
get_user_name(id, g_name, 32)
get_user_team(id, color, 9);
format(strName, 191, "%s(%s) ^x04%s ^x03%s", alive, playerTeamName, rankNames[PlayerRank[id]], g_name)
format(strText, 191, "%s", message)
}
format(message, 191, "%s ^x01: %s", strName, strText)
sendTeamMessage(color, isAlive, playerTeam)
return PLUGIN_CONTINUE
}
public sendMessage(color[], alive)
{
new teamName[10]
for(new player = 1; player < maxPlayers; player++)
{
if(!is_user_connected(player))
continue
get_pcvar_string(g_AdminListenFlag, temp_cvar, charsmax(temp_cvar))
if(alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(temp_cvar))
{
get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
changeTeamInfo(player, color)// Changes user's team according to color choosen
writeMessage(player, message)// Writes the message on player's chat
changeTeamInfo(player, teamName)// Changes user's team back to original
}
}
}
public sendTeamMessage(color[], alive, playerTeam)
{
new teamName[10]
for(new player = 1; player < maxPlayers; player++)
{
if(!is_user_connected(player))
continue
get_pcvar_string(g_AdminListenFlag, temp_cvar, charsmax(temp_cvar))
if(get_user_team(player) == playerTeam || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(temp_cvar))
{
if(alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & read_flags(temp_cvar))
{
get_user_team(player, teamName, 9)// Stores user's team name to change back after sending the message
changeTeamInfo(player, color)// Changes user's team according to color choosen
writeMessage(player, message)// Writes the message on player's chat
changeTeamInfo(player, teamName)// Changes user's team back to original
}
}
}
}
public changeTeamInfo(player, team[])
{
message_begin(MSG_ONE, teamInfo, _, player)// Tells to to modify teamInfo(Which is responsable for which time player is)
write_byte(player)// Write byte needed
write_string(team)// Changes player's team
message_end()// Also Needed
}
public writeMessage(player, message[])
{
message_begin(MSG_ONE, sayText, {0, 0, 0}, player)// Tells to modify sayText(Which is responsable for writing colored messages)
write_byte(player)// Write byte needed
write_string(message)// Effectively write the message, finally, afterall
message_end()// Needed as always
}
public Hook_Deathmessage()
{
new killer = read_data(1);
new victim = read_data(2);
if(killer == victim)
return PLUGIN_CONTINUE;
if(!killer || killer > maxPlayers)
return PLUGIN_CONTINUE;
gPlayerPoints[killer]++
new currentPlayerRank = 0;
while(currentPlayerRank < (MAXRANKS - 1))
{
if(gPlayerPoints[killer] >= rankXP[currentPlayerRank + 1])
++currentPlayerRank;
else
break;
}
new OldRank = PlayerRank[killer]
PlayerRank[killer] = currentPlayerRank
Save( killer );
if(OldRank < currentPlayerRank)
{
new g_name[32]
get_user_name(killer, g_name, 31)
ColorChat(0, GREEN, "^4[^3Maina City^4]^3 Congratulations! ^x03%s^x01 got a new rank ^x04%s", g_name, rankNames[PlayerRank[killer]])
}
return PLUGIN_CONTINUE;
}
i want to add more XP when you make normal kill and headshot and to be only for VIP Users. like > normal kill 2 XP, headshot 3XP
here is the second code that have this feature
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fvault>
#include <fun>
#include <colorchat>
#define IsPlayer(%1) (1 <= %1 <= g_players)
#define TOTALLEVELS 18
new const g_vault_name[] = "levels_by_name"; //kak se kazva faila, koito e kato localno db (zapazva prefixite)
new const g_team_names[CsTeams][] =
{
"(Spectator) ",
"(Terrorist) ",
"(Counter-Terrorist) ",
"(Spectator) "
};
new xp
new cvar_hp
new cvar_hp2
new const Levels[TOTALLEVELS] =
{
0,
50,
100,
200,
300,
500,
750,
1000,
1250,
1500,
1750,
2000,
3500,
4500,
6500,
7500,
11000,
18000
}
new const LevelNames[TOTALLEVELS][] =
{
"[NEW]",
"[NewBie]",
"[Advanced]",
"[Learning]",
"[Kniffer]",
"[Killer]",
"[Danger Killer]",
"[Multi Killer]",
"[Super Killer]",
"[Pro Killer]",
"[SuperNova]",
"[Ultimate]",
"[OneAndOnly]",
"[Terminator]",
"[CrushFactor]",
"[GENESIS]",
"[Amazing Shooting]",
"[The Best Killer]"
}
// admin prefixes
new const g_szTag[][] = {
"", //NEEEE IZTRIVAI!
"[Owner]",
"[SuperAdmin]",
"[Admin]",
"[Vip]"
}
new const g_iTagFlag[sizeof(g_szTag)] = {
ADMIN_ALL, //NEEEE IZTRIVAI!
ADMIN_RCON,
ADMIN_IMMUNITY,
ADMIN_BAN,
ADMIN_LEVEL_H
}
//end
new gXP[33], gLevel[33];
new points_kill, points_hs;
new g_players;
new g_msgid_SayText;
new g_msgsync
public plugin_init()
{
register_plugin("Ranks with XP", "Dedihost/val4o0o0", "2.3");
register_event("DeathMsg", "eDeath", "a");
register_clcmd("say /xpmenu","setmenu1");
points_kill = register_cvar("dr_rank_kill", "1"); //kolko xp da dava pri kill (normalen)
points_hs = register_cvar("dr_rank_hs","2"); //kolko xp da dava pri hs
cvar_hp = register_cvar("dr_rank_hp_enable","1"); //da dava li hp pri ubiistvo
cvar_hp2 = register_cvar("dr_rank_hp_value","25"); //kolko hp da dava pri ubiistvo
fvault_load(g_vault_name);
g_players = get_maxplayers();
g_msgid_SayText = get_user_msgid("SayText");
register_clcmd ("say", "hook_say")
register_clcmd ("say_team", "hook_teamsay")
register_clcmd ("amx_give_xp", "addpts", ADMIN_BAN, "<user> <xp>")
g_msgsync = CreateHudSyncObj();
}
public eDeath(id)
{
new killer = read_data(1);
new victim = read_data(2);
new gpoints_kill = get_pcvar_num(points_kill);
new gpoints_hs = get_pcvar_num(points_hs);
if( IsPlayer(killer) && is_user_connected(killer) )
{
if( victim != killer )
{
if( cs_get_user_team(victim) != cs_get_user_team(killer) )
{
if( is_user_alive(killer) )
{
if(get_pcvar_num(cvar_hp) == 1) {
set_user_health(killer,get_user_health(killer)+get_pcvar_num(cvar_hp2));
}
if(!read_data(3))
{
gXP[killer] += gpoints_kill
//ColorChat(killer, GREY,"*^x4[^3Ranks^4]^3 You Gained %d XP!", gpoints_kill);
}
else if(read_data(3))
{
gXP[killer] += (gpoints_hs);
// ColorChat(killer, GREY,"*^x4[^3Ranks^4]^3 You Gained %d XP!", gpoints_hs);
}
CheckLevel(killer);
SaveData(killer);
}
}
}
}
return PLUGIN_HANDLED;
}
public CheckLevel(id)
{
if( gXP[id] >= Levels[gLevel[id]] )
{
gLevel[id]++;
new szName[33];
get_user_name(id, szName, charsmax(szName));
ColorChat(id, GREY,"*^x4[^3Ranks^4]^3 Congratulations You are [Level: %i/%i] with Title %s!", gLevel[id], TOTALLEVELS, LevelNames[gLevel[id]-1]);
}
}
public CmdShowHud (id)
{
if (is_user_connected(id) && gXP[id]>=0) {
set_hudmessage(random_num(70,255), random_num(70,255), 0, 0.34, 0.03, 0, 6.0,4.0, 0.1, 0.2, 2)
ShowSyncHudMsg(id, g_msgsync, "*[Ranks]Level: %i/%i | RankName: %s | XP: %i", gLevel[id], TOTALLEVELS , LevelNames[gLevel[id]-1], gXP[id] )
}
}
public client_connect(id)
{
LoadData(id);
if(gXP[id] == 0 && gLevel[id] == 0) {
gLevel[id] = 1;
gXP[id] = 0
}
if( gXP[id] > 0 && gLevel[id] == 0){
gLevel[id] = 1;
}
}
public client_disconnect(id)
{
SaveData(id);
gXP[id] = 0;
gLevel[id] = 0;
}
public client_putinserver(id) set_task(1.0,"CmdShowHud",id,_,_,"b")
public SaveData(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#",gXP[id],gLevel[id]);
fvault_set_data(g_vault_name,vaultkey,vaultdata);
return PLUGIN_CONTINUE;
}
public LoadData(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#",gXP[id],gLevel[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);
gXP[id] = str_to_num(playerxp);
gLevel[id] = str_to_num(playerlevel);
return PLUGIN_CONTINUE;
}
public addpts(id, level, cid) {
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new arg11[32],arg22[32],name[32]
read_argv(1, arg11, 31)
read_argv(2, arg22, 31)
new arg23 = str_to_num(arg22)
new player = cmd_target(id, arg11, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF)
get_user_name(player, name, 31)
if (!player || is_user_bot(player))
return PLUGIN_HANDLED
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",name);
format(vaultdata,255,"%i",gXP[player]);
fvault_get_data(g_vault_name, vaultkey,vaultdata,charsmax(vaultdata))
new data[255];
formatex(data, charsmax(data), "%i", str_to_num(vaultdata) + arg23);
fvault_set_data(g_vault_name, name, data)
gXP[player] = str_to_num(data)
client_print(id, print_console, "Successfuly added xp to %s",name)
return PLUGIN_HANDLED
}
public hook_say(client)
{
new said[192];
read_args(said, sizeof(said) - 1);
remove_quotes(said);
new name[32];
get_user_name(client, name, sizeof(name) - 1);
new alive = is_user_alive(client);
new tag[9];
if( cs_get_user_team(client) == CS_TEAM_SPECTATOR )
{
copy(tag, sizeof(tag) - 1, "*SPEC* ");
}
else if( !alive )
{
copy(tag, sizeof(tag) - 1, "*DEAD* ");
}
if(gXP[client]>=0) {
new admin = get_tag_index(client)
new message[192];
formatex(message, sizeof(message) - 1, "^x01%s^x04%s^x04 %s^x03 %s^x01 : %s", tag, g_szTag[admin], LevelNames[gLevel[client]-1], name, said);
if (contain(message, "@") != -1) {
return PLUGIN_HANDLED
}
for( new i = 1; i <= g_players; i++ )
{
if(!is_user_connected(i) || is_user_alive(i) != alive ) continue
message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, i);
write_byte(client);
write_string(message);
message_end();
}
}
return PLUGIN_HANDLED_MAIN
}
public hook_teamsay(client)
{
new said[192];
read_args(said, sizeof(said) - 1);
remove_quotes(said);
new name[32];
get_user_name(client, name, sizeof(name) - 1);
new alive = is_user_alive(client);
new CsTeams:team = cs_get_user_team(client);
if(gXP[client]>=0) {
new admin = get_tag_index(client)
new message[192];
formatex(message, sizeof(message) - 1, "^x01%s^x04%s^x04 %s^x03 %s^x01 : %s", g_team_names[team],g_szTag[admin], LevelNames[gLevel[client]-1],name, said);
if (contain(message, "@") != -1) {
return PLUGIN_HANDLED
}
for( new i = 1; i <= g_players; i++ )
{
if(!is_user_connected(i) || is_user_alive(i) != alive || get_user_team(i) != get_user_team(client)) continue
message_begin(MSG_ONE_UNRELIABLE, g_msgid_SayText, _, i);
write_byte(client);
write_string(message);
message_end();
}
}
return PLUGIN_HANDLED_MAIN
}
public setmenu1( id ) {
if(get_user_flags(id) & ADMIN_RCON) {
new menu = menu_create( "\rChoose XP to Given!:", "menu_handler2" );
menu_additem( menu, "\w15 XP", "", 0 );
menu_additem( menu, "\w20 XP", "", 0 );
menu_additem( menu, "\w100 XP", "", 0 );
menu_additem( menu, "\w500 XP", "", 0 );
menu_additem( menu, "\w1000 XP", "", 0 );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu, 0 );
} else {
ColorChat(id,GREEN,"Nqmash nujnite prava za dostup!");
}
}
public menu_handler2( id, menu, item )
{
if ( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new szData[6], szName[64];
new item_access, item_callback;
menu_item_getinfo( menu, item, item_access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
switch( item )
{
case 0:
{
xp = 15;
}
case 1:
{
xp = 20
}
case 2:
{
xp = 100
}
case 3:
{
xp = 500
}
case 4:
{
xp = 1000
}
}
setmenu(id)
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public setmenu(id) {
new menu = menu_create( "\rXP Set Menu \y[PlayerRanks]:", "menu_handler" );
new players[32], pnum, tempid;
new szName[32], szUserId[32];
get_players( players, pnum, "c" );
for ( new i; i<pnum; i++ )
{
tempid = players[i];
if(!is_user_connected(tempid))
break;
get_user_name( tempid, szName, charsmax( szName ) );
formatex( szUserId, charsmax( szUserId ), "%d", get_user_userid( tempid ) );
menu_additem( menu, szName, szUserId, 0 );
}
menu_display( id, menu, 0 );
}
public menu_handler( id, menu, item )
{
if ( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new szData[6], szName[64];
new item_access, item_callback;
menu_item_getinfo( menu, item, item_access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
new userid = str_to_num( szData );
new player = find_player( "k", userid );
if ( player && is_user_alive( player ) )
{
new szname[32]
get_user_name(player,szname,charsmax(szname))
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",szname);
format(vaultdata,255,"%i",gXP[player]);
fvault_get_data(g_vault_name, vaultkey,vaultdata,charsmax(vaultdata))
new data[255];
formatex(data, charsmax(data), "%i", str_to_num(vaultdata) + xp);
fvault_set_data(g_vault_name, szname, data)
gXP[player] = gXP[player] + xp
SaveData(player)
ColorChat(id,GREEN,"Vie dobavihte %d XP na igrach %s, toi veche e s %d XP",xp,szname,gXP[player]);
}
setmenu(id)
menu_destroy( menu );
return PLUGIN_HANDLED;
}
//some useful to me :) stocks
get_tag_index(id)
{
new flags = get_user_flags(id)
for(new i = 1; i < sizeof(g_iTagFlag); i++)
{
if(check_admin_flag(flags, g_iTagFlag[i]))
{
return i
}
}
return 0
}
check_admin_flag(flags, flag)
{
if(flag == ADMIN_ADMIN)
{
return ((flags & ~ADMIN_USER) > 0)
}
else if(flag == ADMIN_ALL)
{
return 1
}
return (flags & flag)
}
i hope someone will help