dobrograd-13-06-2022/garrysmod/addons/feature-certs/lua/autorun/server/certs.lua

71 lines
2.5 KiB
Lua
Raw Normal View History

2023-11-16 15:01:19 +05:00
dbgCerts = dbgCerts or {}
include('config/certificates.lua')
function dbgCerts.give(ply, id, title, add, em, pos, iss, vthru)
ply:SetDBVar('cert', {
id = id,
titl = title,
add = add,
em = em,
pos = pos,
iss = iss,
vthru = vthru,
})
ply:Notify('Тебе выдали ' .. title .. '! Чтобы показать его, в "круговом меню" взаимодействия с другим игроком выбери "Показать удостоверение."')
return true
end
local nextShow = {}
timer.Create('dbg-idcards.clear', 60, 0, function()
for shower,showeees in pairs(nextShow) do
for showeee,nextTime in pairs(showeees) do
if nextTime <= CurTime() then
nextShow[shower][showeee] = nil
end
end
if #showeees == 0 then nextShow[shower] = nil end
end
end)
local function read(ply, cert)
octochat.talkTo(ply, octochat.textColors.rp, '====================')
octochat.talkTo(ply, octochat.textColors.rp, dbgCerts.certTitles[cert.id])
if cert.add then
octochat.talkTo(ply, octochat.textColors.rp, cert.add)
end
if cert.em then
octochat.talkTo(ply, octochat.textColors.rp, 'Выдано ', cert.em)
end
if cert.pos then
octochat.talkTo(ply, octochat.textColors.rp, 'На должности ', cert.pos)
end
if cert.iss then
octochat.talkTo(ply, octochat.textColors.rp, 'Дата выдачи: ', os.date('%d.%m.%Y', cert.iss))
end
octochat.talkTo(ply, octochat.textColors.rp, 'Действует до: ', os.date('%d.%m.%Y', cert.vthru))
octochat.talkTo(ply, octochat.textColors.rp, '====================')
end
function dbgCerts.show(shower, showee, noTimer, noEmote)
local cert = shower:GetDBVar('cert')
if not cert then return false, 'У тебя нет действительного удостоверения' end
if not dbgCerts.certTitles[cert.id] or cert.vthru < os.time() then
shower:SetDBVar('cert', nil)
return false, 'У тебя нет действительного удостоверения'
end
local sid, tid = shower:SteamID(), showee:SteamID()
if not noTimer then
if not nextShow[sid] then nextShow[sid] = {} end
if (nextShow[sid][tid] or CurTime()) > CurTime() then
return false, 'Этот игрок уже недавно видел твое удостоверение'
end
nextShow[sid][tid] = CurTime() + 120
end
if not noEmote then shower:DoEmote('{name} показывает удостоверение') end
timer.Simple(1, function()
if IsValid(showee) then read(showee, cert) end
end)
return true
end