diff options
Diffstat (limited to 'gamemode/itemsystem')
| -rw-r--r-- | gamemode/itemsystem/quest.lua | 68 |
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") |
