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

ryancoolround

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

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

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

Мир изменился, он стал другим!

Ссылка на комментарий
Поделиться на другие сайты

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

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

Мир изменился, он стал другим!

Ссылка на комментарий
Поделиться на другие сайты

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

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

Мир изменился, он стал другим!

Ссылка на комментарий
Поделиться на другие сайты

  • 9 месяцев спустя...
  • Администратор
В 01.02.2021 в 22:33, Райан сказал:

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

Скрипт, который подсказал игрок NOLLI (У нас нет его на сайте), который в связки с этим плагином прекрасно работает.

bind k "say !voice"

Я серьезно, за целый год использования этого плагина, не додумался забиндить кнопку. :question:

Мир изменился, он стал другим!

Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...
  • Администратор

Toggle listen voice

Просмотр файла

Данный плагин добавляет команду !voice на сервер. Игрок ее прописывает, и после, для этого игрока отключаются микрофоны других игроков. Что бы снова активировать микрофоны надо снова прописать команду !voice.


 

Мир изменился, он стал другим!

Ссылка на комментарий
Поделиться на другие сайты

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

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

    На этой неделе никто репутацию не получал

  • Последние достижения

    • GAMADA повысил звание
      Lvl 1
    • Darya повысил звание
      Lvl 14
    • Mad.Eagle повысил звание
      Lvl 5
    • Mad.Eagle повысил звание
      Lvl 4
    • Plamen474 получил значок
      Бета
×
×
  • Создать...