06/22/14, 07:33 PM | #1 |
Event Listener Based On Another Event Fire
Hello All,
Sorry if I missed this somewhere else, but here is my question. I have an event listeners for EVENT_COMBAT_EVENT and EVENT_ALLIANCE_POINT_UPDATE. What I'm wanting to do I have a popup only when there is an alliance point gain and the result of a combat event is a kill. I thought that I might be able to just set the label for the kill popup only when I get a killing blow. However, my function is triggering when someone releases or is rezzed. So the bug is getting a killing blow popup twice. Here is the relevant code. All help is very much appreciated. Code:
function KillingBlow.CheckForApGain( alliancePoints, playSound, difference) if difference == 0 then KBC.Label:SetText("") end end function KillingBlow.Combat(eventCode, result, isError, abilityName, abilityGraphic, abilityActionSlotType, sourceName, sourceType, targetName, targetType, hitValue, powerType, damageType, log) local playerName = GetUnitName("player") .. "^Mx" if hitValue ~= 0 and damageType ~= 1 then if sourceType == COMBAT_UNIT_TYPE_PLAYER then if playerName == sourceName then KBC.label:SetText(abilityName .. " Killing Blow!") KillingBlow.CheckForApGain() end end end if sourceType == COMBAT_UNIT_TYPE_PLAYER then if playerName == sourceName then if result == 2260 or result == 2265 then KillingBlow:simpleAnimation(KBC.label) end end else return end end em:RegisterForEvent(self.addonName, EVENT_COMBAT_EVENT, KillingBlow.Combat ) em:RegisterForEvent(self.addonName, EVENT_ALLIANCE_POINT_UPDATE, KillingBlow.CheckForApGain) |
|
06/22/14, 07:58 PM | #2 |
|
KillingBlow.CheckForApGain() doesn't trigger the event -- none of the parameters are filled in.
You need to actually register it with an event handler to call. Does the AP gain event always fire before or after the combat event? If so, you can do something like this to check when the last AP gain was: Lua Code:
If it's the other way around (combat event always fires first), you can cache the data on a COMBAT event and create the popup on the AP_GAIN event. If you need values from both, or the events can fire in either order, it's a little bit trickier, but the basic pattern would be: Code:
--Pseudocode: EVENT1: save parameters save timestamp call FIRE function EVENT2: save parameters save timestamp call FIRE function FIRE: if timestamps close enough then do whatever with saved parameters end ----------------------------------------- Also, playerName == sourceName will fail for female characters and possibly in the FR or DE clients. Use one of the ZO format functions or a :gsub("%^..$","") to remove from the source name to check. |
06/22/14, 08:22 PM | #3 | |
|
||
06/23/14, 12:00 AM | #4 |
|
Oh missed it, but you'd also want to set lastApGain back to NIL after you use it.
Or to change pseudocode: Code:
FIRE: if timestamps close enough then do whatever with saved parameters reset timestamps to nil or 0 end |
ESOUI » Developer Discussions » Lua/XML Help » Event Listener Based On Another Event Fire |
«
Previous Thread
|
Next Thread
»
|
Display Modes |
Linear Mode |
Switch to Hybrid Mode |
Switch to Threaded Mode |
|
|