SHARE
TWEET

Untitled

a guest Jan 6th, 2019 101 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma tabsize 0
  2. #include <amxmodx>
  3. #include <amxmisc>
  4. #include <engine>
  5. #include <fakemeta>
  6.  
  7. #define PLUGIN  "[Ar4 Mode] HookManager"
  8. #define VERSION "3.0"
  9. #define AUTHOR  "LeGioN & arttty7"
  10.  
  11. #define PLAYERS_PER_PAGE 8
  12. #define JBE_CORE    //Закомментируйте, если вам не нужна привязка к [JB] Engine.
  13.  
  14. #if defined JBE_CORE
  15.     native jbe_get_day_mode();
  16.     native jbe_is_user_wanted(pPlayer);
  17. #endif
  18.  
  19. new g_iMenuPlayers[33][32], g_iMenuPosition[33], szPlayerHook[33], szBreakEnd[33];
  20. new g_pEndSpriteBreak[4], g_LoadColor[81], g_LoadSprite[81], g_LoadSound[81], bool:g_iHookEnable = true;
  21. new szPlayerColor[33], szPlayerSprite[33], szPlayerSize[33], szPlayerSound[33], szPlayerSpeed[33], szPlayerView[33], szPlayerEndSprite[33], szPlayerHookOrigin[33][3];
  22. new g_HookColorNum, g_HookColorDefault, g_HookColorName[999][64], g_HookColorRGB[999][4];
  23. new g_HookSpriteNum, g_HookSpriteDefault, g_HookSpriteName[999][64], g_HookSpriteFile[999][64], g_HookSpriteMsg[999];
  24. new g_HookSoundNum, g_HookSoundDefault, g_HookSoundName[999][64], g_HookSoundFile[999][64]
  25.  
  26. public plugin_init()
  27. {
  28.     register_plugin(PLUGIN, VERSION, AUTHOR)
  29.    
  30.     register_clcmd("+hook", "HookOn")
  31.     register_clcmd("-hook", "HookOff")
  32.     register_clcmd("say /hook", "Ar4_HookMenu")
  33.  
  34.     register_dictionary("jbe_ar4mode_hook.txt")
  35.    
  36.     register_menucmd(register_menuid("Show_HookMenu"), 1023, "Handle_HookMenu");
  37.     register_menucmd(register_menuid("Show_HookTargetMenu"), 1023, "Handle_HookTargetMenu");
  38. }
  39.  
  40. public plugin_precache()
  41. {
  42.     new g_LoadDir[81]
  43.     get_configsdir(g_LoadDir, charsmax( g_LoadDir ))
  44.     formatex(g_LoadDir, charsmax( g_LoadDir ), "%s/ar4mode_hook", g_LoadDir)
  45.     if(!dir_exists( g_LoadDir ))
  46.     {
  47.         new szError[512]
  48.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_PRECACHE")
  49.         set_fail_state( szError )
  50.     }
  51.     formatex(g_LoadColor, charsmax( g_LoadColor ), "%s/hook_color.ini", g_LoadDir)
  52.     formatex(g_LoadSprite, charsmax( g_LoadSprite ), "%s/hook_sprite.ini", g_LoadDir)
  53.     formatex(g_LoadSound, charsmax( g_LoadSound ), "%s/hook_sound.ini", g_LoadDir)
  54.     if(!file_exists( g_LoadColor ))
  55.     {
  56.         new szError[512]
  57.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_NOFILE_COLOR")
  58.         set_fail_state( szError )
  59.     }
  60.     if(!file_exists( g_LoadSprite ))
  61.     {
  62.         new szError[512]
  63.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_NOFILE_SPRITE")
  64.         set_fail_state( szError )
  65.     }
  66.     if(!file_exists( g_LoadSound ))
  67.     {
  68.         new szError[512]
  69.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_NOFILE_SOUND")
  70.         set_fail_state( szError )
  71.     }
  72.     set_task(0.5, "LoadColor")
  73.     set_task(0.5, "LoadSprite")
  74.     set_task(0.5, "LoadSound")
  75.     new szParse[320], szParseName[64], szParseFile[256], szLine, szNum, szNums
  76.     for(szLine=0;read_file(g_LoadSprite, szLine, szParse, charsmax( szParse ), szNum);szLine++)
  77.     {
  78.         if(szNum > 0 && szParse[0] != ';')
  79.         {
  80.             ++szNums
  81.             parse(szParse, szParseFile, charsmax( szParseFile ), szParseFile, charsmax( szParseFile ))
  82.             g_HookSpriteMsg[szNums] = precache_model( szParseFile )
  83.         }
  84.     }
  85.     for(szLine=0;read_file(g_LoadSound, szLine, szParse, charsmax( szParse ), szNum);szLine++)
  86.     {
  87.         if(szNum > 0 && szParse[0] != ';')
  88.         {
  89.             parse(szParse, szParseFile, charsmax( szParseFile ), szParseFile, charsmax( szParseFile ))
  90.             precache_sound( szParseFile )
  91.         }
  92.     }
  93.     szParseName = szParseName
  94.     g_pEndSpriteBreak[0] = engfunc(EngFunc_PrecacheModel, "sprites/jbe_ar4mode/end_7.spr");
  95.     g_pEndSpriteBreak[1] = engfunc(EngFunc_PrecacheModel, "sprites/jbe_ar4mode/end_6.spr");
  96.     g_pEndSpriteBreak[2] = engfunc(EngFunc_PrecacheModel, "sprites/jbe_ar4mode/end_3.spr");
  97.     g_pEndSpriteBreak[3] = engfunc(EngFunc_PrecacheModel, "sprites/jbe_ar4mode/end_4.spr");
  98. }
  99.  
  100. public LoadColor()
  101. {
  102.     new szParse[256], szParseName[64], szParseColor[32], szParseDefault[32], szParseR[32], szParseG[32], szParseB[32], szParseDefaultNum, szLine, szNum
  103.     for(szLine=0;read_file(g_LoadColor, szLine, szParse, charsmax( szParse ), szNum);szLine++)
  104.     {
  105.         if(szNum > 0 && szParse[0] != ';' && szParse[0] != '?')
  106.         {
  107.             ++g_HookColorNum
  108.             parse(szParse, szParseName, charsmax( szParseName ), szParseColor, charsmax( szParseColor ), szParseDefault, charsmax( szParseDefault ))
  109.             parse(szParseColor, szParseR, charsmax( szParseR ), szParseG, charsmax( szParseG ), szParseB, charsmax( szParseB ))
  110.             g_HookColorName[g_HookColorNum] = szParseName
  111.             g_HookColorRGB[g_HookColorNum][0] = str_to_num( szParseR )
  112.             g_HookColorRGB[g_HookColorNum][1] = str_to_num( szParseG )
  113.             g_HookColorRGB[g_HookColorNum][2] = str_to_num( szParseB )
  114.             szParseDefaultNum = str_to_num( szParseDefault )
  115.             if(szParseDefaultNum && !g_HookColorDefault) g_HookColorDefault = g_HookColorNum
  116.         }
  117.     }
  118.     if(!g_HookColorNum)
  119.     {
  120.         new szError[512]
  121.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_BUILDING_NOCOLOR")
  122.         set_fail_state( szError )
  123.     }
  124.     if(!g_HookColorDefault)
  125.     {
  126.         new szError[512]
  127.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_BUILDING_NOCOLORDEF")
  128.         set_fail_state( szError )
  129.     }
  130. }
  131.  
  132. public LoadSprite()
  133. {
  134.     new szParse[256], szParseName[64], szParseFile[32], szParseDefault[32], szParseDefaultNum, szLine, szNum
  135.     for(szLine=0;read_file(g_LoadSprite, szLine, szParse, charsmax( szParse ), szNum);szLine++)
  136.     {
  137.         if(szNum > 0 && szParse[0] != ';' && szParse[0] != '?')
  138.         {
  139.             ++g_HookSpriteNum
  140.             parse(szParse, szParseName, charsmax( szParseName ), szParseFile, charsmax( szParseFile ), szParseDefault, charsmax( szParseDefault ))
  141.             g_HookSpriteName[g_HookSpriteNum] = szParseName
  142.             g_HookSpriteFile[g_HookSpriteNum] = szParseFile
  143.             szParseDefaultNum = str_to_num( szParseDefault )
  144.             if(szParseDefaultNum)
  145.             {
  146.                 if(!g_HookSpriteDefault)
  147.                 {
  148.                     g_HookSpriteDefault = g_HookSpriteNum
  149.                     server_print("fsdfsd - %d - %d", g_HookSpriteDefault, g_HookSpriteNum)
  150.                 }
  151.             }
  152.         }
  153.     }
  154.     if(!g_HookSpriteNum)
  155.     {
  156.         new szError[512]
  157.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_BUILDING_NOSPRITE")
  158.         set_fail_state( szError )
  159.     }
  160.     if(!g_HookSpriteDefault)
  161.     {
  162.         new szError[512]
  163.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_BUILDING_NOSPRITEDEF")
  164.         set_fail_state( szError )
  165.     }
  166. }
  167.  
  168. public LoadSound()
  169. {
  170.     new szParse[256], szParseName[64], szParseFile[32], szParseDefault[32], szParseDefaultNum, szLine, szNum
  171.     for(szLine=0;read_file(g_LoadSound, szLine, szParse, charsmax( szParse ), szNum);szLine++)
  172.     {
  173.         if(szNum > 0 && szParse[0] != ';' && szParse[0] != '?')
  174.         {
  175.             ++g_HookSoundNum
  176.             parse(szParse, szParseName, charsmax( szParseName ), szParseFile, charsmax( szParseFile ), szParseDefault, charsmax( szParseDefault ))
  177.             g_HookSoundName[g_HookSoundNum] = szParseName
  178.             g_HookSoundFile[g_HookSoundNum] = szParseFile
  179.             szParseDefaultNum = str_to_num( szParseDefault )
  180.             if(szParseDefaultNum && !g_HookSoundDefault) g_HookSoundDefault = g_HookSoundNum
  181.         }
  182.     }
  183.     if(!g_HookSoundNum)
  184.     {
  185.         new szError[512]
  186.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_BUILDING_NOSOUND")
  187.         set_fail_state( szError )
  188.     }
  189.     if(!g_HookSoundDefault)
  190.     {
  191.         new szError[512]
  192.         formatex(szError, charsmax( szError ), "%L", 0, "JBE_HOOK_AR4_MODE_BUILDING_NOSOUNDDEF")
  193.         set_fail_state( szError )
  194.     }
  195. }
  196. public client_putinserver(id)
  197. {
  198.     if(get_user_flags(id) & ADMIN_LEVEL_G)
  199.     {
  200.         szPlayerHook[id] = true;
  201.         szPlayerColor[id] = g_HookColorDefault
  202.         szPlayerSprite[id] = g_HookSpriteDefault
  203.         szPlayerSize[id] = 0
  204.         szPlayerSound[id] = g_HookSoundDefault
  205.         szPlayerSpeed[id] = 0
  206.         szPlayerView[id] = 0
  207.         szPlayerEndSprite[id] = 0
  208.     }
  209. }
  210.  
  211. public client_disconnect(id)
  212. {
  213.     RemoveHook(id)
  214.     szPlayerHook[id] = false;
  215. }  
  216. public Ar4_HookMenu(id)
  217. {
  218.     if(get_user_flags(id) & ADMIN_LEVEL_G) return Show_HookMenu(id);
  219.     else ChatColor(id, "%L", id, "JBE_MENU_AR4_MODE_NOACCESS"); return PLUGIN_HANDLED;
  220. }
  221.  
  222. Show_HookMenu(id)
  223. {
  224.     new szMenu[512], iKeys = (1<<9), iLen = formatex(szMenu, charsmax(szMenu), "\y%L^n^n", id, "JBE_MENU_AR4_MODE_MAIN_TITLE")
  225.     if(g_iHookEnable)
  226.     {
  227.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w1\r] \w%L^n", id, "JBE_MENU_AR4_MODE_COLOR", g_HookColorName[szPlayerColor[id]]);
  228.         iKeys |= (1<<0);
  229.     }
  230.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_COLOR_FALLS", g_HookColorName[szPlayerColor[id]]);
  231.     if(g_iHookEnable)
  232.     {
  233.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w2\r] \w%L^n", id, "JBE_MENU_AR4_MODE_HOOK", g_HookSpriteName[szPlayerSprite[id]]);
  234.         iKeys |= (1<<1);
  235.     }
  236.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_HOOK_FALLS", g_HookSpriteName[szPlayerSprite[id]]);
  237.     if(g_iHookEnable)
  238.     {
  239.         switch(szPlayerSize[id])
  240.         {
  241.             case 0: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w3\r] \w%L^n", id, "JBE_MENU_AR4_MODE_0_SIZE");
  242.             case 1: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w3\r] \w%L^n", id, "JBE_MENU_AR4_MODE_1_SIZE");
  243.             case 2: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w3\r] \w%L^n", id, "JBE_MENU_AR4_MODE_2_SIZE");
  244.             case 3: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w3\r] \w%L^n", id, "JBE_MENU_AR4_MODE_3_SIZE");
  245.         }  
  246.         iKeys |= (1<<2);   
  247.     }
  248.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_0_SIZE_FALLS");
  249.     if(g_iHookEnable)
  250.     {
  251.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w4\r] \w%L^n", id, "JBE_MENU_AR4_MODE_SOUND", g_HookSoundName[szPlayerSound[id]]);
  252.         iKeys |= (1<<3);
  253.     }
  254.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_SOUND_FALLS", g_HookSoundName[szPlayerSound[id]]);
  255.     if(g_iHookEnable)
  256.     {
  257.         switch(szPlayerSpeed[id])
  258.         {
  259.             case 0: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w5\r] \w%L^n", id, "JBE_MENU_AR4_MODE_1_SPEED");
  260.             case 1: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w5\r] \w%L^n", id, "JBE_MENU_AR4_MODE_0_SPEED");
  261.             case 2: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w5\r] \w%L^n", id, "JBE_MENU_AR4_MODE_2_SPEED");
  262.         }  
  263.         iKeys |= (1<<4);   
  264.     }
  265.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_1_SPEED_FALLS");
  266.     if(g_iHookEnable)
  267.     {
  268.         switch(szPlayerView[id])
  269.         {
  270.             case 0: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w6\r] \w%L^n", id, "JBE_MENU_AR4_MODE_0_VIEW");
  271.             case 1: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w6\r] \w%L^n", id, "JBE_MENU_AR4_MODE_1_VIEW");
  272.             case 2: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w6\r] \w%L^n", id, "JBE_MENU_AR4_MODE_2_VIEW");
  273.         }  
  274.         iKeys |= (1<<5);   
  275.     }
  276.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_0_VIEW_FALLS");
  277.     if(g_iHookEnable)
  278.     {
  279.         switch(szPlayerEndSprite[id])
  280.         {
  281.             case 0: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w7\r] \w%L^n", id, "JBE_MENU_AR4_MODE_0_END");
  282.             case 1: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w7\r] \w%L^n", id, "JBE_MENU_AR4_MODE_1_END");
  283.             case 2: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w7\r] \w%L^n", id, "JBE_MENU_AR4_MODE_2_END");
  284.             case 3: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w7\r] \w%L^n", id, "JBE_MENU_AR4_MODE_3_END");
  285.             case 4: iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w7\r] \w%L^n", id, "JBE_MENU_AR4_MODE_4_END");
  286.         }  
  287.         iKeys |= (1<<6);
  288.     }
  289.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_0_END_FALLS");
  290.     if(get_user_flags(id) & ADMIN_RESERVATION && g_iHookEnable)
  291.     {
  292.         if(g_iHookEnable) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r[\w8\r] \w%L^n", id, "JBE_MENU_AR4_MODE_HOOK_TARGET_MENU");
  293.         iKeys |= (1<<7);
  294.     }
  295.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\d[#] \d%L^n", id, "JBE_MENU_AR4_MODE_HOOK_TARGET_MENU_FALLS");
  296.     if(get_user_flags(id) & ADMIN_RESERVATION)
  297.     {
  298.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w9\r] \w%L^n", id, g_iHookEnable ? "JBE_AR4_MODE_HOOK_ENABLE" : "JBE_AR4_MODE_HOOK_DISABLE");
  299.         iKeys |= (1<<8);
  300.     }
  301.     else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[#] %L^n", id, g_iHookEnable ? "JBE_AR4_MODE_HOOK_ENABLE" : "JBE_AR4_MODE_HOOK_DISABLE");
  302.     formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r[\w0\r] \w%L", id, "JBE_MENU_AR4_MODE_EXIT");
  303.     return show_menu(id, iKeys, szMenu, -1, "Show_HookMenu");
  304. }
  305.  
  306. public Handle_HookMenu(id, iKey)
  307. {
  308.     switch(iKey)
  309.     {
  310.         case 0:
  311.         {
  312.             if(g_iHookEnable)
  313.             {
  314.                 ++szPlayerColor[id];
  315.                 if(szPlayerColor[id] == g_HookColorNum + 1) szPlayerColor[id] = 1;
  316.             }  
  317.         }
  318.         case 1:
  319.         {
  320.             if(g_iHookEnable)
  321.             {
  322.                 ++szPlayerSprite[id]
  323.                 if(szPlayerSprite[id] == g_HookSpriteNum + 1) szPlayerSprite[id] = 1
  324.             }
  325.         }
  326.         case 2:
  327.         {
  328.             if(g_iHookEnable)
  329.             {
  330.                 ++szPlayerSize[id]
  331.                 if(szPlayerSize[id] == 4) szPlayerSize[id] = 0
  332.             }  
  333.         }
  334.         case 3:
  335.         {
  336.             if(g_iHookEnable)
  337.             {
  338.                 ++szPlayerSound[id]
  339.                 if(szPlayerSound[id] == g_HookSoundNum + 1) szPlayerSound[id] = 1
  340.             }  
  341.         }  
  342.         case 4:
  343.         {
  344.             if(g_iHookEnable)
  345.             {
  346.                 ++szPlayerSpeed[id]
  347.                 if(szPlayerSpeed[id] == 3) szPlayerSpeed[id] = 0
  348.             }  
  349.         }
  350.         case 5:
  351.         {
  352.             if(g_iHookEnable)
  353.             {
  354.                 ++szPlayerView[id]
  355.                 if(szPlayerView[id] == 3) szPlayerView[id] = 0
  356.             }  
  357.         }
  358.         case 6:
  359.         {
  360.             if(g_iHookEnable)
  361.             {
  362.                 ++szPlayerEndSprite[id]
  363.                 if(szPlayerEndSprite[id] == 5) szPlayerEndSprite[id] = 0
  364.             }
  365.         }
  366.         case 7: if(g_iHookEnable) return Cmd_HookTargetMenu(id);
  367.         case 8:
  368.         {
  369.             new szName[32]; get_user_name(id, szName, charsmax(szName))
  370.             if(g_iHookEnable)
  371.             {
  372.                 g_iHookEnable = false
  373.                 ChatColor(0, "%L", id, "JBE_MENU_AR4_MODE_HOOK_OFF_CHAT", szName)
  374.             }
  375.             else
  376.             {
  377.                 g_iHookEnable = true
  378.                 ChatColor(0, "%L", id, "JBE_MENU_AR4_MODE_HOOK_ON_CHAT", szName)
  379.             }  
  380.         }
  381.         case 9: return PLUGIN_HANDLED;
  382.     }
  383.     return Show_HookMenu(id);
  384. }
  385.  
  386. public Cmd_HookTargetMenu(id) return Show_HookTargetMenu(id, g_iMenuPosition[id] = 0);
  387. Show_HookTargetMenu(id, iPos)
  388. {
  389.     new iPlayersNum;
  390.     for(new i = 1; i <= 32; i++)
  391.     {
  392.         if(!is_user_connected(i)) continue;
  393.         g_iMenuPlayers[id][iPlayersNum++] = i;
  394.     }
  395.     new iStart = iPos * PLAYERS_PER_PAGE;
  396.     if(iStart > iPlayersNum) iStart = iPlayersNum;
  397.     iStart = iStart - (iStart % 8);
  398.     g_iMenuPosition[id] = iStart / PLAYERS_PER_PAGE;
  399.     new iEnd = iStart + PLAYERS_PER_PAGE;
  400.     if(iEnd > iPlayersNum) iEnd = iPlayersNum;
  401.     new szMenu[512], iLen, iPagesNum = (iPlayersNum / PLAYERS_PER_PAGE + ((iPlayersNum % PLAYERS_PER_PAGE) ? 1 : 0));
  402.     switch(iPagesNum)
  403.     {
  404.         case 0:
  405.         {
  406.             ChatColor(id, "%L", id, "JBE_HOOK_AR4_MODE_PLAYER");
  407.             return PLUGIN_HANDLED;
  408.         }
  409.         default: iLen = formatex(szMenu, charsmax(szMenu), "\y%L^n^n", id, "JBE_HOOK_AR4_MODE_TARGET_HOOK", iPos + 1, iPagesNum);
  410.     }
  411.     new szName[32], i, iKeys = (1<<9), b;
  412.     for(new a = iStart; a < iEnd; a++)
  413.     {
  414.         i = g_iMenuPlayers[id][a];
  415.         get_user_name(i, szName, charsmax(szName));
  416.         iKeys |= (1<<b);
  417.         iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r[\w%d\r] \w%s %L^n", ++b, szName, i, szPlayerHook[i] ? "JBE_HOOK_AR4_MODE_HOOK_TAKE" : "JBE_HOOK_AR4_MODE_HOOK_GIVE");
  418.     }
  419.     for(new i = b; i < PLAYERS_PER_PAGE; i++) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
  420.     if(iEnd < iPlayersNum)
  421.     {
  422.         iKeys |= (1<<8);
  423.         formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r[\w9\r] \w%L^n\r[\w0\r] \w%L", id, "JBE_MENU_AR4_MODE_NEXT", id, iPos ? "JBE_MENU_AR4_MODE_BACK" : "JBE_MENU_AR4_MODE_EXIT");
  424.     }
  425.     else formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r[\w0\r] \w%L", id, iPos ? "JBE_MENU_AR4_MODE_BACK" : "JBE_MENU_AR4_MODE_EXIT");
  426.     return show_menu(id, iKeys, szMenu, -1, "Show_HookTargetMenu");
  427. }
  428.  
  429. public Handle_HookTargetMenu(id, iKey)
  430. {
  431.     switch(iKey)
  432.     {
  433.         case 8: return Show_HookTargetMenu(id, ++g_iMenuPosition[id]);
  434.         case 9: return Show_HookTargetMenu(id, --g_iMenuPosition[id]);
  435.         default:
  436.         {
  437.             new iTarget = g_iMenuPlayers[id][g_iMenuPosition[id] * PLAYERS_PER_PAGE + iKey];
  438.             new szName[32], szTargetName[32];
  439.             get_user_name(id, szName, charsmax(szName))
  440.             get_user_name(iTarget, szTargetName, charsmax(szTargetName))
  441.             if(!szPlayerHook[iTarget])
  442.             {
  443.                 szPlayerSpeed[iTarget] = szPlayerSpeed[id]
  444.                 szPlayerSize[iTarget] = szPlayerSize[id]
  445.                 szPlayerColor[iTarget] = szPlayerColor[id]
  446.                 szPlayerSound[iTarget] = szPlayerSound[id]
  447.                 szPlayerSprite[iTarget] = szPlayerSprite[id]
  448.                 szPlayerEndSprite[iTarget] = szPlayerEndSprite[id]
  449.                 szPlayerView[iTarget] = szPlayerView[id]
  450.                 szPlayerHook[iTarget] = true
  451.                 ChatColor(0, "%L", LANG_PLAYER, "JBE_HOOK_AR4_MODE_HOOK_GIVE_CHAT", szName, szTargetName)
  452.             }
  453.             else
  454.             {
  455.                 szPlayerHook[iTarget] = false
  456.                 ChatColor(0, "%L", LANG_PLAYER, "JBE_HOOK_AR4_MODE_HOOK_TAKE_CHAT", szName, szTargetName)
  457.             }
  458.         }
  459.     }
  460.     return Show_HookTargetMenu(id, g_iMenuPosition[id]);
  461. }
  462.  
  463. public HookOn(id)
  464. {
  465. #if defined JBE_CORE
  466.     if(jbe_get_day_mode() > 2 || jbe_is_user_wanted(id)) return PLUGIN_HANDLED;
  467. #endif 
  468.     if(is_user_alive(id) && szPlayerHook[id] && g_iHookEnable)
  469.     {
  470.         get_user_origin(id, szPlayerHookOrigin[id], 3) 
  471.         if(callfunc_begin("detect_cheat", "prokreedz.amxx") == 1)
  472.         {
  473.             callfunc_push_int(id)
  474.             callfunc_push_str("Hook")
  475.             callfunc_end()
  476.         }
  477.         emit_sound(id, CHAN_STATIC, g_HookSoundFile[szPlayerSound[id]], 1.0, ATTN_NORM, 0, PITCH_NORM)
  478.         set_task(0.1, "HookTask", id, "", 0, "ab")
  479.         HookTask(id)
  480.         szBreakEnd[id] = szPlayerEndSprite[id] + 1;
  481.         break_end(id);     
  482.     }
  483.     return PLUGIN_HANDLED;
  484. }
  485.  
  486. public HookOff(id)
  487. {
  488.     RemoveHook(id)
  489.     return PLUGIN_HANDLED
  490. }
  491.  
  492. public HookTask(id)
  493. {
  494. #if defined JBE_CORE
  495.     if(jbe_is_user_wanted(id)) RemoveHook(id)
  496. #endif
  497.     if(!is_user_connected(id) || !is_user_alive(id)) RemoveHook(id)
  498.     RemoveBeam(id)
  499.     DrawHook(id)
  500.     new szOrigin[3], Float:szVelocity[3]
  501.     get_user_origin(id, szOrigin)
  502.     new szDistance = get_distance(szPlayerHookOrigin[id], szOrigin)
  503.     if(szDistance > 25)  
  504.     {
  505.         if(szPlayerSpeed[id] == 0)
  506.         {
  507.             szVelocity[0] = (szPlayerHookOrigin[id][0] - szOrigin[0]) * (3.0 * 280 / szDistance)
  508.             szVelocity[1] = (szPlayerHookOrigin[id][1] - szOrigin[1]) * (3.0 * 280 / szDistance)
  509.             szVelocity[2] = (szPlayerHookOrigin[id][2] - szOrigin[2]) * (3.0 * 280 / szDistance)
  510.         }
  511.         else if(szPlayerSpeed[id] == 1)
  512.         {
  513.             szVelocity[0] = (szPlayerHookOrigin[id][0] - szOrigin[0]) * (3.0 * 150 / szDistance)
  514.             szVelocity[1] = (szPlayerHookOrigin[id][1] - szOrigin[1]) * (3.0 * 150 / szDistance)
  515.             szVelocity[2] = (szPlayerHookOrigin[id][2] - szOrigin[2]) * (3.0 * 150 / szDistance)
  516.         }
  517.         else if(szPlayerSpeed[id] == 2)
  518.         {
  519.             szVelocity[0] = (szPlayerHookOrigin[id][0] - szOrigin[0]) * (3.0 * 400 / szDistance)
  520.             szVelocity[1] = (szPlayerHookOrigin[id][1] - szOrigin[1]) * (3.0 * 400 / szDistance)
  521.             szVelocity[2] = (szPlayerHookOrigin[id][2] - szOrigin[2]) * (3.0 * 400 / szDistance)
  522.         }
  523.         entity_set_vector(id, EV_VEC_velocity, szVelocity)
  524.     }
  525. }
  526.  
  527. public DrawHook(id)
  528. {
  529.     new szSize, szView
  530.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  531.     write_byte(1)
  532.     write_short(id)
  533.     write_coord(szPlayerHookOrigin[id][0])
  534.     write_coord(szPlayerHookOrigin[id][1])
  535.     write_coord(szPlayerHookOrigin[id][2])
  536.     write_short(g_HookSpriteMsg[szPlayerSprite[id]])
  537.     write_byte(7)
  538.     write_byte(7)
  539.     write_byte(100)
  540.     switch(szPlayerSize[id])
  541.     {
  542.         case 0: szSize = 34
  543.         case 1: szSize = 18
  544.         case 2: szSize = 48
  545.         case 3: szSize = 80
  546.     }  
  547.     write_byte(szSize)
  548.     switch(szPlayerView[id])
  549.     {
  550.         case 0: szView = 0
  551.         case 1: szView = 7
  552.         case 2: szView = 35
  553.     }  
  554.     write_byte(szView)
  555.     write_byte(g_HookColorRGB[szPlayerColor[id]][0])
  556.     write_byte(g_HookColorRGB[szPlayerColor[id]][1])
  557.     write_byte(g_HookColorRGB[szPlayerColor[id]][2])
  558.     write_byte(250)
  559.     write_byte(7)
  560.     message_end()
  561. }
  562.  
  563. public RemoveHook(id)
  564. {
  565.     if(task_exists(id))
  566.         remove_task(id)
  567.     RemoveBeam(id)
  568. }
  569.  
  570. public RemoveBeam(id)
  571. {
  572.     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  573.     write_byte(99)
  574.     write_short(id)
  575.     message_end()
  576. }
  577.  
  578. public break_end(id)
  579. {
  580.     new origin[3], szSprite;
  581.     switch(szBreakEnd[id])
  582.     {
  583.         case 1: szSprite = g_pEndSpriteBreak[0];
  584.         case 2: szSprite = g_pEndSpriteBreak[1];
  585.         case 3: szSprite = g_pEndSpriteBreak[2];
  586.         case 4: szSprite = g_pEndSpriteBreak[3];
  587.     }
  588.     get_user_origin(id,origin,3)
  589.     message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
  590.     write_byte(TE_SPRITETRAIL)
  591.     write_coord(origin[0])
  592.     write_coord(origin[1])
  593.     write_coord(origin[2]+20)
  594.     write_coord(origin[0])
  595.     write_coord(origin[1])
  596.     write_coord(origin[2]+80)
  597.     write_short(szSprite); 
  598.     write_byte(30);
  599.     write_byte(20);
  600.     write_byte(2);
  601.     write_byte(20);
  602.     write_byte(10);
  603.     message_end()
  604. }
  605.  
  606. stock ChatColor(const id, const input[], any:...)
  607. {
  608.     new count = 1, players[32]
  609.     static msg[191]
  610.     vformat(msg, 190, input, 3)
  611.     replace_all(msg, 190, "!g", "^4")
  612.     replace_all(msg, 190, "!y", "^1")
  613.     replace_all(msg, 190, "!t", "^3")
  614.     if (id) players[0] = id; else get_players(players, count, "ch")
  615.     {
  616.         for (new i = 0; i < count; i++)
  617.         {
  618.             if (is_user_connected(players[i]))
  619.             {
  620.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  621.                 write_byte(players[i]);
  622.                 write_string(msg);
  623.                 message_end();
  624.             }
  625.         }
  626.     }
  627. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top