Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <engine>
#include <nvault>
#define PREMIUM ADMIN_LEVEL_H
#define VERSION "0.0.1"
#define PLUGIN "4Story mod"
#define MaxLevel 93
new const LEVELS[93] =
{
1000,2250,3500,5000,7000,10000,14000,19000,25000,31000,38000,46000,55000,65000,76000,
88000,101000,115000,130000,146000,174000,192000,211000,231000,252000,274000,297000,321000,346000,373000,400000,
428000,457000,487000,518000,550000,583000,617000,657000,686000,722000,759000,797000,836000,876000,917000,959000,
1002000,1046000,1091000,1137000,1185000,1234000,1284000,1335000,1387000,1440000,1494000,1549000,1605000,1662000,
1719000,1777000,1836000,1896000,1957000,2019000,2082000,2146000,2211000,2277000,2344000,2411000,2479000,2549000,
2620000,2692000,2765000,2839000,2914000,2990000,3067000,3145000,3224000,3304000,3385000,3406700,3551000,3636000,
3700000,3950000,4300000,5000000
}
enum { NONE = 0, Lukostrelec, Bojovnik, Zarikavac, Kouzelnik }
new const postavy[][] = {"Nevybrano",
"Lukostrelec",
"Bojovnik",
"Zarikavac",
"Kouzelnik"
}
new const prefix[] = "!g[4Story]!y"
new zlato[33], stribro[33], bronz[33]
new PlayerXP[33],PlayerLevel[33]
new chat_zpravy[33] = 1, bodyvlp[33]
new g_zdraviLevel[33], g_rychlostLevel[33], g_neviditelnostLevel[33], g_silaLevel[33], g_gravitaceLevel[33], g_armorLevel[33]
new hud_zpravy[33] = 1
new Float:HPcka[33]
new Text_Msg, WinningTeam
new Trie: tc
new expmod
new erychlosti[33], erustu[33], esily[33], chatul[33]
new klasa_gracza[33];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, "uGO" );
register_clcmd("say /player", "function");
register_clcmd("say /menu", "herne_menu");
register_clcmd("say /nastaveni", "nastaveni");
register_clcmd("say /reset", "reset");
register_clcmd("say /vmenu", "v_menu")
register_clcmd("say /shop", "shop")
register_clcmd("say /postavy", "PostavyMenu")
RegisterHam(Ham_Spawn,"player","afterspawn",1);
RegisterHam(Ham_TakeDamage, "player", "nastavDamage", 0)
register_event("CurWeapon" , "cur_weapon" , "be" , "1=1");
register_message(get_user_msgid("TextMsg"), "msgTextMsg");
register_logevent("konec_kola", 2,"0=World triggered", "1=Round_End")
expmod = nvault_open("4expmod")
tc = TrieCreate()
TrieSetCell(tc, "%!MRAD_terwin" , register_cvar("msg_t_win" , "Valorianci vyhrali nad Derionem!"))
TrieSetCell(tc, "%!MRAD_ctwin" , register_cvar("msg_ct_win" , "Derionci vyhrali nad Valorianem!"))
TrieSetCell(tc, "%!MRAD_rounddraw" , register_cvar("msg_rounddraw" , "Nikdo nevyhral!"))
register_message(get_user_msgid("SendAudio"), "Messages_Audio")
Text_Msg = get_user_msgid("TextMsg")
}
public PostavyMenu(id)
{
new menupm = menu_create("Vyber si postavu:", "PostavyMenu_handler");
for(new i=1; i<sizeof postavy; i++)
menu_additem(menupm, postavy[i]);
menu_setprop(menupm, MPROP_EXITNAME, "Zavrit");
menu_setprop(menupm, MPROP_BACKNAME, "Predchozi strana");
menu_setprop(menupm, MPROP_NEXTNAME, "Dalsi strana");
menu_display(id, menupm);
}
public PostavyMenu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
ChatColor(id,"%s Dale", prefix)
menu_display(id, menu);
return PLUGIN_CONTINUE;
}
public vyber_classu(id)
{
new menu = menu_create("Vyber Postav:", "WybierzKlase_Handle");
new klasa[50];
for(new i=1; i<sizeof postavy; i++)
{
menu_additem(menu, klasa);
}
menu_setprop(menu, MPROP_EXITNAME, "Zavrit");
menu_setprop(menu, MPROP_BACKNAME, "Predchozi strana");
menu_setprop(menu, MPROP_NEXTNAME, "Dalsi strana");
menu_display(id, menu);
return PLUGIN_CONTINUE;
}
public WybierzKlase_Handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
for(new i=1; i<sizeof postavy; i++)
{
item = i;
break;
}
}
public konec_kola(id)
{
new vipwin = PlayerLevel[id]*2
new win = PlayerLevel[id]*2
if(get_user_flags(id) & PREMIUM)
{
if(is_user_alive(id))
{
if(chat_zpravy[id] == 1)
{
ChatColor(id,"%s Vyborne ziskal si odmenu za preziti kola. [%i stribra]", prefix, vipwin)
stribro[id] += vipwin
}
}
}
else
{
if(is_user_alive(id))
{
ChatColor(id,"%s Vyborne ziskal si odmenu za preziti kola. [%i stribra]",prefix, win)
stribro[id] += win
}
}
}
public plugin_end()
{
nvault_close(expmod);
}
public afterspawn(id)
{
ChatColor(id,"%s Tumas atributy!",prefix)
dejatributy(id)
}
public shop(id)
{
new espeedcost = PlayerLevel[id]
new esilycost = PlayerLevel[id]*2
new erustucost = PlayerLevel[id]*3
new chatulcost = PlayerLevel[id]*4
static item[64]
formatex(item, charsmax(item), "\y[\g4Story Shop\y]")
new menu = menu_create(item, "shop_handle")
formatex(item, charsmax(item), "\rE\glixir \rr\gychlosti(+50) [Cena %i zlata]", espeedcost)
menu_additem(menu, item, "", 0)
formatex(item, charsmax(item), "\rE\glixir \rs\gily(+3%) [Cena %i zlata]", esilycost)
menu_additem(menu, item, "", 0)
formatex(item, charsmax(item), "\rE\glixir \rr\gustu(+30XP ke vsemu) [Cena %i zlata]", erustucost)
menu_additem(menu, item, "", 0)
formatex(item, charsmax(item), "Zradce Chatul [Cena %i zlata]", chatulcost)
menu_additem(menu, item, "", 0)
formatex(item, charsmax(item), "\yNastaveni \yVyhod")
menu_additem(menu, item, "5", 0)
formatex(item, charsmax(item), "\yZakoupit \rVIP")
menu_additem(menu, item, "6", 0)
menu_display(id, menu, 0)
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_BACKNAME, "Zpet");
menu_setprop(menu, MPROP_NEXTNAME, "Dalsi strana");
menu_setprop(menu, MPROP_EXITNAME, "Ukoncit");
menu_setprop(menu, MPROP_NUMBER_COLOR, "\w");
}
public shop_handle(id, menu, item)
{
switch(item)
{
case 0:
{
if(!erychlosti[id])
{
erychlosti[id] = 1
}
else
{
ChatColor(id,"%s Uz mas koupeny elixir rychlosti!",prefix)
}
}
case 1:
{
if(!esily[id])
{
esily[id] = 1
}
else
{
ChatColor(id,"%s Uz mas koupeny elixir sily!",prefix)
}
}
case 2:
{
if(!erustu[id])
{
erustu[id] = 1
}
else
{
ChatColor(id,"%s Uz mas koupeny elixir rustu!",prefix)
}
}
case 3:
{
if(!chatul[id])
{
chatul[id] = 1
}
else
{
ChatColor(id,"%s Uz si Zradce Chatul!",prefix)
}
}
}
}
public Messages_Audio(Message_Index, Message_Dest, Index)
{
if(!Index)
{
new Audio[14], won_msg[120]
get_msg_arg_string(2, Audio, charsmax(Audio))
if(TrieGetCell(tc, Audio, WinningTeam) && get_pcvar_string(WinningTeam, won_msg, charsmax(won_msg)))
{
if(get_msg_block(Text_Msg) == BLOCK_NOT)
{
set_msg_block(Text_Msg, BLOCK_ONCE)
client_print(0, print_center, "%s", won_msg)
}
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
public client_authorized(id)
{
NactiData(id)
chat_zpravy[id] = 1
hud_zpravy[id] = 1
ChatColor(id,"%s Vitej na serveru!",prefix)
}
public client_disconnect(id)
{
ZapisData(id)
}
public cur_weapon(id)
{
new Float:SPLevel = float(g_rychlostLevel[id])
SPLevel*=2
set_user_maxspeed(id, 250.0+SPLevel)
}
public nastavDamage(id, inflictor, attacker,Float:damage, damagebits)
{
SetHamParamFloat(4,damage+(damage*(g_silaLevel[attacker]*0.015)))
}
public dejatributy(id)
{
new armor = g_armorLevel[id]*2
new hpf = (get_user_health(id)+(g_zdraviLevel[id]*2))
HPcka[id] = float(hpf)
set_pev(id, pev_health, HPcka[id])
cs_set_user_armor(id, armor, CS_ARMOR_VESTHELM)
set_pev(id, pev_gravity, 1-(0.005*g_gravitaceLevel[id]))
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 255-(g_neviditelnostLevel[id]*2))
}
public v_menu(id)
{
new menu=menu_create("\y[Vylepsovaci menu]", "nst_handle")
menu_additem(menu, "\wZdravi")
menu_additem(menu, "\wRychlost")
menu_additem(menu, "\wNeviditelnost")
menu_additem(menu, "\wSila")
menu_additem(menu, "\wGravitace")
menu_additem(menu, "\wArmor^n")
menu_setprop(menu,MPROP_EXITNAME, "Zavrit")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu)
}
public nst_handle(id,menu,item)
{
switch(item)
{
case 0:
{
if(g_rychlostLevel[id] <= 100)
{
if(bodyvlp[id] >= 1)
{
bodyvlp[id]--
g_zdraviLevel[id]++
v_menu(id)
new Float:HPadd = float(get_user_health(id)+2)
set_pev(id, pev_health, HPadd)
}
else
{
ChatColor(id,"%s Nemas dostatek vylepsovacich bodu!",prefix)
}
}
else
{
ChatColor(id,"%s Uz mas maximalni level !",prefix)
}
}
case 1:
{
if(g_rychlostLevel[id] <= 100)
{
if(bodyvlp[id] >= 1)
{
bodyvlp[id]--
g_rychlostLevel[id]++
v_menu(id)
}
else
{
ChatColor(id,"%s Nemas dostatek vylepsovacich bodu!",prefix)
}
}
else
{
ChatColor(id,"%s Uz mas maximalni level !",prefix)
}
}
case 2:
{
if(g_neviditelnostLevel[id] <= 100)
{
if(bodyvlp[id] >= 1)
{
bodyvlp[id]--
g_neviditelnostLevel[id]++
v_menu(id)
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 255-(g_neviditelnostLevel[id]*2))
}
else
{
ChatColor(id,"%s Nemas dostatek vylepsovacich bodu!",prefix)
}
}
else
{
ChatColor(id,"%s Uz mas maximalni level !",prefix)
}
}
case 3:
{
if(g_silaLevel[id] <= 100)
{
if(bodyvlp[id] >= 1)
{
bodyvlp[id]--
g_silaLevel[id]++
v_menu(id)
}
else
{
ChatColor(id,"%s Nemas dostatek vylepsovacich bodu!",prefix)
}
}
else
{
ChatColor(id,"%s Uz mas maximalni level !",prefix)
}
}
case 4:
{
if(g_gravitaceLevel[id] <= 100)
{
if(bodyvlp[id] >= 1)
{
bodyvlp[id]--
g_gravitaceLevel[id]++
v_menu(id)
set_pev(id, pev_gravity, 1-(0.005*g_gravitaceLevel[id]))
}
else
{
ChatColor(id,"%s Nemas dostatek vylepsovacich bodu!",prefix)
}
}
else
{
ChatColor(id,"%s Uz mas maximalni level !",prefix)
}
}
case 5:
{
if(g_armorLevel[id] <= 100)
{
if(bodyvlp[id] >= 1)
{
bodyvlp[id]--
g_armorLevel[id]++
v_menu(id)
}
else
{
ChatColor(id,"%s Nemas dostatek vylepsovacich bodu!",prefix)
}
}
else
{
ChatColor(id,"%s Uz mas maximalni level !",prefix)
}
}
}
return PLUGIN_HANDLED
}
public nastaveni(id)
{
new m = menu_create("Nastaveni","n_handler")
if(chat_zpravy[id] == 0)
{
menu_additem(m,"Zapnout Chat")
}
else
{
menu_additem(m,"Vypnout Chat")
}
if(hud_zpravy[id] == 0)
{
menu_additem(m,"Zapnout HUD zpravy")
}
else
{
menu_additem(m,"Vypnout HUD zpravy")
}
menu_display(id,m)
}
public n_handler(id,menu,item)
{
switch(item)
{
case 0:
{
if(chat_zpravy[id] == 0)
{
chat_zpravy[id] = 1
nastaveni(id)
}
else
{
chat_zpravy[id] = 0
nastaveni(id)
}
}
case 1:
{
if(hud_zpravy[id] == 0)
{
hud_zpravy[id] = 1
nastaveni(id)
}
else
{
hud_zpravy[id] = 0
nastaveni(id)
}
}
}
}
public client_death(attacker, victim, wpnindex, hitplace, TK)
{
new viphsodmena = PlayerLevel[attacker]*4
new hsodmena = PlayerLevel[attacker]*2
new vipodmena = PlayerLevel[attacker]*2
new odmena = PlayerLevel[attacker]*1
if(get_user_team(victim) == 2)
{
if(hitplace == 1)
{
if(get_user_flags(attacker) & PREMIUM)
{
PlayerXP[attacker] += 250
stribro[attacker] += viphsodmena
if(chat_zpravy[attacker] == 1)
{
ChatColor(attacker,"%s Vyborne zabil si Derionce a ziskal si !g250!tXP a !g%i!t stribra!",prefix, viphsodmena)
}
}
else
{
PlayerXP[attacker] += 200
stribro[attacker] += hsodmena
ChatColor(attacker,"%s Vyborne zabil si Derionce a ziskal si !g200!tXP a !g%i!t stribra",prefix, hsodmena)
}
}
else
{
if(get_user_flags(attacker) & PREMIUM)
{
PlayerXP[attacker] += 200
stribro[attacker] += vipodmena
if(chat_zpravy[attacker] == 1)
{
ChatColor(attacker,"%s Vyborne zabil si Derionce a ziskal si !g200!tXP a !g%i!t stribra",prefix, vipodmena)
}
}
else
{
stribro[attacker] += odmena
PlayerXP[attacker] += 150
ChatColor(attacker,"%s Vyborne zabil si Derionce a ziskal si !g150!tXP a !g%i!t stribra",prefix, odmena)
}
}
}
if(get_user_team(victim) == 1)
{
if(hitplace == 1)
{
if(get_user_flags(attacker) & PREMIUM)
{
PlayerXP[attacker] += 250
stribro[attacker] += viphsodmena
if(chat_zpravy[attacker] == 1)
{
ChatColor(attacker,"%s Vyborne zabil si Valoriance a ziskal si !g250!tXP a !g%i!t stribra",prefix, viphsodmena)
}
}
else
{
stribro[attacker] += hsodmena
PlayerXP[attacker] += 200
ChatColor(attacker,"%s Vyborne zabil si Valoriance a ziskal si !g200!tXP a !g%i!t stribra",prefix, hsodmena)
}
}
else
{
if(get_user_flags(attacker) & PREMIUM)
{
stribro[attacker] += vipodmena
PlayerXP[attacker] += 200
if(chat_zpravy[attacker] == 1)
{
ChatColor(attacker,"%s Vyborne zabil si Valoriance a ziskal si !g200!tXP a !g%i!t stribra",prefix, vipodmena)
}
}
else
{
stribro[attacker] += odmena
PlayerXP[attacker] += 150
ChatColor(attacker,"%s Vyborne zabil si Valoriance a ziskal si !g150!tXP a !g%i!t stribra",prefix, odmena)
}
}
}
}
public kontrolalvl(id)
{
if(PlayerLevel[id] == MaxLevel)
{
return PLUGIN_HANDLED;
}
else
{
if(PlayerXP[id] >= LEVELS[PlayerLevel[id]])
{
PlayerLevel[id] += 1;
bodyvlp[id] += 2
v_menu(id)
ChatColor(id,"%s Nyni jsi level %i ",prefix, PlayerLevel[id])
new name[32]
get_user_info(id, "name", name, 31)
ChatColor(0,"%s Hrac %s ziskal level %i ",prefix, name, PlayerLevel[id]);
}
}
return PLUGIN_HANDLED
}
public herne_menu(id)
{
if(is_user_alive(id))
{
new hm = menu_create("Prachy","herne_menu_handle")
menu_additem(hm,"Goldu")
menu_additem(hm,"Stribro")
menu_additem(hm,"Bronzu")
menu_display(id,hm)
}
else
{
ChatColor(id,"%s Na otvereni menu musis byt nazivu",prefix)
}
}
public reset(id)
{
PlayerLevel[id] = 0
PlayerXP[id] = 0
}
public herne_menu_handle(id,menu,item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
switch(item)
{
case 0:
{
PlayerXP[id] += 500
zlato[id]+=3
herne_menu(id)
client_print(id, print_chat, "+3 +500")
}
case 1:
{
stribro[id]+=90
herne_menu(id)
client_print(id, print_chat, "+90")
}
case 2:
{
bronz[id]+=90
herne_menu(id)
client_print(id, print_chat, "+90")
}
}
return PLUGIN_HANDLED
}
public client_PostThink(id)
{
if(bronz[id]>=100)
{
bronz[id]-=100
stribro[id]+=1
}
if(stribro[id]>=100)
{
stribro[id]-=100
zlato[id]+=1
}
kontrolalvl(id)
if(hud_zpravy[id] == 1)
{
hud_status(id)
}
}
public bomb_planted(id)
{
new vipodmena = PlayerLevel[id]*2
new odmena = PlayerLevel[id]
if(get_user_flags(id) & PREMIUM)
{
if(chat_zpravy[id] == 1)
{
ChatColor(id,"%s Vyborne plantnul si bombu, ziskal !g%i !tstribra a 100XP!",prefix, vipodmena)
stribro[id] += vipodmena
PlayerXP[id] += 100
}
}
else
{
ChatColor(id,"%s Vyborne plantnul si bombu, ziskal §g%i !tstribra a !g50!tXP!",prefix, odmena)
stribro[id] += odmena
PlayerXP[id] += 50
}
}
public bomb_defused(id)
{
new vipodmena = PlayerLevel[id]*2
new odmena = PlayerLevel[id]
if(get_user_flags(id) & PREMIUM)
{
if(chat_zpravy[id] == 1)
{
ChatColor(id,"%s Vyborne defusnul si bombu, ziskal si !g%i !tstribra a !g100!tXP !",prefix,vipodmena)
stribro[id] += vipodmena
PlayerXP[id] += 100
}
}
else
{
ChatColor(id,"%s Vyborne defusnul si bombu, ziskal si !g%i !tstribra a !g50!tXP !",prefix,odmena)
stribro[id] += odmena
PlayerXP[id] += 50
}
}
public hud_status(id)
{
new amount = PlayerLevel[id];
set_hudmessage(255, 255, 0, 0.02, 0.15, 0, 6.0, 0.0)
show_hudmessage(id, "[Zlato %i]^n[Stribro %i]^n[Bronz %i]^n[Level %i]^n[XP %i/%i]^n[Body vylepsovani %i]", zlato[id], stribro[id], bronz[id],PlayerLevel[id],PlayerXP[id],LEVELS[amount],bodyvlp[id])
}
public function(id)
{
new menu = menu_create("\rPlayer Menu:", "menu_handler");
new name[32], id_string[5];
new players[32], pnum, i, pid;
get_players(players, pnum);
for( i=0; i<pnum; i++ )
{
pid = players[i];
get_user_name(pid, name, 31);
num_to_str(pid, id_string, 4);
menu_additem(menu, name, id_string);
}
menu_display(id, menu, 0);
}
public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new pid = str_to_num(data);
PlayerXP[pid] += 20000
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public NactiData(id)
{
new vaultkey[64],vaultdata[512];
new authid[64];
get_user_authid(id,authid,63);
format(vaultkey,63,"%s",authid);
nvault_get(expmod,vaultkey,vaultdata,511);
replace_all(vaultdata,256,"#"," ");
new jeden[100],dwa[100],trzy[100],cztery[100],piec[100],szesc[100],siedem[100],osiem[100],dziew[100],dzies[100],jedenascie[100]
parse(vaultdata,jeden,99,dwa,99,trzy,99,cztery,99,piec,99,szesc,99,siedem,99,osiem,99,dziew,99,dzies,99,jedenascie,99)
PlayerLevel[id] = str_to_num(jeden);
PlayerXP[id] = str_to_num(dwa);
stribro[id] = str_to_num(trzy);
zlato[id] = str_to_num(cztery);
bronz[id] = str_to_num(piec);
g_armorLevel[id] = str_to_num(szesc);
g_rychlostLevel[id] = str_to_num(siedem)
g_zdraviLevel[id] = str_to_num(osiem);
g_silaLevel[id] = str_to_num(dziew);
g_gravitaceLevel[id] = str_to_num(dzies)
g_neviditelnostLevel[id] = str_to_num(jedenascie)
}
public ZapisData(id)
{
if ( ! is_user_connected(id) )
return;
new vaultkey[64],vaultdata[512];
new authid[64];
get_user_authid(id,authid,63);
format(vaultkey,63,"%s",authid);
format(vaultdata,511,"%d#%d#%d#%d#%d#%d#%d#%d#%d#%d#%d", PlayerLevel[id], PlayerXP[id], stribro[id], zlato[id], bronz[id], g_armorLevel[id], g_rychlostLevel[id], g_zdraviLevel[id], g_silaLevel[id], g_gravitaceLevel[id], g_neviditelnostLevel[id])
nvault_set(expmod,vaultkey,vaultdata)
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[ 32 ]
static msg[ 191 ]
vformat( msg, 190, input, 3 )
replace_all( msg, 190, "!g", "^4" )
replace_all( msg, 190, "!y", "^1" )
replace_all( msg, 190, "!t", "^3" )
if(id) players[ 0 ] = id; else get_players( players, count, "ch" )
{
for(new i = 0; i < count; i++)
{
if( is_user_connected( players[ i ] ) )
{
message_begin( MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[ i ] )
write_byte( players[ i ] )
write_string( msg )
message_end( )
}
}
}
}