mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
101 lines
2.6 KiB
Lua
101 lines
2.6 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
|
||
|
|
|
||
|
|
util.AddNetworkString("ixPlaceContainer")
|
||
|
|
|
||
|
|
net.Receive("ixPlaceContainer", function(_, client)
|
||
|
|
local realTime = RealTime()
|
||
|
|
|
||
|
|
if ((client.ixNextContainerPlacement or 0) <= realTime) then
|
||
|
|
local containerInfo = client:GetLocalVar("containerToPlaceInfo")
|
||
|
|
|
||
|
|
if (containerInfo) then
|
||
|
|
local bResponse = net.ReadBool()
|
||
|
|
|
||
|
|
if (bResponse) then
|
||
|
|
local pos = net.ReadVector()
|
||
|
|
local angles = net.ReadAngle()
|
||
|
|
|
||
|
|
-- i honestly haven't found any other way to check pos and angles receiven from client
|
||
|
|
local dummy = ents.Create("prop_dynamic_override")
|
||
|
|
dummy:SetMoveType(MOVETYPE_NONE)
|
||
|
|
dummy:SetModel(containerInfo.model)
|
||
|
|
dummy:SetPos(pos)
|
||
|
|
dummy:SetAngles(angles)
|
||
|
|
dummy:AddEFlags(EF_NODRAW)
|
||
|
|
dummy:Spawn()
|
||
|
|
dummy:Activate()
|
||
|
|
|
||
|
|
if (!dummy:IsInSolidEnviromentOrFloating()) then
|
||
|
|
PLUGIN:CreateContainer(client, pos, angles, containerInfo.model, containerInfo.name, "container:" .. containerInfo.model)
|
||
|
|
|
||
|
|
ix.item.instances[containerInfo.itemID]:Remove()
|
||
|
|
end
|
||
|
|
|
||
|
|
dummy:Remove()
|
||
|
|
end
|
||
|
|
|
||
|
|
client:SetLocalVar("containerToPlaceInfo", nil)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- probably should be higher
|
||
|
|
client.ixNextContainerPlacement = realTime + 2
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
|
||
|
|
-- function (almost) identical to the one in containers plugin
|
||
|
|
function PLUGIN:CreateContainer(client, pos, angles, model, name, invType)
|
||
|
|
local container = ents.Create("ix_wncontainer")
|
||
|
|
container:SetPos(pos)
|
||
|
|
container:SetAngles(angles)
|
||
|
|
container:SetModel(model)
|
||
|
|
container:Spawn()
|
||
|
|
container:DropToFloor()
|
||
|
|
|
||
|
|
-- we don't want our newely created container to be moved around
|
||
|
|
local physObj = container:GetPhysicsObject()
|
||
|
|
|
||
|
|
if (IsValid(physObj)) then
|
||
|
|
physObj:EnableMotion(false)
|
||
|
|
physObj:Sleep()
|
||
|
|
end
|
||
|
|
|
||
|
|
ix.inventory.New(0, invType, function(inventory)
|
||
|
|
inventory.vars.isBag = true
|
||
|
|
inventory.vars.isContainer = true
|
||
|
|
inventory.vars.entity = container
|
||
|
|
|
||
|
|
if (IsValid(container)) then
|
||
|
|
container:SetInventory(inventory)
|
||
|
|
|
||
|
|
if (ix.saveEnts) then
|
||
|
|
ix.saveEnts:SaveEntity(container)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
|
||
|
|
ix.log.Add(client, "containerSpawned", name)
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:PlayerSwitchWeapon(client, _, newWeapon)
|
||
|
|
if (client:GetLocalVar("containerToPlaceInfo") and newWeapon:GetClass() != "ix_keys") then
|
||
|
|
client:SetLocalVar("containerToPlaceInfo", nil)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:OnPlayerRestricted(client)
|
||
|
|
if (client:GetLocalVar("containerToPlaceInfo")) then
|
||
|
|
client:SetLocalVar("containerToPlaceInfo", nil)
|
||
|
|
end
|
||
|
|
end
|