"Говорилка" для автодоната. Главная тема

Собрал в этой теме все самое важное с этих, чтобы все было в одном месте:

:warning: Эта тема является WIKI темой и ее может редактировать каждый. Если у вас есть какие-то предложения или правки - можете вносить прямо в это сообщение


Вариант 1 - от @Riky

Когда игрок с купленным предметом “govorilka” пишет что-то в чат, это воспроизводится у всех. Работает только на DarkRP из-за хука PostPlayerSay

Сам скрипт установить сюда:

addons/igs-modification/lua/autorun/sh_govorilka.lua

if SERVER then
	util.AddNetworkString("SayTTS")

	hook.Add("PostPlayerSay", "TTSFTW", function(ply, text, team, dead)
		if ply:HasPurchase("govorilka") and not dead then
			net.Start("SayTTS")
				net.WriteString(text)
				net.WriteEntity(ply)
			net.Broadcast()
		end
	end)
else
	local char_to_hex = function(c) return string.format("%%%02X", string.byte(c)) end
	local function urlencode(url)
		return url:gsub("\n", "\r\n")
			:gsub("([^%w ])", char_to_hex)
			:gsub(" ", "+")
	end

	net.Receive("SayTTS", function()
		local text = net.ReadString()
		local ply  = net.ReadEntity()
		if LocalPlayer():GetPos():Distance(ply:GetPos()) > 1000 then return end

		sound.PlayURL("https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=" .. urlencode(text) .. "&tl=ru", "3d", function(snd)
			if IsValid(snd) and IsValid(ply) then
				snd:SetPos(ply:GetPos())
				snd:SetVolume(1)
				snd:Play()
				snd:Set3DFadeDistance(200, 1000)
				ply.tts_snd = snd
			end
		end)
	end)

	hook.Add("Think", "FollowPlayerSound", function()
		for _, ply in pairs(player.GetAll()) do
			if IsValid(ply.tts_snd) then
				ply.tts_snd:SetPos( ply:GetPos() )
			end
		end
	end)
end

В IGS создать предмет govorilka:

addons\igs-modification\lua\igs\settings\sh_additems.lua

IGS("Говорилка", "govorilka")
	:SetPrice(400)
	:SetTerm(30)

Вариант 2 от меня без гарантий

Для тех, кто “на опыте” предоставляю как есть свою “говорилку”, которую в свое время писал для своего проекта

tts.zip (2.2 КБ)

Если вариант сверху не работает, а он конечно и не будет работать, если его не подогнать под ваш проект, то есть еще такой вариант от @Helix_Drew: tts.zip (2.0 КБ), но за работоспособность тоже не отвечаю

Инструкции по установке не даю, как и не оказываю поддержку по ней, так как она требует некоторых зависимостей

Если кто-то портирует этот модуль, чтобы он работал на любом проекте, то сразу получит медаль “Моддер” и попадет в группу LEADERS

P.S. Продавал вот так:

IGS("Синтез речи","tts", 1499):SetDiscountedFrom(2000)
	:SetPerma()
	:SetCategory(IGS_CAT_FUN)
	:SetDescription(
		"С этой херней все ваши сообщения будут воспроизведены компьютером, словно в терминаторе!" ..
		"\n\nДорого? Да нихуя! Я мог бы сделать эту хрень дешевле, но тогда бы ваши уши начали кровоточить от обилия войс месседжей на сервере." ..
		"\n\nПосле покупки напишите нам в ВК и мы расскажем одну интересную байду"
	)
	:SetIcon("http://i.imgur.com/mUWW0U1.png")

Может пригодиться

function string:URLEncode()
	return string.gsub(string.gsub(self, '\n', '\r\n'), '([^%w.])', function(c)
		return string.format('%%%02X', string.byte(c))
	end)
end

Вариант 3, не помню откуда, но вроде работает

googlespeech.zip (9.1 КБ)

В sh_additems.lua добавить вот такое:

IGS("Говорилка на 30 дней", "govorilka")
	:SetPrice(100)
	:SetTerm(30)
	:SetDescription("Если хочешь чтобы твой текст озвучивался, то эта штука для тебя")
	:SetNetworked(true)

Бонус. Yandex вместо Google

Гугл ссылки подменить на подобную:

https://tts.voicetech.yandex.net/tts?speaker=alyss&text=Привет-мир