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

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


Райан
Перейти к решению Решено Райан,

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

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

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

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Похожий контент

    • Автор Райан
      В данном форуме ведется набор администраторов, модераторов и людей кому интересен наш проект с административной точки зрения, для поддерживания порядка на всем сообществе IP-Gamers.
      Пример заявки для админа сервера:
      Имя; Возраст (кол-во полных лет); Город (проживание); Как можно связаться помимо форума и игры; IP адрес и его тип (статический / динамический); Ник в игре; Стаж игры Left 4 Dead 2; Знание SourceMod, Серверостроения. Опыт Администрирования (IP, адрес форума, срок); Пользовались ли читами; На каком сервере хотели бы быть администратором (один на ваш выбор); Удобное время посещения сервера (утро / день / вечер / ночь); Полезная информация о себе (Также указывайте такие качества как владение языками программирования, графическими программами и всё в таком духе). Ваш Steam ID (Можно узнать, прописав в консоли игры "Status", находясь на сервере). Пример заявки для модератора форума:
      Имя; Возраст (кол-во полных лет); Город (проживание); Как можно связаться помимо форума и игры; Заполнен ли твой профиль на форуме на 100 процентов; Есть ли 5 сообщений на форуме; Опыт модерирования (адрес форума, срок); Удобное время посещения форума (утро / день / вечер / ночь); Полезная информация о себе (Также указывайте такие качества как владение языками программирования, графическими программами и всё в таком духе). Пример заявки для модераторов группы Steam:
      Имя; Возраст (кол-во полных лет); Город (проживание); Как можно связаться помимо форума и игры; Ссылка на профиль Steam; Как долго состоишь в группе Steam; Опыт модерирования (адрес группы Steam, срок); Удобное время посещения форума (утро / день / вечер / ночь); Полезная информация о себе (Также указывайте такие качества как владение языками программирования, графическими программами и всё в таком духе). Халатное, несерьезное отношение к этой должности недопустимо. У нас очень жесткие правила, подумайте сразу, нужно вам это или нет, чтобы лишний раз не беспокоить администрацию, и не тратить свое и наше время.
      Написание заявки означает, что Вы знаете правила нашего сообщества.
      Заявки может оставить любой желающий пользователь.
      Рассмотрим все предложения!
      Решения о принятии заявки или ее отказе, могут быть обоснованы с причинами и без них, которые не обсуждаются!
      Тема закроется автоматически, спустя 3 суток.
    • Автор CHIKI_BRIKI
      Раян, прошу сделать больше нормальных причин для мута, и больше вариантов времени для них
      Просто иногда от игрока идут оскорбления заслуживающие лишь мута, и не хочется его просто банить, да, есть прописанные правила, но ранее было добрее с этим, чем выдавать мут за оски и забывать его редактировать с двух дней на меньший срок
      Просто нужна более гибкая система выдачи наказаний
      Да, я не прошу сделать сразу кучу всего
      Но можешь добавить в муты "использование музыки в чат", какое нибудь 1 день или два дня приурочить
      И главное, сделать возможным нормально выдавать мут и гаг на 16 часов (лучше на 16 часов), вместо бана
      Это может показать игрокам что хоть их общение и наказывается - всё равно игрока не выгоняют и просят успокоится
    • Автор Райан
      Новый формат изображений от Google с расширением .webp набирает популярность. Всё чаще его можно встретить на сайтах, так как он оптимизирует картинку под меньший размер без потери качества по сравнению с .jpg. В этом году его стали использовать даже у нас на IP-Gamers.NET.
      Но, при скачивании и открытии в Photoshop, такой файл выдаёт ошибку, которая говорит что Photoshop не может  прочитать этот формат.
      Что бы избежать этого, по пути:
      C:\Program Files\Adobe Photoshop 2020\Plug-ins\File Formats Вставьте файл, что я прикрепил в этом посте.
      Так же рекомендую сохранять ваши JPG теперь именно в WEBP.
      Ссылки на скачивание:
      Рекомендованная Adobe версия плагина W.rar
       
    • Автор KRUTIK
      Кислотная желчь: выжившие, которые забрели в кислотную лужу, имеют шанс забрызгать желчью и привлечь обычных инфицированных. Кислотный пул: Из-за нестабильной природы тела Спиттера, периодически пул Сплита будет вытекать под ее ногами. Кислотный слюни: Сплиттер постоянно качает головой, что иногда приводит к тому, что часть слюнявой кислоты попадает на выживших поблизости. Acidic Splash: Когда Spitter получает урон, у свежих ран есть шанс выплеснуть кислоту на любого из Выживших поблизости. Acid Swipe: Spitter использует свои покрытые кислотой пальцы, чтобы сильно ударить Survivor, нанося урон в течение долгого времени, поскольку рана горит. Удар Гидры: Позволяет Спиттеру быстро стрелять из второй косы после первой. Липкая слизь: Любой выживший, стоящий в бассейне слюны, застрянет в слизи, и ему будет сложнее быстро выйти. Supergirl: После запуска плевка Spitter покрывается защитным слоем, который медленно стекает и уменьшает весь урон, пока не исчезнет. Supergirl Speed: работает со способностью Supergirl, коса также покрывает ноги Spitters, увеличивая скорость движения в течение короткого периода после запуска косы. Изменения:
      Версия 1.5: - В коде плагина обновлен синтаксис - Обновлены подписи игровых данных Ссылки:
      Пост с версией плагина 1.5 L4D2_Spitter_Supergirl.sp l4d2_viciousplugins.txt
    • Автор Райан
      Данный плагин будет автоматически лечить выжившего, как в Call of Duty. Количество восстанавливаемого ХП указывается в конфиге.
      Пример конфига:
      // how many health buffer instanly heal after taking damage when both heal done and is going to die // - // Default: "1.0" // Minimum: "0.000000" call_of_duty_heal_fix "1.0" // lower than the health to heal // - // Default: "30.2" // Minimum: "2.100000" call_of_duty_heal_max "30.2" // how many health buffer heal once // - // Default: "1.0" // Minimum: "0.100000" call_of_duty_heal_point "1.0" // set to none-zero to remove internal heartbeat when is on thirdstrike // - // Default: "1" call_of_duty_heal_remove "1" // repeat interval after healing start // - // Default: "0.1" // Minimum: "0.100000" call_of_duty_heal_repeat "0.1" // set to none-zero to emit heartbeat when healing // - // Default: "1" call_of_duty_heal_sound "1" // how long time need to wait after taking damage // - // Default: "5.0" // Minimum: "0.100000" call_of_duty_heal_wait "5.0"  
      call_of_duty_heal.sp call_of_duty_heal.smx
  • Последние посетители   0 пользователей онлайн

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

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