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 1rxuo0xrh9rdc dodana przez d0naciak, 07.05.2017 19:25
Typ:



dawid35456
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.
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <xs>
#include <fun>
 
#define MAX_DIST 8192.0
#define MAX 32
 
new const nazwa[]   = "Gunner [Premium]";
new const opis[]    = "";
new const bronie    = (1<<CSW_XM1014)|(1<<CSW_P90);
new const zdrowie   = 0;
new const kondycja  = 0;
new const inteligencja = 0;
new const wytrzymalosc = 0;
new const frakcja[] = "Klasy [Premium]";
 
#define SENTRY_THINK 0.3
 
#define OFFSET_WPN_LINUX  4
#define OFFSET_WPN_WIN 	  41
 
#define fm_point_contents(%1) engfunc(EngFunc_PointContents, %1)
 
#define fm_DispatchSpawn(%1) dllfunc(DLLFunc_Spawn, %1)
 
new bool:ma_dzialko[33];
new gMenuDzialko[33]
 
new g_maxplayers;
 
new mdl_gib_build1
new mdl_gib_build2
new mdl_gib_build3
new mdl_gib_build4
 
static const Nazwy_broni[][] = {
	"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
	"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
	"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
	"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
	"weapon_ak47", "weapon_knife", "weapon_p90" }
 
new pcvarPercent,pcvarHealth,pcvarDamage;
 
new ma_klase[33];
 
new bool:sentrys[MAX+1];
 
new ilosc[33];
 
new ZmienKilla[2];
 
public plugin_init()
{
	register_plugin(nazwa, "1.0", "amxx.pl");
 
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc, frakcja);
 
	register_event("HLTV", "NowaRunda_Dzialko", "a", "1=0", "2=0");
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
 
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
 
	RegisterHam(Ham_Spawn, "player", "DajNoweDzialko", 1);
	RegisterHam(Ham_Spawn, "player", "Spawn", 1)
	RegisterHam(Ham_TakeDamage, "func_breakable", "fwHamTakeDamage_Dzialko" );
	RegisterHam(Ham_TakeDamage, "func_breakable", "TakeDamage");
	RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Building")
 
	for (new i = 1; i < sizeof Nazwy_broni; i++)
	{
		if (Nazwy_broni[i][0]) RegisterHam(Ham_Item_Deploy, Nazwy_broni[i], "ham_ItemDeploy_Post", 1)
	}
 
	register_think("sentry_shot","sentry_shot")
	register_think("sentryG","SentryThink");
 
	g_maxplayers = get_maxplayers();
 
	pcvarPercent = register_cvar("inzynier_percent","4")
	pcvarHealth = register_cvar("inzynier_health","600")
	pcvarDamage = register_cvar("inzynier_damage","15.0");
 
	register_cvar("zycie_sentry", "2500");
	register_cvar("usun_sentry", "1");
}
 
public plugin_precache()
{
	precache_sound("sentry_shoot.wav");
	precache_sound("debris/bustmetal1.wav");
	precache_sound("debris/bustmetal2.wav");
	precache_sound("mw/firemw.wav");
	precache_sound("mw/plant.wav");
	precache_sound("mw/sentrygun_starts.wav");
	precache_sound("mw/sentrygun_stops.wav");
	precache_sound("mw/sentrygun_gone.wav");
	precache_sound("mw/sentrygun_friend.wav");
	precache_sound("mw/sentrygun_enemy.wav");
 
	precache_model("models/v_tfc_spanner.mdl")
	precache_model("models/base2.mdl")
	precache_model("models/sentry2.mdl")
	precache_model("models/sentrygun_mw2.mdl");
 
	mdl_gib_build1 = engfunc(EngFunc_PrecacheModel,"models/mbarrel.mdl")
	mdl_gib_build2 = engfunc(EngFunc_PrecacheModel,"models/computergibs.mdl")
	mdl_gib_build3 = engfunc(EngFunc_PrecacheModel,"models/metalplategibs.mdl")
	mdl_gib_build4 = engfunc(EngFunc_PrecacheModel,"models/cindergibs.mdl")
 
}
 
public cod_class_enabled(id)
{
	if(!(get_user_flags(id) & ADMIN_LEVEL_G))
	{
		client_print(id, print_chat, "Nie masz uprawnien, aby uzywac tej klasy.")
		return COD_STOP;
	}
	ilosc[id] = 1;
	ma_dzialko[id] = true;
	ma_klase[id] = true;
 
	return COD_CONTINUE;
}
 
public cod_class_disabled(id)
{
	ilosc[id] = 0;
	ma_klase[id] = false;
}
 
public fwHamTakeDamage_Dzialko( this, idinflictor, idattacker, Float:damage, damagebits ) {
	static classname[ 20 ];
	pev( this, pev_classname, classname, 19 );
 
	if( ( equal( classname, "sentry_shot" ) || equal( classname, "sentry_base" ) ) && is_user_connected( idattacker ) && get_user_team(pev(this,pev_iuser1)) == get_user_team(idattacker) ){
		return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
 
}
 
public NowaRunda_Dzialko()
{
	remove_entity_name("sentry_base")
	remove_entity_name("sentry_shot")
}
 
public OpcjeDzialka(id)
{
	new menu,newmenu,menupage
	player_menu_info(id,menu,newmenu,menupage);
	if(menu > 0 || newmenu != -1)
	{
		return PLUGIN_CONTINUE;
	}
 
	gMenuDzialko[id] = menu_create("Dzialo", "OpcjeDziala_Handle");
	menu_additem(gMenuDzialko[id],"Postaw dzialo");
	menu_additem(gMenuDzialko[id],"Zniszcz dzialo");
 
	menu_setprop(gMenuDzialko[id],MPROP_NUMBER_COLOR,"r")
	menu_display(id,gMenuDzialko[id]);
	return PLUGIN_CONTINUE;
}
 
public OpcjeDziala_Handle(id,menu,item)
{
	if(item == MENU_EXIT || !is_user_alive(id))
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	switch(item)
	{
		case 0:
		{
			if(ma_klase[id] && ma_dzialko[id])
			{
				new Float:Origin[3]
				pev(id, pev_origin, Origin)
				new Float:vNewOrigin[3]
				new Float:vTraceDirection[3]
				new Float:vTraceEnd[3]
				new Float:vTraceResult[3]
				velocity_by_aim(id, 64, vTraceDirection) // get a velocity in the directino player is aiming, with a multiplier of 64...
				vTraceEnd[0] = vTraceDirection[0] + Origin[0]
				vTraceEnd[1] = vTraceDirection[1] + Origin[1]
				vTraceEnd[2] = vTraceDirection[2] + Origin[2]
				fm_trace_line(id, Origin, vTraceEnd, vTraceResult)
				vNewOrigin[0] = vTraceResult[0]
				vNewOrigin[1] = vTraceResult[1]
				vNewOrigin[2] = Origin[2]
				if(!(StawDzialo(vNewOrigin,id)))
				{
					client_print(id, print_center, "Nie mozesz tu postawic dziala!")
				}
				else
				{
					ma_dzialko[id] = false;
				}
			}
		}
		case 1:
		{
			new iEnt = -1;
			while((iEnt = find_ent_by_class(iEnt,"sentry_shot")) != 0)
			{
				if(pev_valid(iEnt) && pev(iEnt,pev_iuser1) == id)
				{
					FX_Demolish(iEnt)
					remove_entity(iEnt);
				}
			}
			iEnt = -1;
			while((iEnt = find_ent_by_class(iEnt,"sentry_base")) != 0)
			{
				if(pev_valid(iEnt) && pev(iEnt,pev_iuser1) == id)
				{
					FX_Demolish(iEnt)
					remove_entity(iEnt);
				}
			}
		}
	}
	menu_destroy(menu);
	return PLUGIN_CONTINUE;
}
 
public bool:StawDzialo(Float:origin[3],id)
{
	if (fm_point_contents(origin) != CONTENTS_EMPTY || is_hull_default(origin, 32.0))
	{
		return false
	}
	new Float:hitPoint[3], Float:originDown[3]
	originDown = origin
	originDown[2] = -5000.0
	fm_trace_line(0, origin, originDown, hitPoint)
	new Float:DistanceFromGround = vector_distance(origin, hitPoint)
 
	new Float:difference = 36.0 - DistanceFromGround
	if (difference < -1 * 10.0 || difference > 10.0) return false
 
	new sentry_base = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_breakable"))
	if (!sentry_base){
		return false
	}	
	set_pev(sentry_base, pev_classname, "sentry_base")
 
	engfunc(EngFunc_SetModel, sentry_base, "models/base2.mdl")
	engfunc(EngFunc_SetSize, sentry_base, {-16.0, -16.0, 0.0}, {16.0, 16.0, 25.0})
	engfunc(EngFunc_SetOrigin, sentry_base, origin)
	new Float:fAngle[3];
	pev(id, pev_v_angle, fAngle)
	fAngle[0] = 0.0
	fAngle[1] += 180.0
	fAngle[2] = 0.0
	set_pev(sentry_base, pev_angles, fAngle)
	set_pev(sentry_base, pev_solid, SOLID_BBOX)
	set_pev(sentry_base, pev_movetype, MOVETYPE_TOSS)
	set_pev(sentry_base, pev_iuser1, id)
	set_pev(sentry_base, pev_iuser2, 0)
	set_pev(sentry_base, pev_iuser3, 0)
 
	return true;
}
 
public ham_ItemDeploy_Post(weapon_ent)
{
	static owner
	owner = get_pdata_cbase(weapon_ent, OFFSET_WPN_WIN, OFFSET_WPN_LINUX);
 
	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent)
 
	if(!is_user_alive(owner))
	{
		return HAM_IGNORED;
	}
 
	static menu,newmenu,menupage
	player_menu_info(owner,menu,newmenu,menupage);
 
	if(gMenuDzialko[owner] && newmenu == gMenuDzialko[owner])
	{
		show_menu(owner,0,"^n");
		gMenuDzialko[owner] = 0;
	}
 
	if(weaponid == CSW_KNIFE && ma_klase[owner])
	{
		entity_set_string(owner, EV_SZ_viewmodel, "models/v_tfc_spanner.mdl")
		OpcjeDzialka(owner);
	}
	return HAM_IGNORED;
}
 
 
stock FX_Demolish(build)
{
	if(!pev_valid(build)) return;
 
	new Float:forigin[3],iorigin[3],i
	pev(build, pev_origin, forigin)
	FVecIVec(forigin,iorigin)
 
	for(i = 1;i <= 1;i++)
	{
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
		write_byte(TE_MODEL)
		write_coord(iorigin[0])
		write_coord(iorigin[1])
		write_coord(iorigin[2])
		write_coord(random_num(-150,150))
		write_coord(random_num(-150,150))
		write_coord(random_num(150,350))
		write_angle(random_num(0,360))
		write_short(mdl_gib_build1)
		write_byte(0) // bounce
		write_byte(10) // life
		message_end()
	}
	for(i = 1;i <= 1;i++)
	{
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
		write_byte(TE_MODEL)
		write_coord(iorigin[0])
		write_coord(iorigin[1])
		write_coord(iorigin[2])
		write_coord(random_num(-150,150))
		write_coord(random_num(-150,150))
		write_coord(random_num(150,350))
		write_angle(random_num(0,360))
		write_short(mdl_gib_build2)
		write_byte(0) // bounce
		write_byte(10) // life
		message_end()
	}
	for(i = 1;i <= 1;i++)
	{
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
		write_byte(TE_MODEL)
		write_coord(iorigin[0])
		write_coord(iorigin[1])
		write_coord(iorigin[2])
		write_coord(random_num(-150,150))
		write_coord(random_num(-150,150))
		write_coord(random_num(150,350))
		write_angle(random_num(0,360))
		write_short(mdl_gib_build3)
		write_byte(0) // bounce
		write_byte(10) // life
		message_end()
	}
	for(i = 1;i <= 1;i++)
	{
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
		write_byte(TE_MODEL)
		write_coord(iorigin[0])
		write_coord(iorigin[1])
		write_coord(iorigin[2])
		write_coord(random_num(-150,150))
		write_coord(random_num(-150,150))
		write_coord(random_num(150,350))
		write_angle(random_num(0,360))
		write_short(mdl_gib_build4)
		write_byte(0) // bounce
		write_byte(10) // life
		message_end()
	}
}
 
 
 
 
public DajNoweDzialko(id)
{
	if(!is_user_connected(id) || !is_user_alive(id))
		return PLUGIN_CONTINUE;
 
	if(ma_klase[id])
	{
		ma_dzialko[id] = true;
	}
	return PLUGIN_CONTINUE;
}
 
set_animation(id, anim) {
	set_pev(id, pev_weaponanim, anim)
 
	message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
	write_byte(anim)
	write_byte(pev(id, pev_body))
	message_end()
}
 
public fw_TraceAttack_Building(id, enemy, Float:damage, Float:direction[3], tracehandle, damagetype){
	if (!(1 <= enemy <= g_maxplayers) || get_user_weapon(enemy) != CSW_KNIFE || !is_user_alive(enemy))
	{
		return HAM_IGNORED
	}
	new classname[24]
	pev(id, pev_classname, classname, sizeof classname - 1)
	new weapon = get_user_weapon(enemy)
	if(weapon == CSW_KNIFE && ma_klase[enemy] && pev(id,pev_iuser1) == enemy && equal(classname,"sentry_base") && pev(id,pev_iuser2) < 100){
		set_pev(id,pev_iuser2,pev(id,pev_iuser2)+get_pcvar_num(pcvarPercent) > 100 ? 100 : pev(id,pev_iuser2)+get_pcvar_num(pcvarPercent));
		set_animation(enemy,8);
		if(pev(id,pev_iuser2) >= 100 && !pev(id,pev_iuser3)){
			client_print(enemy,print_center,"%d %%",pev(id,pev_iuser2))
			set_pev(id,pev_iuser3,stawdzialo2(id));
		}
		else
		{
			client_print(enemy,print_center,"%d %%",pev(id,pev_iuser2))
		}
 
	}
	return HAM_IGNORED
}
 
 
public stawdzialo2(ent)
{
	new Float:origin[3];
	pev(ent,pev_origin,origin);
	new sentry_shot2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"func_breakable"))
	if (!sentry_shot2)
	{
		return 0
	}	
	new szHealth[16]
	get_pcvar_string(pcvarHealth,szHealth,charsmax(szHealth))
 
	fm_set_kvd(sentry_shot2, "health", szHealth, "func_breakable")
	fm_set_kvd(sentry_shot2, "material", "6", "func_breakable")
	fm_DispatchSpawn(sentry_shot2)
 
	set_pev(sentry_shot2, pev_classname, "sentry_shot")
 
	engfunc(EngFunc_SetModel, sentry_shot2, "models/sentry2.mdl")
	engfunc(EngFunc_SetSize, sentry_shot2, {-16.0, -16.0, 0.0}, {16.0, 16.0, 20.0})
	origin[2] += 25.0;
	engfunc(EngFunc_SetOrigin, sentry_shot2, origin)
	new Float:fAngle[3];
	pev(pev(ent,pev_iuser1), pev_v_angle, fAngle)
	fAngle[0] = 0.0
	fAngle[1] += 180.0
	fAngle[2] = 0.0
	set_pev(sentry_shot2, pev_angles, fAngle)
	set_pev(sentry_shot2, pev_solid, SOLID_BBOX)
	set_pev(sentry_shot2, pev_movetype, MOVETYPE_TOSS)
	set_pev(sentry_shot2, pev_iuser1, pev(ent,pev_iuser1))
	set_pev(sentry_shot2, pev_iuser2, ent)
 
	set_pev( sentry_shot2, pev_sequence, 0 );
	set_pev( sentry_shot2, pev_animtime, get_gametime() );
	set_pev( sentry_shot2, pev_framerate, 1.0 );
 
	set_pev(sentry_shot2, pev_nextthink, get_gametime() + SENTRY_THINK)
	return sentry_shot2;
}
 
public sentry_find_player(ent)
{
	new Float:fOrigin[3],Float:fOrigin2[3],Float:distance = 999999.0,Float:hitOrigin[3],iCloseId = 0,iOwner = 0;
	iOwner = pev(ent,pev_iuser1)
	pev(ent,pev_origin,fOrigin)
	for(new i = 1;i<33;i++)
	{
		if(!is_user_alive(i) || get_user_team(i) == get_user_team(iOwner))
		{
			continue;
		}
		pev(i, pev_origin, fOrigin2)
		new hitent = fm_trace_line(ent, fOrigin, fOrigin2, hitOrigin)
		if(distance > vector_distance(fOrigin,fOrigin2) && hitent == i)
		{
			distance = vector_distance(fOrigin,fOrigin2)
			iCloseId = i;
		}
	}
	return iCloseId;
}
 
public sentry_shot(ent)
{
	if(!pev_valid(ent))
	{
		return PLUGIN_CONTINUE;
	}
	if(entity_get_float(ent,EV_FL_health) <= 0.0)
	{
		if(pev_valid(pev(ent,pev_iuser2)))
		{
			remove_entity(pev(ent,pev_iuser2));
		}
		remove_entity(ent);
		return PLUGIN_CONTINUE;
	}
	new iFind = 0;
	if((iFind = sentry_find_player(ent)))
	{
		remove_task(ent+45676);
		turntotarget(ent,iFind);
		sentry_shot3(ent,iFind);
		set_task(0.5,"stop_anim",ent+45676)
	}
	set_pev(ent, pev_nextthink, get_gametime() + SENTRY_THINK)
	return PLUGIN_CONTINUE;
}
 
public sentry_shot3(ent,target)
{
	new Float:sentryOrigin[3], Float:targetOrigin[3], Float:hitOrigin[3]
	pev(ent, pev_origin, sentryOrigin)
	sentryOrigin[2] += 18.0
	pev(target, pev_origin, targetOrigin)
	targetOrigin[0] += random_float(-16.0, 16.0)
	targetOrigin[1] += random_float(-16.0, 16.0)
	targetOrigin[2] += random_float(-16.0, 16.0)
	new hit = fm_trace_line(ent, sentryOrigin, targetOrigin, hitOrigin)
	if(hit == target)
	{
		knockback_explode(target, sentryOrigin, 5.0)
		ExecuteHam(Ham_TakeDamage, target, 0, pev(ent,pev_iuser1),get_pcvar_float(pcvarDamage) , 1);
		set_pev( ent, pev_sequence, 1 );
		set_pev( ent, pev_animtime, get_gametime() );
		set_pev( ent, pev_framerate, 1.0 );
	}
	FX_Trace(sentryOrigin, hitOrigin)
	engfunc(EngFunc_EmitSound, ent, CHAN_STATIC, "sentry_shoot.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
 
public stop_anim(ent){
	ent -= 45676;
	if(pev_valid(ent)){
		set_pev( ent, pev_sequence, 0 );
		set_pev(ent, pev_animtime, get_gametime() );
		set_pev( ent, pev_framerate, 1.0 );
	}
}
 
public knockback_explode(id, const Float:exp_origin[3], Float:force)
{
	if(!is_user_alive(id)) return
 
	if(force == 0.0) return
 
	new Float:old_velocity[3], Float:velocity[3], Float:id_origin[3], Float:output[3]
	pev(id, pev_origin, id_origin);
	get_speed_vector(exp_origin, id_origin, force, velocity);
	pev(id, pev_velocity, old_velocity);
	xs_vec_add(velocity, old_velocity, output)
	set_pev(id, pev_velocity, output)
}
 
public turntotarget(ent, target)
{
	if (target)
	{
		new Float:closestOrigin[3],Float:sentryOrigin[3]
		pev(target, pev_origin, closestOrigin)
		pev(ent, pev_origin, sentryOrigin)
		new Float:newAngle[3]
		pev(ent, pev_angles, newAngle)
		new Float:x = closestOrigin[0] - sentryOrigin[0]
		new Float:z = closestOrigin[1] - sentryOrigin[1]
 
		new Float:radians = floatatan(z/x, radian)
		newAngle[1] = radians * 180.0 / 3.14159
		if (closestOrigin[0] < sentryOrigin[0])
		newAngle[1] -= 180.0
 
		new Float:h = closestOrigin[2] - sentryOrigin[2]
		new Float:b = vector_distance(sentryOrigin, closestOrigin)
		radians = floatatan(h/b, radian)
		new Float:degs = radians * 180.0 / 3.14159
		new Float:RADIUS = 830.0
		new Float:degreeByte = RADIUS/256.0
		new Float:tilt = 127.0 - degreeByte * degs
		set_pev(ent, pev_angles, newAngle)
		set_pev(ent, pev_controller_1, floatround(tilt))
	}
}
 
stock FX_Trace(const Float:idorigin[3], const Float:targetorigin[3])
{
	new id[3],target[3]
	FVecIVec(idorigin,id)
	FVecIVec(targetorigin,target)
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(6)//TE_TRACER
	write_coord(id[0])
	write_coord(id[1])
	write_coord(id[2])
	write_coord(target[0])
	write_coord(target[1])
	write_coord(target[2])
	message_end()
}
 
stock bool:is_hull_default(Float:origin[3], const Float:BOUNDS){
	new Float:traceEnds[8][3], Float:traceHit[3], hitEnt
	traceEnds[0][0] = origin[0] - BOUNDS
	traceEnds[0][1] = origin[1] - BOUNDS
	traceEnds[0][2] = origin[2] - BOUNDS
 
	traceEnds[1][0] = origin[0] - BOUNDS
	traceEnds[1][1] = origin[1] - BOUNDS
	traceEnds[1][2] = origin[2] + BOUNDS
 
	traceEnds[2][0] = origin[0] + BOUNDS
	traceEnds[2][1] = origin[1] - BOUNDS
	traceEnds[2][2] = origin[2] + BOUNDS
 
	traceEnds[3][0] = origin[0] + BOUNDS
	traceEnds[3][1] = origin[1] - BOUNDS
	traceEnds[3][2] = origin[2] - BOUNDS
 
	traceEnds[4][0] = origin[0] - BOUNDS
	traceEnds[4][1] = origin[1] + BOUNDS
	traceEnds[4][2] = origin[2] - BOUNDS
 
	traceEnds[5][0] = origin[0] - BOUNDS
	traceEnds[5][1] = origin[1] + BOUNDS
	traceEnds[5][2] = origin[2] + BOUNDS
 
	traceEnds[6][0] = origin[0] + BOUNDS
	traceEnds[6][1] = origin[1] + BOUNDS
	traceEnds[6][2] = origin[2] + BOUNDS
 
	traceEnds[7][0] = origin[0] + BOUNDS
	traceEnds[7][1] = origin[1] + BOUNDS
	traceEnds[7][2] = origin[2] - BOUNDS
 
	for (new i = 0; i < 8; i++) {
		if (fm_point_contents(traceEnds[i]) != CONTENTS_EMPTY)
		return true
 
		hitEnt = fm_trace_line(0, origin, traceEnds[i], traceHit)
		if (hitEnt != 0)
		return true
		for (new j = 0; j < 3; j++)
		if (traceEnds[i][j] != traceHit[j])
		return true
	}
	return false
}
 
stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:force, Float:new_velocity[3])
{
	new_velocity[0] = origin2[0] - origin1[0]
	new_velocity[1] = origin2[1] - origin1[1]
	new_velocity[2] = origin2[2] - origin1[2]
	new Float:num = floatsqroot(force*force / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	new_velocity[0] *= num
	new_velocity[1] *= num
	new_velocity[2] *= num
 
	return 1;
}
 
public NowaRunda()
{
	new num, players[32];
	get_players(players, num, "gh");
	for(new i = 0; i < num; i++)
	{
		if(task_exists(players[i]+997))
			remove_task(players[i]+997);
	}
 
	if(get_cvar_num("usun_sentry"))
		remove_entity_name("sentryG")
}
 
public client_disconnect(id)
{
	new ent = -1
	while((ent = find_ent_by_class(ent, "sentryG")))
	{
		if(entity_get_int(ent, EV_INT_iuser2) == id)
			remove_entity(ent);
	}
	return PLUGIN_CONTINUE;
}
 
public message_DeathMsg()
{
	new killer = get_msg_arg_int(1);
	if(ZmienKilla[1] & (1<<killer))
	{
		set_msg_arg_string(4, "m249");
		return PLUGIN_CONTINUE;
	}
	return PLUGIN_CONTINUE;
}
 
public Spawn(id)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return PLUGIN_CONTINUE;
 
	if(ma_klase[id])
		ilosc[id] = 1;
 
	return PLUGIN_CONTINUE;
}
 
public cod_class_skill_used(id)
{
	if(!ilosc[id])
	{
		client_print(id, print_center, "Masz tylko jednego Sentry na runde!");
		return PLUGIN_CONTINUE;
	}
	else
	{
		if (is_user_alive(id))
		{
 
			ilosc[id]--;
 
			CreateSentry(id);
		}
	}
	return PLUGIN_CONTINUE;
}
 
public CreateSentry(id) 
{
	if(!(entity_get_int(id, EV_INT_flags) & FL_ONGROUND)) 
		return;
 
	new entlist[3];
	if(find_sphere_class(id, "func_bomb_target", 650.0, entlist, 2))
	{
		client_print(id, print_chat, "Jestes zbyt blisko BS'A");
		return;
	}
	if(find_sphere_class(id, "func_buyzone", 650.0, entlist, 2))
	{
		client_print(id, print_chat, "Jestes zbyt blisko Respa");
		return;
	}
	new num, players[32], Float:Origin[3];
	get_players(players, num, "gh");
	for(new a = 0; a < num; a++)
	{
		new i = players[a];
		if(get_user_team(id) != get_user_team(i))
			client_cmd(i, "spk sound/mw/sentrygun_enemy.wav");
		else
			client_cmd(i, "spk sound/mw/sentrygun_friend.wav");
	}
	print_info(id, "Sentry Gun");
 
	entity_get_vector(id, EV_VEC_origin, Origin);
	Origin[2] += 45.0;
 
	new health[12], ent = create_entity("func_breakable");
	get_cvar_string("zycie_sentry",health, charsmax(health));
 
	DispatchKeyValue(ent, "health", health);
	DispatchKeyValue(ent, "material", "6");
 
	entity_set_string(ent, EV_SZ_classname, "sentryG");
	entity_set_model(ent, "models/sentrygun_mw2.mdl");
 
	entity_set_float(ent, EV_FL_takedamage, DAMAGE_YES);
 
	entity_set_size(ent, Float:{-16.0, -16.0, 0.0}, Float:{16.0, 16.0, 48.0});
 
	entity_set_origin(ent, Origin);
	entity_set_int(ent, EV_INT_solid, SOLID_SLIDEBOX);
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS);
	entity_set_int(ent, EV_INT_iuser2, id);
	entity_set_vector(ent, EV_VEC_angles, Float:{0.0, 0.0, 0.0});
	entity_set_byte(ent, EV_BYTE_controller2, 127);
 
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+1.0);
 
	sentrys[id] = false;
	emit_sound(ent, CHAN_ITEM, "mw/plant.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
}
 
public SentryThink(ent)
{
	if(!is_valid_ent(ent)) 
		return PLUGIN_CONTINUE;
 
	new Float:SentryOrigin[3], Float:closestOrigin[3];
	entity_get_vector(ent, EV_VEC_origin, SentryOrigin);
 
	new id = entity_get_int(ent, EV_INT_iuser2);
	new target = entity_get_edict(ent, EV_ENT_euser1);
	new firemods = entity_get_int(ent, EV_INT_iuser1);
 
	if(firemods)
	{ 
		if(/*ExecuteHam(Ham_FVisible, target, ent)*/fm_is_ent_visible(target, ent) && is_user_alive(target)) 
		{
			if(UTIL_In_FOV(target,ent))
			{
				goto fireoff;
			}
 
			new Float:TargetOrigin[3];
			entity_get_vector(target, EV_VEC_origin, TargetOrigin);
 
			emit_sound(ent, CHAN_AUTO, "mw/firemw.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
			sentry_turntotarget(ent, SentryOrigin, TargetOrigin);
 
			new Float:hitRatio = random_float(0.0, 1.0) - 0.2;
			if(hitRatio <= 0.0)
			{
				UTIL_Kill(id, target, random_float(5.0, 35.0), DMG_BULLET, 1);
 
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
				write_byte(TE_TRACER);
				write_coord(floatround(SentryOrigin[0]));
				write_coord(floatround(SentryOrigin[1]));
				write_coord(floatround(SentryOrigin[2]));
				write_coord(floatround(TargetOrigin[0]));
				write_coord(floatround(TargetOrigin[1]));
				write_coord(floatround(TargetOrigin[2]));
				message_end();
			}
			entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
			return PLUGIN_CONTINUE;
		}
		else
		{
			fireoff:
			firemods = 0;
			entity_set_int(ent, EV_INT_iuser1, 0);
			entity_set_edict(ent, EV_ENT_euser1, 0);
			emit_sound(ent, CHAN_AUTO, "mw/sentrygun_stops.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
 
			entity_set_float(ent, EV_FL_nextthink, get_gametime()+1.0);
			return PLUGIN_CONTINUE;
		}
	}
 
	new closestTarget = getClosestPlayer(ent)
	if(closestTarget)
	{
		emit_sound(ent, CHAN_AUTO, "mw/sentrygun_starts.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
		entity_get_vector(closestTarget, EV_VEC_origin, closestOrigin);
		sentry_turntotarget(ent, SentryOrigin, closestOrigin);
 
		entity_set_int(ent, EV_INT_iuser1, 1);
		entity_set_edict(ent, EV_ENT_euser1, closestTarget);
 
		entity_set_float(ent, EV_FL_nextthink, get_gametime()+1.0);
		return PLUGIN_CONTINUE;
	}
 
	if(!firemods)
	{
		new controler1 = entity_get_byte(ent, EV_BYTE_controller1)+1;
		if(controler1 > 255)
			controler1 = 0;
		entity_set_byte(ent, EV_BYTE_controller1, controler1);
 
		new controler2 = entity_get_byte(ent, EV_BYTE_controller2);
		if(controler2 > 127 || controler2 < 127)
			entity_set_byte(ent, EV_BYTE_controller2, 127);
 
		entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.05);
	}
	return PLUGIN_CONTINUE
}
 
public sentry_turntotarget(ent, Float:sentryOrigin[3], Float:closestOrigin[3]) 
{
	new newTrip, Float:newAngle = floatatan(((closestOrigin[1]-sentryOrigin[1])/(closestOrigin[0]-sentryOrigin[0])), radian) * 57.2957795;
 
	if(closestOrigin[0] < sentryOrigin[0])
		newAngle += 180.0;
	if(newAngle < 0.0)
		newAngle += 360.0;
 
	sentryOrigin[2] += 35.0
	if(closestOrigin[2] > sentryOrigin[2])
		newTrip = 0;
	if(closestOrigin[2] < sentryOrigin[2])
		newTrip = 255;
	if(closestOrigin[2] == sentryOrigin[2])
		newTrip = 127;
 
	entity_set_byte(ent, EV_BYTE_controller1,floatround(newAngle*0.70833));
	entity_set_byte(ent, EV_BYTE_controller2, newTrip);
	entity_set_byte(ent, EV_BYTE_controller3, entity_get_byte(ent, EV_BYTE_controller3)+20>255? 0: entity_get_byte(ent, EV_BYTE_controller3)+20);
}
 
public TakeDamage(ent, idinflictor, attacker, Float:damage, damagebits)
{
	if(!is_user_alive(attacker))
		return HAM_IGNORED;
 
	new classname[32];
	entity_get_string(ent, EV_SZ_classname, classname, 31);
 
	if(equal(classname, "sentryG")) 
	{
		new id = entity_get_int(ent, EV_INT_iuser2);
		if(get_user_team(attacker) == get_user_team(id))
			return HAM_SUPERCEDE;
 
		if(damage >= entity_get_float(ent, EV_FL_health))
		{
			new Float:Origin[3];
			entity_get_vector(ent, EV_VEC_origin, Origin);	
			new entlist[33];
			new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
 
			for(new i=0; i < numfound; i++)
			{		
				new pid = entlist[i];
 
				if(!is_user_alive(pid) || get_user_team(id) == get_user_team(pid))
					continue;
				UTIL_Kill(id, pid, 70.0, (1<<24));
			}
			client_cmd(id, "spk sound/mw/sentrygun_gone.wav");
 
			set_task(1.0, "del_sentry", ent);
		}
	}
	return HAM_IGNORED;
}
 
public del_sentry(ent)
{	
	remove_entity(ent);
}
 
stock UTIL_Kill(atakujacy, obrywajacy, Float:damage, damagebits, ile=0)
{
	ZmienKilla[ile] |= (1<<atakujacy);
	ExecuteHam(Ham_TakeDamage, obrywajacy, atakujacy, atakujacy, damage, damagebits);
	ZmienKilla[ile] &= ~(1<<atakujacy);
}
 
stock print_info(id, const nagroda[], const nazwa[] = "y")
{
	new nick[64];
	get_user_name(id, nick, 63);
	client_print(0, print_chat, "%s wezwan%s przez %s", nagroda, nazwa, nick);
}
 
stock bool:UTIL_In_FOV(id,ent)
{
	if((get_pdata_int(id, 510) & (1<<16)) && (Find_Angle(id, ent) > 0.0))
		return true;
	return false;
}
 
stock getClosestPlayer(ent)
{
	new iClosestPlayer = 0, Float:flClosestDist = MAX_DIST, Float:flDistanse, Float:fOrigin[2][3];
	new num, players[32];
	get_players(players, num, "gh")
	for(new a = 0; a < num; a++)
	{
		new i = players[a];
		if(!is_user_connected(i) || !is_user_alive(i) || /*!ExecuteHam(Ham_FVisible, i, ent)*/!fm_is_ent_visible(i, ent) || get_user_team(i) == get_user_team(entity_get_int(ent, EV_INT_iuser2)))
			continue;
 
		if(UTIL_In_FOV(i, ent))
			continue;
 
		entity_get_vector(i, EV_VEC_origin, fOrigin[0]);
		entity_get_vector(ent, EV_VEC_origin, fOrigin[1]);
 
		flDistanse = get_distance_f(fOrigin[0], fOrigin[1]);
 
		if(flDistanse <= flClosestDist)
		{
			iClosestPlayer = i;
			flClosestDist = flDistanse;
		}
	}
	return iClosestPlayer;
}
 
stock Float:Find_Angle(id, target)
{
	new Float:Origin[3], Float:TargetOrigin[3];
	pev(id,pev_origin, Origin);
	pev(target,pev_origin,TargetOrigin);
 
	new Float:Angles[3], Float:vec2LOS[3];
	pev(id,pev_angles, Angles);
 
	xs_vec_sub(TargetOrigin, Origin, vec2LOS);
	vec2LOS[2] = 0.0;
 
	new Float:veclength = vector_length(vec2LOS);
	if (veclength <= 0.0)
		vec2LOS[0] = vec2LOS[1] = 0.0;
	else
	{
		new Float:flLen = 1.0 / veclength;
		vec2LOS[0] = vec2LOS[0]*flLen;
		vec2LOS[1] = vec2LOS[1]*flLen;
	}
	engfunc(EngFunc_MakeVectors, Angles);
 
	new Float:v_forward[3];
	get_global_vector(GL_v_forward, v_forward);
 
	new Float:flDot = vec2LOS[0]*v_forward[0]+vec2LOS[1]*v_forward[1];
	if(flDot > 0.5)
		return flDot;
 
	return 0.0;
}
 

Dodanych wklejek: 4031
Powered By (Pav32) Pastebin © 2011