PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#include <engine>
#include <nvault>
enum _:MAXCINOVI { CIN_Voj, CIN_Raz, CIN_Des, CIN_MlaV, CIN_Vod,
CIN_StaV, CIN_StaVI, CIN_Zas, CIN_ZasIK,
CIN_Potpor, CIN_Por, CIN_VIP, CIN_Kap, CIN_Maj,
CIN_Potpukovnik, CIN_Pukovnik, CIN_BrigG,
CIN_GenM, CIN_GenP, CIN_Gen, CIN_Mar, CIN_Admin}
new CinIgraca[33]
new const Cinovi[][]=
{
"Vojnik",//0
"Razvodnik",//1
"Desetar",//2
"Mladji Vodnik",//3
"Vodnik",//4
"Stariji Vodnik",//5
"Stariji Vodnik I Klase",//6
"Zastavnik",//7
"Zastavnik I Klase",//8
"Potporucnik",//9
"Porucnik",//10
"VIP",//11
"Kapetan",//12
"Major",//13
"Potpukovnik",//14
"Pukovnik",//15
"Brigadni General",//16
"General-Major",//17
"General-Potpukovnik",//18
"General",//19
"Marsal",//20
"Vrhovni Komandant"//21
}
new g_vault;
new SyncHudObj;
new iskustvo_igraca[33]
new nivo_igraca[33] = 1;
new maxlvl
new kill_iskustvo;
new levelRank[33];
public plugin_init()
{
register_plugin("Level Mod", "1.0", "AMD");
register_event("DeathMsg", "Death", "ade");
g_vault = nvault_open("xpmod");
SyncHudObj = CreateHudSyncObj();
register_clcmd("say /skill", "ShowStats")
register_clcmd("say /skill15", "levelTop15")
register_message(get_user_msgid("SayText"),"Message_SayText");
kill_iskustvo = register_cvar("amx_killxp", "1");
maxlvl = register_cvar("amx_maxlevel","100000")
}
public Message_SayText(msgId,msgDest,msgEnt)
{
new id = get_msg_arg_int(1);
if( is_user_connected(id) )
{
new szChannel[64];
get_msg_arg_string(2, szChannel, charsmax(szChannel));
if( equal(szChannel, "#Cstrike_Chat_All") )
{
if(!is_user_alive(id))
{
formatex(szChannel, charsmax(szChannel), "^1*DEAD*^4[%s]^3%%s1 ^1: %%s2",Cinovi[(CinIgraca[id])],CinIgraca[id]);
set_msg_arg_string(2, szChannel);
}
else
{
formatex(szChannel, charsmax(szChannel), "^4[%s]^3%%s1 ^1: %%s2",Cinovi[(CinIgraca[id])],CinIgraca[id]);
set_msg_arg_string(2, szChannel);
}
}
}
}
public client_connect(id)
{
PonistiInfo(id);
UcitajLevele(id);
set_task(3.0, "PokaziInfo", id+672);
}
public client_disconnect(id)
{
SacuvajLevele(id);
levelRank[id] = levelUcitajRank(id)
PonistiInfo(id);
remove_task(id+672);
}
public PonistiInfo(id)
{
nivo_igraca[id] = 0;
iskustvo_igraca[id] = 0;
}
public izracunajxp(level)
return level*3*10;
public PokaziInfo(id)
{
id -= 672;
set_task(0.1, "PokaziInfo", id+672);
switch(nivo_igraca[id])
{
case 0..4: CinIgraca[id] = CIN_Voj
case 5..10: CinIgraca[id] = CIN_Raz
case 11..16: CinIgraca[id] = CIN_Des
case 17..22: CinIgraca[id] = CIN_MlaV
case 23..28: CinIgraca[id] = CIN_Vod
case 29..34: CinIgraca[id] = CIN_StaV
case 35..40: CinIgraca[id] = CIN_StaVI
case 41..46: CinIgraca[id] = CIN_Zas
case 47..52: CinIgraca[id] = CIN_ZasIK
case 53..65: CinIgraca[id] = CIN_Potpor
case 66..76: CinIgraca[id] = CIN_Por
case 77..97: CinIgraca[id] = CIN_VIP
case 98..108: CinIgraca[id] = CIN_Kap
case 109..209: CinIgraca[id] = CIN_Maj
case 210..310: CinIgraca[id] = CIN_Potpukovnik
case 311..411: CinIgraca[id] = CIN_Pukovnik
case 412..512: CinIgraca[id] = CIN_BrigG
case 513..613: CinIgraca[id] = CIN_GenM
case 714..814: CinIgraca[id] = CIN_GenP
case 815..915: CinIgraca[id] = CIN_Gen
case 916..1000: CinIgraca[id] = CIN_Mar
default: CinIgraca[id] = CIN_Admin
}
if(!is_user_alive(id))
{
new target = entity_get_int(id, EV_INT_iuser2); //error
if(target == 0)
return;
set_hudmessage(255, 212, 42, -1.0, 0.0, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "Iskustvo : %i / %i ^nSkill: %i^nRank: %s", iskustvo_igraca[target],izracunajxp(nivo_igraca[target]), nivo_igraca[target], Cinovi[CinIgraca[target]]);
}
else
{
set_hudmessage(0, 200, 250, -1.0, 0.0, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[Iskustvo : %i / %i]^n[Skill: %i]^n[Rank: %s]", iskustvo_igraca[id],izracunajxp(nivo_igraca[id]), nivo_igraca[id], Cinovi[CinIgraca[id]]);
}
}
public Death()
{
new id = read_data(2);
new napadac = read_data(1);
if(napadac != id && is_user_connected(napadac))
{
new novo_iskustvo = get_pcvar_num(kill_iskustvo);
iskustvo_igraca[napadac] += novo_iskustvo
ProveriNivo(napadac);
}
}
public ProveriNivo(id)
{
if(nivo_igraca[id] < maxlvl)
{
while(iskustvo_igraca[id] >= izracunajxp(nivo_igraca[id]))
{
nivo_igraca[id]++;
levelRank[id] = nivo_igraca[id]
levelSacuvajRank(id, levelRank[id])
}
if(nivo_igraca[id] > maxlvl)
{
nivo_igraca[id] = maxlvl
}
}
SacuvajLevele(id);
}
public SacuvajLevele(id)
{
new AuthID[35];
get_user_authid(id, AuthID, 34);
new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s-lvl", AuthID);
format(vaultdata, 255, "%i#%i#", iskustvo_igraca[id], nivo_igraca[id]);
nvault_set(g_vault, vaultkey, vaultdata);
return PLUGIN_CONTINUE;
}
public ShowStats(id)
{
ColorChat(0, TEAM_COLOR, "^4[Rank-lvl]^1Tvoji ^3Skill ^1je:^3 %d ^1;Tvoje ^3Iskustvo ^1je :^3 %d", nivo_igraca[id], iskustvo_igraca[id])
}
public UcitajLevele(id)
{
new AuthID[35];
get_user_authid(id, AuthID, 34);
new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s-lvl", AuthID);
format(vaultdata, 255, "%i#%i#", iskustvo_igraca[id], nivo_igraca[id] );
nvault_get(g_vault, vaultkey, vaultdata, 255);
replace_all(vaultdata, 255, "#", " ");
new iskustvoigraca[32], leveligraca[32]
parse(vaultdata, iskustvoigraca, 31, leveligraca, 31);
iskustvo_igraca[id] = str_to_num(iskustvoigraca);
nivo_igraca[id] = str_to_num(leveligraca);
return PLUGIN_CONTINUE;
}
public levelTop15(id)
{
new i, count
static sort[33][2], maxPlayers
if(!maxPlayers) maxPlayers = get_maxplayers()
for(i=1;i<=maxPlayers;i++)
{
sort[count][0] = i
sort[count][1] = levelRank[i]
count++
}
SortCustom2D(sort,count,"levelStats")
new buffer[2048]
new line[256]
new len = format( buffer, 2047, "<body bgcolor=#000000 style=^"color:#ffffff^"><pre><Center><table width=100%% cellpadding=1 cellspacing=1 border=0>")
len += format( buffer[len], 2047-len, "<tr style=^"color:#8FABFF^"><th width=5%%>#<th width=60%%>Nick<th width=35%%>Level")
new players[32], num
get_players(players, num)
new fr = clamp(count,0,15)
new name[42], player
for(new a = 0; a < fr; a++)
{
player = sort[a][0]
get_user_name(player, name, 41)
while (containi(name, "<") != -1)
replace(name, 63, "<", "<")
while (containi(name, ">") != -1)
replace(name, 63, ">", ">")
format(line, 255, "<tr %s><td>%d<td style=^"color:%s^">%s<td>%d", ((a%2)==0) ? " bgcolor=#333333" : " bgcolor=#262626", a+1,((a%2)==0) ? "#9CFF7A" : "red", name, sort[a][1])
len += format( buffer[len], 2047-len, line )
}
format(line, 255, "</table><font color=^"red^">(Statistika trenutno pristutnih igraca)</body></pre>" )
len += format( buffer[len], 2047-len, line )
show_motd(id, buffer, "Level - Top 15")
return PLUGIN_CONTINUE
}
public levelStats(elem1[],elem2[])
{
if(elem1[1] > elem2[1]) return -1
else if(elem1[1] < elem2[1]) return 1
return PLUGIN_CONTINUE
}
public levelUcitajRank( id )
{
new valut = nvault_open("Level_rank")
new authid[33]
new vaultkey[64], vaultdata[64]
get_user_authid(id, authid, 32)
format(vaultkey, 63, "_LEVEL_RANK_%s_BODOVI_", authid)
nvault_get(valut, vaultkey, vaultdata, 63)
nvault_close(valut)
return str_to_num(vaultdata)
}
public levelSacuvajRank(id,Bodovi)
{
new valut = nvault_open("Level_rank")
if(valut == INVALID_HANDLE)
set_fail_state("Greska nValut Level_rank (invalid handle)")
new name[33], authid[32]
new vaultkey[64], vaultdata[64]
get_user_authid(id, authid, 31)
get_user_name(id, name, 32)
format(vaultkey, 63, "_LEVEL_RANK_%s_BODOVI_", authid)
format(vaultdata, 63, "%d_NICK_^"%s^"^n", Bodovi, name)
nvault_set(valut, vaultkey, vaultdata)
}
public levelPrikaziRank(id)
{
ColorChat(id, TEAM_COLOR,"^4[Rank-lvl] ^1Tvoj level je ^4%d", levelRank[id])
}