PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <xs>
new const Float:CREATE_DIST = 200.0;
new Shayba
new TrailSprite
new Float:g_vOrigin[3]
new const szEntity[ ][ ] =
{
"worldspawn", "func_wall", "func_door", "func_door_rotating",
"func_wall_toggle", "func_breakable", "func_pushable", "func_train",
"func_illusionary", "func_button", "func_rot_button", "func_rotating"
}
public plugin_init()
{
register_plugin("Jail Hockey" , "1.0" , "MapCreator")
register_think("JAILSHAYBA", "FwdThinkShayba")
register_touch("JAILSHAYBA", "player", "FwdTouchPlayer")
for(new i; i < sizeof szEntity; i++)
register_touch("JAILSHAYBA", szEntity[i], "FwdTouchWorld")
register_clcmd("say /hm", "hockey_menu")
}
public plugin_precache()
{
precache_model("models/jail/ball_new.mdl")
precache_sound("jail/bounce.wav")
TrailSprite = precache_model("sprites/laserbeam.spr")
}
public hockey_menu(id)
{
new menu
menu = menu_create("\yМеню Хоккей:\r", "hockey_menu_choice")
menu_additem(menu, "Установить шайбу", "1", 0)
menu_additem(menu, "Удалить шайбу", "1", 0)
menu_additem(menu, "Загрузить шайбу", "1", 0)
menu_setprop(menu, MPROP_NEXTNAME, "Далее")
menu_setprop(menu, MPROP_BACKNAME, "Назад")
menu_setprop(menu, MPROP_EXITNAME, "Выход")
menu_display(id, menu)
return PLUGIN_HANDLED
}
public hockey_menu_choice(id, menu, item)
{
if(item == MENU_EXIT)
return PLUGIN_HANDLED
new dst[32], data[6], access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
menu_destroy(menu)
get_user_name(id, dst, charsmax(dst))
new key = str_to_num(data)
switch(key)
{
case 1:
{
if(pev_valid(Shayba))
return PLUGIN_CONTINUE
CreateShayba(id)
}
case 2:
{
new entity
while((entity = find_ent_by_class(entity, "JAILSHAYBA")) > 0)
remove_entity(entity)
client_print(id, print_chat, "Successfully removed the shayba!")
}
case 3:
{
if(is_valid_ent(Shayba))
{
entity_set_vector(Shayba, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
entity_set_origin(Shayba, g_vOrigin)
entity_set_int(Shayba, EV_INT_movetype, MOVETYPE_BOUNCE)
entity_set_size(Shayba, Float:{-15.0, -15.0, 0.0}, Float:{15.0, 15.0, 12.0})
entity_set_int(Shayba, EV_INT_iuser1, 0)
client_print(id, print_chat, "Successfully loaded shayba")
}
}
}
return PLUGIN_HANDLED
}
public FwdThinkShayba(iEntity)
{
if(!is_valid_ent(Shayba))
return PLUGIN_HANDLED
entity_set_float(iEntity, EV_FL_nextthink, get_gametime() + 0.01)
new iOwner
iOwner = pev(iEntity, pev_iuser1)
if(iOwner > 0)
{
if(!is_user_alive(iOwner))
entity_set_int(iEntity, EV_INT_iuser1, 0)
else
{
new ownerButton = pev(iOwner,pev_button)
if(ownerButton & IN_USE)
return KickShayba(iOwner)
else if(ownerButton & IN_ATTACK2)
return KickShayba(iOwner)
else if(ownerButton & IN_ATTACK)
return KickShayba(iOwner)
new Float:fVelocity[3]
pev(iOwner, pev_velocity, fVelocity)
if(vector_length(fVelocity) > 20.0)
{
new Float:fAngles[3]
vector_to_angle(fVelocity, fAngles)
fAngles[0] = 0.0
set_pev(iEntity, pev_angles, fAngles)
set_pev(iEntity, pev_sequence, 1)
}
else set_pev(iEntity, pev_sequence, 0)
new Float:vAngles[3], Float:vReturn[3], Float:vOwnerOrigin[3]
new const Float:vVelocity[3] = {1.0, 1.0, 0.0}
entity_get_vector(iOwner, EV_VEC_origin, vOwnerOrigin)
entity_get_vector(iOwner, EV_VEC_v_angle, vAngles)
vReturn[0] = (floatcos(vAngles[1], degrees) * 55.0) + vOwnerOrigin[0]
vReturn[1] = (floatsin(vAngles[1], degrees) * 55.0) + vOwnerOrigin[1]
vReturn[2] = 0.0;
/*
vReturn[2] = vOwnerOrigin[2]
vReturn[2] -= (entity_get_int(iOwner, EV_INT_flags) & FL_DUCKING) ? 10 : 30 */
entity_set_vector(iEntity, EV_VEC_velocity, vVelocity)
entity_set_origin(iEntity, vReturn)
}
}
else
{
new Float:fVelocity[3]
pev(iEntity, pev_velocity, fVelocity)
if(fVelocity[2] > 0.0)
fVelocity[2] = 0.0
if(vector_length(fVelocity) > 20.0)
{
new Float:fAngles[3]
vector_to_angle(fVelocity, fAngles)
fAngles[0] = 0.0
set_pev(iEntity, pev_angles, fAngles)
set_pev(iEntity, pev_sequence, 1)
}
else set_pev(iEntity, pev_sequence, 0)
}
return PLUGIN_CONTINUE
}
public UpdateShayba(id)
{
if(!id || get_user_flags(id) & ADMIN_KICK)
{
if(is_valid_ent(Shayba))
{
entity_set_vector(Shayba, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
entity_set_origin(Shayba, g_vOrigin)
entity_set_int(Shayba, EV_INT_movetype, MOVETYPE_BOUNCE)
entity_set_size(Shayba, Float:{-4.0, -4.0, -4.0}, Float:{4.0, 4.0, 4.0})
entity_set_int(Shayba, EV_INT_iuser1, 0)
}
}
return PLUGIN_HANDLED
}
public KickShayba(id)
{
static Float:vOrigin[3]
entity_get_vector(Shayba, EV_VEC_origin, vOrigin)
if(PointContents(vOrigin) != CONTENTS_EMPTY)
return PLUGIN_HANDLED
new Float:vVelocity[3]
velocity_by_aim(id, 400, vVelocity)
entity_set_size(Shayba, Float:{-4.0, -4.0, -4.0}, Float:{4.0, 4.0, 4.0})
entity_set_int(Shayba, EV_INT_iuser1, 0)
vVelocity[2] = 0.0
entity_set_vector(Shayba, EV_VEC_velocity, vVelocity)
return PLUGIN_CONTINUE
}
public FwdTouchPlayer(Shayba, id)
{
if(is_user_bot(id))
return PLUGIN_CONTINUE
static owner
owner = pev(Shayba, pev_iuser1)
if(owner == 0)
{
entity_set_int(Shayba, EV_INT_iuser1, id)
set_user_maxspeed(id, 200.0)
}
return PLUGIN_CONTINUE
}
public FwdTouchWorld(Shayba, World)
{
static Float:velocity[3]
entity_get_vector(Shayba, EV_VEC_velocity, velocity)
if(floatround(vector_length(velocity)) > 10)
{
velocity[0] *= 0.85
velocity[1] *= 0.85
velocity[2] *= 0.85
entity_set_vector(Shayba, EV_VEC_velocity, velocity)
emit_sound(Shayba, CHAN_ITEM, "jail/bounce.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
return PLUGIN_CONTINUE
}
public CreateShayba(id)
{
new Float:vOrigin[3] = {0.0, 0.0, 0.0}
Shayba = create_entity("info_target")
if(is_valid_ent(Shayba))
{
entity_set_string(Shayba, EV_SZ_classname, "JAILSHAYBA")
entity_set_int(Shayba, EV_INT_solid, SOLID_TRIGGER)
entity_set_int(Shayba, EV_INT_movetype, MOVETYPE_BOUNCE)
entity_set_size(Shayba, Float:{-4.0, -4.0, -4.0}, Float:{4.0, 4.0, 4.0})
entity_set_float(Shayba, EV_FL_framerate, 0.0)
entity_set_int(Shayba, EV_INT_sequence, 0)
entity_set_float(Shayba, EV_FL_nextthink, get_gametime() + 0.05)
entity_set_model(Shayba, "models/jail/ball_new.mdl")
client_print(id, print_chat, "Successfully created shayba!")
if(id > 0)
{
new Float:vOriginp[3];
entity_get_vector(id, EV_VEC_origin, vOrigin);
entity_get_vector(id, EV_VEC_angles, vOriginp);
angle_vector(vOriginp, ANGLEVECTOR_FORWARD, vOriginp);
vOriginp[2] = 0.0;
xs_vec_normalize(vOriginp, vOriginp);
xs_vec_mul_scalar(vOriginp, CREATE_DIST, vOriginp);
vOriginp[2] = entity_get_int(id, EV_INT_flags) & FL_DUCKING ? -18.0 : -36.0;
xs_vec_add(vOriginp, vOrigin, vOrigin);
entity_set_origin(Shayba, vOrigin)
}
else
entity_set_origin(Shayba, vOrigin)
g_vOrigin = vOrigin
return Shayba
}
return -1;
}