From d3e9c1b8635ba867b19c5544112cdd0d8593ec54 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 24 Oct 2010 03:12:02 +0000 Subject: [PATCH] Leaving the level while an escort quest is going on will doom the escort git-svn-id: http://svn.net-core.org/repos/t-engine4@1614 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/class/Game.lua | 2 ++ game/modules/tome/class/Player.lua | 10 ++++++++++ game/modules/tome/data/quests/escort-duty.lua | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 7db83860a1..a149de4d7b 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -352,6 +352,8 @@ function _M:changeLevel(lev, zone, keep_old_lev, force_down) if nz then zone = nz end end + if self.zone and self.level then self.player:onLeaveLevel(self.zone, self.level) end + local old_lev = (self.level and not zone) and self.level.level or -1000 if keep_old_lev then old_lev = self.level.level end if zone then diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua index 1b16a19b8a..248857ad40 100644 --- a/game/modules/tome/class/Player.lua +++ b/game/modules/tome/class/Player.lua @@ -110,6 +110,16 @@ function _M:onEnterLevel(zone, level) end end +function _M:onLeaveLevel(zone, level) + -- Fail past escort quests + local eid = "escort-duty-"..zone.short_name.."-"..level.level + if self.quests and self.quests[eid] then + local q = self.quests[eid] + q.abandoned = true + self:setQuestStatus(eid, q.FAILED) + end +end + function _M:move(x, y, force) local moved = mod.class.Actor.move(self, x, y, force) if moved then diff --git a/game/modules/tome/data/quests/escort-duty.lua b/game/modules/tome/data/quests/escort-duty.lua index 6464504935..a88bd8a4ec 100644 --- a/game/modules/tome/data/quests/escort-duty.lua +++ b/game/modules/tome/data/quests/escort-duty.lua @@ -258,6 +258,17 @@ desc = function(self, who) return table.concat(desc, "\n") end +on_status_change = function(self, who, status, sub) + if status == self.FAILED then + for uid, e in pairs(game.level.entities) do + if e.quest_id and e.quest_id == self.id then + e:disappear() + e:removed() + end + end + end +end + local function getPortalSpot(npc, dist, min_dist) local astar = Astar.new(game.level.map, npc) local poss = {} -- GitLab