Files
wnsrc/gamemodes/darkrp/plugins/willardskills/sv_plugin.lua

128 lines
3.5 KiB
Lua
Raw Normal View History

2024-08-04 22:55:00 +03:00
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local PLUGIN = PLUGIN
-- Replace the Schema function concerning combine doors
function PLUGIN:PlayerUseDoor(client, door)
if (!IsValid(client)) then return end
if (!door:HasSpawnFlags(256) and !door:HasSpawnFlags(1024)) and door:GetNetVar("combineDoor") then -- Make sure we're dealing with a combine door before doing anything
if (client:HasActiveCombineSuit() or ix.faction.Get(client:Team()).allowCombineDoors) then
return
end
local character = client:GetCharacter()
if (character) then
local idCards = character:GetInventory():GetItemsByUniqueID("id_card")
if (!istable(idCards)) then return false end
-- if no id card do nothing
if (#idCards == 0) then
return false
else
-- check for access
for _, v in pairs(idCards) do
if (v.data and v.data.doorAccess and istable(v.data.doorAccess) and table.HasValue(v.data.doorAccess, door:MapCreationID())) then
if (v:GetData("active") == true) then
door:Fire("open")
return true
else
ix.combineNotify:AddImportantNotification("WRN:// Inactive Identification Card #" .. v:GetData("cid", 00000) .. " on " .. door:GetNetVar("name") .. " ingress", nil, client, door:GetPos())
return false
end
end
end
end
end
end
end
netstream.Hook("SetDoorAccessCID", function(client, doorEntity, charID)
if (client:Team() != FACTION_ADMIN) then return end
if !ix.char.loaded[charID] then
return false
end
local character = ix.char.loaded[charID]
if !character:GetIdCard() then
return false
end
local cardId = character:GetIdCard()
if !ix.item.instances[cardId] then
return false
end
local CID = ix.item.instances[cardId]
local doorAccess = CID:GetData("doorAccess", {})
if table.HasValue(doorAccess, doorEntity:MapCreationID()) then
for k, v in pairs(doorAccess) do
if v == doorEntity:MapCreationID() then
table.remove(doorAccess, k)
CID:SetData("doorAccess", doorAccess)
client:NotifyLocalized("This CID already has access, removed access.")
return
end
end
end
table.insert(doorAccess, doorEntity:MapCreationID())
CID:SetData("doorAccess", doorAccess)
client:NotifyLocalized("Access given to the CID.")
end)
-- Open crafting menu on E crafting table
function PLUGIN:OnItemSpawned(entity)
local item = entity:GetItemTable()
if item.uniqueID == "tool_craftingbench" then
entity.Use = function(ent, activator, caller)
local itemTable = ent:GetItemTable()
if (IsValid(caller) and caller:IsPlayer() and caller:GetCharacter() and itemTable) then
itemTable.player = caller
itemTable.entity = ent
if (itemTable.functions.take.OnCanRun(itemTable)) then
caller:PerformInteraction(ix.config.Get("itemPickupTime", 0.5), ent, function(client)
if (!ix.item.PerformInventoryAction(client, "take", ent)) then
return false -- do not mark dirty if interaction fails
end
end)
end
itemTable.player = nil
itemTable.entity = nil
end
-- Shitty workaround for quicktapping a button
if activator:KeyPressed(IN_USE) then
timer.Simple(0.1, function()
if activator then
if !activator:KeyDown(IN_USE) then
if activator:GetCharacter() then
netstream.Start(activator, "OpenCraftingMenu")
end
end
end
end)
end
end
end
end