hlmod.hu

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



Jelenlévő felhasználók

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

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-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] Körvégi lézer
HozzászólásElküldve: 2015.09.26. 16:30 
Offline
Tud valamit
Avatar

Csatlakozott: 2015.06.10. 11:48
Hozzászólások: 105
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 13 alkalommal
Sziasztok.

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


Na és ugye nem tűnik el a lézer körvégén, és így meghalnak a csapattársaim a lézerben. Mit csináljak?

_________________
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 152 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