hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.17. 01:39



Jelenlévő felhasználók

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

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó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  [1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: [ZP] Extra Cuc: Lézer
HozzászólásElküldve:2013.08.26. 16:14 
Offline
Minden6ó
Avatar

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

_________________
<<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ások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [1 hozzászólás ] 


Ki van itt

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