1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
print("Custom inventory loaded")
--Some calculations to draw the inventory nicely
local scrx = ScrW()
local scry = ScrH()
--Make the menu 30% of the x to the closest 64 and 100% of the y
local invxadj = ((scrx*0.4)%64)
local invxsize = (scrx*0.40)-invxadj-38 --no idea why the 38 works, but it does
local invysize = scry
local function createMenuFor(menu, tbl)
for k,v in pairs(tbl) do
if(isfunction(v)) then --This is a dead-end, add the menu
local thisoption = menu:AddOption(k,v)
else --Otherwise it should be a table, recursively call to create
local submenu = menu:AddSubMenu(k)
createMenuFor(submenu,v)
end
end
end
local function createPanel()
local frame = vgui.Create( "DFrame" )
frame:SetSize( invxsize, invysize )
frame:SetTitle( "Inventory" )
frame:MakePopup()
frame:SetPos(scrx-invxsize,0)
frame:SetKeyboardInputEnabled(true)
frame:ShowCloseButton(false)
frame.OnKeyCodePressed = function(self, key)
if(key == KEY_Q) then
frame:Close()
end
end
local tabsheet = vgui.Create("DPropertySheet", frame)
tabsheet:Dock(FILL)
local invtab = vgui.Create("DPanel",tabsheet)
tabsheet:AddSheet( "Inventory", invtab, "icon16/database.png" )
local equiptab = vgui.Create("DPanel",tabsheet)
tabsheet:AddSheet( "Equipment", equiptab, "icon16/user.png" )
local proptab = vgui.Create("DPanel",tabsheet)
tabsheet:AddSheet( "Props", proptab, "icon16/wrench.png" )
if(LocalPlayer():IsAdmin()) then
local admintab = vgui.Create("DPanel",tabsheet)
tabsheet:AddSheet("Admin", admintab, "icon16/bullet_star.png")
end
--Inventory
local layout = vgui.Create( "DTileLayout", invtab )
layout:SetBaseSize( 64 ) -- Tile size
layout:Dock( FILL )
layout:MakeDroppable( "unique_name" ) -- Allows us to rearrange children
PrintTable(Resources)
for k, v in SortedPairs( Resources ) do
if(v == 0) then
continue
end
local selection = vgui.Create("DImageButton")
if(GMS.Resources[k] == nil) then --This resource is not registered!
selection:SetImage("vgui/avatar_default")
print("Resource:" .. k .. " not registed! This might be a bug!")
continue
elseif(GMS.Resources[k].Icon == nil) then
selection:SetImage("vgui/avatar_default")
print("Resource:" .. k .. " does not have an .Icon field! This might be a bug!")
continue
else
selection:SetImage(GMS.Resources[k].Icon)
selection:SetTooltip(GMS.Resources[k].Description)
end
selection:SetSize(64,64)
selection.DoClick = function()
if(GMS.Resources[k].UniqueData) then
print("We should expand menu to show all uniqueid's")
else
if(GMS.Resources[k].Actions == nil) then
print("gamemode/client/cl_inventory.lua: Looking for actions for " .. k .. " but found nil!")
return
end
local menu = vgui.Create("DMenu")
createMenuFor(menu,GMS.Resources[k].Actions)
menu:Open()
end
end
layout:Add( selection )
end
return frame
end
local invpanel = nil
function GM:OnSpawnMenuOpen()
if(invpanel == nil) then
invpanel = createPanel()
return
end
if(! invpanel:IsValid()) then
invpanel = createPanel()
return
end
end
function GM:ReloadSpawnMenu()
if(invpanel == nil) then
return
end
if(!invpanel:IsValid()) then
return
end
if(invpanel != nil) then
invpanel:Close()
invpanel = createPanel()
return
end
end
function GM:OnSpawnMenuClose()
end
function GM:SpawnMenuEnabled()
return false
end
|