#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <cstrike>
#include <dhudmessage>
#define MAXZONAK 100
#define ZONAMUTATAS 3333
#define TASKRUSH 4444
#define UnitsToMeters(%1) (%1*0.0254) //Unitot átrakja méterré!
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define write_coord_f(%1) ( engfunc( EngFunc_WriteCoord, %1 ) )
#define null_vector ( Float:{ 0.0, 0.0, 0.0 } )
enum ZONAMOD
{
SEMMI,
OLES,
RUSH
}
enum CSAPATOK
{
MINDENKI,
TE,
CT
}
new tipus[ZONAMOD] = { SOLID_NOT, SOLID_TRIGGER, SOLID_TRIGGER }
new zonaneve[ZONAMOD][] = { "zona_nincs", "zona_oles", "zona_rush"}
new zonamod[ZONAMOD][] = { "NINCS", "JATEKOS MEGOLESE", "RUSH ZONA"}
new csapatneve[CSAPATOK][] = { "zona_mindenki", "zona_te", "zona_ct"}
new celcsapat[CSAPATOK][] = { "MINDENKI", "TERRORISTAK", "ZSARUK"}
new zone_color_red[3] = { 255, 0, 0 }
new zone_color_green[3] = { 255, 255, 0 }
new zone_color_blue[3] = { 0, 0, 255 }
new zonaszin[ZONAMOD][3] =
{
{ 255, 0, 255 },
{ 255, 0, 0 },
{ 0, 255, 0 }
}
new szerkeszto = 0
new zona[MAXZONAK]
new maxzonak
new ezazona
new kordinata = 0 // 0 - X | 1 - Y | 2 - Z
new kordinatak[3][] = { "X", "Y", "Z" }
new alaptavolsag=10 //Unitba kell megadni!
new spr_dot
new light
new smoke
new villamlas
new g_screenfade
new bool:rushmehet
new cvar_alivenum
new cvar_time
new cvar_menusounds
new cvar_colorchat
new cvar_thunder
public plugin_init()
{
register_plugin("Anti-Rush", "2.8", "kiki - hlmod.hu")
register_cvar("Rush Vedo", "By kiki33", FCVAR_SERVER)
register_clcmd("say /rush", "rushmenu", ADMIN_MENU)
register_clcmd("say_team /rush", "rushmenu", ADMIN_MENU)
register_clcmd("say /antirush", "rushmenu", ADMIN_MENU)
register_clcmd("say_team /antirush", "rushmenu", ADMIN_MENU)
register_clcmd("antirush", "rushmenu", ADMIN_MENU)
register_logevent( "eRound_start", 2, "1=Round_Start" );
register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL")
register_logevent("eRoundEnd", 2, "1=Round_End")
register_forward(FM_Touch, "fw_touch")
g_screenfade = get_user_msgid("ScreenFade")
cvar_alivenum = register_cvar("rush_alive_players", "2") //Ha ketto vagy kevesebb terrorista el mehet a rush
cvar_time = register_cvar("rush_time", "60.0") //Mennyi ido mulva lehessen korkezdestol rusholni. Erteke FLOAT!!!
cvar_menusounds = register_cvar("rush_menusounds", "1") //Menuben a gombok nyomasara hangok jatszodnak le. Bekapcsolasa ajanlott! 1:be | 0:ki
cvar_colorchat = register_cvar("rush_colorchat", "1"); //Színes chat üzenetek. 0:kikapcsolva 1: bekapcsolva
cvar_thunder = register_cvar("rush_thundereffect", "0"); //Villámlás effekt őlős zónához. 0: kikapcsolva 1: bekapcsolva
set_task(1.0, "zonakbetoltese")
}
public plugin_precache()
{
villamlas = precache_sound("ambience/thunder_clap.wav");
precache_model("models/gib_skull.mdl")
//precache_model("sprites/antirush/antirush.spr") HAMAROSAN
light = precache_model("sprites/lgtning.spr")
smoke = precache_model("sprites/steam1.spr")
spr_dot = precache_model("sprites/dot.spr")
}
public client_disconnect(id)
{
if (id == szerkeszto) zonakeltuntetese()
}
public zonakmentese(id)
{
new zonafajl[200]
new palya[50]
get_configsdir(zonafajl, 199)
format(zonafajl, 199, "%s/antirush_by_kiki", zonafajl)
if (!dir_exists(zonafajl)) mkdir(zonafajl)
get_mapname(palya, 49)
format(zonafajl, 199, "%s/%s.kordinatak", zonafajl, palya)
delete_file(zonafajl)
zonakereses()
new szoveg[120];
format(szoveg, 119, "; Ez a konfig a %s palyahoz tartozik!", palya)
write_file(zonafajl, "; Anti-Rush By kiki - hlmod.hu")
write_file(zonafajl, szoveg)
write_file(zonafajl, "")
for(new i = 0; i < maxzonak; i++)
{
new z = zona[i]
new zm = pev(z, pev_iuser1)
new csp = pev(z, pev_iuser2)
new Float:pos[3]
pev(z, pev_origin, pos)
new Float:mins[3], Float:maxs[3]
pev(z, pev_mins, mins)
pev(z, pev_maxs, maxs)
new output[1200];
format(output, 1199, "%s %s", zonaneve[ZONAMOD:zm], csapatneve[CSAPATOK:csp])
format(output, 1199, "%s %.1f %.1f %.1f", output, pos[0], pos[1], pos[2])
format(output, 1199, "%s %.0f %.0f %.0f", output, mins[0], mins[1], mins[2])
format(output, 1199, "%s %.0f %.0f %.0f", output, maxs[0], maxs[1], maxs[2])
write_file(zonafajl, output)
}
if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t Sikeres mentés...")
else client_print(id, print_chat, "[ANTI-RUSH] Sikeres mentés...")
}
public zonakbetoltese()
{
new zonafajl[200]
new palya[50]
get_configsdir(zonafajl, 199)
format(zonafajl, 199, "%s/antirush_by_kiki", zonafajl)
get_mapname(palya, 49)
format(zonafajl, 199, "%s/%s.kordinatak", zonafajl, palya)
if (!file_exists(zonafajl))
{
log_to_file("ANTIRUSH-KIKI.log", "Nem talalok %s-en mentett zonakat", palya);
return
}
new input[1200], line = 0, len
while( (line = read_file(zonafajl , line , input , 127 , len) ) != 0 )
{
if (!strlen(input) || (input[0] == ';')) continue;
new data[20], zm = 0, csp = 0
new Float:mins[3], Float:maxs[3], Float:pos[3]
strbreak(input, data, 20, input, 1199)
zm = -1
for(new i = 0; ZONAMOD:i < ZONAMOD; ZONAMOD:i++)
{
if (equal(data, zonaneve[ZONAMOD:i])) zm = i;
}
strbreak(input, data, 20, input, 1199)
csp = -1
for(new i = 0; CSAPATOK:i < CSAPATOK; CSAPATOK:i++)
{
if (equal(data, csapatneve[CSAPATOK:i])) csp = i;
}
if (zm == -1 || csp == -1)
{
log_to_file("ANTIRUSH-KIKI.log", "Felismerhetetlen sor: %s. Tovabblepes...", data);
continue;
}
strbreak(input, data, 20, input, 1199); pos[0] = str_to_float(data);
strbreak(input, data, 20, input, 1199); pos[1] = str_to_float(data);
strbreak(input, data, 20, input, 1199); pos[2] = str_to_float(data);
strbreak(input, data, 20, input, 1199); mins[0] = str_to_float(data);
strbreak(input, data, 20, input, 1199); mins[1] = str_to_float(data);
strbreak(input, data, 20, input, 1199); mins[2] = str_to_float(data);
strbreak(input, data, 20, input, 1199); maxs[0] = str_to_float(data);
strbreak(input, data, 20, input, 1199); maxs[1] = str_to_float(data);
strbreak(input, data, 20, input, 1199); maxs[2] = str_to_float(data);
zonakeszites(pos, mins, maxs, zm, csp);
}
zonakereses()
zonakeltuntetese()
}
public eRoundEnd()
{
if(zonaszam() >= 1)
{
rushmehet=true
}
}
public eRound_start()
{
if(zonaszam() >= 1)
{
rushmehet=false;
if(task_exists(TASKRUSH))
{
remove_task(TASKRUSH)
}
set_task(get_pcvar_float(cvar_time), "rush_mehet", TASKRUSH)
new mennyi = floatround(get_pcvar_float(cvar_time))
new players[32], num
get_players(players,num)
for(new i = 0; i < num; i++)
{
if(get_user_team(players[i]) == 2)
{
if(get_pcvar_num(cvar_colorchat)) print_color(players[i], "!g[ANTI-RUSH]!t %d másodpercig nem rusholhatsz!", mennyi)
else client_print(players[i], print_chat, "[ANTI-RUSH] %d másodpercig nem rusholhatsz!", mennyi)
}
}
}
}
public bomb_planted()
{
if(zonaszam() >= 1)
{
rush_mehet()
}
}
public rush_mehet()
{
rushmehet = true;
if(task_exists(TASKRUSH))
{
remove_task(TASKRUSH)
}
new players[32], num
get_players(players,num)
for(new i = 0; i < num; i++)
{
if(is_user_connected(players[i]))
{
set_dhudmessage(255, 255, 0, -1.0, 0.3, 0, 6.0, 6.0)
show_dhudmessage(players[i], "A Ct-k rusholhatnak!")
}
}
}
public fw_touch(zona, player)
{
if (szerkeszto) return FMRES_IGNORED
if (!pev_valid(zona) || !is_user_connected(player))
return FMRES_IGNORED
if(zonaszam() >= 1)
{
static classname[33]
pev(player, pev_classname, classname, 32)
if (!equal(classname, "player"))
return FMRES_IGNORED
pev(zona, pev_classname, classname, 32)
if (!equal(classname, "rushzona"))
return FMRES_IGNORED
new csapat = get_user_team(player)
new playerek[32], pnum,tt_num,ct_num
get_players(playerek,pnum)
for(new i=0;i<pnum;i++) {
if(is_user_alive(playerek[i])) {
if(cs_get_user_team(playerek[i])==CS_TEAM_T) tt_num++
else if(cs_get_user_team(playerek[i])==CS_TEAM_CT) ct_num++
}
}
if (csapat == 2 && tt_num <= get_pcvar_num(cvar_alivenum) && rushmehet == false)
{
rush_mehet()
return FMRES_IGNORED
}
if(csapat == 1 && ct_num <= get_pcvar_num(cvar_alivenum) && rushmehet == false)
{
rush_mehet()
return FMRES_IGNORED
}
if(rushmehet == false)
{
zonastuff(player, zona)
}
}
return FMRES_IGNORED
}
public zonastuff(jatekos, zona)
{
new ez = pev(zona, pev_iuser1)
new csap = pev(zona, pev_iuser2)
new csapat = get_user_team(jatekos)
if(ZONAMOD:ez == OLES && is_user_alive(jatekos))
{
if(CSAPATOK:csap == MINDENKI || csapat == 1 && CSAPATOK:csap == TE || csapat == 2 && CSAPATOK:csap == CT)
{
if(get_pcvar_num(cvar_thunder))
{
new j_poz[3], coord[3]
get_user_origin(jatekos,j_poz);
coord[0] = j_poz[0] + 150;
coord[1] = j_poz[1] + 150;
coord[2] = j_poz[2] + 800;
create_thunder(coord,j_poz);
spawnStaticSound( jatekos, j_poz, villamlas, VOL_NORM, ATTN_NORM, PITCH_NORM, .flags = 0 );
user_kill(jatekos)
}
else user_kill(jatekos)
if(get_pcvar_num(cvar_colorchat)) print_color(jatekos, "!g[ANTI-RUSH]!t Meghaltál mert rusholni próbáltál!")
else client_print(jatekos, print_chat, "[ANTI-RUSH] Meghaltál mert rusholni próbáltál!")
}
}
if(ZONAMOD:ez == RUSH && is_user_alive(jatekos))
{
if(CSAPATOK:csap == MINDENKI || (csapat == 1) && (CSAPATOK:csap == TE) || (csapat == 2) && (CSAPATOK:csap == CT))
{
new Float: velocity[3]
new Float: DW
pev(jatekos,pev_velocity,velocity)
DW=vector_length ( velocity )+0.0001
velocity[0]=(velocity[0]/DW)*(-500.0)
velocity[1]=(velocity[1]/DW)*(-500.0)
if(velocity[2]<0) velocity[2]=velocity[2]*(-1.0)+15.0
set_pev(jatekos,pev_velocity,velocity)
message_begin(MSG_ONE_UNRELIABLE, g_screenfade, {0,0,0}, jatekos)
write_short(1<<12)
write_short(5)
write_short(0x0000)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(255)
message_end()
}
}
}
public zonakereses()
{
new entity = -1
maxzonak = 0
while( (entity = fm_find_ent_by_class(entity, "rushzona")) )
{
zona[maxzonak] = entity
maxzonak++
}
}
public zonakmutatasa()
{
zonakereses()
for(new i = 0; i < maxzonak; i++)
{
new z = zona[i];
remove_task(ZONAMUTATAS + z)
set_pev(z, pev_solid, SOLID_NOT)
set_task(0.2, "mutasdazonakat", ZONAMUTATAS + z, _, _, "b")
}
}
public zonakeltuntetese()
{
szerkeszto = 0
for(new i = 0; i < maxzonak; i++)
{
new id = pev(zona[i], pev_iuser1)
set_pev(zona[i], pev_solid, tipus[ZONAMOD:id])
remove_task(ZONAMUTATAS + zona[i])
}
}
public rushmenu(id)
{
if (get_user_flags(id) & ADMIN_RCON)
{
szerkeszto = id
zonakereses();
zonakmutatasa();
set_task(0.1, "rushmenunyitas", id)
}
return PLUGIN_HANDLED
}
public rushmenunyitas(id)
{
new item1[1024], item2[1024], palya[50];
get_mapname(palya, 49);
format(item1,
1023,
"\yAnti-Rush By kiki | www.hlmod.hu^n\wTalált zónák: \r%d\w | Pálya: \r%s", maxzonak, palya
) format(item2,
1023,
"\yAnti-Rush By kiki | www.hlmod.hu^n\wTalált zónák: \r%d\w | Pálya: \r%s^n\wZóna Index: \r%d", maxzonak, palya, ezazona
)
if(maxzonak <= 0)
{
new menu = menu_create(item1, "alap_handler");
menu_additem( menu, "\wÚj zóna készítése", "a", 0 );
menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
menu_setprop( menu, MPROP_NEXTNAME, "Következő" );
menu_setprop( menu, MPROP_BACKNAME, "Vissza" );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0 );
}
else
{
new menu = menu_create(item2, "alap_handler");
new item3[120];
format(item3, 119, "\wEnnek a zónának a szerkesztése: %d", ezazona)
menu_additem( menu, "Új zóna készítése", "a", 0 );
menu_addblank( menu, 0);
menu_additem( menu, item3, "b", 0 );
menu_additem( menu, "Előző zóna", "b", 0 );
menu_additem( menu, "Következő zóna", "b", 0 );
menu_additem( menu, "Kijelölt zóna \rtörlése", "b", 0 );
menu_additem( menu, "Összes zóna mentése", "b", 0 );
menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
menu_setprop( menu, MPROP_NEXTNAME, "Következő" );
menu_setprop( menu, MPROP_BACKNAME, "Vissza" );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0 );
}
if(get_pcvar_num(cvar_menusounds)) client_cmd(id, "spk sound/buttons/blip1.wav")
}
public alap_handler(id, menu, item)
{
if ( item == MENU_EXIT )
{
szerkeszto = 0
zonakeltuntetese()
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new szData[6], szName[64];
new item_access, item_callback;
menu_item_getinfo( menu, item, item_access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
switch( szData[0] )
{
case 'a':
{
switch( item )
{
case 0:
{
if (maxzonak < MAXZONAK - 1)
{
ujzonajatekospoz(id);
zonakmutatasa();
rushmenunyitas(id);
} else
{
if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t Nem lehet több zónát létrehozni!");
else client_print(id, print_chat, "[ANTI-RUSH] Nem lehet több zónát létrehozni!")
rushmenunyitas(id);
}
menu_destroy( menu );
return PLUGIN_HANDLED;
}
}
}
case 'b':
{
switch( item )
{
case 1:
{
if (fm_is_valid_ent(zona[ezazona])) szerkesztesmenu(id); else rushmenunyitas(id);
}
case 2:
{
ezazona = (ezazona > 0) ? ezazona - 1 : ezazona;
rushmenunyitas(id)
}
case 3:
{
ezazona = (ezazona < maxzonak - 1) ? ezazona + 1 : ezazona;
rushmenunyitas(id)
}
case 4:
{
zonatorlese(id);
}
case 5:
{
zonakmentese(id)
rushmenunyitas(id)
}
}
}
case 't':
{
switch( item )
{
case 0:
{
if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t Nem törölted ezt a zónát.");
else client_print(id, print_chat, "[ANTI-RUSH] Nem törölted ezt a zónát.")
rushmenunyitas(id)
}
case 1:
{
if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t A zóna törlése sikeres.");
else client_print(id, print_chat, "[ANTI-RUSH] A zóna törlése sikeres.")
fm_remove_entity(zona[ezazona])
ezazona--;
if (ezazona < 0) ezazona = 0;
zonakereses()
rushmenunyitas(id)
}
}
}
case 's':
{
switch( item )
{
case 0:
{
new zm = -1
zm = pev(zona[ezazona], pev_iuser1)
if (ZONAMOD:zm == RUSH) zm = 0; else zm++;
set_pev(zona[ezazona], pev_iuser1, zm)
szerkesztesmenu(id)
}
case 1:
{
new csp = -1
csp = pev(zona[ezazona], pev_iuser2)
if (CSAPATOK:csp == CT) csp = 0;
else csp++;
set_pev(zona[ezazona], pev_iuser2, csp)
szerkesztesmenu(id)
}
case 2:
{
kordinata = (kordinata < 2) ? kordinata + 1 : 0
szerkesztesmenu(id)
}
case 3:
{
r_kicsinyites()
szerkesztesmenu(id)
}
case 4:
{
r_nagyitas()
szerkesztesmenu(id)
}
case 5:
{
y_kicsinyites()
szerkesztesmenu(id)
}
case 6:
{
y_nagyitas()
szerkesztesmenu(id)
}
case 7:
{
alaptavolsag = (alaptavolsag < 100) ? alaptavolsag * 10 : 1
szerkesztesmenu(id)
}
case 8:
{
rushmenunyitas(id)
}
}
}
}
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public szerkesztesmenu(id)
{
new cim[120], jelenlegi[120], csapatm[120], mkord[120], tavolsag[120];
format(tavolsag, 119, "\wEltolás \y%.2f \wméterrel!", UnitsToMeters(alaptavolsag))
format(cim, 119, "\wZóna szerkesztése: \r%d", ezazona)
new menu = menu_create(cim, "alap_handler" );
new zm = -1
if (fm_is_valid_ent(zona[ezazona]))
{
zm = pev(zona[ezazona], pev_iuser1)
}
if (zm != -1)
{
format(jelenlegi, 119, "\wJelenlegi mód: \r%s", zonamod[ZONAMOD:zm])
menu_additem( menu, jelenlegi, "s", 0 );
}
new csp = -1
csp = pev(zona[ezazona], pev_iuser2)
format(csapatm, 119, "\wCsapat: \r%s", celcsapat[CSAPATOK:csp])
menu_additem( menu, csapatm, "s", 0 );
format(mkord, 119, "\wMéret változtatása a \y%s \wkordinátán!", kordinatak[kordinata])
menu_additem( menu, mkord, "s", 0 );
menu_addblank( menu, 0);
menu_additem( menu, "\r Eltolás közepe fele", "s", 0 );
menu_additem( menu, "\r Közepe felől nagyítás", "s", 0 );
menu_additem( menu, "\y Eltolás közepe fele", "s", 0 );
menu_additem( menu, "\y Közepe felől nagyítás", "s", 0 );
menu_addblank( menu, 0);
menu_additem( menu, tavolsag, "s", 0 );
menu_addblank( menu, 0);
menu_additem( menu, "\wVissza a főmenübe", "s", 0 );
menu_setprop( menu, MPROP_PERPAGE, 0 );
menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0 );
if(get_pcvar_num(cvar_menusounds)) client_cmd(id, "spk sound/buttons/blip1.wav")
}
public r_kicsinyites()
{
new entity = zona[ezazona]
new Float:pos[3]
pev(entity, pev_origin, pos)
new Float:mins[3], Float:maxs[3]
pev(entity, pev_mins, mins)
pev(entity, pev_maxs, maxs)
if ((floatabs(mins[kordinata]) + maxs[kordinata]) < alaptavolsag + 1) return
mins[kordinata] += float(alaptavolsag) / 2.0
maxs[kordinata] -= float(alaptavolsag) / 2.0
pos[kordinata] += float(alaptavolsag) / 2.0
set_pev(entity, pev_origin, pos)
fm_entity_set_size(entity, mins, maxs)
}
public r_nagyitas()
{
new entity = zona[ezazona]
new Float:pos[3]
pev(entity, pev_origin, pos)
new Float:mins[3], Float:maxs[3]
pev(entity, pev_mins, mins)
pev(entity, pev_maxs, maxs)
mins[kordinata] -= float(alaptavolsag) / 2.0
maxs[kordinata] += float(alaptavolsag) / 2.0
pos[kordinata] -= float(alaptavolsag) / 2.0
set_pev(entity, pev_origin, pos)
fm_entity_set_size(entity, mins, maxs)
}
public y_kicsinyites()
{
new entity = zona[ezazona]
new Float:pos[3]
pev(entity, pev_origin, pos)
new Float:mins[3], Float:maxs[3]
pev(entity, pev_mins, mins)
pev(entity, pev_maxs, maxs)
if ((floatabs(mins[kordinata]) + maxs[kordinata]) < alaptavolsag + 1) return
mins[kordinata] += float(alaptavolsag) / 2.0
maxs[kordinata] -= float(alaptavolsag) / 2.0
pos[kordinata] -= float(alaptavolsag) / 2.0
set_pev(entity, pev_origin, pos)
fm_entity_set_size(entity, mins, maxs)
}
public y_nagyitas()
{
new entity = zona[ezazona]
new Float:pos[3]
pev(entity, pev_origin, pos)
new Float:mins[3], Float:maxs[3]
pev(entity, pev_mins, mins)
pev(entity, pev_maxs, maxs)
mins[kordinata] -= float(alaptavolsag) / 2.0
maxs[kordinata] += float(alaptavolsag) / 2.0
pos[kordinata] += float(alaptavolsag) / 2.0
set_pev(entity, pev_origin, pos)
fm_entity_set_size(entity, mins, maxs)
}
public zonatorlese(id)
{
new cim[120];
format(cim, 119, "\yFIGYELMEZTETÉS\w Törölni akarod ezt a zónát: %d ?", ezazona)
new menu = menu_create(cim, "alap_handler" );
menu_additem( menu, "\wNem, nem szeretném törölni", "t", 0 );
menu_additem( menu, "\rIgen, törölni szeretném", "t", 0 );
menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
menu_setprop( menu, MPROP_NEXTNAME, "Következő" );
menu_setprop( menu, MPROP_BACKNAME, "Vissza" );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0 );
if(get_pcvar_num(cvar_menusounds)) client_cmd(id, "spk sound/buttons/button10.wav")
}
public zonakeszites(Float:position[3], Float:mins[3], Float:maxs[3], zm, csp)
{
new entity = fm_create_entity("info_target")
set_pev(entity, pev_classname, "rushzona")
fm_entity_set_model(entity, "models/gib_skull.mdl")
fm_entity_set_origin(entity, position)
set_pev(entity, pev_movetype, MOVETYPE_FLY)
new id = pev(entity, pev_iuser1)
if (szerkeszto)
{
set_pev(entity, pev_solid, SOLID_NOT)
}
else
{
set_pev(entity, pev_solid, tipus[ZONAMOD:id])
}
fm_entity_set_size(entity, mins, maxs)
fm_set_entity_visibility(entity, 0)
set_pev(entity, pev_iuser1, zm)
set_pev(entity, pev_iuser2, csp)
return entity
}
public ujzona(Float:position[3])
{
new Float:mins[3] = { -32.0, -32.0, -32.0 }
new Float:maxs[3] = { 32.0, 32.0, 32.0 }
return zonakeszites(position, mins, maxs, 0, 0);
}
public ujzonajatekospoz(player)
{
new Float:position[3]
pev(player, pev_origin, position)
new entity = ujzona(position)
zonakereses()
for(new i = 0; i < maxzonak; i++) if (zona[i] == entity) ezazona = i;
}
public mutasdazonakat(entity)
{
entity -= ZONAMUTATAS
if ((!fm_is_valid_ent(entity)) || !szerkeszto) return
new Float:pos[3]
pev(entity, pev_origin, pos)
if (!fm_is_in_viewcone(szerkeszto, pos) && (entity != zona[ezazona])) return
new Float:editorpos[3]
pev(szerkeszto, pev_origin, editorpos)
new Float:hitpoint[3]
fm_trace_line(-1, editorpos, pos, hitpoint)
if (entity == zona[ezazona]) DrawLine(editorpos[0], editorpos[1], editorpos[2] - 16.0, pos[0], pos[1], pos[2], { 255, 0, 0} )
new Float:dh = vector_distance(editorpos, pos) - vector_distance(editorpos, hitpoint)
if ( (floatabs(dh) > 128.0) && (entity != zona[ezazona])) return
new Float:mins[3], Float:maxs[3]
pev(entity, pev_mins, mins)
pev(entity, pev_maxs, maxs)
mins[0] += pos[0]
mins[1] += pos[1]
mins[2] += pos[2]
maxs[0] += pos[0]
maxs[1] += pos[1]
maxs[2] += pos[2]
new id = pev(entity, pev_iuser1)
new color[3]
color[0] = (zona[ezazona] == entity) ? zone_color_blue[0] : zonaszin[ZONAMOD:id][0]
color[1] = (zona[ezazona] == entity) ? zone_color_blue[1] : zonaszin[ZONAMOD:id][1]
color[2] = (zona[ezazona] == entity) ? zone_color_blue[2] : zonaszin[ZONAMOD:id][2]
DrawLine(maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], color)
DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], color)
DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], color)
DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], color)
DrawLine(mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], color)
DrawLine(mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], color)
DrawLine(mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], color)
DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], color)
DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], color)
DrawLine(maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], color)
DrawLine(maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], color)
DrawLine(mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], color)
if (entity != zona[ezazona]) return
if (kordinata == 0) // X
{
DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], mins[2], zone_color_green)
DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_green)
DrawLine(mins[0], maxs[1], maxs[2], mins[0], mins[1], mins[2], zone_color_red)
DrawLine(mins[0], maxs[1], mins[2], mins[0], mins[1], maxs[2], zone_color_red)
}
if (kordinata == 1) // Y
{
DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_red)
DrawLine(maxs[0], mins[1], mins[2], mins[0], mins[1], maxs[2], zone_color_red)
DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], maxs[2], zone_color_green)
DrawLine(maxs[0], maxs[1], mins[2], mins[0], maxs[1], maxs[2], zone_color_green)
}
if (kordinata == 2) // Z
{
DrawLine(maxs[0], maxs[1], maxs[2], mins[0], mins[1], maxs[2], zone_color_green)
DrawLine(maxs[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], zone_color_green)
DrawLine(maxs[0], maxs[1], mins[2], mins[0], mins[1], mins[2], zone_color_red)
DrawLine(maxs[0], mins[1], mins[2], mins[0], maxs[1], mins[2], zone_color_red)
}
}
public FX_Line(start[3], stop[3], color[3], brightness)
{
message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, szerkeszto)
write_byte( TE_BEAMPOINTS )
write_coord(start[0])
write_coord(start[1])
write_coord(start[2])
write_coord(stop[0])
write_coord(stop[1])
write_coord(stop[2])
write_short( spr_dot )
write_byte( 1 ) // framestart
write_byte( 1 ) // framerate
write_byte( 4 ) // life in 0.1's
write_byte( 5 ) // width
write_byte( 0 ) // noise
write_byte( color[0] ) // r, g, b
write_byte( color[1] ) // r, g, b
write_byte( color[2] ) // r, g, b
write_byte( brightness ) // brightness
write_byte( 0 ) // speed
message_end()
}
public DrawLine(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, color[3]) {
new start[3]
new stop[3]
start[0] = floatround( x1 )
start[1] = floatround( y1 )
start[2] = floatround( z1 )
stop[0] = floatround( x2 )
stop[1] = floatround( y2 )
stop[2] = floatround( z2 )
FX_Line(start, stop, color, 200)
}
stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
if (classname[0])
set_kvd(0, KV_ClassName, classname)
else {
new class[32]
pev(entity, pev_classname, class, sizeof class - 1)
set_kvd(0, KV_ClassName, class)
}
set_kvd(0, KV_KeyName, key)
set_kvd(0, KV_Value, value)
set_kvd(0, KV_fHandled, 0)
return dllfunc(DLLFunc_KeyValue, entity, 0)
}
stock fm_fake_touch(toucher, touched)
return dllfunc(DLLFunc_Touch, toucher, touched)
stock fm_DispatchSpawn(entity)
return dllfunc(DLLFunc_Spawn, entity)
stock fm_remove_entity(index)
return engfunc(EngFunc_RemoveEntity, index)
stock fm_find_ent_by_class(index, const classname[])
return engfunc(EngFunc_FindEntityByString, index, "classname", classname)
stock fm_is_valid_ent(index)
return pev_valid(index)
stock fm_entity_set_size(index, const Float:mins[3], const Float:maxs[3])
return engfunc(EngFunc_SetSize, index, mins, maxs)
stock fm_entity_set_model(index, const model[])
return engfunc(EngFunc_SetModel, index, model)
stock fm_create_entity(const classname[])
return engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classname))
stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) {
new class[] = "trigger_hurt"
new entity = fm_create_entity(class)
if (!entity)
return 0
new value[16]
float_to_str(takedmgdamage * 2, value, sizeof value - 1)
fm_set_kvd(entity, "dmg", value, class)
num_to_str(damagetype, value, sizeof value - 1)
fm_set_kvd(entity, "damagetype", value, class)
fm_set_kvd(entity, "origin", "8192 8192 8192", class)
fm_DispatchSpawn(entity)
set_pev(entity, pev_classname, classname)
fm_fake_touch(entity, victim)
fm_remove_entity(entity)
return 1
}
stock fm_entity_set_origin(index, const Float:origin[3]) {
new Float:mins[3], Float:maxs[3]
pev(index, pev_mins, mins)
pev(index, pev_maxs, maxs)
engfunc(EngFunc_SetSize, index, mins, maxs)
return engfunc(EngFunc_SetOrigin, index, origin)
}
stock fm_set_entity_visibility(index, visible = 1) {
set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)
return 1
}
stock bool:fm_is_in_viewcone(index, const Float:point[3]) {
new Float:angles[3]
pev(index, pev_angles, angles)
engfunc(EngFunc_MakeVectors, angles)
global_get(glb_v_forward, angles)
angles[2] = 0.0
new Float:origin[3], Float:diff[3], Float:norm[3]
pev(index, pev_origin, origin)
xs_vec_sub(point, origin, diff)
diff[2] = 0.0
xs_vec_normalize(diff, norm)
new Float:dot, Float:fov
dot = xs_vec_dot(norm, angles)
pev(index, pev_fov, fov)
if (dot >= floatcos(fov * M_PI / 360))
return true
return false
}
stock fm_trace_line(ignoreent, const Float:start[3], const Float:end[3], Float:ret[3]) {
engfunc(EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0)
new ent = get_tr2(0, TR_pHit)
get_tr2(0, TR_vecEndPos, ret)
return pev_valid(ent) ? ent : 0
}
stock print_color(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()
}
}
}
return PLUGIN_HANDLED
}
stock zonaszam()
{
zonakereses()
return maxzonak;
}
stock create_thunder(vec1[3],vec2[3])
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(0);
write_coord(vec1[0]);
write_coord(vec1[1]);
write_coord(vec1[2]);
write_coord(vec2[0]);
write_coord(vec2[1]);
write_coord(vec2[2]);
write_short(light);
write_byte(1);
write_byte(5);
write_byte(2);
write_byte(20);
write_byte(30);
write_byte(200);
write_byte(200);
write_byte(200);
write_byte(200);
write_byte(200);
message_end();
message_begin( MSG_PVS, SVC_TEMPENTITY,vec2);
write_byte(TE_SPARKS);
write_coord(vec2[0]);
write_coord(vec2[1]);
write_coord(vec2[2]);
message_end();
message_begin(MSG_BROADCAST,SVC_TEMPENTITY,vec2);
write_byte(TE_SMOKE);
write_coord(vec2[0]);
write_coord(vec2[1]);
write_coord(vec2[2]);
write_short(smoke);
write_byte(10);
write_byte(10)
message_end();
}
stock spawnStaticSound( const index, const origin[3], const soundIndex, const Float:vol, const Float:atten, const pitch, const flags )
{
message_begin( index ? MSG_ONE : MSG_ALL, SVC_SPAWNSTATICSOUND, .player = index );
{
write_coord_f( origin[0] );
write_coord_f( origin[1] );
write_coord_f( origin[2] );
write_short( soundIndex );
write_byte( clamp_byte( floatround( vol * 255 ) ) );
write_byte( clamp_byte( floatround( atten * 64 ) ) );
write_short( index );
write_byte( pitch );
write_byte( flags );
}
message_end();
}