- Код: Выделить всё
#include <amxmodx>
#include <fakemeta_util>
#include <zombieplague>
#define PLUGIN "[ZP] Extra Item: Energy Suit"
#define VERSION "1.3"
#define AUTHOR "Re.Act!ve"
#define TRAIL_LIFE 2
#define TRAIL_WIDTH 10
#define TRAIL_RED 50
#define TRAIL_GREEN 200
#define TRAIL_BLUE 0
#define TRAIL_BRIGTHNESS 180
new SayText
new const g_tool_name[] = { "ЭнергоКостюм" } // Item name Energy Suit
new const g_tool_cost = 0 ; // Item cost Multimode Tool
new g_tool_packs, g_tool_p_invis, g_tool_p_speed, g_tool_speed, g_tool_p_god, g_tool_max_packs, g_tool_time
new g_mtool_item, g_tool_glow_god, gTrail, g_tool_timelimit, g_tool_regen, g_tool_regen_time
new g_Number[32], Energy_Packs[32]
new Float:g_time_reload[32]
new bool:g_Item[32], g_ability[32], g_ability_esc[32], g_times[32], delete[32], g_speed[32]
new buy_sound[] = { "items/gunpickup2.wav" }
new deactivated[] = { "items/suitchargeno1.wav" }
new invisible_on[] = { "fvox/activated.wav" }
new invisible_off[] = { "fvox/deactivated.wav" }
new speed_on[] = { "fvox/activated.wav" }
new speed_off[] = { "fvox/deactivated.wav" }
new godmode_on[] = { "fvox/activated.wav" }
new godmode_off[] = { "fvox/deactivated.wav" }
public plugin_init()
{
g_tool_packs = register_cvar("enzp_extra_packs", "20") // Number of energy packs to extra Item Energy Suit
g_tool_regen = register_cvar("enzp_regen_energy", "1") // Regeneration Energy packs? < 1 | 0 >
g_tool_regen_time = register_cvar("enzp_regen_time", "1.0") // (If energy_regen = 1) Time Regeneration energy.
g_tool_time = register_cvar("enzp_energy_time", "0.5") // Everyone Х will get seconds energy packs
g_tool_p_invis = register_cvar("enzp_invisible_packs", "1") // Number Energy packs, has used on energy_time (Invisible)
g_tool_p_speed = register_cvar("enzp_speed_packs", "1") // Number Energy packs, has used on energy_time (Speed)
g_tool_speed = register_cvar("enzp_speed_added", "1000.0") // Speed for Humans
g_tool_p_god = register_cvar("enzp_godmone_packs", "2") // Number Energy packs, has used on energy_time (GODMODE)
g_tool_glow_god = register_cvar("enzp_godmode_glow", "1") // Glow On, or off? < 1 | 0 >
g_tool_max_packs = register_cvar("enzp_max_packs", "20") // Number Max Energy Packs?
g_tool_timelimit = register_cvar("enzp_timelimit", "2.0") // Time after which it will be possible to use ability again
// Register Items Multimode & Energy Packs
g_mtool_item = zp_register_extra_item(g_tool_name, g_tool_cost, ZP_TEAM_HUMAN)
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("DeathMsg", "Death_attacker", "a")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_clcmd("mtool", "Multimode_Begin")
gTrail = engfunc(EngFunc_PrecacheModel,"sprites/horror_red.spr")
SayText = get_user_msgid("SayText")
register_dictionary("zp_extra_energy_suit.txt")
}
public plugin_precache()
{
precache_sound( buy_sound )
precache_sound( deactivated )
precache_sound( speed_on )
precache_sound( speed_off )
precache_sound( invisible_on )
precache_sound( invisible_off )
precache_sound( godmode_on )
precache_sound( godmode_off )
}
public zp_extra_item_selected(id, item)
{
if( (item == g_mtool_item) && !zp_get_user_zombie(id) && !g_Item[id])
{
g_ability[id] = true; g_times[id] = true; g_Item[id] = true; delete[id] = true;
g_Number[id] = 0;
client_cmd(id, "bind F1 mtool");
client_print(id, print_center, "[Choosen Mode: Invisible]")
emit_sound(id, CHAN_STREAM, buy_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
ChatColor(id, "!g[ZP] !y%L", LANG_PLAYER, "EXTRA_MTOOL")
Energy_Packs[id] = get_pcvar_num(g_tool_packs);
if(get_pcvar_num(g_tool_regen) == 1)
set_task(1.0, "Regeneration_Energy", id)
set_task(0.1, "Show_Hud", id, _, _, "b")
}
else
{
if( (item == g_mtool_item) && g_Item[id] )
{
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + g_tool_cost)
ChatColor(id, "!g[ZP]!y %L", LANG_PLAYER, "EXTRA_ON")
}
}
}
public Regeneration_Energy(id)
{
if(g_ability[id] && !zp_get_user_zombie(id) && is_user_alive(id))
{
if(Energy_Packs[id] < get_pcvar_num(g_tool_max_packs))
{
Energy_Packs[id] = Energy_Packs[id] + 1;
set_task(get_pcvar_float(g_tool_regen_time), "Regeneration_Energy", id)
}
else
set_task(1.0, "Regeneration_Energy", id)
}
else
{
if(zp_get_user_zombie(id))
remove_task(id)
else
set_task(1.0, "Regeneration_Energy", id)
}
}
public zp_user_infected_post(id, infector)
{
fm_set_user_godmode(id, 0)
g_speed[id] = false;
g_Item[id] = false;
g_times[id] = false;
delete[id] = false;
}
public Death_attacker()
{
new id = read_data(2)
g_speed[id] = false;
g_Item[id] = false;
g_times[id] = false;
delete[id] = false;
}
public Show_Hud(id)
{
if( is_user_alive(id) && !zp_get_user_zombie(id) && delete[id])
{
if(!g_ability[id])
{
set_hudmessage(200, 60, 0, 0.47, 0.85, 0, 1.0, get_pcvar_float(g_tool_time), 0.0, 0.0, -1)
show_hudmessage(id,"%L", LANG_PLAYER, "MTOOL_STATUS", Energy_Packs[id])
}
else
{
set_hudmessage(0, 200, 0, 0.47, 0.85, 0, 1.0, get_pcvar_float(g_tool_time), 0.0, 0.0, -1)
show_hudmessage(id,"%L", LANG_PLAYER, "MTOOL_STATUS", Energy_Packs[id])
}
}
else
remove_task(id);
}
public fw_PlayerPreThink(id)
{
if (!is_user_alive(id) && zp_get_user_zombie(id))
return;
if(g_Item[id] && g_speed[id] )
fm_set_user_maxspeed( id , fm_get_user_maxspeed(id) + get_pcvar_float(g_tool_speed))
else
fm_set_user_maxspeed( id , fm_get_user_maxspeed(id) )
if(Choosen_Mode(id) && g_Item[id] && g_ability[id])
{
g_time_reload[id] = get_gametime();
g_Number[id] = g_Number[id] + 1;
switch(g_Number[id])
{
case 0:
client_print(id, print_center, "[Choosen Mode: Invisible]")
case 1:
client_print(id, print_center, "[Choosen Mode: Extra Speed]")
case 2:
client_print(id, print_center, "[Choosen Mode: God Mode]")
case 3:
{
client_print(id, print_center, "[Choosen Mode: Invisible]")
g_Number[id] = 0;
}
}
}
}
Choosen_Mode(id)
{
if (zp_get_user_zombie(id) && zp_get_user_nemesis(id) && !g_Item[id] && g_ability[id] )
return false
static buttons
buttons = pev(id, pev_button)
if (!(buttons & IN_USE) && !is_user_bot(id))
return false
static Float:reload
reload = 0.3;
if ( (get_gametime() - g_time_reload[id]) < reload)
return false
return true
}
public Multimode_Begin(id)
{
if(g_Item[id] && !zp_get_user_zombie(id) && is_user_alive(id) && (Energy_Packs[id] >= 1) && g_times[id])
{
switch( g_Number[id] )
{
case 0:
{
if(g_ability[id])
{
g_ability_esc[id] = false;
emit_sound(id, CHAN_STREAM, invisible_on, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "Invisible", id)
}
else
{
g_ability_esc[id] = true;
emit_sound(id, CHAN_STREAM, invisible_off, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "Invisible", id)
}
}
case 1:
{
if(g_ability[id])
{
g_ability_esc[id] = false;
emit_sound(id, CHAN_STREAM, speed_on, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "Speed_Form", id)
}
else
{
g_ability_esc[id] = true;
emit_sound(id, CHAN_STREAM, speed_off, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "Speed_Form", id)
}
}
case 2:
{
if(g_ability[id])
{
g_ability_esc[id] = false;
emit_sound(id, CHAN_STREAM, godmode_on, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "GodMode", id)
}
else
{
g_ability_esc[id] = true;
emit_sound(id, CHAN_STREAM, godmode_off, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(0.1, "GodMode", id)
}
}
}
}
else
{
if( (Energy_Packs[id] < 1) && g_Item[id])
ChatColor(id, "!g[ZP]!y %L", LANG_PLAYER, "NO_ENERGY")
g_speed[id] = false;
}
}
public Reset_Ability(id)
g_times[id] = true;
public Invisible(id)
{
g_ability[id] = false;
if(Energy_Packs[id] > 0 && !g_ability_esc[id])
{
fm_set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
Energy_Packs[id] = Energy_Packs[id] - get_pcvar_num(g_tool_p_invis);
set_task(get_pcvar_float(g_tool_time), "Invisible", id);
}
else
{
if(!g_ability_esc[id])
{
g_ability[id] = true;
ChatColor(id, "!g[ZP]!y %L", LANG_PLAYER, "ENERGY_END")
Energy_Packs[id] = 0;
emit_sound(id, CHAN_STREAM, deactivated, 1.0, ATTN_NORM, 0, PITCH_NORM)
fm_set_rendering( id, 0, 0, 0, 0, kRenderNormal, 25 )
}
else
{
g_ability[id] = true;
fm_set_rendering( id, 0, 0, 0, 0, kRenderNormal, 25 )
}
g_times[id] = false;
set_task(get_pcvar_float(g_tool_timelimit), "Reset_Ability", id)
}
}
public Speed_Form(id)
{
g_ability[id] = false;
if(Energy_Packs[id] > 0 && !g_ability_esc[id])
{
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (TE_BEAMFOLLOW)
write_short (id)
write_short (gTrail)
write_byte (TRAIL_LIFE)
write_byte (TRAIL_WIDTH)
write_byte (TRAIL_RED)
write_byte (TRAIL_GREEN)
write_byte (TRAIL_BLUE)
write_byte (TRAIL_BRIGTHNESS)
message_end()
g_speed[id] = true;
Energy_Packs[id] = Energy_Packs[id] - get_pcvar_num(g_tool_p_speed);
set_task(get_pcvar_float(g_tool_time), "Speed_Form", id);
}
else
{
if(!g_ability_esc[id])
{
emit_sound(id, CHAN_STREAM, deactivated, 1.0, ATTN_NORM, 0, PITCH_NORM)
ChatColor(id, "!g[ZP]!y %L", LANG_PLAYER, "ENERGY_END")
g_speed[id] = false;
Energy_Packs[id] = 0;
g_ability[id] = true;
}
else
g_ability[id] = true;
g_speed[id] = false;
g_times[id] = false;
set_task(get_pcvar_float(g_tool_timelimit), "Reset_Ability", id)
}
}
public GodMode(id)
{
g_ability[id] = false;
if(Energy_Packs[id] > 0 && !g_ability_esc[id])
{
fm_set_user_godmode(id, 1)
if(get_pcvar_num(g_tool_glow_god) == 1)
fm_set_rendering(id, kRenderFxGlowShell, 200, 200, 0, kRenderNormal, 12)
Energy_Packs[id] = Energy_Packs[id] - get_pcvar_num(g_tool_p_god);
set_task(get_pcvar_float(g_tool_time), "GodMode", id);
}
else
{
if(!g_ability_esc[id])
{
emit_sound(id, CHAN_STREAM, deactivated, 1.0, ATTN_NORM, 0, PITCH_NORM)
ChatColor(id, "!g[ZP]!y %L", LANG_PLAYER, "ENERGY_END")
Energy_Packs[id] = 0;
g_ability[id] = true;
fm_set_rendering( id, 0, 0, 0, 0, kRenderNormal, 25 )
}
else
{
g_ability[id] = true;
fm_set_rendering( id, 0, 0, 0, 0, kRenderNormal, 25 )
}
fm_set_user_godmode(id, 0)
g_times[id] = false;
set_task(get_pcvar_float(g_tool_timelimit), "Reset_Ability", id)
}
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!t", "^3") // Team Color
replace_all(msg, 190, "!t2", "^0") // Team2 Color
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}