hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.27. 14:59



Jelenlévő felhasználók

Jelenleg 543 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 543 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  [ 6 hozzászólás ] 
Szerző Üzenet
HozzászólásElküldve: 2013.02.11. 17:10 
Offline
Senior Tag
Avatar

Csatlakozott: 2012.08.27. 11:11
Hozzászólások: 209
Megköszönt másnak: 35 alkalommal
Megköszönték neki: 3 alkalommal
Helló

valaki át írná nekem hogy az admin mindenkit lézerét szét tudja lőni
és a sima player csak a saját lézerét és az zombiét és a csapatársáét ne

és raj módban ne lehessen lézer tenni

tudom hogy lehetséges mert már láttam ilyet

előre is köszönöm

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


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2013.02.11. 18:32 
Offline
Félisten

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

_________________
Megköszönni nem szégyen!
Csak kattints a Kép jelre. --->

Ők köszönték meg HunGamer nek ezt a hozzászólást: gladiator (2013.02.11. 19:05)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2013.02.12. 16:52 
Offline
Senior Tag
Avatar

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



ez ugyan az amit megadtam a leírásban -_-


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2013.02.12. 18:14 
Offline
Félisten

Csatlakozott: 2012.01.07. 21:10
Hozzászólások: 850
Megköszönt másnak: 9 alkalommal
Megköszönték neki: 154 alkalommal
Legalább írnád azt, hogy nem jó.. (Ha egyáltalán letesztelted)

Ajánlom figyelmedbe a 238-242 sorokat (tiedben)
Megvannak? Remek. Akkor hasonlítsd össze az enyémmel. (240-261)

Ha tényleg letesztelted, akkor max hibás.

_________________
Megköszönni nem szégyen!
Csak kattints a Kép jelre. --->

Ők köszönték meg HunGamer nek ezt a hozzászólást: gladiator (2013.02.13. 11:36)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2013.02.13. 11:38 
Offline
Senior Tag
Avatar

Csatlakozott: 2012.08.27. 11:11
Hozzászólások: 209
Megköszönt másnak: 35 alkalommal
Megköszönték neki: 3 alkalommal
HunGamer írta:
Legalább írnád azt, hogy nem jó.. (Ha egyáltalán letesztelted)

Ajánlom figyelmedbe a 238-242 sorokat (tiedben)
Megvannak? Remek. Akkor hasonlítsd össze az enyémmel. (240-261)

Ha tényleg letesztelted, akkor max hibás.


raj módhoz mit írjak a txt- fileba ?


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2013.02.14. 19:43 
Offline
Senior Tag
Avatar

Csatlakozott: 2012.08.27. 11:11
Hozzászólások: 209
Megköszönt másnak: 35 alkalommal
Megköszönték neki: 3 alkalommal
az a egy gondom van vele hogy nem tűnik el körvégén meglehetne oldani ??
meg hogy mit írjak txt-be mert ez írja ki hogy
ML_NOTFOUND: CHATTAG Vrd meg a krkezds
raj módban nelehessen lézert tenni
előre is köszönöm


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


Ki van itt

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