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