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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
--[[
Displays the inventory, for more information see /gamemode/shared/inventory.lua
]]
print("Hello from cl_inventory.lua")
local invfuncs = include("../shared/inventory_common.lua")
local plyisininventory = false
function ShowInventory(ply,cmd,args)
if plyisininventory then return end
plyisininventory = true
local width = ScrW()
local height = ScrH()
local dat = {}
dat.panel = vgui.Create( "DFrame" )
dat.redraw = ShowInventory
table.insert(LocalPlayer().invdisplays,dat)
local invpanel = dat.panel
invpanel:SetPos( 0, 0 )
invpanel:SetSize( width / 4, height )
invpanel:SetTitle( "Inventory" )
invpanel:SetDraggable( true )
invpanel:MakePopup()
invpanel.OnClose = function(self)
plyisininventory = false
end
local sheet = vgui.Create( "DPropertySheet", invpanel )
sheet:Dock( FILL )
local invsheet = vgui.Create( "DPanel", sheet )
invsheet.Paint = function( self, w, h ) draw.RoundedBox( 4, 0, 0, w, h, Color( 157, 160, 167 ) ) end
sheet:AddSheet( "Inventory", invsheet, "icon16/cross.png" )
local skillsheet = vgui.Create( "DPanel", sheet )
skillsheet.Paint = function( self, w, h ) draw.RoundedBox( 4, 0, 0, w, h, Color( 157, 160, 167 ) ) end
sheet:AddSheet( "Skills", skillsheet, "icon16/tick.png" )
--Display gear
local slotsize = math.Round(width / 32)
local displaypos = {
["Head"] = {(width / 8) - slotsize, 25},
["Body"] = {(width / 8) - slotsize, slotsize + 26},
["Legs"] = {(width / 8) - slotsize, (slotsize * 2) + 27},
["Boots"] = {(width / 8) - slotsize, (slotsize * 3) + 28},
["Gloves"] = {(width / 8) + (slotsize), (slotsize * 2) + 27},
["Left"] = {(width / 8) - (1.5 * slotsize), (slotsize * 4) + 29},
["Right"] = {(width / 8) - (0.5 * slotsize), (slotsize * 4) + 29}
}
print("Displaying inventory:")
PrintTable(LocalPlayer().Inventory.Equiped)
for k,v in pairs (LocalPlayer().Inventory.Equiped) do
if v == false then
local eqslot = vgui.Create( "DPanel", invsheet )
eqslot:SetSize( slotsize, slotsize )
eqslot:SetPos(displaypos[k][1],displaypos[k][2])
eqslot:Receiver( "Inventory", function( receiver, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY )
if not isDropped then return end
print("Attempting to equip")
local icon = tableOfDroppedPanels[1]
local item = icon.Item
PrintTable(item)
print("In",k)
if item.Equipable == k then
net.Start("equipitem")
net.WriteUInt(icon.backpacknum,16) -- Backpack number
local fromtbl = icon.invpos
net.WriteUInt(fromtbl[1],16) -- From position
net.WriteUInt(fromtbl[2],16)
print("Writing string",k)
net.WriteString(k)
net.SendToServer()
end
end, {} )
else
print("eqslot",k,"was not false, it was")
PrintTable(v)
local eqslot = vgui.Create("DPanel",invsheet)
eqslot:SetSize(slotsize,slotsize)
eqslot:SetPos(displaypos[k][1],displaypos[k][2])
--eqslot:SetImage( "overviews/de_inferno", "vgui/avatar_default" )
--eqslot.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(100,0,0)) end
eqslot:Droppable("Inventory")
eqslot.Item = v
eqslot.wasequiped = k
end
end
local backpacksheet = vgui.Create( "DPropertySheet", invsheet )
backpacksheet:SetPos(0,slotsize * 6)
backpacksheet:SetSize((width / 4) - 25, height - (slotsize * 6) - 50)
for k,v in pairs(LocalPlayer().Inventory.Backpacks) do
local tbacksheet = vgui.Create( "DPanel", backpacksheet )
tbacksheet.Paint = function( self, w, h ) draw.RoundedBox( 4, 0, 0, w, h, Color( 157, 160, 167 ) ) end
backpacksheet:AddSheet( v[3], tbacksheet, "icon16/cross.png" )
invfuncs.DrawBackpackOnDPanel(tbacksheet,v,k,LocalPlayer())
--[[
local backgrid = vgui.Create( "DGrid", tbacksheet )
backgrid:SetPos( 10, 30 )
backgrid:SetCols( v[2][1] )
backgrid:SetColWide( v[2][2] )
backgrid:Dock(FILL)
for i=1,#(v[1]) do
for j=1,#(v[1][i]) do
if type(v[1][j][i]) == "table" then
print("Loading icon")
local item = v[1][j][i]
print("Item is:")
PrintTable(item)
local itemwidth = 0
for _,l in pairs(item.Shape) do
itemwidth = math.Max(itemwidth,#l)
end
local itemheight = #item.Shape
local invicon = vgui.Create( "DButton", tbacksheet )
invicon:SetSize(slotsize*itemwidth,slotsize*itemheight)
invicon:SetPos(slotsize*(i-1),slotsize*(j-1))
--invicon.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(0,100,0)) end
invicon.Item = item
invicon.invpos = {j,i}
invicon.backpack = k
invicon:Droppable("Inventory")
elseif not v[1][j][i] then
local emptyslot = vgui.Create("DPanel", tbacksheet)
emptyslot:SetSize(slotsize,slotsize)
emptyslot:SetPos(slotsize*(i-1),slotsize*(j-1))
--emptyslot.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(0,0,100)) end
emptyslot:Receiver( "Inventory", function( receiver, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY )
if not isDropped then return end
print("receiver",receiver)
print("menuIndex",menuIndex)
print("tableOfDroppedPanels",tableOfDroppedPanels)
PrintTable(tableOfDroppedPanels)
local item = tableOfDroppedPanels[1].Item
print("Checking if item:")
PrintTable(item)
print("Can fit in pack:",j,i)
if invfuncs.CanFitInBackpack(v,j,i,item) then
local fromtbl = tableOfDroppedPanels[1].invpos
local wasequiped = tableOfDroppedPanels[1].wasequiped
if wasequiped then
print("wasequiped",wasequiped)
net.Start("unequipitem")
net.WriteString(wasequiped)
net.WriteUInt(k,16)
net.WriteUInt(i,16)
net.WriteUInt(j,16)
net.SendToServer()
else
net.Start("moveitem")
net.WriteUInt(k,16) -- Backpack number
net.WriteUInt(fromtbl[1],16) -- From position
net.WriteUInt(fromtbl[2],16)
net.WriteUInt(j,16) -- To position
net.WriteUInt(i,16)
net.SendToServer()
if item.onEquip ~= nil then
item:onEquip(LocalPlayer())
end
end
end
end, {} )
end
end
end
]]
end
end
hook.Add("OnSpawnMenuOpen","ArteryOpenInventory",ShowInventory)
hook.Add("OnSpawnMenuClose","ArteryCloseInventory",function()
if LocalPlayer().invpanel == nil then return end
LocalPlayer().invpanel:Remove()
plyisininventory = false
end)
concommand.Add("showinventory",ShowInventory)
local viewdistance = 100
local rotatespeed = 65
hook.Add("CalcView","ArteryInventoryView",function(ply,pos,ang,fov,nearz,farz)
local view = {}
view.origin = pos
if plyisininventory then
local xoff = viewdistance * math.sin(math.rad(CurTime() * rotatespeed))
local yoff = viewdistance * math.cos(math.rad(CurTime() * rotatespeed))
view.origin = view.origin + ( Vector(xoff,yoff,10) )
ang.pitch = 20
ang.yaw = (-CurTime() * rotatespeed) - 90
end
view.angles = ang
view.fov = fov
view.drawviewer = plyisininventory
return view
end)
|