aboutsummaryrefslogtreecommitdiff
path: root/gamemode/inventorysystem/abilities/sh_abilities.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/inventorysystem/abilities/sh_abilities.lua')
-rw-r--r--gamemode/inventorysystem/abilities/sh_abilities.lua69
1 files changed, 69 insertions, 0 deletions
diff --git a/gamemode/inventorysystem/abilities/sh_abilities.lua b/gamemode/inventorysystem/abilities/sh_abilities.lua
new file mode 100644
index 0000000..fc6cd82
--- /dev/null
+++ b/gamemode/inventorysystem/abilities/sh_abilities.lua
@@ -0,0 +1,69 @@
+--[[
+ prayers must have a "Pray" method,
+ a "Name" string,
+ a "Description" string
+
+]]
+local reg = nrequire("inventory/inventory.lua")
+local itm = nrequire("item.lua")
+local inv = {}
+if CLIENT then
+ inv = nrequire("cl_prayers.lua")
+end
+
+inv.Name = "Abilities"
+inv.track = {}
+function inv:FindPlaceFor(item)
+ if item.Pray ~= nil then
+ return {#self.track}
+ end
+ return nil
+end
+function inv:CanFitIn(pos,item)
+ return pos[1] == #self.track
+end
+function inv:Put(pos,item)
+ self.track[pos[1]] = item
+end
+function inv:Has(a)
+ if type(a) == "string" then
+ for k,v in pairs(self.track) do
+ if v == a then return {k} end
+ end
+ elseif type(a) == "function" then
+ for k,v in pairs(self.track) do
+ if a(v) then return {k} end
+ end
+ end
+ return nil
+end
+function inv:Remove(pos)
+ for i = 1,pos[1] do
+ self.track[i] = self.track[i + 1]
+ end
+end
+function inv:Get(pos)
+ return self.track[pos[1]]
+end
+function inv:Serialize()
+ local ret = {}
+ for k,v in pairs(self.track) do
+ ret[v.Name] = v:Serialize()
+ end
+ return util.TableToJSON(ret)
+end
+
+function inv:DeSerialize(str)
+ self.track = {}
+ local tbl = util.JSONToTable(str)
+ tbl = tbl or {}
+ local i = 1
+ for k,v in pairs(tbl) do
+ local this_prayer = itm.GetItemByName(k):DeSerialize(v)
+ self:Put({i},this_prayer)
+ end
+ return self
+end
+
+
+reg.RegisterInventory(inv)