if SERVER then util.AddNetworkString( "makerecipe" ) end function genericMakeFurnace(tbl) local oldusefunc = tbl.onUse local overrideuse = function(self, ply) if SERVER or ply != LocalPlayer() then return end local DermaPanel = vgui.Create( "DFrame" ) DermaPanel:SetPos( 100, 100 ) DermaPanel:SetSize( ScrW() / 1.3, ScrH() / 1.4 ) DermaPanel:SetTitle( tbl.Name ) DermaPanel:SetDraggable( true ) DermaPanel:Center() local Grid = vgui.Create("DGrid",DermaPanel) Grid:SetPos(10,30) Grid:SetColWide(128) Grid:SetRowHeight(128) for k,v in pairs(tbl.Recipes) do local testbut = vgui.Create("DButton") testbut:SetText(v.Name) testbut:SetSize(128,128) testbut.DoClick = function(button) net.Start("makerecipe") net.WriteString(tbl.Name) if tbl.uniquedata then net.WriteUInt(self:EntIndex(), GMS.NETINT_BITCOUNT) end net.WriteUInt(k, GMS.NETINT_BITCOUNT) net.SendToServer() end Grid:AddItem(testbut) DermaPanel:MakePopup() end oldusefunc(self,ply) end tbl.onUse = overrideuse end net.Receive( "makerecipe", function(ln,ply) local tblname = net.ReadString() local tbl = GMS.Structures[tblname] assert(tbl != nil,"Maybe someone's trying to hack lol") if tbl.uniquedata then local entnum = net.ReadUInt(GMS.NETINT_BITCOUNT) tbl = GMS.UniqueStructures[entnum] end local recipenum = net.ReadUInt(GMS.NETINT_BITCOUNT) assert(tbl.Recipes != nil and tbl.Recipes[recipenum] != nil, "Invalid recpie!") local recipe = tbl.Recipes[recipenum] local numrequired = 1 for k, v in pairs( recipe.Req ) do numrequired = numrequired + v end local time = math.pow(numrequired,tbl.timemult) - ((numrequired * tbl.timemult) * math.pow(ply:GetSkill("Smelting"),tbl.skillease)) time = time * numrequired / 5 for k,v in pairs(recipe.Req) do if ply:GetResource(k) < v then ply:SendMessage("You don't have enough!", 3, Color(255, 255, 255, 255)) return end end --We have enough resources! make it! startProcessGeneric(ply,"Crafting " .. recipe.Name, time, function(player) for k,v in pairs(recipe.Results) do player:IncResource(k,v) end for k,v in pairs(recipe.Req) do ply:DecResource(k,v) end end) end) function recipieForSmelt(tbl, name, description, required, result, ratio, mults) for k,v in pairs(mults) do local thisrecipie = {} thisrecipie.Name = name .. " x" .. v thisrecipie.Description = description thisrecipie.Req = {} thisrecipie.Req[required] = ratio[1] * v thisrecipie.Results = {} thisrecipie.Results[result] = ratio[2] * v table.insert(tbl,0,thisrecipie) end end