#include #include #include #include #include #define TASK_HOOK_THINK 865367 #define MAX_PLAYERS 32 new Float:g_vecHookOrigin[MAX_PLAYERS + 1][3]; new g_pSpriteRicho2, g_pSpriteLgtning; public plugin_init() { register_plugin("[JBE] Hook", "1.0", "Sanlerus"); register_clcmd("+hook", "ClCmd_HookOn"); register_clcmd("-hook", "ClCmd_HookOff"); } public plugin_precache() { engfunc(EngFunc_PrecacheSound, "jb_engine/hook.wav"); g_pSpriteLgtning = engfunc(EngFunc_PrecacheModel, "sprites/lgtning.spr"); g_pSpriteRicho2 = engfunc(EngFunc_PrecacheModel, "sprites/richo2.spr"); } public ClCmd_HookOn(id) { if(get_user_flags(id) & ADMIN_LEVEL_H) { if(task_exists(id+TASK_HOOK_THINK)) { return PLUGIN_HANDLED; } if(is_user_alive(id)) { new iOrigin[3]; get_user_origin(id, iOrigin, 3); g_vecHookOrigin[id][0] = float(iOrigin[0]); g_vecHookOrigin[id][1] = float(iOrigin[1]); g_vecHookOrigin[id][2] = float(iOrigin[2]); CREATE_SPRITE(g_vecHookOrigin[id], g_pSpriteRicho2, 10, 255); emit_sound(id, CHAN_STATIC, "jb_engine/hook.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM); jbe_hook_think(id+TASK_HOOK_THINK); set_task(0.1, "jbe_hook_think", id+TASK_HOOK_THINK, _, _, "b"); } } return PLUGIN_HANDLED; } public ClCmd_HookOff(id) { if(get_user_flags(id) & ADMIN_LEVEL_H) { if(task_exists(id+TASK_HOOK_THINK)) { remove_task(id+TASK_HOOK_THINK); emit_sound(id, CHAN_STATIC, "jb_engine/hook.wav", VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM); } } return PLUGIN_HANDLED; } public jbe_hook_think(pPlayer) { pPlayer -= TASK_HOOK_THINK; new Float:vecOrigin[3]; pev(pPlayer, pev_origin, vecOrigin); new Float:vecVelocity[3]; vecVelocity[0] = (g_vecHookOrigin[pPlayer][0] - vecOrigin[0]) * 3.0; vecVelocity[1] = (g_vecHookOrigin[pPlayer][1] - vecOrigin[1]) * 3.0; vecVelocity[2] = (g_vecHookOrigin[pPlayer][2] - vecOrigin[2]) * 3.0; new Float:flY = vecVelocity[0] * vecVelocity[0] + vecVelocity[1] * vecVelocity[1] + vecVelocity[2] * vecVelocity[2]; new Float:flX = (5 * 120.0) / floatsqroot(flY); vecVelocity[0] *= flX; vecVelocity[1] *= flX; vecVelocity[2] *= flX; set_pev(pPlayer, pev_velocity, vecVelocity); CREATE_BEAMENTPOINT(pPlayer, g_vecHookOrigin[pPlayer], g_pSpriteLgtning, 0, 1, 1, 60, 30, 255, 69, 0, 200, _); } stock CREATE_SPRITE(Float:vecOrigin[3], pSptite, iWidth, iAlpha) { engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); write_byte(TE_SPRITE); engfunc(EngFunc_WriteCoord, vecOrigin[0]); engfunc(EngFunc_WriteCoord, vecOrigin[1]); engfunc(EngFunc_WriteCoord, vecOrigin[2]); write_short(pSptite); write_byte(iWidth); write_byte(iAlpha); message_end(); } stock CREATE_BEAMENTPOINT(pEntity, Float:vecOrigin[3], pSprite, iStartFrame = 0, iFrameRate = 0, iLife, iWidth, iAmplitude = 0, iRed, iGreen, iBlue, iBrightness, iScrollSpeed = 0) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BEAMENTPOINT); write_short(pEntity); engfunc(EngFunc_WriteCoord, vecOrigin[0]); engfunc(EngFunc_WriteCoord, vecOrigin[1]); engfunc(EngFunc_WriteCoord, vecOrigin[2]); write_short(pSprite); write_byte(iStartFrame); write_byte(iFrameRate); // 0.1's write_byte(iLife); // 0.1's write_byte(iWidth); write_byte(iAmplitude); // 0.01's write_byte(iRed); write_byte(iGreen); write_byte(iBlue); write_byte(iBrightness); write_byte(iScrollSpeed); // 0.1's message_end(); }