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 1jlirnkk5dtwg dodana przez MariuszeŁ, 28.09.2012 12:55
Typ:



parachute
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.
/*******************************************************************************
 
  Parachute
 
  Version: 1.3
  Author: KRoTaL/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 forg 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 buy_parachute   -   buys a parachute (CStrike ONLY)
	saw sell_parachute  -   sells your parachute (75% of the purchase price)
	say give_parachute <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 "100"		- 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
 
#define PARACHUTE_LEVEL ADMIN_LEVEL_A
 
new Float: user_grav[33]
 
public plugin_init()
{
	register_plugin("Parachute", "1.3", "KRoT@L/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", PARACHUTE_LEVEL, "<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)
{
	user_grav[id]=1.0
	parachute_reset(id)
}
 
public client_disconnect(id)
{
	user_grav[id]=1.0
	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, user_grav[id])
 
	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, user_grav[id])
		para_ent[id] = 0
	}
 
	if (!gCStrike || access(id,PARACHUTE_LEVEL) || 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, "buy_parachute")) {
			buy_parachute(id)
			return PLUGIN_HANDLED
		}
		else if (equali(args, "sell_parachute")) {
			sell_parachute(id)
			return PLUGIN_HANDLED
		}
		else if (containi(args, "give_parachute") == 0) {
			give_parachute(id,args[15])
			return PLUGIN_HANDLED
		}
	}
 
	if (containi(args, "parachute") != -1) {
		if (gCStrike) client_print(id, print_chat, "[AMXX] Parachute commands: buy_parachute, sell_parachute, give_parachute")
		client_print(id, print_chat, "[AMXX] To use your parachute press and hold your +use button while falling")
	}
 
	return PLUGIN_CONTINUE
}
 
public buy_parachute(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] Parachute plugin is disabled")
		return PLUGIN_HANDLED
	}
 
	if (has_parachute[id]) {
		client_print(id, print_chat, "[AMXX] You already have a parachute")
		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] You don't have enough moneyfor a parachute - Costs $%i", cost)
		return PLUGIN_HANDLED
	}
 
	cs_set_user_money(id, money - cost)
	client_print(id, print_chat, "[AMXX] You have bought a parachute. To use it, press +use while falling.")
	has_parachute[id] = true
 
	return PLUGIN_HANDLED
}
 
public sell_parachute(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] Parachute plugin is disabled")
		return PLUGIN_HANDLED
	}
 
	if (!has_parachute[id]) {
		client_print(id, print_chat, "[AMXX] You don't have a parachute to sell")
		return PLUGIN_HANDLED
	}
 
	if (access(id,PARACHUTE_LEVEL)) {
		client_print(id, print_chat, "[AMXX] You cannot sell your free admin parachute")
		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 give_parachute(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] Parachute plugin is disabled")
		return PLUGIN_HANDLED
	}
 
	if (!has_parachute[id]) {
		client_print(id, print_chat, "[AMXX] You don't have a parachute to give")
		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 already has a parachute.", pl_name)
		return PLUGIN_HANDLED
	}
 
	parachute_reset(id)
	has_parachute[player] = true
 
	client_print(id, print_chat, "[AMXX] You have given your parachute to %s.", pl_name)
	client_print(player, print_chat, "[AMXX] %s has given thier parachute to you.", 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] Parachute plugin is disabled")
		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
		}
 
 
		console_print(id,"[AMXX] You gave a parachute to ^"%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)
 
 
		console_print(id,"[AMXX] You gave a parachute to ^"%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) != user_grav[id]) set_user_gravity(id, user_grav[id])
 
			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, user_grav[id])
			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 && get_user_gravity(id)!=0.1) {
 
				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)
				user_grav[id]=get_user_gravity(id)
				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, user_grav[id])
			para_ent[id] = 0
		}
	}
	else if ((oldbutton & IN_USE) && para_ent[id] > 0 ) {
		remove_entity(para_ent[id])
		set_user_gravity(id, user_grav[id])
		para_ent[id] = 0
	}
}
 

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