Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <amxmisc>
- #include <cstrike>
- #include <fakemeta>
- #include <Hamsandwich>
- #include <knife_hook>
- #pragma tabsize 0
- #pragma compress 1
- #define PLUGIN "Hook Menu Spec"
- #define VERSION "1.0"
- #define AUTHOR "raizo"
- #define RANDOM_NUM random_num(0,255)
- #define RED 255
- #define GREEN 99
- #define BLUE 71
- enum color {normal = 1, green, team}
- enum {HOOK_OFF, HOOK_RELEASE, HOOK_ON}
- new gAllowedHook[33]
- new g_bIsHooked[33]
- new g_iHookOrigin[33][3]
- new g_iMaxPlayers
- new his_hook_all[33]
- new g_SpriteBeam
- new g_SpriteLaser
- new g_SpriteBall
- new g_pSpriteTrailHook;
- new const g_szSprite[] = "sprites/knife/1.spr";
- new const SPRITELIST[][] =
- {
- "sprites/knife/2.spr",
- "sprites/knife/3.spr",
- "sprites/knife/4.spr",
- "sprites/knife/5.spr",
- "sprites/knife/6.spr"
- }
- new g_pSprites[sizeof SPRITELIST];
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- register_forward(FM_Think, "fw_ThinkEnt")
- register_clcmd("say /hook", "menuHook");
- register_clcmd("showmenu", "menuHook");
- register_clcmd("+hook", "HookOn")
- register_clcmd("-hook", "HookOff")
- new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target"))
- set_pev(iEnt, pev_classname, "hook_think")
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
- RegisterHam(Ham_Spawn, "player", "fw_player_respawn", 1)
- g_iMaxPlayers = get_maxplayers()
- }
- public fw_player_respawn(id)
- {
- if(!is_user_alive(id) || !is_user_connected(id))
- return PLUGIN_HANDLED
- if(get_user_flags(id) & ADMIN_KICK)
- gAllowedHook[id] = true
- return PLUGIN_HANDLED
- }
- public menuHook(id)
- {
- new flags = get_user_flags(id)
- if(!(flags & ADMIN_RCON))
- {
- client_print(id,print_chat,"You have no access to this command")
- return PLUGIN_HANDLED
- }
- new Menu = menu_create("\r[\yHook\r] \w Menu \y- \rby raizo^n", "menuHookHandler");
- new szNum[3],szName[32],players[32],buffer[64],iNum
- //formatex(buffer,charsmax(buffer), "\yGive Hook All");
- formatex(buffer,charsmax(buffer), "Hook To All - [%s\w]", his_hook_all[id]?"\yON":"\rOFF");
- menu_additem(Menu, buffer,"rf_c", 0);
- menu_addblank(Menu,0)
- get_players(players, iNum ,"ch")
- for (new i=0; i < iNum; i++)
- {
- new p = players[i];
- get_user_name(p, szName, charsmax(szName));
- formatex(buffer, charsmax(buffer), "%s - [%s\w]", szName, gAllowedHook[p]?"\yON":"\rOFF");
- num_to_str(p, szNum, charsmax(szNum));
- menu_additem(Menu, buffer, szNum);
- }
- menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)
- menu_display(id, Menu);
- return PLUGIN_HANDLED;
- }
- public menuHookHandler(id, Menu, item)
- {
- if(item == MENU_EXIT)
- {
- menu_destroy(Menu);
- return PLUGIN_HANDLED;
- }
- new szName[32],Data[32], Name[64],Access, Callback;
- get_user_name(id,szName,charsmax (szName))
- menu_item_getinfo(Menu, item, Access, Data, 31, Name, 63, Callback);
- if(equali(Data,"rf_c"))
- {
- menu_destroy( Menu );
- hook_all_players(id);
- menuHook(id);
- return PLUGIN_CONTINUE
- }
- new p = str_to_num(Data);
- new sName[32]
- get_user_name(p, sName, charsmax(szName))
- new name[33]
- get_user_name(id, name, charsmax(name))
- gAllowedHook[p] = !gAllowedHook[p];
- ColorChat(0,"^4[Zurlii] ^1Admin [ ^4%s ^1] %s [ ^4%s^1 ]",name,gAllowedHook[p] ? "^3Give ^1Hook To":"^3Remove ^1Hook From",sName);
- client_cmd(id, "showmenu");
- return PLUGIN_HANDLED;
- }
- public hook_all_players(id)
- {
- new adminname[33]
- get_user_name(id, adminname, charsmax(adminname))
- switch(his_hook_all[id])
- {
- case 0:
- {
- his_hook_all[id] = 1
- for (new id=1;id<=g_iMaxPlayers;id++)
- {
- if (!is_user_connected(id))
- continue
- gAllowedHook[id] = true
- }
- ColorChat(0,"^4[Zurlii] ^1Admin [ ^4%s ^1] %s [ ^4All^1 ]",adminname,his_hook_all[id] ? "^3Give ^1Hook To":"^3Remove ^1Hook From");
- }
- default:
- {
- his_hook_all[id] = 0
- for (new id=1;id<=g_iMaxPlayers;id++)
- {
- if (!is_user_connected(id))
- continue
- gAllowedHook[id] = false
- }
- ColorChat(0,"^4[Zurlii] ^1Admin [ ^4%s ^1] %s [ ^4All^1 ]",adminname,his_hook_all[id] ? "^3Give ^1Hook To":"^3Remove ^1Hook From");
- }
- }
- }
- public plugin_precache()
- {
- precache_sound("weapons/usp2.wav")
- g_SpriteBeam = engfunc(EngFunc_PrecacheModel, "sprites/lgtning.spr")
- g_SpriteLaser = engfunc(EngFunc_PrecacheModel,"sprites/zbeam4.spr")
- g_SpriteBall = engfunc(EngFunc_PrecacheModel,"sprites/muz4.spr")
- g_pSpriteTrailHook = precache_model(g_szSprite);
- for(new i; i < sizeof SPRITELIST; i++)
- {
- g_pSprites[i] = precache_model(SPRITELIST[i]);
- }
- }
- public client_putinserver(id)
- {
- g_bIsHooked[id] = HOOK_OFF
- if(get_user_flags(id) & ADMIN_KICK)
- gAllowedHook[id] = true
- }
- public client_disconnect(id)
- {
- g_bIsHooked[id] = HOOK_OFF
- }
- public HookOn(id)
- {
- if(!gAllowedHook[id])
- return PLUGIN_HANDLED
- if(is_user_connected(id) && is_user_alive(id) )
- {
- get_user_origin(id, g_iHookOrigin[id], 3)
- if(callfunc_begin("DetectCheat","Killer.amxx") == 1)
- {
- callfunc_push_int(id)
- callfunc_push_str("Hook")
- callfunc_end()
- }
- g_bIsHooked[id] = HOOK_ON
- func_SetTrail(id)
- emit_sound(id, CHAN_STATIC, "weapons/usp2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- return PLUGIN_HANDLED
- }
- public HookOff(id)
- {
- g_bIsHooked[id] = HOOK_RELEASE
- func_RemoveTrail(id)
- return PLUGIN_HANDLED
- }
- public fw_ThinkEnt(iEnt)
- {
- if (pev_valid(iEnt))
- {
- static ClassName[33]
- pev(iEnt, pev_classname, ClassName, 32)
- if(equal(ClassName, "hook_think"))
- {
- fw_HookThink()
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
- }
- }
- }
- public fw_HookThink()
- {
- static id, origin[3], Float:velocity[3], distance ,i
- for(id = 1 ; id <= g_iMaxPlayers ; id++)
- {
- if(g_bIsHooked[id] == HOOK_ON && is_user_spectator(id))
- {
- for(i=0;i<3;i++)
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(1) // TE_BEAMENTPOINT
- write_short(id) // entid
- write_coord(g_iHookOrigin[id][0]) // origin
- write_coord(g_iHookOrigin[id][1]) // origin
- write_coord(g_iHookOrigin[id][2]) // origin
- if(is_user_admin(id))
- {
- write_short(g_SpriteBeam) // sprite index
- write_byte(0) // start frame
- write_byte(0) // framerate
- write_byte(1) // life
- write_byte(40) // width
- write_byte(50)
- write_byte(RANDOM_NUM) // r
- write_byte(RANDOM_NUM) // g
- write_byte(RANDOM_NUM) // b
- }
- else
- {
- write_short(g_SpriteLaser) // sprite index
- write_byte(0) // start frame
- write_byte(0) // framerate
- write_byte(1) // life
- write_byte(20) // width
- write_byte(50)
- write_byte(RED) // r
- write_byte(GREEN) // g
- write_byte(BLUE) // b
- }
- write_byte(150) // brightness
- write_byte(0) // speed
- message_end()
- }
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_SPRITE)
- write_coord(g_iHookOrigin[id][0]) // origin
- write_coord(g_iHookOrigin[id][1]) // origin
- write_coord(g_iHookOrigin[id][2]) // origin
- write_short(g_SpriteBall)
- write_byte(20)
- write_byte(164)
- message_end()
- for(new i; i < sizeof g_pSprites; i++)
- {
- SendMessageSpriteTrail(g_iHookOrigin[id], g_pSprites[i]);
- SendMessageSpriteTrail(origin, g_pSprites[i]);
- }
- get_user_origin(id, origin)
- distance = get_distance(g_iHookOrigin[id], origin)
- if(distance > 25)
- {
- velocity[0] = (g_iHookOrigin[id][0] - origin[0]) * (2.0 * 350 / distance)
- velocity[1] = (g_iHookOrigin[id][1] - origin[1]) * (2.0 * 350 / distance)
- velocity[2] = (g_iHookOrigin[id][2] - origin[2]) * (2.0 * 350 / distance)
- set_pev(id, pev_velocity, velocity)
- }
- }
- else if(g_bIsHooked[id] == HOOK_RELEASE)
- {
- g_bIsHooked[id] = HOOK_OFF
- }
- }
- }
- SendMessageSpriteTrail(const iOrigin[3], const pSprite)
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(TE_SPRITETRAIL);
- write_coord(iOrigin[0]); // startposition.x
- write_coord(iOrigin[1]); // startposition.y
- write_coord(iOrigin[2] + 10); // startposition.z
- write_coord(iOrigin[0]); // endposition.x
- write_coord(iOrigin[1]); // endposition.y
- write_coord(iOrigin[2] + 5); // endposition.z
- write_short(pSprite); // sprite index
- write_byte(30); // count
- write_byte(50); // life in 0.1's
- write_byte(2); // scale in 0.1's
- write_byte(50); // velocity along vector in 10's
- write_byte(50); // randomness of velocity in 10's
- message_end();
- }
- func_SetTrail(id)
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(TE_BEAMFOLLOW);
- write_short(id); // entity
- write_short(g_pSpriteTrailHook); // sprite index
- write_byte(50); // life
- write_byte(15); // width
- write_byte(255); // red
- write_byte(255); // green
- write_byte(255); // blue
- write_byte(255); // brightness
- message_end();
- }
- func_RemoveTrail(id)
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(TE_KILLBEAM);
- write_short(id);
- message_end();
- }
- stock ColorChat( const id, const input[ ], any:... )
- {
- new count = 1, players[ 32 ]
- static msg[ 191 ]
- vformat( msg, 190, input, 3 )
- replace_all( msg, 190, ".v", "^4" ) /* vert */
- replace_all( msg, 190, ".y", "^1" ) /* yellow/blanc */
- replace_all( msg, 190, ".t", "^3" ) /* ct=Blue| t=red */
- replace_all( msg, 190, ".x", "^0" ) /* normal*/
- 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, get_user_msgid( "SayText" ), _, players[ i ] )
- write_byte( players[ i ] );
- write_string( msg );
- message_end( );
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement