ToME: the Tales of Maj'Eyal
http://forums.te4.org/

Using callBackOnTalentPost to change a talent's cooldowns
http://forums.te4.org/viewtopic.php?f=36&t=44923
Page 1 of 1

Author:  Razakai [ Sun Sep 20, 2015 8:50 pm ]
Post subject:  Using callBackOnTalentPost to change a talent's cooldowns

Perhaps there's a better way of doing this. I have a timed effect that is supposed to cause your next spell to have x% reduced cooldown and grant x% energy. The energy part works, but the problem is that callBackOnTalentPost seemingly runs before the talent goes on cooldown, causing cooldown modification to fail. Any ideas? Current code (I tried hacking it with CDR, but that doesn't work as there's no good way to remove the effect when you account for speed increases):

Code:
newEffect{
   name = "SOULBURN", image = "talents/soulburn.png",
   desc = "Soulburn",
   long_desc = function(self, eff) return ("Next spell has %d%% reduced cooldown and grants %d%% of a turn."):format(eff.cd, eff.turn) end,
   type = "magical",
   subtype = { darkness=true },
   status = "beneficial",
   parameters = { cd = 0.5, turn = 0.7 },
   activate = function(self, eff)
      eff.cdid = self:addTemporaryValue("spell_cooldown_reduction", eff.cd/100)
   end,
   deactivate = function(self, eff)
      self:removeTemporaryValue("spell_cooldown_reduction", eff.cdid)
   end,
   callbackOnTalentPost = function(self, t,  ab)
      if ab.type[1]:find("^spell/") and not ab.type[1]:find("^spell/soulforge") then
         local t = self:getTalentFromId(self.T_SOULBURN)
         local energy = (game.energy_to_act * t.getTurn(self,t))/100
         self.energy.value = self.energy.value + energy
      end
   end,
   callbackOnActBase = function(self, eff)
      self:removeEffect(self.EFF_SOULBURN)
   end,
}

Author:  HousePet [ Mon Sep 21, 2015 1:13 am ]
Post subject:  Re: Using callBackOnTalentPost to change a talent's cooldown

I think the problem is actually you dividing by 100 on the spell_cooldown_reduction value, as I can't see any reason why it wouldn't work.
However, you might want to move the removeEffect onto the callbackOnTalentPost and delay it until end of tick. Unless you are intending for this effect to last for multiple spells?

Author:  Razakai [ Tue Sep 22, 2015 8:38 am ]
Post subject:  Re: Using callBackOnTalentPost to change a talent's cooldown

All working now, used game:onTickEnd() to terminate the function after applying the effects. Thanks.

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/