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 131351670412053 dodana przez Hiroshima, 16.08.2011 18:45
Typ:


131351670412053
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.
/*******************************************************************************
 
  Parachute
 
  Version: 1.0
  Author: mef/JTP10181
 
  0.1    Release
  0.1.1  Players can't buy a parachute if they already own one
  0.1.2  Release for AMX MOD X
  0.1.3  Minor changes
  0.1.4  Players lose their parachute if they die
  0.1.5  Added amx_parachute cvar
  0.1.6  Changed set_origin to movetype_follow (you won't see your own parachute)
  0.1.7  Added amx_parachute <name> | admins with admin level a get a free parachute
  0.1.8  JTP - Cleaned up code, fixed runtime error
  1.0    JTP - Should be final version, made it work on basically any mod
  1.1    JTP - Added Changes from AMX Version 0.1.8
		     Added say give_parachute and parachute_fallspeed cvar
               Plays the release animation when you touch the ground
               Added chat responder for automatic help
  1.2    JTP - Added cvar to disable the detach animation
  			Redid animation code to improve organization
  			Force "walk" animation on players when falling
  			Change users gravity when falling to avoid choppiness
  1.3    JTP - Upgraded to pCVARs
 
  Commands:
 
	say kup_spadochron   -   buys a parachute (CStrike ONLY)
	say sprzedaj_spadochron  -   sells your parachute (75% of the purchase price)
	say daj_spadochron <nick, #userid or @team>  -  gives your parachute to the player
 
	amx_parachute <nick, #userid or @team>  -  gives a player a free parachute (CStrike ONLY)
	amx_parachute @all  -  gives everyone a free parachute (CStrike ONLY)
 
	Press +use to slow down your fall.
 
  Cvars:
 
	sv_parachute "1"			- 0: disables the plugin - 1: enables the plugin
 
	parachute_cost "1000"		- cost of the parachute (CStrike ONLY)
 
	parachute_payback "75"		- how many percent of the parachute cost you get when you sell your parachute
								(ie. (75/100) * 1000 = 750$)
 
	parachute_fallspeed "100"	- speed of the fall when you use the parachute
 
 
  Setup (AMXX 1.x):
 
	Install the amxx file.
	Enable engine and cstrike (for cs only) in the amxx modules.ini
	Put the parachute.mdl file in the modname/models/ folder
 
*******************************************************************************/
 
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fun>
 
new bool:has_parachute[33]
new para_ent[33]
new gCStrike = 0
new pDetach, pFallSpeed, pEnabled, pCost, pPayback
 
 
 
public plugin_init()
{
	register_plugin("Parachute", "1.0", "mef/JTP10181")
	pEnabled = register_cvar("sv_parachute", "1" )
	pFallSpeed = register_cvar("parachute_fallspeed", "100")
	pDetach = register_cvar("parachute_detach", "1")
 
	if (cstrike_running()) gCStrike = true
 
	if (gCStrike) {
 
		pCost = register_cvar("parachute_cost", "1000")
		pPayback = register_cvar("parachute_payback", "75")
 
		register_concmd("amx_parachute", "admin_give_parachute", "<nick, #userid or @team>" )
	}
 
	register_clcmd("say", "HandleSay")
	register_clcmd("say_team", "HandleSay")
 
	register_event("ResetHUD", "newSpawn", "be")
	register_event("DeathMsg", "death_event", "a")
 
	//Setup jtp10181 CVAR
	new cvarString[256], shortName[16]
	copy(shortName,15,"chute")
 
	register_cvar("jtp10181","",FCVAR_SERVER|FCVAR_SPONLY)
	get_cvar_string("jtp10181",cvarString,255)
 
	if (strlen(cvarString) == 0) {
		formatex(cvarString,255,shortName)
		set_cvar_string("jtp10181",cvarString)
	}
	else if (contain(cvarString,shortName) == -1) {
		format(cvarString,255,"%s,%s",cvarString, shortName)
		set_cvar_string("jtp10181",cvarString)
	}
}
 
public plugin_natives()
{
	set_module_filter("module_filter")
	set_native_filter("native_filter")
}
 
public module_filter(const module[])
{
	if (!cstrike_running() && equali(module, "cstrike")) {
		return PLUGIN_HANDLED
	}
 
	return PLUGIN_CONTINUE
}
 
public native_filter(const name[], index, trap)
{
	if (!trap) return PLUGIN_HANDLED
 
	return PLUGIN_CONTINUE
}
 
public plugin_precache()
{
	precache_model("models/parachute.mdl")
}
 
public client_connect(id)
{
	parachute_reset(id)
}
 
public client_disconnect(id)
{
	parachute_reset(id)
}
 
public death_event()
{
	new id = read_data(2)
	parachute_reset(id)
}
 
parachute_reset(id)
{
	if(para_ent[id] > 0) {
		if (is_valid_ent(para_ent[id])) {
			remove_entity(para_ent[id])
		}
	}
 
	if (is_user_alive(id)) set_user_gravity(id, 1.0)
 
	has_parachute[id] = false
	para_ent[id] = 0
}
 
public newSpawn(id)
{
	if(para_ent[id] > 0) {
		remove_entity(para_ent[id])
		set_user_gravity(id, 1.0)
		para_ent[id] = 0
	}
 
	if (!gCStrike || access(id) || get_pcvar_num(pCost) <= 0) {
		has_parachute[id] = true
		//set_view(id, CAMERA_3RDPERSON)
	}
}
 
public HandleSay(id)
{
	if(!is_user_connected(id)) return PLUGIN_CONTINUE
 
	new args[128]
	read_args(args, 127)
	remove_quotes(args)
 
	if (gCStrike) {
		if (equali(args, "kup_spadochron")) {
			kup_spadochron(id)
			return PLUGIN_HANDLED
		}
		else if (equali(args, "sprzedaj_spadochron")) {
			sprzedaj_spadochron(id)
			return PLUGIN_HANDLED
		}
		else if (containi(args, "daj_spadochron") == 0) {
			daj_spadochron(id,args[15])
			return PLUGIN_HANDLED
		}
	}
 
	if (containi(args, "parachute") != -1) {
		if (gCStrike) client_print(id, print_chat, "[AMXX] Komendy spadochronu: kup_spadochron, sprzedaj_spadochron, daj_spadochron")
		client_print(id, print_chat, "[AMXX] Do uzycia spadochronu uzyj klawisza +use (domyslnie E)")
	}
 
	return PLUGIN_CONTINUE
}
 
public kup_spadochron(id)
{
	if (!gCStrike) return PLUGIN_CONTINUE
	if (!is_user_connected(id)) return PLUGIN_CONTINUE
 
	if (!get_pcvar_num(pEnabled)) {
		client_print(id, print_chat, "[AMXX] Plugin spadochronu zostal wylaczony")
		return PLUGIN_HANDLED
	}
 
	if (has_parachute[id]) {
		client_print(id, print_chat, "[AMXX] Masz juz spadochron")
		return PLUGIN_HANDLED
	}
 
	new money = cs_get_user_money(id)
	new cost = get_pcvar_num(pCost)
 
	if (money < cost) {
		client_print(id, print_chat, "[AMXX] Masz za malo pieniedzy na kupno spadochronu - Kosztuje $%i", cost)
		return PLUGIN_HANDLED
	}
 
	cs_set_user_money(id, money - cost)
	client_print(id, print_chat, "[AMXX] Kupiles spadochron. Aby go uzyc, wcisnij klawisz +use (domyslnie E).")
	has_parachute[id] = true
 
	return PLUGIN_HANDLED
}
 
public sprzedaj_spadochron(id)
{
	if (!gCStrike) return PLUGIN_CONTINUE
	if (!is_user_connected(id)) return PLUGIN_CONTINUE
 
	if (!get_pcvar_num(pEnabled)) {
		client_print(id, print_chat, "[AMXX] Plugin spadochronu zostal wylaczony")
		return PLUGIN_HANDLED
	}
 
	if (!has_parachute[id]) {
		client_print(id, print_chat, "[AMXX] Nie masz spadochronu, wiec go nie sprzedasz")
		return PLUGIN_HANDLED
	}
 
	if (access(id)) {
		//client_print(id, print_chat, "[AMXX] Nie mozesz sprzedac spadochronu, ktory otrzymales za darmo jako admin")
		return PLUGIN_HANDLED
	}
 
	parachute_reset(id)
 
	new money = cs_get_user_money(id)
	new cost = get_pcvar_num(pCost)
 
	new sellamt = floatround(cost * (get_pcvar_num(pPayback) / 100.0))
	cs_set_user_money(id, money + sellamt)
 
	client_print(id, print_chat, "[AMX] You have sold your used parachute for $%d", sellamt)
 
	return PLUGIN_CONTINUE
}
 
public daj_spadochron(id,args[])
{
	if (!gCStrike) return PLUGIN_CONTINUE
	if (!is_user_connected(id)) return PLUGIN_CONTINUE
 
	if (!get_pcvar_num(pEnabled)) {
		client_print(id, print_chat, "[AMXX] Plugin spadochronu zostal wylaczony")
		return PLUGIN_HANDLED
	}
 
	if (!has_parachute[id]) {
		client_print(id, print_chat, "[AMXX] Nie masz spadochronu, wiec nie mozesz go nikomu dac")
		return PLUGIN_HANDLED
	}
 
	new player = cmd_target(id, args, 4)
	if (!player) return PLUGIN_HANDLED
 
	new id_name[32], pl_name[32]
	get_user_name(id, id_name, 31)
	get_user_name(player, pl_name, 31)
 
	if(has_parachute[player]) {
		client_print(id, print_chat, "[AMXX] %s ma juz spadochron.", pl_name)
		return PLUGIN_HANDLED
	}
 
	parachute_reset(id)
	has_parachute[player] = true
 
	client_print(id, print_chat, "[AMXX] Dales swoj spadochron graczowi %s.", pl_name)
	client_print(player, print_chat, "[AMXX] %s dal wlasny spadochron tobie", id_name)
 
	return PLUGIN_HANDLED
}
 
public admin_give_parachute(id, level, cid) {
 
	if (!gCStrike) return PLUGIN_CONTINUE
 
	if(!cmd_access(id,level,cid,2)) return PLUGIN_HANDLED
 
	if (!get_pcvar_num(pEnabled)) {
		client_print(id, print_chat, "[AMXX] Plugin spadochronu zostal wylaczony")
		return PLUGIN_HANDLED
	}
 
	new arg[32], name[32], name2[32], authid[35], authid2[35]
	read_argv(1,arg,31)
	get_user_name(id,name,31)
	get_user_authid(id,authid,34)
 
	if (arg[0]=='@'){
		new players[32], inum
		if (equali("T",arg[1]))		copy(arg[1],31,"TERRORIST")
		if (equali("ALL",arg[1]))	get_players(players,inum)
		else						get_players(players,inum,"e",arg[1])
 
		if (inum == 0) {
			console_print(id,"No clients in such team")
			return PLUGIN_HANDLED
		}
 
		for(new a = 0; a < inum; a++) {
			has_parachute[players[a]] = true
		}
 
		switch(get_cvar_num("amx_show_activity"))	{
			case 2:	client_print(0,print_chat,"ADMIN %s: dal spadochron graczowi ^"%s^" players",name,arg[1])
			case 1:	client_print(0,print_chat,"ADMIN: dal spadochron graczowi ^"%s^" players",arg[1])
		}
 
		console_print(id,"[AMXX] Dales spadochron graczowi ^"%s^" players",arg[1])
		log_amx("^"%s<%d><%s><>^" gave a parachute to ^"%s^"", name,get_user_userid(id),authid,arg[1])
	}
	else {
 
		new player = cmd_target(id,arg,6)
		if (!player) return PLUGIN_HANDLED
 
		has_parachute[player] = true
 
		get_user_name(player,name2,31)
		get_user_authid(player,authid2,34)
 
		switch(get_cvar_num("amx_show_activity")) {
			case 2:	client_print(0,print_chat,"ADMIN %s: dal spadochron graczowi ^"%s^"",name,name2)
			case 1:	client_print(0,print_chat,"ADMIN: dal spadochron graczowi ^"%s^"",name2)
		}
 
		console_print(id,"[AMXX] Dales spadochron graczowi ^"%s^"", name2)
		log_amx("^"%s<%d><%s><>^" gave a parachute to ^"%s<%d><%s><>^"", name,get_user_userid(id),authid,name2,get_user_userid(player),authid2)
	}
	return PLUGIN_HANDLED
}
 
public client_PreThink(id)
{
	//parachute.mdl animation information
	//0 - deploy - 84 frames
	//1 - idle - 39 frames
	//2 - detach - 29 frames
 
	if (!get_pcvar_num(pEnabled)) return
	if (!is_user_alive(id) || !has_parachute[id]) return
 
	new Float:fallspeed = get_pcvar_float(pFallSpeed) * -1.0
	new Float:frame
 
	new button = get_user_button(id)
	new oldbutton = get_user_oldbutton(id)
	new flags = get_entity_flags(id)
 
	if (para_ent[id] > 0 && (flags & FL_ONGROUND)) {
 
		if (get_pcvar_num(pDetach)) {
 
			if (get_user_gravity(id) == 0.1) set_user_gravity(id, 1.0)
 
			if (entity_get_int(para_ent[id],EV_INT_sequence) != 2) {
				entity_set_int(para_ent[id], EV_INT_sequence, 2)
				entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
				entity_set_float(para_ent[id], EV_FL_frame, 0.0)
				entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
				entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
				entity_set_float(para_ent[id], EV_FL_framerate, 0.0)
				return
			}
 
			frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 2.0
			entity_set_float(para_ent[id],EV_FL_fuser1,frame)
			entity_set_float(para_ent[id],EV_FL_frame,frame)
 
			if (frame > 254.0) {
				remove_entity(para_ent[id])
				para_ent[id] = 0
			}
		}
		else {
			remove_entity(para_ent[id])
			set_user_gravity(id, 1.0)
			para_ent[id] = 0
		}
 
		return
	}
 
	if (button & IN_USE) {
 
		new Float:velocity[3]
		entity_get_vector(id, EV_VEC_velocity, velocity)
 
		if (velocity[2] < 0.0) {
 
			if(para_ent[id] <= 0) {
				para_ent[id] = create_entity("info_target")
				if(para_ent[id] > 0) {
					entity_set_string(para_ent[id],EV_SZ_classname,"parachute")
					entity_set_edict(para_ent[id], EV_ENT_aiment, id)
					entity_set_edict(para_ent[id], EV_ENT_owner, id)
					entity_set_int(para_ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
					entity_set_model(para_ent[id], "models/parachute.mdl")
					entity_set_int(para_ent[id], EV_INT_sequence, 0)
					entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
					entity_set_float(para_ent[id], EV_FL_frame, 0.0)
					entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
				}
			}
 
			if (para_ent[id] > 0) {
 
				entity_set_int(id, EV_INT_sequence, 3)
				entity_set_int(id, EV_INT_gaitsequence, 1)
				entity_set_float(id, EV_FL_frame, 1.0)
				entity_set_float(id, EV_FL_framerate, 1.0)
				set_user_gravity(id, 0.1)
 
				velocity[2] = (velocity[2] + 40.0 < fallspeed) ? velocity[2] + 40.0 : fallspeed
				entity_set_vector(id, EV_VEC_velocity, velocity)
 
				if (entity_get_int(para_ent[id],EV_INT_sequence) == 0) {
 
					frame = entity_get_float(para_ent[id],EV_FL_fuser1) + 1.0
					entity_set_float(para_ent[id],EV_FL_fuser1,frame)
					entity_set_float(para_ent[id],EV_FL_frame,frame)
 
					if (frame > 100.0) {
						entity_set_float(para_ent[id], EV_FL_animtime, 0.0)
						entity_set_float(para_ent[id], EV_FL_framerate, 0.4)
						entity_set_int(para_ent[id], EV_INT_sequence, 1)
						entity_set_int(para_ent[id], EV_INT_gaitsequence, 1)
						entity_set_float(para_ent[id], EV_FL_frame, 0.0)
						entity_set_float(para_ent[id], EV_FL_fuser1, 0.0)
					}
				}
			}
		}
		else if (para_ent[id] > 0) {
			remove_entity(para_ent[id])
			set_user_gravity(id, 1.0)
			para_ent[id] = 0
		}
	}
	else if ((oldbutton & IN_USE) && para_ent[id] > 0 ) {
		remove_entity(para_ent[id])
		set_user_gravity(id, 1.0)
		para_ent[id] = 0
	}
}