Files
wnsrc/gamemodes/darkrp/plugins/container_placement/items/base/sh_containers.lua
lifestorm 73479cff9e Upload
2024-08-04 22:55:00 +03:00

114 lines
3.1 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
| 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
ITEM.name = "Container"
ITEM.description = "Container."
ITEM.category = "Containers"
ITEM.model = "models/props_junk/wood_crate001a.mdl"
ITEM.width = 1
ITEM.height = 1
ITEM.colorAppendix = {["red"] = "Contact an admin to convert this into a container. Requires a group of minimum 5 members.", ["blue"] = "We have a limit of 2 small OR 1 medium personal container per player.\nGroups may also get 3 large containers."}
ITEM.maxStackSize = 1
if (CLIENT) then
function ITEM:PaintOver(item, width, height)
local client = LocalPlayer()
local info = client:GetLocalVar("containerToPlaceInfo")
if (info and info.itemID == item.id) then
surface.SetDrawColor(110, 255, 110, 100)
surface.DrawRect(width - 14, height - 14, 8, 8)
end
end
else
function ITEM:OnTransferred(oldInv, newInv)
local oldOwner = oldInv.GetOwner and oldInv:GetOwner() or nil
local oldOwnerInfo = IsValid(oldOwner) and oldOwner:GetLocalVar("containerToPlaceInfo")
if (oldOwnerInfo and oldOwnerInfo.itemID == self.id) then
oldOwner:SetLocalVar("containerToPlaceInfo", nil)
end
end
end
ITEM:Hook("drop", function(item)
local client = item.player
local info = IsValid(client) and client:GetLocalVar("containerToPlaceInfo")
if (info and info.itemID == item.id) then
client:SetLocalVar("containerToPlaceInfo", nil)
end
end)
ITEM.functions.Place = {
name = "Place",
tip = "placeTip",
icon = "icon16/arrow_down.png",
OnRun = function(item)
local client = item.player
local entity = item.entity
if (IsValid(entity)) then
local clientPos = client:GetPos()
local entityPos = entity:GetPos()
if (clientPos:DistToSqr(entityPos) <= 100 * 100) then
PLUGIN:CreateContainer(client, entity:GetPos(), entity:GetAngles(), item.model, item.name, item.invType)
return
else
client:Notify("Сontainer item is too far!")
end
else
local info = {}
info.itemID = item.id
info.name = item.name
info.model = item.model
client:SetLocalVar("containerToPlaceInfo", info)
client:SelectWeapon("ix_keys")
end
return false
end,
OnCanRun = function(item)
local client = item.player
return isstring(item.model) and isstring(item.invType) and
IsValid(client) and !client:GetLocalVar("containerToPlaceInfo") and
hook.Run("CanPlayerEquipItem", client, item) != false
end
}
ITEM.functions.PlaceCancel = {
name = "Cancel Place",
tip = "placeCancelTip",
icon = "icon16/arrow_up.png",
OnRun = function(item)
local client = item.player
client:SetLocalVar("containerToPlaceInfo", nil)
return false
end,
OnCanRun = function(item)
local client = item.player
local info = IsValid(client) and client:GetLocalVar("containerToPlaceInfo")
return isstring(item.model) and isstring(item.invType) and
!IsValid(item.entity) and info != nil and info.itemID == item.id and
hook.Run("CanPlayerUnequipItem", client, item) != false
end
}