Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.48 KB | None | 0 0
  1. #include <lvl_ranks>
  2. #include <clientprefs>
  3.  
  4. /*
  5. /   Версия 1.0
  6. /       Релиз
  7. /   Версия 1.1
  8. /       Фикс ошибки Divide by zero
  9. /           Line 153, levelsranks_hud_info.sp::ShowInfo
  10. /       Фикс ошибок связаных с фалом перевода / Фикс файла перевода
  11. /       Добавлен квар "sm_levels_ranks_hud_info_for_whom" [Кому отображать худ]
  12. /       Добавлена команда "sm_lrhud" для вкл/выкл отображения худа при "sm_levels_ranks_hud_info_for_whom 0"
  13. /   Версия 1.2
  14. /       Переделана команда sm_lrhud и добавлена sm_lvlhud (которык открывают меню с настройками)
  15. /       Добавлен квар "sm_levels_ranks_hud_info_position_1920_1080" и "sm_levels_ranks_hud_info_position_1280_1024" [Расположение худа для 2 разрешений]
  16. /       Добавлен квар "sm_levels_ranks_hud_info_button_score" отображать худ только [Отображать худ когда нажат TAB (только для живыш)]
  17. /       Добавлена поддержка кук (сохранения информации)
  18. /       Оптимизация
  19. /   Версия 1.3
  20. /       Переделана перезагрузка конфига ранга и плагина, через панель настроек хужа, для админов с флагом z
  21. /       Добавлен файл конфигураций [configs/levels_ranks/hud_info.ini]
  22. /       Изменен файл перевода
  23. /       Оптимизация
  24. /   Версия 1.3.1
  25. /       Фикс ошибки Client index 230 is invalid
  26. /           Line 223, levelsranks_hud_info.sp::CallBack_UpdateTimer
  27. /   Версия 1.3.2
  28. /       Попытка фикса
  29. /           Exception reported: Array index out-of-bounds (index -1, limit 19)
  30. /   Версия 1.3.3
  31. /       Мелкий фикс отображения
  32. /   Версия 1.3.4
  33. /       Вотрая попытка фикса
  34. /           Exception reported: Array index out-of-bounds (index -1, limit 19)
  35. */
  36.  
  37. bool g_bHud[MAXPLAYERS + 1],
  38.      g_bCScore,
  39.      g_bResolution[MAXPLAYERS + 1];
  40.  
  41. int g_iColors[4],
  42.     g_iStats[MAXPLAYERS + 1][7],
  43.     g_iFW,
  44.     g_iInform[7];
  45.  
  46. float g_fPostion[4],
  47.       g_fUpdateTimer;
  48.  
  49. char g_szRankName[19][128];
  50.  
  51. Handle g_hUpdateTimer,
  52.        hCookie_H,
  53.        hCookie_R;
  54.  
  55. #include "levels_ranks/hud_info/convar.sp"
  56.  
  57. public Plugin myinfo =
  58. {
  59.     name        = "[LR] Module - Hud Info",
  60.     author      = "Faya™ (DS: Faya™#8514)",
  61.     version     = "1.3.4 [PUBLIC]",
  62.     url         = "http://hlmod.ru"
  63. };
  64.  
  65. public void OnPluginStart()
  66. {
  67.     RegConsoleCmd("sm_lvlhud", rccHud);
  68.     RegConsoleCmd("sm_lrhud", rccHud);
  69.     RegConsoleCmd("sm_crleoad", rccCReload);
  70.  
  71.     HookEvent("round_end", eRE, EventHookMode_PostNoCopy);
  72.     HookEvent("player_death", ePD);
  73.  
  74.     hCookie_H = RegClientCookie("LR_HUD_INFO_HUD", "LR_HUD_INFO_HUD", CookieAccess_Protected);
  75.     hCookie_R = RegClientCookie("LR_HUD_INFO_RESOLUTION", "LR_HUD_INFO_RESOLUTION", CookieAccess_Protected);
  76.  
  77.     CreateConVars();
  78.     KFG_Loading();
  79.     KFG_Loading2();
  80.  
  81.     for(int i = 1; i <= MaxClients; i++)
  82.     {
  83.         if(IsClientInGame(i) && !IsFakeClient(i) && !IsClientSourceTV(i))
  84.         {
  85.             OnClientCookiesCached(i);
  86.         }
  87.     }
  88.  
  89.     LoadTranslations("levels_ranks_hud_info.phrases.txt");
  90. }
  91.  
  92. public Action rccCReload(int iClient, int iArgs)
  93. {
  94.     if(iClient)
  95.     {
  96.         LoadTranslations("levels_ranks_hud_info.phrases.txt");
  97.     }
  98.  
  99.     return Plugin_Handled;
  100. }
  101.  
  102. public Action rccHud(int iClient, int iArgs)
  103. {
  104.     if(iClient)
  105.     {
  106.         OpenMenu(iClient);
  107.     }
  108.  
  109.     return Plugin_Handled;
  110. }
  111.  
  112. public void LR_OnPlayerLoaded(int iClient)
  113. {
  114.     GetStatsPlayer(iClient);
  115.     g_iStats[iClient][5] = LR_GetClientInfo(iClient, 8);    //Time
  116.     g_iStats[iClient][6] = GetTime();
  117. }
  118.  
  119. public void LR_OnLevelChanged(int iClient, int iNewLevel, bool bUp)
  120. {
  121.     if((g_iStats[iClient][4] = LR_GetClientPos(iClient)))       //Top
  122.     {
  123.         g_iStats[iClient][0] = LR_GetClientInfo(iClient, 0);    //Exp
  124.         g_iStats[iClient][1] = LR_GetClientInfo(iClient, 1);    //Rank
  125.     }
  126. }
  127.  
  128. public void OnClientCookiesCached(int iClient)
  129. {
  130.     char szBuffer[3];
  131.     GetClientCookie(iClient, hCookie_H, szBuffer, sizeof szBuffer);
  132.     if(szBuffer[0])
  133.     {
  134.         g_bHud[iClient] = view_as<bool>(StringToInt(szBuffer));
  135.     }
  136.     else
  137.     {
  138.         g_bHud[iClient] = true;
  139.     }
  140.  
  141.     GetClientCookie(iClient, hCookie_R, szBuffer, sizeof szBuffer);
  142.     if(szBuffer[0])
  143.     {
  144.         g_bResolution[iClient] = view_as<bool>(StringToInt(szBuffer));
  145.     }
  146.     else
  147.     {
  148.         g_bResolution[iClient] = true;
  149.     }
  150. }
  151.  
  152. public void OnClientDisconnect(int iClient)
  153. {
  154.     if(g_iStats[iClient][4] > 0)
  155.     {
  156.         char szBuffer[4];
  157.         IntToString(view_as<int>(g_bHud[iClient]), szBuffer, sizeof szBuffer);
  158.         SetClientCookie(iClient, hCookie_H, szBuffer);
  159.         IntToString(view_as<int>(g_bResolution[iClient]), szBuffer, sizeof szBuffer);
  160.         SetClientCookie(iClient, hCookie_H, szBuffer);
  161.     }
  162.  
  163.     for(int i; i < 5; i++)
  164.     {
  165.         g_iStats[iClient][i] = -1;
  166.     }
  167. }
  168.  
  169. public void eRE(Event event, const char[] name, bool dontBroadcast)
  170. {
  171.     for(int i = 1; i <= MaxClients; i++)
  172.     {
  173.         if(IsClientInGame(i) && !IsFakeClient(i) && !IsClientSourceTV(i))
  174.         {
  175.             GetStatsPlayer(i);
  176.         }
  177.     }
  178. }
  179.  
  180. public void ePD(Event event, const char[] name, bool dontBroadcast)
  181. {
  182.     int iClient[3];
  183.     iClient[0] = GetClientOfUserId(event.GetInt("userid"));     //id player died
  184.     iClient[1] = GetClientOfUserId(event.GetInt("attacker"));   //id player killer
  185.     iClient[2] = GetClientOfUserId(event.GetInt("assister"));   //id player assister
  186.  
  187.     for(int i; i < 3; i++)
  188.     {
  189.         if(iClient[i] > 0 && IsClientInGame(iClient[i]) && !IsFakeClient(iClient[i]))
  190.         {
  191.             GetStatsPlayer(iClient[i]);
  192.         }
  193.     }
  194. }
  195.  
  196. void OpenMenu(int iClient)
  197. {
  198.     Handle hMenu = CreateMenu(CallBack_Menu, MenuAction_Select|MenuAction_End);
  199.     SetMenuTitle(hMenu, "Настройка худа\n ");
  200.  
  201.     AddMenuItem(hMenu, "", g_bHud[iClient] ? "Отображение худа [Вкл]" : "Отображение худа [Выкл]");
  202.     AddMenuItem(hMenu, "", g_bResolution[iClient] ? "Расположение худа для [1920x1080]\n " : "Расположение худа для [1280x1024]\n ");
  203.  
  204.     if(GetUserFlagBits(iClient) & ADMFLAG_ROOT)
  205.     {
  206.         AddMenuItem(hMenu, "", "", ITEMDRAW_RAWLINE);
  207.         AddMenuItem(hMenu, "", "Перезагрузить конфиг званий");
  208.         AddMenuItem(hMenu, "", "Перезагрузить конфиг плагина");
  209.     }
  210.     DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
  211. }
  212.  
  213. public int CallBack_Menu(Menu hMenu, MenuAction action, int iClient, int iItem)
  214. {
  215.     switch(action)
  216.     {
  217.         case MenuAction_End:
  218.         {
  219.             CloseHandle(hMenu);
  220.         }
  221.         case MenuAction_Select:
  222.         {
  223.             switch(iItem)
  224.             {
  225.                 case 0:
  226.                 {
  227.                     g_bHud[iClient] = !g_bHud[iClient];
  228.                 }
  229.                 case 1:
  230.                 {
  231.                     g_bResolution[iClient] = !g_bResolution[iClient];
  232.                 }
  233.                 case 3:
  234.                 {
  235.                     KFG_Loading();
  236.                     PrintToChat(iClient, " \x02[LvL Hud Info] \x01Конфиг званий перезагружен");
  237.                 }
  238.                 case 4:
  239.                 {
  240.                     KFG_Loading2();
  241.                     PrintToChat(iClient, " \x02[LvL Hud Info] \x01Конфиг плагина перезагружен");
  242.                 }
  243.             }
  244.  
  245.             OpenMenu(iClient);
  246.         }
  247.     }
  248.  
  249.     return 0;
  250. }
  251.  
  252. public Action CallBack_UpdateTimer(Handle hTimer)
  253. {
  254.     static int iShowClient, iObserverMode;
  255.     for(int i = 1; i <= MaxClients; i++)
  256.     {
  257.         if(IsClientInGame(i) && !IsFakeClient(i) && !IsClientSourceTV(i) && g_iStats[i][4])
  258.         {
  259.             iShowClient = i;
  260.             if(!IsPlayerAlive(i) || IsClientObserver(i))
  261.             {
  262.                 iObserverMode = GetEntProp(i, Prop_Send, "m_iObserverMode");
  263.                 if(iObserverMode == 4 || iObserverMode == 5)
  264.                 {
  265.                     iShowClient = GetEntPropEnt(i, Prop_Send, "m_hObserverTarget");
  266.                 }
  267.             }
  268.             if(iShowClient < 0 || iShowClient > MaxClients || !IsClientInGame(iShowClient) || IsFakeClient(iShowClient) || g_iStats[iShowClient][4] < 1)
  269.             {
  270.                 iShowClient = i;
  271.             }
  272.  
  273.             ShowInfo(iShowClient, i);
  274.         }
  275.     }
  276. }
  277.  
  278. void ShowInfo(int iTarget, int iClient)
  279. {
  280.     if(IsClientInGame(iTarget) && !IsFakeClient(iTarget) && !IsClientSourceTV(iTarget) && g_iStats[iTarget][4])
  281.     {
  282.         if(g_iFW && iTarget == iClient)
  283.         {
  284.             return;
  285.         }
  286.         if(g_bCScore)
  287.         {
  288.             if(IsPlayerAlive(iClient) && !(GetClientButtons(iClient) & IN_SCORE))
  289.             {
  290.                 return;
  291.             }
  292.         }
  293.         if(!g_bHud[iClient])
  294.         {
  295.             return;
  296.         }
  297.  
  298.         static char szInfo[7][64];
  299.         if(g_iInform[0])
  300.         {
  301.             FormatEx(szInfo[0], sizeof szInfo[], "%t", "HUD_INFO_KILLS", g_iStats[iTarget][2]);
  302.         }
  303.         if(g_iInform[1])
  304.         {
  305.             if(g_iStats[iTarget][1] == -1)
  306.             {
  307.                 g_iStats[iTarget][1] = 0;
  308.             }
  309.             FormatEx(szInfo[1], sizeof szInfo[], "%t", "HUD_INFO_RANK", g_szRankName[g_iStats[iTarget][1]]);
  310.         }
  311.         if(g_iInform[2])
  312.         {
  313.             static char szTime[32];
  314.             GetStringTime((GetTime() - g_iStats[iTarget][6]) + g_iStats[iTarget][5], szTime, sizeof szTime);
  315.             FormatEx(szInfo[2], sizeof szInfo[], "%t", "HUD_INFO_TIME", szTime);
  316.         }
  317.         if(g_iInform[3])
  318.         {
  319.             FormatEx(szInfo[3], sizeof szInfo[], "%t", "HUD_INFO_KDR", g_iStats[iTarget][3] < 1 ? g_iStats[iTarget][2] + 0.0 : (g_iStats[iTarget][2] + 0.0) / (g_iStats[iTarget][3] + 0.0));
  320.         }
  321.         if(g_iInform[4])
  322.         {
  323.             FormatEx(szInfo[4], sizeof szInfo[], "%t", "HUD_INFO_POSITION", g_iStats[iTarget][4]);
  324.         }
  325.         if(g_iInform[5])
  326.         {
  327.             FormatEx(szInfo[5], sizeof szInfo[], "%t", "HUD_INFO_EXP", g_iStats[iTarget][0]);
  328.         }
  329.  
  330.         static char szBuffer[256];
  331.         if(iTarget != iClient)
  332.         {
  333.             if(g_iInform[6])
  334.             {
  335.                 FormatEx(szInfo[6], sizeof szInfo[], "%t", "HUD_INFO_TARGET", iTarget);
  336.                 FormatEx(szBuffer, sizeof szBuffer, "%t", "HUD_SHOW_INFO_TARGET", szInfo[6], g_iInform[0] ? szInfo[0] : NULL_STRING, g_iInform[1] ? szInfo[1] : NULL_STRING, g_iInform[2] ? szInfo[2] : NULL_STRING, g_iInform[3] ? szInfo[3] : NULL_STRING, g_iInform[4] ? szInfo[4] : NULL_STRING, g_iInform[5] ? szInfo[5] : NULL_STRING);
  337.             }
  338.             else
  339.             {
  340.                 FormatEx(szBuffer, sizeof szBuffer, "%t", "HUD_SHOW_INFO_TARGET", g_iInform[0] ? szInfo[0] : NULL_STRING, g_iInform[1] ? szInfo[1] : NULL_STRING, g_iInform[2] ? szInfo[2] : NULL_STRING, g_iInform[3] ? szInfo[3] : NULL_STRING, g_iInform[4] ? szInfo[4] : NULL_STRING, g_iInform[5] ? szInfo[5] : NULL_STRING);
  341.             }
  342.         }
  343.         else
  344.         {
  345.             FormatEx(szBuffer, sizeof szBuffer, "%t", "HUD_SHOW_INFO", g_iInform[0] ? szInfo[0] : NULL_STRING, g_iInform[1] ? szInfo[1] : NULL_STRING, g_iInform[2] ? szInfo[2] : NULL_STRING, g_iInform[3] ? szInfo[3] : NULL_STRING, g_iInform[4] ? szInfo[4] : NULL_STRING, g_iInform[5] ? szInfo[5] : NULL_STRING);
  346.         }
  347.  
  348.         if(g_bResolution[iClient])
  349.         {
  350.             SetHudTextParams(g_fPostion[0], g_fPostion[1], g_fUpdateTimer + 0.05, g_iColors[0] , g_iColors[1], g_iColors[2], g_iColors[3], 2 , 0.0, 0.0, 0.0);
  351.         }
  352.         else
  353.         {
  354.             SetHudTextParams(g_fPostion[2], g_fPostion[3], g_fUpdateTimer + 0.05, g_iColors[0] , g_iColors[1], g_iColors[2], g_iColors[3], 2 , 0.0, 0.0, 0.0);
  355.         }
  356.  
  357.         ShowHudText(iClient, -1, szBuffer);
  358.     }
  359. }
  360.  
  361. void GetStringTime(int time, char[] buffer, int maxlength)
  362. {
  363.     static int dims[] = {60, 60, 24, 30, 12, cellmax};
  364.     static char sign[][] = {"с", "м", "ч", "д", "м", "г"};
  365.     static char form[][] = {"%02i%s%s", "%02i%s %s", "%i%s %s"};
  366.     buffer[0] = EOS;
  367.     int i = 0, f = -1;
  368.     bool cond = false;
  369.     while(!cond)
  370.     {
  371.         if(f++ == 1) cond = true;
  372.         do
  373.         {
  374.             Format(buffer, maxlength, form[f], time % dims[i], sign[i], buffer);
  375.             if(time /= dims[i++], time == 0)
  376.             {
  377.                 return;
  378.             }
  379.         }
  380.         while(cond);
  381.     }
  382. }
  383.  
  384. void GetStatsPlayer(int iClient)
  385. {
  386.     if((g_iStats[iClient][4] = LR_GetClientPos(iClient)) > 0)       //Top
  387.     {
  388.         g_iStats[iClient][0] = LR_GetClientInfo(iClient, 0);    //Exp
  389.         g_iStats[iClient][1] = LR_GetClientInfo(iClient, 1);    //Rank
  390.         g_iStats[iClient][2] = LR_GetClientInfo(iClient, 2);    //Kills
  391.         g_iStats[iClient][3] = LR_GetClientInfo(iClient, 3);    //Deaths
  392.     }
  393. }
  394.  
  395. void ChangeColors(const char[] szBuffer)
  396. {
  397.     char szExBuffer[4][24];
  398.     ExplodeString(szBuffer, " ", szExBuffer, 4, 24);
  399.  
  400.     for(int i = 0; i <= 3; i++)
  401.     {
  402.         g_iColors[i] = StringToInt(szExBuffer[i]);
  403.     }
  404. }
  405.  
  406. void ChangePositions(const char[] szBuffer, bool bResolution)
  407. {
  408.     char szExBuffer[2][16];
  409.     ExplodeString(szBuffer, " ", szExBuffer, 2, 16);
  410.  
  411.     if(bResolution)
  412.     {
  413.         g_fPostion[0] = StringToFloat(szExBuffer[0]);
  414.         g_fPostion[1] = StringToFloat(szExBuffer[1]);
  415.     }
  416.     else
  417.     {
  418.         g_fPostion[2] = StringToFloat(szExBuffer[0]);
  419.         g_fPostion[3] = StringToFloat(szExBuffer[1]);
  420.     }
  421. }
  422.  
  423. void KFG_Loading()
  424. {
  425.     KeyValues KV = new KeyValues("LR_Settings");
  426.     char szPath[PLATFORM_MAX_PATH];
  427.     BuildPath(Path_SM, szPath, sizeof szPath, "configs/levels_ranks/settings_ranks.ini");
  428.     if(!FileToKeyValues(KV, szPath))
  429.     {
  430.         SetFailState("[Levels Ranks Hud Info] - Файл конфигураций не найден %s", szPath);
  431.     }
  432.  
  433.     KvRewind(KV);
  434.     if(KvJumpToKey(KV, "Ranks") && KvGotoFirstSubKey(KV, false))
  435.     {
  436.         do
  437.         {
  438.             if(KvGetSectionName(KV, szPath, sizeof szPath))
  439.             {
  440.                 KvGetString(KV, "name", g_szRankName[StringToInt(szPath)], sizeof g_szRankName[]);
  441.             }
  442.         }
  443.         while(KvGotoNextKey(KV));
  444.     }
  445.  
  446.     delete KV;
  447. }
  448.  
  449. void KFG_Loading2()
  450. {
  451.     KeyValues KV = new KeyValues("HUD_Settings");
  452.     char szPath[PLATFORM_MAX_PATH];
  453.     BuildPath(Path_SM, szPath, sizeof szPath, "configs/levels_ranks/hud_info.ini");
  454.     if(!FileToKeyValues(KV, szPath))
  455.     {
  456.         SetFailState("[Levels Ranks Hud Info] - Файл конфигураций не найден %s", szPath);
  457.     }
  458.  
  459.     KvRewind(KV);
  460.     if(KvJumpToKey(KV, "Settings"))
  461.     {
  462.         g_iInform[6] = KvGetNum(KV, "Nick");
  463.         g_iInform[0] = KvGetNum(KV, "Kills");
  464.         g_iInform[1] = KvGetNum(KV, "Rank");
  465.         g_iInform[2] = KvGetNum(KV, "Time");
  466.         g_iInform[3] = KvGetNum(KV, "KDR");
  467.         g_iInform[4] = KvGetNum(KV, "Top");
  468.         g_iInform[5] = KvGetNum(KV, "Exp");
  469.     }
  470.  
  471.     delete KV;
  472. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement