Jump to content
Existing user? Sign In

Sign In



Sign Up
Search In
  • More options...
Find results that contain...
Find results in...

Плагин добавляет команду !voice на сервер


Go to solution Solved by Ryancoolround,

Recommended Posts

Данный плагин добавляет команду !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

Link to post

Было обнаружено, что в этой версии плагина присутствует баг. Если я командой !voice заглушу игроков, а потом им снова включу микрофон, то я буду слышать всех игроков, даже тех, которых не должен, из за раздельного чата.

Link to post

Вот версия, где данный баг исправлен. К сожалению не могу разместить плагин здесь самостоятельно из за правил сообщества, где я скачивал данный плагин. Но ссылку на пост я оставил.

Link to post

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Ryancoolround
      Я сейчас работаю над одним сервером, на котором мне понадобилось для тестов сделать спавн только за Террористов. Для чего мне понадобился этот плагин. Он просто отключает спавн за Спецов. Может вам пригодится.
      disablect.sp disablect.smx
    • By Ryancoolround
      Sourcemod на серверах обновлен до версии 1.10 - build 6501. Ни один плагин при обновлении не пострадал. Все работает в штатном режиме.
      Адреса серверов вы можете получить тут.
       
    • By Ryancoolround
      Это вторая сборка сервера для 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 предназначена только для ознакомления. Если вы решите ее просто скопировать и вставить на свой сервер не редактируя, то у вас может что то пойти не так. Будьте внимательны и трудолюбивы.
    • By Ryancoolround
      Этот плагин добавляет в подсказку "Hint" ваше здоровье. Удобно настраивается через CFG, что бы плагин отображал хп только в том случае, если вас ударили. При первом запуске генерируется следующий CFG файл:
      // This file was auto-generated by SourceMod (v1.10.0.6492) // ConVars for plugin "showhealth.smx" // 0 - Выключено, 1 - Включено // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" sm_show_health "1" // 0 - Показать всегда, 1 - Показать когда ударили // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" sm_show_health_on_hit_only "1" // 1 - Отобразить внизу (Хинт), 2 - В центре вверху // - // Default: "1" // Minimum: "1.000000" // Maximum: "2.000000" sm_show_health_text_area "1" Компиляция была произведена на SM 1.10.0.6492
      Установка:
      Скомпилировать .sp файл и поместить плагин в /left4dead2/addons/sourcemod/plugins Либо уже готовый .smx файл поместить в /left4dead2/addons/sourcemod/plugins Файл showhealth.phrases поместить в /left4dead2/addons/sourcemod/translations Сделать рестарт сервера. showhealth.phrases.txt showhealth.sp showhealth.smx
    • By Ryancoolround
      При стрельбе игрок увидит искры от пуль. Выглядит динамичнее и атмосфернее.
      Плагин компилировался на версии SM 1.10.0.6492
      Установка:
      Скомпилируйте .sp файл и поместите его в /left4dead2/addons/sourcemod/plugins Или поместите уже готовый .smx файл в /left4dead2/addons/sourcemod/plugins Сделайте рестарт сервера.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...