Перейти к содержанию

Принудительное завершение игры и объявление команды победителя (SM_WINNER)


Ry@N

Рекомендуемые сообщения

  • Администратор

Это плагин для менеджмента (управления) каткой. Если админ вводит команду sm_winner ct/t, то игра завершается со счетом в пользу выбранной команды.

Плагин проверялся в игре Counter-Strike: Source, на версии SourceMod 1.10.0.6501.

Установка:

  • Скомпилируйте .sp файл и поместите его в /addons/sourcemod/plugins
  • Или поместите уже готовый .smx файл в /addons/sourcemod/plugins
  • Сделайте рестарт сервера.
#pragma newdecls required

#include <sourcemod>
#include <sdktools>
#include <cstrike>

public Plugin myinfo =  {
	name = "Winner", 
	author = "Ilusion9", 
	description = "При прописи команды sm_winner (CT/T) идет принудительное завершение игры и объявление победителя", 
	version = "1.0", 
	url = "https://ip-gamers.net/"
};

ConVar g_Cvar_MaxRounds;
ConVar g_Cvar_Timelimit;
ConVar g_Cvar_RoundRestartDelay;

public void OnPluginStart()
{
    g_Cvar_MaxRounds = FindConVar("mp_maxrounds");
    g_Cvar_Timelimit = FindConVar("mp_timelimit");
    g_Cvar_RoundRestartDelay = FindConVar("mp_round_restart_delay");
    
    RegConsoleCmd("sm_winner", Command_Winner);
}

public Action Command_Winner(int client, int args)
{
    char arg[64];
    GetCmdArg(1, arg, sizeof(arg));
    
    if (StrEqual(arg, "T", false))
    {
        EndGame(CS_TEAM_T);
    }
    else if (StrEqual(arg, "CT", false))
    {
        EndGame(CS_TEAM_CT);
    }
    
    return Plugin_Handled;
}

void EndGame(int winner)
{
    if (winner == CS_TEAM_T)
    {
        CS_SetTeamScore(CS_TEAM_T, g_Cvar_MaxRounds.IntValue / 2);
        SetTeamScore(CS_TEAM_T, g_Cvar_MaxRounds.IntValue / 2);
        
        CS_SetTeamScore(CS_TEAM_CT, 0);
        SetTeamScore(CS_TEAM_CT, 0);
        
        CS_TerminateRound(g_Cvar_RoundRestartDelay.FloatValue, CSRoundEnd_TerroristWin);
    }
    else
    {
        CS_SetTeamScore(CS_TEAM_CT, g_Cvar_MaxRounds.IntValue / 2);
        SetTeamScore(CS_TEAM_CT, g_Cvar_MaxRounds.IntValue / 2);
        
        CS_SetTeamScore(CS_TEAM_T, 0);
        SetTeamScore(CS_TEAM_T, 0);
        
        CS_TerminateRound(g_Cvar_RoundRestartDelay.FloatValue, CSRoundEnd_CTWin);
    }
    
    g_Cvar_Timelimit.SetInt(1);
}

 

winner.sp winner.smx

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

Ссылка на комментарий
  • Похожий контент

    • Автор Ry@N
      Версия плагина 2.1.3, изменения:
      Remke code Исправлена ошибка предыдущей памяти Исправлена утечка памяти Powerup возвращается в норму, когда игрок меняет команду или умирает Новая функция:
      Адреналин заставляет вас быстрее реагировать на нокдауны. Обновление cfg:
      Были добавлены новые переменные, поэтому удалите старую конфигурацию переменных, что бы вместо нее сгенерировалась новая. Новая конфигурация:
      // Нужно ли давать игрокам адреналин в начале раунда? l4d_powerups_adren_give_on "0" // Скорость восстановления l4d_powerups_animspeed "2.0" // Следует ли уведомлять игроков при подключении к серверу о бонусах? l4d_powerups_broadcast_on "1" // Как уведомляются игроки? (0 = Чат, 1 = Хинт 2 = Оба) l4d_powerups_broadcast_type "1" // Как долго должны длиться бусты? l4d_powerups_duration "20" // Нужно ли давать игрокам таблетки в начале раунда? l4d_powerups_pills_give_on "0" // Фактор удачи при проглатывании таблеток, которые дадут импульс. (1 = 1/1 2 = 1/2 3 = 1/3 4 = 1/4) l4d_powerups_pills_luck "3" // Включен ли плагин? l4d_powerups_plugin_on "1" // Нужно ли давать игрокам адреналин или таблетки в начале раунда? l4d_powerups_random_give_on "0" // Следует ли игрокам использовать адреналин для супер-перезарядки, стрельбы из оружия и рукопашных ударов? l4d_powerups_use_on "1" // Интервал между выстрелами умножается на это значение. ВНИМАНИЕ: достаточно короткий интервал приведет к искажению точности стрельбы из пистолетов-пулеметов и винтовок. l4d_powerups_weaponfiring_rate "0.6667" // Интервал размахивания холодного оружия l4d_powerups_weaponmelee_rate "0.45" // Интервал, возникающий при перезагрузке, умножается на это значение l4d_powerups_weaponreload_rate "0.5714" Команды плагина:
      sm_giveadren - Дать адреналин всем выжившим. (ADMFLAG_CHEATS) sm_givepills - Дать таблетки всем выжившим. (ADMFLAG_CHEATS) sm_giverandom - Дать или таблетки или адреналин всем выжившим. (ADMFLAG_CHEATS) Плагин мной не проверялся, так как в данный момент у меня нет тестового сервера для Left 4 Dead 2.
      l4d2_powerups_rush.smx l4d2_powerups_rush.sp
    • Автор Ry@N
      У меня сейчас нет тестового сервера по Left 4 Dead 2, поэтому я не проверял этот плагин. Если у вас есть возможность проверить его, будьте добры, не забудьте отписаться здесь после проверки этого плагина. Спасибо.
      Добавлен минимум обратного урона. Добавлены шансы на отсутствие обратного урона. Добавлен таймер для автоматического сброса шансов. Добавлено сообщение о повреждении от коктейля Молотова. Добавлены новые языки в языковой пакет плагина Добавлен подсчет общего урона для уменьшения сообщения в чате Изменен цвет текста для стиля от сервера pan0s. l4d2_reverse_ff.smx l4d2_reverse_ff.sp l4d2_reverse_ff.phrases.txt
    • Автор Ry@N
      Это вторая сборка сервера для Left 4 Dead 2 была скопирована с FTP 24.09.2020. Rcon пароль скрыт, в Database.cfg ничего секретного нету. ID группы Steam скрыто. Это такая легкая сборка, которую вам надо залить на чистый сервер, удалить ненужные для вас плагины из папки Plugins и накатить свои. Ничего особенного и сверхъестественного в сборке нет. Просто, я ее сейчас копировал на второй сервер, ну и архивом решил поделится (Ну а для чего этот сайт еще?).
      Если загрузить сборку на сервер, и сразу после этого включить сервер, то по стандарту запустится Выживание.
      Версия сервера L4D2: 2.1.5.5 7311 ОС Сервера: Linux Dedicated Установлен Metamod: Metamod:Source 1.10.7-dev Подключенные библиотеки:
      Плагины входящие в сборку:
      Подключенные расширения:
      Ссылка на скачивание с Google Диска.
      Данная сборка сервера для Left 4 Dead 2 предназначена только для ознакомления. Если вы решите ее просто скопировать и вставить на свой сервер не редактируя, то у вас может что то пойти не так. Будьте внимательны и трудолюбивы.
    • Автор Ry@N
      Данный плагин добавляет команду !voice на сервер. Игрок ее прописывает, и после, для этого игрока отключаются микрофоны других игроков. Что бы снова активировать микрофоны надо снова прописать команду !voice.
      Так как мое файловое хранилище постоянно обновляется, и плагин может быть удален, выкладываю исходники в виде кода.
      voice.sp:
      #include <sdktools_voice> #include <clientprefs> ListenOverride g_userFlag[MAXPLAYERS + 1]; Handle g_hCookie; bool g_bVoiceEnable[MAXPLAYERS + 1] = true; public Plugin myinfo = { name = "Voice", author = "bat9xxx", version = "1.0", url = "vk.com/s_plus2018" }; public void OnPluginStart() { RegConsoleCmd("sm_voice", VoiceChange); LoadTranslations(GetEngineVersion() == Engine_SourceSDK2006 ? "voice_old.phrases" : "voice.phrases"); g_hCookie = RegClientCookie("voice_enable", "Включен/выключен", CookieAccess_Public); } public void OnClientCookiesCached(int iClient) { char szValue[4]; GetClientCookie(iClient, g_hCookie, szValue, sizeof(szValue)); if (szValue[0])g_bVoiceEnable[iClient] = view_as<bool>(StringToInt(szValue)); else g_bVoiceEnable[iClient] = true; } public Action VoiceChange(int iClient, int iArgs) { char szBuffer[128]; if (g_bVoiceEnable[iClient] == false) { g_bVoiceEnable[iClient] = true; SetClientCookie(iClient, g_hCookie, "1"); FormatEx(szBuffer, sizeof(szBuffer), "%t %t", "Prefix", "Enable"); g_userFlag[iClient] = Listen_Yes; } else { g_bVoiceEnable[iClient] = false; SetClientCookie(iClient, g_hCookie, "0"); FormatEx(szBuffer, sizeof(szBuffer), "%t %t", "Prefix", "Disable"); g_userFlag[iClient] = Listen_No; } PrintToChat2(iClient, szBuffer); for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsFakeClient(i)) { SetListenOverride(iClient, i, g_userFlag[iClient]); } } } public void OnClientPutInServer(int iClient) { g_userFlag[iClient] = g_bVoiceEnable[iClient] ? Listen_Yes : Listen_No; } stock void PrintToChat2(int iClient, char[] szMessage, any...) { static int iEngine = -1; static const int g_iColorsCSSOB[] = { 0xFFFFFF, 0xFF0000, 0x00AD00, 0x00FF00, 0x99FF99, 0xFF4040, 0xCCCCCC, 0xFFBD6B, 0xFA8B00, 0x99CCFF, 0x3D46FF, 0xFA00FA }; static const char g_sColorsOldBefore[][] = { "{DEFAULT}", "{TEAM}", "{GREEN}" }, g_sColorsOldCSS[][] = { "\x01", "\x03", "\x04" }, g_sColorsBefore[][] = { "{WHITE}", "{RED}", "{GREEN}", "{LIME}", "{LIGHTGREEN}", "{LIGHTRED}", "{GRAY}", "{LIGHTOLIVE}", "{OLIVE}", "{LIGHTBLUE}", "{BLUE}", "{PURPLE}" }, g_sColorsCSGO[][] = { "\x01", "\x02", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x10", "\x0B", "\x0C", "\x0E" }; if (iClient && IsClientInGame(iClient) && !IsFakeClient(iClient)) { char szBuffer[PLATFORM_MAX_PATH], szNewMessage[PLATFORM_MAX_PATH]; if (iEngine == -1) { switch (GetEngineVersion()) { case Engine_CSGO:iEngine = 0; case Engine_CSS:iEngine = 1; case Engine_SourceSDK2006:iEngine = 2; } } Format(szBuffer, sizeof(szBuffer), !iEngine ? " \x01%s" : "\x01%s", szMessage); VFormat(szNewMessage, sizeof(szNewMessage), szBuffer, 3); if (!iEngine) { for (int i = 0; i < 12; i++) { ReplaceString(szNewMessage, sizeof(szNewMessage), g_sColorsBefore[i], g_sColorsCSGO[i]); } ReplaceString(szNewMessage, sizeof(szNewMessage), "{TEAM}", "\x03"); } else { if (iEngine == 1) { char sBuff[64]; switch (GetClientTeam(iClient)) { case 1:Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[6]); case 2:Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[5]); case 3:Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[9]); } ReplaceString(szNewMessage, sizeof(szNewMessage), "{TEAM}", sBuff); for (int i = 0; i < 12; i++) { Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[i]); ReplaceString(szNewMessage, sizeof(szNewMessage), g_sColorsBefore[i], sBuff); } } else { for (int i = 0; i < 3; i++) { ReplaceString(szNewMessage, sizeof(szNewMessage), g_sColorsOldBefore[i], g_sColorsOldCSS[i]); } } } Handle hBf = StartMessageOne("SayText2", iClient, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); if (hBf) { if (GetUserMessageType() == UM_Protobuf) { Protobuf hProtoBuffer = UserMessageToProtobuf(hBf); hProtoBuffer.SetInt("ent_idx", iClient); hProtoBuffer.SetBool("chat", true); hProtoBuffer.SetString("msg_name", szNewMessage); hProtoBuffer.AddString("params", ""); hProtoBuffer.AddString("params", ""); hProtoBuffer.AddString("params", ""); hProtoBuffer.AddString("params", ""); } else { BfWrite hBfBuffer = UserMessageToBfWrite(hBf); hBfBuffer.WriteByte(iClient); hBfBuffer.WriteByte(true); hBfBuffer.WriteString(szNewMessage); } } EndMessage(); } } voice.phrases:
      "Phrases" { "Prefix" { "en" "{RED}[Voice]" "ru" "{RED}[Voice]" } "Enable" { "en" "{BLUE}Now everyone can hear!" "ru" "{BLUE}Теперь слышно всех!" } "Disable" { "en" "{BLUE}Now you can't hear anyone" "ru" "{BLUE}Теперь никого не слышно!" } } voice_old.phrases:
      "Phrases" { "Prefix" { "en" "{TEAM}[Voice]" "ru" "{TEAM}[Voice]" } "Enable" { "en" "{GREEN}Now everyone can hear!" "ru" "{GREEN}Теперь слышно всех!" } "Disable" { "en" "{GREEN}Now you can't hear anyone" "ru" "{GREEN}Теперь никого не слышно!" } }  
      Voice.rar
    • Автор Ry@N
      Я сейчас работаю над одним сервером, на котором мне понадобилось для тестов сделать спавн только за Террористов. Для чего мне понадобился этот плагин. Он просто отключает спавн за Спецов. Может вам пригодится.
      disablect.sp disablect.smx
  • Почему треугольный хлеб вкуснее квадратного?

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу




×
×
  • Создать...