Using callBackOnTalentPost to change a talent's cooldowns

All development conversation and discussion takes place here

Moderator: Moderator

Post Reply
Message
Author
Razakai
Uruivellas
Posts: 889
Joined: Tue May 14, 2013 3:45 pm

Using callBackOnTalentPost to change a talent's cooldowns

#1 Post by Razakai »

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: Select all

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,
}

HousePet
Perspiring Physicist
Posts: 6215
Joined: Sun Sep 09, 2012 7:43 am

Re: Using callBackOnTalentPost to change a talent's cooldown

#2 Post by HousePet »

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?
My feedback meter decays into coding. Give me feedback and I make mods.

Razakai
Uruivellas
Posts: 889
Joined: Tue May 14, 2013 3:45 pm

Re: Using callBackOnTalentPost to change a talent's cooldown

#3 Post by Razakai »

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

Post Reply