From 5c4ebc932d8c02522802c842d43d863d89aca162 Mon Sep 17 00:00:00 2001 From: Apickx Date: Mon, 28 Dec 2015 19:10:44 -0500 Subject: Initial commit --- gamemode/shared/player_recipes.lua | 102 +++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 gamemode/shared/player_recipes.lua (limited to 'gamemode/shared/player_recipes.lua') diff --git a/gamemode/shared/player_recipes.lua b/gamemode/shared/player_recipes.lua new file mode 100644 index 0000000..4a85535 --- /dev/null +++ b/gamemode/shared/player_recipes.lua @@ -0,0 +1,102 @@ + +local meta = FindMetaTable("Player") + +if (SERVER) then + util.AddNetworkString("CreateRecipe") + util.AddNetworkString("ResetRecipes") + + function meta:CreateRecipe(item) + if (!self:CanCreateItem(item)) then return end + + local Rec,Item = GetRecipeForItem(item) + + if (!Rec) then return false end + + for a,b in pairs(Rec.Resources) do + self:RemoveItem(a,b) + end + + if(Item.OnCraft) then + Item:OnCraft(self) + end + + self:AddItem(item,1) + end + + function meta:ResetKnownRecipes() + net.Start("ResetRecipes") net.Send(self) + end + + net.Receive("CreateRecipe",function(siz,pl) pl:CreateRecipe(net.ReadString()) end) +else + function RequestCreateRecipe(item) + net.Start("CreateRecipe") + net.WriteString(item) + net.SendToServer() + end + + function DiscoverItems(Combinations) + local Dat = {} + + for k,v in pairs(GAMEMODE.Recipes) do + local Ab = v.Recipe.Resources + local Tools = v.Recipe.Tools + local PA = table.Count(Ab) + + if (PA == table.Count(Combinations)) then + local Check = 0 + + for e,c in pairs(Combinations) do + for a,b in pairs(Ab) do + if (c.Name == a and c.Quantity == b) then Check = Check+1 break end + end + end + + if (Check == PA) then table.insert(Dat,v) end + end + end + + if (table.Count(Dat) > 0) then + for e,c in pairs(GAMEMODE.KnownRecipes) do + for k,v in pairs(Dat) do + if (v.Name == c.Name) then table.remove(Dat,k) break end + end + end + + if (table.Count(Dat) > 0) then + for k,v in pairs(Dat) do + LocalPlayer():AddNote("You discovered the recipe for "..v.Name) + end + + table.Add(GAMEMODE.KnownRecipes,Dat) + + ReloadRecipes() + end + end + end + + net.Receive("ResetRecipes",function() + GAMEMODE.KnownRecipes = { + GetItemByName("Axe"), + GetItemByName("Campfire"), + GetItemByName("Pickaxe"), + GetItemByName("Research Table") + } + + ReloadRecipes() + end) +end + +function meta:CanCreateItem(name) + local Rec,Item = GetRecipeForItem(name) + + if (!Rec) then return false end + + for k,v in pairs(Rec) do + for a,b in pairs(v) do + if (!self:HasItem(a,b)) then return false end + end + end + + return true +end -- cgit v1.2.3-70-g09d2