aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-01-04 23:27:36 -0500
committerAlexander Pickering <alexandermpickering@gmail.com>2017-01-04 23:27:36 -0500
commit4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99 (patch)
treeac47724191a8959c19b2408d4da384d64b6098ec /gamemode/inventorysystem
parent2c4329e2b6e19182a441f79a5c3010011f8ae767 (diff)
downloadartery-4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99.tar.gz
artery-4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99.tar.bz2
artery-4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99.zip
Started refactoring item and inventory system
Diffstat (limited to 'gamemode/inventorysystem')
-rw-r--r--gamemode/inventorysystem/equipment.lua67
1 files changed, 67 insertions, 0 deletions
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