aboutsummaryrefslogtreecommitdiff
path: root/gamemode/questsystem/component_gather.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/questsystem/component_gather.lua')
-rw-r--r--gamemode/questsystem/component_gather.lua71
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)