diff options
Diffstat (limited to 'gamemode/questsystem/component_gather.lua')
| -rw-r--r-- | gamemode/questsystem/component_gather.lua | 71 |
1 files changed, 63 insertions, 8 deletions
diff --git a/gamemode/questsystem/component_gather.lua b/gamemode/questsystem/component_gather.lua index fccb32a..5647f42 100644 --- a/gamemode/questsystem/component_gather.lua +++ b/gamemode/questsystem/component_gather.lua @@ -1,25 +1,80 @@ +if SERVER then + inv = nrequire("sv_invtracker.lua") +end +local log = nrequire("log.lua") + +local quests = {} local comp = {} comp.Name = "Quest Component Gather" +function comp:Update() + if SERVER then + local items = {} + self.items = 0 + log.debug("in comp:Update, self.ItemNumber is" .. tostring(self.ItemNumber)) + for i = 1, self.ItemNumber do + local loc = self.Owner:HasItem(self.ItemName) + if loc then + items[loc] = self.Owner:RemoveItem(loc) + self.items = i + else + break + end + end + log.debug("Update called, self.items is now" .. tostring(self.items)) + for k,v in pairs(items) do + self.Owner:PutItem(k,v) + end + end + self.Quest:UpdateCompleted() +end + +function comp:Complete() + if self.items >= self.ItemNumber then + log.debug("Completed a gather arc of a quest!") + end + return self.items >= self.ItemNumber +end + +function comp:Init(ply,itemname,itemnumber) + if not ply or not itemname or not itemnumber then return end + self.ItemName = itemname + self.ItemNumber = itemnumber + self.Items = 0 + if CLIENT then return end + self.Owner = ply + -- self:Update() + quests[#quests + 1] = self + log.debug("After initalizing quest, found " .. tostring(self.items) .. " items") +end -function comp:Init(itemname,itemnumber) - self.itemname = itemname - self.itemnumber = itemnumber +if SERVER then + local plymeta = FindMetaTable("Player") + local det = plymeta.GiveItem + function plymeta:GiveItem(tbl) + det(self,tbl) + log.debug("Calling component_gather's GiveItem()") + for k,v in pairs(quests) do + if v.ItemName == tbl.Name then + v:Update() + end + end + end end function comp:GetText() - return string.format("Gather %s %s",self.itemnumber,self.itiemname) + return string.format("Gather %s %s",self.ItemNumber,self.ItemName) end function comp:Serialize() - return util.TableToJSON({itemname,itemnumber}) + return util.TableToJSON({self.ItemName,self.ItemNumber}) end function comp:DeSerialize(data) local tbl = util.JSONToTable(data) - self.itemname = tbl[1] - self.itemnumber = tbl[2] + self.ItemName = tbl[1] + self.ItemNumber = tbl[2] end -nrequire("core/quests/quest.lua").RegisterArc(comp) +nrequire("core/quests/arcs.lua").RegisterArc(comp) |
