70 lines
2.2 KiB
Lua
70 lines
2.2 KiB
Lua
local maxCars = carDealer.maxCars[game.GetMap()] or carDealer.maxCars.default
|
|
carDealer.queue = carDealer.queue or {}
|
|
|
|
function carDealer.addToQueue(ply, id)
|
|
|
|
if ply:GetLocalVar('car-dealer.queued') then
|
|
carDealer.removeFromQueue(ply)
|
|
end
|
|
|
|
carDealer.queue[#carDealer.queue + 1] = ply
|
|
ply:SetLocalVar('car-dealer.queued', {id, #carDealer.queue})
|
|
ply:SetLocalVar('car-dealer.queuedReady')
|
|
|
|
end
|
|
|
|
function carDealer.removeFromQueue(ply)
|
|
|
|
local key = table.RemoveByValue(carDealer.queue, ply)
|
|
if key then
|
|
for i = key, #carDealer.queue do
|
|
local v = carDealer.queue[i]
|
|
v:SetLocalVar('car-dealer.queued', {v:GetLocalVar('car-dealer.queued')[1], i})
|
|
end
|
|
end
|
|
|
|
if IsValid(ply) then
|
|
ply:SetLocalVar('car-dealer.queued')
|
|
ply:SetLocalVar('car-dealer.queuedReady')
|
|
end
|
|
|
|
end
|
|
hook.Add('PlayerDisconnected', 'car-dealer.queue', carDealer.removeFromQueue)
|
|
|
|
timer.Create('car-dealer.queue', CFG.dev and 5 or 30, 0, function()
|
|
|
|
if carDealer.spawningQueuedAuto then return end
|
|
|
|
local ply = carDealer.queue[1]
|
|
while ply do
|
|
if #carDealer.queue < 1 then return end
|
|
if not IsValid(ply) then
|
|
table.remove(carDealer.queue, 1)
|
|
for i,v in ipairs(carDealer.queue) do
|
|
v:SetLocalVar('car-dealer.queued', {v:GetLocalVar('car-dealer.queued')[1], i})
|
|
end
|
|
ply = carDealer.queue[1]
|
|
elseif ply:GetLocalVar('car-dealer.queuedReady') then
|
|
carDealer.notify(ply, 'warning', 'Ты не подтвердил машину вовремя и был исключен из очереди')
|
|
carDealer.removeFromQueue(ply)
|
|
ply = carDealer.queue[1]
|
|
else
|
|
break
|
|
end
|
|
end
|
|
if not ply then return end
|
|
|
|
local count = 0
|
|
for _, v in ipairs(ents.FindByClass('gmod_sent_vehicle_fphysics_base')) do
|
|
local cat = carDealer.categories[v.cdData and v.cdData.category or '']
|
|
if cat and cat.queue then
|
|
count = count + 1
|
|
if count >= maxCars then return end
|
|
end
|
|
end
|
|
|
|
ply:SetLocalVar('car-dealer.queuedReady', true)
|
|
ply:Notify('admin', CFG.dev and 5 or 30, 'Машина готова к доставке!', 'Открой меню гаража и подтверди получение, прежде чем закончится таймер под этим сообщением')
|
|
carDealer.sync(ply)
|
|
|
|
end)
|