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 13370202060 dodana przez Gość, 14.05.2012 19:30
Typ:


13370202060
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.
/* Plugin generated by AMXX-Studio */
 
/* Informacje o klasie:
v 1.0 - Wydanie klasy przez cypis
v 1.1 - Jeśli drop'nęliśmy bazooke i ją podnieśliśmy to mieliśmy p228 a nie bazooke // Poprawka by BloodMan */
 
#include <amxmodx>
#include <cstrike>
#include <fakemeta_util>
#include <hamsandwich>
#include <codmod>
#include <colorchat>
 
#define DMG_BULLET (1<<1)
 
#define MAX 32
 
#define nazwa "Bazooker"
#define opis "1/2 z noza (PPM), dodatkowe 5(+int) obrazen z UMP45, bazooka zamiast p228"
 
new const bronie = 1<<CSW_UMP45 | 1<<CSW_DEAGLE | 1<<CSW_SMOKEGRENADE | 1<<CSW_P228;
new const zdrowie = 15;
new const kondycja = -10;
new const inteligencja = 5;
new const wytrzymalosc = 30;
 
new bool:wystrzelony[MAX+1][MAX+1];	
new bool:ma_klase[MAX+1], bool:has_weapon[MAX+1], bool:reloading[MAX+1], rockets[MAX+1], Float:idle[MAX+1];
new sprite_blast, sprite_nadeexp, sprite_smoke, sprite_trail;
 
public plugin_init() 
{
	register_plugin(nazwa, "1.1", "cypis");
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
 
	RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
	RegisterHam(Ham_Item_Deploy, "weapon_p228", "Weapon_Deploy", 1);
	RegisterHam(Ham_Weapon_WeaponIdle, "weapon_p228", "Weapon_WeaponIdle");
	RegisterHam(Ham_TakeDamage, "player", "szansaNoz");
	RegisterHam(Ham_TakeDamage, "player", "DmgUMP");
 
	register_forward(FM_CmdStart, "CmdStart");
	register_forward(FM_SetModel, "SetModel");
	register_forward(FM_Touch, "fw_Touch")
 
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
 
	register_cvar("cod_law_damage", "120.0");
	register_cvar("cod_law_radius", "250.0");
	register_cvar("cod_law_rockets", "15");
}
 
public plugin_precache()
{
	sprite_blast = precache_model("sprites/dexplo.spr");
	sprite_smoke = precache_model("sprites/steam1.spr");
	sprite_nadeexp = precache_model("sprites/law_exp.spr");
	sprite_trail = precache_model("sprites/smoke.spr");
 
	precache_model("models/p_law.mdl");
	precache_model("models/w_law.mdl");
	precache_model("models/v_law.mdl");
	precache_model("models/s_grenade.mdl");
	precache_sound("weapons/law_shoot1.wav");
}
 
public cod_class_enabled(id)
{
	ColorChat(id, GREEN, "Klasa Mechanik na potrzeby VolT.");
	ma_klase[id] = true;
	Odrodzenie(id)
}
 
public cod_class_disabled(id)
{
	ma_klase[id] = false;
	has_weapon[id] = false;
	rockets[id] = 0;
}
 
public Odrodzenie(id)
{
	if(is_user_alive(id) && ma_klase[id])
	{
		has_weapon[id] = true;
		rockets[id] = get_cvar_num("cod_law_rockets");
	}	
}
 
public CmdStart(id, uc)
{
	if(!is_user_alive(id))
		return FMRES_IGNORED;
 
	new weapon = get_user_weapon(id);
	if(weapon == 1 && has_weapon[id])
	{ 
		new button = get_uc(uc, UC_Buttons);
		new ent = fm_find_ent_by_owner(-1, "weapon_p228", id);
 
		if(button & IN_ATTACK)
		{
			button &= ~IN_ATTACK;
			set_uc(uc, UC_Buttons, button);
 
			if(!rockets[id] || reloading[id] || !idle[id]) 
				return FMRES_IGNORED;
			if(idle[id] && (get_gametime()-idle[id]<=0.4)) 
				return FMRES_IGNORED;
 
			new Float:Origin[3], Float:Angle[3], Float:Velocity[3];
			pev(id, pev_origin, Origin);
			pev(id, pev_v_angle, Angle);
			velocity_by_aim(id, 1000, Velocity);
 
			Angle[0] *= -1.0
 
			new ent = fm_create_entity("info_target")
			set_pev(ent, pev_classname, "rocket");
			engfunc(EngFunc_SetModel, ent, "models/s_grenade.mdl");
 
			set_pev(ent, pev_solid, SOLID_BBOX);
			set_pev(ent, pev_movetype, MOVETYPE_TOSS);
			set_pev(ent, pev_owner, id);
			set_pev(ent, pev_mins, Float:{-1.0, -1.0, -1.0});
			set_pev(ent, pev_maxs, Float:{1.0, 1.0, 1.0});
			set_pev(ent, pev_gravity, 0.35);
 
			set_pev(ent, pev_origin, Origin);
			set_pev(ent, pev_velocity, Velocity);
			set_pev(ent, pev_angles, Angle);
 
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_BEAMFOLLOW)
			write_short(ent)
			write_short(sprite_trail)
			write_byte(6)
			write_byte(3)
			write_byte(224)	
			write_byte(224)	
			write_byte(255)
			write_byte(100)
			message_end()	
 
			set_pev(id, pev_weaponanim, 7);
			new entwpn = fm_find_ent_by_owner(-1, "weapon_p228", id)
			if(entwpn)
				set_pdata_float(entwpn, 48, 1.5+3.0, 4)
			set_pdata_float(id, 83, 1.5, 4)
 
			reloading[id] = true;
			emit_sound(id, CHAN_WEAPON, "weapons/law_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
 
			if(task_exists(id+3512)) 
				remove_task(id+3512)
 
			set_task(1.5, "task_launcher_reload", id+3512)
			rockets[id]--;
		}
		else if(button & IN_RELOAD)
		{
			button &= ~IN_RELOAD;
			set_uc(uc, UC_Buttons, button);
 
			set_pev(id, pev_weaponanim, 0);
			set_pdata_float(id, 83, 0.5, 4);
			if(ent)
				set_pdata_float(ent, 48, 0.5+3.0, 4);
		}
 
		if(ent)
			cs_set_weapon_ammo(ent, -1);
		cs_set_user_bpammo(id, 1, rockets[id]);		
	}
	else if(weapon != 1 && has_weapon[id])
		idle[id] = 0.0;
 
	return FMRES_IGNORED;
}	
 
public Weapon_Deploy(ent)
{
	new id = get_pdata_cbase(ent, 41, 4);
	if(has_weapon[id])
	{
		set_pev(id, pev_viewmodel2, "models/v_law.mdl");
		set_pev(id, pev_weaponmodel2, "models/p_law.mdl");
	}
	return PLUGIN_CONTINUE;
}
 
public Weapon_WeaponIdle(ent)
{
	new id = get_pdata_cbase(ent, 41, 4);
	if(get_user_weapon(id) == 1 && has_weapon[id])
	{
		if(!idle[id]) 
			idle[id] = get_gametime();
	}
}
 
public SetModel(ent, model[])
{
	if(!pev_valid(ent))
		return FMRES_IGNORED
 
	if(!equal(model, "models/w_p228.mdl")) 
		return FMRES_IGNORED;
 
	new id = pev(ent, pev_owner);
	if(!has_weapon[id])
		return FMRES_IGNORED;
 
	engfunc(EngFunc_SetModel, ent, "models/w_law.mdl");
	set_pev(ent, pev_iuser4, rockets[id]);
	has_weapon[id] = true;
	return FMRES_SUPERCEDE;
}
 
public task_launcher_reload(id)
{
	id -= 3512;
	reloading[id] = false;
	set_pev(id, pev_weaponanim, 0);
}
 
public fw_Touch(ent, id)
{
	if(!pev_valid(ent))
		return FMRES_IGNORED
 
	new class[32]
	pev(ent, pev_classname, class, charsmax(class))
 
	if(!equal(class, "rocket"))
		return FMRES_IGNORED
 
	new attacker = pev(ent, pev_owner);
	new Float:entOrigin[3], Float:fDamage, Float:Origin[3];
	pev(ent, pev_origin, entOrigin);
	entOrigin[2] += 1.0;
 
	new Float:g_damage = get_cvar_float("cod_law_damage");
	new Float:g_radius = get_cvar_float("cod_law_radius");
 
	new victim = -1
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, entOrigin, g_radius)) != 0)
	{		
		if(!is_user_alive(victim) || get_user_team(attacker) == get_user_team(victim))
			continue;
 
		pev(victim, pev_origin, Origin);
		fDamage = g_damage - floatmul(g_damage, floatdiv(get_distance_f(Origin, entOrigin), g_radius));
		fDamage *= estimate_take_hurt(entOrigin, victim);
		if(fDamage>0.0)
			UTIL_Kill(attacker, victim, fDamage, DMG_BULLET);
	}
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY); 
	write_byte(TE_EXPLOSION);
	write_coord(floatround(entOrigin[0]));
	write_coord(floatround(entOrigin[1]));
	write_coord(floatround(entOrigin[2]));
	write_short(sprite_nadeexp); 
	write_byte(40); 
	write_byte(30); 
	write_byte(14); 
	message_end(); 
 
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY); 
	write_byte(TE_EXPLOSION); 
	write_coord(floatround(entOrigin[0])); 
	write_coord(floatround(entOrigin[1])); 
	write_coord(floatround(entOrigin[2])); 
	write_short(sprite_blast); 
	write_byte(40);
	write_byte(30);
	write_byte(TE_EXPLFLAG_NONE); 
	message_end(); 
 
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(5)
	write_coord(floatround(entOrigin[0])); 
	write_coord(floatround(entOrigin[1])); 
	write_coord(floatround(entOrigin[2]));
	write_short(sprite_smoke);
	write_byte(35);
	write_byte(5);
	message_end();
	fm_remove_entity(ent);
	return FMRES_IGNORED
}
 
public message_DeathMsg()
{
	static killer, victim;
	killer = get_msg_arg_int(1);
	victim = get_msg_arg_int(2);
 
	if(wystrzelony[killer][victim])
	{
		wystrzelony[killer][victim] = false;
		set_msg_arg_string(4, "grenade");
		return PLUGIN_CONTINUE;
	}
	return PLUGIN_CONTINUE;
}
 
stock Float:estimate_take_hurt(Float:fPoint[3], ent) 
{
	new Float:fOrigin[3], tr, Float:fFraction;
	pev(ent, pev_origin, fOrigin);
	engfunc(EngFunc_TraceLine, fPoint, fOrigin, DONT_IGNORE_MONSTERS, 0, tr);
	get_tr2(tr, TR_flFraction, fFraction);
	if(fFraction == 1.0 || get_tr2(tr, TR_pHit) == ent)
		return 1.0;
	return 0.6;
}
 
stock UTIL_Kill(atakujacy, obrywajacy, Float:damage, damagebits)
{
	if(get_user_health(obrywajacy) <= floatround(damage))
		wystrzelony[atakujacy][obrywajacy] = true;
 
	cod_inflict_damage(atakujacy, obrywajacy, damage, 1.0, atakujacy, damagebits);
}
 
public szansaNoz(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED; 
 
	if(!ma_klase[idattacker])
		return HAM_IGNORED;
 
	if(damagebits & DMG_BULLET)
	{
		new weapon = get_user_weapon(idattacker);
 
		if(weapon == CSW_KNIFE && damage > 20.0 && random_num(1,2) == 1) 
			cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);
 
	}
 
	return HAM_IGNORED;
}
 
public DmgUMP(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
 
	if(!ma_klase[idattacker])
		return HAM_IGNORED;
 
	if(get_user_weapon(idattacker) == CSW_UMP45 && damagebits & DMG_BULLET)
		cod_inflict_damage(idattacker, this, 5.0, 0.1, idinflictor, damagebits);
 
	return HAM_IGNORED;
}