#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <nvault>
#include <cstrike>
new const PLUGIN_NAME[] = "Level Mod";
new const hnsxp_version[] = "3.8.3";
new const LEVELS[99] = {
100, // 1
300, // 2
500, // 3
700, // 4
900, // 5
1000, // 6
1500, // 7
2000, // 8
2500, // 10
3000, // 11
4000, // 12
5000, // 13
6000, // 14
7000, // 15
10000, // 16
12000, // 17
13000, // 18
15000, // 19
20000, // 20
25000, // 21
30000, // 22
35000, // 23
40000, // 24
45000, // 25
50000, // 26
60000, // 27
70000, // 28
80000, // 29
100000, // 30
120000, // 31
130000, //32
140000, // 33
150000, // 34
160000, // 35
170000, // 36
180000, // 37
190000, // 38
195000, // 39
200000, // 40
250000, // 41
300000, // 42
350000, // 43
400000, // 44
500000, // 45
600000, // 46
700000, // 47
800000, // 48
900000, // 49
1000000, // 50
1300000, // 51
1500000, // 2
1800000, // 3
2000000, // 4
2250000, // 5
2500000, // 6
2750000, // 7
2900000, // 8
3000000, // 10
3500000, // 11
4000000, // 12
4500000, // 13
5000000, // 14
5500000, // 15
6000000, // 16
6500000, // 17
7000000, // 18
7500000, // 19
8500000, // 20
9000000, // 21
10000000, // 22
11000000, // 23
22000000, // 24
23000000, // 25
24000000, // 26
25000000, // 27
26000000, // 28
27000000, // 29
28000000, // 30
29000000, // 31
30000000, //32
40000000, // 33
50000000, // 34
60000000, // 35
70000000, // 36
80000000, // 37
90000000, // 38
100000000, // 39
150000000, // 40
200000000, // 41
300000000, // 42
400000000, // 43
500000000, // 44
600000000, // 45
700000000, // 46
750000000, // 47
850000000, // 48
909990000 // 99
}
new hnsxp_playerxp[33], hnsxp_playerlevel[33];
new hnsxp_kill, g_hnsxp_vault;
public plugin_init()
{
register_plugin(PLUGIN_NAME, hnsxp_version, "LordOfNothing");
RegisterHam(Ham_Spawn, "player", "hnsxp_spawn", 1);
register_event("DeathMsg", "hnsxp_death", "a");
hnsxp_kill = register_cvar("hnsxp_kill", "500");
register_clcmd("say /level","plvl");
register_clcmd("say /xp","plvl");
register_clcmd("say /levels","plvls");
register_clcmd("say_team /level","plvl");
register_clcmd("say_team /xp","plvl");
register_clcmd("say /lvl","tlvl");
g_hnsxp_vault = nvault_open("deathrun_xp");
register_concmd("amx_level", "cmd_give_level", ADMIN_IMMUNITY, "<target> <amount>");
register_concmd("amx_takelevel", "cmd_take_level", ADMIN_IMMUNITY, "<target> <amount>");
register_concmd("amx_xp", "cmd_give_xp", ADMIN_IMMUNITY, "<target> <amount>");
register_concmd("amx_takexp", "cmd_take_xp", ADMIN_IMMUNITY, "<target> <amount>");
RegisterHam(Ham_Spawn, "player", "FwdPlayerSpawn", 1);
register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
}
public hnsxp_spawn(id)
{
MesajColorat(id, "!echipa[Level Mod] !verdeLevel : !echipa %i , !verdeXP: !echipa %i / %i ", hnsxp_playerlevel[id], hnsxp_playerxp[id], LEVELS[hnsxp_playerlevel[id]]);
if((hnsxp_playerlevel[id] < 99) && (hnsxp_playerxp[id] >= LEVELS[hnsxp_playerlevel[id]]))
{
MesajColorat(id,"!echipa[%s] !verdeAi trecut levelul", PLUGIN_NAME);
while(hnsxp_playerxp[id] >= LEVELS[hnsxp_playerlevel[id]])
{
hnsxp_playerlevel[id] += 1;
}
}
}
public FwdPlayerSpawn(id)
{
//set_task(11.0, "gItem", id);
}
public plvl(id)
{
MesajColorat(id, "!echipa[Level Mod] !verdeLevel : !echipa %i , !verdeXP: !echipa %i / %i ", hnsxp_playerlevel[id], hnsxp_playerxp[id], LEVELS[hnsxp_playerlevel[id]]);
}
public plvls(id)
{
new players[32], playersnum, name[40], motd[1024], len;
len = formatex(motd, charsmax(motd), "<html>");
get_players(players, playersnum);
for ( new i = 0 ; i < playersnum ; i++ ) {
get_user_name(players, name, charsmax(name));
len += formatex(motd[len], charsmax(motd) - len, "<br> <center>[LEVEL %i] %s [XP %i / %i]</center> ",hnsxp_playerlevel[players], name, hnsxp_playerxp[players], LEVELS[hnsxp_playerlevel[players]]);
}
formatex(motd[len], charsmax(motd) - len, "</html>");
show_motd(id, motd);
}
public tlvl(id)
{
new poj_Name [ 32 ];
get_user_name(id, poj_Name, 31)
MesajColorat(0, "!verde[!echipaLevel-Mod!verde] !normal Jucatorul !verde %s !normalare level !verde %i",poj_Name, hnsxp_playerlevel[id]);
}
public hnsxp_death()
{
new iVictim = read_data(2);
new attacker = get_user_attacker(iVictim);
new victimname[32], wvar[32];
get_user_name(iVictim,victimname,31);
read_data(4, wvar, 31);
if(equal(wvar, "world", 5))
return;
if(attacker < 1 || attacker > 32)
return;
hnsxp_playerxp[attacker] += get_pcvar_num(hnsxp_kill);
MesajColorat(attacker,"!echipa[%s] !verdeAi primit %i XP pentru ca l-ai omorat pe %s!", PLUGIN_NAME, get_pcvar_num(hnsxp_kill), victimname);
hnsxp_hudinfo(attacker);
}
public hnsxp_hudinfo(id)
{
set_hudmessage(255, 0, 0, 0.41, 0.01, 0, 6.0, 3.0);
if(hnsxp_playerlevel[id] < 99)
show_hudmessage(id, "[Level: %i]^n[XP: %i / %i] ",
hnsxp_playerlevel[id], hnsxp_playerxp[id], LEVELS[hnsxp_playerlevel[id]]);
else
show_hudmessage(id, "[Level: %i]^n[Level Maxim !]", hnsxp_playerlevel[id]);
set_task(2.0, "hnsxp_hudinfo", id);
}
public client_connect(id)
{
LoadData(id);
set_task(10.0, "hnsxp_hudinfo", id);
}
public client_disconnect(id)
{
SaveData(id);
hnsxp_playerxp[id] = 0;
hnsxp_playerlevel[id] = 0;
}
public SaveData(id)
{
new PlayerName[35];
get_user_name(id,PlayerName,34);
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",PlayerName);
format(vaultdata,255,"%i#%i#",hnsxp_playerxp[id],hnsxp_playerlevel[id]);
nvault_set(g_hnsxp_vault,vaultkey,vaultdata);
return PLUGIN_CONTINUE;
}
public LoadData(id)
{
new PlayerName[35];
get_user_name(id,PlayerName,34);
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s",PlayerName);
format(vaultdata,255,"%i#%i#",hnsxp_playerxp[id],hnsxp_playerlevel[id]);
nvault_get(g_hnsxp_vault,vaultkey,vaultdata,255);
replace_all(vaultdata, 255, "#", " ");
new playerxp[32], playerlevel[32];
parse(vaultdata, playerxp, 31, playerlevel, 31);
hnsxp_playerxp[id] = str_to_num(playerxp);
hnsxp_playerlevel[id] = str_to_num(playerlevel);
return PLUGIN_CONTINUE;
}
public cmd_give_level(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new target[32], amount[21], reason[21]
read_argv(1, target, 31)
read_argv(2, amount, 20)
read_argv(3, reason, 20)
new player = cmd_target(id, target, 8)
if(!player)
return PLUGIN_HANDLED
new admin_name[32], player_name[32]
get_user_name(id, admin_name, 31)
get_user_name(player, player_name, 31)
new expnum = str_to_num(amount)
MesajColorat(0, "!echipaADMIN %s: !verdeia dat %s level lui %s", admin_name, amount, player_name)
hnsxp_playerlevel[player] += expnum
SaveData(id)
return PLUGIN_CONTINUE
}
public cmd_give_xp(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new target[32], amount[21], reason[21]
read_argv(1, target, 31)
read_argv(2, amount, 20)
read_argv(3, reason, 20)
new player = cmd_target(id, target, 8)
if(!player)
return PLUGIN_HANDLED
new admin_name[32], player_name[32]
get_user_name(id, admin_name, 31)
get_user_name(player, player_name, 31)
new expnum = str_to_num(amount)
MesajColorat(0, "!echipaADMIN %s: !verdeia dat %s xp lui %s", admin_name, amount, player_name)
hnsxp_playerxp[player] += expnum
SaveData(id)
return PLUGIN_CONTINUE
}
public cmd_take_level(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new target[32], amount[21], reason[21]
read_argv(1, target, 31)
read_argv(2, amount, 20)
read_argv(3, reason, 20)
new player = cmd_target(id, target, 8)
if(!player)
return PLUGIN_HANDLED
new admin_name[32], player_name[32]
get_user_name(id, admin_name, 31)
get_user_name(player, player_name, 31)
new expnum = str_to_num(amount)
MesajColorat(0, "!echipaADMIN %s: !verdeia luat %s level lui %s", admin_name, amount, player_name)
hnsxp_playerlevel[player] -= expnum
SaveData(id)
return PLUGIN_CONTINUE
}
public cmd_take_xp(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new target[32], amount[21], reason[21]
read_argv(1, target, 31)
read_argv(2, amount, 20)
read_argv(3, reason, 20)
new player = cmd_target(id, target, 8)
if(!player)
return PLUGIN_HANDLED
new admin_name[32], player_name[32]
get_user_name(id, admin_name, 31)
get_user_name(player, player_name, 31)
new expnum = str_to_num(amount)
MesajColorat(0, "!echipaADMIN %s: !verdeia luat %s level lui %s", admin_name, amount, player_name)
hnsxp_playerxp[player] -= expnum
SaveData(id)
return PLUGIN_CONTINUE
}
public t_win(id)
{
new iPlayer [ 32 ], iNum;
get_players(iPlayer, iNum, "ae", "TERRORIST")
for ( new i = 0; i < iNum; i++ ) {
hnsxp_playerxp[iPlayer [ i ]] += get_pcvar_num(hnsxp_kill);
MesajColorat(iPlayer, "!echipa[Level Mod] !verdeAi primit !echipa %i xp !verde pentru ca echipa !echipaT !verdea castigat !",get_pcvar_num(hnsxp_kill));
}
}
stock MesajColorat(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!verde", "^4")
replace_all(msg, 190, "!normal", "^1")
replace_all(msg, 190, "!echipa", "^3")
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
write_byte(players);
write_string(msg);
message_end();
}
}
}
}