--[[ 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)