134 lines
4.8 KiB
Lua
134 lines
4.8 KiB
Lua
hook.Add('OnPhysgunReload', 'antiPropKill', function(wep, ply)
|
||
|
||
return false
|
||
|
||
end)
|
||
|
||
hook.Add('PlayerSpawnedProp', 'dbg.noIdiots', function(ply, mdl, ent)
|
||
|
||
if IsValid(ent) then
|
||
local mins, maxs = ent:GetModelBounds()
|
||
local size = maxs - mins
|
||
local vol = size.x * size.y * size.z
|
||
if (size.x > 1000 or size.y > 1000 or size.z > 1000 or vol > 2000000) and not (ply:query('DBG: Большие пропы') or ply:GetNetVar('os_build')) then
|
||
ent:Remove()
|
||
ply:Notify('warning', L.too_big)
|
||
return
|
||
end
|
||
end
|
||
|
||
end)
|
||
|
||
local minTimeToBuild = 1 * 60 * 60 -- 1 hour
|
||
local newbieMsg = 'У тебя недостаточно наигранного времени для того, чтобы начать строить. Советуем уделить первый час игры ознакомлению с механиками сервера!'
|
||
local function canSpawn(ply)
|
||
|
||
-- lookbook
|
||
if ply:GetDBVar('lookbook') then return end
|
||
|
||
if ply:TriggerCooldown('lookbook', 10) then
|
||
local request = {{
|
||
name = 'Стиль построек Доброграда',
|
||
desc = 'Мы заинтересованы в том, чтобы все постройки в городе выглядели естественно и вписывались в общую картину. Похоже, ты собираешься внести свой вклад в эту картину. Пожалуйста, ознакомься с этим списком рекомендаций по постройке, чтобы не испортить ее:',
|
||
buttonText = 'Лукбук Доброграда',
|
||
buttonURL = 'https://octo.gg/lookbook',
|
||
}}
|
||
if CFG.dev or ply:GetTimeTotal() >= minTimeToBuild then
|
||
request[#request + 1] = {
|
||
desc = 'Если администраторы посчитают твою постройку нарушающей общую стилистику Доброграда, они в уведомлении попросят тебя исправить что-то в ней или перестроить вовсе. Если эти просьбы будут проигнорированы, им придется удалить постройку.\n\nОтметь ниже, когда ознакомишься с лукбуком, осознаешь важность поддержания общей стилистики Доброграда и будешь готов украшать город своей постройкой:',
|
||
type = 'check',
|
||
txt = 'Вперед строить!',
|
||
required = true,
|
||
}
|
||
else
|
||
request[#request + 1] = { desc = newbieMsg }
|
||
end
|
||
|
||
octolib.request.send(ply, request, function(data)
|
||
if not IsValid(ply) then return end
|
||
if not CFG.dev and ply:GetTimeTotal() < minTimeToBuild then
|
||
return ply:Notify('warning', newbieMsg)
|
||
end
|
||
if data and data[2] then
|
||
ply:SetDBVar('lookbook', true)
|
||
end
|
||
end)
|
||
end
|
||
|
||
return false
|
||
|
||
end
|
||
hook.Add('PlayerSpawnProp', 'dbg.noIdiots', canSpawn)
|
||
hook.Add('PlayerSpawnEffect', 'dbg.noIdiots', canSpawn)
|
||
hook.Add('CanTool', 'dbg.noIdiots', canSpawn)
|
||
|
||
local function freezeRagdoll(ent)
|
||
if ent:GetClass() == 'prop_ragdoll' then
|
||
for i = 0, ent:GetPhysicsObjectCount() - 1 do
|
||
local phys = ent:GetPhysicsObjectNum(i)
|
||
if IsValid(phys) then phys:EnableMotion(false) end
|
||
end
|
||
end
|
||
end
|
||
|
||
hook.Add('octoperma.spawned', 'dbg.freezeRagdolls', function(entities)
|
||
for _, ent in pairs(entities) do
|
||
freezeRagdoll(ent)
|
||
end
|
||
end)
|
||
|
||
local timeForAD2 = 10 * 60 * 60 -- 10 hours
|
||
hook.Add('CanTool', 'dbg-tools', function(ply, tr, tool)
|
||
|
||
if tool == 'advdupe2' and not CFG.dev and ply:GetTimeTotal() < timeForAD2 then
|
||
ply:Notify('warning', L.need_10_hours)
|
||
return false
|
||
end
|
||
|
||
if tool == 'remover' then
|
||
local ent = tr.Entity
|
||
if IsValid(ent) and ent:IsDoor() then return false end
|
||
end
|
||
|
||
end)
|
||
|
||
hook.Add('PhysgunPickup', 'dbg.helloFromTawich', function(ply, ent)
|
||
if ent:GetName() == 'trainent' then
|
||
return false
|
||
end
|
||
end)
|
||
|
||
local disabled = octolib.array.toKeys {'octo_trigger', 'octo_trigger_plus'}
|
||
hook.Add('PhysgunPickup', 'dbg.helloFromSighty', function(ply, ent)
|
||
if disabled[ent:GetClass()] then
|
||
return false
|
||
end
|
||
end)
|
||
|
||
concommand.Add('gmod_admin_cleanup', function(ply, cmd, args)
|
||
if IsValid(ply) and not ply:IsSuperAdmin() then
|
||
ply:Notify('warning', 'Данная кнопка запломбирована')
|
||
else cleanup.CC_AdminCleanup(ply, cmd, args) end
|
||
end, nil, '', {FCVAR_DONTRECORD})
|
||
|
||
--
|
||
-- PROP PUSH FIXES
|
||
--
|
||
local noPickup = {
|
||
gmod_button = true,
|
||
keypad = true,
|
||
}
|
||
hook.Add('PhysgunPickup', 'dbg.noPropSurf', function(ply, ent)
|
||
if noPickup[ent:GetClass()] and not ply:IsSuperAdmin() then return false end
|
||
end)
|
||
|
||
local ghost = {
|
||
gmod_button = true,
|
||
keypad = true,
|
||
gmod_light = true,
|
||
}
|
||
hook.Add('APGisBadEnt', 'dbg.noPropPush', function(ent)
|
||
if ghost[ent:GetClass()] then return true end
|
||
end)
|
||
|
||
-- i think something will be added here later
|