mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
302 lines
8.7 KiB
Lua
302 lines
8.7 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.name = "Text Screen"
|
||
PLUGIN.author = "M!NT"
|
||
PLUGIN.description = "A custom text screen that can be put on user's display."
|
||
PLUGIN.textLines = {}
|
||
PLUGIN.targetSoundFile = ""
|
||
PLUGIN.active = false
|
||
PLUGIN.fadeOut = false
|
||
PLUGIN.colorBWFadeInMultiple = 0.005
|
||
|
||
CAMI.RegisterPrivilege({
|
||
Name = "Helix - Manage Text Screen",
|
||
MinAccess = "admin"
|
||
})
|
||
|
||
ix.command.Add("EditTextScreen", {
|
||
description = "Edit the text screen.",
|
||
privilege = "Manage Text Screen",
|
||
OnRun = function(self, client)
|
||
if (SERVER) then netstream.Start(client, "EditTextScreen") end
|
||
end
|
||
})
|
||
|
||
ix.command.Add("EnterTextScreen", {
|
||
description = "Plays currently configured text screen to all players on the servers.",
|
||
privilege = "Manage Text Screen",
|
||
OnRun = function(self, client)
|
||
if (SERVER) then
|
||
for _, v in pairs(player.GetAll()) do
|
||
netstream.Start(v, "TextScreenShow")
|
||
end
|
||
end
|
||
end
|
||
})
|
||
|
||
ix.config.Add(
|
||
"Text Screen Fade In Time",
|
||
3,
|
||
"How long the text screen should fade in for in seconds",
|
||
nil,
|
||
{
|
||
data = {min = 1, max = 240},
|
||
category = "Text Screen"
|
||
}
|
||
)
|
||
|
||
ix.config.Add(
|
||
"Text Screen Fade Out Time",
|
||
3,
|
||
"How long the text screen should fade out for in seconds",
|
||
nil,
|
||
{
|
||
data = {min = 1, max = 240},
|
||
category = "Text Screen"
|
||
}
|
||
)
|
||
|
||
ix.config.Add(
|
||
"Text Screen Freeze Time",
|
||
3,
|
||
"How long the text screen should remain at full alpha in seconds",
|
||
nil,
|
||
{
|
||
data = {min = 1, max = 240},
|
||
category = "Text Screen"
|
||
}
|
||
)
|
||
|
||
ix.config.Add(
|
||
"Text Screen Text Font",
|
||
"DermaLarge",
|
||
"How long the text screen should remain at full alpha in seconds",
|
||
nil,
|
||
{category = "Text Screen"}
|
||
)
|
||
|
||
ix.config.Add(
|
||
"Text Screen Text Font Vertical Spacing",
|
||
40,
|
||
"How long the text screen should remain at full alpha in seconds",
|
||
nil,
|
||
{
|
||
data = {min = 10, max = 255},
|
||
category = "Text Screen"
|
||
}
|
||
)
|
||
|
||
ix.config.Add(
|
||
"Text Screen Fade In Alpha",
|
||
255,
|
||
"Maximum alpha (0-255) that the background can fade into",
|
||
nil,
|
||
{
|
||
data = {min = 0, max = 255},
|
||
category = "Text Screen"
|
||
}
|
||
)
|
||
|
||
ix.config.Add(
|
||
"Text Screen Fade In Text Line Offset",
|
||
1,
|
||
"Seconds of delay between lines of text fading in",
|
||
nil,
|
||
{
|
||
data = {min = 0.0, max = 9.9},
|
||
category = "Text Screen"
|
||
}
|
||
)
|
||
|
||
if (CLIENT) then
|
||
local colorBW = {
|
||
["$pp_colour_addr"] = 0,
|
||
["$pp_colour_addg"] = 0,
|
||
["$pp_colour_addb"] = 0,
|
||
["$pp_colour_brightness"] = 0,
|
||
["$pp_colour_contrast"] = 1,
|
||
["$pp_colour_colour"] = 1,
|
||
["$pp_colour_mulr"] = 0,
|
||
["$pp_colour_mulg"] = 0,
|
||
["$pp_colour_mulb"] = 0
|
||
}
|
||
|
||
local function multiplyBWShader(multiple)
|
||
colorBW["$pp_colour_colour"] = math.Clamp(colorBW["$pp_colour_colour"] + multiple, 0.1, 1.1)
|
||
end
|
||
|
||
netstream.Hook("EditTextScreen", function()
|
||
vgui.Create("ixTextScreenEditor")
|
||
end)
|
||
|
||
netstream.Hook("TextScreenShow", function()
|
||
vgui.Create("ixTextScreenShow")
|
||
PLUGIN.active = true
|
||
end)
|
||
|
||
net.Receive("UpdateTextScreenText", function(len, ply)
|
||
if (IsValid(ply) and ply:IsPlayer()) then
|
||
return
|
||
else
|
||
PLUGIN.textLines = ix.compnettable:Read()
|
||
PLUGIN.targetSoundFile = net.ReadString()
|
||
end
|
||
end)
|
||
|
||
local FadeInPanel = {}
|
||
function FadeInPanel:Init()
|
||
self:SetSize(ScrW(), ScrH())
|
||
self:SetDraggable(false)
|
||
self:ShowCloseButton(false)
|
||
self:SetAlpha(0)
|
||
self:SetTitle(" ")
|
||
self.Paint = function(this, w, h)
|
||
surface.SetDrawColor(0, 0, 0, ix.config.Get("Text Screen Fade In Alpha"))
|
||
surface.DrawRect(0, 0, w, h)
|
||
Derma_DrawBackgroundBlur(this, 1)
|
||
end
|
||
|
||
local height = (ScrH() / 2) - (#PLUGIN.textLines * ix.config.Get("Text Screen Text Font Vertical Spacing"))
|
||
local fadeInStep = 0
|
||
for k, str in pairs(PLUGIN.textLines) do
|
||
local line = self:Add("DLabel")
|
||
line:SetFont(ix.config.Get("Text Screen Text Font"))
|
||
line:SetColor(Color(255, 255, 255, 255))
|
||
line:SetText(tostring(str))
|
||
line:SizeToContents()
|
||
line:SetPos(0, height)
|
||
height = height + ix.config.Get("Text Screen Text Font Vertical Spacing")
|
||
fadeInStep = fadeInStep + ix.config.Get("Text Screen Fade In Text Line Offset")
|
||
line:CenterHorizontal()
|
||
line:SetAlpha(0)
|
||
line:AlphaTo(255, fadeInStep, fadeInStep, function() return end)
|
||
end
|
||
|
||
self:SetContentAlignment(5)
|
||
|
||
if (PLUGIN.targetSoundFile and PLUGIN.targetSoundFile != "") then
|
||
surface.PlaySound(PLUGIN.targetSoundFile)
|
||
end
|
||
|
||
PLUGIN.fadeOut = false
|
||
self:AlphaTo(255, ix.config.Get("Text Screen Fade In Time"), 0, function()
|
||
timer.Create("RemoveTextScreen", ix.config.Get("Text Screen Freeze Time"), 1, function()
|
||
PLUGIN.fadeOut = true
|
||
self:AlphaTo(0, ix.config.Get("Text Screen Fade Out Time"), 0, function()
|
||
self:Remove()
|
||
PLUGIN.active = false
|
||
end)
|
||
end)
|
||
end)
|
||
end
|
||
|
||
vgui.Register("ixTextScreenShow", FadeInPanel, "DFrame")
|
||
|
||
local EditPanel = {}
|
||
function EditPanel:Init()
|
||
self:SetSize(ScrW(), ScrH())
|
||
self.Paint = function(this, w, h)
|
||
surface.SetDrawColor(Color(63, 58, 115, 220))
|
||
surface.DrawRect(0, 0, w, h)
|
||
|
||
Derma_DrawBackgroundBlur(this, 1)
|
||
end
|
||
|
||
self.content = self:Add("EditablePanel")
|
||
self.content:SetSize(500, 650)
|
||
self.content:Center()
|
||
self.content:MakePopup()
|
||
self.content.Paint = function(this, w, h)
|
||
surface.SetDrawColor(0, 0, 0, 130)
|
||
surface.DrawRect(0, 0, w, h)
|
||
end
|
||
|
||
local textEntry = self.content:Add("DTextEntry")
|
||
textEntry:SetMultiline(true)
|
||
textEntry:SetSize(500, 400)
|
||
textEntry:Dock(TOP)
|
||
textEntry:DockMargin(10, 10, 10, 0)
|
||
textEntry:CenterHorizontal()
|
||
local currentValue = ""
|
||
for _, v in ipairs(PLUGIN.textLines) do
|
||
currentValue = currentValue.."\n"..v
|
||
end
|
||
textEntry:SetValue(currentValue)
|
||
|
||
local textEntrySoundFile = self.content:Add("DTextEntry")
|
||
textEntrySoundFile:SetMultiline(false)
|
||
textEntrySoundFile:SetSize(500, 75)
|
||
textEntrySoundFile:Dock(TOP)
|
||
textEntrySoundFile:DockMargin(10, 10, 10, 20)
|
||
textEntrySoundFile:CenterHorizontal()
|
||
textEntrySoundFile:SetValue(PLUGIN.targetSoundFile)
|
||
|
||
local saveOrReset = self.content:Add("Panel")
|
||
saveOrReset:Dock(BOTTOM)
|
||
saveOrReset:SetTall(75)
|
||
|
||
local save = saveOrReset:Add("DButton")
|
||
save:Dock(LEFT)
|
||
save:SetWide(self.content:GetWide() * 0.5)
|
||
save:SetText("KAYDET")
|
||
save:SetFont("DermaLarge")
|
||
save.DoClick = function()
|
||
PLUGIN.textLines = {}
|
||
for line in textEntry:GetValue():gmatch('[^\n]+') do
|
||
PLUGIN.textLines[#PLUGIN.textLines + 1] = line
|
||
end
|
||
netstream.Start(
|
||
"TextScreenEditText",
|
||
PLUGIN.textLines,
|
||
textEntrySoundFile:GetValue()
|
||
)
|
||
end
|
||
|
||
local reset = saveOrReset:Add("DButton")
|
||
reset:Dock(FILL)
|
||
reset:SetText("SIFIRLA")
|
||
reset:SetFont("DermaLarge")
|
||
reset.DoClick = function()
|
||
PLUGIN.textLines = {}
|
||
textEntry:SetValue("")
|
||
netstream.Start("TextScreenEditText", {})
|
||
end
|
||
end
|
||
|
||
vgui.Register("ixTextScreenEditor", EditPanel, "DFrame")
|
||
|
||
function PLUGIN:RenderScreenspaceEffects()
|
||
if (PLUGIN.fadeOut == false and PLUGIN.active) then
|
||
multiplyBWShader(PLUGIN.colorBWFadeInMultiple * -1)
|
||
elseif (colorBW["$pp_colour_colour"] < 1) then
|
||
multiplyBWShader(PLUGIN.colorBWFadeInMultiple)
|
||
end
|
||
DrawColorModify(colorBW)
|
||
end
|
||
end
|
||
|
||
if (SERVER) then
|
||
util.AddNetworkString("UpdateTextScreenText")
|
||
|
||
netstream.Hook("TextScreenEditText", function(client, textLines, soundFile)
|
||
if !client:IsAdmin() then return end
|
||
|
||
PLUGIN.textLines = textLines
|
||
|
||
net.Start("UpdateTextScreenText")
|
||
ix.compnettable:Write(textLines)
|
||
net.WriteString(soundFile)
|
||
net.Broadcast()
|
||
|
||
client:NotifyLocalized("Etkinlik ekranı güncellendi.")
|
||
end)
|
||
end |