hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.16. 20:34



Jelenlévő felhasználók

Jelenleg 112 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 111 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: [ZP]Lasermine 282 Javítás
HozzászólásElküldve: 2013.07.13. 20:52 
Offline
Minden6ó
Avatar

Csatlakozott: 2011.01.19. 12:14
Hozzászólások: 4280
Megköszönt másnak: 218 alkalommal
Megköszönték neki: 285 alkalommal
Csatolmány:
hiba.jpg
hiba.jpg [ 172.53 KiB | Megtekintve 1417 alkalommal ]
Hali! Valaki ki javítaná ezt a hibát?

SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2.  
  3. #include <fakemeta>
  4.  
  5. #include <hamsandwich>
  6.  
  7. #include <xs>
  8.  
  9. #include <zombieplague>
  10.  
  11.  
  12.  
  13. #if AMXX_VERSION_NUM < 180
  14.  
  15. #assert AMX Mod X v1.8.0 or greater library required!
  16.  
  17. #endif
  18.  
  19.  
  20.  
  21. #define PLUGIN "[ZP] LaserMine"
  22.  
  23. #define VERSION "2.8.4"
  24.  
  25. #define AUTHOR "SandStriker / Shidla / QuZ / DJ_WEST"
  26.  
  27.  
  28.  
  29. #define RemoveEntity(%1) engfunc(EngFunc_RemoveEntity,%1)
  30.  
  31. #define TASK_PLANT 15100
  32.  
  33. #define TASK_RESET 15500
  34.  
  35. #define TASK_RELEASE 15900
  36.  
  37.  
  38.  
  39. #define LASERMINE_TEAM pev_iuser1 //EV_INT_iuser1
  40.  
  41. #define LASERMINE_OWNER pev_iuser2 //EV_INT_iuser3
  42.  
  43. #define LASERMINE_STEP pev_iuser3
  44.  
  45. #define LASERMINE_HITING pev_iuser4
  46.  
  47. #define LASERMINE_COUNT pev_fuser1
  48.  
  49.  
  50.  
  51. #define LASERMINE_POWERUP pev_fuser2
  52.  
  53. #define LASERMINE_BEAMTHINK pev_fuser3
  54.  
  55.  
  56.  
  57. #define LASERMINE_BEAMENDPOINT pev_vuser1
  58.  
  59. #define MAX_MINES 10
  60.  
  61. #define MODE_LASERMINE 0
  62.  
  63. #define OFFSET_TEAM 114
  64.  
  65. #define OFFSET_MONEY 115
  66.  
  67. #define OFFSET_DEATH 444
  68.  
  69.  
  70.  
  71. #define cs_get_user_team(%1) CsTeams:get_offset_value(%1,OFFSET_TEAM)
  72.  
  73. #define cs_get_user_deaths(%1) get_offset_value(%1,OFFSET_DEATH)
  74.  
  75. #define is_valid_player(%1) (1 <= %1 <= 32)
  76.  
  77.  
  78.  
  79.  
  80.  
  81. /*########### ????? ??? ? ???????? ????? ###########*/
  82.  
  83. // Itt adhato meg az embernek a lezer szine!
  84.  
  85. new const
  86.  
  87. Red_Hum = 0,
  88.  
  89. Green_Hum = 0,
  90.  
  91. Blue_Hum = 255;
  92.  
  93.  
  94.  
  95. // Itt adhato meg a zombi altal lerakott lezer szine!
  96.  
  97. new const
  98.  
  99. Red_Zomb = 255,
  100.  
  101. Green_Zomb = 0,
  102.  
  103. Blue_Zomb = 0;
  104.  
  105. /*####### ????? ??? ? ???????? ????? (?????) #######*/
  106.  
  107.  
  108.  
  109. enum CsTeams {
  110.  
  111. CS_TEAM_UNASSIGNED = 0,
  112.  
  113. CS_TEAM_T = 1,
  114.  
  115. CS_TEAM_CT = 2,
  116.  
  117. CS_TEAM_SPECTATOR = 3
  118.  
  119. };
  120.  
  121.  
  122.  
  123. enum tripmine_e {
  124.  
  125. TRIPMINE_IDLE1 = 0,
  126.  
  127. TRIPMINE_IDLE2,
  128.  
  129. TRIPMINE_ARM1,
  130.  
  131. TRIPMINE_ARM2,
  132.  
  133. TRIPMINE_FIDGET,
  134.  
  135. TRIPMINE_HOLSTER,
  136.  
  137. TRIPMINE_DRAW,
  138.  
  139. TRIPMINE_WORLD,
  140.  
  141. TRIPMINE_GROUND,
  142.  
  143. };
  144.  
  145.  
  146.  
  147. enum
  148.  
  149. {
  150.  
  151. POWERUP_THINK,
  152.  
  153. BEAMBREAK_THINK,
  154.  
  155. EXPLOSE_THINK
  156.  
  157. };
  158.  
  159.  
  160.  
  161. enum
  162.  
  163. {
  164.  
  165. POWERUP_SOUND,
  166.  
  167. ACTIVATE_SOUND,
  168.  
  169. STOP_SOUND
  170.  
  171. };
  172.  
  173.  
  174.  
  175. new const
  176.  
  177. ENT_MODELS[] = "models/zombie_plague/LaserMines/v_laser_mine.mdl",
  178.  
  179. ENT_SOUND1[] = "weapons/mine_deploy.wav",
  180.  
  181. ENT_SOUND2[] = "weapons/mine_charge.wav",
  182.  
  183. ENT_SOUND3[] = "weapons/mine_activate.wav",
  184.  
  185. ENT_SOUND4[] = "items/suitchargeok1.wav",
  186.  
  187. ENT_SOUND5[] = "items/gunpickup2.wav",
  188.  
  189. ENT_SOUND6[] = "debris/bustglass1.wav",
  190.  
  191. ENT_SOUND7[] = "debris/bustglass2.wav",
  192.  
  193. ENT_SPRITE1[] = "sprites/laserbeam.spr",
  194.  
  195. ENT_SPRITE2[] = "sprites/lm_explode.spr";
  196.  
  197.  
  198.  
  199. new const
  200.  
  201. ENT_CLASS_NAME[] = "lasermine",
  202.  
  203. ENT_CLASS_NAME3[] = "func_breakable",
  204.  
  205. gSnarkClassName[] = "wpn_snark", // ??? ????????????? ? ???????? "Snark"
  206.  
  207. barnacle_class[] = "barnacle", // ??? ????????????? ? ???????? "Barnacle"
  208.  
  209. weapon_box[] = "weaponbox";
  210.  
  211.  
  212.  
  213. new g_EntMine, beam, boom
  214.  
  215. new g_LENABLE, g_LFMONEY, g_LAMMO, g_LDMG, g_LBEO, g_LTMAX, g_LCOST, g_LHEALTH, g_LMODE, g_LRADIUS, g_NOROUND, g_NEMROUND, g_SURVROUND, g_SWARMROUND
  216.  
  217. new g_LRDMG,g_LFF,g_LCBT, g_LDELAY, g_LVISIBLE, g_LSTAMMO, g_LACCESS, g_LGLOW, g_LDMGMODE, g_LCLMODE
  218.  
  219. new g_LCBRIGHT, g_LDSEC, g_LCMDMODE, g_LBUYMODE, g_LME;
  220.  
  221. new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;
  222.  
  223. new g_dcount[33],g_nowtime,g_MaxPL
  224.  
  225. new bool:g_settinglaser[33]
  226.  
  227. new Float:plspeed[33], plsetting[33], g_havemine[33], g_deployed[33];
  228.  
  229. //new CVAR_LMCost
  230.  
  231.  
  232.  
  233. public plugin_init()
  234.  
  235. {
  236.  
  237. register_plugin(PLUGIN, VERSION, AUTHOR);
  238.  
  239.  
  240.  
  241. // ???????? ??????? Laser_TakeDamage ??? ????????? ????? ???????? ENT_CLASS_NAME3 (func_breakable)
  242.  
  243. RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")
  244.  
  245. // Add your code here...
  246.  
  247. register_clcmd("+setlaser","CreateLaserMine_Progress_b");
  248.  
  249. register_clcmd("-setlaser","StopCreateLaserMine");
  250.  
  251. register_clcmd("+dellaser","ReturnLaserMine_Progress");
  252.  
  253. register_clcmd("-dellaser","StopReturnLaserMine");
  254.  
  255. register_clcmd("say","say_lasermine");
  256.  
  257. register_clcmd("buy_lasermine","BuyLasermineChat");
  258.  
  259.  
  260.  
  261. g_LENABLE = register_cvar("zp_ltm","1")
  262.  
  263. g_LACCESS = register_cvar("zp_ltm_acs","0") //0 all, 1 admin
  264.  
  265. g_LMODE = register_cvar("zp_ltm_mode","0") //0 lasermine, 1 tripmine
  266.  
  267. g_LAMMO = register_cvar("zp_ltm_ammo","3")
  268.  
  269. g_LDMG = register_cvar("zp_ltm_dmg","60") //laser hit dmg
  270.  
  271. g_LCOST = register_cvar("zp_ltm_cost","20")
  272.  
  273. g_LFMONEY = register_cvar("zp_ltm_fragmoney","1")
  274.  
  275. g_LHEALTH = register_cvar("zp_ltm_health","500")
  276.  
  277. g_LTMAX = register_cvar("zp_ltm_teammax","100")
  278.  
  279. g_LRADIUS = register_cvar("zp_ltm_radius","320.0")
  280.  
  281. g_LRDMG = register_cvar("zp_ltm_rdmg","100") //radius damage
  282.  
  283. g_LFF = register_cvar("zp_ltm_ff","0")
  284.  
  285. g_LCBT = register_cvar("zp_ltm_cbt","ALL")
  286.  
  287. g_LDELAY = register_cvar("zp_ltm_delay","0.1")
  288.  
  289. g_LVISIBLE = register_cvar("zp_ltm_line","1")
  290.  
  291. g_LGLOW = register_cvar("zp_ltm_glow","0")
  292.  
  293. g_LCBRIGHT = register_cvar("zp_ltm_bright","255")//laser line brightness.
  294.  
  295. g_LCLMODE = register_cvar("zp_ltm_color","0") //0 is team color,1 is green
  296.  
  297. g_LDMGMODE = register_cvar("zp_ltm_ldmgmode","0") //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
  298.  
  299. g_LDSEC = register_cvar("zp_ltm_ldmgseconds","1") //mode 2 only, damage / seconds. default 1 (sec)
  300.  
  301. g_LSTAMMO = register_cvar("zp_ltm_startammo","2")
  302.  
  303. g_LBUYMODE = register_cvar("zp_ltm_buymode","1");
  304.  
  305. g_LCMDMODE = register_cvar("zp_ltm_cmdmode","0"); //0 is +USE key, 1 is bind, 2 is each.
  306.  
  307. g_LBEO = register_cvar("zp_ltm_brokeenemy","1");
  308.  
  309. g_NOROUND = register_cvar("zp_ltm_noround","1");
  310.  
  311. g_NEMROUND = register_cvar("zp_ltm_nemround","1");
  312.  
  313. g_SURVROUND = register_cvar("zp_ltm_survround","1");
  314.  
  315. g_SWARMROUND = register_cvar("zp_ltm_swarmround","1");
  316.  
  317.  
  318.  
  319. register_event("DeathMsg", "DeathEvent", "a");
  320.  
  321. register_event("CurWeapon", "standing", "be", "1=1");
  322.  
  323. register_event("ResetHUD", "delaycount", "a");
  324.  
  325. register_event("ResetHUD", "newround", "b");
  326.  
  327. register_logevent("endround", 2, "0=World triggered", "1=Round_End"); // ???????????? ????? ??????
  328.  
  329. register_event("Damage","CutDeploy_onDamage","b");
  330.  
  331. g_msgDeathMsg = get_user_msgid("DeathMsg");
  332.  
  333. g_msgScoreInfo = get_user_msgid("ScoreInfo");
  334.  
  335. g_msgDamage = get_user_msgid("Damage");
  336.  
  337. g_msgStatusText = get_user_msgid("StatusText");
  338.  
  339.  
  340.  
  341. // Forward.
  342.  
  343. register_forward(FM_Think, "ltm_Think");
  344.  
  345. register_forward(FM_PlayerPostThink, "ltm_PostThink");
  346.  
  347. register_forward(FM_PlayerPreThink, "ltm_PreThink");
  348.  
  349.  
  350.  
  351. // ??????????? ???? ??????
  352.  
  353. register_dictionary("LaserMines.txt")
  354.  
  355. register_cvar("Shidla", "[ZP] LaserMines v.2.8.2 Final", FCVAR_SERVER|FCVAR_SPONLY)
  356.  
  357.  
  358.  
  359. // ???????????? ExtraItem
  360.  
  361. g_LME = zp_register_extra_item("Laser Mine", get_pcvar_num(g_LCOST), ZP_TEAM_ANY)
  362.  
  363. }
  364.  
  365.  
  366.  
  367. public plugin_precache()
  368.  
  369. {
  370.  
  371. precache_sound(ENT_SOUND1);
  372.  
  373. precache_sound(ENT_SOUND2);
  374.  
  375. precache_sound(ENT_SOUND3);
  376.  
  377. precache_sound(ENT_SOUND4);
  378.  
  379. precache_sound(ENT_SOUND5);
  380.  
  381. precache_sound(ENT_SOUND6);
  382.  
  383. precache_sound(ENT_SOUND7);
  384.  
  385. precache_model(ENT_MODELS);
  386.  
  387. beam = precache_model(ENT_SPRITE1);
  388.  
  389. boom = precache_model(ENT_SPRITE2);
  390.  
  391. return PLUGIN_CONTINUE;
  392.  
  393. }
  394.  
  395.  
  396.  
  397. public plugin_modules()
  398.  
  399. {
  400.  
  401. require_module("fakemeta");
  402.  
  403. require_module("cstrike");
  404.  
  405. }
  406.  
  407.  
  408.  
  409. public plugin_cfg()
  410.  
  411. {
  412.  
  413. g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);
  414.  
  415. arrayset(g_havemine,0,sizeof(g_havemine));
  416.  
  417. arrayset(g_deployed,0,sizeof(g_deployed));
  418.  
  419. g_MaxPL = get_maxplayers();
  420.  
  421.  
  422.  
  423. new file[64]; get_localinfo("amxx_configsdir",file,63);
  424.  
  425. format(file, 63, "%s/zp_ltm_cvars_ap.cfg", file);
  426.  
  427. if(file_exists(file)) server_cmd("exec %s", file), server_exec();
  428.  
  429. }
  430.  
  431.  
  432.  
  433. public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
  434.  
  435. {
  436.  
  437. if(get_pcvar_num(g_LBEO))
  438.  
  439. {
  440.  
  441. new i_Owner
  442.  
  443.  
  444.  
  445. // ???????? ID ??????, ??????? ???????? ????
  446.  
  447. i_Owner = pev(victim, LASERMINE_OWNER)
  448.  
  449.  
  450.  
  451. // ???? ???? ??????? ????????, ? ??? ?? ???????? ??????.
  452.  
  453. if(i_Owner == attacker || !is_valid_player(i_Owner) || !is_valid_player(attacker))
  454.  
  455. return PLUGIN_CONTINUE
  456.  
  457.  
  458.  
  459. // ???? ???? ??????????? ?????????, ?? ???? ?? ??????? ?????? ?????
  460.  
  461. if((CsTeams:pev(victim, LASERMINE_TEAM) == CS_TEAM_CT) && (cs_get_user_team(attacker) != CS_TEAM_CT))
  462.  
  463. return PLUGIN_CONTINUE
  464.  
  465.  
  466.  
  467. // ???? ???? ??????????? ?????, ? ???????? ???? ? ????????? ? ?????? ???????? - ???? ???? ????? ???????? ???
  468.  
  469. if((CsTeams:pev(victim, LASERMINE_TEAM) == CS_TEAM_T) && ((cs_get_user_team(i_Owner) != CS_TEAM_T) || (CsTeams:pev(victim, LASERMINE_TEAM) != cs_get_user_team(attacker))))
  470.  
  471. return PLUGIN_CONTINUE
  472.  
  473.  
  474.  
  475. return HAM_SUPERCEDE
  476.  
  477. }
  478.  
  479. return PLUGIN_CONTINUE
  480.  
  481. }
  482.  
  483.  
  484.  
  485. public delaycount(id)
  486.  
  487. {
  488.  
  489. g_dcount[id] = floatround(get_gametime());
  490.  
  491. }
  492.  
  493.  
  494.  
  495. bool:CheckTime(id)
  496.  
  497. {
  498.  
  499. g_nowtime = floatround(get_gametime()) - g_dcount[id];
  500.  
  501. if(g_nowtime >= get_pcvar_num(g_LDELAY))
  502.  
  503. return true;
  504.  
  505. return false;
  506.  
  507. }
  508.  
  509.  
  510.  
  511. public CreateLaserMine_Progress_b(id)
  512.  
  513. {
  514.  
  515. if(get_pcvar_num(g_LCMDMODE) != 0)
  516.  
  517. CreateLaserMine_Progress(id);
  518.  
  519. return PLUGIN_HANDLED;
  520.  
  521. }
  522.  
  523.  
  524.  
  525. public CreateLaserMine_Progress(id)
  526.  
  527. {
  528.  
  529.  
  530.  
  531. if(!CreateCheck(id))
  532.  
  533. return PLUGIN_HANDLED;
  534.  
  535. g_settinglaser[id] = true;
  536.  
  537.  
  538.  
  539. message_begin(MSG_ONE, 108, {0,0,0}, id);
  540.  
  541. write_byte(1);
  542.  
  543. write_byte(0);
  544.  
  545. message_end();
  546.  
  547.  
  548.  
  549. set_task(1.2, "Spawn", (TASK_PLANT + id));
  550.  
  551.  
  552.  
  553. return PLUGIN_HANDLED;
  554.  
  555. }
  556.  
  557.  
  558.  
  559. public ReturnLaserMine_Progress(id)
  560.  
  561. {
  562.  
  563.  
  564.  
  565. if(!ReturnCheck(id))
  566.  
  567. return PLUGIN_HANDLED;
  568.  
  569. g_settinglaser[id] = true;
  570.  
  571.  
  572.  
  573. message_begin(MSG_ONE, 108, {0,0,0}, id);
  574.  
  575. write_byte(1);
  576.  
  577. write_byte(0);
  578.  
  579. message_end();
  580.  
  581.  
  582.  
  583. set_task(1.2, "ReturnMine", (TASK_RELEASE + id));
  584.  
  585.  
  586.  
  587. return PLUGIN_HANDLED;
  588.  
  589. }
  590.  
  591.  
  592.  
  593. public StopCreateLaserMine(id)
  594.  
  595. {
  596.  
  597.  
  598.  
  599. DeleteTask(id);
  600.  
  601. message_begin(MSG_ONE, 108, {0,0,0}, id);
  602.  
  603. write_byte(0);
  604.  
  605. write_byte(0);
  606.  
  607. message_end();
  608.  
  609.  
  610.  
  611. return PLUGIN_HANDLED;
  612.  
  613. }
  614.  
  615.  
  616.  
  617. public StopReturnLaserMine(id)
  618.  
  619. {
  620.  
  621.  
  622.  
  623. DeleteTask(id);
  624.  
  625. message_begin(MSG_ONE, 108, {0,0,0}, id);
  626.  
  627. write_byte(0);
  628.  
  629. write_byte(0);
  630.  
  631. message_end();
  632.  
  633.  
  634.  
  635. return PLUGIN_HANDLED;
  636.  
  637. }
  638.  
  639.  
  640.  
  641. public ReturnMine(id)
  642.  
  643. {
  644.  
  645. id -= TASK_RELEASE;
  646.  
  647. new tgt,body,Float:vo[3],Float:to[3];
  648.  
  649. get_user_aiming(id,tgt,body);
  650.  
  651. if(!pev_valid(tgt)) return;
  652.  
  653. pev(id,pev_origin,vo);
  654.  
  655. pev(tgt,pev_origin,to);
  656.  
  657. if(get_distance_f(vo,to) > 70.0) return;
  658.  
  659. new EntityName[32];
  660.  
  661. pev(tgt, pev_classname, EntityName, 31);
  662.  
  663. if(!equal(EntityName, ENT_CLASS_NAME)) return;
  664.  
  665. if(pev(tgt,LASERMINE_OWNER) != id) return;
  666.  
  667. RemoveEntity(tgt);
  668.  
  669.  
  670.  
  671. g_havemine[id] ++;
  672.  
  673. g_deployed[id] --;
  674.  
  675. emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  676.  
  677. ShowAmmo(id)
  678.  
  679.  
  680.  
  681. return;
  682.  
  683. }
  684.  
  685.  
  686.  
  687. public Spawn(id)
  688.  
  689. {
  690.  
  691. id -= TASK_PLANT
  692.  
  693. // motor
  694.  
  695. new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
  696.  
  697. if(!i_Ent)
  698.  
  699. {
  700.  
  701. client_print(id, print_chat,"[Laesrmine Debug] Can't Create Entity");
  702.  
  703. return PLUGIN_HANDLED_MAIN;
  704.  
  705. }
  706.  
  707. set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);
  708.  
  709.  
  710.  
  711. engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);
  712.  
  713.  
  714.  
  715. set_pev(i_Ent,pev_solid,SOLID_NOT);
  716.  
  717. set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);
  718.  
  719.  
  720.  
  721. set_pev(i_Ent,pev_frame,0);
  722.  
  723. set_pev(i_Ent,pev_body,3);
  724.  
  725. set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
  726.  
  727. set_pev(i_Ent,pev_framerate,0);
  728.  
  729. set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
  730.  
  731. set_pev(i_Ent,pev_dmg,100.0);
  732.  
  733. set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
  734.  
  735. new Float:vOrigin[3];
  736.  
  737. new Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
  738.  
  739. Float:vTraceEnd[3],Float:vEntAngles[3];
  740.  
  741. pev(id, pev_origin, vOrigin);
  742.  
  743. velocity_by_aim(id, 128, vTraceDirection);
  744.  
  745. xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
  746.  
  747. engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
  748.  
  749. new Float:fFraction;
  750.  
  751. get_tr2(0, TR_flFraction, fFraction);
  752.  
  753.  
  754.  
  755. // -- We hit something!
  756.  
  757. if(fFraction < 1.0)
  758.  
  759. {
  760.  
  761. // -- Save results to be used later.
  762.  
  763. get_tr2(0, TR_vecEndPos, vTraceEnd);
  764.  
  765. get_tr2(0, TR_vecPlaneNormal, vNormal);
  766.  
  767. }
  768.  
  769.  
  770.  
  771.  
  772.  
  773. xs_vec_mul_scalar(vNormal, 8.0, vNormal);
  774.  
  775. xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
  776.  
  777.  
  778.  
  779. engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });
  780.  
  781. engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);
  782.  
  783.  
  784.  
  785. // -- Rotate tripmine.
  786.  
  787. vector_to_angle(vNormal,vEntAngles);
  788.  
  789. set_pev(i_Ent,pev_angles,vEntAngles);
  790.  
  791.  
  792.  
  793. // -- Calculate laser end origin.
  794.  
  795. new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
  796.  
  797.  
  798.  
  799. xs_vec_mul_scalar(vNormal, 8192.0, vNormal);
  800.  
  801. xs_vec_add(vNewOrigin, vNormal, vBeamEnd);
  802.  
  803.  
  804.  
  805. engfunc(EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0);
  806.  
  807.  
  808.  
  809. get_tr2(0, TR_vecPlaneNormal, vNormal);
  810.  
  811. get_tr2(0, TR_vecEndPos, vTracedBeamEnd);
  812.  
  813.  
  814.  
  815. // -- Save results to be used later.
  816.  
  817. set_pev(i_Ent, LASERMINE_OWNER, id);
  818.  
  819. set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
  820.  
  821. set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
  822.  
  823. new Float:fCurrTime = get_gametime();
  824.  
  825.  
  826.  
  827. set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5);
  828.  
  829. set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
  830.  
  831. set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2);
  832.  
  833.  
  834.  
  835. PlaySound(i_Ent,POWERUP_SOUND);
  836.  
  837. g_deployed[id]++;
  838.  
  839. g_havemine[id]--;
  840.  
  841. DeleteTask(id);
  842.  
  843. ShowAmmo(id);
  844.  
  845. return 1;
  846.  
  847. }
  848.  
  849.  
  850.  
  851. stock TeamDeployedCount(id)
  852.  
  853. {
  854.  
  855. static i;
  856.  
  857. static CsTeams:t;t = cs_get_user_team(id);
  858.  
  859. static cnt;cnt=0;
  860.  
  861.  
  862.  
  863. for(i = 1;i <= g_MaxPL;i++)
  864.  
  865. {
  866.  
  867. if(is_user_connected(i))
  868.  
  869. if(t == cs_get_user_team(i))
  870.  
  871. cnt += g_deployed[i];
  872.  
  873. }
  874.  
  875.  
  876.  
  877. return cnt;
  878.  
  879. }
  880.  
  881.  
  882.  
  883. bool:CheckCanTeam(id)
  884.  
  885. {
  886.  
  887. new arg[5],CsTeam:num;
  888.  
  889. get_pcvar_string(g_LCBT,arg,3);
  890.  
  891. if(equali(arg,"Z"))
  892.  
  893. {
  894.  
  895. num = CsTeam:CS_TEAM_T;
  896.  
  897. }
  898.  
  899. else if(equali(arg,"H"))
  900.  
  901. {
  902.  
  903. num = CsTeam:CS_TEAM_CT;
  904.  
  905. }
  906.  
  907. else if(equali(arg,"ALL") || equali(arg,"HZ") || equali(arg,"ZH"))
  908.  
  909. {
  910.  
  911. num = CsTeam:CS_TEAM_UNASSIGNED;
  912.  
  913. }
  914.  
  915. else
  916.  
  917. {
  918.  
  919. num = CsTeam:CS_TEAM_UNASSIGNED;
  920.  
  921. }
  922.  
  923. if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
  924.  
  925. return false;
  926.  
  927. return true;
  928.  
  929. }
  930.  
  931.  
  932.  
  933. bool:CanCheck(id,mode) // ????????: ????? ????? ??????? ????
  934.  
  935. {
  936.  
  937. if(!get_pcvar_num(g_LENABLE))
  938.  
  939. {
  940.  
  941. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOTACTIVE")
  942.  
  943.  
  944.  
  945. return false;
  946.  
  947. }
  948.  
  949. if(get_pcvar_num(g_LACCESS) != 0)
  950.  
  951. if(!(get_user_flags(id) & ADMIN_IMMUNITY))
  952.  
  953. {
  954.  
  955. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOACCESS")
  956.  
  957. return false;
  958.  
  959. }
  960.  
  961. if(!pev_user_alive(id)) return false;
  962.  
  963. if(!CheckCanTeam(id))
  964.  
  965. {
  966.  
  967. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CBT")
  968.  
  969. return false;
  970.  
  971. }
  972.  
  973. if(mode == 0)
  974.  
  975. {
  976.  
  977. if(g_havemine[id] <= 0)
  978.  
  979. {
  980.  
  981. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_DONTHAVEMINE")
  982.  
  983. return false;
  984.  
  985. }
  986.  
  987. }
  988.  
  989. if(mode == 1)
  990.  
  991. {
  992.  
  993. if(get_pcvar_num(g_LBUYMODE) == 0)
  994.  
  995. {
  996.  
  997. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CANTBUY")
  998.  
  999. return false;
  1000.  
  1001. }
  1002.  
  1003. if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
  1004.  
  1005. {
  1006.  
  1007. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_HAVEMAX")
  1008.  
  1009. return false;
  1010.  
  1011. }
  1012.  
  1013. if(zp_get_user_ammo_packs(id) < get_pcvar_num(g_LCOST))
  1014.  
  1015. {
  1016.  
  1017. client_print(id, print_chat, "%L %L%d %L", id, "CHATTAG",id, "STR_NOMONEY",get_pcvar_num(g_LCOST),id, "STR_NEEDED")
  1018.  
  1019. return false;
  1020.  
  1021. }
  1022.  
  1023. }
  1024.  
  1025. if(!CheckTime(id))
  1026.  
  1027. {
  1028.  
  1029. client_print(id, print_chat, "%L %L %d %L", id, "CHATTAG",id, "STR_DELAY",get_pcvar_num(g_LDELAY)-g_nowtime,id, "STR_SECONDS")
  1030.  
  1031. return false;
  1032.  
  1033. }
  1034.  
  1035.  
  1036.  
  1037. return true;
  1038.  
  1039. }
  1040.  
  1041.  
  1042.  
  1043. bool:ReturnCheck(id)
  1044.  
  1045. {
  1046.  
  1047. if(!CanCheck(id,-1)) return false;
  1048.  
  1049. if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
  1050.  
  1051. new tgt,body,Float:vo[3],Float:to[3];
  1052.  
  1053. get_user_aiming(id,tgt,body);
  1054.  
  1055. if(!pev_valid(tgt)) return false;
  1056.  
  1057. pev(id,pev_origin,vo);
  1058.  
  1059. pev(tgt,pev_origin,to);
  1060.  
  1061. if(get_distance_f(vo,to) > 70.0) return false;
  1062.  
  1063. new EntityName[32];
  1064.  
  1065. pev(tgt, pev_classname, EntityName, 31);
  1066.  
  1067. if(!equal(EntityName, ENT_CLASS_NAME)) return false;
  1068.  
  1069. if(pev(tgt,LASERMINE_OWNER) != id) return false;
  1070.  
  1071. return true;
  1072.  
  1073. }
  1074.  
  1075.  
  1076.  
  1077. bool:CreateCheck(id)
  1078.  
  1079. {
  1080.  
  1081. if(!CanCheck(id,0)) return false;
  1082.  
  1083.  
  1084.  
  1085. // ???????? ?? ??????????
  1086.  
  1087. if(!zp_has_round_started() && get_pcvar_num(g_NOROUND))
  1088.  
  1089. {
  1090.  
  1091. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOROUND")
  1092.  
  1093. return false;
  1094.  
  1095. }
  1096.  
  1097.  
  1098.  
  1099. if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))
  1100.  
  1101. {
  1102.  
  1103. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NEMROUND")
  1104.  
  1105. return false;
  1106.  
  1107. }
  1108.  
  1109.  
  1110.  
  1111. if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND))
  1112.  
  1113. {
  1114.  
  1115. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_SURVROUND")
  1116.  
  1117. return false;
  1118.  
  1119. }
  1120.  
  1121.  
  1122.  
  1123. if(zp_is_swarm_round() && get_pcvar_num(g_SWARMROUND))
  1124.  
  1125. {
  1126.  
  1127. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_SWARMROUND")
  1128.  
  1129. return false;
  1130.  
  1131. }
  1132.  
  1133.  
  1134.  
  1135. if(g_deployed[id] >= get_pcvar_num(g_LAMMO))
  1136.  
  1137. {
  1138.  
  1139. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MAXDEPLOY")
  1140.  
  1141. return false;
  1142.  
  1143. }
  1144.  
  1145.  
  1146.  
  1147. if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
  1148.  
  1149. {
  1150.  
  1151. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MANYPPL")
  1152.  
  1153. return false;
  1154.  
  1155. }
  1156.  
  1157. new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
  1158.  
  1159. pev(id, pev_origin, vOrigin);
  1160.  
  1161. velocity_by_aim(id, 128, vTraceDirection);
  1162.  
  1163. xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
  1164.  
  1165. engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
  1166.  
  1167. new Float:fFraction,Float:vTraceNormal[3];
  1168.  
  1169. get_tr2(0, TR_flFraction, fFraction);
  1170.  
  1171. // -- We hit something!
  1172.  
  1173. if(fFraction < 1.0)
  1174.  
  1175. {
  1176.  
  1177. // -- Save results to be used later.
  1178.  
  1179. get_tr2(0, TR_vecEndPos, vTraceEnd);
  1180.  
  1181. get_tr2(0, TR_vecPlaneNormal, vTraceNormal);
  1182.  
  1183.  
  1184.  
  1185. return true;
  1186.  
  1187. }
  1188.  
  1189.  
  1190.  
  1191. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_PLANTWALL")
  1192.  
  1193. DeleteTask(id);
  1194.  
  1195. // -- Did not touched something. (not solid)
  1196.  
  1197. return false;
  1198.  
  1199. }
  1200.  
  1201.  
  1202.  
  1203. public ltm_Think(i_Ent)
  1204.  
  1205. {
  1206.  
  1207. if(!pev_valid(i_Ent))
  1208.  
  1209. return FMRES_IGNORED;
  1210.  
  1211. new EntityName[32];
  1212.  
  1213. pev(i_Ent, pev_classname, EntityName, 31);
  1214.  
  1215. if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
  1216.  
  1217. // -- Entity is not a tripmine, ignoring the next...
  1218.  
  1219. if(!equal(EntityName, ENT_CLASS_NAME))
  1220.  
  1221. return FMRES_IGNORED;
  1222.  
  1223.  
  1224.  
  1225. static Float:fCurrTime;
  1226.  
  1227. fCurrTime = get_gametime();
  1228.  
  1229.  
  1230.  
  1231. switch(pev(i_Ent, LASERMINE_STEP))
  1232.  
  1233. {
  1234.  
  1235. case POWERUP_THINK :
  1236.  
  1237. {
  1238.  
  1239. new Float:fPowerupTime;
  1240.  
  1241. pev(i_Ent, LASERMINE_POWERUP, fPowerupTime);
  1242.  
  1243.  
  1244.  
  1245. if(fCurrTime > fPowerupTime)
  1246.  
  1247. {
  1248.  
  1249. set_pev(i_Ent, pev_solid, SOLID_BBOX);
  1250.  
  1251. set_pev(i_Ent, LASERMINE_STEP, BEAMBREAK_THINK);
  1252.  
  1253.  
  1254.  
  1255. PlaySound(i_Ent, ACTIVATE_SOUND);
  1256.  
  1257. }
  1258.  
  1259. if(get_pcvar_num(g_LGLOW)!=0)
  1260.  
  1261. {
  1262.  
  1263. if(get_pcvar_num(g_LCLMODE)==0)
  1264.  
  1265. {
  1266.  
  1267. switch (pev(i_Ent,LASERMINE_TEAM))
  1268.  
  1269. {
  1270.  
  1271. // ???? ?????? ?????
  1272.  
  1273. case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,Red_Zomb,Green_Zomb,Blue_Zomb,kRenderNormal,5);
  1274.  
  1275. // ???? ?????? ????????
  1276.  
  1277. case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,Red_Hum,Green_Hum,Blue_Hum,kRenderNormal,5);
  1278.  
  1279. }
  1280.  
  1281. }else
  1282.  
  1283. {
  1284.  
  1285. // ???? ??????, ???? ????? "?????????? ??? ????" ????
  1286.  
  1287. set_rendering(i_Ent,kRenderFxGlowShell,random_num(50 , 200),random_num(50 , 200),random_num(50 , 200),kRenderNormal,5);
  1288.  
  1289. }
  1290.  
  1291. }
  1292.  
  1293. set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);
  1294.  
  1295. }
  1296.  
  1297. case BEAMBREAK_THINK :
  1298.  
  1299. {
  1300.  
  1301. static Float:vEnd[3],Float:vOrigin[3];
  1302.  
  1303. pev(i_Ent, pev_origin, vOrigin);
  1304.  
  1305. pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);
  1306.  
  1307.  
  1308.  
  1309. static iHit, Float:fFraction;
  1310.  
  1311. engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0);
  1312.  
  1313.  
  1314.  
  1315. get_tr2(0, TR_flFraction, fFraction);
  1316.  
  1317. iHit = get_tr2(0, TR_pHit);
  1318.  
  1319.  
  1320.  
  1321. // -- Something has passed the laser.
  1322.  
  1323. if(fFraction < 1.0)
  1324.  
  1325. {
  1326.  
  1327. // -- Ignoring others tripmines entity.
  1328.  
  1329. if(pev_valid(iHit))
  1330.  
  1331. {
  1332.  
  1333. pev(iHit, pev_classname, EntityName, 31);
  1334.  
  1335. // ??????? ?????? ?????
  1336.  
  1337. if(!equal(EntityName, ENT_CLASS_NAME) && !equal(EntityName, gSnarkClassName) && !equal(EntityName, barnacle_class) && !equal(EntityName, weapon_box))
  1338.  
  1339. {
  1340.  
  1341. set_pev(i_Ent, pev_enemy, iHit);
  1342.  
  1343.  
  1344.  
  1345. if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
  1346.  
  1347. CreateLaserDamage(i_Ent,iHit);
  1348.  
  1349. else
  1350.  
  1351. if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
  1352.  
  1353. set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
  1354.  
  1355.  
  1356.  
  1357. if (!pev_valid(i_Ent)) // ???? ?? ?????? ?????? - ?????? ?? ??????. ??????? DJ_WEST
  1358.  
  1359. return FMRES_IGNORED;
  1360.  
  1361.  
  1362.  
  1363. set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
  1364.  
  1365. }
  1366.  
  1367. }
  1368.  
  1369. }
  1370.  
  1371. if(get_pcvar_num(g_LDMGMODE)!=0)
  1372.  
  1373. if(pev(i_Ent,LASERMINE_HITING) != iHit)
  1374.  
  1375. set_pev(i_Ent,LASERMINE_HITING,iHit);
  1376.  
  1377.  
  1378.  
  1379. // -- Tripmine is still there.
  1380.  
  1381. if(pev_valid(i_Ent))
  1382.  
  1383. {
  1384.  
  1385. static Float:fHealth;
  1386.  
  1387. pev(i_Ent, pev_health, fHealth);
  1388.  
  1389.  
  1390.  
  1391. if(fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
  1392.  
  1393. {
  1394.  
  1395. set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
  1396.  
  1397. set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
  1398.  
  1399. }
  1400.  
  1401.  
  1402.  
  1403. static Float:fBeamthink;
  1404.  
  1405. pev(i_Ent, LASERMINE_BEAMTHINK, fBeamthink);
  1406.  
  1407.  
  1408.  
  1409. if(fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))
  1410.  
  1411. {
  1412.  
  1413. DrawLaser(i_Ent, vOrigin, vEnd);
  1414.  
  1415. set_pev(i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1);
  1416.  
  1417. }
  1418.  
  1419. set_pev(i_Ent, pev_nextthink, fCurrTime + 0.01);
  1420.  
  1421. }
  1422.  
  1423. }
  1424.  
  1425. case EXPLOSE_THINK :
  1426.  
  1427. {
  1428.  
  1429. // -- Stopping entity to think
  1430.  
  1431. set_pev(i_Ent, pev_nextthink, 0.0);
  1432.  
  1433. PlaySound(i_Ent, STOP_SOUND);
  1434.  
  1435. g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
  1436.  
  1437. CreateExplosion(i_Ent);
  1438.  
  1439. CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
  1440.  
  1441. RemoveEntity (i_Ent);
  1442.  
  1443. }
  1444.  
  1445. }
  1446.  
  1447.  
  1448.  
  1449. return FMRES_IGNORED;
  1450.  
  1451. }
  1452.  
  1453.  
  1454.  
  1455. PlaySound(i_Ent, i_SoundType)
  1456.  
  1457. {
  1458.  
  1459. switch (i_SoundType)
  1460.  
  1461. {
  1462.  
  1463. case POWERUP_SOUND :
  1464.  
  1465. {
  1466.  
  1467. emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  1468.  
  1469. emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM);
  1470.  
  1471. }
  1472.  
  1473. case ACTIVATE_SOUND :
  1474.  
  1475. {
  1476.  
  1477. emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75);
  1478.  
  1479. }
  1480.  
  1481. case STOP_SOUND :
  1482.  
  1483. {
  1484.  
  1485. emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM);
  1486.  
  1487. emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75);
  1488.  
  1489. }
  1490.  
  1491. }
  1492.  
  1493. }
  1494.  
  1495.  
  1496.  
  1497. DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])
  1498.  
  1499. {
  1500.  
  1501. new tcolor[3];
  1502.  
  1503. new teamid = pev(i_Ent, LASERMINE_TEAM);
  1504.  
  1505. if(get_pcvar_num(g_LCLMODE) == 0)
  1506.  
  1507. {
  1508.  
  1509. switch(teamid){
  1510.  
  1511. case 1:{
  1512.  
  1513. // ???? ???? ??? ?????
  1514.  
  1515. tcolor[0] = Red_Zomb;
  1516.  
  1517. tcolor[1] = Green_Zomb;
  1518.  
  1519. tcolor[2] = Blue_Zomb;
  1520.  
  1521. }
  1522.  
  1523. case 2:{
  1524.  
  1525. // ???? ???? ??? ????????
  1526.  
  1527. tcolor[0] = Red_Hum;
  1528.  
  1529. tcolor[1] = Green_Hum;
  1530.  
  1531. tcolor[2] = Blue_Hum;
  1532.  
  1533. }
  1534.  
  1535. }
  1536.  
  1537. }else
  1538.  
  1539. {
  1540.  
  1541. // ???? ???? ??? ???? ??? ?????? 1-? ??? ??? ????
  1542.  
  1543. tcolor[0] = random_num(50 , 200);
  1544.  
  1545. tcolor[1] = random_num(50 , 200);
  1546.  
  1547. tcolor[2] = random_num(50 , 200);
  1548.  
  1549. }
  1550.  
  1551. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  1552.  
  1553. write_byte(TE_BEAMPOINTS);
  1554.  
  1555. engfunc(EngFunc_WriteCoord,v_Origin[0]);
  1556.  
  1557. engfunc(EngFunc_WriteCoord,v_Origin[1]);
  1558.  
  1559. engfunc(EngFunc_WriteCoord,v_Origin[2]);
  1560.  
  1561. engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
  1562.  
  1563. engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
  1564.  
  1565. engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
  1566.  
  1567. write_short(beam);
  1568.  
  1569. write_byte(0);
  1570.  
  1571. write_byte(0);
  1572.  
  1573. write_byte(1); //Life
  1574.  
  1575. write_byte(5); //Width
  1576.  
  1577. write_byte(0); //wave
  1578.  
  1579. write_byte(tcolor[0]); // r
  1580.  
  1581. write_byte(tcolor[1]); // g
  1582.  
  1583. write_byte(tcolor[2]); // b
  1584.  
  1585. write_byte(get_pcvar_num(g_LCBRIGHT));
  1586.  
  1587. write_byte(255);
  1588.  
  1589. message_end();
  1590.  
  1591. }
  1592.  
  1593.  
  1594.  
  1595. CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
  1596.  
  1597. {
  1598.  
  1599. // Get given parameters
  1600.  
  1601. new Float:vecSrc[3];
  1602.  
  1603. pev(iCurrent, pev_origin, vecSrc);
  1604.  
  1605.  
  1606.  
  1607. new AtkID =pev(iCurrent,LASERMINE_OWNER);
  1608.  
  1609. new TeamID=pev(iCurrent,LASERMINE_TEAM);
  1610.  
  1611.  
  1612.  
  1613. new ent = -1;
  1614.  
  1615. new Float:tmpdmg = DmgMAX;
  1616.  
  1617.  
  1618.  
  1619. new Float:kickback = 0.0;
  1620.  
  1621. // Needed for doing some nice calculations <!-- s:P --><img src=\"{SMILIES_PATH}/icon_razz.gif\" alt=\":P\" title=\"vicces\" /><!-- s:P -->
  1622.  
  1623. new Float:Tabsmin[3], Float:Tabsmax[3];
  1624.  
  1625. new Float:vecSpot[3];
  1626.  
  1627. new Float:Aabsmin[3], Float:Aabsmax[3];
  1628.  
  1629. new Float:vecSee[3];
  1630.  
  1631. new trRes;
  1632.  
  1633. new Float:flFraction;
  1634.  
  1635. new Float:vecEndPos[3];
  1636.  
  1637. new Float:distance;
  1638.  
  1639. new Float:origin[3], Float:vecPush[3];
  1640.  
  1641. new Float:invlen;
  1642.  
  1643. new Float:velocity[3];
  1644.  
  1645. new iHitHP,iHitTeam;
  1646.  
  1647. // Calculate falloff
  1648.  
  1649. new Float:falloff;
  1650.  
  1651. if(Radius > 0.0)
  1652.  
  1653. {
  1654.  
  1655. falloff = DmgMAX / Radius;
  1656.  
  1657. } else {
  1658.  
  1659. falloff = 1.0;
  1660.  
  1661. }
  1662.  
  1663. // Find monsters and players inside a specifiec radius
  1664.  
  1665. while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
  1666.  
  1667. {
  1668.  
  1669. if(!pev_valid(ent)) continue;
  1670.  
  1671. if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  1672.  
  1673. {
  1674.  
  1675. // Entity is not a player or monster, ignore it
  1676.  
  1677. continue;
  1678.  
  1679. }
  1680.  
  1681. if(!pev_user_alive(ent)) continue;
  1682.  
  1683. // Reset data
  1684.  
  1685. kickback = 1.0;
  1686.  
  1687. tmpdmg = DmgMAX;
  1688.  
  1689. // The following calculations are provided by Orangutanz, THANKS!
  1690.  
  1691. // We use absmin and absmax for the most accurate information
  1692.  
  1693. pev(ent, pev_absmin, Tabsmin);
  1694.  
  1695. pev(ent, pev_absmax, Tabsmax);
  1696.  
  1697. xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
  1698.  
  1699. xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
  1700.  
  1701. pev(iCurrent, pev_absmin, Aabsmin);
  1702.  
  1703. pev(iCurrent, pev_absmax, Aabsmax);
  1704.  
  1705. xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
  1706.  
  1707. xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
  1708.  
  1709. engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
  1710.  
  1711. get_tr2(trRes, TR_flFraction, flFraction);
  1712.  
  1713. // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
  1714.  
  1715. if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
  1716.  
  1717. {
  1718.  
  1719. // Work out the distance between impact and entity
  1720.  
  1721. get_tr2(trRes, TR_vecEndPos, vecEndPos);
  1722.  
  1723. distance = get_distance_f(vecSrc, vecEndPos) * falloff;
  1724.  
  1725. tmpdmg -= distance;
  1726.  
  1727. if(tmpdmg < 0.0)
  1728.  
  1729. tmpdmg = 0.0;
  1730.  
  1731. // Kickback Effect
  1732.  
  1733. if(kickback != 0.0)
  1734.  
  1735. {
  1736.  
  1737. xs_vec_sub(vecSpot,vecSee,origin);
  1738.  
  1739. invlen = 1.0/get_distance_f(vecSpot, vecSee);
  1740.  
  1741.  
  1742.  
  1743. xs_vec_mul_scalar(origin,invlen,vecPush);
  1744.  
  1745. pev(ent, pev_velocity, velocity)
  1746.  
  1747. xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
  1748.  
  1749. xs_vec_mul_scalar(vecPush,kickback,vecPush);
  1750.  
  1751. xs_vec_add(velocity,vecPush,velocity);
  1752.  
  1753. if(tmpdmg < 60.0)
  1754.  
  1755. {
  1756.  
  1757. xs_vec_mul_scalar(velocity,12.0,velocity);
  1758.  
  1759. } else {
  1760.  
  1761. xs_vec_mul_scalar(velocity,4.0,velocity);
  1762.  
  1763. }
  1764.  
  1765. if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
  1766.  
  1767. {
  1768.  
  1769. // There's some movement todo <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  1770.  
  1771. set_pev(ent, pev_velocity, velocity)
  1772.  
  1773. }
  1774.  
  1775. }
  1776.  
  1777.  
  1778.  
  1779. iHitHP = pev_user_health(ent) - floatround(tmpdmg)
  1780.  
  1781. iHitTeam = int:cs_get_user_team(ent)
  1782.  
  1783. if(iHitHP <= 0)
  1784.  
  1785. {
  1786.  
  1787. if(iHitTeam != TeamID)
  1788.  
  1789. {
  1790.  
  1791. zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) + get_pcvar_num(g_LFMONEY))
  1792.  
  1793. set_score(AtkID,ent,1,iHitHP)
  1794.  
  1795. }else
  1796.  
  1797. {
  1798.  
  1799. if(get_pcvar_num(g_LFF))
  1800.  
  1801. {
  1802.  
  1803. zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) - get_pcvar_num(g_LFMONEY))
  1804.  
  1805. set_score(AtkID,ent,-1,iHitHP)
  1806.  
  1807. }
  1808.  
  1809. }
  1810.  
  1811. }else
  1812.  
  1813. {
  1814.  
  1815. if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
  1816.  
  1817. {
  1818.  
  1819. //set_pev(Player,pev_health,iHitHP)
  1820.  
  1821. set_user_health(ent, iHitHP)
  1822.  
  1823. engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);
  1824.  
  1825. write_byte(floatround(tmpdmg))
  1826.  
  1827. write_byte(floatround(tmpdmg))
  1828.  
  1829. write_long(DMG_BULLET)
  1830.  
  1831. engfunc(EngFunc_WriteCoord,vecSrc[0])
  1832.  
  1833. engfunc(EngFunc_WriteCoord,vecSrc[1])
  1834.  
  1835. engfunc(EngFunc_WriteCoord,vecSrc[2])
  1836.  
  1837. message_end()
  1838.  
  1839. }
  1840.  
  1841. }
  1842.  
  1843. }
  1844.  
  1845. }
  1846.  
  1847. return
  1848.  
  1849. }
  1850.  
  1851.  
  1852.  
  1853. bool:pev_user_alive(ent)
  1854.  
  1855. {
  1856.  
  1857. new deadflag = pev(ent,pev_deadflag);
  1858.  
  1859. if(deadflag != DEAD_NO)
  1860.  
  1861. return false;
  1862.  
  1863. return true;
  1864.  
  1865. }
  1866.  
  1867.  
  1868.  
  1869. CreateExplosion(iCurrent)
  1870.  
  1871. {
  1872.  
  1873. new Float:vOrigin[3];
  1874.  
  1875. pev(iCurrent,pev_origin,vOrigin);
  1876.  
  1877.  
  1878.  
  1879. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  1880.  
  1881. write_byte(99); //99 = KillBeam
  1882.  
  1883. write_short(iCurrent);
  1884.  
  1885. message_end();
  1886.  
  1887.  
  1888.  
  1889. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);
  1890.  
  1891. write_byte(TE_EXPLOSION);
  1892.  
  1893. engfunc(EngFunc_WriteCoord,vOrigin[0]);
  1894.  
  1895. engfunc(EngFunc_WriteCoord,vOrigin[1]);
  1896.  
  1897. engfunc(EngFunc_WriteCoord,vOrigin[2]);
  1898.  
  1899. write_short(boom);
  1900.  
  1901. write_byte(30);
  1902.  
  1903. write_byte(15);
  1904.  
  1905. write_byte(0);
  1906.  
  1907. message_end();
  1908.  
  1909. }
  1910.  
  1911.  
  1912.  
  1913. CreateLaserDamage(iCurrent,isHit)
  1914.  
  1915. {
  1916.  
  1917. if(isHit < 0) return PLUGIN_CONTINUE
  1918.  
  1919. switch(get_pcvar_num(g_LDMGMODE))
  1920.  
  1921. {
  1922.  
  1923. case 1:
  1924.  
  1925. {
  1926.  
  1927. if(pev(iCurrent,LASERMINE_HITING) == isHit)
  1928.  
  1929. return PLUGIN_CONTINUE
  1930.  
  1931. }
  1932.  
  1933. case 2:
  1934.  
  1935. {
  1936.  
  1937. if(pev(iCurrent,LASERMINE_HITING) == isHit)
  1938.  
  1939. {
  1940.  
  1941. static Float:cnt
  1942.  
  1943. static now,htime;now = floatround(get_gametime())
  1944.  
  1945.  
  1946.  
  1947. pev(iCurrent,LASERMINE_COUNT,cnt)
  1948.  
  1949. htime = floatround(cnt)
  1950.  
  1951. if(now - htime < get_pcvar_num(g_LDSEC))
  1952.  
  1953. {
  1954.  
  1955. return PLUGIN_CONTINUE;
  1956.  
  1957. }else{
  1958.  
  1959. set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
  1960.  
  1961. }
  1962.  
  1963. }else
  1964.  
  1965. {
  1966.  
  1967. set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
  1968.  
  1969. }
  1970.  
  1971. }
  1972.  
  1973. }
  1974.  
  1975.  
  1976.  
  1977. new Float:vOrigin[3],Float:vEnd[3]
  1978.  
  1979. pev(iCurrent,pev_origin,vOrigin)
  1980.  
  1981. pev(iCurrent,pev_vuser1,vEnd)
  1982.  
  1983.  
  1984.  
  1985. new teamid = pev(iCurrent, LASERMINE_TEAM)
  1986.  
  1987.  
  1988.  
  1989. new szClassName[32]
  1990.  
  1991. new Alive,God
  1992.  
  1993. new iHitTeam,iHitHP,id
  1994.  
  1995. new hitscore
  1996.  
  1997.  
  1998.  
  1999. szClassName[0] = '^0'
  2000.  
  2001. pev(isHit,pev_classname,szClassName,32)
  2002.  
  2003. if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  2004.  
  2005. {
  2006.  
  2007. Alive = pev_user_alive(isHit)
  2008.  
  2009. God = get_user_godmode(isHit)
  2010.  
  2011. if(!Alive || God) return PLUGIN_CONTINUE
  2012.  
  2013. iHitTeam = int:cs_get_user_team(isHit)
  2014.  
  2015. iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
  2016.  
  2017. id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
  2018.  
  2019. if(iHitHP <= 0)
  2020.  
  2021. {
  2022.  
  2023. if(iHitTeam != teamid)
  2024.  
  2025. {
  2026.  
  2027. emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  2028.  
  2029. hitscore = 1
  2030.  
  2031. zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) + get_pcvar_num(g_LFMONEY))
  2032.  
  2033. set_score(id,isHit,hitscore,iHitHP)
  2034.  
  2035. }else
  2036.  
  2037. {
  2038.  
  2039. if(get_pcvar_num(g_LFF))
  2040.  
  2041. {
  2042.  
  2043. emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  2044.  
  2045. hitscore = -1
  2046.  
  2047. zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LFMONEY))
  2048.  
  2049. set_score(id,isHit,hitscore,iHitHP)
  2050.  
  2051. }
  2052.  
  2053. }
  2054.  
  2055. }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
  2056.  
  2057. {
  2058.  
  2059. emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  2060.  
  2061. set_user_health(isHit,iHitHP)
  2062.  
  2063. set_pev(iCurrent,LASERMINE_HITING,isHit);
  2064.  
  2065. engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
  2066.  
  2067. write_byte(get_pcvar_num(g_LDMG))
  2068.  
  2069. write_byte(get_pcvar_num(g_LDMG))
  2070.  
  2071. write_long(DMG_BULLET)
  2072.  
  2073. engfunc(EngFunc_WriteCoord,vOrigin[0])
  2074.  
  2075. engfunc(EngFunc_WriteCoord,vOrigin[1])
  2076.  
  2077. engfunc(EngFunc_WriteCoord,vOrigin[2])
  2078.  
  2079. message_end()
  2080.  
  2081. }
  2082.  
  2083. }else if(equal(szClassName, ENT_CLASS_NAME3))
  2084.  
  2085. {
  2086.  
  2087. new hl;
  2088.  
  2089. hl = pev_user_health(isHit);
  2090.  
  2091. set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
  2092.  
  2093. }
  2094.  
  2095. return PLUGIN_CONTINUE
  2096.  
  2097. }
  2098.  
  2099.  
  2100.  
  2101. stock pev_user_health(id)
  2102.  
  2103. {
  2104.  
  2105. new Float:health
  2106.  
  2107. pev(id,pev_health,health)
  2108.  
  2109. return floatround(health)
  2110.  
  2111. }
  2112.  
  2113.  
  2114.  
  2115. stock set_user_health(id,health)
  2116.  
  2117. {
  2118.  
  2119. health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
  2120.  
  2121. }
  2122.  
  2123.  
  2124.  
  2125. stock get_user_godmode(index) {
  2126.  
  2127. new Float:val
  2128.  
  2129. pev(index, pev_takedamage, val)
  2130.  
  2131.  
  2132.  
  2133. return (val == DAMAGE_NO)
  2134.  
  2135. }
  2136.  
  2137.  
  2138.  
  2139. stock set_user_frags(index, frags)
  2140.  
  2141. {
  2142.  
  2143. set_pev(index, pev_frags, float(frags))
  2144.  
  2145.  
  2146.  
  2147. return 1
  2148.  
  2149. }
  2150.  
  2151.  
  2152.  
  2153. stock pev_user_frags(index)
  2154.  
  2155. {
  2156.  
  2157. new Float:frags;
  2158.  
  2159. pev(index,pev_frags,frags);
  2160.  
  2161. return floatround(frags);
  2162.  
  2163. }
  2164.  
  2165.  
  2166.  
  2167. set_score(id,target,hitscore,HP){
  2168.  
  2169.  
  2170.  
  2171. new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore
  2172.  
  2173. set_user_frags(id,idfrags)
  2174.  
  2175. new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
  2176.  
  2177. set_user_frags(target,tarfrags)
  2178.  
  2179. new idteam = int:cs_get_user_team(id)
  2180.  
  2181. new iddeaths = cs_get_user_deaths(id)
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187. message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
  2188.  
  2189. write_byte(id)
  2190.  
  2191. write_byte(target)
  2192.  
  2193. write_byte(0)
  2194.  
  2195. write_string(ENT_CLASS_NAME)
  2196.  
  2197. message_end()
  2198.  
  2199.  
  2200.  
  2201. message_begin(MSG_ALL, g_msgScoreInfo)
  2202.  
  2203. write_byte(id)
  2204.  
  2205. write_short(idfrags)
  2206.  
  2207. write_short(iddeaths)
  2208.  
  2209. write_short(0)
  2210.  
  2211. write_short(idteam)
  2212.  
  2213. message_end()
  2214.  
  2215.  
  2216.  
  2217. set_msg_block(g_msgDeathMsg, BLOCK_ONCE)
  2218.  
  2219.  
  2220.  
  2221. set_user_health(target, HP)
  2222.  
  2223.  
  2224.  
  2225. }
  2226.  
  2227.  
  2228.  
  2229. public BuyLasermine(id)
  2230.  
  2231. {
  2232.  
  2233. if(!CanCheck(id,1)) return PLUGIN_CONTINUE
  2234.  
  2235.  
  2236.  
  2237. g_havemine[id]++;
  2238.  
  2239.  
  2240.  
  2241. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_BOUGHT")
  2242.  
  2243.  
  2244.  
  2245. emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  2246.  
  2247. ShowAmmo(id)
  2248.  
  2249. return PLUGIN_HANDLED
  2250.  
  2251. }
  2252.  
  2253.  
  2254.  
  2255. public BuyLasermineChat(id)
  2256.  
  2257. {
  2258.  
  2259. if(!CanCheck(id,1)) return PLUGIN_CONTINUE
  2260.  
  2261.  
  2262.  
  2263. zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LCOST))
  2264.  
  2265. g_havemine[id]++;
  2266.  
  2267.  
  2268.  
  2269. client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_BOUGHT")
  2270.  
  2271.  
  2272.  
  2273. emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  2274.  
  2275. ShowAmmo(id)
  2276.  
  2277. return PLUGIN_HANDLED
  2278.  
  2279. }
  2280.  
  2281.  
  2282.  
  2283. public zp_extra_item_selected(id, itemid)
  2284.  
  2285. {
  2286.  
  2287. if(itemid == g_LME)
  2288.  
  2289. BuyLasermine(id)
  2290.  
  2291.  
  2292.  
  2293. if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
  2294.  
  2295. return ZP_PLUGIN_HANDLED
  2296.  
  2297.  
  2298.  
  2299. return PLUGIN_CONTINUE
  2300.  
  2301. }
  2302.  
  2303.  
  2304.  
  2305. ShowAmmo(id)
  2306.  
  2307. {
  2308.  
  2309. new ammo[51]
  2310.  
  2311. new PlugStat[ 555 char ];
  2312.  
  2313. formatex(PlugStat, charsmax(PlugStat), "%L", LANG_PLAYER, "STR_STATE")
  2314.  
  2315. formatex(ammo, 50, "%s %i/%i",PlugStat, g_havemine[id],get_pcvar_num(g_LAMMO))
  2316.  
  2317.  
  2318.  
  2319. message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id)
  2320.  
  2321. write_byte(0)
  2322.  
  2323. write_string(ammo)
  2324.  
  2325. message_end()
  2326.  
  2327. }
  2328.  
  2329.  
  2330.  
  2331. public showInfo(id)
  2332.  
  2333. {
  2334.  
  2335. client_print(id, print_chat, "%L", id, "STR_REF")
  2336.  
  2337. }
  2338.  
  2339.  
  2340.  
  2341. public say_lasermine(id){
  2342.  
  2343. new said[32]
  2344.  
  2345. read_argv(1,said,31);
  2346.  
  2347. if(!get_pcvar_num(g_LENABLE))
  2348.  
  2349. {
  2350.  
  2351. return PLUGIN_CONTINUE
  2352.  
  2353. }
  2354.  
  2355. if(equali(said,"/buy lasermine")||equali(said,"/lm")||equali(said,"buy_lasermine")){
  2356.  
  2357. BuyLasermineChat(id)
  2358.  
  2359. }else if(equali(said, "lasermine") || equali(said, "/lasermine")){
  2360.  
  2361. const SIZE = 1024
  2362.  
  2363. new msg[SIZE+1],len = 0;
  2364.  
  2365. len += formatex(msg[len], SIZE - len, "<html><body>")
  2366.  
  2367. len += formatex(msg[len], SIZE - len, "<p><b>Lezer</b></p><br/><br/>")
  2368.  
  2369. len += formatex(msg[len], SIZE - len, "<p>Fel tudsz tenni a falra lezert.</p><br/>")
  2370.  
  2371. len += formatex(msg[len], SIZE - len, "<p>A lezer megoli az ellenfeleket, ha belemennek!</p><br/><br/>")
  2372.  
  2373. len += formatex(msg[len], SIZE - len, "<p><b>Lezer parancsok:</b></p><br/><br/>")
  2374.  
  2375. len += formatex(msg[len], SIZE - len, "<p><b>Ird: /buy lasermine</b> vagy <b>/lm</b> hogy lezert vehess!<br/>")
  2376.  
  2377. len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //Hogy F2-vel lezert vehess, ird a consolba: bind ^"F2^" buy_lasermine<br/>")
  2378.  
  2379. len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")
  2380.  
  2381. len += formatex(msg[len], SIZE - len, "</body></html>")
  2382.  
  2383. show_motd(id, msg, "Lasermine Entity help")
  2384.  
  2385. return PLUGIN_CONTINUE
  2386.  
  2387. }
  2388.  
  2389. else if(containi(said, "laser") != -1) {
  2390.  
  2391. showInfo(id)
  2392.  
  2393. return PLUGIN_CONTINUE
  2394.  
  2395. }
  2396.  
  2397. return PLUGIN_CONTINUE
  2398.  
  2399. }
  2400.  
  2401.  
  2402.  
  2403. public standing(id)
  2404.  
  2405. {
  2406.  
  2407. if(!g_settinglaser[id])
  2408.  
  2409. return PLUGIN_CONTINUE
  2410.  
  2411.  
  2412.  
  2413. set_pev(id, pev_maxspeed, 1.0)
  2414.  
  2415.  
  2416.  
  2417. return PLUGIN_CONTINUE
  2418.  
  2419. }
  2420.  
  2421.  
  2422.  
  2423. public ltm_PostThink(id)
  2424.  
  2425. {
  2426.  
  2427. if(!g_settinglaser[id] && plsetting[id]){
  2428.  
  2429. resetspeed(id)
  2430.  
  2431. }
  2432.  
  2433. else if(g_settinglaser[id] && !plsetting[id]) {
  2434.  
  2435. pev(id, pev_maxspeed,plspeed[id])
  2436.  
  2437. set_pev(id, pev_maxspeed, 1.0)
  2438.  
  2439. }
  2440.  
  2441. plsetting[id] = g_settinglaser[id]
  2442.  
  2443. return FMRES_IGNORED
  2444.  
  2445. }
  2446.  
  2447.  
  2448.  
  2449. public ltm_PreThink(id)
  2450.  
  2451. {
  2452.  
  2453. if(!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
  2454.  
  2455. return FMRES_IGNORED;
  2456.  
  2457.  
  2458.  
  2459. if(pev(id, pev_button) & IN_USE && !(pev(id, pev_oldbuttons) & IN_USE))
  2460.  
  2461. CreateLaserMine_Progress(id)
  2462.  
  2463. return FMRES_IGNORED;
  2464.  
  2465. }
  2466.  
  2467.  
  2468.  
  2469. resetspeed(id)
  2470.  
  2471. {
  2472.  
  2473. set_pev(id, pev_maxspeed, plspeed[id])
  2474.  
  2475. }
  2476.  
  2477.  
  2478.  
  2479. public client_putinserver(id){
  2480.  
  2481. g_deployed[id] = 0;
  2482.  
  2483. g_havemine[id] = 0;
  2484.  
  2485. DeleteTask(id);
  2486.  
  2487. return PLUGIN_CONTINUE
  2488.  
  2489. }
  2490.  
  2491.  
  2492.  
  2493. public client_disconnect(id){
  2494.  
  2495. if(!get_pcvar_num(g_LENABLE))
  2496.  
  2497. return PLUGIN_CONTINUE
  2498.  
  2499. DeleteTask(id);
  2500.  
  2501. RemoveAllTripmines(id);
  2502.  
  2503. return PLUGIN_CONTINUE
  2504.  
  2505. }
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511. public newround(id){
  2512.  
  2513. if(!get_pcvar_num(g_LENABLE))
  2514.  
  2515. return PLUGIN_CONTINUE
  2516.  
  2517. pev(id, pev_maxspeed,plspeed[id])
  2518.  
  2519. DeleteTask(id);
  2520.  
  2521. RemoveAllTripmines(id);
  2522.  
  2523. //client_print(id, print_chat, "[ZP][LM][DeBug] All Mines removied!");
  2524.  
  2525. delaycount(id);
  2526.  
  2527. SetStartAmmo(id);
  2528.  
  2529. return PLUGIN_CONTINUE
  2530.  
  2531. }
  2532.  
  2533.  
  2534.  
  2535. public endround(id)
  2536.  
  2537. {
  2538.  
  2539. if(!get_pcvar_num(g_LENABLE))
  2540.  
  2541. return PLUGIN_CONTINUE
  2542.  
  2543.  
  2544.  
  2545. // ???????? ??? ????? ????? ??????
  2546.  
  2547. DeleteTask(id);
  2548.  
  2549. RemoveAllTripmines(id);
  2550.  
  2551.  
  2552.  
  2553. return PLUGIN_CONTINUE
  2554.  
  2555. }
  2556.  
  2557.  
  2558.  
  2559. public DeathEvent(){
  2560.  
  2561. if(!get_pcvar_num(g_LENABLE))
  2562.  
  2563. return PLUGIN_CONTINUE
  2564.  
  2565.  
  2566.  
  2567. new id = read_data(2)
  2568.  
  2569. if(is_user_connected(id)) DeleteTask(id);
  2570.  
  2571. return PLUGIN_CONTINUE
  2572.  
  2573. }
  2574.  
  2575.  
  2576.  
  2577. public RemoveAllTripmines(i_Owner)
  2578.  
  2579. {
  2580.  
  2581. new iEnt = g_MaxPL + 1;
  2582.  
  2583. new clsname[32];
  2584.  
  2585. while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME)))
  2586.  
  2587. {
  2588.  
  2589. if(i_Owner)
  2590.  
  2591. {
  2592.  
  2593. if(pev(iEnt, LASERMINE_OWNER) != i_Owner)
  2594.  
  2595. continue;
  2596.  
  2597. clsname[0] = '^0'
  2598.  
  2599. pev(iEnt, pev_classname, clsname, sizeof(clsname)-1);
  2600.  
  2601. if(equali(clsname, ENT_CLASS_NAME))
  2602.  
  2603. {
  2604.  
  2605. PlaySound(iEnt, STOP_SOUND);
  2606.  
  2607. RemoveEntity(iEnt);
  2608.  
  2609. }
  2610.  
  2611. }
  2612.  
  2613. else
  2614.  
  2615. set_pev(iEnt, pev_flags, FL_KILLME);
  2616.  
  2617. }
  2618.  
  2619. g_deployed[i_Owner]=0;
  2620.  
  2621. }
  2622.  
  2623.  
  2624.  
  2625. SetStartAmmo(id)
  2626.  
  2627. {
  2628.  
  2629. new stammo = get_pcvar_num(g_LSTAMMO);
  2630.  
  2631. if(stammo <= 0) return PLUGIN_CONTINUE;
  2632.  
  2633. g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
  2634.  
  2635. return PLUGIN_CONTINUE;
  2636.  
  2637. }
  2638.  
  2639.  
  2640.  
  2641. public CutDeploy_onDamage(id)
  2642.  
  2643. {
  2644.  
  2645. if(get_user_health(id) < 1)
  2646.  
  2647. DeleteTask(id);
  2648.  
  2649. }
  2650.  
  2651.  
  2652.  
  2653. DeleteTask(id)
  2654.  
  2655. {
  2656.  
  2657. if(task_exists((TASK_PLANT + id)))
  2658.  
  2659. {
  2660.  
  2661. remove_task((TASK_PLANT + id))
  2662.  
  2663. }
  2664.  
  2665. if(task_exists((TASK_RELEASE + id)))
  2666.  
  2667. {
  2668.  
  2669. remove_task((TASK_RELEASE + id))
  2670.  
  2671. }
  2672.  
  2673. g_settinglaser[id] = false
  2674.  
  2675. return PLUGIN_CONTINUE;
  2676.  
  2677. }
  2678.  
  2679.  
  2680.  
  2681. stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
  2682.  
  2683. {
  2684.  
  2685. static Float:RenderColor[3];
  2686.  
  2687. RenderColor[0] = float(r);
  2688.  
  2689. RenderColor[1] = float(g);
  2690.  
  2691. RenderColor[2] = float(b);
  2692.  
  2693.  
  2694.  
  2695. set_pev(entity, pev_renderfx, fx);
  2696.  
  2697. set_pev(entity, pev_rendercolor, RenderColor);
  2698.  
  2699. set_pev(entity, pev_rendermode, render);
  2700.  
  2701. set_pev(entity, pev_renderamt, float(amount));
  2702.  
  2703.  
  2704.  
  2705. return 1
  2706.  
  2707. }
  2708.  
  2709.  
  2710.  
  2711. // Gets offset data
  2712.  
  2713. get_offset_value(id, type)
  2714.  
  2715. {
  2716.  
  2717. new key = -1;
  2718.  
  2719. switch(type)
  2720.  
  2721. {
  2722.  
  2723. case OFFSET_TEAM: key = OFFSET_TEAM;
  2724.  
  2725. case OFFSET_MONEY:
  2726.  
  2727. key = OFFSET_MONEY;
  2728.  
  2729. case OFFSET_DEATH: key = OFFSET_DEATH;
  2730.  
  2731. }
  2732.  
  2733. if(key != -1)
  2734.  
  2735. {
  2736.  
  2737. if(is_amd64_server()) key += 25;
  2738.  
  2739. return get_pdata_int(id, key);
  2740.  
  2741. }
  2742.  
  2743. return -1;
  2744.  
  2745. }
  2746.  
  2747. stock print_color(const id, const input[], any:...)
  2748.  
  2749. {
  2750.  
  2751. new count = 1, players[32]
  2752.  
  2753. static msg[191]
  2754.  
  2755. vformat(msg, 190, input, 3)
  2756.  
  2757.  
  2758.  
  2759. replace_all(msg, 190, "!g", "^4")
  2760.  
  2761. replace_all(msg, 190, "!y", "^1")
  2762.  
  2763. replace_all(msg, 190, "!t", "^3")
  2764.  
  2765. replace_all(msg, 190, "?", "á")
  2766.  
  2767. replace_all(msg, 190, "?", "é")
  2768.  
  2769. replace_all(msg, 190, "?", "í")
  2770.  
  2771. replace_all(msg, 190, "?", "ó")
  2772.  
  2773. replace_all(msg, 190, "?", "ö")
  2774.  
  2775. replace_all(msg, 190, "?", "ő")
  2776.  
  2777. replace_all(msg, 190, "?", "ú")
  2778.  
  2779. replace_all(msg, 190, "?", "ü")
  2780.  
  2781. replace_all(msg, 190, "?", "ű")
  2782.  
  2783. replace_all(msg, 190, "?", "Á")
  2784.  
  2785. replace_all(msg, 190, "?", "É")
  2786.  
  2787. replace_all(msg, 190, "?", "Í")
  2788.  
  2789. replace_all(msg, 190, "?", "Ó")
  2790.  
  2791. replace_all(msg, 190, "?", "Ö")
  2792.  
  2793. replace_all(msg, 190, "?", "Ő")
  2794.  
  2795. replace_all(msg, 190, "?", "Ú")
  2796.  
  2797. replace_all(msg, 190, "?", "Ü")
  2798.  
  2799. replace_all(msg, 190, "?", "Ű")
  2800.  
  2801.  
  2802.  
  2803. if (id) players[0] = id; else get_players(players, count, "ch")
  2804.  
  2805. {
  2806.  
  2807. for (new i = 0; i < count; i++)
  2808.  
  2809. {
  2810.  
  2811. if (is_user_connected(players[i]))
  2812.  
  2813. {
  2814.  
  2815. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  2816.  
  2817. write_byte(players[i])
  2818.  
  2819. write_string(msg)
  2820.  
  2821. message_end()
  2822.  
  2823. }
  2824.  
  2825. }
  2826.  
  2827. }
  2828.  
  2829. return PLUGIN_HANDLED
  2830.  
  2831. }
  2832.  

_________________
<<eb@>>Team Website - Közösség
17Buddies - Általam készített pályák.
GameBanana - Általam készített pályák/vágott hangok.

Kép
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [ZP]Lasermine 282 Javítás
HozzászólásElküldve: 2013.07.13. 20:54 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.09.23. 20:29
Hozzászólások: 325
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 87 alkalommal
Hibás xs.inc fájl.
Töltsd le:
https://www.dropbox.com/s/buu9183b6cse0wy/xs.inc
És másold be az előző helyére.
VAGY:
Használd az oldalátalakítót!

Ők köszönték meg Vinnice nek ezt a hozzászólást: norbee.16 (2013.07.13. 21:03)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 26 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole