HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Anti Rush by kiki | Support: www.hlmod.hu
  2.  * Verzió: 2.8
  3.  *
  4.  * Changelog: 1.0 - Alap verzió, csak dust2re, valamikor 2011-ben
  5.  * 2.0 - Bővített verzió, menü csinálása, zóna mód, visszalökés, és játékos megölése, cvarok létrehozása...stb
  6.  * 2.1 - Kisebb hibbák javítása
  7.  * 2.2 - Rush mehet mert... Indok megadása, új parancsok
  8.  * 2.3 - Üzenetek, és létfontosságú dolgok, csak akkor futnak le, ha van zóna létrehozva, olyan mapon ahol nincs, nem fognak megjelenni az üzenetek.
  9.  * 2.4 - Csapat beállítása 1-1 zónára. Ez jól jön a túszos, és egyéb pályákhoz.
  10.  * 2.5 - Konfig mappa átnevezve, nem kontabilis előző verzióval.
  11.  * 2.6 - ct elo jatekosok csekkolasa is <- terrorista zonahoz.
  12.  * 2.7 - Új cvar mely lehetővé teszi, hogy kiválaszt színes, vagy épp sima chat üzenetek jelenjenek meg.
  13.  * 2.8 - Villám effekt cvar, az ölőz zónához. Alapból ki van kapcsolva.
  14.  */
  15.  
  16.  
  17. #include <amxmodx>
  18. #include <amxmisc>
  19. #include <fakemeta>
  20. #include <xs>
  21. #include <dhudmessage>
  22.  
  23. #define MAXZONAK 100
  24. #define ZONAMUTATAS 3333
  25. #define TASKRUSH 4444
  26. #define UnitsToMeters(%1) (%1*0.0254) //Unitot átrakja méterré!
  27. #define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
  28. #define write_coord_f(%1) ( engfunc( EngFunc_WriteCoord, %1 ) )
  29. #define null_vector ( Float:{ 0.0, 0.0, 0.0 } )
  30.  
  31. enum ZONAMOD
  32. {
  33. SEMMI,
  34. OLES,
  35. RUSH
  36. }
  37.  
  38. enum CSAPATOK
  39. {
  40. MINDENKI,
  41. TE,
  42. CT
  43. }
  44.  
  45. new tipus[ZONAMOD] = { SOLID_NOT, SOLID_TRIGGER, SOLID_TRIGGER }
  46. new zonaneve[ZONAMOD][] = { "zona_nincs", "zona_oles", "zona_rush"}
  47. new zonamod[ZONAMOD][] = { "NINCS", "JATEKOS MEGOLESE", "RUSH ZONA"}
  48. new csapatneve[CSAPATOK][] = { "zona_mindenki", "zona_te", "zona_ct"}
  49. new celcsapat[CSAPATOK][] = { "MINDENKI", "TERRORISTAK", "ZSARUK"}
  50.  
  51. new zone_color_red[3] = { 255, 0, 0 }
  52. new zone_color_green[3] = { 255, 255, 0 }
  53. new zone_color_blue[3] = { 0, 0, 255 }
  54.  
  55. new zonaszin[ZONAMOD][3] =
  56. {
  57. { 255, 0, 255 },
  58. { 255, 0, 0 },
  59. { 0, 255, 0 }
  60. }
  61.  
  62. new szerkeszto = 0
  63.  
  64. new zona[MAXZONAK]
  65. new maxzonak
  66. new ezazona
  67. new kordinata = 0 // 0 - X | 1 - Y | 2 - Z
  68. new kordinatak[3][] = { "X", "Y", "Z" }
  69.  
  70. new alaptavolsag=10 //Unitba kell megadni!
  71.  
  72. new spr_dot
  73. new light
  74. new smoke
  75. new villamlas
  76. new g_screenfade
  77.  
  78. new bool:rushmehet
  79.  
  80. new cvar_alivenum
  81. new cvar_time
  82. new cvar_menusounds
  83. new cvar_colorchat
  84. new cvar_thunder
  85.  
  86. public plugin_init()
  87. {
  88. register_plugin("Anti-Rush", "2.8", "kiki - hlmod.hu")
  89. register_cvar("Rush Vedo", "By kiki33", FCVAR_SERVER)
  90.  
  91. register_clcmd("say /rush", "rushmenu", ADMIN_MENU)
  92. register_clcmd("say_team /rush", "rushmenu", ADMIN_MENU)
  93. register_clcmd("say /antirush", "rushmenu", ADMIN_MENU)
  94. register_clcmd("say_team /antirush", "rushmenu", ADMIN_MENU)
  95. register_clcmd("antirush", "rushmenu", ADMIN_MENU)
  96.  
  97. register_logevent( "eRound_start", 2, "1=Round_Start" );
  98. register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL")
  99. register_logevent("eRoundEnd", 2, "1=Round_End")
  100.  
  101. register_forward(FM_Touch, "fw_touch")
  102.  
  103. g_screenfade = get_user_msgid("ScreenFade")
  104.  
  105. cvar_alivenum = register_cvar("rush_alive_players", "2") //Ha ketto vagy kevesebb terrorista el mehet a rush
  106. cvar_time = register_cvar("rush_time", "60.0") //Mennyi ido mulva lehessen korkezdestol rusholni. Erteke FLOAT!!!
  107. cvar_menusounds = register_cvar("rush_menusounds", "1") //Menuben a gombok nyomasara hangok jatszodnak le. Bekapcsolasa ajanlott! 1:be | 0:ki
  108. cvar_colorchat = register_cvar("rush_colorchat", "1"); //Színes chat üzenetek. 0:kikapcsolva 1: bekapcsolva
  109. cvar_thunder = register_cvar("rush_thundereffect", "0"); //Villámlás effekt őlős zónához. 0: kikapcsolva 1: bekapcsolva
  110.  
  111. set_task(1.0, "zonakbetoltese")
  112. }
  113.  
  114. public plugin_precache()
  115. {
  116. villamlas = precache_sound("ambience/thunder_clap.wav");
  117. precache_model("models/gib_skull.mdl")
  118. //precache_model("sprites/antirush/antirush.spr") HAMAROSAN
  119. light = precache_model("sprites/lgtning.spr")
  120. smoke = precache_model("sprites/steam1.spr")
  121. spr_dot = precache_model("sprites/dot.spr")
  122. }
  123.  
  124. public client_disconnect(id)
  125. {
  126. if (id == szerkeszto) zonakeltuntetese()
  127. }
  128.  
  129. public zonakmentese(id)
  130. {
  131. new zonafajl[200]
  132. new palya[50]
  133.  
  134. get_configsdir(zonafajl, 199)
  135. format(zonafajl, 199, "%s/antirush_by_kiki", zonafajl)
  136.  
  137. if (!dir_exists(zonafajl)) mkdir(zonafajl)
  138.  
  139. get_mapname(palya, 49)
  140. format(zonafajl, 199, "%s/%s.kordinatak", zonafajl, palya)
  141. delete_file(zonafajl)
  142.  
  143. zonakereses()
  144.  
  145. new szoveg[120];
  146. format(szoveg, 119, "; Ez a konfig a %s palyahoz tartozik!", palya)
  147.  
  148. write_file(zonafajl, "; Anti-Rush By kiki - hlmod.hu")
  149. write_file(zonafajl, szoveg)
  150. write_file(zonafajl, "")
  151.  
  152. for(new i = 0; i < maxzonak; i++)
  153. {
  154. new z = zona[i]
  155. new zm = pev(z, pev_iuser1)
  156. new csp = pev(z, pev_iuser2)
  157.  
  158. new Float:pos[3]
  159. pev(z, pev_origin, pos)
  160.  
  161. new Float:mins[3], Float:maxs[3]
  162. pev(z, pev_mins, mins)
  163. pev(z, pev_maxs, maxs)
  164.  
  165. new output[1200];
  166. format(output, 1199, "%s %s", zonaneve[ZONAMOD:zm], csapatneve[CSAPATOK:csp])
  167.  
  168. format(output, 1199, "%s %.1f %.1f %.1f", output, pos[0], pos[1], pos[2])
  169.  
  170. format(output, 1199, "%s %.0f %.0f %.0f", output, mins[0], mins[1], mins[2])
  171. format(output, 1199, "%s %.0f %.0f %.0f", output, maxs[0], maxs[1], maxs[2])
  172.  
  173. write_file(zonafajl, output)
  174. }
  175.  
  176. if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t Sikeres mentés...")
  177. else client_print(id, print_chat, "[ANTI-RUSH] Sikeres mentés...")
  178. }
  179.  
  180. public zonakbetoltese()
  181. {
  182. new zonafajl[200]
  183. new palya[50]
  184.  
  185. get_configsdir(zonafajl, 199)
  186. format(zonafajl, 199, "%s/antirush_by_kiki", zonafajl)
  187.  
  188. get_mapname(palya, 49)
  189. format(zonafajl, 199, "%s/%s.kordinatak", zonafajl, palya)
  190.  
  191. if (!file_exists(zonafajl))
  192. {
  193. log_to_file("ANTIRUSH-KIKI.log", "Nem talalok %s-en mentett zonakat", palya);
  194. return
  195. }
  196.  
  197. new input[1200], line = 0, len
  198.  
  199. while( (line = read_file(zonafajl , line , input , 127 , len) ) != 0 )
  200. {
  201. if (!strlen(input) || (input[0] == ';')) continue;
  202.  
  203. new data[20], zm = 0, csp = 0
  204. new Float:mins[3], Float:maxs[3], Float:pos[3]
  205.  
  206. strbreak(input, data, 20, input, 1199)
  207. zm = -1
  208. for(new i = 0; ZONAMOD:i < ZONAMOD; ZONAMOD:i++)
  209. {
  210. if (equal(data, zonaneve[ZONAMOD:i])) zm = i;
  211. }
  212.  
  213. strbreak(input, data, 20, input, 1199)
  214. csp = -1
  215. for(new i = 0; CSAPATOK:i < CSAPATOK; CSAPATOK:i++)
  216. {
  217. if (equal(data, csapatneve[CSAPATOK:i])) csp = i;
  218. }
  219.  
  220. if (zm == -1 || csp == -1)
  221. {
  222. log_to_file("ANTIRUSH-KIKI.log", "Felismerhetetlen sor: %s. Tovabblepes...", data);
  223. continue;
  224. }
  225.  
  226. strbreak(input, data, 20, input, 1199); pos[0] = str_to_float(data);
  227. strbreak(input, data, 20, input, 1199); pos[1] = str_to_float(data);
  228. strbreak(input, data, 20, input, 1199); pos[2] = str_to_float(data);
  229.  
  230. strbreak(input, data, 20, input, 1199); mins[0] = str_to_float(data);
  231. strbreak(input, data, 20, input, 1199); mins[1] = str_to_float(data);
  232. strbreak(input, data, 20, input, 1199); mins[2] = str_to_float(data);
  233. strbreak(input, data, 20, input, 1199); maxs[0] = str_to_float(data);
  234. strbreak(input, data, 20, input, 1199); maxs[1] = str_to_float(data);
  235. strbreak(input, data, 20, input, 1199); maxs[2] = str_to_float(data);
  236.  
  237. zonakeszites(pos, mins, maxs, zm, csp);
  238. }
  239.  
  240. zonakereses()
  241. zonakeltuntetese()
  242. }
  243.  
  244. public eRoundEnd()
  245. {
  246. if(zonaszam() >= 1)
  247. {
  248. rushmehet=true
  249. }
  250. }
  251.  
  252. public eRound_start()
  253. {
  254. if(zonaszam() >= 1)
  255. {
  256. rushmehet=false;
  257.  
  258. if(task_exists(TASKRUSH))
  259. {
  260. remove_task(TASKRUSH)
  261. }
  262.  
  263. set_task(get_pcvar_float(cvar_time), "rush_mehet", TASKRUSH)
  264.  
  265. new mennyi = floatround(get_pcvar_float(cvar_time))
  266. new players[32], num
  267. get_players(players,num)
  268. for(new i = 0; i < num; i++)
  269. {
  270. if(get_user_team(players[i]) == 2)
  271. {
  272. if(get_pcvar_num(cvar_colorchat)) print_color(players[i], "!g[ANTI-RUSH]!t %d másodpercig nem rusholhatsz!", mennyi)
  273. else client_print(players[i], print_chat, "[ANTI-RUSH] %d másodpercig nem rusholhatsz!", mennyi)
  274. }
  275. }
  276. }
  277. }
  278.  
  279. public bomb_planted()
  280. {
  281. if(zonaszam() >= 1)
  282. {
  283. rush_mehet(1)
  284. }
  285. }
  286.  
  287. public rush_mehet(szam)
  288. {
  289. rushmehet = true;
  290. if(task_exists(TASKRUSH))
  291. {
  292. remove_task(TASKRUSH)
  293. }
  294. new players[32], num
  295. get_players(players,num)
  296. for(new i = 0; i < num; i++)
  297. {
  298. if(is_user_connected(players[i]))
  299. {
  300. set_dhudmessage(255, 255, 0, -1.0, 0.3, 0, 6.0, 6.0)
  301. show_dhudmessage(players[i], "A Ct-k rusholhatnak!")
  302. switch(szam)
  303. {
  304. case 1:
  305. {
  306. if(get_pcvar_num(cvar_colorchat)) print_color(players[i], "!g[ANTI-RUSH]!t Mehet a rush, mert a bomba élesítve lett!")
  307. else client_print(players[i], print_chat, "[ANTI-RUSH] Mehet a rush, mert a bomba élesítve lett!")
  308. }
  309. case 2:
  310. {
  311. if(get_pcvar_num(cvar_colorchat)) print_color(players[i], "!g[ANTI-RUSH]!t Mehet a rush, mert kevesebb mint %d terrorista él!", get_pcvar_num(cvar_alivenum))
  312. else client_print(players[i], print_chat, "[ANTI-RUSH] Mehet a rush, mert kevesebb mint %d terrorista él!", get_pcvar_num(cvar_alivenum))
  313. }
  314. case 3:
  315. {
  316. if(get_pcvar_num(cvar_colorchat)) print_color(players[i], "!g[ANTI-RUSH]!t Mehet a rush, mert kevesebb mint %d zsaru él!", get_pcvar_num(cvar_alivenum))
  317. else client_print(players[i], print_chat, "[ANTI-RUSH] Mehet a rush, mert kevesebb mint %d zsaru él!", get_pcvar_num(cvar_alivenum))
  318. }
  319. default:
  320. {
  321. if(get_pcvar_num(cvar_colorchat)) print_color(players[i], "!g[ANTI-RUSH]!t Mehet a rush, mert letelt az idő!")
  322. else client_print(players[i], print_chat, "[ANTI-RUSH] Mehet a rush, mert letelt az idő!")
  323. }
  324. }
  325. }
  326. }
  327. }
  328.  
  329. public fw_touch(zona, player)
  330. {
  331. if (szerkeszto) return FMRES_IGNORED
  332.  
  333. if (!pev_valid(zona) || !is_user_connected(player))
  334. return FMRES_IGNORED
  335.  
  336. if(zonaszam() >= 1)
  337. {
  338. static classname[33]
  339. pev(player, pev_classname, classname, 32)
  340. if (!equal(classname, "player"))
  341. return FMRES_IGNORED
  342.  
  343. pev(zona, pev_classname, classname, 32)
  344. if (!equal(classname, "rushzona"))
  345. return FMRES_IGNORED
  346.  
  347. new csapat = get_user_team(player)
  348.  
  349. if (csapat == 2 && get_alivetesnum() <= get_pcvar_num(cvar_alivenum) && rushmehet == false)
  350. {
  351. rush_mehet(2)
  352. return FMRES_IGNORED
  353. }
  354.  
  355. if(csapat == 1 && get_alivectsnum() <= get_pcvar_num(cvar_alivenum) && rushmehet == false)
  356. {
  357. rush_mehet(3)
  358. return FMRES_IGNORED
  359. }
  360.  
  361. if(rushmehet == false)
  362. {
  363. zonastuff(player, zona)
  364. }
  365. }
  366. return FMRES_IGNORED
  367. }
  368.  
  369. public zonastuff(jatekos, zona)
  370. {
  371. new ez = pev(zona, pev_iuser1)
  372. new csap = pev(zona, pev_iuser2)
  373. new csapat = get_user_team(jatekos)
  374.  
  375. if(ZONAMOD:ez == OLES && is_user_alive(jatekos))
  376. {
  377. if(CSAPATOK:csap == MINDENKI || csapat == 1 && CSAPATOK:csap == TE || csapat == 2 && CSAPATOK:csap == CT)
  378. {
  379. if(get_pcvar_num(cvar_thunder))
  380. {
  381. new j_poz[3], coord[3]
  382. get_user_origin(jatekos,j_poz);
  383. coord[0] = j_poz[0] + 150;
  384. coord[1] = j_poz[1] + 150;
  385. coord[2] = j_poz[2] + 800;
  386. create_thunder(coord,j_poz);
  387. spawnStaticSound( jatekos, j_poz, villamlas, VOL_NORM, ATTN_NORM, PITCH_NORM, .flags = 0 );
  388. user_kill(jatekos)
  389. }
  390. else user_kill(jatekos)
  391.  
  392. if(get_pcvar_num(cvar_colorchat)) print_color(jatekos, "!g[ANTI-RUSH]!t Meghaltál mert rusholni próbáltál!")
  393. else client_print(jatekos, print_chat, "[ANTI-RUSH] Meghaltál mert rusholni próbáltál!")
  394. }
  395. }
  396.  
  397. if(ZONAMOD:ez == RUSH && is_user_alive(jatekos))
  398. {
  399. if(CSAPATOK:csap == MINDENKI || (csapat == 1) && (CSAPATOK:csap == TE) || (csapat == 2) && (CSAPATOK:csap == CT))
  400. {
  401. new Float: velocity[3]
  402. new Float: DW
  403. pev(jatekos,pev_velocity,velocity)
  404. DW=vector_length ( velocity )+0.0001
  405. velocity[0]=(velocity[0]/DW)*(-500.0)
  406. velocity[1]=(velocity[1]/DW)*(-500.0)
  407. if(velocity[2]<0) velocity[2]=velocity[2]*(-1.0)+15.0
  408. set_pev(jatekos,pev_velocity,velocity)
  409. message_begin(MSG_ONE_UNRELIABLE, g_screenfade, {0,0,0}, jatekos)
  410. write_short(1<<12)
  411. write_short(5)
  412. write_short(0x0000)
  413. write_byte(255)
  414. write_byte(255)
  415. write_byte(255)
  416. write_byte(255)
  417. message_end()
  418. }
  419. }
  420. }
  421.  
  422. public zonakereses()
  423. {
  424. new entity = -1
  425. maxzonak = 0
  426. while( (entity = fm_find_ent_by_class(entity, "rushzona")) )
  427. {
  428. zona[maxzonak] = entity
  429. maxzonak++
  430. }
  431. }
  432.  
  433. public zonakmutatasa()
  434. {
  435. zonakereses()
  436.  
  437. for(new i = 0; i < maxzonak; i++)
  438. {
  439. new z = zona[i];
  440. remove_task(ZONAMUTATAS + z)
  441. set_pev(z, pev_solid, SOLID_NOT)
  442. set_task(0.2, "mutasdazonakat", ZONAMUTATAS + z, _, _, "b")
  443. }
  444. }
  445.  
  446. public zonakeltuntetese()
  447. {
  448. szerkeszto = 0
  449. for(new i = 0; i < maxzonak; i++)
  450. {
  451. new id = pev(zona[i], pev_iuser1)
  452. set_pev(zona[i], pev_solid, tipus[ZONAMOD:id])
  453. remove_task(ZONAMUTATAS + zona[i])
  454. }
  455. }
  456.  
  457. public rushmenu(id)
  458. {
  459. if (get_user_flags(id) & ADMIN_RCON)
  460. {
  461. szerkeszto = id
  462. zonakereses();
  463. zonakmutatasa();
  464.  
  465. set_task(0.1, "rushmenunyitas", id)
  466. }
  467.  
  468. return PLUGIN_HANDLED
  469. }
  470.  
  471. public rushmenunyitas(id)
  472. {
  473. new item1[1024], item2[1024], palya[50];
  474. get_mapname(palya, 49);
  475. 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)
  476. 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)
  477.  
  478. if(maxzonak <= 0)
  479. {
  480. new menu = menu_create(item1, "alap_handler");
  481. menu_additem( menu, "\wÚj zóna készítése", "a", 0 );
  482. menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
  483. menu_setprop( menu, MPROP_NEXTNAME, "Következő" );
  484. menu_setprop( menu, MPROP_BACKNAME, "Vissza" );
  485. menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
  486. menu_display(id, menu, 0 );
  487. }
  488. else
  489. {
  490. new menu = menu_create(item2, "alap_handler");
  491. new item3[120];
  492. format(item3, 119, "\wEnnek a zónának a szerkesztése: %d", ezazona)
  493. menu_additem( menu, "Új zóna készítése", "a", 0 );
  494. menu_addblank( menu, 0);
  495. menu_additem( menu, item3, "b", 0 );
  496. menu_additem( menu, "Előző zóna", "b", 0 );
  497. menu_additem( menu, "Következő zóna", "b", 0 );
  498. menu_additem( menu, "Kijelölt zóna \rtörlése", "b", 0 );
  499. menu_additem( menu, "Összes zóna mentése", "b", 0 );
  500. menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
  501. menu_setprop( menu, MPROP_NEXTNAME, "Következő" );
  502. menu_setprop( menu, MPROP_BACKNAME, "Vissza" );
  503. menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
  504. menu_display(id, menu, 0 );
  505. }
  506.  
  507. if(get_pcvar_num(cvar_menusounds)) client_cmd(id, "spk sound/buttons/blip1.wav")
  508. }
  509.  
  510. public alap_handler(id, menu, item)
  511. {
  512. if ( item == MENU_EXIT )
  513. {
  514. szerkeszto = 0
  515. zonakeltuntetese()
  516. menu_destroy( menu );
  517. return PLUGIN_HANDLED;
  518. }
  519.  
  520. new szData[6], szName[64];
  521. new item_access, item_callback;
  522. menu_item_getinfo( menu, item, item_access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
  523.  
  524. switch( szData[0] )
  525. {
  526. case 'a':
  527. {
  528. switch( item )
  529. {
  530. case 0:
  531. {
  532. if (maxzonak < MAXZONAK - 1)
  533. {
  534. ujzonajatekospoz(id);
  535. zonakmutatasa();
  536. rushmenunyitas(id);
  537. } else
  538. {
  539. if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t Nem lehet több zónát létrehozni!");
  540. else client_print(id, print_chat, "[ANTI-RUSH] Nem lehet több zónát létrehozni!")
  541. rushmenunyitas(id);
  542. }
  543. menu_destroy( menu );
  544. return PLUGIN_HANDLED;
  545. }
  546. }
  547. }
  548. case 'b':
  549. {
  550. switch( item )
  551. {
  552. case 1:
  553. {
  554. if (fm_is_valid_ent(zona[ezazona])) szerkesztesmenu(id); else rushmenunyitas(id);
  555. }
  556. case 2:
  557. {
  558. ezazona = (ezazona > 0) ? ezazona - 1 : ezazona;
  559. rushmenunyitas(id)
  560. }
  561. case 3:
  562. {
  563. ezazona = (ezazona < maxzonak - 1) ? ezazona + 1 : ezazona;
  564. rushmenunyitas(id)
  565. }
  566. case 4:
  567. {
  568. zonatorlese(id);
  569. }
  570. case 5:
  571. {
  572. zonakmentese(id)
  573. rushmenunyitas(id)
  574. }
  575. }
  576. }
  577. case 't':
  578. {
  579. switch( item )
  580. {
  581. case 0:
  582. {
  583. if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t Nem törölted ezt a zónát.");
  584. else client_print(id, print_chat, "[ANTI-RUSH] Nem törölted ezt a zónát.")
  585. rushmenunyitas(id)
  586. }
  587. case 1:
  588. {
  589. if(get_pcvar_num(cvar_colorchat)) print_color(id, "!g[ANTI-RUSH]!t A zóna törlése sikeres.");
  590. else client_print(id, print_chat, "[ANTI-RUSH] A zóna törlése sikeres.")
  591. fm_remove_entity(zona[ezazona])
  592. ezazona--;
  593. if (ezazona < 0) ezazona = 0;
  594. zonakereses()
  595. rushmenunyitas(id)
  596. }
  597. }
  598. }
  599. case 's':
  600. {
  601. switch( item )
  602. {
  603. case 0:
  604. {
  605. new zm = -1
  606. zm = pev(zona[ezazona], pev_iuser1)
  607. if (ZONAMOD:zm == RUSH) zm = 0; else zm++;
  608. set_pev(zona[ezazona], pev_iuser1, zm)
  609. szerkesztesmenu(id)
  610. }
  611. case 1:
  612. {
  613. new csp = -1
  614. csp = pev(zona[ezazona], pev_iuser2)
  615. if (CSAPATOK:csp == CT) csp = 0;
  616. else csp++;
  617. set_pev(zona[ezazona], pev_iuser2, csp)
  618. szerkesztesmenu(id)
  619. }
  620. case 2:
  621. {
  622. kordinata = (kordinata < 2) ? kordinata + 1 : 0
  623. szerkesztesmenu(id)
  624. }
  625. case 3:
  626. {
  627. r_kicsinyites()
  628. szerkesztesmenu(id)
  629. }
  630. case 4:
  631. {
  632. r_nagyitas()
  633. szerkesztesmenu(id)
  634. }
  635. case 5:
  636. {
  637. y_kicsinyites()
  638. szerkesztesmenu(id)
  639. }
  640. case 6:
  641. {
  642. y_nagyitas()
  643. szerkesztesmenu(id)
  644. }
  645. case 7:
  646. {
  647. alaptavolsag = (alaptavolsag < 100) ? alaptavolsag * 10 : 1
  648. szerkesztesmenu(id)
  649. }
  650. case 8:
  651. {
  652. rushmenunyitas(id)
  653. }
  654. }
  655. }
  656. }
  657.  
  658. menu_destroy( menu );
  659. return PLUGIN_HANDLED;
  660. }
  661.  
  662. public szerkesztesmenu(id)
  663. {
  664. new cim[120], jelenlegi[120], csapatm[120], mkord[120], tavolsag[120];
  665.  
  666. format(tavolsag, 119, "\wEltolás \y%.2f \wméterrel!", UnitsToMeters(alaptavolsag))
  667.  
  668. format(cim, 119, "\wZóna szerkesztése: \r%d", ezazona)
  669. new menu = menu_create(cim, "alap_handler" );
  670.  
  671. new zm = -1
  672. if (fm_is_valid_ent(zona[ezazona]))
  673. {
  674. zm = pev(zona[ezazona], pev_iuser1)
  675. }
  676.  
  677. if (zm != -1)
  678. {
  679. format(jelenlegi, 119, "\wJelenlegi mód: \r%s", zonamod[ZONAMOD:zm])
  680. menu_additem( menu, jelenlegi, "s", 0 );
  681. }
  682.  
  683. new csp = -1
  684. csp = pev(zona[ezazona], pev_iuser2)
  685. format(csapatm, 119, "\wCsapat: \r%s", celcsapat[CSAPATOK:csp])
  686. menu_additem( menu, csapatm, "s", 0 );
  687.  
  688. format(mkord, 119, "\wMéret változtatása a \y%s \wkordinátán!", kordinatak[kordinata])
  689. menu_additem( menu, mkord, "s", 0 );
  690. menu_addblank( menu, 0);
  691. menu_additem( menu, "\r Eltolás közepe fele", "s", 0 );
  692. menu_additem( menu, "\r Közepe felől nagyítás", "s", 0 );
  693. menu_additem( menu, "\y Eltolás közepe fele", "s", 0 );
  694. menu_additem( menu, "\y Közepe felől nagyítás", "s", 0 );
  695. menu_addblank( menu, 0);
  696. menu_additem( menu, tavolsag, "s", 0 );
  697. menu_addblank( menu, 0);
  698. menu_additem( menu, "\wVissza a főmenübe", "s", 0 );
  699.  
  700. menu_setprop( menu, MPROP_PERPAGE, 0 );
  701. menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
  702. menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
  703.  
  704. menu_display(id, menu, 0 );
  705. if(get_pcvar_num(cvar_menusounds)) client_cmd(id, "spk sound/buttons/blip1.wav")
  706. }
  707.  
  708. public r_kicsinyites()
  709. {
  710. new entity = zona[ezazona]
  711.  
  712. new Float:pos[3]
  713. pev(entity, pev_origin, pos)
  714.  
  715. new Float:mins[3], Float:maxs[3]
  716. pev(entity, pev_mins, mins)
  717. pev(entity, pev_maxs, maxs)
  718.  
  719. if ((floatabs(mins[kordinata]) + maxs[kordinata]) < alaptavolsag + 1) return
  720.  
  721. mins[kordinata] += float(alaptavolsag) / 2.0
  722. maxs[kordinata] -= float(alaptavolsag) / 2.0
  723. pos[kordinata] += float(alaptavolsag) / 2.0
  724.  
  725. set_pev(entity, pev_origin, pos)
  726. fm_entity_set_size(entity, mins, maxs)
  727. }
  728.  
  729. public r_nagyitas()
  730. {
  731. new entity = zona[ezazona]
  732.  
  733. new Float:pos[3]
  734. pev(entity, pev_origin, pos)
  735.  
  736. new Float:mins[3], Float:maxs[3]
  737. pev(entity, pev_mins, mins)
  738. pev(entity, pev_maxs, maxs)
  739.  
  740. mins[kordinata] -= float(alaptavolsag) / 2.0
  741. maxs[kordinata] += float(alaptavolsag) / 2.0
  742. pos[kordinata] -= float(alaptavolsag) / 2.0
  743.  
  744. set_pev(entity, pev_origin, pos)
  745. fm_entity_set_size(entity, mins, maxs)
  746. }
  747.  
  748. public y_kicsinyites()
  749. {
  750. new entity = zona[ezazona]
  751.  
  752. new Float:pos[3]
  753. pev(entity, pev_origin, pos)
  754.  
  755. new Float:mins[3], Float:maxs[3]
  756. pev(entity, pev_mins, mins)
  757. pev(entity, pev_maxs, maxs)
  758.  
  759. if ((floatabs(mins[kordinata]) + maxs[kordinata]) < alaptavolsag + 1) return
  760.  
  761. mins[kordinata] += float(alaptavolsag) / 2.0
  762. maxs[kordinata] -= float(alaptavolsag) / 2.0
  763. pos[kordinata] -= float(alaptavolsag) / 2.0
  764.  
  765. set_pev(entity, pev_origin, pos)
  766. fm_entity_set_size(entity, mins, maxs)
  767. }
  768.  
  769. public y_nagyitas()
  770. {
  771. new entity = zona[ezazona]
  772.  
  773. new Float:pos[3]
  774. pev(entity, pev_origin, pos)
  775.  
  776. new Float:mins[3], Float:maxs[3]
  777. pev(entity, pev_mins, mins)
  778. pev(entity, pev_maxs, maxs)
  779.  
  780. mins[kordinata] -= float(alaptavolsag) / 2.0
  781. maxs[kordinata] += float(alaptavolsag) / 2.0
  782. pos[kordinata] += float(alaptavolsag) / 2.0
  783.  
  784. set_pev(entity, pev_origin, pos)
  785. fm_entity_set_size(entity, mins, maxs)
  786. }
  787.  
  788. public zonatorlese(id)
  789. {
  790. new cim[120];
  791. format(cim, 119, "\yFIGYELMEZTETÉS\w Törölni akarod ezt a zónát: %d ?", ezazona)
  792. new menu = menu_create(cim, "alap_handler" );
  793.  
  794. menu_additem( menu, "\wNem, nem szeretném törölni", "t", 0 );
  795. menu_additem( menu, "\rIgen, törölni szeretném", "t", 0 );
  796. menu_setprop( menu, MPROP_EXITNAME, "Kilépés" );
  797. menu_setprop( menu, MPROP_NEXTNAME, "Következő" );
  798. menu_setprop( menu, MPROP_BACKNAME, "Vissza" );
  799. menu_setprop( menu, MPROP_EXIT, MEXIT_ALL);
  800. menu_display(id, menu, 0 );
  801.  
  802.  
  803. if(get_pcvar_num(cvar_menusounds)) client_cmd(id, "spk sound/buttons/button10.wav")
  804. }
  805.  
  806. public zonakeszites(Float:position[3], Float:mins[3], Float:maxs[3], zm, csp)
  807. {
  808. new entity = fm_create_entity("info_target")
  809. set_pev(entity, pev_classname, "rushzona")
  810. fm_entity_set_model(entity, "models/gib_skull.mdl")
  811.  
  812. fm_entity_set_origin(entity, position)
  813.  
  814. set_pev(entity, pev_movetype, MOVETYPE_FLY)
  815. new id = pev(entity, pev_iuser1)
  816. if (szerkeszto)
  817. {
  818. set_pev(entity, pev_solid, SOLID_NOT)
  819. }
  820. else
  821. {
  822. set_pev(entity, pev_solid, tipus[ZONAMOD:id])
  823. }
  824.  
  825. fm_entity_set_size(entity, mins, maxs)
  826. fm_set_entity_visibility(entity, 0)
  827.  
  828. set_pev(entity, pev_iuser1, zm)
  829. set_pev(entity, pev_iuser2, csp)
  830.  
  831. return entity
  832. }
  833.  
  834. public ujzona(Float:position[3])
  835. {
  836. new Float:mins[3] = { -32.0, -32.0, -32.0 }
  837. new Float:maxs[3] = { 32.0, 32.0, 32.0 }
  838. return zonakeszites(position, mins, maxs, 0, 0);
  839. }
  840.  
  841. public ujzonajatekospoz(player)
  842. {
  843. new Float:position[3]
  844. pev(player, pev_origin, position)
  845.  
  846. new entity = ujzona(position)
  847. zonakereses()
  848.  
  849. for(new i = 0; i < maxzonak; i++) if (zona[i] == entity) ezazona = i;
  850. }
  851.  
  852. public mutasdazonakat(entity)
  853. {
  854. entity -= ZONAMUTATAS
  855. if ((!fm_is_valid_ent(entity)) || !szerkeszto) return
  856.  
  857. new Float:pos[3]
  858. pev(entity, pev_origin, pos)
  859. if (!fm_is_in_viewcone(szerkeszto, pos) && (entity != zona[ezazona])) return
  860.  
  861. new Float:editorpos[3]
  862. pev(szerkeszto, pev_origin, editorpos)
  863. new Float:hitpoint[3]
  864. fm_trace_line(-1, editorpos, pos, hitpoint)
  865.  
  866. if (entity == zona[ezazona]) DrawLine(editorpos[0], editorpos[1], editorpos[2] - 16.0, pos[0], pos[1], pos[2], { 255, 0, 0} )
  867.  
  868. new Float:dh = vector_distance(editorpos, pos) - vector_distance(editorpos, hitpoint)
  869. if ( (floatabs(dh) > 128.0) && (entity != zona[ezazona])) return
  870.  
  871. new Float:mins[3], Float:maxs[3]
  872. pev(entity, pev_mins, mins)
  873. pev(entity, pev_maxs, maxs)
  874.  
  875. mins[0] += pos[0]
  876. mins[1] += pos[1]
  877. mins[2] += pos[2]
  878. maxs[0] += pos[0]
  879. maxs[1] += pos[1]
  880. maxs[2] += pos[2]
  881.  
  882. new id = pev(entity, pev_iuser1)
  883.  
  884. new color[3]
  885. color[0] = (zona[ezazona] == entity) ? zone_color_blue[0] : zonaszin[ZONAMOD:id][0]
  886. color[1] = (zona[ezazona] == entity) ? zone_color_blue[1] : zonaszin[ZONAMOD:id][1]
  887. color[2] = (zona[ezazona] == entity) ? zone_color_blue[2] : zonaszin[ZONAMOD:id][2]
  888.  
  889. DrawLine(maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], color)
  890. DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], color)
  891. DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], color)
  892.  
  893. DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], color)
  894. DrawLine(mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], color)
  895. DrawLine(mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], color)
  896.  
  897. DrawLine(mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], color)
  898. DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], color)
  899. DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], color)
  900. DrawLine(maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], color)
  901. DrawLine(maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], color)
  902. DrawLine(mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], color)
  903.  
  904. if (entity != zona[ezazona]) return
  905.  
  906. if (kordinata == 0) // X
  907. {
  908. DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], mins[2], zone_color_green)
  909. DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_green)
  910.  
  911. DrawLine(mins[0], maxs[1], maxs[2], mins[0], mins[1], mins[2], zone_color_red)
  912. DrawLine(mins[0], maxs[1], mins[2], mins[0], mins[1], maxs[2], zone_color_red)
  913. }
  914. if (kordinata == 1) // Y
  915. {
  916. DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], zone_color_red)
  917. DrawLine(maxs[0], mins[1], mins[2], mins[0], mins[1], maxs[2], zone_color_red)
  918.  
  919. DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], maxs[2], zone_color_green)
  920. DrawLine(maxs[0], maxs[1], mins[2], mins[0], maxs[1], maxs[2], zone_color_green)
  921. }
  922. if (kordinata == 2) // Z
  923. {
  924. DrawLine(maxs[0], maxs[1], maxs[2], mins[0], mins[1], maxs[2], zone_color_green)
  925. DrawLine(maxs[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], zone_color_green)
  926.  
  927. DrawLine(maxs[0], maxs[1], mins[2], mins[0], mins[1], mins[2], zone_color_red)
  928. DrawLine(maxs[0], mins[1], mins[2], mins[0], maxs[1], mins[2], zone_color_red)
  929. }
  930. }
  931.  
  932. public FX_Line(start[3], stop[3], color[3], brightness)
  933. {
  934. message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, szerkeszto)
  935.  
  936. write_byte( TE_BEAMPOINTS )
  937.  
  938. write_coord(start[0])
  939. write_coord(start[1])
  940. write_coord(start[2])
  941.  
  942. write_coord(stop[0])
  943. write_coord(stop[1])
  944. write_coord(stop[2])
  945.  
  946. write_short( spr_dot )
  947.  
  948. write_byte( 1 ) // framestart
  949. write_byte( 1 ) // framerate
  950. write_byte( 4 ) // life in 0.1's
  951. write_byte( 5 ) // width
  952. write_byte( 0 ) // noise
  953.  
  954. write_byte( color[0] ) // r, g, b
  955. write_byte( color[1] ) // r, g, b
  956. write_byte( color[2] ) // r, g, b
  957.  
  958. write_byte( brightness ) // brightness
  959. write_byte( 0 ) // speed
  960.  
  961. message_end()
  962. }
  963.  
  964. public DrawLine(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, color[3]) {
  965. new start[3]
  966. new stop[3]
  967.  
  968. start[0] = floatround( x1 )
  969. start[1] = floatround( y1 )
  970. start[2] = floatround( z1 )
  971.  
  972. stop[0] = floatround( x2 )
  973. stop[1] = floatround( y2 )
  974. stop[2] = floatround( z2 )
  975.  
  976. FX_Line(start, stop, color, 200)
  977. }
  978.  
  979. stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
  980. if (classname[0])
  981. set_kvd(0, KV_ClassName, classname)
  982. else {
  983. new class[32]
  984. pev(entity, pev_classname, class, sizeof class - 1)
  985. set_kvd(0, KV_ClassName, class)
  986. }
  987.  
  988. set_kvd(0, KV_KeyName, key)
  989. set_kvd(0, KV_Value, value)
  990. set_kvd(0, KV_fHandled, 0)
  991.  
  992. return dllfunc(DLLFunc_KeyValue, entity, 0)
  993. }
  994.  
  995. stock fm_fake_touch(toucher, touched)
  996. return dllfunc(DLLFunc_Touch, toucher, touched)
  997.  
  998. stock fm_DispatchSpawn(entity)
  999. return dllfunc(DLLFunc_Spawn, entity)
  1000.  
  1001. stock fm_remove_entity(index)
  1002. return engfunc(EngFunc_RemoveEntity, index)
  1003.  
  1004. stock fm_find_ent_by_class(index, const classname[])
  1005. return engfunc(EngFunc_FindEntityByString, index, "classname", classname)
  1006.  
  1007. stock fm_is_valid_ent(index)
  1008. return pev_valid(index)
  1009.  
  1010. stock fm_entity_set_size(index, const Float:mins[3], const Float:maxs[3])
  1011. return engfunc(EngFunc_SetSize, index, mins, maxs)
  1012.  
  1013. stock fm_entity_set_model(index, const model[])
  1014. return engfunc(EngFunc_SetModel, index, model)
  1015.  
  1016. stock fm_create_entity(const classname[])
  1017. return engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classname))
  1018.  
  1019. stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) {
  1020. new class[] = "trigger_hurt"
  1021. new entity = fm_create_entity(class)
  1022. if (!entity)
  1023. return 0
  1024.  
  1025. new value[16]
  1026. float_to_str(takedmgdamage * 2, value, sizeof value - 1)
  1027. fm_set_kvd(entity, "dmg", value, class)
  1028.  
  1029. num_to_str(damagetype, value, sizeof value - 1)
  1030. fm_set_kvd(entity, "damagetype", value, class)
  1031.  
  1032. fm_set_kvd(entity, "origin", "8192 8192 8192", class)
  1033. fm_DispatchSpawn(entity)
  1034.  
  1035. set_pev(entity, pev_classname, classname)
  1036. fm_fake_touch(entity, victim)
  1037. fm_remove_entity(entity)
  1038.  
  1039. return 1
  1040. }
  1041.  
  1042. stock fm_entity_set_origin(index, const Float:origin[3]) {
  1043. new Float:mins[3], Float:maxs[3]
  1044. pev(index, pev_mins, mins)
  1045. pev(index, pev_maxs, maxs)
  1046. engfunc(EngFunc_SetSize, index, mins, maxs)
  1047.  
  1048. return engfunc(EngFunc_SetOrigin, index, origin)
  1049. }
  1050.  
  1051. stock fm_set_entity_visibility(index, visible = 1) {
  1052. set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)
  1053.  
  1054. return 1
  1055. }
  1056.  
  1057. stock bool:fm_is_in_viewcone(index, const Float:point[3]) {
  1058. new Float:angles[3]
  1059. pev(index, pev_angles, angles)
  1060. engfunc(EngFunc_MakeVectors, angles)
  1061. global_get(glb_v_forward, angles)
  1062. angles[2] = 0.0
  1063.  
  1064. new Float:origin[3], Float:diff[3], Float:norm[3]
  1065. pev(index, pev_origin, origin)
  1066. xs_vec_sub(point, origin, diff)
  1067. diff[2] = 0.0
  1068. xs_vec_normalize(diff, norm)
  1069.  
  1070. new Float:dot, Float:fov
  1071. dot = xs_vec_dot(norm, angles)
  1072. pev(index, pev_fov, fov)
  1073. if (dot >= floatcos(fov * M_PI / 360))
  1074. return true
  1075.  
  1076. return false
  1077. }
  1078.  
  1079. stock fm_trace_line(ignoreent, const Float:start[3], const Float:end[3], Float:ret[3]) {
  1080. engfunc(EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0)
  1081.  
  1082. new ent = get_tr2(0, TR_pHit)
  1083. get_tr2(0, TR_vecEndPos, ret)
  1084.  
  1085. return pev_valid(ent) ? ent : 0
  1086. }
  1087.  
  1088. stock print_color(const id, const input[], any:...)
  1089. {
  1090. new count = 1, players[32]
  1091. static msg[191]
  1092. vformat(msg, 190, input, 3)
  1093.  
  1094. replace_all(msg, 190, "!g", "^4")
  1095. replace_all(msg, 190, "!y", "^1")
  1096. replace_all(msg, 190, "!t", "^3")
  1097.  
  1098. if (id) players[0] = id; else get_players(players, count, "ch")
  1099. {
  1100. for (new i = 0; i < count; i++)
  1101. {
  1102. if (is_user_connected(players[i]))
  1103. {
  1104. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  1105. write_byte(players[i])
  1106. write_string(msg)
  1107. message_end()
  1108. }
  1109. }
  1110. }
  1111. return PLUGIN_HANDLED
  1112. }
  1113.  
  1114. stock get_alivetesnum()
  1115. {
  1116. new players[32], pnum;
  1117. get_players(players, pnum, "ae", "TERRORIST");
  1118. return pnum;
  1119. }
  1120.  
  1121. stock get_alivectsnum()
  1122. {
  1123. new players[32], pnum;
  1124. get_players(players, pnum, "ae", "CT");
  1125. return pnum;
  1126. }
  1127.  
  1128. stock zonaszam()
  1129. {
  1130. zonakereses()
  1131. return maxzonak;
  1132. }
  1133.  
  1134. stock create_thunder(vec1[3],vec2[3])
  1135. {
  1136. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  1137. write_byte(0);
  1138. write_coord(vec1[0]);
  1139. write_coord(vec1[1]);
  1140. write_coord(vec1[2]);
  1141. write_coord(vec2[0]);
  1142. write_coord(vec2[1]);
  1143. write_coord(vec2[2]);
  1144. write_short(light);
  1145. write_byte(1);
  1146. write_byte(5);
  1147. write_byte(2);
  1148. write_byte(20);
  1149. write_byte(30);
  1150. write_byte(200);
  1151. write_byte(200);
  1152. write_byte(200);
  1153. write_byte(200);
  1154. write_byte(200);
  1155. message_end();
  1156.  
  1157. message_begin( MSG_PVS, SVC_TEMPENTITY,vec2);
  1158. write_byte(TE_SPARKS);
  1159. write_coord(vec2[0]);
  1160. write_coord(vec2[1]);
  1161. write_coord(vec2[2]);
  1162. message_end();
  1163.  
  1164. message_begin(MSG_BROADCAST,SVC_TEMPENTITY,vec2);
  1165. write_byte(TE_SMOKE);
  1166. write_coord(vec2[0]);
  1167. write_coord(vec2[1]);
  1168. write_coord(vec2[2]);
  1169. write_short(smoke);
  1170. write_byte(10);
  1171. write_byte(10)
  1172. message_end();
  1173. }
  1174.  
  1175. stock spawnStaticSound( const index, const origin[3], const soundIndex, const Float:vol, const Float:atten, const pitch, const flags )
  1176. {
  1177. message_begin( index ? MSG_ONE : MSG_ALL, SVC_SPAWNSTATICSOUND, .player = index );
  1178. {
  1179. write_coord_f( origin[0] );
  1180. write_coord_f( origin[1] );
  1181. write_coord_f( origin[2] );
  1182. write_short( soundIndex );
  1183. write_byte( clamp_byte( floatround( vol * 255 ) ) );
  1184. write_byte( clamp_byte( floatround( atten * 64 ) ) );
  1185. write_short( index );
  1186. write_byte( pitch );
  1187. write_byte( flags );
  1188. }
  1189. message_end();
  1190. }