diff --git a/game/engines/default/engine/interface/ActorTalents.lua b/game/engines/default/engine/interface/ActorTalents.lua index 54f73090d9affdde551b8bdf3d3a064ef8f98cdb..28f3af1cad47d369d10c916e0dd8596c586a26a9 100644 --- a/game/engines/default/engine/interface/ActorTalents.lua +++ b/game/engines/default/engine/interface/ActorTalents.lua @@ -140,7 +140,6 @@ function _M:useTalent(id, who, force_level, ignore_cd, force_target, silent, no_ local co, success, err local msg, line --- local st_msg, start_line = game.logNewest() -- debugging if ab.mode == "activated" and ab.action then if self:isTalentCoolingDown(ab) and not ignore_cd then @@ -154,7 +153,6 @@ function _M:useTalent(id, who, force_level, ignore_cd, force_target, silent, no_ end if not self:preUseTalent(ab, silent) then return false end -print("[useTalent] preUseTalent succeeded for", ab.id, self.uid, self.name) -- debugging msg, line = game.logNewest() if not silent then self:logTalentMessage(ab) end @@ -164,7 +162,6 @@ print("[useTalent] preUseTalent succeeded for", ab.id, self.uid, self.name) -- d if not ok then self:onTalentLuaError(ab, ret) error(ret) end if not ret and self._silent_talent_failure then -- remove messages generated by failed talent -print("[useTalent]purging failed talent messages", ab.id, self.uid, self.name) -- debugging local msg, newline = game.logNewest() if newline ~= line then game.logRollback(line) end end @@ -186,7 +183,6 @@ print("[useTalent]purging failed talent messages", ab.id, self.uid, self.name) - return false end if not self:preUseTalent(ab, silent) then return false end -print("[useTalent] preUseTalent succeeded for", ab.id, self.uid, self.name) -- debugging msg, line = game.logNewest() if not silent then self:logTalentMessage(ab) end @@ -198,7 +194,6 @@ print("[useTalent] preUseTalent succeeded for", ab.id, self.uid, self.name) -- d if ret then ret.name = ret.name or ab.name end if not ret and self._silent_talent_failure then -- remove messages generated by failed talent -print("[useTalent]purging failed talent messages", ab.id, self.uid, self.name) -- debugging local msg, newline = game.logNewest() if newline ~= line then game.logRollback(line) end end @@ -239,7 +234,6 @@ print("[useTalent]purging failed talent messages", ab.id, self.uid, self.name) - if not ok then self:onTalentLuaError(ab, ret) error(ret) end if not ret and self._silent_talent_failure then -- remove messages generated by failed talent -print("[useTalent]purging failed talent messages", ab.id, self.uid, self.name) -- debugging local msg, newline = game.logNewest() if newline ~= line then game.logRollback(line) end end @@ -292,10 +286,9 @@ print("[useTalent]purging failed talent messages", ab.id, self.uid, self.name) - if force_level then who.talents[id] = old_level end self.__talent_running = nil if ok and coroutine.status(co) == "dead" then -- coroutine terminated normally -if not success then print("[useTalent] TALENT UNSUCCESSFUL", ab.id) end -- debugging if success and not ret then -- talent failed print("[useTalent] TALENT FAILED:", ab.id, "for", self.name, self.uid, success) -game.log("#ORANGE# %s TALENT USE FAILED [%s (silent_failure:%s at (%s, %s)]", ab.id, self.name, self._silent_talent_failure, self.x, self.y) -- debugging + --game.log("#ORANGE# %s TALENT USE FAILED [%s (silent_failure:%s at (%s, %s)]", ab.id, self.name, self._silent_talent_failure, self.x, self.y) -- debugging end return ret end @@ -313,7 +306,7 @@ game.log("#ORANGE# %s TALENT USE FAILED [%s (silent_failure:%s at (%s, %s)]", ab success, ret = coroutine.resume(co_wrapper) if not success and ret then -- talent code error self:onTalentLuaError(ab, ret) - print("useTalent:", debug.traceback(co_wrapper), '\n') + --print("useTalent:", debug.traceback(co_wrapper), '\n') error(ret) end end, @@ -325,26 +318,17 @@ game.log("#ORANGE# %s TALENT USE FAILED [%s (silent_failure:%s at (%s, %s)]", ab self.__talent_running = nil if not success and ret then -- talent code error self:onTalentLuaError(ab, ret) - print("useTalent:", debug.traceback(co_wrapper), '\n') + --print("useTalent:", debug.traceback(co_wrapper), '\n') error(ret) end end self.changed = true ---[[ -- debugging - if ret and not silent and not self.dead and (ab.message ~= false and not util.getval(ab.no_message, self, ab)) then -- debugging (look for talents with no messages) - local msg, end_line = game.logNewest() - if start_line == end_line and game.level.map.seens(self.x, self.y) then - game.log("#YELLOW# NO TALENT MESSAGE for %s [%s at (%s, %s)]", ab.id, self.name, self.x, self.y) - end - end ---]] -- end debugging - return ret -- return value from successfully used talent end --- Set true to remove game log messages generated by talents that started but did not complete --- for messages generated after preUseTalent check when action/activate/deactivate function returns nil or false +-- affects messages logged after preUseTalent check when action/activate/deactivate function returns nil or false _M._silent_talent_failure = false --- Get the talent use message, replacing some markers in its message string with info on the talent @@ -366,10 +350,8 @@ end -- Redefine as needed -- called in useTalent after successful preUseTalent check -- @param[type=table] talent the talent (not the id, the table) --- uses ab.message if defined or generates default use text --- set ab.message == false to suppress the use message +-- uses ab.message if defined or generates default use text (ab.message == false suppresses) function _M:logTalentMessage(ab) -print("[logTalentMessage] outputting talent message for", ab.id, self.uid, self.name, self.x, self.y, game.level.map.seens(self.x, self.y)) -- debugging if ab.message == false then return elseif ab.message then game.logSeen(self, "%s", self:useTalentMessage(ab)) @@ -406,13 +388,14 @@ end -- Redefine as needed -- @param ab the talent table -- @param err the table of errors returned from xpcall --- sets self.talent_error and game._talent_error {ab=ab, Actor=self, err=err, turn=game.turn} +-- sets self.talent_error and logs errors to _M._talent_errors +-- data forma: {[ab.id]=ab, Actor=self, uid=, x=, y=, err=err, turn=game.turn} function _M:onTalentLuaError(ab, err) if self.talent_error then return end -- handle only the first error -game.log("#ORANGE# %s TALENT LUA ERROR %d, %s (%s, %s, %s)", ab.id, self.uid, self.name, self.x, self.y, game.level.map.seens(self.x, self.y)) -- debugging - self.talent_error = {[ab.id]=ab, Actor=self, err=err, turn=game.turn} + self.talent_error = {[ab.id]=ab, Actor=self, uid=self.uid, name=self.name, err=err, x=self.x, y=self.y, turn=game.turn} print("##Use Talent Lua Error##", ab and ab.id, "Actor:", self.uid, self.name) - game._talent_error = self.talent_error + _M._talent_errors = _M._talent_errors or {} -- log the error globally + table.insert(_M._talent_errors, self.talent_error) return end diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 22c02d50da98e56f89bd424d3d256000cfa2428c..140fae570bc6cb4c67f037e7d4cae00daad4e1c7 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -4879,7 +4879,6 @@ end -- called when the talent is used after successful preUseTalent check -- @param ab the talent (not the id, the table) function _M:logTalentMessage(ab) -print("[Actor:logTalentMessage] outputting talent message for", ab.id, self.uid, self.name, self.x, self.y, game.level.map.seens(self.x, self.y)) -- debugging if ab.message ~= false and not util.getval(ab.no_message, self, ab) then if ab.message then game.logSeen(self, "%s", self:useTalentMessage(ab))