hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.07. 10:23



Jelenlévő felhasználók

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

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

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

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



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

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: LaserMine
HozzászólásElküldve: 2013.05.04. 13:33 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
Lefordítaná vki?

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

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


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


Ki van itt

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