// Includes
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <csx>
#include <nvault>
#define HEALTH_FIX
#define MANAGE_PLAYERS
#define SHOW_HUD // arata in hud nivelul tau + xp-ul tau + rank-ul tau
// Register Plugin
new const PLUGIN_NAME[] = "Game Mod: Level System",
PLUGIN_VERSION[] = "3.0",
PLUGIN_AUTHOR[] = "YONTU";
//new ocnst PLUGIN_UPDATE[] = "13.02.2018";
#define MAX_BUFFER_LENGTH 2047
#define is_user_valid(%1) (1 <= %1 <= 32)
#define is_user_vip(%1) (get_user_flags(%1) & read_flags("t")) // flag VIP (vip-ul face x2 xp)
new const Tag[] = "[Level System]";
new const SoundLevelUp[] = "misc/levelup.wav";
enum _:e_data
{
Experienta[10],
Rank[64],
Viata[4],
Armura[4],
Flash[4],
He[4],
Smoke[4],
Viteza[4],
Gravitatie[4]
}
new Array:levelmod, nivel_maxim = 0, levelmoddata[e_data];
new xp_jucator[33], xpant_jucator[33], nivel_jucator[33], nume_jucator[33][32], bool:este_inviata[33], bool:este_conectat[33];
new nume_host[64], cvar_hostname, motd[MAX_BUFFER_LENGTH + 1], len = 0, g_Vault;
#if defined SHOW_HUD
new SyncHudMessage;
#endif
// Hack to be able to use Ham_Player_ResetMaxSpeed (by joaquimandrade)
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;
new g_drop_weapons[][] =
{
"weapon_hegrenade",
"weapon_flashbang",
"weapon_smokegrenade"
}
#if defined MANAGE_PLAYERS
#define ADMIN_ACCESS ADMIN_IMMUNITY
#endif
enum _data_cvars
{
cvarname[32],
cvarvalue[5],
cvardesc[512]
}
enum _:cvars
{
xp_kill = 0,
xp_hs,
xp_kill_knife,
xp_hs_knife,
xp_he,
xp_plant_bmb,
xp_defuse_bmb,
xp_explode_bmb,
xp_levelup_protection,
xp_levelup_effects
}
new cvar[cvars], cvar_cache[cvars];
new const data_cvars[][_data_cvars] =
{
//nume cvar + valore + descriere cvar
{"xp_kill", "10", "XP-ul obtinut pe kill:"},
{"xp_hs", "25", "XP-ul obtinut pe headshot:"},
{"xp_kill_knife", "30", "XP-ul obtinut pe kill facut cu cutitul:"},
{"xp_hs_knife", "40", "XP-ul obtinut pe headshot facut cu cutitul:"},
{"xp_he", "30", "XP-ul obtinut pe kill facut cu grenada:"},
{"xp_plant_bmb", "10", "XP-ul obtinut plantand bomba:"},
{"xp_defuse_bmb", "15", "XP-ul obtinut dezamorsand bomba:"},
{"xp_explode_bmb", "20", "XP-ul obtinut datorita exploziei bombei:"},
{"xp_levelup_protection", "1", "Atunci cand faci nivel nou, esti imun la orice atac timp cateva secunde (0/1)"},
{"xp_levelup_effects", "1", "Efecte atunci cand faci nivel nou (0/1)"}
}
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_cvar("level_mod_", PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER);
set_cvar_string("level_mod_", PLUGIN_VERSION);
new i;
for(i = 0; i < sizeof data_cvars; i++)
cvar = register_cvar(data_cvars[cvarname], data_cvars[cvarvalue]);
register_event("HLTV", "event_NewRound", "a", "1=0", "2=0");
#if defined HEALTH_FIX
register_message(get_user_msgid("Health"), "msg_health");
#endif
// Block change name. Is restricted.
register_forward(FM_ClientUserInfoChanged, "fw_ChangeName");
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1);
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1);
register_clcmd("say /xp", "ClShowXp");
register_clcmd("say_team /xp", "ClShowXp");
#if defined MANAGE_PLAYERS
register_clcmd("say /level", "CmdManagePlayers");
register_clcmd("say_team /level", "CmdManagePlayers");
#endif
register_clcmd("say /help", "CmdOpenHelpMenu");
register_clcmd("say_team /help", "CmdOpenHelpMenu");
register_concmd("amx_info", "CmdInfo");
#if defined SHOW_HUD
SyncHudMessage = CreateHudSyncObj();
#endif
cvar_hostname = get_cvar_pointer("hostname");
g_Vault = nvault_open("_level_mod_");
if(g_Vault == INVALID_HANDLE)
set_fail_state("Eroare la deschiderea bazei de date din foldeurul data/vault.");
_read_file();
}
public CmdInfo(id)
{
new i;
console_print(id, "========= | %s | =========", PLUGIN_NAME);
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
console_print(id, "Level: %d | XP: %d | Rank: %s | HP: %d | AP: %d | FLASH: %d | HE: %d | SMOKE: %d | SPEED: %d | GRAVITY: %d^n",
i, levelmoddata[Experienta], levelmoddata[Rank], levelmoddata[Viata], levelmoddata[Armura], levelmoddata[Flash], levelmoddata[He], levelmoddata[Smoke], levelmoddata[Viteza], levelmoddata[Gravitatie]);
}
}
_read_file()
{
new path[64];
get_localinfo("amxx_configsdir", path, charsmax(path));
format(path, charsmax(path), "%s/levelmod.ini", path);
new file = fopen(path, "r+");
new const errors_file[] = "levelmod_errors.txt";
new format_txt[128];
if(!file_exists(path))
{
log_to_file(errors_file, "Nu am gasit fisierul '%s'. Il creez acum!", path);
format(format_txt, 127, ";------------ | %s - Configuration file | ------------", PLUGIN_NAME);
write_file(path, format_txt);
format(format_txt, 127, ";-------------------------- | by %s | --------------------------^n^n^n", PLUGIN_AUTHOR);
write_file(path, format_txt);
write_file(path, ";Salut. In fisierul asta iti adaugi cate nivele vrei tu. Liniile care contin ';' in fata lor nu vor fi luate in consideratie.");
write_file(path, ";Pentru a seta un nivel, procedezi in felul urmator. Trebuie doar sa completezi linia de mai jos:");
write_file(path, ";^"XP^" ^"RANK^" ^"VIATA^" ^"ARMURA^" ^"FLASH^" ^"HE^" ^"SMOKE^" ^"VITEZA^" ^"GRAVITATIE^"");
write_file(path, ";XP reprezinta experienta necesara pe care trebuie sa o acumulezi pentru a trece la nivelul urmator.");
write_file(path, ";RANK este rank-ul care te reprezinta, in functie de ce nivel ai.");
write_file(path, ";VIATA este viata pe care o primesti cand ai nivelul respectiv.");
write_file(path, ";ARMURA este armura pe care o primesti cand ai nivelul respectiv.");
write_file(path, ";FLASH este numarul de grenade flashbang pe care le primesti cand ai nivelul respectiv.");
write_file(path, ";HE este numarul de grenade he pe care le primesti cand ai nivelul respectiv.");
write_file(path, ";SMOKE este numarul de grenade smoke pe care le primesti cand ai nivelul respectiv.");
write_file(path, ";VITEZA este viteza pe care o primesti cand ai nivelul respectiv.");
write_file(path, ";GRAVITATIE este gravitatia pe care o primesti cand ai nivelul respectiv.^n;");
write_file(path, ";IMPORTANTA: Cate linii ai in fisier, atatea NIVELE VOR FI. DACA VREI CA JUCATORUL SA NU PRIMEASCA NICIO GRENADA, ATUNCI PUNE VALOARE 0 LA HE SAU FB SAU SMOKE^n;");
write_file(path, ";Un exemplu de nivel este:");
write_file(path, ";^"100^" ^"BAROS^" ^"100^" ^"100^" ^"2^" ^"1^" ^"1^" ^"300^" ^"500^"");
write_file(path, ";- ai nevoie de 100 XP sa avansezi^n;- rankul tau va fi: BAROS^n;- primesti la spawn 100 HP, 100 AP, 2 HB, 1 HE, 1 SM^n;- ai 300 viteza^n;- ai 500 gravitatie");
write_file(path, ";Valoarea vitezei trebuie sa se afle in intervalul [260, 600] (260 reprezinta viteza default)^n;Gravitatia trebuie sa se afle in intervalul [100, 800] (800 reprezinta gravitatia defaul)");
write_file(path, ";PRIMA LINIE TREBUIE SA FIE NECOMPLETATA.^n;Ti-am adaugat eu mai jos doua nivele. Adauga acum cate nivele vrei sa aiba pluginul.^n^n^n");
write_file(path, "^"0^" ^"0^" ^"0^" ^"0^" ^"0^" ^"0^" ^"0^" ^"0^" ^"0^"; Level 0");
write_file(path, "^"100^" ^"Avansat^" ^"50^" ^"0^" ^"3^" ^"2^" ^"2^" ^"260^" ^"750^"; Level 1");
write_file(path, "^"200^" ^"Expert^" ^"100^" ^"50^" ^"4^" ^"3^" ^"3^" ^"270^" ^"700^"; Level 2");
}
if(nivel_maxim)
{
ArrayClear(levelmod);
nivel_maxim = 0;
}
new text[121], levelmod_infos[e_data];
while(!feof(file))
{
fgets(file, text, charsmax(text));
trim(text);
if(text[0] == ';' || !strlen(text))
{
continue;
}
if(parse(text, levelmod_infos[Experienta], charsmax(levelmod_infos), levelmod_infos[Rank], charsmax(levelmod_infos), levelmod_infos[Viata], charsmax(levelmod_infos),
levelmod_infos[Armura], charsmax(levelmod_infos), levelmod_infos[Flash], charsmax(levelmod_infos), levelmod_infos[He], charsmax(levelmod_infos),
levelmod_infos[Smoke], charsmax(levelmod_infos), levelmod_infos[Viteza], charsmax(levelmod_infos), levelmod_infos[Gravitatie], charsmax(levelmod_infos)) != 9)
{
log_to_file(errors_file, "[AMXX] Nu am putut delimita linia (%s). Este scrisa gresit.", text);
continue;
}
levelmoddata[Experienta] = str_to_num(levelmod_infos[Experienta]);
copy(levelmoddata[Rank], charsmax(levelmoddata), levelmod_infos[Rank]);
levelmoddata[Viata] = str_to_num(levelmod_infos[Viata]);
levelmoddata[Armura] = str_to_num(levelmod_infos[Armura]);
levelmoddata[Flash] = str_to_num(levelmod_infos[Flash]);
levelmoddata[He] = str_to_num(levelmod_infos[He]);
levelmoddata[Smoke] = str_to_num(levelmod_infos[Smoke]);
levelmoddata[Viteza] = str_to_num(levelmod_infos[Viteza]);
levelmoddata[Gravitatie] = str_to_num(levelmod_infos[Gravitatie]);
ArrayPushArray(levelmod, levelmoddata);
nivel_maxim++;
}
nivel_maxim--;
fclose(file);
server_print("[%s] Numarul total de nivele: %d.", PLUGIN_NAME, nivel_maxim);
get_localinfo("amxx_configsdir", path, charsmax(path));
format(path, charsmax(path), "%s/level_mod.cfg", path);
if(!file_exists(path))
{
new i;
for(i = 0; i < sizeof data_cvars; i++)
{
formatex(format_txt, 127, "// %s^n%s %s^n^n", data_cvars[cvardesc], data_cvars[cvarname], data_cvars[cvarvalue]);
write_file(path, format_txt);
}
}
server_cmd("exec %s", path);
}
public plugin_precache()
precache_sound(SoundLevelUp);
public plugin_end()
{
nvault_close(g_Vault);
ArrayDestroy(levelmod);
}
public plugin_cfg()
{
new i;
for(i = 0; i < sizeof data_cvars; i++)
cvar_cache = get_pcvar_num(cvar);
get_pcvar_string(cvar_hostname, nume_host, charsmax(nume_host));
}
public plugin_natives()
{
levelmod = ArrayCreate(e_data);
// Player specific natives
register_native("xp_mod", "native_xp_mod", 1);
register_native("get_user_xp", "native_get_user_xp", 1);
register_native("get_user_level", "native_get_user_level", 1);
register_native("get_max_level", "native_get_nivel_maxim", 1);
register_native("get_user_next_level_xp", "native_get_user_next_level_xp", 1);
}
public native_xp_mod(id, xp, update, save)
{
if(!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
return false;
}
return make_user_happy(id, xp, update, save);
}
public native_get_user_xp(id)
{
if(!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
return false;
}
return xp_jucator[id];
}
public native_get_user_level(id)
{
if(!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
return false;
}
return calculeaza_nivel(id);
}
public native_get_nivel_maxim()
return nivel_maxim;
public native_get_user_next_level_xp(id)
{
if(!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "%s: Invalid Player (%d).", PLUGIN_NAME, id);
return false;
}
new level = calculeaza_nivel(id) + 1;
ArrayGetArray(levelmod, level, levelmoddata);
if(este_conectat[id] && (level <= nivel_maxim))
return levelmoddata[Experienta];
return true;
}
public client_putinserver(id)
{
get_user_name(id, nume_jucator[id], 31);
xp_jucator[id] = 0;
este_conectat[id] = true;
este_inviata[id] = false;
LoadUserExperienta(id);
nivel_jucator[id] = calculeaza_nivel(id);
#if defined SHOW_HUD
set_task(1.0, "task_ShowHUD", id + 1221, _, _, "b");
#endif
}
public client_disconnect(id)
{
este_conectat[id] = false;
este_inviata[id] = false;
SaveUserExperienta(id);
#if defined SHOW_HUD
remove_task(id + 1221);
#endif
}
// thx ConnorMcLeod
public fw_ChangeName(id)
{
static const name[] = "name"
static szOldName[32], szNewName[32];
pev(id, pev_netname, szOldName, charsmax(szOldName));
if(szOldName[0])
{
get_user_info(id, name, szNewName, charsmax(szNewName));
if(!equal(szOldName, szNewName))
{
set_user_info(id, name, szOldName);
ColorChat(id, "!3%s!1 Este!4 INTERZISA!1 schimbarea numelui pe server.", Tag);
return FMRES_HANDLED;
}
}
return FMRES_IGNORED;
}
public fw_PlayerSpawn(id)
{
if(!is_user_alive(id))
return HAM_IGNORED;
este_inviata[id] = true;
set_task(1.0, "set_user_items", id);
return HAM_IGNORED;
}
public fw_ResetMaxSpeed_Post(id)
{
if(!este_inviata[id])
return HAM_HANDLED;
ArrayGetArray(levelmod, nivel_jucator[id], levelmoddata);
new Float:fMaxSpeed = floatclamp(float(levelmoddata[Viteza]), 250.0, 600.0);
set_user_maxspeed(id, fMaxSpeed);
new command[128];
formatex(command, charsmax(command), "cl_forwardspeed %.1f;cl_sidespeed %.1f;cl_backspeed %.1f", fMaxSpeed, fMaxSpeed, fMaxSpeed);
client_cmd(id, command);
return HAM_IGNORED;
}
public event_NewRound()
{
new i;
for(i = 0; i < sizeof data_cvars; i++)
cvar_cache = get_pcvar_num(cvar);
}
public client_death(killer, victim, wpnindex, hitplace, TK)
{
if(killer == victim || !este_inviata[killer])
return;
este_inviata[victim] = false;
new xp;
switch(wpnindex)
{
case CSW_KNIFE:
{
if(hitplace == HIT_HEAD) xp = (cvar_cache[xp_hs_knife] == 0) ? 0 : cvar_cache[xp_hs_knife];
else xp = (cvar_cache[xp_kill_knife] == 0) ? 0 : cvar_cache[xp_kill_knife];
}
case CSW_HEGRENADE: xp = (cvar_cache[xp_he] == 0) ? 0 : cvar_cache[xp_he];
default:
{
if(hitplace == HIT_HEAD) xp = (cvar_cache[xp_hs] == 0) ? 0 : cvar_cache[xp_hs];
else xp = (cvar_cache[xp_kill] == 0) ? 0 : cvar_cache[xp_kill];
}
}
if(is_user_vip(killer))
xp *= 2;
if(xp != 0)
{
make_user_happy(killer, xp, 1, 1);
ColorChat(killer, "!4%s!1 +!3 %i xp", Tag, xp);
}
}
public bomb_planted(planter)
{
if(!este_conectat[planter] || cvar_cache[xp_plant_bmb] == 0)
return PLUGIN_CONTINUE;
if(is_user_vip(planter))
cvar_cache[xp_plant_bmb] *= 2;
make_user_happy(planter, cvar_cache[xp_plant_bmb], 1, 0);
ColorChat(0, "!3%s!1 Jucatorul!4 %s!1 a primit!3 %d!1 XP pentru plantarea bombei.", Tag, nume_jucator[planter], cvar_cache[xp_plant_bmb]);
return PLUGIN_CONTINUE;
}
public bomb_explode(planter, defuser)
{
if(!este_conectat[planter] || cvar_cache[xp_explode_bmb] == 0)
return PLUGIN_CONTINUE;
if(is_user_vip(planter))
cvar_cache[xp_explode_bmb] *= 2;
make_user_happy(planter, cvar_cache[xp_explode_bmb], 1, 0);
ColorChat(0, "!3%s!1 Jucatorul!4 %s!1 a primit!3 %d!1 XP pentru ca a avut grija de bomba.", Tag, nume_jucator[planter], cvar_cache[xp_explode_bmb]);
return PLUGIN_CONTINUE;
}
public bomb_defused(defuser)
{
if(!este_conectat[defuser] || cvar_cache[xp_defuse_bmb] == 0)
return PLUGIN_CONTINUE;
if(is_user_vip(defuser))
cvar_cache[xp_defuse_bmb] *= 2;
make_user_happy(defuser, cvar_cache[xp_defuse_bmb], 1, 0);
ColorChat(0, "!3%s!1 Jucatorul!4 %s!1 a primit!3 %d!1 XP pentru dezamorsarea bombei.", Tag, nume_jucator[defuser], cvar_cache[xp_defuse_bmb]);
return PLUGIN_CONTINUE;
}
#if defined HEALTH_FIX
public msg_health(msgid, dest, id)
{
static health;
health = get_msg_arg_int(1);
if(health > 255)
set_msg_arg_int(1, ARG_BYTE, 255);
return PLUGIN_CONTINUE;
}
#endif
public ClShowXp(id)
{
if(este_conectat[id])
{
new rank[64];
ArrayGetArray(levelmod, nivel_jucator[id], levelmoddata);
if(equal(levelmoddata[Rank], ""))
formatex(rank, charsmax(rank), "");
else
formatex(rank, charsmax(rank), "!4 ***!1 Rank:!3 %s", levelmoddata[Rank]);
if(nivel_jucator[id] == nivel_maxim)
ColorChat(id, "!4***!1 Level:!3 %d!4 ***!1 XP:!3 %d%s", nivel_maxim, xp_jucator[id], rank);
else
ColorChat(id, "!4***!1 Level:!3 %d!1/!3%d!4 ***!1 XP:!3 %d!1/!3%d%s", nivel_jucator[id], nivel_maxim, xp_jucator[id], levelmoddata[Experienta], rank);
}
return PLUGIN_HANDLED;
}
#if defined MANAGE_PLAYERS
public CmdManagePlayers(id)
{
if(!(get_user_flags(id) & ADMIN_ACCESS))
{
ColorChat(id, "!4%s!1 Doar!3 ADMINII!1 au acces!", Tag);
return PLUGIN_HANDLED;
}
new menu = menu_create("Alege un jucator:", "MenuHandler");
new iPlayers[32], iNum, i, player;
new szUserID[32], szName[64];
get_players(iPlayers, iNum);
for(i = 0; i < iNum; i++)
{
player = iPlayers[i];
formatex(szName, charsmax(szName), "%s:\y Level:\r %d", nume_jucator[player], nivel_jucator[player]);
formatex(szUserID, charsmax(szUserID), "%d", get_user_userid(player));
menu_additem(menu, szName, szUserID);
}
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public MenuHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new item_access, callback, info[64], name[32];
menu_item_getinfo(menu, item, item_access, info, charsmax(info), name, charsmax(name), callback);
new userid = str_to_num(info);
new player = find_player("k", userid);
ChoosePlayer(id, player);
return PLUGIN_HANDLED;
}
public ChoosePlayer(id, Choosen)
{
new szTitle[101], mm[200], szChoosen[200], i;
formatex(szTitle, charsmax(szTitle), "Schimba-i lui \r%s\y nivelul in:", nume_jucator[Choosen]);
new menu = menu_create(szTitle, "SetLevelHandler");
num_to_str(Choosen, szChoosen, charsmax(szChoosen));
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
formatex(mm, charsmax(mm), "\r%d\w (%d XP)", i, levelmoddata[Experienta]);
menu_additem(menu, mm, szChoosen);
}
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public SetLevelHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new item_access, callback, info[64], name[32];
menu_item_getinfo(menu, item, item_access, info, charsmax(info), name, charsmax(name), callback);
new player = str_to_num(info);
nivel_jucator[player] = item+1;//(item == 0) ? 1 : calculeaza_nivel(id);
ArrayGetArray(levelmod, nivel_jucator[player], levelmoddata); // necesar
xp_jucator[player] = (item == 0) ? 0 : levelmoddata[Experienta];
set_user_items(player);
ColorChat(player, "!4%s!1 Adminul!3 %s!1 ti-a schimbat nivelul in!4 %d!1.", Tag, nume_jucator[id], nivel_jucator[player]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
#endif
public CheckUserLevel(id)
{
if(!este_conectat[id])
return;
new level = calculeaza_nivel(id);
ArrayGetArray(levelmod, level, levelmoddata);
if(nivel_jucator[id] == nivel_maxim)
return;
// prima data verificam nivelul, a doua conditie e optionala (atunci cand jucatorul are 0 XP)
if(level != nivel_jucator[id] || xp_jucator[id] == levelmoddata[Experienta])
{
nivel_jucator[id]++;
emit_sound(id, CHAN_AUTO, SoundLevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
// Un mic efect? Nu strica...
if(cvar_cache[xp_levelup_effects])
{
// Luam culorile setate pentru fiecare level in parte
new g_Color[3];
g_Color[0] = get_color_level(id, 0); // r
g_Color[1] = get_color_level(id, 1); // g
g_Color[2] = get_color_level(id, 2); // b
// Producem efectul jucatorului
MakeFadeScreen(id, 1.5, g_Color, random_num(100, 200));
}
if(cvar_cache[xp_levelup_protection])
{
fm_set_user_godmode(id, 1);
set_task(1.0, "task_RemoveProtect", id);
}
ColorChat(id, "!3%s!1 Congratulations, you've !4leveled up!1. Current level:!3 %d!1 !", Tag, level);
if(nivel_jucator[id] < nivel_maxim)
{
ArrayGetArray(levelmod, nivel_jucator[id] + 1, levelmoddata);
ColorChat(id, "!3%s!1 Next XP:!4 %d!1 !", Tag, levelmoddata[Experienta]);
}
}
}
stock MakeFadeScreen(id, const Float:Seconds, const color[3], const Alpha)
{
static g_MsgScreenFade = 0;
if(!g_MsgScreenFade)
g_MsgScreenFade = get_user_msgid("ScreenFade");
message_begin(MSG_ONE, g_MsgScreenFade, _, id);
write_short(floatround(4096.0 * Seconds, floatround_round));
write_short(floatround(4096.0 * Seconds, floatround_round));
write_short(0x0000);
write_byte(color[0]);
write_byte(color[1]);
write_byte(color[2]);
write_byte(Alpha);
message_end();
}
public get_color_level(id, number)
{
new g_Color[3];
switch(nivel_jucator[id])
{
case 1: g_Color = { 248, 172, 58 };
case 2: g_Color = { 0, 255, 128 };
case 3: g_Color = { 170, 255, 127 };
case 4: g_Color = { 155, 240, 70 };
case 5: g_Color = { 255, 255, 0 };
case 6: g_Color = { 255, 127, 85 };
case 7: g_Color = { 0, 212, 255 };
case 8: g_Color = { 70, 70, 240 };
case 9: g_Color = { 170, 0, 255 };
case 10: g_Color = { 255, 255, 0 };
default: g_Color = { 200, 200, 0 };
}
return g_Color[number];
}
public task_RemoveProtect(id)
fm_set_user_godmode(id, 0);
#if defined SHOW_HUD
public task_ShowHUD(taskid)
{
new id = taskid - 1221;
ArrayGetArray(levelmod, nivel_jucator[id], levelmoddata);
new rank[64];
if(este_inviata[id])
{
new g_Color[3];
g_Color[0] = get_color_level(id, 0);
g_Color[1] = get_color_level(id, 1);
g_Color[2] = get_color_level(id, 2);
if(equal(levelmoddata[Rank], ""))
formatex(rank, charsmax(rank), "");
else
formatex(rank, charsmax(rank), " - RANK: %s", levelmoddata[Rank]);
if(nivel_jucator[id] == nivel_maxim)
{
set_hudmessage(g_Color[0], g_Color[1], g_Color[2], 0.02, 0.92, 0, 6.0, 1.1, 0.0, 0.0, -1);
ShowSyncHudMsg(id, SyncHudMessage, "LEVEL: MAXIMUM - XP: %d%s", xp_jucator[id], rank);
}
else
{
set_hudmessage(g_Color[0], g_Color[1], g_Color[2], 0.02, 0.92, 0, 6.0, 1.1, 0.0, 0.0, -1);
ShowSyncHudMsg(id, SyncHudMessage, "LEVEL: %d/%d - XP: %d/%d%s", nivel_jucator[id], nivel_maxim, xp_jucator[id], levelmoddata[Experienta], rank);
}
}
else
{
new idSpec;
idSpec = pev(id, pev_iuser2);
if(este_conectat[idSpec])
{
ArrayGetArray(levelmod, nivel_jucator[idSpec], levelmoddata);
if(equal(levelmoddata[Rank], ""))
formatex(rank, charsmax(rank), "");
else
formatex(rank, charsmax(rank), " Rank: %s | ", levelmoddata[Rank]);
set_hudmessage(255, 255, 255, -1.0, 0.87, 0, 6.0, 1.1, 0.0, 0.0, -1);
ShowSyncHudMsg(id, SyncHudMessage, "Spectating: %s (%0.f HP)^n%sLevel: %d | XP: %d", nume_jucator[idSpec], float(get_user_health(idSpec)), rank, nivel_jucator[idSpec], xp_jucator[idSpec]);
}
}
}
#endif
public SaveUserExperienta(id)
{
new szVaultData[64];
format(szVaultData, charsmax(szVaultData), "%i#", xp_jucator[id]);
nvault_set(g_Vault, nume_jucator[id], szVaultData);
//nvault_close(g_Vault);
}
public LoadUserExperienta(id)
{
new szVaultData[64], xp[33];
format(szVaultData, charsmax(szVaultData), "%i#", xp_jucator[id]);
nvault_get(g_Vault, nume_jucator[id], szVaultData, charsmax(szVaultData));
replace_all(szVaultData, charsmax(szVaultData), "#", " ");
parse(szVaultData, xp, charsmax(xp));
xp_jucator[id] = str_to_num(xp);
//nvault_close(g_Vault);
}
// STOCK'S
public set_user_items(id)
{
if(!este_inviata[id])
return;
new rank[64];
ArrayGetArray(levelmod, nivel_jucator[id], levelmoddata);
if(equal(levelmoddata[Rank], ""))
formatex(rank, charsmax(rank), "");
else
formatex(rank, charsmax(rank), "!4 ***!1 Rank:!3 %s", levelmoddata[Rank]);
if(nivel_jucator[id] == nivel_maxim)
ColorChat(id, "!4***!1 Level:!3 %d!4 ***!1 XP:!3 %d%s", nivel_maxim, xp_jucator[id], rank);
else
ColorChat(id, "!4***!1 Level:!3 %d!1/!3%d!4 ***!1 XP:!3 %d!1/!3%d%s", nivel_jucator[id], nivel_maxim, xp_jucator[id], levelmoddata[Experienta], rank);
for(new i = 0; i < sizeof g_drop_weapons; i++)
bacon_strip_weapon(id, g_drop_weapons[i]);
// HEALTH
set_user_health(id, clamp(levelmoddata[Viata], 10, 1000));
// ARMOR
new CsArmorType:ArmorType = CS_ARMOR_VESTHELM;
cs_set_user_armor(id, clamp(levelmoddata[Armura], 0, 1000), ArmorType);
// GRAVITY
set_user_gravity(id, floatclamp(levelmoddata[Gravitatie] * 0.00125, 200.0 * 0.00125, 1000.0 * 0.00125));
// FLASHBANGS
if(levelmoddata[Flash] != 0)
{
give_item(id, "weapon_flashbang");
if(levelmoddata[Flash] != 1)
cs_set_user_bpammo(id, CSW_FLASHBANG, levelmoddata[Flash]);
}
// HE GRENADES
if(levelmoddata[He] != 0)
{
give_item(id, "weapon_hegrenade");
if(levelmoddata[He] != 1)
cs_set_user_bpammo(id, CSW_HEGRENADE, levelmoddata[He]);
}
// SMOKE GRENADES
if(levelmoddata[Smoke] != 0)
{
give_item(id, "weapon_smokegrenade");
if(levelmoddata[Smoke] != 1)
cs_set_user_bpammo(id, CSW_SMOKEGRENADE, levelmoddata[Smoke]);
}
ColorChat(id, "!3%s!1 Items: [!4%i HP!1] [!4%i AP!1] [!4%i Gravity!1] [!4%i Speed!1] [!4%i HE!1] [!4%i FB!1] [!4%i SM!1]", Tag,
levelmoddata[Viata],
levelmoddata[Armura],
clamp(levelmoddata[Gravitatie], 200, 1000),
clamp(levelmoddata[Viteza], 250, 600),
levelmoddata[He],
levelmoddata[Flash],
levelmoddata[Smoke]);
}
stock make_user_happy(id, xp, update, save)
{
if(!este_conectat[id])
return PLUGIN_HANDLED;
if(xp != 0)
{
xp_jucator[id] += xp;
if(xp_jucator[id] <= 0) xp_jucator[id] = 0;
}
xpant_jucator[id] = xp_jucator[id];
if(update) CheckUserLevel(id);
if(save) SaveUserExperienta(id);
return PLUGIN_CONTINUE;
}
stock calculeaza_nivel(id)
{
new i, level = 1, bool:gasit = false;
if(xp_jucator[id] != 0)
{
for(i = 1; i < nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
if(xp_jucator[id] < levelmoddata[Experienta])
{
level = i;
gasit = true;
break;
}
}
if(!gasit) { level = nivel_maxim; }
}
else { level = 1; }
return level; //clamp(level, 1, nivel_maxim);
}
stock ColorChat(id, String[], any:...)
{
static szMesage[192];
vformat(szMesage, charsmax(szMesage), String, 3);
replace_all(szMesage, charsmax(szMesage), "!1", "^1");
replace_all(szMesage, charsmax(szMesage), "!3", "^3");
replace_all(szMesage, charsmax(szMesage), "!4", "^4");
static g_msg_SayText = 0;
if(!g_msg_SayText)
g_msg_SayText = get_user_msgid("SayText");
new Players[32], iNum = 1, i;
if(id) Players[0] = id;
else get_players(Players, iNum, "ch");
for(--iNum; iNum >= 0; iNum--)
{
i = Players[iNum];
message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
write_byte(i);
write_string(szMesage);
message_end();
}
}
stock fm_set_user_godmode(id, godmode = 0)
{
set_pev(id, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);
return PLUGIN_HANDLED;
}
stock fm_find_ent_by_owner(id, const classname[], owner)
{
static ent; ent = id;
while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)) && pev(ent, pev_owner) != owner) {}
return ent;
}
stock bacon_strip_weapon(id, weapon[])
{
if(!equal(weapon, "weapon_", 7))
return PLUGIN_CONTINUE;
static weaponid; weaponid = get_weaponid(weapon);
if(!weaponid)
return PLUGIN_CONTINUE;
static weaponent; weaponent = fm_find_ent_by_owner(-1, weapon, id);
if(!weaponent)
return PLUGIN_CONTINUE;
if(get_user_weapon(id) == weaponid)
ExecuteHamB(Ham_Weapon_RetireWeapon, weaponent);
if(!ExecuteHamB(Ham_RemovePlayerItem, id, weaponent))
return PLUGIN_CONTINUE;
ExecuteHamB(Ham_Item_Kill, weaponent)
set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<weaponid))
return PLUGIN_HANDLED;
}
public CmdOpenHelpMenu(id)
{
if(!este_conectat[id])
return PLUGIN_HANDLED;
OpenHelpMenu(id);
return PLUGIN_CONTINUE;
}
public OpenHelpMenu(id)
{
if(!este_conectat[id])
return;
new text_menu[128];
formatex(text_menu, charsmax(text_menu), "\wMENIU\y AJUTOR^n\r%s", nume_host);
new menu = menu_create(text_menu, "HelpHandler");
menu_additem(menu, "GENERAL", "1", 0);
menu_additem(menu, "VIATA", "2", 0);
menu_additem(menu, "ARMURA", "3", 0);
menu_additem(menu, "VITEZA", "4", 0);
menu_additem(menu, "GRAVITATIE", "5", 0);
menu_additem(menu, "GRENADE", "6", 0);
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}
public HelpHandler(id, menu, item)
{
if(item == MENU_EXIT || !este_conectat[id])
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], name[64], access, CallBack;
menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), CallBack);
new iKey = str_to_num(data);
switch(iKey)
{
case 1: OpenGeneralMotd(id);
case 2: OpenHealthMotd(id);
case 3: OpenArmorMotd(id);
case 4: OpenSpeedMotd(id);
case 5: OpenGravityMotd(id);
case 6: OpenNadesMotd(id);
default:
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public OpenGeneralMotd(id)
{
new xp[128];
ArrayGetArray(levelmod, nivel_jucator[id], levelmoddata);
if(nivel_jucator[id] == nivel_maxim) formatex(xp, charsmax(xp), "<font color=#7D2579>%d</font>", xp_jucator[id]);
else formatex(xp, charsmax(xp), "<font color=#7D2579>%d</font>/<font color=#7D2579>%d</font>", xp_jucator[id], levelmoddata[Experienta]);
len = formatex(motd, charsmax(motd), "<html>");
len += format(motd[len], sizeof(motd) - len - 1, "<style type=^"text/css^">");
len += format(motd[len], sizeof(motd) - len - 1, "body{background-image: url(^"http://i52.tinypic.com/qoukhx.png^");font-family:Tahoma;font-size:15px;color:#FFFFFF;}");
len += format(motd[len], sizeof(motd) - len - 1, "table{font-family:Tahoma;font-size:10px;color:#FFFFFF;}</style>");
len += format(motd[len], sizeof(motd) - len - 1, "<body><center><font face=Verdana size=2><b><br>"); // ^"
len += format(motd[len], sizeof(motd) - len - 1, "<font size=4 color=#7D2579>%s<br>%s<br></font><br><br>", PLUGIN_NAME, nume_host);
len += format(motd[len], sizeof(motd) - len - 1, "Acest server foloseste un nou game play, in care ai nevoie de <font color=#33CC33>XP</font> pentru a avansa in nivel. Daca ai adunat XP-ul suficient, atunci fii sigur ca ai trecut la urmatorul nivel.<br>");
len += format(motd[len], sizeof(motd) - len - 1, "Acum ai %s XP si Level <font color=#7D2579>%d</font>.<br>", xp, nivel_jucator[id]);
len += format(motd[len], sizeof(motd) - len - 1, "Nivelul maxim este <font color=#33CC33>%d</font>.<br><br>", nivel_maxim);
len += format(motd[len], sizeof(motd) - len - 1, "<font color=red>Cum fac XP?</font><br>Este foarte simplu. Trebuie doar sa-ti elimini inamicii.<br>Mai jos este cantitatea de XP pe care o primesti:<br><br>", nivel_maxim);
len += format(motd[len], sizeof(motd) - len - 1, "</center><table align=center width=50%% cellpadding=1 cellspacing=0>");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><th width=40%%>Actiunea<th width=40%%>Arma<th width=40%%>Headshot<th width=40%%>XP");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>Omori un jucator</td><td>Toate</td><td>Nu</td><td>%d</td>", cvar_cache[0]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td></td><td>Toate</td><td>Da</td><td>%d</td>", cvar_cache[1]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td></td><td>HE</td><td>-</td><td>%d</td>", cvar_cache[4]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td></td><td>Cutit</td><td>Nu</td><td>%d</td>", cvar_cache[2]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td></td><td>Cutit</td><td>Da</td><td>%d</td>", cvar_cache[3]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>Bmb Plant</td><td>C4</td><td>-</td><td>%d</td>", cvar_cache[5]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>Bmb Defuse</td><td>C4</td><td>-</td><td>%d</td>", cvar_cache[6]);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>Bmb Explode</td><td>C4</td><td>-</td><td>%d</td>", cvar_cache[7]);
len += format(motd[len], sizeof(motd) - len - 1, "</table></body></html>");
show_motd(id, motd, "General Help");
}
public OpenHealthMotd(id)
{
len = formatex(motd, charsmax(motd), "<html>");
len += format(motd[len], sizeof(motd) - len - 1, "<style type=^"text/css^">");
len += format(motd[len], sizeof(motd) - len - 1, "body{background-image: url(^"http://i52.tinypic.com/qoukhx.png^");font-family:Tahoma;font-size:15px;color:#FFFFFF;}");
len += format(motd[len], sizeof(motd) - len - 1, "table{font-family:Tahoma;font-size:10px;color:#FFFFFF;}</style>");
len += format(motd[len], sizeof(motd) - len - 1, "<body><center><font face=Verdana size=2><b><br>"); // ^"
len += format(motd[len], sizeof(motd) - len - 1, "<font size=4 color=#7D2579>%s<br>", PLUGIN_NAME);
len += format(motd[len], sizeof(motd) - len - 1, "</font><br><br>");
len += format(motd[len], sizeof(motd) - len - 1, "Aici se afla viata pe care o primesti in fiecare runda in functie de level-ul tau.<br>Acum te afli la level ");
len += format(motd[len], sizeof(motd) - len - 1, "<font color=#33CC33>%d</font>.<br><br>", nivel_jucator[id]);
len += format(motd[len], sizeof(motd) - len - 1, "</center><table align=center width=50%% cellpadding=1 cellspacing=0>");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><th width=40%%>LEVEL<th width=40%%>HEALTH");
new i;
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>%s%i%s</td><td>%s%i%s</td>", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", i, nivel_jucator[id] == i ? "</font>" : "", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", levelmoddata[Viata], nivel_jucator[id] == i ? "</font>" : "");
}
len += format(motd[len], sizeof(motd) - len - 1, "</table></body></html>");
show_motd(id, motd, "Help Health");
}
public OpenArmorMotd(id)
{
len = formatex(motd, charsmax(motd), "<html>");
len += format(motd[len], sizeof(motd) - len - 1, "<style type=^"text/css^">");
len += format(motd[len], sizeof(motd) - len - 1, "body{background-image: url(^"http://i52.tinypic.com/qoukhx.png^");font-family:Tahoma;font-size:15px;color:#FFFFFF;}");
len += format(motd[len], sizeof(motd) - len - 1, "table{font-family:Tahoma;font-size:10px;color:#FFFFFF;}</style>");
len += format(motd[len], sizeof(motd) - len - 1, "<body><center><font face=Verdana size=2><b><br>"); // ^"
len += format(motd[len], sizeof(motd) - len - 1, "<font size=4 color=#7D2579>%s<br>", PLUGIN_NAME);
len += format(motd[len], sizeof(motd) - len - 1, "</font><br><br>");
len += format(motd[len], sizeof(motd) - len - 1, "Aici se afla armura pe care o primesti in fiecare runda in functie de level-ul tau.<br>Acum te afli la level ");
len += format(motd[len], sizeof(motd) - len - 1, "<font color=#33CC33>%d</font>.<br><br>", nivel_jucator[id]);
len += format(motd[len], sizeof(motd) - len - 1, "</center><table align=center width=50%% cellpadding=1 cellspacing=0>");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><th width=40%%>LEVEL<th width=40%%>ARMOR");
new i;
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>%s%i%s</td><td>%s%i%s</td>", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", i, nivel_jucator[id] == i ? "</font>" : "", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", levelmoddata[Armura], nivel_jucator[id] == i ? "</font>" : "");
}
len += format(motd[len], sizeof(motd) - len - 1, "</table></body></html>");
show_motd(id, motd, "Help Armor");
}
public OpenSpeedMotd(id)
{
len = formatex(motd, charsmax(motd), "<html>");
len += format(motd[len], sizeof(motd) - len - 1, "<style type=^"text/css^">");
len += format(motd[len], sizeof(motd) - len - 1, "body{background-image: url(^"http://i52.tinypic.com/qoukhx.png^");font-family:Tahoma;font-size:15px;color:#FFFFFF;}");
len += format(motd[len], sizeof(motd) - len - 1, "table{font-family:Tahoma;font-size:10px;color:#FFFFFF;}</style>");
len += format(motd[len], sizeof(motd) - len - 1, "<body><center><font face=Verdana size=2><b><br>"); // ^"
len += format(motd[len], sizeof(motd) - len - 1, "<font size=4 color=#7D2579>%s<br>", PLUGIN_NAME);
len += format(motd[len], sizeof(motd) - len - 1, "</font><br><br>");
len += format(motd[len], sizeof(motd) - len - 1, "Aici se afla viteza pe care o primesti in fiecare runda in functie de level-ul tau.<br>Acum te afli la level ");
len += format(motd[len], sizeof(motd) - len - 1, "<font color=#33CC33>%d</font>.<br><br>", nivel_jucator[id]);
len += format(motd[len], sizeof(motd) - len - 1, "</center><table align=center width=50%% cellpadding=1 cellspacing=0>");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><th width=40%%>LEVEL<th width=40%%>SPPED");
new i;
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>%s%i%s</td><td>%s%i%s</td>", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", i, nivel_jucator[id] == i ? "</font>" : "", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", clamp(levelmoddata[Viteza], 250, 600), nivel_jucator[id] == i ? "</font>" : "");
}
len += format(motd[len], sizeof(motd) - len - 1, "</table></body></html>");
show_motd(id, motd, "Help Speed");
}
public OpenGravityMotd(id)
{
len = formatex(motd, charsmax(motd), "<html>");
len += format(motd[len], sizeof(motd) - len - 1, "<style type=^"text/css^">");
len += format(motd[len], sizeof(motd) - len - 1, "body{background-image: url(^"http://i52.tinypic.com/qoukhx.png^");font-family:Tahoma;font-size:15px;color:#FFFFFF;}");
len += format(motd[len], sizeof(motd) - len - 1, "table{font-family:Tahoma;font-size:10px;color:#FFFFFF;}</style>");
len += format(motd[len], sizeof(motd) - len - 1, "<body><center><font face=Verdana size=2><b><br>"); // ^"
len += format(motd[len], sizeof(motd) - len - 1, "<font size=4 color=#7D2579>%s<br>", PLUGIN_NAME);
len += format(motd[len], sizeof(motd) - len - 1, "</font><br><br>");
len += format(motd[len], sizeof(motd) - len - 1, "Aici se afla gravitatia pe care o primesti in fiecare runda in functie de level-ul tau.<br>Acum te afli la level ");
len += format(motd[len], sizeof(motd) - len - 1, "<font color=#33CC33>%d</font>.<br><br>", nivel_jucator[id]);
len += format(motd[len], sizeof(motd) - len - 1, "</center><table align=center width=50%% cellpadding=1 cellspacing=0>");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><th width=40%%>LEVEL<th width=40%%>GRAVITY");
new i;
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>%s%i%s</td><td>%s%i%s</td>", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", i, nivel_jucator[id] == i ? "</font>" : "", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", clamp(levelmoddata[Gravitatie], 200, 1000), nivel_jucator[id] == i ? "</font>" : "");
}
len += format(motd[len], sizeof(motd) - len - 1, "</table></body></html>");
show_motd(id, motd, "Help Gravity");
}
public OpenNadesMotd(id)
{
len = formatex(motd, charsmax(motd), "<html>");
len += format(motd[len], sizeof(motd) - len - 1, "<style type=^"text/css^">");
len += format(motd[len], sizeof(motd) - len - 1, "body{background-image: url(^"http://i52.tinypic.com/qoukhx.png^");font-family:Tahoma;font-size:15px;color:#FFFFFF;}");
len += format(motd[len], sizeof(motd) - len - 1, "table{font-family:Tahoma;font-size:10px;color:#FFFFFF;}</style>");
len += format(motd[len], sizeof(motd) - len - 1, "<body><center><font face=Verdana size=2><b><br>"); // ^"
len += format(motd[len], sizeof(motd) - len - 1, "<font size=4 color=#7D2579>%s<br>", PLUGIN_NAME);
len += format(motd[len], sizeof(motd) - len - 1, "</font><br><br>");
len += format(motd[len], sizeof(motd) - len - 1, "Aici se afla grenadele pe care o primesti in fiecare runda in functie de level-ul tau.<br>Acum te afli la level ");
len += format(motd[len], sizeof(motd) - len - 1, "<font color=#33CC33>%d</font>.<br><br>", nivel_jucator[id]);
len += format(motd[len], sizeof(motd) - len - 1, "</center><table align=center width=50%% cellpadding=1 cellspacing=0>");
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><th width=40%%>LEVEL<th width=40%%>HE<th width=40%%>FB<th width=40%%>SM");
new i;
for(i = 1; i <= nivel_maxim; i++)
{
ArrayGetArray(levelmod, i, levelmoddata);
len += format(motd[len], sizeof(motd) - len - 1, "<tr align=center><td>%s%i%s</td><td>%i</td><td>%i</td><td>%i</td>", nivel_jucator[id] == i ? "<font color=#33CC33>" : "", i, nivel_jucator[id] == i ? "</font>" : "", levelmoddata[He], levelmoddata[Flash], levelmoddata[Smoke]);
}
len += format(motd[len], sizeof(motd) - len - 1, "</table></body></html>");
show_motd(id, motd, "Help Nades");
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/