Files
mmkrp_2026/gamemodes/darkrp/gamemode/modules/fpp/pp/sh_cppi.lua
2026-03-15 14:54:49 +03:00

113 lines
3.4 KiB
Lua

CPPI = CPPI or {}
CPPI.CPPI_DEFER = 102112 --\102\112 = fp
CPPI.CPPI_NOTIMPLEMENTED = 7080 --\70\80 = FP
function CPPI:GetName()
return "Falco's prop protection"
end
function CPPI:GetVersion()
return "universal.1"
end
function CPPI:GetInterfaceVersion()
return 1.3
end
function CPPI:GetNameFromUID(uid)
return CPPI.CPPI_NOTIMPLEMENTED
end
local PLAYER = FindMetaTable("Player")
function PLAYER:CPPIGetFriends()
if not self.Buddies then return CPPI.CPPI_DEFER end
local FriendsTable = {}
for k, v in pairs(self.Buddies) do
if not table.HasValue(v, true) then continue end -- not buddies in anything
table.insert(FriendsTable, k)
end
return FriendsTable
end
local ENTITY = FindMetaTable("Entity")
function ENTITY:CPPIGetOwner()
local Owner = FPP.entGetOwner(self)
if not IsValid(Owner) or not Owner:IsPlayer() then return SERVER and Owner or nil, self.FPPOwnerID end
return Owner, Owner:UniqueID()
end
if SERVER then
function ENTITY:CPPISetOwner(ply)
if ply == self.FPPOwner then return end
assert(ply == nil or IsEntity(ply), "The owner of an entity must be set to either nil, NULL or a valid entity.")
local valid = IsValid(ply) and ply:IsPlayer()
local steamId = valid and ply:SteamID() or nil
local canSetOwner = hook.Run("CPPIAssignOwnership", ply, self, valid and ply:UniqueID() or ply)
if canSetOwner == false then return false end
ply = canSetOwner ~= nil and canSetOwner ~= true and canSetOwner or ply
self.FPPOwner = ply
self.FPPOwnerID = steamId
self.FPPOwnerChanged = true
FPP.recalculateCanTouch(player.GetAll(), {self})
self.FPPOwnerChanged = nil
return true
end
function ENTITY:CPPISetOwnerUID(UID)
local ply = UID and player.GetByUniqueID(tostring(UID)) or nil
if UID and not ply then return false end
return self:CPPISetOwner(ply)
end
function ENTITY:CPPICanTool(ply, tool)
local cantool = FPP.Protect.CanTool(ply, nil, tool, self)
return cantool == nil and true or cantool
end
function ENTITY:CPPICanPhysgun(ply)
if not tobool(FPP.Settings.FPP_PHYSGUN1.toggle) then return true end
return FPP.plyCanTouchEnt(ply, self, "Physgun")
end
function ENTITY:CPPICanPickup(ply)
if not tobool(FPP.Settings.FPP_PHYSGUN1.toggle) then return true end
return FPP.plyCanTouchEnt(ply, self, "Gravgun")
end
function ENTITY:CPPICanPunt(ply)
if not tobool(FPP.Settings.FPP_GRAVGUN1.toggle) then return true end
return FPP.plyCanTouchEnt(ply, self, "Gravgun")
end
function ENTITY:CPPICanUse(ply)
if not tobool(FPP.Settings.FPP_PLAYERUSE1.toggle) then return true end
return FPP.plyCanTouchEnt(ply, self, "PlayerUse")
end
function ENTITY:CPPICanDamage(ply)
if not tobool(FPP.Settings.FPP_ENTITYDAMAGE1.toggle) then return true end
return FPP.plyCanTouchEnt(ply, self, "EntityDamage")
end
function ENTITY:CPPIDrive(ply)
local candrive = FPP.Protect.CanDrive(ply, self)
return candrive == nil and true or candrive
end
function ENTITY:CPPICanProperty(ply, property)
local canproperty = FPP.Protect.CanProperty(ply, property, self)
return canproperty == nil and true or canproperty
end
function ENTITY:CPPICanEditVariable(ply, key, val, editTbl)
return self:CPPICanProperty(ply, "editentity")
end
end