dobrograd-13-06-2022/garrysmod/addons/feature-cars/lua/car-dealer/sv_hooks.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

143 lines
3.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

hook.Add('PlayerInitialSpawn', 'car-dealer', function(ply)
timer.Simple(15, function()
if not IsValid(ply) then return end
carDealer.sync(ply)
for _, ent in ipairs(ents.FindByClass('gmod_sent_vehicle_fphysics_base')) do
if ent:CPPIGetOwner() == ply then
simfphys.SetOwner(ply, ent)
carDealer.setCurVeh(ply, ent)
break
end
end
end)
timer.Remove('storeVehicle_' .. ply:SteamID())
end)
hook.Add('PlayerDisconnected', 'car-dealer', function(ply)
local veh = carDealer.getCurVeh(ply)
if not IsValid(veh) then return end
if not veh.deposit then
timer.Create('storeVehicle_' .. ply:SteamID(), 10 * 60, 1, function()
carDealer.storeVeh(veh)
end)
ply:SetDBVar('nextCar', os.time() + 10 * 60 + 30)
else
carDealer.storeVeh(veh)
end
end)
hook.Add('EntityRemoved', 'car-dealer', function(ent)
if ent:GetClass() ~= 'gmod_sent_vehicle_fphysics_base' then return end
if ent.deposit then
carDealer.returnDeposit(ent)
else
carDealer.saveVeh(ent)
end
local ply = carDealer.getOwner(ent)
if not IsValid(ply) then return end
ply:SetNetVar('cd.vehicle')
ply:SetLocalVar('cd.vehID')
ply:SetLocalVar('cd.vehName')
carDealer.sync(ply)
carDealer.clearMarkers(ply)
end)
local idleTime = 20
local function someoneInside(veh)
for _, v in ipairs(veh:GetChildren()) do
if v:GetClass() ~= 'prop_vehicle_prisoner_pod' then continue end
local dr = v:GetDriver()
if IsValid(dr) and not dr:IsAFK() then return true end
end
return false
end
timer.Create('octocars.removeIdle', 60, 0, function()
local ct = CurTime()
local vehs = ents.FindByClass('gmod_sent_vehicle_fphysics_base')
for _, veh in ipairs(vehs) do
if veh.doNotEvacuate and not veh.idleScore then continue end
if someoneInside(veh) then continue end
local pos = veh:GetPos()
if veh.idleLastPos then
local moved = false
if veh.idleLastPos:DistToSqr(pos) < 10 then
veh.idleScore = (veh.idleScore or 0) + 1
else
if veh.doNotEvacuate then
veh.idleScore = nil
continue
end
veh.idleScore = math.max((veh.idleScore or 0) - 3, 0)
moved = true
end
local ply = carDealer.getOwner(veh) or veh:CPPIGetOwner()
if veh.idleScore >= idleTime then
if ct < (veh.despawnAfter or 0) then return end
carDealer.storeVeh(veh)
if IsValid(ply) then
ply:Notify(L.car_evacuated)
end
continue
elseif veh.idleScore == idleTime - 5 and IsValid(ply) and not moved then
ply:Notify(L.car_evacuate)
end
end
veh.idleLastPos = pos
end
end)
hook.Add('OnPlayerChangedTeam', 'car-dealer.refresh', function(ply, old, new)
local block = false
local cp = GAMEMODE.CivilProtection
if cp then block = cp[new] end
if RPExtraTeams[new].hobo then
block = true
end
ply:SetLocalVar('cd.noPrivate', block)
carDealer.sync(ply)
if new == TEAM_ADMIN then return end
local curVeh = carDealer.getCurVeh(ply)
if IsValid(curVeh) then
if not carDealer.canUse(ply, curVeh.cdClass) then
timer.Create('storeVehicle_' .. ply:SteamID(), 5 * 60, 1, function()
carDealer.storeVeh(curVeh)
carDealer.notify(ply, 'warning', L.car_in_garage_unaivaible)
end)
return
end
if cp and cp[old] ~= cp[new] and new ~= TEAM_ADMIN and old ~= TEAM_ADMIN then
carDealer.storeVeh(curVeh)
carDealer.notify(ply, 'warning', cp[old] and L.your_service_car_evacuated or L.your_car_evacuated)
elseif RPExtraTeams[new].hobo then
carDealer.storeVeh(curVeh)
carDealer.notify(ply, 'warning', L.your_car_evacuated)
end
end
end)
hook.Add('playerSellVehicle', 'car-dealer', function()
return false, 'Автомобиль можно продать только у дилера'
end)