--[[ Quests must have an Arcs field ]] local reg = nrequire("inventory/inventory.lua") local itm = nrequire("item.lua") local inv = {} if CLIENT then inv = nrequire("cl_quests.lua") end inv.Name = "Quests" inv.track = {} function inv:FindPlaceFor(item) if item.Arcs ~= nil then return {#self.track + 1} end return nil end function inv:CanFitIn(pos,item) return pos[1] == #self.track + 1 end function inv:Put(pos,item) print("Added a quest:") PrintTable(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 {} for k,v in pairs(tbl) do local quest = itm.GetItemByName(k):DeSerialize(v) self.track[#self.track + 1] = quest end return self end reg.RegisterInventory(inv)