dobrograd-13-06-2022/garrysmod/addons/gmod-ents/lua/entities/letter/cl_init.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

160 lines
4.2 KiB
Lua

include('shared.lua')
surface.CreateFont('dbg-write', {
font = 'Cambria',
extended = true,
size = 20,
weight = 500,
})
local frame, editFrame
function ENT:Draw()
self:DrawModel()
end
netstream.Hook('dbg-write', function(letter, action, data)
if action == 'use' then
gui.EnableScreenClicker(true)
local menu = DermaMenu()
menu:AddOption(L.read, function()
netstream.Start('dbg-write', letter, 'read', { false })
end):SetImage(octolib.icons.silk16('report_magnify'))
menu:AddOption(L.change, function()
netstream.Start('dbg-write', letter, 'read', { true })
end):SetImage(octolib.icons.silk16('report_edit'))
local signed = letter:GetNetVar('Signed') == LocalPlayer()
menu:AddOption(signed and L.remove_sign or L.add_sign, function()
netstream.Start('dbg-write', letter, 'sign', { not signed })
end):SetImage(octolib.icons.silk16('digital_signature_pen'))
if data[1] then
menu:AddOption(L.freeze, function()
netstream.Start('dbg-write', letter, 'freeze', { false })
end):SetImage(octolib.icons.silk16('arrow_down'))
else
menu:AddOption(L.unfreeze, function()
netstream.Start('dbg-write', letter, 'freeze', { true })
end):SetImage(octolib.icons.silk16('arrow_up'))
end
if not IsValid(letter:GetNetVar('IsFor')) then
local plys = player.GetAll()
table.sort(plys, function(a, b) return a:Name() < b:Name() end)
if #plys > 1 then
local sm, pmo = menu:AddSubMenu(L.write_give)
for _, ply in ipairs(plys) do
if ply ~= LocalPlayer() then
sm:AddOption(ply:Name(), function()
netstream.Start('dbg-write', letter, 'give', { ply })
end)
end
end
pmo:SetImage(octolib.icons.silk16('report_go'))
end
else
menu:AddOption(L.cancel_give, function()
netstream.Start('dbg-write', letter, 'give', {})
end):SetImage(octolib.icons.silk16('report_delete'))
end
menu:AddOption(L.write_destroy, function()
netstream.Start('dbg-write', letter, 'destroy')
end):SetImage(octolib.icons.silk16('bin'))
menu:Center()
menu:Open()
gui.EnableScreenClicker(false)
elseif action == 'read' then
local letterMsg = data[1] or ''
if data[2] then
if IsValid(editFrame) then editFrame:Remove() end
editFrame = vgui.Create 'DFrame'
editFrame:SetSize(600,600)
editFrame:SetTitle(L.change_letter)
editFrame:Center()
editFrame:MakePopup()
local b = editFrame:Add 'DButton'
b:SetText(L.save)
b:Dock(BOTTOM)
b:SetTall(30)
local e = editFrame:Add 'DTextEntry'
e:Dock(FILL)
e:SetMultiline(true)
e:SetContentAlignment(7)
e:SetValue(letterMsg)
function b:DoClick()
editFrame:Remove()
netstream.Start('dbg-write', letter, 'edit', { e:GetValue() })
end
else
if IsValid(frame) then frame:Remove() end
frame = vgui.Create('DPanel')
frame:SetPaintBackground(false)
frame.letter = letter
frame:Dock(FILL)
frame:MakePopup()
local killBut = vgui.Create('DButton', frame)
killBut:SetText(L.close)
killBut:SetPos((ScrW() - 256) / 2, 15)
killBut:SetSize(256, 64)
function killBut:DoClick()
frame:Remove()
end
local scrPan = frame:Add('DScrollPanel')
scrPan:SetPos(ScrW() * .2, ScrH() * 0.3)
scrPan:SetSize(ScrW() * .6, ScrH() * 0.84)
local textWrap = scrPan:Add('DPanel')
textWrap:Dock(TOP)
local ltr = markup.Parse('<font=dbg-write><color=0,0,0>' .. letterMsg .. '</color></font>', ScrW() * .6 - 100)
local textH = ltr:GetHeight()
textWrap:SetTall(math.max(ScrH() * 0.84, textH + 200))
function textWrap:Paint(w, h)
draw.RoundedBox(8, 0, 0, w, h, color_white)
local x, y = self:GetPos()
ltr:Draw(x + 50, y + 50, TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
local signed = letter:GetNetVar('Signed')
if IsValid(signed) then
local name
local customJob = signed:GetNetVar('customJob')
if customJob then
name = customJob[1]
else
local job = DarkRP.getJobByCommand(signed:GetNetVar('dbg-police.job', '')) or signed:getJobTable()
name = job.name
end
draw.DrawNonParsedText(
L.write_sign .. name .. ', ' .. signed:Name(),
'dbg-write',
w * .5 + 50,
textH + 100,
Color(0, 0, 0),
0
)
end
end
scrPan:SetAlpha(0)
scrPan:AlphaTo(255, 0.5, 0)
scrPan:MoveBy(0, -ScrH() * .15, 0.5, 0)
end
end
end)