Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  
Sign in to follow this  
sabath

[CS 1.6] Parachute Plugin - Problém

Recommended Posts

Dobrý den vážení uživatele fóra, vím, že toto je hodně mimo téma, ale nevím kde jinde se zeptat.

 

Jedná se o to, že abych zpříjemnil chvíle na CS 1.6 Serveru stáhl sem si Parachute Plugin. Vše jde jak má, ale ve hře musí člověk psát buy_parachute a navíc to stojí peníze. Proto chci požádat zkušené uživatele tohoto fóra, aby mi s tímto problémem pomohli.

 

Kód je zde:

 

/*******************************************************************************

 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 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 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 "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

#define PARACHUTE_LEVEL ADMIN_LEVEL_A

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)
{
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,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
	}

	switch(get_cvar_num("amx_show_activity"))	{
		case 2:	client_print(0,print_chat,"ADMIN %s: gave a parachute to ^"%s^" players",name,arg[1])
		case 1:	client_print(0,print_chat,"ADMIN: gave a parachute to ^"%s^" players",arg[1])
	}

	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)

	switch(get_cvar_num("amx_show_activity")) {
		case 2:	client_print(0,print_chat,"ADMIN %s: gave a parachute to ^"%s^"",name,name2)
		case 1:	client_print(0,print_chat,"ADMIN: gave a parachute to ^"%s^"",name2)
	}

	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) == 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
}
}

 

 

Děkuji mnohokrát za jakoukoliv pomoc.

Edited by sabath

Share this post


Link to post
Share on other sites

Ak by si chcel aby si to hráči nemuseli kupovať no tak by si musel zmazať funkciu commandu ale potom by si si musel doprogramovať napríklad keď stlačia E tak sa im to zapne.

Takže myslím že toto stačí zmazať a potom ešte niečo ku tomu a stačí si doprogramovať:

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
}

Share this post


Link to post
Share on other sites

Ak by si chcel aby si to hráči nemuseli kupovať no tak by si musel zmazať funkciu commandu ale potom by si si musel doprogramovať napríklad keď stlačia E tak sa im to zapne.

Takže myslím že toto stačí zmazať a potom ešte niečo ku tomu a stačí si doprogramovať:

 

Zbytečně složitý, správná odpověď už tu zazněla. Stačí si nastavit cenu padáku na nulu, protože na reset hudu máš funkci:

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,PARACHUTE_LEVEL) || get_pcvar_num(pCost) <= 0) { // <-- poslední podmínka
               has_parachute[id] = true
               //set_view(id, CAMERA_3RDPERSON)
       }
}

A padák ti to nastaví automaticky při nulové ceně.

Share this post


Link to post
Share on other sites

celej amxmodx

je to funkce if (money < cost) {

client_print(id, print_chat, "[AMXX] You don't have enough moneyfor a parachute - Costs $%i", cost)

return PLUGIN_HANDLED

parachute_free 0 / 1 je prikaz tusim

 

#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

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)
{
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,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
	}

	switch(get_cvar_num("amx_show_activity"))	{
		case 2:	client_print(0,print_chat,"ADMIN %s: gave a parachute to ^"%s^" players",name,arg[1])
		case 1:	client_print(0,print_chat,"ADMIN: gave a parachute to ^"%s^" players",arg[1])
	}

	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)

	switch(get_cvar_num("amx_show_activity")) {
		case 2:	client_print(0,print_chat,"ADMIN %s: gave a parachute to ^"%s^"",name,name2)
		case 1:	client_print(0,print_chat,"ADMIN: gave a parachute to ^"%s^"",name2)
	}

	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) == 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
}
}

 

Edited by STONERSVK

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×