Files
wnsrc/gamemodes/darkrp/plugins/combinemonitors/cl_plugin.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

87 lines
3.3 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local PLUGIN = PLUGIN
PLUGIN.broadcastWords = {}
PLUGIN.timeNeeded = 0
PLUGIN.newString = ""
PLUGIN.currentWord = 0
PLUGIN.currentLine = {}
PLUGIN.lineAmount = 0
PLUGIN.broadcastWordsTV = {}
PLUGIN.timeNeededTV = 0
PLUGIN.newStringTV = ""
PLUGIN.currentWordTV = 0
PLUGIN.currentLineTV = {}
PLUGIN.lineAmountTV = 0
function PLUGIN:MessageReceived(client, info)
if istable(info) and info.chatType and (info.chatType == "broadcast" or info.chatType == "dispatch" or (info.chatType == "worlddispatch" and !timer.Exists("CombineMonitorsText"))) then
local definers = {"TV", ""}
for _, v in pairs(definers) do
if (info.chatType == "worlddispatch" and !timer.Exists("CombineMonitorsText"..v)) then
if !table.IsEmpty(PLUGIN["broadcastWords"..v]) then return end
end
self:ResetTextOnMonitor(v)
for w in info.text:gmatch("%S+") do
table.insert(PLUGIN["broadcastWords"..v], w)
PLUGIN["timeNeeded"..v] = PLUGIN["timeNeeded"..v] + (string.len(w) / 10)
end
timer.Create("CombineMonitorsText"..v, 1, 0, function()
PLUGIN["currentWord"..v] = math.Clamp(PLUGIN["currentWord"..v] + 1, 0, #PLUGIN["broadcastWords"..v] + 1)
timer.Adjust("CombineMonitorsText"..v, (string.len(PLUGIN["broadcastWords"..v][PLUGIN["currentWord"..v]] or "") / 10), nil, nil)
PLUGIN["newString"..v] = PLUGIN["newString"..v].." "..(PLUGIN["broadcastWords"..v][PLUGIN["currentWord"..v]] or "")
PLUGIN["currentLine"..v][#PLUGIN["currentLine"..v] + 1] = PLUGIN["broadcastWords"..v][PLUGIN["currentWord"..v]] or ""
local line = ""
for i = 1, #PLUGIN["currentLine"..v] do
line = line.." "..PLUGIN["currentLine"..v][i]
surface.SetFont("CombineMonitor")
local tW, _ = surface.GetTextSize(line)
if tW > (v == "TV" and 360 or 200) then
PLUGIN["newString"..v] = PLUGIN["newString"..v]..string.char(10)
PLUGIN["currentLine"..v] = {}
PLUGIN["lineAmount"..v] = PLUGIN["lineAmount"..v] + 1
end
end
if PLUGIN["lineAmount"..v] >= (v == "TV" and 4 or 11) then
PLUGIN["newString"..v] = ""
PLUGIN["lineAmount"..v] = 0
end
if PLUGIN["currentWord"..v] >= #PLUGIN["broadcastWords"..v] + 1 then
timer.Remove("CombineMonitorsText"..v)
timer.Simple(5, function()
if timer.Exists("CombineMonitorsText"..v) then return end
self:ResetTextOnMonitor(v)
end)
end
end)
end
end
end
function PLUGIN:ResetTextOnMonitor(v)
PLUGIN["broadcastWords"..v] = {}
PLUGIN["timeNeeded"..v] = 0
PLUGIN["newString"..v] = ""
PLUGIN["currentWord"..v] = 0
PLUGIN["currentLine"..v] = {}
PLUGIN["lineAmount"..v] = 0
end