Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
new const PLUGIN[] = "Magic Missile"
new const VERSION[] = "A"
new const AUTHOR[] = "SPiNX"
new g_HasJump[33]
new p_Enable
new p_Force
#define FLOAT_ANGLE -20.0
#define FLOAT_DELAY 0.1
new g_Shockwave
public plugin_precache()
{
g_Shockwave = precache_model("sprites/shockwave.spr");
// 1 = All Players
// 0 = Players can use Rocket Jump only if an admin gave them the power
p_Enable = register_cvar("amx_magic_missile","1");
p_Force = register_cvar("amx_magic_forceadd","500");
register_forward(FM_PlayerPreThink,"forward_PreThink");
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_give_magicmissile","CmdGive",ADMIN_BAN,"<target> <1/0> Enables/Disables magic missile for a player");
}
public client_putinserver(id)
g_HasJump[id] = 0
public forward_PreThink(id)
{
if(!is_user_alive(id))
return FMRES_HANDLED
if(g_HasJump[id] != 1 && get_pcvar_num(p_Enable) == 0)
return FMRES_HANDLED
static Clip,Ammo,UserAmmo[33]
if(get_user_weapon(id,Clip,Ammo) == HLW_CROSSBOW)
{
new Button = pev(id,pev_button),OldButton = pev(id,pev_oldbuttons);
if(Button & IN_ATTACK2 && !(OldButton & IN_ATTACK2))
UserAmmo[id] = Ammo
if(!(Button & IN_ATTACK2) && (OldButton & IN_ATTACK2))
{
switch(UserAmmo[id] - Ammo)
{
case 10..13:
DoJump(id,600);
case 5..9:
DoJump(id,500);
default:
DoJump(id,350);
}
}
}
return PLUGIN_HANDLED
}
DoJump(id,Power)
{
new Float:Vector[3]
pev(id,pev_angles,Vector);
if(Vector[0] > FLOAT_ANGLE)
return
pev(id,pev_origin,Vector);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord,Vector[0]);
engfunc(EngFunc_WriteCoord,Vector[1]);
engfunc(EngFunc_WriteCoord,Vector[2] + 16);
engfunc(EngFunc_WriteCoord,Vector[0]);
engfunc(EngFunc_WriteCoord,Vector[1]);
engfunc(EngFunc_WriteCoord,Vector[2] + 200);
write_short(g_Shockwave);
write_byte(0);
write_byte(0);
write_byte(2);
write_byte(16);
write_byte(0);
write_byte(255);
write_byte(255);
write_byte(255);
write_byte(200);
write_byte(0);
message_end();
if(pev(id,pev_flags) & FL_ONGROUND)
{
pev(id,pev_velocity,Vector);
Vector[2] += get_pcvar_num(p_Force) + Power
set_pev(id,pev_velocity,Vector);
set_pev(id,pev_health,pev(id,pev_health)+random_float(10.0,20.0))
}
}
public CmdGive(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED
if(get_pcvar_num(p_Enable) == 1)
{
client_print(id,print_console,"[AMXX] Magic Missile works on the crossbow for everybody now.");
return PLUGIN_HANDLED;
}
new Arg[33]
read_argv(1,Arg,32);
new Target = cmd_target(id,Arg,CMDTARGET_ALLOW_SELF);
if(!Target)
return PLUGIN_HANDLED
read_argv(2,Arg,32);
new plName[33]
get_user_name(id,plName,32);
if(str_to_num(Arg) == 1) {
client_print(id,print_console,"[AMXX] Magic Missiles enabled for: %s",plName);
g_HasJump[Target] = 1
} else {
client_print(id,print_console,"[AMXX] Magic Missiles are disabled for: %s",plName);
g_HasJump[Target] = 0
}
return PLUGIN_HANDLED
}