From 89394e70f9762b8a3cd00761a969b71bd293a9b9 Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Wed, 5 Apr 2017 15:39:22 +0200 Subject: [PATCH] Fixed challenges sometimes auto-failing or auto-succeeding in the Infinite Dungeon --- game/engines/default/engine/Zone.lua | 15 +++++++++++++++ .../tome/data/zones/infinite-dungeon/zone.lua | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/game/engines/default/engine/Zone.lua b/game/engines/default/engine/Zone.lua index 61df2a74af..b097edb2e8 100644 --- a/game/engines/default/engine/Zone.lua +++ b/game/engines/default/engine/Zone.lua @@ -1076,6 +1076,18 @@ function _M:newLevel(level_data, lev, old_lev, game) end end + if not self.__frelltest then + forceprint("-------------------------------------------------") + forceprint("-------------------------------------------------") + forceprint("-------------------------------------------------") + forceprint("REGEN") + forceprint("-------------------------------------------------") + forceprint("-------------------------------------------------") + forceprint("-------------------------------------------------") + self.__frelltest = true + return self:newLevel(level_data, lev, old_lev, game) +end + -- Check for connectivity from entrance to exit local a = Astar.new(map, game:getPlayer()) if not level_data.no_level_connectivity then @@ -1107,6 +1119,9 @@ function _M:newLevel(level_data, lev, old_lev, game) -- Delete the room_map if it's no longer needed if not self._retain_level_room_map then map.room_map = nil end + -- Call a "post" finisher + if level_data.post_process_end then level_data.post_process_end(level, self) end + return level end diff --git a/game/modules/tome/data/zones/infinite-dungeon/zone.lua b/game/modules/tome/data/zones/infinite-dungeon/zone.lua index 6df82483cb..a81e0fb406 100644 --- a/game/modules/tome/data/zones/infinite-dungeon/zone.lua +++ b/game/modules/tome/data/zones/infinite-dungeon/zone.lua @@ -358,8 +358,6 @@ return { level.data.effects = {effid} end - game.state:infiniteDungeonChallengeFinish(zone, level) - if config.settings.cheat then -- gather statistics local block_count = 0 for i = 0, level.map.w - 1 do for j = 0, level.map.h - 1 do @@ -369,5 +367,10 @@ return { print(("[Infinite Dungeon] Open space calculation: (%s, %s, %dw x %dh) space -- (open:%2.1f%%, closed:%2.1f%%)"):format(level.data.id_layout_name, level.data.id_grids_name, level.map.w, level.map.h, open, closed)) end end, + post_process_end = function(level, zone) + -- We delay it because at "post_process" the map can STILL decide to regenerate + -- and if it does, it's a new level and challenge is considered auto failed (or auto success heh) + game.state:infiniteDungeonChallengeFinish(zone, level) + end, } -- GitLab