mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
128
gamemodes/ixhl2rp/plugins/willardskills/sv_plugin.lua
Normal file
128
gamemodes/ixhl2rp/plugins/willardskills/sv_plugin.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user