Advertisement
raizo21

Hook

Dec 23rd, 2019
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.07 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <fakemeta>
  5. #include <Hamsandwich>
  6. #include <knife_hook>
  7.  
  8. #pragma tabsize 0
  9. #pragma compress 1
  10.  
  11. #define PLUGIN "Hook Menu Spec"
  12. #define VERSION "1.0"
  13. #define AUTHOR "raizo"
  14.  
  15. #define RANDOM_NUM random_num(0,255)
  16.  
  17. #define RED        255  
  18. #define GREEN      99  
  19. #define   BLUE      71
  20.  
  21. enum color {normal = 1, green, team}
  22. enum {HOOK_OFF, HOOK_RELEASE, HOOK_ON}
  23. new gAllowedHook[33]
  24. new g_bIsHooked[33]
  25. new g_iHookOrigin[33][3]
  26. new g_iMaxPlayers
  27. new his_hook_all[33]
  28.  
  29. new g_SpriteBeam  
  30. new g_SpriteLaser  
  31. new g_SpriteBall
  32. new g_pSpriteTrailHook;
  33.  
  34. new const g_szSprite[] = "sprites/knife/1.spr";
  35.  
  36. new const SPRITELIST[][] =
  37. {
  38.     "sprites/knife/2.spr",
  39.     "sprites/knife/3.spr",
  40.     "sprites/knife/4.spr",
  41.     "sprites/knife/5.spr",
  42.     "sprites/knife/6.spr"
  43. }
  44.  
  45. new g_pSprites[sizeof SPRITELIST];
  46.  
  47.  
  48. public plugin_init()
  49. {
  50.     register_plugin(PLUGIN, VERSION, AUTHOR)
  51.    
  52.     register_forward(FM_Think, "fw_ThinkEnt")
  53.     register_clcmd("say /hook", "menuHook");
  54.     register_clcmd("showmenu", "menuHook");
  55.     register_clcmd("+hook", "HookOn")
  56.     register_clcmd("-hook", "HookOff")
  57.    
  58.     new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target"))
  59.     set_pev(iEnt, pev_classname, "hook_think")
  60.     set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
  61.    
  62.     RegisterHam(Ham_Spawn, "player", "fw_player_respawn", 1)
  63.    
  64.     g_iMaxPlayers = get_maxplayers()
  65. }
  66.  
  67.  
  68. public fw_player_respawn(id)
  69. {
  70.     if(!is_user_alive(id) || !is_user_connected(id))
  71.         return PLUGIN_HANDLED
  72.        
  73.     if(get_user_flags(id) & ADMIN_KICK)
  74.         gAllowedHook[id] = true
  75.        
  76.     return PLUGIN_HANDLED
  77. }
  78. public menuHook(id)
  79. {
  80.     new flags = get_user_flags(id)
  81.     if(!(flags & ADMIN_RCON))
  82.     {
  83.         client_print(id,print_chat,"You have no access to this command")
  84.         return PLUGIN_HANDLED
  85.     }
  86.  
  87.  
  88.     new Menu = menu_create("\r[\yHook\r] \w Menu \y- \rby raizo^n", "menuHookHandler");
  89.    
  90.     new szNum[3],szName[32],players[32],buffer[64],iNum
  91.    
  92.     //formatex(buffer,charsmax(buffer), "\yGive Hook All");
  93.     formatex(buffer,charsmax(buffer), "Hook To All - [%s\w]", his_hook_all[id]?"\yON":"\rOFF");
  94.     menu_additem(Menu, buffer,"rf_c", 0);
  95.     menu_addblank(Menu,0)
  96.    
  97.     get_players(players, iNum ,"ch")
  98.    
  99.     for (new i=0; i < iNum; i++)
  100.     {
  101.         new p = players[i];
  102.    
  103.         get_user_name(p, szName, charsmax(szName));
  104.         formatex(buffer, charsmax(buffer), "%s - [%s\w]", szName, gAllowedHook[p]?"\yON":"\rOFF");
  105.         num_to_str(p, szNum, charsmax(szNum));
  106.         menu_additem(Menu, buffer, szNum);
  107.     }
  108.     menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)
  109.     menu_display(id, Menu);
  110.     return PLUGIN_HANDLED;
  111. }
  112.  
  113. public menuHookHandler(id, Menu, item)
  114. {
  115.     if(item == MENU_EXIT)
  116.     {
  117.         menu_destroy(Menu);
  118.         return PLUGIN_HANDLED;
  119.     }
  120.     new szName[32],Data[32], Name[64],Access, Callback;
  121.    
  122.     get_user_name(id,szName,charsmax (szName))
  123.     menu_item_getinfo(Menu, item, Access, Data, 31, Name, 63, Callback);
  124.    
  125.     if(equali(Data,"rf_c"))
  126.     {
  127.     menu_destroy( Menu );
  128.     hook_all_players(id);
  129.     menuHook(id);
  130.     return PLUGIN_CONTINUE
  131.     }
  132.     new p = str_to_num(Data);
  133.    
  134.     new sName[32]
  135.     get_user_name(p, sName, charsmax(szName))
  136.     new name[33]
  137.     get_user_name(id, name, charsmax(name))
  138.    
  139.     gAllowedHook[p] = !gAllowedHook[p];
  140.    
  141.     ColorChat(0,"^4[Zurlii] ^1Admin [ ^4%s ^1] %s [ ^4%s^1 ]",name,gAllowedHook[p] ? "^3Give ^1Hook To":"^3Remove ^1Hook From",sName);
  142.    
  143.     client_cmd(id, "showmenu");
  144.     return PLUGIN_HANDLED;
  145. }
  146.  
  147. public hook_all_players(id)
  148. {
  149.     new adminname[33]
  150.     get_user_name(id, adminname, charsmax(adminname))
  151.    
  152.     switch(his_hook_all[id])
  153.     {
  154.         case 0:
  155.         {
  156.             his_hook_all[id] = 1
  157.        
  158.        for (new id=1;id<=g_iMaxPlayers;id++)
  159.             {
  160.                 if (!is_user_connected(id))
  161.                     continue
  162.        
  163.                 gAllowedHook[id] = true
  164.             }
  165.        ColorChat(0,"^4[Zurlii] ^1Admin [ ^4%s ^1] %s [ ^4All^1 ]",adminname,his_hook_all[id] ? "^3Give ^1Hook To":"^3Remove ^1Hook From");
  166.        
  167.         }
  168.         default:
  169.         {
  170.             his_hook_all[id] = 0
  171.        
  172.        for (new id=1;id<=g_iMaxPlayers;id++)
  173.             {
  174.                 if (!is_user_connected(id))
  175.                     continue
  176.        
  177.                 gAllowedHook[id] = false
  178.             }
  179.        ColorChat(0,"^4[Zurlii] ^1Admin [ ^4%s ^1] %s [ ^4All^1 ]",adminname,his_hook_all[id] ? "^3Give ^1Hook To":"^3Remove ^1Hook From");
  180.         }
  181.     }  
  182. }
  183.  
  184. public plugin_precache()
  185. {
  186.     precache_sound("weapons/usp2.wav")
  187.  
  188.     g_SpriteBeam = engfunc(EngFunc_PrecacheModel, "sprites/lgtning.spr")  
  189.     g_SpriteLaser = engfunc(EngFunc_PrecacheModel,"sprites/zbeam4.spr")  
  190.     g_SpriteBall = engfunc(EngFunc_PrecacheModel,"sprites/muz4.spr")
  191.     g_pSpriteTrailHook = precache_model(g_szSprite);
  192.    
  193.     for(new i; i < sizeof SPRITELIST; i++)
  194.     {
  195.     g_pSprites[i] = precache_model(SPRITELIST[i]);
  196. }
  197. }
  198.  
  199. public client_putinserver(id)
  200. {
  201.     g_bIsHooked[id] = HOOK_OFF
  202.    
  203.     if(get_user_flags(id) & ADMIN_KICK)
  204.         gAllowedHook[id] = true
  205.    
  206. }
  207.  
  208. public client_disconnect(id)
  209. {
  210.     g_bIsHooked[id] = HOOK_OFF
  211. }
  212.  
  213. public HookOn(id)  
  214. {
  215.     if(!gAllowedHook[id])
  216.         return PLUGIN_HANDLED
  217.    
  218.     if(is_user_connected(id) && is_user_alive(id) )
  219.     {
  220.         get_user_origin(id, g_iHookOrigin[id], 3)
  221.        
  222.        
  223.         if(callfunc_begin("DetectCheat","Killer.amxx") == 1)
  224.         {
  225.             callfunc_push_int(id)
  226.             callfunc_push_str("Hook")
  227.        callfunc_end()
  228.         }
  229.     g_bIsHooked[id] = HOOK_ON
  230.  
  231.     func_SetTrail(id)
  232.     emit_sound(id, CHAN_STATIC, "weapons/usp2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  233.     }
  234.     return PLUGIN_HANDLED
  235. }
  236.  
  237. public HookOff(id)
  238. {
  239.     g_bIsHooked[id] = HOOK_RELEASE
  240.     func_RemoveTrail(id)
  241.     return PLUGIN_HANDLED
  242. }
  243.  
  244.  
  245. public fw_ThinkEnt(iEnt)
  246. {
  247.     if (pev_valid(iEnt))
  248.     {
  249.         static ClassName[33]
  250.         pev(iEnt, pev_classname, ClassName, 32)
  251.        
  252.         if(equal(ClassName, "hook_think"))
  253.         {
  254.             fw_HookThink()
  255.        set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
  256.         }
  257.     }
  258. }
  259.  
  260. public fw_HookThink()  
  261. {  
  262.    static id, origin[3], Float:velocity[3], distance ,i
  263.    for(id = 1 ; id <= g_iMaxPlayers ; id++)  
  264.    {  
  265.        if(g_bIsHooked[id] == HOOK_ON && is_user_spectator(id))  
  266.     {  
  267.         for(i=0;i<3;i++)
  268.         {
  269.              message_begin(MSG_BROADCAST, SVC_TEMPENTITY)  
  270.              write_byte(1)           // TE_BEAMENTPOINT  
  271.              write_short(id)           // entid  
  272.              write_coord(g_iHookOrigin[id][0]) // origin  
  273.              write_coord(g_iHookOrigin[id][1]) // origin  
  274.              write_coord(g_iHookOrigin[id][2]) // origin
  275.  
  276.              if(is_user_admin(id))  
  277.              {  
  278.                 write_short(g_SpriteBeam)     // sprite index  
  279.                 write_byte(0)           // start frame  
  280.                 write_byte(0)           // framerate  
  281.                 write_byte(1)           // life  
  282.                 write_byte(40)           // width  
  283.                 write_byte(50)  
  284.                 write_byte(RANDOM_NUM) // r  
  285.                 write_byte(RANDOM_NUM) // g  
  286.                 write_byte(RANDOM_NUM) // b  
  287.              }  
  288.              else  
  289.              {  
  290.                 write_short(g_SpriteLaser)     // sprite index  
  291.                 write_byte(0)           // start frame  
  292.                 write_byte(0)           // framerate  
  293.                 write_byte(1)           // life  
  294.                 write_byte(20)           // width  
  295.                 write_byte(50)  
  296.                 write_byte(RED)          // r  
  297.                 write_byte(GREEN)      // g  
  298.                 write_byte(BLUE)       // b  
  299.              }  
  300.              write_byte(150)                // brightness  
  301.              write_byte(0)                // speed  
  302.              message_end()  
  303.         }
  304.          
  305.          message_begin(MSG_BROADCAST, SVC_TEMPENTITY)  
  306.          write_byte(TE_SPRITE)
  307.          write_coord(g_iHookOrigin[id][0]) // origin  
  308.          write_coord(g_iHookOrigin[id][1]) // origin  
  309.          write_coord(g_iHookOrigin[id][2]) // origin  
  310.          write_short(g_SpriteBall)
  311.          write_byte(20)
  312.          write_byte(164)
  313.          message_end()
  314.      
  315.     for(new i; i < sizeof g_pSprites; i++)
  316.          {
  317.         SendMessageSpriteTrail(g_iHookOrigin[id], g_pSprites[i]);
  318.         SendMessageSpriteTrail(origin, g_pSprites[i]);
  319.     }
  320.          
  321.          get_user_origin(id, origin)  
  322.          distance = get_distance(g_iHookOrigin[id], origin)  
  323.          if(distance > 25)  
  324.          {  
  325.             velocity[0] = (g_iHookOrigin[id][0] - origin[0]) * (2.0 * 350 / distance)  
  326.             velocity[1] = (g_iHookOrigin[id][1] - origin[1]) * (2.0 * 350 / distance)  
  327.             velocity[2] = (g_iHookOrigin[id][2] - origin[2]) * (2.0 * 350 / distance)  
  328.             set_pev(id, pev_velocity, velocity)  
  329.          }  
  330.       }  
  331.       else if(g_bIsHooked[id] == HOOK_RELEASE)  
  332.       {  
  333.          g_bIsHooked[id] = HOOK_OFF  
  334.       }  
  335.    }  
  336. }
  337.  
  338. SendMessageSpriteTrail(const iOrigin[3], const pSprite)
  339. {
  340.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  341.     write_byte(TE_SPRITETRAIL);
  342.     write_coord(iOrigin[0]); // startposition.x
  343.     write_coord(iOrigin[1]); // startposition.y
  344.     write_coord(iOrigin[2] + 10); // startposition.z
  345.     write_coord(iOrigin[0]); // endposition.x
  346.     write_coord(iOrigin[1]); // endposition.y
  347.     write_coord(iOrigin[2] + 5); // endposition.z
  348.     write_short(pSprite); // sprite index
  349.     write_byte(30); // count
  350.     write_byte(50); // life in 0.1's
  351.     write_byte(2); // scale in 0.1's
  352.     write_byte(50); // velocity along vector in 10's
  353.     write_byte(50); // randomness of velocity in 10's
  354.     message_end();
  355. }
  356.  
  357. func_SetTrail(id)
  358. {
  359.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  360.     write_byte(TE_BEAMFOLLOW);
  361.     write_short(id);                    // entity
  362.     write_short(g_pSpriteTrailHook);    // sprite index
  363.     write_byte(50);     // life
  364.     write_byte(15);                     // width
  365.     write_byte(255);                    // red
  366.     write_byte(255);                    // green
  367.     write_byte(255);                    // blue
  368.     write_byte(255);                    // brightness
  369.     message_end();
  370. }
  371.  
  372. func_RemoveTrail(id)
  373. {
  374.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  375.     write_byte(TE_KILLBEAM);
  376.     write_short(id);
  377.     message_end();
  378. }
  379.  
  380. stock ColorChat( const id, const input[ ], any:... )
  381. {
  382.     new count = 1, players[ 32 ]
  383.    
  384.     static msg[ 191 ]
  385.     vformat( msg, 190, input, 3 )
  386.    
  387.     replace_all( msg, 190, ".v", "^4" ) /* vert */
  388.     replace_all( msg, 190, ".y", "^1" ) /* yellow/blanc */
  389.     replace_all( msg, 190, ".t", "^3" ) /* ct=Blue| t=red */
  390.     replace_all( msg, 190, ".x", "^0" ) /* normal*/
  391.    
  392.     if( id ) players[ 0 ] = id; else get_players( players, count, "ch" )
  393.     {
  394.     for( new i = 0; i < count; i++ )
  395.     {
  396.         if( is_user_connected( players[ i ] ) )
  397.         {
  398.             message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, players[ i ] )
  399.             write_byte( players[ i ] );
  400.             write_string( msg );
  401.             message_end( );
  402.         }
  403.     }
  404.     }
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement