summaryrefslogtreecommitdiff
path: root/gamemode/structuresystem/common_smelt.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/structuresystem/common_smelt.lua')
-rw-r--r--gamemode/structuresystem/common_smelt.lua84
1 files changed, 84 insertions, 0 deletions
diff --git a/gamemode/structuresystem/common_smelt.lua b/gamemode/structuresystem/common_smelt.lua
new file mode 100644
index 0000000..43637e1
--- /dev/null
+++ b/gamemode/structuresystem/common_smelt.lua
@@ -0,0 +1,84 @@
+
+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