aboutsummaryrefslogtreecommitdiff
path: root/gamemode/itemsystem/quest.lua
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2018-07-15 19:57:27 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2018-07-15 19:57:27 -0400
commit534103be54a129d8255988fc1e75a21a63c6021f (patch)
treec172b0884b4ca26452c5a74f5033b3b1526b6e3a /gamemode/itemsystem/quest.lua
parent34d9ae7c4f4176fa9a943e9c2776afc32a867163 (diff)
downloadartery-534103be54a129d8255988fc1e75a21a63c6021f.tar.gz
artery-534103be54a129d8255988fc1e75a21a63c6021f.tar.bz2
artery-534103be54a129d8255988fc1e75a21a63c6021f.zip
Finished gather quest arcs
Finished base quest system, and added "Gather" arcs, where players gather a certain number of a certain item.
Diffstat (limited to 'gamemode/itemsystem/quest.lua')
-rw-r--r--gamemode/itemsystem/quest.lua68
1 files changed, 62 insertions, 6 deletions
diff --git a/gamemode/itemsystem/quest.lua b/gamemode/itemsystem/quest.lua
index d75c42c..bf0ef2b 100644
--- a/gamemode/itemsystem/quest.lua
+++ b/gamemode/itemsystem/quest.lua
@@ -2,6 +2,8 @@
Generic item for creating quests
]]
+local a = nrequire("core/quests/arcs.lua")
+local log = nrequire("log.lua")
local item = {}
local strikethoughmap = {
a = "a̶",
@@ -40,22 +42,76 @@ item.Arcs = {}
item.ArcsCompleted = 0
function item:GetText()
+ log.debug("Calling quest item's GetText()")
local text = {}
for i=1,self.ArcsCompleted do
local thisarctxt = self.Arcs[i]:GetText()
- for k,v in pairs(strikethoughmap) do
- print("Trying to strike though:",v)
+ local tas = {}
+ for j = 0,#thisarctxt+1 do
+ tas[#tas + 1] = strikethoughmap[thisarctxt[j]]
end
+ text[#text + 1] = table.concat(tas)
end
-
+ if self.Arcs[self.ArcsCompleted + 1] then
+ text[#text + 1] = self.Arcs[self.ArcsCompleted + 1]:GetText()
+ end
+ return table.concat(text,"\n")
end
function item:Serialize()
-
+ local s = {
+ completed = self.ArcsCompleted,
+ questname = self.QuestName,
+ rewards = self.Rewards,
+ }
+ assert(type(self.Arcs) == "table", "self.Arcs was not a table, it was a" .. type(self.Arcs))
+ for k,v in pairs(self.Arcs) do
+ s[#s + 1] = {v.Name, v:Serialize()}
+ end
+ return util.TableToJSON(s)
+end
+
+function item:UpdateCompleted()
+ --Remove ourselves
+ local qstloc = self.Owner:HasItem(function(tbl) return tbl == self end)
+ self.Owner:RemoveItem(qstloc)
+
+ log.debug("Quest item's UpdateCompleted() called")
+ log.debug(string.format("Looking at %s arc:", self.Arcs[self.ArcsCompleted + 1].Name))
+ if self.Arcs[self.ArcsCompleted + 1]:Complete() then
+ log.debug("Completed!")
+ self.ArcsCompleted = self.ArcsCompleted + 1
+ end
+ if #self.Arcs == self.ArcsCompleted then
+ log.debug("Completed Quest! : " .. self.QuestName)
+ end
+
+ --Re-add ourselves
+ self.Owner:GiveItem(self)
+end
+
+function item:Complete()
+ if #self.Arcs == self.ArcsCompleted then
+ return true
+ elseif #self.Arcs < self.ArcsCompleted then
+ log.error(string.format("Finished %d arcs of %d arcs in quest %s",self.ArcsCompleted, #self.Arcs, self.QuestName))
+ else
+ return false
+ end
end
-function item:DeSerialize()
-
+function item:DeSerialize(data)
+ local t = util.JSONToTable(data)
+ self.ArcsCompleted = t.completed
+ self.QuestName = t.questname
+ self.Rewards = t.rewards
+ self.Arcs = {}
+ for k,v in ipairs(t) do
+ local arcname,arcdata = unpack(v)
+ local arc = a.MakeArcWithData(arcname,arcdata)
+ arc.Quest = self
+ self.Arcs[k] = arc
+ end
end
local itm = nrequire("item.lua")