Произведение голоса при покупке предмета :EnableTTS()

Расширение добавляет предметам 2 новых метода, связанных со звуком:

Добавляет методы:

  • ITEM:SetSoundURL(url) – url, указанный по ссылке будет воспроизведен у всех онлайн игроков, когда кто-то купит предмет
  • ITEM:SetTTSPattern(pattern) – Включает воспроизведение голосового сообщения с указанным текстом, когда кто-то покупает предмет
--[[-------------------------------------------------------------------------
Расширение добавляет предметам 2 новых метода, связанных со звуком:

# :SetSoundURL(url)
Укажите ссылку на звук и он воспроизведется у всех игроков при покупке кем-то предмета
Рекомендуется размещать звуковые файлы у себя на сайте

# :SetTTSPattern(pattern)
Включает воспроизведение голосового сообщения с указанным текстом (pattern) всем игрокам на сервере о покупке кем-то этого предмета
Пример паттерна: {nick} настолько мажористый, что потратил 50 руб на то, чтобы вы просто услышали этот текст


Файл закинуть по пути /addons/igs-modification/lua/igs/extensions/sound.lua
---------------------------------------------------------------------------]]

local STORE_ITEM = FindMetaTable("IGSItem")

function STORE_ITEM:SetSoundURL(url)
	return self:SetMeta("sound_url", url)
end

-- IGS("Кекер", "kek", 10):SetStackable():SetTTSPattern("{nick} купил кекер")
function STORE_ITEM:SetTTSPattern(pattern)
	return self:SetMeta("tts_pattern", pattern)
end

if SERVER then
	util.AddNetworkString("IGS.PLAYSOUND")

	local function phraseToTTSUrl(phrase)
		local  GOOGLE = "https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=%s&tl=ru"
		return GOOGLE:format(phrase:URLEncode())
	end

	hook.Add("IGS.PlayerPurchasedItem", "IGS.PLAYSOUND", function(pl, ITEM)
		local url

		local tts_pattern = ITEM:GetMeta("tts_pattern")
		if tts_pattern then
			local txt = tts_pattern:gsub("{nick}", pl:Nick())
			url = phraseToTTSUrl(txt)
		else
			url = ITEM:GetMeta("sound_url")
		end

		if url then
			net.Start("IGS.PLAYSOUND")
				net.WriteString(url)
			net.Broadcast()
		end
	end)

else
	local function PlayURL(url)
		sound.PlayURL(url, "2d", function(chan)
			if chan and chan:IsValid() then
				chan:Play()
			end
		end)
	end

	net.Receive("IGS.PLAYSOUND", function()
		local url = net.ReadString()
		PlayURL(url)
	end)
end

Изначальный пост в Telegram
1 лайк