70 lines
2.5 KiB
Lua
70 lines
2.5 KiB
Lua
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
|