//------------------------------------------------------------------------------
#include <amxmodx>
#include <engine>
#include <fakemeta>
//------------------------------------------------------------------------------
#include <zp50_ammopacks>
#include <zp50_class_nemesis>
#include <zp50_class_survivor>
#include <zp50_colorchat>
//------------------------------------------------------------------------------
#define PLUGIN "Zombie Plague Parachute"
#define VERSION "1.3"
#define AUTHOR "H.RED.ZONE"
//------------------------------------------------------------------------------
new bool:has_parachute[33], para_ent[33], pDetach, pFallSpeed, pEnabled, pCost
//------------------------------------------------------------------------------
new const MODEL_H[] = "models/RZ/parachute.mdl" //Models Human
new const MODEL_Z[] = "models/RZ/parachute.mdl" //Models Zombie
new const MODEL_S[] = "models/RZ/parachute.mdl" //Models Survivor
new const MODEL_N[] = "models/RZ/parachute.mdl" //Models Nemesis
//------------------------------------------------------------------------------
public plugin_init() {
//------------------------------------------------------------------------------
register_plugin(PLUGIN, VERSION, AUTHOR)
//------------------------------------------------------------------------------
pEnabled = register_cvar("sv_parachute", "1" ) //Enable parachute
pFallSpeed = register_cvar("parachute_fallspeed", "50") //Fall speed
pDetach = register_cvar("parachute_detach", "1") //Don't change
pCost = register_cvar("parachute_cost", "0") //Cost If set to 0 parachute is free.
//------------------------------------------------------------------------------
register_clcmd("say /pb", "buy_parachute")
register_clcmd("say /parachute", "buy_parachute")
register_clcmd("say_team /pb", "buy_parachute")
register_clcmd("say_team /parachute", "buy_parachute")
//------------------------------------------------------------------------------
register_event("ResetHUD", "newSpawn", "be")
register_event("DeathMsg", "death_event", "a")
//------------------------------------------------------------------------------
register_forward(FM_CmdStart, "fw_Start")
//------------------------------------------------------------------------------
}
//------------------------------------------------------------------------------
public plugin_precache() {
precache_model(MODEL_Z)
precache_model(MODEL_N)
precache_model(MODEL_H)
precache_model(MODEL_S)
}
//------------------------------------------------------------------------------
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])
}
}
}
//------------------------------------------------------------------------------
public newSpawn(id) {
if(para_ent[id] > 0) {
remove_entity(para_ent[id])
para_ent[id] = 0
}
if (get_pcvar_num(pCost) <= 0) {
has_parachute[id] = true
}
}
//------------------------------------------------------------------------------
public buy_parachute(id) {
if (!is_user_connected(id)) return PLUGIN_CONTINUE
if (!get_pcvar_num(pEnabled)) {
return PLUGIN_HANDLED
}
if (has_parachute[id]) {
zp_colored_print(id, "Neked nem kell ^x04 ejtoernyot ^x01 venni.")
return PLUGIN_HANDLED
}
new money = zp_ammopacks_get(id)
new cost = get_pcvar_num(pCost)
if (money < cost) {
return PLUGIN_HANDLED
}
zp_colored_print(id, "Neked van^x04 ejtoernyod.")
zp_ammopacks_set(id, money - cost)
has_parachute[id] = true
return PLUGIN_HANDLED
}
//------------------------------------------------------------------------------
public fw_Start(id)
{
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 (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])
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_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 (zp_core_is_zombie(id))
{
entity_set_model(para_ent[id], MODEL_Z)
}
if (!zp_core_is_zombie(id))
{
entity_set_model(para_ent[id], MODEL_H)
}
if (zp_class_survivor_get(id))
{
entity_set_model(para_ent[id], MODEL_S)
}
if (zp_class_nemesis_get(id))
{
entity_set_model(para_ent[id], MODEL_N)
}
}
}
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)
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])
para_ent[id] = 0
}
}
else if ((oldbutton & IN_USE) && para_ent[id] > 0 ) {
remove_entity(para_ent[id])
para_ent[id] = 0
}
}
//------------------------------------------------------------------------------
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/