diff options
Diffstat (limited to 'gamemode/inventorysystem/abilities/sh_abilities.lua')
| -rw-r--r-- | gamemode/inventorysystem/abilities/sh_abilities.lua | 69 |
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) |
