dobrograd-13-06-2022/garrysmod/addons/util-other/lua/autorun/server/noidiots.lua

135 lines
4.8 KiB
Lua
Raw Normal View History

2023-11-16 15:01:19 +05:00
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