diff --git a/game/engine/interface/ActorLevel.lua b/game/engine/interface/ActorLevel.lua index ebfac4919c82d2ea90b39c10ab641a1eca719024..7278d96a93a9a79edaf664be79021d5797c3643e 100644 --- a/game/engine/interface/ActorLevel.lua +++ b/game/engine/interface/ActorLevel.lua @@ -85,6 +85,7 @@ end --- Gains some experience -- If a levelup happens it calls self:levelup(), modules are encourraged to rewrite it to do whatever is needed. function _M:gainExp(value) + self.changed = true self.exp = math.max(0, self.exp + value) while self:getExpChart(self.level + 1) and self.exp >= self:getExpChart(self.level + 1) and (not self.actors_max_level or self.level < self.actors_max_level) do -- At max level, if any diff --git a/game/engine/interface/ActorLife.lua b/game/engine/interface/ActorLife.lua index cff88973974d6a1223f9a6a6514ae0b9284a2ab6..c415eab7381696c85275c57ad0b6789e50faa386 100644 --- a/game/engine/interface/ActorLife.lua +++ b/game/engine/interface/ActorLife.lua @@ -52,6 +52,7 @@ end --- Heal some function _M:heal(value, src) self.life = util.bound(self.life + value, 0, self.max_life) + self.changed = true end --- Remove some HP from an actor @@ -60,6 +61,7 @@ end function _M:takeHit(value, src) if self.onTakeHit then value = self:onTakeHit(value, src) end self.life = self.life - value + self.changed = true if self.life <= 0 then game.logSeen(self, "%s killed %s!", src.name:capitalize(), self.name) return self:die(src) @@ -70,6 +72,7 @@ end function _M:die(src) game.level:removeEntity(self) self.dead = true + self.changed = true self:check("on_die", src) end diff --git a/game/engine/interface/ActorStats.lua b/game/engine/interface/ActorStats.lua index 5b301d9664c3be9a03d07b79635583106eabf4cf..09e6baf6b57f1062384f80e0ba2674f9a34e5b4a 100644 --- a/game/engine/interface/ActorStats.lua +++ b/game/engine/interface/ActorStats.lua @@ -74,6 +74,7 @@ function _M:incStat(stat, val) if self:getStat(stat) ~= old then self:onStatChange(stat, self:getStat(stat) - old) end + self.changed = true return self:getStat(stat) - old end @@ -83,7 +84,8 @@ end -- @param stat the stat id -- @param scale a scaling factor, nil means max stat value -- @param raw false if the scaled result must be rounded down -function _M:getStat(stat, scale, raw) +-- @param no_inc if true it wont include stats gained by self.inc_stats +function _M:getStat(stat, scale, raw, no_inc) local val, inc if type(stat) == "string" then val = self.stats[_M.stats_def[stat].id] @@ -92,7 +94,7 @@ function _M:getStat(stat, scale, raw) val = self.stats[stat] inc = self.inc_stats[stat] end - val = util.bound(val, _M.stats_def[stat].min, _M.stats_def[stat].max) + inc + val = util.bound(val, _M.stats_def[stat].min, _M.stats_def[stat].max) + ((not no_inc) and inc or 0) if scale then if not raw then val = math.floor(val * scale / _M.stats_def[stat].max) diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua index d3a297babcd1100c54e75ef208a94719a0c4ead0..64eedde2f17e352d69414717b9cf68d2ae432e5d 100644 --- a/game/modules/tome/class/Player.lua +++ b/game/modules/tome/class/Player.lua @@ -169,6 +169,7 @@ function _M:playerFOV() if self:attr("detect_object") and game.level.map(x, y, game.level.map.OBJECT) then ok = true end if self:attr("detect_trap") and game.level.map(x, y, game.level.map.TRAP) then game.level.map(x, y, game.level.map.TRAP):setKnown(self, true) + game.level.map:updateMap(x, y) ok = true end diff --git a/game/modules/tome/data/talents/techniques/2hweapon.lua b/game/modules/tome/data/talents/techniques/2hweapon.lua index 9da68aa6522aa43e6f3e024f839f4e62a9b206d5..af77b1561f751f727ec270d923e0d939377d9d72 100644 --- a/game/modules/tome/data/talents/techniques/2hweapon.lua +++ b/game/modules/tome/data/talents/techniques/2hweapon.lua @@ -33,8 +33,8 @@ newTalent{ end return { - atk = self:addTemporaryValue("combat_dam", 5 + self:getStr(7) * self:getTalentLevel(t)), - dam = self:addTemporaryValue("combat_atk", 5 + self:getDex(7) * self:getTalentLevel(t)), + dam = self:addTemporaryValue("combat_dam", 5 + self:getStr(7) * self:getTalentLevel(t)), + atk = self:addTemporaryValue("combat_atk", 5 + self:getDex(7) * self:getTalentLevel(t)), def = self:addTemporaryValue("combat_def", -5 - 2 * (self:getTalentLevelRaw(t)-1)), armor = self:addTemporaryValue("combat_armor", -5 - 2 * (self:getTalentLevelRaw(t)-1)), } diff --git a/game/modules/tome/dialogs/LevelupStatsDialog.lua b/game/modules/tome/dialogs/LevelupStatsDialog.lua index fd85750ca3d54b7f940b5dc7c4bf892272fd32ad..4769e03925fcd317a72c1e9d97cf3dbac5c383a5 100644 --- a/game/modules/tome/dialogs/LevelupStatsDialog.lua +++ b/game/modules/tome/dialogs/LevelupStatsDialog.lua @@ -63,7 +63,7 @@ function _M:incStat(v) self:simplePopup("Not enough stat points", "You have no stat points left!") return end - if self.actor:getStat(self.sel) >= self.actor.level * 1.4 + 20 then + if self.actor:getStat(self.sel, nil, nil, true) >= self.actor.level * 1.4 + 20 then self:simplePopup("Stat is at the maximun for your level", "You can not increase this stat further until next level!") return end @@ -72,7 +72,7 @@ function _M:incStat(v) return end else - if self.actor_dup:getStat(self.sel) == self.actor:getStat(self.sel) then + if self.actor_dup:getStat(self.sel, nil, nil, true) == self.actor:getStat(self.sel, nil, nil, true) then self:simplePopup("Impossible", "You cannot take out more points!") return end