name = "Round End Thrash Mix",
description = "Мусорная солянка",
int g_iMovProp, g_iFlags[MAXPLAYERS+1];
public void OnPluginStart()
g_hRemCookie = RegClientCookie("REM", "round end trash mix cookies", CookieAccess_Private);
g_iMovProp = FindSendPropInfo("CCSPlayer", "m_flLaggedMovementValue");
g_cTimeScale = FindConVar("host_timescale");
HookEvent("round_start", OnRS);
HookEvent("round_end", OnRE);
RegAdminCmd("sm_reload_rem", RR, ADMFLAG_ROOT);
RegConsoleCmd("sm_rem", RemMenu);
for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && AreClientCookiesCached(i))
OnClientCookiesCached(i);
LoadTranslations("round_end_mix.phrases");
public Action RR(int client, int args)
PrintToConsole(client, "Конфиг перезагружен!");
KeyValues KvRm = new KeyValues("REM_Settings");
BuildPath(Path_SM, sBuff, sizeof(sBuff), "configs/round_end_mix.txt");
if(!KvRm.ImportFromFile(sBuff))
LogMessage("Конфигурационный файл отсутсвует!");
LogMessage("Установлены параметры по умолчанию.");
g_bGravAllowed = view_as<bool>(KvRm.GetNum("Enable_Gravity", 1));
g_bSlowAllowed = view_as<bool>(KvRm.GetNum("Enable_Slow_Motion", 1));
g_bSpeedAllowed = view_as<bool>(KvRm.GetNum("Enable_Speed", 1));
g_bBhopAllowed = view_as<bool>(KvRm.GetNum("Enable_Bunny_hop", 1));
g_bThirdPAllowed = view_as<bool>(KvRm.GetNum("Enable_Thirdperson", 1));
g_bNoclipAllowed = view_as<bool>(KvRm.GetNum("Enable_Noclip", 1));
g_fGravValue = KvRm.GetFloat("Gravity_Value", 0.5);
g_fSlowValue = KvRm.GetFloat("Slow_Motion_Value", 0.4);
g_fSpeedValue = KvRm.GetFloat("Speed_Value", 1.5);
public void OnPluginEnd()
for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i))
public void OnClientCookiesCached(int client)
GetClientCookie(client, g_hRemCookie, sBuff, sizeof(sBuff));
g_iFlags[client] = StringToInt(sBuff);
public void OnClientDisconnect(int client)
IntToString(g_iFlags[client], sFlags, 16);
SetClientCookie(client, g_hRemCookie, sFlags);
g_bBhopOn[client] = false;
public Action RemMenu(int client, int args)
Menu menu = new Menu(RemMenuHandler);
menu.SetTitle("%t\n \n", "rem_menu");
FormatEx(sBuff, sizeof(sBuff), "%t", "gravity", g_bGravAllowed ? (g_iFlags[client] & GRAVITY) ? "+":"-":"X");
menu.AddItem("", sBuff, g_bGravAllowed ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
FormatEx(sBuff, sizeof(sBuff), "%t", "slowmotion", g_bSlowAllowed ? (g_iFlags[client] & SLOW) ? "+":"-":"X");
menu.AddItem("", sBuff, g_bSlowAllowed ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
FormatEx(sBuff, sizeof(sBuff), "%t", "speed", g_bSpeedAllowed ? (g_iFlags[client] & SPEED) ? "+":"-":"X");
menu.AddItem("", sBuff, g_bSpeedAllowed ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
FormatEx(sBuff, sizeof(sBuff), "%t", "bhop", g_bBhopAllowed ? (g_iFlags[client] & BHOP) ? "+":"-":"X");
menu.AddItem("", sBuff, g_bBhopAllowed ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
FormatEx(sBuff, sizeof(sBuff), "%t", "thirdperson", g_bThirdPAllowed ? (g_iFlags[client] & THIRDPERSON) ? "+":"-":"X");
menu.AddItem("", sBuff, g_bThirdPAllowed ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
FormatEx(sBuff, sizeof(sBuff), "%t", "noclip", g_bNoclipAllowed ? (g_iFlags[client] & NOCLIP) ? "+":"-":"X");
menu.AddItem("", sBuff, g_bNoclipAllowed ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
menu.Display(client, MENU_TIME_FOREVER);
public int RemMenuHandler(Menu menu, MenuAction action, int client, int a)
if (action == MenuAction_Select)
case 0: g_iFlags[client] ^= GRAVITY;
case 1: g_iFlags[client] ^= SLOW;
case 2: g_iFlags[client] ^= SPEED;
case 3: g_iFlags[client] ^= BHOP;
case 4: g_iFlags[client] ^= THIRDPERSON;
case 5: g_iFlags[client] ^= NOCLIP;
else if (action == MenuAction_End)
public void OnRE(Event event, const char[] name, bool dB)
public void OnRS(Event event, const char[] name, bool dB)
void TrashMix(bool RoundEnd)
for (int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && !IsFakeClient(i))
if (RoundEnd && IsPlayerAlive(i))
if (g_iFlags[i] & GRAVITY) SetEntPropFloat(i, Prop_Data, "m_flGravity", g_fGravValue);
SetEntDataFloat(i, g_iMovProp, g_fSlowValue);
SetConVarFloat(g_cTimeScale, g_fSlowValue, true);
if (g_iFlags[i] & SPEED) SetEntDataFloat(i, g_iMovProp, g_fSpeedValue);
if (g_iFlags[i] & BHOP) g_bBhopOn[i] = true;
if (g_iFlags[i] & THIRDPERSON) ClientCommand(i, "thirdperson");
if (g_iFlags[i] & NOCLIP) SetEntityMoveType(i, MOVETYPE_NOCLIP);
SetEntPropFloat(i, Prop_Data, "m_flGravity", 1.0);
SetConVarFloat(g_cTimeScale, 1.0, true);
ClientCommand(i, "firstperson");
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
if (g_bBhopOn[client] && IsPlayerAlive(client) && (buttons & IN_JUMP) && !(GetEntityFlags(client) & FL_ONGROUND) && !(GetEntityMoveType(client) & MOVETYPE_LADDER) && (GetEntProp(client, Prop_Data, "m_nWaterLevel") <= 1))