Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.21 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <clientprefs>
  3.  
  4. #pragma newdecls required
  5. #pragma semicolon 1
  6.  
  7. #define GRAVITY         (1 << 1)
  8. #define SLOW            (1 << 2)
  9. #define SPEED           (1 << 3)
  10. #define BHOP            (1 << 4)
  11. #define THIRDPERSON     (1 << 5)
  12. #define NOCLIP          (1 << 6)
  13.  
  14. #define CycleToClients(%0) for (int %0 = 1; %0 <= MaxClients; ++%0) if (IsClientInGame(%0) && !IsFakeClient(%0))
  15.  
  16. public Plugin myinfo =
  17. {
  18.     name = "Round End Thrash Mix",
  19.     author = "Tonki_Ton",
  20.     description = "Мусорная солянка",
  21.     version = "1.1.0",
  22.     url = "https://hlmod.ru"
  23. };
  24.  
  25. Handle g_hRemCookie;
  26.  
  27. ConVar g_hTimeScale;
  28.  
  29. int g_iGravMode,
  30.     g_iSlowMode,
  31.     g_iSpeedMode,
  32.     g_iBhopMode,
  33.     g_iThirdPMode,
  34.     g_iNoclipMode,
  35.     g_iFlags[MAXPLAYERS+1];
  36.  
  37. bool g_bRoundEnd;
  38.  
  39. float g_fSpeedValue,
  40.       g_fGravValue,
  41.       g_fSlowValue;
  42.  
  43. public void OnPluginStart()
  44. {
  45.     g_hRemCookie = RegClientCookie("REMCookies", "round end trash mix cookies", CookieAccess_Private);
  46.     g_hTimeScale = FindConVar("host_timescale");
  47.  
  48.     HookEvent("round_start", RoundEvents);
  49.     HookEvent("round_end", RoundEvents);
  50.  
  51.     RegAdminCmd("sm_reload_rem", RR, ADMFLAG_ROOT);
  52.     RegConsoleCmd("sm_rem", RemMenu);
  53.  
  54.     CycleToClients(i)
  55.         OnClientCookiesCached(i);
  56.  
  57.     LoadTranslations("round_end_mix.phrases");
  58. }
  59.  
  60. public Action RR(int iClient, int iArgs)
  61. {
  62.     PrintToConsole(iClient, "Конфиг перезагружен!");
  63.     OnMapStart();
  64.  
  65.     return Plugin_Handled;
  66. }
  67.  
  68. public void OnMapStart()
  69. {
  70.     char sBuff[128];
  71.  
  72.     KeyValues KvRm = new KeyValues("REM_Settings");
  73.  
  74.     BuildPath(Path_SM, sBuff, sizeof(sBuff), "configs/round_end_mix.txt");
  75.     if(!KvRm.ImportFromFile(sBuff)) LogMessage("Конфигурационный файл отсутсвует!");
  76.  
  77.     KvRm.Rewind();
  78.  
  79.     g_iGravMode = KvRm.GetNum("Gravity_Mode", 1);
  80.     g_iSlowMode = KvRm.GetNum("Slow_Motion_Mode", 1);
  81.     g_iSpeedMode = KvRm.GetNum("Speed_Mode", 1);
  82.     g_iBhopMode = KvRm.GetNum("Bunny_hop_Mode", 1);
  83.     g_iThirdPMode = KvRm.GetNum("Thirdperson_Mode", 1);
  84.     g_iNoclipMode = KvRm.GetNum("Noclip_Mode", 1);
  85.  
  86.     g_fGravValue = KvRm.GetFloat("Gravity_Value", 0.5);
  87.     g_fSlowValue = KvRm.GetFloat("Slow_Motion_Value", 0.4);
  88.     g_fSpeedValue = KvRm.GetFloat("Speed_Value", 1.5);
  89.  
  90.     delete KvRm;
  91. }
  92.  
  93. public void OnPluginEnd()
  94. {
  95.     CycleToClients(i)
  96.         OnClientDisconnect(i);
  97. }
  98.  
  99. public void OnClientCookiesCached(int iClient)
  100. {
  101.     char sBuff[16];
  102.     GetClientCookie(iClient, g_hRemCookie, sBuff, sizeof(sBuff));
  103.     if (!sBuff[0])
  104.     {
  105.         g_iFlags[iClient] ^= (g_iGravMode > 1) ? GRAVITY:0;
  106.         g_iFlags[iClient] ^= (g_iSlowMode > 1) ? SLOW:0;
  107.         g_iFlags[iClient] ^= (g_iSpeedMode > 1) ? SPEED:0;
  108.         g_iFlags[iClient] ^= (g_iBhopMode > 1) ? BHOP:0;
  109.         g_iFlags[iClient] ^= (g_iThirdPMode > 1) ? THIRDPERSON:0;
  110.         g_iFlags[iClient] ^= (g_iNoclipMode > 1) ? NOCLIP:0;
  111.         return;
  112.     }
  113.     g_iFlags[iClient] = StringToInt(sBuff);
  114. }
  115.  
  116. public void OnClientDisconnect(int iClient)
  117. {
  118.     char sFlags[16];
  119.  
  120.     IntToString(g_iFlags[iClient], sFlags, 16);
  121.     SetClientCookie(iClient, g_hRemCookie, sFlags);
  122. }
  123.  
  124. public Action RemMenu(int iClient, int iArgs)
  125. {
  126.     Menu hMenu = new Menu(RemMenuHandler);
  127.  
  128.     char sBuff[128];
  129.  
  130.     hMenu.SetTitle("%T\n \n", "rem_menu", iClient);
  131.  
  132.     FormatEx(sBuff, sizeof(sBuff), "%T", "gravity", iClient, (g_iGravMode == 1 || g_iGravMode == 2) ? (g_iFlags[iClient] & GRAVITY) ? "+":"-":"X");
  133.     hMenu.AddItem("", sBuff, (g_iGravMode == 1 || g_iGravMode == 2) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
  134.  
  135.     FormatEx(sBuff, sizeof(sBuff), "%T", "slowmotion", iClient, (g_iSlowMode == 1 || g_iSlowMode == 2) ? (g_iFlags[iClient] & SLOW) ? "+":"-":"X");
  136.     hMenu.AddItem("", sBuff, (g_iSlowMode == 1 || g_iSlowMode == 2) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
  137.  
  138.     FormatEx(sBuff, sizeof(sBuff), "%T", "speed", iClient, (g_iSpeedMode == 1 || g_iSpeedMode == 2) ? (g_iFlags[iClient] & SPEED)  ? "+":"-":"X");
  139.     hMenu.AddItem("", sBuff, (g_iSpeedMode == 1 || g_iSpeedMode == 2) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
  140.  
  141.     FormatEx(sBuff, sizeof(sBuff), "%T", "bhop", iClient, (g_iBhopMode == 1 || g_iBhopMode == 2) ? (g_iFlags[iClient] & BHOP)  ? "+":"-":"X");
  142.     hMenu.AddItem("", sBuff, (g_iBhopMode == 1 || g_iBhopMode == 2) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
  143.  
  144.     FormatEx(sBuff, sizeof(sBuff), "%T", "thirdperson", iClient, (g_iThirdPMode == 1 || g_iThirdPMode == 2) ? (g_iFlags[iClient] & THIRDPERSON)  ? "+":"-":"X");
  145.     hMenu.AddItem("", sBuff, (g_iThirdPMode == 1 || g_iThirdPMode == 2) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
  146.  
  147.     FormatEx(sBuff, sizeof(sBuff), "%T", "noclip", iClient, (g_iNoclipMode == 1 || g_iNoclipMode == 2) ? (g_iFlags[iClient] & NOCLIP)  ? "+":"-":"X");
  148.     hMenu.AddItem("", sBuff, (g_iNoclipMode == 1 || g_iNoclipMode == 2) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
  149.  
  150.     hMenu.Display(iClient, 20);
  151.     return Plugin_Handled;
  152. }
  153.  
  154. public int RemMenuHandler(Menu hMenu, MenuAction action, int iClient, int iPick)
  155. {
  156.     if (action == MenuAction_Select)
  157.     {
  158.         g_iFlags[iClient] ^= (1 << iPick+1);
  159.         RemMenu(iClient, 0);
  160.     }
  161.     else if (action == MenuAction_End)
  162.         delete hMenu;
  163. }
  164.  
  165. public void RoundEvents(Event hEvent, const char[] sName, bool bDontBroadcast)
  166. {
  167.     if (sName[6] == 'e')
  168.     {
  169.         CycleToClients(i) if (IsPlayerAlive(i))
  170.         {
  171.             if (g_iFlags[i] & GRAVITY) SetEntPropFloat(i, Prop_Data, "m_flGravity", g_fGravValue);
  172.             if (g_iFlags[i] & SLOW)
  173.             {
  174.                 SetEntPropFloat(i, Prop_Data,"m_flLaggedMovementValue", g_fSlowValue);
  175.                 SetConVarFloat(g_hTimeScale, g_fSlowValue, true);
  176.             }
  177.             if (g_iFlags[i] & SPEED) SetEntPropFloat(i, Prop_Data,"m_flLaggedMovementValue", g_fSpeedValue);
  178.             if (g_iFlags[i] & THIRDPERSON) ClientCommand(i, "thirdperson");
  179.             if (g_iFlags[i] & NOCLIP) SetEntityMoveType(i, MOVETYPE_NOCLIP);
  180.         }
  181.         g_bRoundEnd = true;
  182.     }
  183.     else
  184.     {
  185.         CycleToClients(i)
  186.         {
  187.             SetEntPropFloat(i, Prop_Data, "m_flGravity", 1.0);
  188.             SetConVarFloat(g_hTimeScale, 1.0, true);
  189.             ClientCommand(i, "firstperson");
  190.         }
  191.         g_bRoundEnd = false;
  192.     }
  193. }
  194.  
  195. public Action OnPlayerRunCmd(int iClient, int &iButtons, int &iImpulse, float fVel[3], float fAng[3], int &iWeapon)
  196. {
  197.     if (g_bRoundEnd && (g_iFlags[iClient] & BHOP) && IsPlayerAlive(iClient) && (iButtons & IN_JUMP) && !(GetEntityFlags(iClient) & FL_ONGROUND) && !(GetEntityMoveType(iClient) & MOVETYPE_LADDER) && (GetEntProp(iClient, Prop_Data, "m_nWaterLevel") <= 1))
  198.         iButtons &= ~IN_JUMP;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement