hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.23. 08:41



Jelenlévő felhasználók

Jelenleg 215 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 214 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  [ 3 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: laser mine
HozzászólásElküldve: 2013.05.26. 16:27 
Offline
Őskövület
Avatar

Csatlakozott: 2011.12.28. 00:35
Hozzászólások: 2736
Megköszönt másnak: 56 alkalommal
Megköszönték neki: 275 alkalommal
Hali.

Valaki ezt ki tudná javítani:
SMA Forráskód: [ Mindet kijelol ]
  1. /*
  2. ?????? ???????????? Shidla [SGC] ?????????? ??? ???, ???? ??????? ??, ??? ?????? ????)))
  3. ICQ: 312-298-513
  4.  
  5. Shidla [SGC] | 2010 ???
  6.  
  7. 2.8.1 [Final Version] | 09.09.2010
  8. */
  9.  
  10. #include <amxmodx>
  11. #include <fakemeta>
  12. #include <hamsandwich>
  13. #include <xs>
  14. #include <zombieplague>
  15. #include <colorchat>
  16.  
  17. #if AMXX_VERSION_NUM < 180
  18. #assert AMX Mod X v1.8.0 or greater library required!
  19. #endif
  20.  
  21. #define PLUGIN "[ZP] LaserMine"
  22. #define VERSION "2.8.1"
  23. #define AUTHOR "SandStriker / Shidla / QuZ/DJ_WEST"
  24.  
  25. #define RemoveEntity(%1) engfunc(EngFunc_RemoveEntity,%1)
  26. #define TASK_PLANT 15100
  27. #define TASK_RESET 15500
  28. #define TASK_RELEASE 15900
  29.  
  30. #define LASERMINE_TEAM pev_iuser1 //EV_INT_iuser1
  31. #define LASERMINE_OWNER pev_iuser2 //EV_INT_iuser3
  32. #define LASERMINE_STEP pev_iuser3
  33. #define LASERMINE_HITING pev_iuser4
  34. #define LASERMINE_COUNT pev_fuser1
  35.  
  36. #define LASERMINE_POWERUP pev_fuser2
  37. #define LASERMINE_BEAMTHINK pev_fuser3
  38.  
  39. #define LASERMINE_BEAMENDPOINT pev_vuser1
  40. #define MAX_MINES 10
  41. #define MODE_LASERMINE 0
  42. #define OFFSET_TEAM 114
  43. #define OFFSET_MONEY 115
  44. #define OFFSET_DEATH 444
  45.  
  46. #define cs_get_user_team(%1) CsTeams:get_offset_value(%1,OFFSET_TEAM)
  47. #define cs_get_user_deaths(%1) get_offset_value(%1,OFFSET_DEATH)
  48.  
  49. // ???? ?? ???? ???????????? ? ????. ???????? ???? ???????? ??????!
  50. new const LMCost = 2
  51.  
  52.  
  53. /*########### ????? ??? ? ???????? ????? ###########*/
  54. // ???? ???? ? ?????? ?????
  55. new const
  56. Red_Hum = 0,
  57. Green_Hum = 255,
  58. Blue_Hum = 255;
  59.  
  60. // ???? ???? ? ?????? ?????
  61. new const
  62. Red_Zomb = 255,
  63. Green_Zomb = 204,
  64. Blue_Zomb = 0;
  65. /*####### ????? ??? ? ???????? ????? (?????) #######*/
  66.  
  67. enum CsTeams {
  68. CS_TEAM_UNASSIGNED = 0,
  69. CS_TEAM_T = 1,
  70. CS_TEAM_CT = 2,
  71. CS_TEAM_SPECTATOR = 3
  72. };
  73.  
  74. enum tripmine_e {
  75. TRIPMINE_IDLE1 = 0,
  76. TRIPMINE_IDLE2,
  77. TRIPMINE_ARM1,
  78. TRIPMINE_ARM2,
  79. TRIPMINE_FIDGET,
  80. TRIPMINE_HOLSTER,
  81. TRIPMINE_DRAW,
  82. TRIPMINE_WORLD,
  83. TRIPMINE_GROUND,
  84. };
  85.  
  86. enum
  87. {
  88. POWERUP_THINK,
  89. BEAMBREAK_THINK,
  90. EXPLOSE_THINK
  91. };
  92.  
  93. enum
  94. {
  95. POWERUP_SOUND,
  96. ACTIVATE_SOUND,
  97. STOP_SOUND
  98. };
  99.  
  100. new const
  101. ENT_MODELS[] = "models/zombie_plague/LaserMines/v_laser_mine.mdl",
  102. ENT_SOUND1[] = "weapons/mine_deploy.wav",
  103. ENT_SOUND2[] = "weapons/mine_charge.wav",
  104. ENT_SOUND3[] = "weapons/mine_activate.wav",
  105. ENT_SOUND4[] = "items/suitchargeok1.wav",
  106. ENT_SOUND5[] = "items/gunpickup2.wav",
  107. ENT_SOUND6[] = "debris/bustglass1.wav",
  108. ENT_SOUND7[] = "debris/bustglass2.wav",
  109. ENT_SPRITE1[] = "sprites/laserbeam.spr",
  110. ENT_SPRITE2[] = "sprites/lm_explode.spr";
  111.  
  112. new const
  113. ENT_CLASS_NAME[] = "lasermine",
  114. ENT_CLASS_NAME3[] = "func_breakable",
  115. gSnarkClassName[] = "wpn_snark", // ??? ????????????? ? ???????? "Snark"
  116. barnacle_class[] = "barnacle", // ??? ????????????? ? ???????? "Barnacle"
  117. weapon_box[] = "weaponbox";
  118.  
  119. new g_EntMine, beam, boom
  120. 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
  121. new g_LRDMG,g_LFF,g_LCBT, g_LDELAY, g_LVISIBLE, g_LSTAMMO, g_LACCESS, g_LGLOW, g_LDMGMODE, g_LCLMODE
  122. new g_LCBRIGHT, g_LDSEC, g_LCMDMODE, g_LBUYMODE, g_LME;
  123. new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;
  124. new g_dcount[33],g_nowtime,g_MaxPL
  125. new bool:g_settinglaser[33]
  126. new Float:plspeed[33], plsetting[33], g_havemine[33], g_deployed[33];
  127. //new CVAR_LMCost
  128.  
  129. public plugin_init()
  130. {
  131. register_plugin(PLUGIN, VERSION, AUTHOR);
  132.  
  133. // ???????????? ExtraItem
  134.  
  135. g_LME = zp_register_extra_item("Laser Mine", LMCost, ZP_TEAM_ANY)
  136.  
  137. // ???????? ??????? Laser_TakeDamage ??? ????????? ????? ???????? ENT_CLASS_NAME3 (func_breakable)
  138. RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")
  139. // Add your code here...
  140. register_clcmd("+setlaser","CreateLaserMine_Progress_b");
  141. register_clcmd("-setlaser","StopCreateLaserMine");
  142. register_clcmd("+dellaser","ReturnLaserMine_Progress");
  143. register_clcmd("-dellaser","StopReturnLaserMine");
  144. register_clcmd("say","say_lasermine");
  145. register_clcmd("buy_lasermine","BuyLasermine");
  146.  
  147. g_LENABLE = register_cvar("zp_ltm","1")
  148. g_LACCESS = register_cvar("zp_ltm_acs","0") //0 all, 1 admin
  149. g_LMODE = register_cvar("zp_ltm_mode","0") //0 lasermine, 1 tripmine
  150. g_LAMMO = register_cvar("zp_ltm_ammo","5")
  151. g_LDMG = register_cvar("zp_ltm_dmg","60") //laser hit dmg
  152. g_LCOST = register_cvar("zp_ltm_cost","2")
  153. g_LFMONEY = register_cvar("zp_ltm_fragmoney","1")
  154. g_LHEALTH = register_cvar("zp_ltm_health","5")
  155. g_LTMAX = register_cvar("zp_ltm_teammax","100")
  156. g_LRADIUS = register_cvar("zp_ltm_radius","320.0")
  157. g_LRDMG = register_cvar("zp_ltm_rdmg","100") //radius damage
  158. g_LFF = register_cvar("zp_ltm_ff","0")
  159. g_LCBT = register_cvar("zp_ltm_cbt","ALL")
  160. g_LDELAY = register_cvar("zp_ltm_delay","0.1")
  161. g_LVISIBLE = register_cvar("zp_ltm_line","1")
  162. g_LGLOW = register_cvar("zp_ltm_glow","0")
  163. g_LCBRIGHT = register_cvar("zp_ltm_bright","255")//laser line brightness.
  164. g_LCLMODE = register_cvar("zp_ltm_color","0") //0 is team color,1 is green
  165. g_LDMGMODE = register_cvar("zp_ltm_ldmgmode","0") //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
  166. g_LDSEC = register_cvar("zp_ltm_ldmgseconds","1") //mode 2 only, damage / seconds. default 1 (sec)
  167. g_LSTAMMO = register_cvar("zp_ltm_startammo","1")
  168. g_LBUYMODE = register_cvar("zp_ltm_buymode","1");
  169. g_LCMDMODE = register_cvar("zp_ltm_cmdmode","0"); //0 is +USE key, 1 is bind, 2 is each.
  170. g_LBEO = register_cvar("zp_ltm_brokeenemy","1");
  171. g_NOROUND = register_cvar("zp_ltm_noround","1");
  172. g_NEMROUND = register_cvar("zp_ltm_nemround","1");
  173. g_SURVROUND = register_cvar("zp_ltm_survround","1");
  174.  
  175. register_event("DeathMsg", "DeathEvent", "a");
  176. register_event("CurWeapon", "standing", "be", "1=1");
  177. register_event("ResetHUD", "delaycount", "a");
  178. register_event("ResetHUD", "newround", "b");
  179. register_logevent("endround", 2, "0=World triggered", "1=Round_End"); // ???????????? ????? ??????
  180. register_event("Damage","CutDeploy_onDamage","b");
  181. g_msgDeathMsg = get_user_msgid("DeathMsg");
  182. g_msgScoreInfo = get_user_msgid("ScoreInfo");
  183. g_msgDamage = get_user_msgid("Damage");
  184. g_msgStatusText = get_user_msgid("StatusText");
  185.  
  186. // Forward.
  187. register_forward(FM_Think, "ltm_Think");
  188. register_forward(FM_PlayerPostThink, "ltm_PostThink");
  189. register_forward(FM_PlayerPreThink, "ltm_PreThink");
  190.  
  191. // ??????????? ???? ??????
  192. register_dictionary("lezer.txt")
  193. register_cvar("Shidla", "[ZP] LaserMines v.2.8.1 Final", FCVAR_SERVER|FCVAR_SPONLY)
  194. }
  195.  
  196. public plugin_precache()
  197. {
  198. precache_sound(ENT_SOUND1);
  199. precache_sound(ENT_SOUND2);
  200. precache_sound(ENT_SOUND3);
  201. precache_sound(ENT_SOUND4);
  202. precache_sound(ENT_SOUND5);
  203. precache_sound(ENT_SOUND6);
  204. precache_sound(ENT_SOUND7);
  205. precache_model(ENT_MODELS);
  206. beam = precache_model(ENT_SPRITE1);
  207. boom = precache_model(ENT_SPRITE2);
  208. return PLUGIN_CONTINUE;
  209. }
  210.  
  211. public plugin_modules()
  212. {
  213. require_module("fakemeta");
  214. require_module("cstrike");
  215. }
  216.  
  217. public plugin_cfg()
  218. {
  219. g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);
  220. arrayset(g_havemine,0,sizeof(g_havemine));
  221. arrayset(g_deployed,0,sizeof(g_deployed));
  222. g_MaxPL = get_maxplayers();
  223.  
  224. new file[64]; get_localinfo("amxx_configsdir",file,63);
  225. format(file, 63, "%s/zp_ltm_cvars_ap.cfg", file);
  226. if(file_exists(file)) server_cmd("exec %s", file), server_exec();
  227. }
  228.  
  229. public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
  230. {
  231. if(get_pcvar_num(g_LBEO))
  232. {
  233. new i_Owner
  234.  
  235. // ???????? ID ??????, ??????? ???????? ????
  236. i_Owner = pev(victim, LASERMINE_OWNER)
  237.  
  238. // ???? ??????? ????, ??? ???????? ???? ? ????, ??? ???????? ?????????
  239. if(CsTeams:pev(victim, LASERMINE_TEAM) == cs_get_user_team(attacker))
  240. // ???? ??? ??? ???????? ????, ?? ????????? ? ???, ??? ?? ????????, ?? ?????????? ??????????
  241. if(i_Owner != attacker)
  242. return HAM_SUPERCEDE
  243. return PLUGIN_CONTINUE
  244. }
  245. return PLUGIN_CONTINUE
  246. }
  247.  
  248. public delaycount(id)
  249. {
  250. g_dcount[id] = floatround(get_gametime());
  251. }
  252.  
  253. bool:CheckTime(id)
  254. {
  255. g_nowtime = floatround(get_gametime()) - g_dcount[id];
  256. if(g_nowtime >= get_pcvar_num(g_LDELAY))
  257. return true;
  258. return false;
  259. }
  260.  
  261. public CreateLaserMine_Progress_b(id)
  262. {
  263. if(get_pcvar_num(g_LCMDMODE) != 0)
  264. CreateLaserMine_Progress(id);
  265. return PLUGIN_HANDLED;
  266. }
  267.  
  268. public CreateLaserMine_Progress(id)
  269. {
  270.  
  271. if(!CreateCheck(id))
  272. return PLUGIN_HANDLED;
  273. g_settinglaser[id] = true;
  274.  
  275. message_begin(MSG_ONE, 108, {0,0,0}, id);
  276. write_byte(1);
  277. write_byte(0);
  278. message_end();
  279.  
  280. set_task(1.2, "Spawn", (TASK_PLANT + id));
  281.  
  282. return PLUGIN_HANDLED;
  283. }
  284.  
  285. public ReturnLaserMine_Progress(id)
  286. {
  287.  
  288. if(!ReturnCheck(id))
  289. return PLUGIN_HANDLED;
  290. g_settinglaser[id] = true;
  291.  
  292. message_begin(MSG_ONE, 108, {0,0,0}, id);
  293. write_byte(1);
  294. write_byte(0);
  295. message_end();
  296.  
  297. set_task(1.2, "ReturnMine", (TASK_RELEASE + id));
  298.  
  299. return PLUGIN_HANDLED;
  300. }
  301.  
  302. public StopCreateLaserMine(id)
  303. {
  304.  
  305. DeleteTask(id);
  306. message_begin(MSG_ONE, 108, {0,0,0}, id);
  307. write_byte(0);
  308. write_byte(0);
  309. message_end();
  310.  
  311. return PLUGIN_HANDLED;
  312. }
  313.  
  314. public StopReturnLaserMine(id)
  315. {
  316.  
  317. DeleteTask(id);
  318. message_begin(MSG_ONE, 108, {0,0,0}, id);
  319. write_byte(0);
  320. write_byte(0);
  321. message_end();
  322.  
  323. return PLUGIN_HANDLED;
  324. }
  325.  
  326. public ReturnMine(id)
  327. {
  328. id -= TASK_RELEASE;
  329. new tgt,body,Float:vo[3],Float:to[3];
  330. get_user_aiming(id,tgt,body);
  331. if(!pev_valid(tgt)) return;
  332. pev(id,pev_origin,vo);
  333. pev(tgt,pev_origin,to);
  334. if(get_distance_f(vo,to) > 70.0) return;
  335. new EntityName[32];
  336. pev(tgt, pev_classname, EntityName, 31);
  337. if(!equal(EntityName, ENT_CLASS_NAME)) return;
  338. if(pev(tgt,LASERMINE_OWNER) != id) return;
  339. RemoveEntity(tgt);
  340.  
  341. g_havemine[id] ++;
  342. g_deployed[id] --;
  343. emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  344. ShowAmmo(id)
  345.  
  346. return;
  347. }
  348.  
  349. public Spawn(id)
  350. {
  351. id -= TASK_PLANT
  352. // motor
  353. new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
  354. if(!i_Ent)
  355. {
  356. client_print(id, print_chat,"[Laesrmine Debug] Can't Create Entity");
  357. return PLUGIN_HANDLED_MAIN;
  358. }
  359. set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);
  360.  
  361. engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);
  362.  
  363. set_pev(i_Ent,pev_solid,SOLID_NOT);
  364. set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);
  365.  
  366. set_pev(i_Ent,pev_frame,0);
  367. set_pev(i_Ent,pev_body,3);
  368. set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
  369. set_pev(i_Ent,pev_framerate,0);
  370. set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
  371. set_pev(i_Ent,pev_dmg,100.0);
  372. set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
  373. new Float:vOrigin[3];
  374. new Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
  375. Float:vTraceEnd[3],Float:vEntAngles[3];
  376. pev(id, pev_origin, vOrigin);
  377. velocity_by_aim(id, 128, vTraceDirection);
  378. xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
  379. engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
  380. new Float:fFraction;
  381. get_tr2(0, TR_flFraction, fFraction);
  382.  
  383. // -- We hit something!
  384. if(fFraction < 1.0)
  385. {
  386. // -- Save results to be used later.
  387. get_tr2(0, TR_vecEndPos, vTraceEnd);
  388. get_tr2(0, TR_vecPlaneNormal, vNormal);
  389. }
  390.  
  391.  
  392. xs_vec_mul_scalar(vNormal, 8.0, vNormal);
  393. xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
  394.  
  395. engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });
  396. engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);
  397.  
  398. // -- Rotate tripmine.
  399. vector_to_angle(vNormal,vEntAngles);
  400. set_pev(i_Ent,pev_angles,vEntAngles);
  401.  
  402. // -- Calculate laser end origin.
  403. new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
  404.  
  405. xs_vec_mul_scalar(vNormal, 8192.0, vNormal);
  406. xs_vec_add(vNewOrigin, vNormal, vBeamEnd);
  407.  
  408. engfunc(EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0);
  409.  
  410. get_tr2(0, TR_vecPlaneNormal, vNormal);
  411. get_tr2(0, TR_vecEndPos, vTracedBeamEnd);
  412.  
  413. // -- Save results to be used later.
  414. set_pev(i_Ent, LASERMINE_OWNER, id);
  415. set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
  416. set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
  417. new Float:fCurrTime = get_gametime();
  418.  
  419. set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5);
  420. set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
  421. set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2);
  422.  
  423. PlaySound(i_Ent,POWERUP_SOUND);
  424. g_deployed[id]++;
  425. g_havemine[id]--;
  426. DeleteTask(id);
  427. ShowAmmo(id);
  428. return 1;
  429. }
  430.  
  431. stock TeamDeployedCount(id)
  432. {
  433. static i;
  434. static CsTeams:t;t = cs_get_user_team(id);
  435. static cnt;cnt=0;
  436.  
  437. for(i = 1;i <= g_MaxPL;i++)
  438. {
  439. if(is_user_connected(i))
  440. if(t == cs_get_user_team(i))
  441. cnt += g_deployed[i];
  442. }
  443.  
  444. return cnt;
  445. }
  446.  
  447. bool:CheckCanTeam(id)
  448. {
  449. new arg[5],CsTeam:num;
  450. get_pcvar_string(g_LCBT,arg,3);
  451. if(equali(arg,"Z"))
  452. {
  453. num = CsTeam:CS_TEAM_T;
  454. }
  455. else if(equali(arg,"H"))
  456. {
  457. num = CsTeam:CS_TEAM_CT;
  458. }
  459. else if(equali(arg,"ALL") || equali(arg,"HZ") || equali(arg,"ZH"))
  460. {
  461. num = CsTeam:CS_TEAM_UNASSIGNED;
  462. }
  463. else
  464. {
  465. num = CsTeam:CS_TEAM_UNASSIGNED;
  466. }
  467. if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
  468. return false;
  469. return true;
  470. }
  471.  
  472. bool:CanCheck(id,mode) // ????????: ????? ????? ??????? ????
  473. {
  474. if(!get_pcvar_num(g_LENABLE))
  475. {
  476. ColorChat(id, GREEN, "[ZP Lézer] ^1A lézer jelenleg nem aktív!")
  477.  
  478. return false;
  479. }
  480. if(get_pcvar_num(g_LACCESS) != 0)
  481. if(!(get_user_flags(id) & ADMIN_IMMUNITY))
  482. {
  483. ColorChat(id, GREEN, "[ZP Lezer] ^1Nem használhatod ezt a parancsot!")
  484. return false;
  485. }
  486. if(!pev_user_alive(id)) return false;
  487. if(!CheckCanTeam(id))
  488. {
  489. ColorChat(id, GREEN, "[ZP Lézer] ^1A csapatod nem vehet és nem tehet le több lézert!")
  490. return false;
  491. }
  492. if(mode == 0)
  493. {
  494. if(g_havemine[id] <= 0)
  495. {
  496. ColorChat(id, GREEN, "[ZP Lézer] ^1Neked nincs lézered!")
  497. return false;
  498. }
  499. }
  500. if(mode == 1)
  501. {
  502. if(get_pcvar_num(g_LBUYMODE) == 0)
  503. {
  504. ColorChat(id, GREEN, "[ZP Lézer] ^1Nem veheted meg ezt ezen a szerveren!")
  505. return false;
  506. }
  507. if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
  508. {
  509. ColorChat(id, GREEN, "[ZP Lézer] ^1Nem vehetsz több lézert!")
  510. return false;
  511. }
  512. if(zp_get_user_ammo_packs(id) < get_pcvar_num(g_LCOST))
  513. {
  514. ColorChat(id, GREEN, "[ZP Lézer] ^1Nincs elég lőszercsomagod lézert venni!^4 %d ^1szükséges!",get_pcvar_num(g_LCOST)")
  515. return false;
  516. }
  517. }
  518. if(!CheckTime(id))
  519. {
  520. ColorChat(id, GREEN, "[ZP Lézer] ^1Várj még elkezdödik a kör!^4 %d ^1másodperc még.",get_pcvar_num(g_LDELAY)-g_nowtime")
  521. return false;
  522. }
  523.  
  524. return true;
  525. }
  526.  
  527. bool:ReturnCheck(id)
  528. {
  529. if(!CanCheck(id,-1)) return false;
  530. if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
  531. new tgt,body,Float:vo[3],Float:to[3];
  532. get_user_aiming(id,tgt,body);
  533. if(!pev_valid(tgt)) return false;
  534. pev(id,pev_origin,vo);
  535. pev(tgt,pev_origin,to);
  536. if(get_distance_f(vo,to) > 70.0) return false;
  537. new EntityName[32];
  538. pev(tgt, pev_classname, EntityName, 31);
  539. if(!equal(EntityName, ENT_CLASS_NAME)) return false;
  540. if(pev(tgt,LASERMINE_OWNER) != id) return false;
  541. return true;
  542. }
  543.  
  544. bool:CreateCheck(id)
  545. {
  546. if(!CanCheck(id,0)) return false;
  547.  
  548. // ???????? ?? ??????????
  549. if(!zp_has_round_started() && get_pcvar_num(g_NOROUND))
  550. {
  551. ColorChat(id, GREEN, "[ZP Lezer] ^1A kör még nem kezdödőtt el!")
  552. return false;
  553. }
  554.  
  555. if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))
  556. {
  557. ColorChat(id, GREEN, "[ZP Lezer] ^1Nemesis modban nem használhatsz lézert!")
  558. return false;
  559. }
  560.  
  561. if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND))
  562. {
  563. ColorChat(id, GREEN, "[ZP Lezer] ^1Túlélő modban nem használhatsz lézert!")
  564. return false;
  565. }
  566.  
  567. if(g_deployed[id] >= get_pcvar_num(g_LAMMO))
  568. {
  569. ColorChat(id, GREEN, "[ZP Lezer] ^1Nem tehetsz le több lézert!")
  570. return false;
  571. }
  572.  
  573. if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
  574. {
  575. ColorChat(id, GREEN, "[ZP Lezer] ^1A csapatod nem tehet le több lézert^4...")
  576. return false;
  577. }
  578. new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
  579. pev(id, pev_origin, vOrigin);
  580. velocity_by_aim(id, 128, vTraceDirection);
  581. xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
  582. engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
  583. new Float:fFraction,Float:vTraceNormal[3];
  584. get_tr2(0, TR_flFraction, fFraction);
  585. // -- We hit something!
  586. if(fFraction < 1.0)
  587. {
  588. // -- Save results to be used later.
  589. get_tr2(0, TR_vecEndPos, vTraceEnd);
  590. get_tr2(0, TR_vecPlaneNormal, vTraceNormal);
  591.  
  592. return true;
  593. }
  594.  
  595. ColorChat(id, GREEN, "[ZP Lezer] ^1Falra tedd a lézert!")
  596. DeleteTask(id);
  597. // -- Did not touched something. (not solid)
  598. return false;
  599. }
  600.  
  601. public ltm_Think(i_Ent)
  602. {
  603. if(!pev_valid(i_Ent))
  604. return FMRES_IGNORED;
  605. new EntityName[32];
  606. pev(i_Ent, pev_classname, EntityName, 31);
  607. if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
  608. // -- Entity is not a tripmine, ignoring the next...
  609. if(!equal(EntityName, ENT_CLASS_NAME))
  610. return FMRES_IGNORED;
  611.  
  612. static Float:fCurrTime;
  613. fCurrTime = get_gametime();
  614.  
  615. switch(pev(i_Ent, LASERMINE_STEP))
  616. {
  617. case POWERUP_THINK :
  618. {
  619. new Float:fPowerupTime;
  620. pev(i_Ent, LASERMINE_POWERUP, fPowerupTime);
  621.  
  622. if(fCurrTime > fPowerupTime)
  623. {
  624. set_pev(i_Ent, pev_solid, SOLID_BBOX);
  625. set_pev(i_Ent, LASERMINE_STEP, BEAMBREAK_THINK);
  626.  
  627. PlaySound(i_Ent, ACTIVATE_SOUND);
  628. }
  629. if(get_pcvar_num(g_LGLOW)!=0)
  630. {
  631. if(get_pcvar_num(g_LCLMODE)==0)
  632. {
  633. switch (pev(i_Ent,LASERMINE_TEAM))
  634. {
  635. // ???? ?????? ?????
  636. case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,Red_Zomb,Green_Zomb,Blue_Zomb,kRenderNormal,5);
  637. // ???? ?????? ????????
  638. case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,Red_Hum,Green_Hum,Blue_Hum,kRenderNormal,5);
  639. }
  640. }else
  641. {
  642. // ???? ??????, ???? ????? "?????????? ??? ????" ????
  643. set_rendering(i_Ent,kRenderFxGlowShell,random_num(50 , 200),random_num(50 , 200),random_num(50 , 200),kRenderNormal,5);
  644. }
  645. }
  646. set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);
  647. }
  648. case BEAMBREAK_THINK :
  649. {
  650. static Float:vEnd[3],Float:vOrigin[3];
  651. pev(i_Ent, pev_origin, vOrigin);
  652. pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);
  653.  
  654. static iHit, Float:fFraction;
  655. engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0);
  656.  
  657. get_tr2(0, TR_flFraction, fFraction);
  658. iHit = get_tr2(0, TR_pHit);
  659.  
  660. // -- Something has passed the laser.
  661. if(fFraction < 1.0)
  662. {
  663. // -- Ignoring others tripmines entity.
  664. if(pev_valid(iHit))
  665. {
  666. pev(iHit, pev_classname, EntityName, 31);
  667. // ??????? ?????? ?????
  668. if(!equal(EntityName, ENT_CLASS_NAME) && !equal(EntityName, gSnarkClassName) && !equal(EntityName, barnacle_class) && !equal(EntityName, weapon_box))
  669. {
  670. set_pev(i_Ent, pev_enemy, iHit);
  671.  
  672. if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
  673. CreateLaserDamage(i_Ent,iHit);
  674. else
  675. if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
  676. set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
  677.  
  678. if (!pev_valid(i_Ent)) // ???? ?? ?????? ?????? - ?????? ?? ??????. ??????? DJ_WEST
  679. return FMRES_IGNORED;
  680.  
  681. set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
  682. }
  683. }
  684. }
  685. if(get_pcvar_num(g_LDMGMODE)!=0)
  686. if(pev(i_Ent,LASERMINE_HITING) != iHit)
  687. set_pev(i_Ent,LASERMINE_HITING,iHit);
  688.  
  689. // -- Tripmine is still there.
  690. if(pev_valid(i_Ent))
  691. {
  692. static Float:fHealth;
  693. pev(i_Ent, pev_health, fHealth);
  694.  
  695. if(fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
  696. {
  697. set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
  698. set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
  699. }
  700.  
  701. static Float:fBeamthink;
  702. pev(i_Ent, LASERMINE_BEAMTHINK, fBeamthink);
  703.  
  704. if(fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))
  705. {
  706. DrawLaser(i_Ent, vOrigin, vEnd);
  707. set_pev(i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1);
  708. }
  709. set_pev(i_Ent, pev_nextthink, fCurrTime + 0.01);
  710. }
  711. }
  712. case EXPLOSE_THINK :
  713. {
  714. // -- Stopping entity to think
  715. set_pev(i_Ent, pev_nextthink, 0.0);
  716. PlaySound(i_Ent, STOP_SOUND);
  717. g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
  718. CreateExplosion(i_Ent);
  719. CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
  720. RemoveEntity (i_Ent);
  721. }
  722. }
  723.  
  724. return FMRES_IGNORED;
  725. }
  726.  
  727. PlaySound(i_Ent, i_SoundType)
  728. {
  729. switch (i_SoundType)
  730. {
  731. case POWERUP_SOUND :
  732. {
  733. emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  734. emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM);
  735. }
  736. case ACTIVATE_SOUND :
  737. {
  738. emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75);
  739. }
  740. case STOP_SOUND :
  741. {
  742. emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM);
  743. emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75);
  744. }
  745. }
  746. }
  747.  
  748. DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])
  749. {
  750. new tcolor[3];
  751. new teamid = pev(i_Ent, LASERMINE_TEAM);
  752. if(get_pcvar_num(g_LCLMODE) == 0)
  753. {
  754. switch(teamid){
  755. case 1:{
  756. // ???? ???? ??? ?????
  757. tcolor[0] = Red_Zomb;
  758. tcolor[1] = Green_Zomb;
  759. tcolor[2] = Blue_Zomb;
  760. }
  761. case 2:{
  762. // ???? ???? ??? ????????
  763. tcolor[0] = Red_Hum;
  764. tcolor[1] = Green_Hum;
  765. tcolor[2] = Blue_Hum;
  766. }
  767. }
  768. }else
  769. {
  770. // ???? ???? ??? ???? ??? ?????? 1-? ??? ??? ????
  771. tcolor[0] = random_num(50 , 200);
  772. tcolor[1] = random_num(50 , 200);
  773. tcolor[2] = random_num(50 , 200);
  774. }
  775. message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  776. write_byte(TE_BEAMPOINTS);
  777. engfunc(EngFunc_WriteCoord,v_Origin[0]);
  778. engfunc(EngFunc_WriteCoord,v_Origin[1]);
  779. engfunc(EngFunc_WriteCoord,v_Origin[2]);
  780. engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
  781. engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
  782. engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
  783. write_short(beam);
  784. write_byte(0);
  785. write_byte(0);
  786. write_byte(1); //Life
  787. write_byte(5); //Width
  788. write_byte(0); //wave
  789. write_byte(tcolor[0]); // r
  790. write_byte(tcolor[1]); // g
  791. write_byte(tcolor[2]); // b
  792. write_byte(get_pcvar_num(g_LCBRIGHT));
  793. write_byte(255);
  794. message_end();
  795. }
  796.  
  797. CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
  798. {
  799. // Get given parameters
  800. new Float:vecSrc[3];
  801. pev(iCurrent, pev_origin, vecSrc);
  802.  
  803. new AtkID =pev(iCurrent,LASERMINE_OWNER);
  804. new TeamID=pev(iCurrent,LASERMINE_TEAM);
  805.  
  806. new ent = -1;
  807. new Float:tmpdmg = DmgMAX;
  808.  
  809. new Float:kickback = 0.0;
  810. // Needed for doing some nice calculations <!-- s:P --><img src=\"{SMILIES_PATH}/icon_razz.gif\" alt=\":P\" title=\"vicces\" /><!-- s:P -->
  811. new Float:Tabsmin[3], Float:Tabsmax[3];
  812. new Float:vecSpot[3];
  813. new Float:Aabsmin[3], Float:Aabsmax[3];
  814. new Float:vecSee[3];
  815. new trRes;
  816. new Float:flFraction;
  817. new Float:vecEndPos[3];
  818. new Float:distance;
  819. new Float:origin[3], Float:vecPush[3];
  820. new Float:invlen;
  821. new Float:velocity[3];
  822. new iHitHP,iHitTeam;
  823. // Calculate falloff
  824. new Float:falloff;
  825. if(Radius > 0.0)
  826. {
  827. falloff = DmgMAX / Radius;
  828. } else {
  829. falloff = 1.0;
  830. }
  831. // Find monsters and players inside a specifiec radius
  832. while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
  833. {
  834. if(!pev_valid(ent)) continue;
  835. if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  836. {
  837. // Entity is not a player or monster, ignore it
  838. continue;
  839. }
  840. if(!pev_user_alive(ent)) continue;
  841. // Reset data
  842. kickback = 1.0;
  843. tmpdmg = DmgMAX;
  844. // The following calculations are provided by Orangutanz, THANKS!
  845. // We use absmin and absmax for the most accurate information
  846. pev(ent, pev_absmin, Tabsmin);
  847. pev(ent, pev_absmax, Tabsmax);
  848. xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
  849. xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
  850. pev(iCurrent, pev_absmin, Aabsmin);
  851. pev(iCurrent, pev_absmax, Aabsmax);
  852. xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
  853. xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
  854. engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
  855. get_tr2(trRes, TR_flFraction, flFraction);
  856. // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
  857. if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
  858. {
  859. // Work out the distance between impact and entity
  860. get_tr2(trRes, TR_vecEndPos, vecEndPos);
  861. distance = get_distance_f(vecSrc, vecEndPos) * falloff;
  862. tmpdmg -= distance;
  863. if(tmpdmg < 0.0)
  864. tmpdmg = 0.0;
  865. // Kickback Effect
  866. if(kickback != 0.0)
  867. {
  868. xs_vec_sub(vecSpot,vecSee,origin);
  869. invlen = 1.0/get_distance_f(vecSpot, vecSee);
  870.  
  871. xs_vec_mul_scalar(origin,invlen,vecPush);
  872. pev(ent, pev_velocity, velocity)
  873. xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
  874. xs_vec_mul_scalar(vecPush,kickback,vecPush);
  875. xs_vec_add(velocity,vecPush,velocity);
  876. if(tmpdmg < 60.0)
  877. {
  878. xs_vec_mul_scalar(velocity,12.0,velocity);
  879. } else {
  880. xs_vec_mul_scalar(velocity,4.0,velocity);
  881. }
  882. if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
  883. {
  884. // There's some movement todo <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  885. set_pev(ent, pev_velocity, velocity)
  886. }
  887. }
  888.  
  889. iHitHP = pev_user_health(ent) - floatround(tmpdmg)
  890. iHitTeam = int:cs_get_user_team(ent)
  891. if(iHitHP <= 0)
  892. {
  893. if(iHitTeam != TeamID)
  894. {
  895. zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) + get_pcvar_num(g_LFMONEY))
  896. set_score(AtkID,ent,1,iHitHP)
  897. }else
  898. {
  899. if(get_pcvar_num(g_LFF))
  900. {
  901. zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) - get_pcvar_num(g_LFMONEY))
  902. set_score(AtkID,ent,-1,iHitHP)
  903. }
  904. }
  905. }else
  906. {
  907. if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
  908. {
  909. //set_pev(Player,pev_health,iHitHP)
  910. set_user_health(ent, iHitHP)
  911. engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);
  912. write_byte(floatround(tmpdmg))
  913. write_byte(floatround(tmpdmg))
  914. write_long(DMG_BULLET)
  915. engfunc(EngFunc_WriteCoord,vecSrc[0])
  916. engfunc(EngFunc_WriteCoord,vecSrc[1])
  917. engfunc(EngFunc_WriteCoord,vecSrc[2])
  918. message_end()
  919. }
  920. }
  921. }
  922. }
  923. return
  924. }
  925.  
  926. bool:pev_user_alive(ent)
  927. {
  928. new deadflag = pev(ent,pev_deadflag);
  929. if(deadflag != DEAD_NO)
  930. return false;
  931. return true;
  932. }
  933.  
  934. CreateExplosion(iCurrent)
  935. {
  936. new Float:vOrigin[3];
  937. pev(iCurrent,pev_origin,vOrigin);
  938.  
  939. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  940. write_byte(99); //99 = KillBeam
  941. write_short(iCurrent);
  942. message_end();
  943.  
  944. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);
  945. write_byte(TE_EXPLOSION);
  946. engfunc(EngFunc_WriteCoord,vOrigin[0]);
  947. engfunc(EngFunc_WriteCoord,vOrigin[1]);
  948. engfunc(EngFunc_WriteCoord,vOrigin[2]);
  949. write_short(boom);
  950. write_byte(30);
  951. write_byte(15);
  952. write_byte(0);
  953. message_end();
  954. }
  955.  
  956. CreateLaserDamage(iCurrent,isHit)
  957. {
  958. if(isHit < 0) return PLUGIN_CONTINUE
  959. switch(get_pcvar_num(g_LDMGMODE))
  960. {
  961. case 1:
  962. {
  963. if(pev(iCurrent,LASERMINE_HITING) == isHit)
  964. return PLUGIN_CONTINUE
  965. }
  966. case 2:
  967. {
  968. if(pev(iCurrent,LASERMINE_HITING) == isHit)
  969. {
  970. static Float:cnt
  971. static now,htime;now = floatround(get_gametime())
  972.  
  973. pev(iCurrent,LASERMINE_COUNT,cnt)
  974. htime = floatround(cnt)
  975. if(now - htime < get_pcvar_num(g_LDSEC))
  976. {
  977. return PLUGIN_CONTINUE;
  978. }else{
  979. set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
  980. }
  981. }else
  982. {
  983. set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
  984. }
  985. }
  986. }
  987.  
  988. new Float:vOrigin[3],Float:vEnd[3]
  989. pev(iCurrent,pev_origin,vOrigin)
  990. pev(iCurrent,pev_vuser1,vEnd)
  991.  
  992. new teamid = pev(iCurrent, LASERMINE_TEAM)
  993.  
  994. new szClassName[32]
  995. new Alive,God
  996. new iHitTeam,iHitHP,id
  997. new hitscore
  998.  
  999. szClassName[0] = '^0'
  1000. pev(isHit,pev_classname,szClassName,32)
  1001. if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  1002. {
  1003. Alive = pev_user_alive(isHit)
  1004. God = get_user_godmode(isHit)
  1005. if(!Alive || God) return PLUGIN_CONTINUE
  1006. iHitTeam = int:cs_get_user_team(isHit)
  1007. iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
  1008. id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
  1009. if(iHitHP <= 0)
  1010. {
  1011. if(iHitTeam != teamid)
  1012. {
  1013. emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  1014. hitscore = 1
  1015. zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) + get_pcvar_num(g_LFMONEY))
  1016. set_score(id,isHit,hitscore,iHitHP)
  1017. }else
  1018. {
  1019. if(get_pcvar_num(g_LFF))
  1020. {
  1021. emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  1022. hitscore = -1
  1023. zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LFMONEY))
  1024. set_score(id,isHit,hitscore,iHitHP)
  1025. }
  1026. }
  1027. }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
  1028. {
  1029. emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
  1030. set_user_health(isHit,iHitHP)
  1031. set_pev(iCurrent,LASERMINE_HITING,isHit);
  1032. engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
  1033. write_byte(get_pcvar_num(g_LDMG))
  1034. write_byte(get_pcvar_num(g_LDMG))
  1035. write_long(DMG_BULLET)
  1036. engfunc(EngFunc_WriteCoord,vOrigin[0])
  1037. engfunc(EngFunc_WriteCoord,vOrigin[1])
  1038. engfunc(EngFunc_WriteCoord,vOrigin[2])
  1039. message_end()
  1040. }
  1041. }else if(equal(szClassName, ENT_CLASS_NAME3))
  1042. {
  1043. new hl;
  1044. hl = pev_user_health(isHit);
  1045. set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
  1046. }
  1047. return PLUGIN_CONTINUE
  1048. }
  1049.  
  1050. stock pev_user_health(id)
  1051. {
  1052. new Float:health
  1053. pev(id,pev_health,health)
  1054. return floatround(health)
  1055. }
  1056.  
  1057. stock set_user_health(id,health)
  1058. {
  1059. health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
  1060. }
  1061.  
  1062. stock get_user_godmode(index) {
  1063. new Float:val
  1064. pev(index, pev_takedamage, val)
  1065.  
  1066. return (val == DAMAGE_NO)
  1067. }
  1068.  
  1069. stock set_user_frags(index, frags)
  1070. {
  1071. set_pev(index, pev_frags, float(frags))
  1072.  
  1073. return 1
  1074. }
  1075.  
  1076. stock pev_user_frags(index)
  1077. {
  1078. new Float:frags;
  1079. pev(index,pev_frags,frags);
  1080. return floatround(frags);
  1081. }
  1082.  
  1083. set_score(id,target,hitscore,HP){
  1084.  
  1085. new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore
  1086. set_user_frags(id,idfrags)
  1087. new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
  1088. set_user_frags(target,tarfrags)
  1089. new idteam = int:cs_get_user_team(id)
  1090. new iddeaths = cs_get_user_deaths(id)
  1091.  
  1092.  
  1093. message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
  1094. write_byte(id)
  1095. write_byte(target)
  1096. write_byte(0)
  1097. write_string(ENT_CLASS_NAME)
  1098. message_end()
  1099.  
  1100. message_begin(MSG_ALL, g_msgScoreInfo)
  1101. write_byte(id)
  1102. write_short(idfrags)
  1103. write_short(iddeaths)
  1104. write_short(0)
  1105. write_short(idteam)
  1106. message_end()
  1107.  
  1108. set_msg_block(g_msgDeathMsg, BLOCK_ONCE)
  1109.  
  1110. set_user_health(target, HP)
  1111.  
  1112. }
  1113.  
  1114. public BuyLasermine(id)
  1115. {
  1116. if(!CanCheck(id,1)) return PLUGIN_CONTINUE
  1117.  
  1118. zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LCOST))
  1119. g_havemine[id]++;
  1120.  
  1121. ColorChat(id, GREEN, "[ZP Lezer] ^1Sikeresen megvetted a lézert!")
  1122.  
  1123. emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  1124. ShowAmmo(id)
  1125. return PLUGIN_HANDLED
  1126. }
  1127.  
  1128. public zp_extra_item_selected(id, itemid)
  1129. {
  1130. if(itemid == g_LME)
  1131. {
  1132. zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + LMCost)
  1133. BuyLasermine(id)
  1134. }
  1135. return PLUGIN_CONTINUE
  1136. }
  1137.  
  1138. ShowAmmo(id)
  1139. {
  1140. new ammo[51]
  1141. new PlugStat[ 555 char ];
  1142. formatex(PlugStat, charsmax(PlugStat), "Lézerek: ")
  1143. formatex(ammo, 50, "%s %i/%i",PlugStat, g_havemine[id],get_pcvar_num(g_LAMMO))
  1144.  
  1145. message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id)
  1146. write_byte(0)
  1147. write_string(ammo)
  1148. message_end()
  1149. }
  1150.  
  1151. public showInfo(id)
  1152. {
  1153. ColorChat(id, GREEN, "[ZP Lezer] ^1Segítséghez a bindekhez, írd: ^4/lasermine")
  1154. }
  1155.  
  1156. public say_lasermine(id){
  1157. new said[32]
  1158. read_argv(1,said,31);
  1159. if(!get_pcvar_num(g_LENABLE))
  1160. {
  1161. return PLUGIN_CONTINUE
  1162. }
  1163. if(equali(said,"/buy lasermine")||equali(said,"/lm")||equali(said,"buy_lasermine")){
  1164. BuyLasermine(id)
  1165. }else if(equali(said, "lasermine") || equali(said, "/lasermine")){
  1166. const SIZE = 1024
  1167. new msg[SIZE+1],len = 0;
  1168. len += formatex(msg[len], SIZE - len, "<html><body>")
  1169. len += formatex(msg[len], SIZE - len, "<p><b>Lezer bindeles segitseg!</b></p><br/><br/>")
  1170. len += formatex(msg[len], SIZE - len, "<p>Te a lezert csak a fallra teheted.</p><br/>")
  1171. len += formatex(msg[len], SIZE - len, "<p>Ha a lezer meg ol egy embert/zombit adni fog fraget.</p><br/><br/>")
  1172. len += formatex(msg[len], SIZE - len, "<p><b>Lezer parancsok:</b></p><br/><br/>")
  1173. len += formatex(msg[len], SIZE - len, "<p><b>Say: /buy lasermine</b> or <b>Say: /lm</b> //Igy tudsz venni lezert!<br/>")
  1174. len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : hasznalat F2 vasarolt lezer!<br/>")
  1175. len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : hasznalat mouse3 lezer lerakasa a fallra<br/>")
  1176. len += formatex(msg[len], SIZE - len, "</body></html>")
  1177. show_motd(id, msg, "Lasermine Entity help")
  1178. return PLUGIN_CONTINUE
  1179. }
  1180. else if(containi(said, "laser") != -1) {
  1181. showInfo(id)
  1182. return PLUGIN_CONTINUE
  1183. }
  1184. return PLUGIN_CONTINUE
  1185. }
  1186.  
  1187. public standing(id)
  1188. {
  1189. if(!g_settinglaser[id])
  1190. return PLUGIN_CONTINUE
  1191.  
  1192. set_pev(id, pev_maxspeed, 1.0)
  1193.  
  1194. return PLUGIN_CONTINUE
  1195. }
  1196.  
  1197. public ltm_PostThink(id)
  1198. {
  1199. if(!g_settinglaser[id] && plsetting[id]){
  1200. resetspeed(id)
  1201. }
  1202. else if(g_settinglaser[id] && !plsetting[id]) {
  1203. pev(id, pev_maxspeed,plspeed[id])
  1204. set_pev(id, pev_maxspeed, 1.0)
  1205. }
  1206. plsetting[id] = g_settinglaser[id]
  1207. return FMRES_IGNORED
  1208. }
  1209.  
  1210. public ltm_PreThink(id)
  1211. {
  1212. if(!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
  1213. return FMRES_IGNORED;
  1214.  
  1215. if(pev(id, pev_button) & IN_USE && !(pev(id, pev_oldbuttons) & IN_USE))
  1216. CreateLaserMine_Progress(id)
  1217. return FMRES_IGNORED;
  1218. }
  1219.  
  1220. resetspeed(id)
  1221. {
  1222. set_pev(id, pev_maxspeed, plspeed[id])
  1223. }
  1224.  
  1225. public client_putinserver(id){
  1226. g_deployed[id] = 0;
  1227. g_havemine[id] = 0;
  1228. DeleteTask(id);
  1229. return PLUGIN_CONTINUE
  1230. }
  1231.  
  1232. public client_disconnect(id){
  1233. if(!get_pcvar_num(g_LENABLE))
  1234. return PLUGIN_CONTINUE
  1235. DeleteTask(id);
  1236. RemoveAllTripmines(id);
  1237. return PLUGIN_CONTINUE
  1238. }
  1239.  
  1240.  
  1241. public newround(id){
  1242. if(!get_pcvar_num(g_LENABLE))
  1243. return PLUGIN_CONTINUE
  1244. pev(id, pev_maxspeed,plspeed[id])
  1245. DeleteTask(id);
  1246. RemoveAllTripmines(id);
  1247. //client_print(id, print_chat, "[ZP][LM][DeBug] All Mines removied!");
  1248. delaycount(id);
  1249. SetStartAmmo(id);
  1250. return PLUGIN_CONTINUE
  1251. }
  1252.  
  1253. public endround(id)
  1254. {
  1255. if(!get_pcvar_num(g_LENABLE))
  1256. return PLUGIN_CONTINUE
  1257.  
  1258. // ???????? ??? ????? ????? ??????
  1259. DeleteTask(id);
  1260. RemoveAllTripmines(id);
  1261.  
  1262. return PLUGIN_CONTINUE
  1263. }
  1264.  
  1265. public DeathEvent(){
  1266. if(!get_pcvar_num(g_LENABLE))
  1267. return PLUGIN_CONTINUE
  1268.  
  1269. new id = read_data(2)
  1270. if(is_user_connected(id)) DeleteTask(id);
  1271. return PLUGIN_CONTINUE
  1272. }
  1273.  
  1274. public RemoveAllTripmines(i_Owner)
  1275. {
  1276. new iEnt = g_MaxPL + 1;
  1277. new clsname[32];
  1278. while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME)))
  1279. {
  1280. if(i_Owner)
  1281. {
  1282. if(pev(iEnt, LASERMINE_OWNER) != i_Owner)
  1283. continue;
  1284. clsname[0] = '^0'
  1285. pev(iEnt, pev_classname, clsname, sizeof(clsname)-1);
  1286. if(equali(clsname, ENT_CLASS_NAME))
  1287. {
  1288. PlaySound(iEnt, STOP_SOUND);
  1289. RemoveEntity(iEnt);
  1290. }
  1291. }
  1292. else
  1293. set_pev(iEnt, pev_flags, FL_KILLME);
  1294. }
  1295. g_deployed[i_Owner]=0;
  1296. }
  1297.  
  1298. SetStartAmmo(id)
  1299. {
  1300. new stammo = get_pcvar_num(g_LSTAMMO);
  1301. if(stammo <= 0) return PLUGIN_CONTINUE;
  1302. g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
  1303. return PLUGIN_CONTINUE;
  1304. }
  1305.  
  1306. public CutDeploy_onDamage(id)
  1307. {
  1308. if(get_user_health(id) < 1)
  1309. DeleteTask(id);
  1310. }
  1311.  
  1312. DeleteTask(id)
  1313. {
  1314. if(task_exists((TASK_PLANT + id)))
  1315. {
  1316. remove_task((TASK_PLANT + id))
  1317. }
  1318. if(task_exists((TASK_RELEASE + id)))
  1319. {
  1320. remove_task((TASK_RELEASE + id))
  1321. }
  1322. g_settinglaser[id] = false
  1323. return PLUGIN_CONTINUE;
  1324. }
  1325.  
  1326. stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
  1327. {
  1328. static Float:RenderColor[3];
  1329. RenderColor[0] = float(r);
  1330. RenderColor[1] = float(g);
  1331. RenderColor[2] = float(b);
  1332.  
  1333. set_pev(entity, pev_renderfx, fx);
  1334. set_pev(entity, pev_rendercolor, RenderColor);
  1335. set_pev(entity, pev_rendermode, render);
  1336. set_pev(entity, pev_renderamt, float(amount));
  1337.  
  1338. return 1
  1339. }
  1340.  
  1341. // Gets offset data
  1342. get_offset_value(id, type)
  1343. {
  1344. new key = -1;
  1345. switch(type)
  1346. {
  1347. case OFFSET_TEAM: key = OFFSET_TEAM;
  1348. case OFFSET_MONEY:
  1349. key = OFFSET_MONEY;
  1350. case OFFSET_DEATH: key = OFFSET_DEATH;
  1351. }
  1352. if(key != -1)
  1353. {
  1354. if(is_amd64_server()) key += 25;
  1355. return get_pdata_int(id, key);
  1356. }
  1357. return -1;
  1358. }


Hiba:
SMA Forráskód: [ Mindet kijelol ]
  1. 51a21bc21fb4d.sma(514) : error 037: invalid string (possibly non-terminated string)
  2. 51a21bc21fb4d.sma(514 -- 515) : warning 215: expression has no effect
  3. 51a21bc21fb4d.sma(520) : error 037: invalid string (possibly non-terminated string)
  4. 51a21bc21fb4d.sma(520 -- 521) : warning 215: expression has no effect

_________________
****


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: laser mine
HozzászólásElküldve: 2013.05.26. 19:03 
Offline
Jómunkásember

Csatlakozott: 2012.01.29. 12:48
Hozzászólások: 408
Megköszönt másnak: 15 alkalommal
Megköszönték neki: 126 alkalommal
Csatolmány:
zp_rlazer.sma [39.97 KiB]
Letöltve 44 alkalommal.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: laser mine
HozzászólásElküldve: 2013.05.26. 19:32 
Offline
Őskövület
Avatar

Csatlakozott: 2011.12.28. 00:35
Hozzászólások: 2736
Megköszönt másnak: 56 alkalommal
Megköszönték neki: 275 alkalommal
Köszi.

_________________
****


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  [ 3 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 30 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