---Functions for hiding and showing inventory panels. -- Deals with most the the things needed for inventory panels --@client cl_inventory.lua --@alias inv --[[ Reserved inventory id's 1 - Equipment 2 - Prayers 3 - Skills 4 - Quests ]] --local qinv = nrequire("cl_qinventory.lua") local state = nrequire("cl_state.lua") --Holds weather or not player is in inventory local itm = nrequire("core/inventory/common/items.lua") --local qpray = nrequire("cl_qprayers.lua") local inv = {} local prayerequiped = { false,false,false,false,false } net.Receive("equiphelpprayer",function() prayerequiped[4] = "Noob Help" end) local lastpanel = lastpanel or 1 local qframe = nil --The master frame local qtabs = {} --The tabs local width = ScrW() local height = ScrH() local credits = 0 local creditslabel local droppanel --Dpanel to drop things on when they are dropped, should be the backmost panel, and cover the entire screen. inv.tabsheet = nil local clt = nrequire("cl_invtracker.lua") local player_data --The data the player needs to show the q panel net.Receive("art_load_player_data",function() player_data = net.ReadTable() credits = player_data.credits if creditslabel then creditslabel:SetText(credits or 0) end end) local function CreateSheetTree(tabs,dpropertysheet) for k,v in pairs(tabs) do if type(k) == "string" then local tsheet = vgui.Create( "DPropertySheet", dpropertysheet ) dpropertysheet:AddSheet(k,tsheet,"icon16/user.png") CreateSheetTree(v,tsheet) elseif type(k) == "number" then local tsheet = vgui.Create("DPanel") dpropertysheet:AddSheet(v.Name,tsheet,"icon16/user.png") local prox = v:DrawOnDPanel(tsheet) v:AddObserver(prox) else error("k was not a number or string, it was a " .. type(k)) end end end local function BuildInventory() if qframe and IsValid(qframe) then return end --if not player_data then error("no player data!") player_data = {credits = 0} end if not player_data then return end --We havn't loaded in yet... qframe = vgui.Create("DFrame") qframe:SetPos(0,0) qframe:SetSize(width / 4, height) qframe:SetTitle("Inventory") qframe:SetDraggable(true) qframe:MakePopup() qframe.OnClose = function(self) droppanel:Hide() state.invopen = false self:Hide() return end qframe.Remove = function(self) state.invopen = false self:Hide() droppanel:Hide() return end creditslabel = vgui.Create("DLabel",qframe) creditslabel:SetText(credits) creditslabel:SetPos(150,5) local creditstext = vgui.Create("DLabel",qframe) creditstext:SetText("Credits:") creditstext:SetPos(100,5) local initalsheet = vgui.Create("DPropertySheet",qframe) initalsheet:Dock(FILL) CreateSheetTree(clt.known_inventories,initalsheet) end ---Shows the player's inventory. -- If the player's inventory hasn't been built yet, builds the inventory, then displays it. function inv.ShowInventory() if not qframe then BuildInventory() else qframe:Show() end state.invopen = true droppanel = vgui.Create("DPanel") droppanel:SetSize(ScrW(),ScrH()) droppanel:SetPos(0,0) droppanel:MoveToBack() droppanel:SetAlpha(10) droppanel:Receiver("item",function(self,panels,dropped,_,_,_) if not dropped then return end local froment = panels[1].info.owner local fromid = panels[1].info.id local frompos = panels[1].info.pos itm.DropItem(froment,fromid,frompos) end,{}) end ---Hides the players inventory. -- If the player's inventory is already hidden, does nothing function inv.HideInventory() droppanel:Remove() state.invopen = false qframe:Hide() if (not sheet) or (not sheet:GetActiveTab()) or (not sheet:GetActiveTab():GetPanel()) then return end lastpanel = sheet:GetActiveTab():GetPanel().sheetnum for k,v in pairs(LocalPlayer().invdisplays) do if not v.panel:IsValid() then continue end v.panel:Close() LocalPlayer().invdisplays[k] = nil end end hook.Add("OnSpawnMenuOpen","ArteryOpenInventory",inv.ShowInventory) hook.Add("OnSpawnMenuClose","ArteryCloseInventory",inv.HideInventory) concommand.Add("showinventory",inv.ShowInventory) local viewdistance = 100 local rotatespeed = 65 local bone = nil local previousheadscale = Vector(1,1,1) local toggle_arteryview = false hook.Add("CalcView","ArteryInventoryView",function(ply,pos,ang,fov,nearz,farz) if not toggle_arteryview then return end if state.invopen then local trot = math.rad(CurTime() * rotatespeed) local xoff = viewdistance * math.sin(trot) local yoff = viewdistance * math.cos(trot) view.origin = view.origin + Vector(xoff,yoff,10) ang.pitch = 20 ang.yaw = (-CurTime() * rotatespeed) - 90 else if bone == nil then bone = LocalPlayer():LookupBone("ValveBiped.Bip01_Head1") end local view = {} local tr = util.TraceLine({ start = pos, endpos = (ang:Forward() * -100) + pos, filter = LocalPlayer() }) view.origin = tr.HitPos or (ang:Forward() * -100) + pos end view.angles = ang view.fov = fov view.drawviewer = true--state.invopen return view end) concommand.Add("delete_inventory",function(ply,cmd,args) qframe = nil end) concommand.Add("toggle_artery_view",function(ply,cmd,args) toggle_arteryview = not toggle_arteryview end) return inv