#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fun>
#include <nvault>
#define PLUGIN "XpSystem"
#define VERSION "1.0"
#define AUTHOR "D3luxe"
//--| Flagu' de la VIP
#define VIP_ACCES ADMIN_CVAR
#define FALL_VELOCITY 350.0
//--| Vault
new iVault;
//--| Constante + enum
enum XP_CLASS
{
NumeClasa[ 14 ],
LevelClasa,
VIP_ONLY,
MODEL_VKNIFE[14],
MODEL_PKNIFE[14],
PLAYER_MODEL[14]
};
enum
{
TEAM_T = 1,
TEAM_CT = 2,
TEAM_ALL = 5,
TEAM_START = 6
};
enum
{
AL_NOT = 0,
AL_ALIVE = 1
};
//nu modifica 99999999 e de forma da nu conteaza =]]
new const CustomXP[15] = { 9999999999,100,300,500,800,1500,1700,2000,2100,2500,2700,3000,3500,4000,50000 };
new const ServerName[] = "[Freakz]"
//prea multa lene sa ma gandesc la altceva pt 1 mdl asa ca fac asta ->
new const ModelDeagle[] = "models/xpsystem/v_deagleclass.mdl"
new const V_HECLOWN[] = "models/xpsystem/v_heclown.mdl"
new const W_HECLOWN[] = "models/xpsystem/w_heclown.mdl"
/*0-> nu e clasa vip | 1-> e clasa VIP
models/xpsystem asta e directorul pt knife
la player pui de exemplu : models/player/clasa1/clasa1.mdl le poti schimba tu numele mai jos...
*/
new const Class[][XP_CLASS] =
{
{ "GOKU", 1 , 0, "v_knife1","p_knife1","clasa1" },
{ "FOTBALL", 2, 0, "v_knife2","p_knife2","clasa2" },
{ "FLASH", 3, 0, "v_knife3","p_knife3","clasa3" },
{ "ROCKER", 4,0, "v_knife4","p_knife4","clasa4" },
{ "CLOWN", 5, 0, "v_knife5","p_knife5","clasa5n" },
{ "CATWOMAN", 6, 1,"v_knife6","p_knife6","clasa6" },
{ "DEADPOOL", 7, 0, "v_knife7","p_knife7","clasa7n" },
{ "ALIEN", 8, 0, "v_knife8","p_knife8","clasa8" },
{ "SPIRIT", 9, 0, "v_knife9","p_knife9","clasa9n" },
{ "HITMAN", 10, 0, "v_knife10","p_knife10","clasa10"},
{ "UNDEAD", 11, 0, "v_knife11","p_knife11","clasa11n" },
{ "SOLDIER", 12, 0, "v_knife12","p_knife12","clasa12n" },
{ "OPTIMUS", 13, 0, "v_knife13","p_knife13","clasa13"},
{ "MEGATRON", 14, 1, "v_knife14","p_knife14","clasa14" }
};
//--| Cvar's
new cvar_xp,cvar_winxp,cvar_vhitxp,cvar_vkillxp,cvar_vxphs,cvar_xphs;
//--| Alte bool-uri
new Xp[33],PlayerLevel[33],g_class[33] = -1;
new jumpnum[33] = 0;
new bool:can_take[33],bool:just_once[33];
new bool:dojump[33] = false;
new count_respawn[33];
new bool:rope[33];
new rope_to[33][3];
new Float:rope_totaldis[33];
new beamsprite;
//--| Ham pt resetspeed(cand schimba ala arma)
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("XPSystem by D3luxe","1",FCVAR_SERVER);
//--| longevent + event
register_event("CurWeapon","set_knifemdl","be","1=1");
register_logevent("round_end", 2, "1=Round_End");
//--| Clcmd-uri
//blocam drop la hitman deoarece are multe arme si nu le poate ridica dupa.
register_clcmd("drop","clcmd_drop");
//pt deadpool
register_clcmd("rope_togle","rope_toggle");
register_clcmd("+ropepool","rope_on");
register_clcmd("-ropepool","rope_off");
//gata cu Pool
register_clcmd("cheer","open_xp");
register_clcmd("say /xpmenu","open_xp");
//nu uita sa stergi
register_clcmd("test","give_test");
//--| mesaje blocate-> fire in the fole ^_^
register_message(get_user_msgid("SendAudio"), "block_FITH_audio")
register_message(get_user_msgid("TextMsg"), "message_textmsg")
//--| Ham-uri
RegisterHam(Ham_Killed, "player", "fwdKilled");
RegisterHam(Ham_Player_ResetMaxSpeed,"player","resetMaxSpeed",1);
RegisterHam(Ham_Spawn,"player","fw_spawn",1);
RegisterHam(Ham_TakeDamage,"player","xp_get_dmg");
RegisterHam(Ham_Killed,"player","killxp");
//--| FW
register_forward(FM_SetModel, "fw_SetModel");
//--|Task pt Clown + Alien:O
set_task(1.0,"grenada_clown",_,_,_,"b");
set_task(1.0,"flash_alien",_,_,_,"b");
//--| Cvaruri
cvar_xp = register_cvar("xp_system_kill","1");
cvar_xphs = register_cvar("xp_system_killhs","2");
cvar_winxp = register_cvar("xp_system_win","4");
cvar_vhitxp = register_cvar("xp_vhit","6");
cvar_vkillxp = register_cvar("xp_vkill","1");
cvar_vxphs = register_cvar("xp_vkillhs","2");
//--| Vault
iVault = nvault_open( "XpSystem" );
if( iVault == INVALID_HANDLE )
set_fail_state( "nValut returned invalid handle!")
}
/*Ne luam modelele care ne trebuie

*/
public plugin_precache()
{
precache_model(ModelDeagle);
precache_model(V_HECLOWN);
precache_model(W_HECLOWN);
beamsprite = precache_model("sprites/dot.spr");
precache_sound("weapons/xbow_hit2.wav");
new Txt[ 128 ];
for(new i = 0; i < sizeof(Class); i++)
{
formatex(Txt,charsmax(Txt),"models/player/%s/%s.mdl",Class[i][PLAYER_MODEL],Class[i][PLAYER_MODEL]);
precache_model(Txt);
}
for(new i = 0; i < sizeof(Class); i++)
{
formatex(Txt,charsmax(Txt),"models/xpsystem/%s.mdl",Class[i][MODEL_VKNIFE]);
precache_model(Txt);
}
for(new i = 0; i < sizeof(Class); i++)
{
formatex(Txt,charsmax(Txt),"models/xpsystem/%s.mdl",Class[i][MODEL_PKNIFE]);
precache_model(Txt);
}
}
//asta se sterge
public give_test(id)
Xp[id] += 999999;
//-- |Aici felul in care primeste playerul XP +
dmg de la clase
public xp_get_dmg(victim,inflictor,attacker,Float:damage,Damagebits,bits)
{
if(!is_user_alive(attacker)) return HAM_IGNORED;
if(g_class[attacker] == 5 || g_class[attacker] == 12)
SetHamParamFloat(4,damage*2);
else if(g_class[attacker] == 13)
SetHamParamFloat(4,damage*3);
if(get_user_flags(attacker) & VIP_ACCES)
Xp[attacker]+=get_pcvar_num(cvar_vhitxp);
return HAM_IGNORED;
}
public killxp(victim, attacker, shouldgib)
{
if(!is_user_alive(attacker)) return HAM_IGNORED
if(get_user_flags(attacker) & VIP_ACCES)
{
if(get_pdata_int(victim, 75) == HIT_HEAD)
{
if(get_user_flags(attacker) & VIP_ACCES)
Xp[attacker]+=get_pcvar_num(cvar_vxphs);
else
Xp[attacker]+=get_pcvar_num(cvar_xphs);
}else{
if(get_user_flags(attacker) & VIP_ACCES)
Xp[attacker]+=get_pcvar_num(cvar_vkillxp);
else
Xp[attacker]+=get_pcvar_num(cvar_xp);
}
}
return HAM_IGNORED
}
public round_end()
{
new gplayers[32], num, i,players;
get_players(gplayers, num, "ch");
if(get_player_num(TEAM_T, AL_ALIVE) == 0)
{
for(i = 0; i < num; i++) {
players = gplayers[i];
if(!is_user_connected(players) || !is_user_alive(players))
continue
Xp[players]+=get_pcvar_num(cvar_winxp);
}
}else if(get_player_num(TEAM_CT, AL_ALIVE) == 0){
for(i = 0; i < num; i++) {
players = gplayers[i];
if(!is_user_connected(players) || !is_user_alive(players))
continue;
Xp[players]+=get_pcvar_num(cvar_winxp);
}
}
for(new id = 0;id < get_maxplayers();id++)
{
can_take[id] = false;
just_once[id] = false;
count_respawn[id] = 0;
}
ChatColor(0,"!g%s!yEchipa !team%s !ya castiga runda.",ServerName,get_player_num(TEAM_CT, AL_ALIVE) == 0 ? "T":"CT");
}
//-- |Incepem Meniurile
public open_xp(id)
{
static szText[ 555 char ];
formatex( szText, charsmax( szText ),"\wMeniu \rXP^n\yXP\w : \r%d",Xp[id]);
new menu = menu_create( szText, "xp_handler" );
if(PlayerLevel[id] == 14)
menu_additem(menu, "\yLevel \rMAX", "1", ADMIN_ADMIN);
else{
formatex( szText, charsmax( szText ),"\rLevel \wUP \r%d \y: \r%d \wXP",PlayerLevel[id]+1,CustomXP[PlayerLevel[id]+1]);
menu_additem(menu,szText, "1", 0);
}
menu_additem(menu, "Levele", "2", 0);
menu_additem(menu, "Salveaza XP-ul", "3", 0);
menu_setprop( menu, MPROP_EXITNAME, "Exit")
menu_display( id, menu, 0);
return PLUGIN_HANDLED;
}
public xp_handler(id, menu, item)
{
if(item == MENU_EXIT || !is_user_alive(id))
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
static data[6], name[64], acs, cllbck, key;
menu_item_getinfo(menu, item, acs, data, 5, name, 63, cllbck);
key = str_to_num(data);
switch(key)
{
case 1:
{
if(PlayerLevel[id] == 14) return PLUGIN_HANDLED;
if(Xp[id] >= CustomXP[PlayerLevel[id]+1])
{
Xp[id] -= CustomXP[PlayerLevel[id]+1];
PlayerLevel[id] += 1;
ChatColor(id,"!g%s!yFelicitari ai avansat la nivelul !team%d.",ServerName,PlayerLevel[id]);
}else{
ChatColor(id,"!g%s!yMai ai nevoie de !team%d !gXP.",ServerName,CustomXP[PlayerLevel[id]+1] - Xp[id]);
return PLUGIN_HANDLED;
}
}
case 2: open_levels(id);
case 3: save_menu(id);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public open_levels(id)
{
if(!is_user_alive(id))
{
ChatColor(id,"!g%s!yEsti mort ,nu merge !teammeniul.",ServerName);
return PLUGIN_HANDLED;
}
if(just_once[id])
{
ChatColor(id,"!g%s!yNu poti lua !team2 clase !yin aceeasi runda.",ServerName);
return PLUGIN_HANDLED;
}
static szText[ 555 char ],szNumber[10];
new menu = menu_create("Clase :", "level_handler" );
for(new i = 0; i < sizeof(Class); i++)
{
num_to_str( i, szNumber, charsmax( szNumber ));
if(Class[i][VIP_ONLY] == 1)
{
formatex( szText, charsmax( szText ),"\y[\wVIP ONLY\y]\rNivel \w%d \r[\y%s\r]",Class[i][LevelClasa],Class[i][NumeClasa]);
menu_additem(menu,szText,szNumber, VIP_ACCES);
}else{
formatex( szText, charsmax( szText ),"\rNivel \w%d \r[\y%s\r]",Class[i][LevelClasa],Class[i][NumeClasa]);
menu_additem(menu,szText,szNumber, 0);
}
}
menu_setprop( menu, MPROP_EXITNAME, "Exit")
menu_display( id, menu, 0);
return PLUGIN_HANDLED;
}
public level_handler(id, menu, item)
{
if(item == MENU_EXIT || !is_user_alive(id))
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
static data[6], name[64], acs, cllbck;
menu_item_getinfo(menu, item, acs, data, 5, name, 63, cllbck);
if(PlayerLevel[id] > str_to_num(data))
{
g_class[id] = str_to_num(data);
just_once[id] = true;
set_user_class(id);
ChatColor(id,"!g%s!yAi echipat clasa !team%s !yacum poti deschide meniul cu !ginformatii !ydespre ea.",ServerName,Class[g_class[id]][NumeClasa]);
}else
ChatColor(id,"!g%s!yTrebuie sa ai cel putin level !team%d !ypentru a echipa clasa !g%s.",ServerName,Class[str_to_num(data)][LevelClasa],Class[str_to_num(data)][NumeClasa]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public save_menu(id)
{
new menu = menu_create("Save XP :", "save_handler" );
menu_additem(menu, "Pe nick", "1", 0);
menu_additem(menu, "Pe IP", "2", 0);
menu_additem(menu, "Pe SteamID", "3", 0);
menu_setprop( menu, MPROP_EXITNAME, "Exit")
menu_display( id, menu, 0);
return PLUGIN_HANDLED;
}
public save_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
static data[6], name[64], acs, cllbck, key;
menu_item_getinfo(menu, item, acs, data, 5, name, 63, cllbck);
key = str_to_num(data);
switch(key)
{
case 1: Save(id,1);
case 2: Save(id,2);
case 3: Save(id,3);
}
ChatColor(id,"!g%s!yTocmai ti-ai salvat !teamXp-ul !ysi !teamNivelul.",ServerName);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
/*-- |Start with benefit -- Acum beneficiile |modele etc am decis sa stockez tot intr-un public si sa ii dau drumul

*/
public set_user_class(id)
{
//stergem arma user-ului si ii dam knife ^_^
strip_user_weapons(id);
give_item(id,"weapon_knife");
if(g_class[id] > -1)
cs_set_user_model(id,Class[g_class[id]][PLAYER_MODEL]);
else
cs_reset_user_model(id);
//resetam gravity si speed-ul si tot ce mai trebuie #valoare
set_user_armor(id,0);
set_user_health(id,100);
set_user_maxspeed(id,300.0);
set_user_gravity(id,1.0);
set_user_rendering(id, kRenderFxGlowShell,0,0,0);
/*acm beneficiile pentru fiecare clasa aici e mai mult de scris..*/
switch(g_class[id])
{
/*Fotbal*/
case 1 : {
set_user_armor(id,150);
set_user_maxspeed(id,250.0); //300 e normal deci ramane 250
}
/*Flash*/
case 2 : set_user_maxspeed(id,350.0); //300 normal + 50 = 350
/*Rocker*/
case 3 : {
set_user_health(id,200);
set_user_maxspeed(id,350.0);
}
/*Clown*/
case 4 : set_user_health(id,200);
/*Cat Woman*/
case 5 : {
give_item(id,"weapon_deagle");
cs_set_user_bpammo(id,CSW_DEAGLE,250);
set_user_armor(id,200);
set_user_health(id,500);
set_user_maxspeed(id,400.0);
}
/*DeadPool[am terminat jocul

]*/
case 6 : {
set_user_health(id,300);
set_user_armor(id,100);
set_user_maxspeed(id,400.0);
set_user_gravity(id,0.24);
}
/*Alien*/
case 7 : {
//flash la infinit --> lag so am zis sa pun sa le poata arunca odata la 5 sec..
set_user_health(id,500);
set_user_armor(id,100);
}
/*Spirit*/
case 8 : {
set_user_maxspeed(id,700.0);
set_user_health(id,300);
set_user_rendering(id, kRenderFxGlowShell,0,0,255);
/*nush ce culoare vrei eu am pus albastru
also am dezactivat glow la celelate clase*/
}
/*Hitman*/
case 9 : {
give_item(id,"weapon_awp");
give_item(id,"weapon_m4a1");
give_item(id,"weapon_ak47");
give_item(id,"weapon_g3sg1");
give_item(id,"weapon_sg550");
give_item(id,"weapon_scout");
cs_set_user_bpammo(id,CSW_M4A1,160);
cs_set_user_bpammo(id,CSW_AK47,160);
cs_set_user_bpammo(id,CSW_AWP,100);
cs_set_user_bpammo(id,CSW_G3SG1,100);
cs_set_user_bpammo(id,CSW_SG550,100);
cs_set_user_bpammo(id,CSW_SCOUT,100);
set_user_health(id,200);
set_user_armor(id,300);
set_user_maxspeed(id,350.0);
}
/*Spirit*/
case 10 : {
//nu inteleg la ce te referi prin freezetime -_-
set_user_maxspeed(id,900.0);
set_user_health(id,1000);
}
/*Soldier*/
case 11 : {
set_user_armor(id,800);
set_user_health(id,200);
set_user_gravity(id,0.3);
give_item(id,"weapon_shield");
}
/*Optimus*/
case 12 : {
set_user_armor(id,1500);
set_user_health(id,1000);
set_user_maxspeed(id,900.0);
}
/*Megatron*/
case 13 : {
/*scut? wtf dude tipu deja are niste chestii de zici ca ii rambo...*/
set_user_armor(id,2000);
set_user_health(id,2000);
set_user_maxspeed(id,1000.0);
give_item(id,"weapon_deagle");
give_item(id,"weapon_m249");
cs_set_user_bpammo(id,CSW_DEAGLE,250);
cs_set_user_bpammo(id,CSW_M249,250);
}
}
}
public set_knifemdl(id)
{
if(!is_user_alive(id) || !is_user_connected(id)) return HAM_IGNORED;
if(get_user_weapon(id) == CSW_KNIFE && g_class[id] > -1)
{
new Txt1[128],Txt2[128];
formatex(Txt1,charsmax(Txt1),"models/xpsystem/%s.mdl",Class[g_class[id]][MODEL_VKNIFE]);
formatex(Txt2,charsmax(Txt2),"models/xpsystem/%s.mdl",Class[g_class[id]][MODEL_PKNIFE]);
set_pev(id, pev_viewmodel2,Txt1);
set_pev(id, pev_weaponmodel2,Txt2);
}
if(get_user_weapon(id) == CSW_DEAGLE && g_class[id] == 5 || g_class[id] == 13)
set_pev(id, pev_viewmodel2,ModelDeagle);
if(get_user_weapon(id) == CSW_HEGRENADE && g_class[id] == 4)
set_pev(id, pev_viewmodel2,V_HECLOWN);
return HAM_IGNORED;
}
public fw_SetModel(ent, const model[])
{
new id = pev(ent, pev_owner)
if(!pev_valid(ent) || !equal(model[9], "hegrenade.mdl") || g_class[id] != 4)
return FMRES_IGNORED
static classname[32]; pev(ent, pev_classname, classname, 31)
if(equal(classname, "grenade"))
{
engfunc(EngFunc_SetModel, ent,W_HECLOWN);
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public resetMaxSpeed(id)
{
if(is_user_alive(id))
{
if(g_class[id] == 1)
set_user_maxspeed(id,250.0);
else if(g_class[id] == 2 || g_class[id] == 3 || g_class[id] == 9)
set_user_maxspeed(id,350.0);
else if(g_class[id] == 5)
set_user_maxspeed(id,400.0);
else if(g_class[id] == 8)
set_user_maxspeed(id,700.0);
else if(g_class[id] == 10 || g_class[id] == 12)
set_user_maxspeed(id,900.0);
else if(g_class[id] == 13)
set_user_maxspeed(id,1000.0);
}
}
public grenada_clown()
{
/*Bon,facem un loop si vedem daca bulanjiu e clown -_-*/
new szPlayers[32],bulanjiu,num;
get_players(szPlayers,num,"c");
for(new i = 0 ; i < num ; i++)
{
bulanjiu = szPlayers[i];
if(!is_user_alive(bulanjiu) || !is_user_connected(bulanjiu)) continue;
if(g_class[bulanjiu] == 4 && get_user_weapon(bulanjiu) != CSW_HEGRENADE)
give_item(bulanjiu,"weapon_hegrenade");
}
}
public flash_alien()
{
/*Lafel ca la ala de sus... -_-*/
new szPlayers[32],bulanjiu,num;
get_players(szPlayers,num,"c");
for(new i = 0 ; i < num ; i++)
{
bulanjiu = szPlayers[i];
if(!is_user_alive(bulanjiu) || !is_user_connected(bulanjiu)) continue;
if(g_class[bulanjiu] == 7 && get_user_weapon(bulanjiu) != CSW_FLASHBANG && !can_take[bulanjiu])
{
can_take[bulanjiu] = true;
give_item(bulanjiu,"weapon_flashbang");
set_task(5.0,"permite_flash",bulanjiu);
}
}
}
public permite_flash(id) can_take[id] = false;
public fw_spawn(id)
{
if(is_user_alive(id) && is_user_connected(id) && g_class[id] > -1)
set_user_class(id);
}
//aici extra-jump
public client_PreThink(id)
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE
new nbut = get_user_button(id)
new obut = get_user_oldbutton(id)
if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(g_class[id] == 5 && jumpnum[id] < 3
|| g_class[id] == 7 && jumpnum[id] < 9
|| g_class[id] == 13 && jumpnum[id] < 14)
{
dojump[id] = true
jumpnum[id]++
return PLUGIN_CONTINUE
}
}
if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
{
jumpnum[id] = 0
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public client_PostThink(id)
{
if(!is_user_alive(id)) return PLUGIN_CONTINUE
if(g_class[id] != 5 || g_class[id] != 7 || g_class[id] != 13) return PLUGIN_CONTINUE
if(dojump[id] == true)
{
new Float:velocity[3]
entity_get_vector(id,EV_VEC_velocity,velocity)
velocity[2] = random_float(265.0,285.0)
entity_set_vector(id,EV_VEC_velocity,velocity)
dojump[id] = false
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
//rope pt deadpool nu mere fara bind ^_^.
public rope_toggle(id)
{
if(rope[id])
rope_off(id)
else
rope_on(id)
return PLUGIN_HANDLED
}
public rope_on(id)
{
if(g_class[id] != 6 || !is_user_alive(id))
return PLUGIN_HANDLED
if(rope[id])
return PLUGIN_HANDLED
set_task(0.1,"rope_prethink",id+100000,"",0,"b")
rope[id]=true
rope_to[id][0]=999999
rope_prethink(id+100000)
emit_sound(id,CHAN_VOICE,"weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_HANDLED
}
public rope_off(id)
{
rope[id]=false
return PLUGIN_HANDLED
}
public rope_prethink(id)
{
id -= 100000
if(!is_user_alive(id))
rope[id]=false
if(!rope[id])
{
remove_task(id+100000)
return PLUGIN_HANDLED
}
//Get Id's origin
static origin1[3]
get_user_origin(id,origin1)
static Float:origin1_F[3]
origin1_F[0] = float(origin1[0])
origin1_F[1] = float(origin1[1])
origin1_F[2] = float(origin1[2])
//Check to see if this is the first time prethink is being run
if(rope_to[id][0]==999999)
{
static origin2[3]
get_user_origin(id,origin2,3)
rope_to[id][0]=origin2[0]
rope_to[id][1]=origin2[1]
rope_to[id][2]=origin2[2]
static Float:origin2_F[3]
origin2_F[0] = float(origin2[0])
origin2_F[1] = float(origin2[1])
origin2_F[2] = float(origin2[2])
static Float:distance[3]
distance[0] = floatabs(origin1_F[0] - origin2_F[0])
distance[1] = floatabs(origin1_F[1] - origin2_F[1])
distance[2] = floatabs(origin1_F[2] - origin2_F[2])
rope_totaldis[id] = floatsqroot(distance[0]*distance[0] + distance[1]*distance[1] + distance[2]*distance[2])
}
//Create green beam
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(1) //TE_BEAMENTPOINT
write_short(id) // start entity
write_coord(rope_to[id][0])
write_coord(rope_to[id][1])
write_coord(rope_to[id][2])
write_short(beamsprite)
write_byte(1) // framestart
write_byte(1) // framerate
write_byte(1) // life in 0.1's
write_byte(5) // width
write_byte(0) // noise
write_byte(0) // red
write_byte(255) // green
write_byte(0) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
//Calculate Velocity
static Float:velocity[3]
get_velo(id,velocity)
static Float:velocity2[3]
velocity2[0] = (rope_to[id][0] - origin1_F[0]) * 3.0
velocity2[1] = (rope_to[id][1] - origin1_F[1]) * 3.0
static Float:y
y = velocity2[0]*velocity2[0] + velocity2[1]*velocity2[1]
static Float:x
x = (5.0 * 20.0) / floatsqroot(y)
velocity[0] += velocity2[0]*x
velocity[1] += velocity2[1]*x
if(rope_to[id][2] - origin1_F[2] >= rope_totaldis[id] && velocity[2]<0.0) velocity[2] *= -1
set_velo(id,velocity)
return PLUGIN_CONTINUE
}
/*Acum respawn-ul ... asta ii ultimu

*/
public fwdKilled(victim,attacker,iShouldGib)
{
if(!is_user_connected(victim)) return HAM_IGNORED;
if(g_class[victim] == 8 && count_respawn[victim] < 5)
{
set_task(1.0,"respawn",victim);
count_respawn[victim]++
}else if(g_class[victim] == 10 && count_respawn[victim] < 10) {
set_task(1.0,"respawn",victim);
count_respawn[victim]++
}
return HAM_IGNORED;
}
public respawn(id) ExecuteHamB(Ham_CS_RoundRespawn,id);
//-- |Save Type 1-> nick || 2-> ip || 3-> steamid
public Save(id,type)
{
static vaultkey[64],szData[ 256 ],iTimestamp;
new name[33],Ip[33],SteamID[33];
formatex( szData, sizeof ( szData ) -1, "%i#%i#", Xp[ id ] ,PlayerLevel[ id ]);
get_user_name(id,name,sizeof(name)-1);
get_user_ip(id,Ip,sizeof(Ip)-1);
get_user_authid(id,SteamID,sizeof(SteamID)-1);
if(nvault_lookup( iVault, name, szData, sizeof ( szData ) -1, iTimestamp ))
nvault_remove( iVault ,name );
else if(nvault_lookup( iVault, Ip, szData, sizeof ( szData ) -1, iTimestamp ))
nvault_remove( iVault ,Ip );
else if(nvault_lookup( iVault, SteamID, szData, sizeof ( szData ) -1, iTimestamp ))
nvault_remove( iVault ,SteamID );
if(type == 1) {
formatex(vaultkey,63,"%s-XP",name);
nvault_set( iVault,name, szData );
}else if(type == 2) {
formatex(vaultkey,63,"%s-XP",Ip);
nvault_set( iVault,Ip, szData );
}else if(type == 3) {
formatex(vaultkey,63,"%s-XP",SteamID);
nvault_set( iVault,SteamID, szData );
}
}
/*daca a salvat bine daca nu imi pare rau pentru el

*/
public Load(id)
{
static vaultkey[64],szData[ 256 ],iTimestamp;
new name[33],Ip[33],SteamID[33];
static Xp[ 15 ],Nivel[15];
if(nvault_lookup( iVault, name, szData, sizeof ( szData ) -1, iTimestamp )){
replace_all(szData, 255, "#", " ");
nvault_get(iVault,vaultkey,szData,255)
formatex(vaultkey,63,"%s-XP",name)
formatex(szData,255,"%i#%i#",Xp[id],PlayerLevel[id])
nvault_get(iVault,vaultkey,szData,255)
replace_all(szData, 255, "#", " ");
parse( szData, Xp, sizeof ( Xp ) -1 ,Nivel,sizeof(Nivel)-1);
Xp[ id ] = str_to_num( Xp );
PlayerLevel[ id ] = str_to_num( Nivel);
return;
}else if(nvault_lookup( iVault, Ip, szData, sizeof ( szData ) -1, iTimestamp )){
replace_all(szData, 255, "#", " ");
nvault_get(iVault,vaultkey,szData,255)
formatex(vaultkey,63,"%s-XP",Ip)
formatex(szData,255,"%i#%i#",Xp[id],PlayerLevel[id])
nvault_get(iVault,vaultkey,szData,255)
replace_all(szData, 255, "#", " ");
parse( szData, Xp, sizeof ( Xp ) -1 ,Nivel,sizeof(Nivel)-1);
Xp[ id ] = str_to_num( Xp );
PlayerLevel[ id ] = str_to_num( Nivel);
return;
}else if(nvault_lookup( iVault, SteamID, szData, sizeof ( szData ) -1, iTimestamp )){
replace_all(szData, 255, "#", " ");
nvault_get(iVault,vaultkey,szData,255)
formatex(vaultkey,63,"%s-XP",SteamID)
formatex(szData,255,"%i#%i#",Xp[id],PlayerLevel[id])
nvault_get(iVault,vaultkey,szData,255)
replace_all(szData, 255, "#", " ");
parse( szData, Xp, sizeof ( Xp ) -1 ,Nivel,sizeof(Nivel)-1);
Xp[ id ] = str_to_num( Xp );
PlayerLevel[ id ] = str_to_num( Nivel);
return;
}
}
public plugin_end() nvault_close(iVault);
public client_disconnect(id)
{
g_class[id] = -1;
jumpnum[id] = 0
dojump[id] = false
}
public client_putinserver(id)
{
g_class[id] = -1;
jumpnum[id] = 0
dojump[id] = false
if(!is_user_bot(id))
Load(id);
}
//-- |Stock-uri
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, "!team", "^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();
}
}
}
}
stock get_player_num(team, alive)
{
static player_num
player_num = 0
for(new i = 0; i < get_maxplayers(); i++)
{
if(!is_user_connected(i))
continue
if(alive == AL_NOT)
{
if(is_user_alive(i))
continue
}else if(alive == AL_ALIVE) {
if(!is_user_alive(i))
continue
}
if(team == TEAM_ALL)
{
if(cs_get_user_team(i) == CS_TEAM_UNASSIGNED || cs_get_user_team(i) == CS_TEAM_SPECTATOR)
continue
} else if(team == TEAM_T) {
if(cs_get_user_team(i) != CS_TEAM_T)
continue
} else if(team == TEAM_CT) {
if(cs_get_user_team(i) != CS_TEAM_CT)
continue
}
player_num++
}
return player_num
}
public message_textmsg()
{
static textmsg[22]
get_msg_arg_string(2, textmsg, sizeof textmsg - 1)
//Block "Fire in the hole!" text
if(get_msg_args() == 5)
{
if(get_msg_argtype(5) == ARG_STRING)
{
new value5[64]
get_msg_arg_string(5 ,value5 ,63)
if(equal(value5, "#Fire_in_the_hole"))
{
return PLUGIN_HANDLED
}
}
}
else if(get_msg_args() == 6)
{
if(get_msg_argtype(6) == ARG_STRING)
{
new value6[64]
get_msg_arg_string(6 ,value6 ,63)
if(equal(value6 ,"#Fire_in_the_hole"))
{
return PLUGIN_HANDLED
}
}
}
return PLUGIN_CONTINUE
}
public block_FITH_audio(msg_id, msg_dest, entity)
{
if(get_msg_args() == 3)
{
if(get_msg_argtype(2) == ARG_STRING)
{
new value2[64];
get_msg_arg_string(2 ,value2 ,63);
if(equal(value2 ,"%!MRAD_FIREINHOLE"))
{
return PLUGIN_HANDLED;
}
}
}
return PLUGIN_CONTINUE;
}
public clcmd_drop(id)
{
if(g_class[id] == 9)
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public set_velo(id,Float:velocity[3]) return set_user_velocity(id,velocity);
public get_velo(id,Float:velocity[3]) return get_user_velocity(id,velocity);
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par }
*/