From ae9e33c99c9fadf58d57fe77036a63c2df5455da Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sat, 4 May 2013 23:30:14 +0000 Subject: [PATCH] plop git-svn-id: http://svn.net-core.org/repos/t-engine4@6687 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engines/default/engine/interface/ActorTalents.lua | 10 ++++++++++ game/modules/tome/class/interface/Archery.lua | 9 +++++++-- game/modules/tome/class/interface/Combat.lua | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/game/engines/default/engine/interface/ActorTalents.lua b/game/engines/default/engine/interface/ActorTalents.lua index dfeb0ad72f..41049e62e7 100644 --- a/game/engines/default/engine/interface/ActorTalents.lua +++ b/game/engines/default/engine/interface/ActorTalents.lua @@ -806,3 +806,13 @@ function _M:callTalent(tid, name, ...) name = name or "trigger" if t[name] then return t[name](self, t, ...) end end + +--- Trigger all talents matching +function _M:talentCallbackOn(on, ...) + for tid, _ in pairs(self.sustain_talents) do + local t = self:getTalentFromId(tid) + if t and t[on] then + self:callTalent(tid, on, ...) + end + end +end \ No newline at end of file diff --git a/game/modules/tome/class/interface/Archery.lua b/game/modules/tome/class/interface/Archery.lua index c2d5397147..4683fee426 100644 --- a/game/modules/tome/class/interface/Archery.lua +++ b/game/modules/tome/class/interface/Archery.lua @@ -62,7 +62,8 @@ function _M:archeryAcquireTargets(tg, params) if offweapon then wtravel_speed = math.ceil(((weapon.travel_speed or 0) + (offweapon.travel_speed or 0)) / 2) end tg.speed = (tg.speed or 10) + (ammo.combat.travel_speed or 0) + (wtravel_speed or 0) + (self.travel_speed or 0) print("[PROJECTILE SPEED] ::", tg.speed) - local x, y = self:getTarget(tg) + local x, y = params.x, params.y + if not x or not y then x, y = self:getTarget(tg) end if not x or not y then return nil end -- Find targets to know how many ammo we use @@ -139,7 +140,7 @@ function _M:archeryAcquireTargets(tg, params) local speed = self:combatSpeed(weapon) print("[SHOOT] speed", speed or 1, "=>", game.energy_to_act * (speed or 1)) - self:useEnergy(game.energy_to_act * (speed or 1)) + if not params.no_energy then self:useEnergy(game.energy_to_act * (speed or 1)) end if sound then game:playSoundNear(self, sound) end @@ -259,11 +260,15 @@ local function archery_projectile(tx, ty, tg, self, tmp) hitted = true if talent.archery_onhit then talent.archery_onhit(self, talent, target, target.x, target.y) end + + target:talentCallbackOn("callbackOnArcheryHit", self) else local srcname = game.level.map.seens(self.x, self.y) and self.name:capitalize() or "Something" game.logSeen(target, "%s misses %s.", srcname, target.name) if talent.archery_onmiss then talent.archery_onmiss(self, talent, target, target.x, target.y) end + + target:talentCallbackOn("callbackOnArcheryMiss", self) end -- cross-tier effect for accuracy vs. defense diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua index f74adc89a4..cde50e8af7 100644 --- a/game/modules/tome/class/interface/Combat.lua +++ b/game/modules/tome/class/interface/Combat.lua @@ -457,10 +457,14 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam) dam = dam + total_conversion end + target:talentCallbackOn("callbackOnMeleeHit", self) + hitted = true else local srcname = game.level.map.seens(self.x, self.y) and self.name:capitalize() or "Something" game.logSeen(target, "%s misses %s.", srcname, target.name) + + target:talentCallbackOn("callbackOnMeleeMiss", self) end -- cross-tier effect for accuracy vs. defense -- GitLab