dobrograd-13-06-2022/garrysmod/addons/util-other/lua/autorun/server/drp.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

198 lines
5.2 KiB
Lua

NOTIFY_GENERIC = 0
NOTIFY_ERROR = 1
NOTIFY_UNDO = 2
NOTIFY_HINT = 3
NOTIFY_CLEANUP = 4
local meta = FindMetaTable('Player')
function meta:applyPlayerClassVars(applyHealth)
local playerClass = baseclass.Get(player_manager.GetPlayerClass(self))
self:SetBaseWalkSpeed(playerClass.WalkSpeed >= 0 and playerClass.WalkSpeed or GAMEMODE.Config.walkspeed)
self:SetBaseRunSpeed(playerClass.RunSpeed >= 0 and playerClass.RunSpeed or (self:isCP() and GAMEMODE.Config.runspeedcp or GAMEMODE.Config.runspeed))
self:SetBaseLadderClimbSpeed(playerClass.LadderClimbSpeed or 200)
hook.Call('UpdatePlayerSpeed', GAMEMODE, self) -- Backwards compatitibly, do not use
self:SetCrouchedWalkSpeed(playerClass.CrouchedWalkSpeed)
self:SetDuckSpeed(playerClass.DuckSpeed)
self:SetUnDuckSpeed(playerClass.UnDuckSpeed)
self:SetBaseJumpPower(playerClass.JumpPower)
self:AllowFlashlight(playerClass.CanUseFlashlight)
self:SetMaxHealth(playerClass.MaxHealth >= 0 and playerClass.MaxHealth or (tonumber(GAMEMODE.Config.startinghealth) or 100))
if applyHealth then
self:SetHealth(playerClass.StartHealth >= 0 and playerClass.StartHealth or (tonumber(GAMEMODE.Config.startinghealth) or 100))
end
self:SetArmor(playerClass.StartArmor)
self.dropWeaponOnDeath = playerClass.DropWeaponOnDie
self:SetNoCollideWithTeammates(false)
self:SetAvoidPlayers(false)
hook.Call('playerClassVarsApplied', nil, self)
end
-- some chat commands
--
-- CHAT STUFF
--
hook.Add('canDemote', 'FixDemote', function()
local players_count = player.GetCount()
if players_count <= 2 then
return false, L.vote_not_enough_players
end
end)
local restrictedEnts = {
gmod_sent_vehicle_fphysics_base = true,
gmod_sent_vehicle_fphysics_wheel = true,
}
local function run()
if not GAMEMODE then return end
function GAMEMODE:OnAchievementAchieved()
-- nothing
end
function GAMEMODE:CalcMainActivity( ply, velocity )
ply.CalcIdeal = ACT_MP_STAND_IDLE
ply.CalcSeqOverride = -1
if not self:HandlePlayerDriving(ply) and not self:HandlePlayerDucking(ply, velocity) then
local len2d = velocity:Length2DSqr()
if len2d > 22500 then ply.CalcIdeal = ACT_MP_RUN elseif len2d > 0.25 then ply.CalcIdeal = ACT_MP_WALK end
end
ply.m_bWasOnGround = ply:IsOnGround()
ply.m_bWasNoclipping = ply:GetMoveType() == MOVETYPE_NOCLIP and not ply:InVehicle()
return ply.CalcIdeal, ply.CalcSeqOverride
end
function GAMEMODE:CanProperty(ply, property, ent)
if restrictedEnts[ent:GetClass()] and not (ply:query('DBG: Изменять автомобили') or property == 'skin' and ply:IsAdmin()) then
return false
end
if ent:IsDoor() and property ~= 'collision' and property ~= 'bodygroups' and property ~= 'skin' then
return false
end
if ent:GetClass() == 'prop_effect' and property == 'collision' then
return false
end
if self.Config.allowedProperties[property] and ent:CPPICanTool(ply, 'remover') then
return true
end
if property == 'persist' and ply:IsSuperAdmin() then
return true
end
ply:Notify('warning', 'Property disabled for now')
return false -- Disabled until antiminge measure is found
end
end
hook.Add('darkrp.loadModules', 'dbg-property', run)
run()
hook.Add('canDemote', 'dbg-demote', function()
for _, v in ipairs(player.GetAll()) do
if v:IsAdmin() and v:GetAFKTime() <= CFG.afkAdminNotActive and cats.config.actualAdminRanks[v:GetUserGroup()] then
return false, L.ticket_admins
end
end
end)
hook.Add('canUnarrest', 'dbg-demote', function(ply, arrested)
local tr = {}
tr.start = ply:EyePos()
tr.endpos = arrested:EyePos()
tr.filter = { ply, arrested }
tr = util.TraceLine(tr)
if tr.Hit then return false, L.something_interferes end
end)
hook.Add('dbg-char.firstSpawn', 'dbg-wanted', function(ply)
timer.Simple(3, function()
if not IsValid(ply) then return end
local wanted = ply:GetDBVar('wanted')
if wanted and wanted.till then
local time = wanted.till - os.time()
if time > 0 then
ply:wanted(nil, wanted.reason, time)
else
ply:SetDBVar('wanted', nil)
end
end
end)
end)
hook.Add('hungerUpdate', 'dbg-admin', function(ply)
if ply:Team() == TEAM_ADMIN or ply:IsGhost() then return true end
end)
hook.Add('hungerUpdate', 'dbg-jobs.k9', function(ply)
if ply:getJobTable().notHuman then return true end
end)
hook.Add('octoinv.canLock', 'dbg-admin', function(ply, ent)
if ply:Team() == TEAM_ADMIN then
return true
end
end, -3)
hook.Add('octoinv.canUnlock', 'dbg-admin', function(ply, ent)
if ply:Team() == TEAM_ADMIN then
return true
end
end, -3)
local disabledWeps = octolib.array.toKeys {'gmod_camera','gmod_tool', 'weapon_physgun'}
hook.Add('octolib.canUse', 'dbg-use.disablePhysAndToolGun', function(ply)
local wep = ply:GetActiveWeapon()
if IsValid(wep) and disabledWeps[wep:GetClass()] then
return false
end
end)
hook.Add('EntityTakeDamage', 'dbg-move', function(ent, dmg)
if ent:IsPlayer() and not hook.Run('shouldViewPunchOnDamage', ent) then
local ang = math.random() * math.pi * 2
local dmgAmount = dmg:GetDamage() / 1.5
ent:ViewPunch(Angle(math.sin(ang) * dmgAmount, math.cos(ang) * dmgAmount, 0))
end
end)
hook.Add('OnPlayerChangedTeam', 'dbg-move', function(ply)
timer.Simple(1, function()
if not IsValid(ply) then return end
ply:MoveModifier('job', ply:getJobTable().movemods)
end)
end)