| Mario AR. |
02-14-2016 23:42 |
Re: Ball plugin
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; }
This may work ONLY IF the ball always stays in the same Z position (means no ladders/slopes).
|