129 lines
3.5 KiB
Lua
129 lines
3.5 KiB
Lua
local meta = FindMetaTable("Player")
|
|
local pocket = {}
|
|
local frame
|
|
local reload
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
Stubs
|
|
---------------------------------------------------------------------------]]
|
|
DarkRP.stub{
|
|
name = "openPocketMenu",
|
|
description = "Open the DarkRP pocket menu.",
|
|
realm = "Client",
|
|
parameters = {
|
|
},
|
|
returns = {
|
|
},
|
|
metatable = DarkRP
|
|
}
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
Interface functions
|
|
---------------------------------------------------------------------------]]
|
|
function meta:getPocketItems()
|
|
if self ~= LocalPlayer() then return nil end
|
|
|
|
return pocket
|
|
end
|
|
|
|
function DarkRP.openPocketMenu()
|
|
if IsValid(frame) and frame:IsVisible() then return end
|
|
local wep = LocalPlayer():GetActiveWeapon()
|
|
if not wep:IsValid() or wep:GetClass() ~= "pocket" then return end
|
|
|
|
if not pocket then
|
|
pocket = {}
|
|
|
|
return
|
|
end
|
|
|
|
if table.IsEmpty(pocket) then return end
|
|
frame = vgui.Create("DFrame")
|
|
|
|
local count = GAMEMODE.Config.pocketitems or GM.Config.pocketitems
|
|
frame:SetSize(345, 32 + 64 * math.ceil(count / 5) + 3 * math.ceil(count / 5))
|
|
frame:SetTitle(DarkRP.getPhrase("drop_item"))
|
|
frame.btnMaxim:SetVisible(false)
|
|
frame.btnMinim:SetVisible(false)
|
|
frame:SetDraggable(false)
|
|
frame:MakePopup()
|
|
frame:Center()
|
|
|
|
local Scroll = vgui.Create("DScrollPanel", frame)
|
|
Scroll:Dock(FILL)
|
|
|
|
local sbar = Scroll:GetVBar()
|
|
sbar:SetWide(3)
|
|
frame.List = vgui.Create("DIconLayout", Scroll)
|
|
frame.List:Dock(FILL)
|
|
frame.List:SetSpaceY(3)
|
|
frame.List:SetSpaceX(3)
|
|
reload()
|
|
frame:SetSkin(GAMEMODE.Config.DarkRPSkin)
|
|
end
|
|
net.Receive("DarkRP_PocketMenu", DarkRP.openPocketMenu)
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
UI
|
|
---------------------------------------------------------------------------]]
|
|
function reload()
|
|
if not IsValid(frame) or not frame:IsVisible() then return end
|
|
if not pocket or next(pocket) == nil then frame:Close() return end
|
|
|
|
local itemCount = table.Count(pocket)
|
|
|
|
frame.List:Clear()
|
|
local items = {}
|
|
|
|
for k, v in pairs(pocket) do
|
|
local ListItem = frame.List:Add("DPanel")
|
|
ListItem:SetSize(64, 64)
|
|
|
|
local icon = vgui.Create("SpawnIcon", ListItem)
|
|
icon:SetModel(v.model)
|
|
icon:SetSize(64, 64)
|
|
icon:SetTooltip()
|
|
icon.DoClick = function(self)
|
|
icon:SetTooltip()
|
|
|
|
net.Start("DarkRP_spawnPocket")
|
|
net.WriteFloat(k)
|
|
net.SendToServer()
|
|
pocket[k] = nil
|
|
|
|
itemCount = itemCount - 1
|
|
|
|
if itemCount == 0 then
|
|
frame:Close()
|
|
return
|
|
end
|
|
|
|
fn.Map(self.Remove, items)
|
|
items = {}
|
|
|
|
local wep = LocalPlayer():GetActiveWeapon()
|
|
|
|
wep:SetHoldType("pistol")
|
|
timer.Simple(0.2, function()
|
|
if wep:IsValid() then
|
|
wep:SetHoldType("normal")
|
|
end
|
|
end)
|
|
end
|
|
|
|
table.insert(items, icon)
|
|
end
|
|
if itemCount < GAMEMODE.Config.pocketitems then
|
|
for _ = 1, GAMEMODE.Config.pocketitems - itemCount do
|
|
local ListItem = frame.List:Add("DPanel")
|
|
ListItem:SetSize(64, 64)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function retrievePocket()
|
|
pocket = net.ReadTable()
|
|
reload()
|
|
end
|
|
net.Receive("DarkRP_Pocket", retrievePocket)
|