Skip to content
Snippets Groups Projects
Commit 5edd9e27 authored by dg's avatar dg
Browse files

Fixed endgame dialog running multiple times in some cases

Fixed "player under ther stairs" bug


git-svn-id: http://svn.net-core.org/repos/t-engine4@1501 51575b47-30f0-44d4-a5cc-537603b46e54
parent 42f1dff9
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@ function _M:init(name, npc, player, data)
self.chats = {}
self.npc = npc
self.player = player
self.name = name
data = setmetatable(data or {}, {__index=_G})
local f, err = loadfile("/data/chats/"..name..".lua")
......
......@@ -202,7 +202,7 @@ function _M:unregisterDialog(d)
self.dialogs[d] = nil
d:unload()
-- Update positions
for i, id in ipairs(self.dialogs) do self.dialogs[id] = i end
for i, id in ipairs(self.dialogs) do id.__stack_id = i self.dialogs[id] = i end
local last = self.dialogs[#self.dialogs] or self
if last.key then last.key:setCurrent() end
......
......@@ -93,8 +93,8 @@ function _M:regen()
d.__showup = false
game:replaceDialog(self, d)
end
function _M:resolveAuto()
--[[
if not self.chat:get(self.cur_id).auto then return end
for i, a in ipairs(self.chat:get(self.cur_id).answers) do
if not a.cond or a.cond(self.npc, self.player) then
......@@ -103,6 +103,7 @@ function _M:resolveAuto()
end
end
end
]]
end
function _M:generateList()
......
......@@ -376,11 +376,20 @@ function _M:changeLevel(lev, zone, keep_old_lev, force_down)
self.player:move(self.player.wild_x, self.player.wild_y, true)
self.player.last_wilderness = self.zone.short_name
else
local x, y
if lev > old_lev and not force_down then
self.player:move(self.level.default_up.x, self.level.default_up.y, true)
x, y = self.level.default_up.x, self.level.default_up.y
else
self.player:move(self.level.default_down.x, self.level.default_down.y, true)
x, y = self.level.default_down.x, self.level.default_down.y
end
-- Check if there is already an actor at that location, if so move it
local blocking_actor = self.level.map(x, y, engine.Map.ACTOR)
if blocking_actor then
local newx, newy = util.findFreeGrid(x, y, 20, true, {[Map.ACTOR]=true})
if newx and newy then blocking_actor:move(newx, newy, true)
else blocking_actor:teleportRandom(x, y, 200) end
end
self.player:move(x, y, true)
end
self.player.changed = true
if self.to_re_add_actors then for act, _ in pairs(self.to_re_add_actors) do
......
......@@ -115,6 +115,8 @@ function failed_mount_doom(self, level)
end
function win(self, how)
game:playMusic("Lords of the Sky.ogg")
if how == "full" then world:gainAchievement("WIN_FULL", game.player)
elseif how == "aeryn-sacrifice" then world:gainAchievement("WIN_AERYN", game.player)
elseif how == "self-sacrifice" then world:gainAchievement("WIN_SACRIFICE", game.player)
......@@ -123,3 +125,4 @@ function win(self, how)
game.player.winner = how
game:registerDialog(require("engine.dialogs.ShowText").new("Winner", "win", {playername=game.player.name, how=how}, game.w * 0.6))
end
......@@ -42,7 +42,7 @@ newTalent{
elseif lev == 4 then
self:learnTalent(self.T_DISARMING_TRAP, true)
elseif lev == 5 then
self:learnTalent(self.T_FREEZING_TRAP, true)
self:learnTalent(self.T_NIGHTSHADE_TRAP, true)
end
end,
on_unlearn = function(self, t)
......@@ -56,7 +56,7 @@ newTalent{
elseif lev == 3 then
self:unlearnTalent(self.T_DISARMING_TRAP)
elseif lev == 4 then
self:unlearnTalent(self.T_FREEZING_TRAP)
self:unlearnTalent(self.T_NIGHTSHADE_TRAP)
end
end,
info = function(self, t)
......@@ -426,7 +426,7 @@ newTalent{
}
newTalent{
name = "Freezing Trap",
name = "Nightshade Trap",
type = {"cunning/traps", 1},
points = 1,
cooldown = 8,
......@@ -444,15 +444,15 @@ newTalent{
local Trap = require "mod.class.Trap"
local t = Trap.new{
type = "elemental", id_by_type=true, unided_name = "trap",
name = "freeze trap", color=colors.LIGHT_BLUE,
name = "nightshade trap", color=colors.LIGHT_BLUE,
display = '^',
dam = dam,
faction = self.faction,
check_hit = self:combatAttackDex(),
triggered = function(self, x, y, who)
self:project({type="hit", x=x,y=y}, x, y, engine.DamageType.COLD, self.dam, {type="freeze"})
self:project({type="hit", x=x,y=y}, x, y, engine.DamageType.NATURE, self.dam, {type="slime"})
if who:checkHit(self.check_hit, who:combatSpellResist(), 0, 95, 15) and who:canBe("stun") then
who:setEffect(who.EFF_FROZEN, 4, {src=self.summoner})
who:setEffect(who.EFF_STUNNED, 4, {src=self.summoner})
end
return true, true
end,
......@@ -480,7 +480,7 @@ newTalent{
return true
end,
info = function(self, t)
return ([[Lay a freezing trap, doing %0.2f cold damage to a creature and freezing it for 4 turns.]]):
return ([[Lay a trap cotted with a potent venom, doing %0.2f nature damage to a creature and stunning it for 4 turns.]]):
format(damDesc(self, DamageType.COLD, 20 + self:getCun() * 0.7 * self:getTalentLevel(self.T_TRAP_MASTERY)))
end,
}
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment