mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
128 lines
3.5 KiB
Lua
128 lines
3.5 KiB
Lua
|
|
--[[
|
||
|
|
| 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
|