Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Wklejka 132743334514318 dodana przez fbang, 24.01.2012 20:29
Typ:


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