-- do return end -- --[[ -- Displays shop npc's interfaces -- -- public functions: -- (sv)ART.OpenShop(shoptbl, ply) :: nil -- (sv)ART.CreateShop(npctbl) :: nil -- net messages: -- art_openshop -- ]] -- -- local ivf = include("inventory_common.lua") -- ART = ART or {} -- -- if SERVER then -- for k,v in pairs({ -- "art_openshop", -- "art_buyitem", -- "art_sellitem", -- }) do -- util.AddNetworkString(v) -- end -- -- function ART.OpenShop(tbl, ply) -- print("Called openshop!") -- print("tbl was") -- PrintTable(tbl) -- if CLIENT then return end -- net.Start("art_openshop") -- net.WriteTable(tbl) -- net.Send(ply) -- end -- -- function ART.CreateShop(npc) -- print("Createing shop npc") -- local npcent = ents.Create("npc_shop") -- for k,v in pairs(npc) do -- npcent[k] = v -- end -- npcent:Spawn() -- print("Called spawn") -- end -- -- end -- -- if SERVER then return end -- local w,h = ScrW(),ScrH() -- local function DrawShopItemOnDPanel(dp,itemtbl,cost) -- --An item is a string, and int cost -- -- local shape = itemtbl.Shape -- local twidth,theight = 0,#shape -- for k=1,#shape do -- twidth = math.max(twidth,#shape[k]) -- end -- -- local slotsize = math.Round(w / 32) -- local backgrid = vgui.Create( "DGrid", dp ) -- backgrid:SetPos( 10, 30 ) -- backgrid:SetCols( twidth ) -- backgrid:SetColWide( theight ) -- backgrid:Dock(LEFT) -- -- local shopicon = vgui.Create( "DImageButton", dp ) -- shopicon:SetSize(slotsize * twidth, slotsize * theight) -- shopicon:SetPos(0,0) -- shopicon:SetText(itemtbl.Name) -- if itemtbl.Tooltip then -- shopicon:SetTooltip(itemtbl.Tooltip) -- end -- if itemtbl.Paint then -- shopicon.Paint = itemtbl.Paint -- end -- if itemtbl.DoOnPanel then -- itemtbl.DoOnPanel(shopicon) -- end -- shopicon.Paint = function(self, w, h) -- surface.SetDrawColor( 0, 0, 0, 255 ) -- surface.DrawOutlinedRect( 0, 0, w, h) -- end -- shopicon.DoClick = function() -- print("You cliked me!") -- end -- shopicon.Item = itemtbl -- shopicon.Cost = cost -- shopicon:Droppable("Inventory") -- shopicon.ondropped = function(back,j,i,item) -- print("ondropped was called!") -- print("back",back,"j",j,"i",i,"item",item) -- PrintTable(item) -- net.Start("buyitem") -- net.WriteString(item.Name) -- net.WriteUInt(back,8) -- net.WriteUInt(j,8) -- net.WriteUInt(i,8) -- net.SendToServer() -- end -- -- print("Displaying shape:") -- PrintTable(shape) -- for k = 1, twidth do -- for i = 1, theight do -- if not shape[k][i] then -- print("Found false spot:",k,i) -- local emptyslot = vgui.Create("DPanel", dp) -- emptyslot:SetSize(slotsize,slotsize) -- emptyslot:SetPos(slotsize * (i - 1) + 2, slotsize * (k - 1) + 2) -- end -- end -- end -- -- end -- -- local slotsize = math.Round(w / 32) -- -- local function DrawShopOnDPanel(dp,items) -- --This gets pretty involved, lets try to not make it a clusterfuck. -- dp.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(100,0,0)) end -- print("dp",dp) -- local scrollpanel = vgui.Create( "DScrollPanel",dp ) -- print("scollpanel",scrollpanel) -- scrollpanel.Paint = function(self, w, h) draw.RoundedBox(4, 0,0,w,h,Color(0,0,100)) end -- scrollpanel:Dock(FILL) -- for k,v in pairs(items) do -- local itemtbl = ART.GetItemByName(v[1]) -- local invpanel = vgui.Create( "DPanel", scollpanel) -- invpanel.Paint = function(self, w, h) -- draw.RoundedBox(4, 1,1,w-4,h-4,Color(50,50,50)) -- draw.RoundedBox(4, 2,2,w-5,h-5,Color(100,100,100)) -- end -- print("invpanel",invpanel) -- DrawShopItemOnDPanel(invpanel,itemtbl,v[2]) -- scrollpanel:AddItem(invpanel) -- invpanel:Dock(TOP) -- local x,_ = invpanel:GetSize() -- print("item is",v) -- PrintTable(v) -- invpanel:SetSize(x,slotsize*(#itemtbl.Shape) + 4) -- invpanel:Dock(TOP) -- -- end -- -- end -- -- local shopwindow,shoppanel -- -- local function createshopwindow() -- print("Createing shopwindow") -- shopwindow = vgui.Create( "DFrame" ) -- shopwindow:SetPos( w - (w / 4), 0 ) -- shopwindow:SetSize( w / 4, h ) -- shopwindow:SetTitle( "Unset shop" ) -- shopwindow:SetDraggable( true ) -- shopwindow.OnClose = function(self) -- self:SetVisible(false) -- print("After onclose, shopwindow was",shopwindow) -- end -- shopwindow:SetVisible(false) -- -- shoppanel = vgui.Create( "DPanel",shopwindow) -- shoppanel:SetPos( 10, 30 ) -- Set the position of the panel -- shoppanel:Dock(FILL) -- end -- createshopwindow() -- -- net.Receive("art_openshop",function() -- print("shopwindows was ",shopwindow) -- if not shopwindow:IsValid() then createshopwindow() end -- assert(shopwindow,"Shopwindow was not created, even after re-createing!") -- ShowInventory() -- shopwindow:SetVisible(true) -- local stock = net.ReadTable() -- DrawShopOnDPanel(shoppanel,stock) -- shopwindow:MakePopup() -- end)