From 4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Wed, 4 Jan 2017 23:27:36 -0500 Subject: Started refactoring item and inventory system --- gamemode/inventorysystem/equipment.lua | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 gamemode/inventorysystem/equipment.lua (limited to 'gamemode/inventorysystem') diff --git a/gamemode/inventorysystem/equipment.lua b/gamemode/inventorysystem/equipment.lua new file mode 100644 index 0000000..710c6b8 --- /dev/null +++ b/gamemode/inventorysystem/equipment.lua @@ -0,0 +1,67 @@ +--[[ + A simple inventory that holds 1 item +]] +local itm = nrequire("item.lua") +local ste = nrequire("utility/stream.lua") +local inventory = nrequire("inventory/inventory.lua") +local slots = { + "Head", + "Shoulders", + "Chest", + "Arms", + "Hands", + "Legs", + "Belt", + "Feet", + "Back", +} + +for k,v in pairs(slots) do + local inv = {} + inv.Name = "inv_" .. v + inv.FindPlaceFor = function(self, item) + if self.item == nil then return {} else return nil end + end + inv.CanFitIn = function(self,position,item) + if self.item == nil then return true else return "Inventory slot occupied by a(n)" .. self.item.Name end + end + inv.Put = function(self,pos,item) + self.item = item + end + inv.Has = function(self,prt) + if type(prt) == "string" then + if self.item ~= nil and self.item.Name == prt then return {} else return nil end + elseif type(prt) == "function" then + if prt(self.item) then return {} else return nil end + end + error(string.format("Passed a %s to %s:Has(), expected string or function",type(prt),self.Name)) + end + inv.Remove = function(self,pos) + self.item = nil + end + inv.Get = function(self,pos) + return self.item + end + inv.Serialize = function(self) + if self.item then + local data = ste.CreateStream() + local itemname = self.item.Name + local itemdata = self.item:Serialize() + data:WriteString(itemname) + data:WriteString(itemdata) + return data:ToString() + end + return "" + end + inv.DeSerialize = function(self,str) + if str == "" then + return table.Copy(self) + else + local data = ste.CreateStream(str) + local itemname = data:ReadString() + local itemdata = data:ReadString() + self.item = itm.GetItemFromData(itemname,itemdata) + end + end + inventory.RegisterInventory(inv) +end -- cgit v1.2.3-70-g09d2