ascott18 / TellMeWhen

TellMeWhen is a combat tracking AddOn for World of Warcraft Retail and Classic
https://wow.curseforge.com/projects/tellmewhen
GNU General Public License v3.0
86 stars 11 forks source link

[CF 799] Boss ability tracker #821

Closed tmw-issue-import closed 11 years ago

tmw-issue-import commented 11 years ago

Alright, next idea.

We've been sophisticating our raid tactics and specifying cooldowns like so:

[1] Interrupting Jolt    Ghinz Rally                    0:00:00
[2] Interrupting Jolt    Crymlink devo                    0:00:18
[3] Interrupting Jolt    Jéddy devo                    0:00:36
[4] Interrupting Jolt    Jav    devo                        0:00:54
[5] Interrupting Jolt    Qel Rally                        0:01:12
[6] Interrupting Jolt    Hayek Rally                    0:01:30
[7] Interrupting Jolt    Ghinz Banner        Scripè        0:01:48
[8] Interrupting Jolt    Qel Banner        Lorane        0:02:06
[9] Interrupting Jolt    Hayek Banner        Toscar        0:02:24
[10] Interrupting Jolt    Valkiery Spirit Shell    Syysigkeiten    0:02:42
[11] Interrupting Jolt    Scylla Spirit Shell    Laeryth        0:03:00

Do you think it would be possible to make an icon that would reliably inform me when it was my turn to pop a certain cd?


Posted by CurseForge user AmeroGer | Imported from CurseForge issue #799 | Raw

tmw-issue-import commented 11 years ago

You could use a Combat Event icon to notify you when the person before you has used their ability. Set the timer so that it will be the duration between when they use their ability and when you use your ability, and then add some On Finish event handler to scream and yell at you to use your ability.

I'm not familiar with what Interrupting Jolt is since I don't raid anymore, but if it fits with what the ability is (I'm guessing its a cast that causes a ton of raid damage?), you could also set the timer to be slightly longer than the window in which you need to use your ability, add a condition to watch for Interrupting Jolt, and then add an On Show event handler to scream and yell at you. Since the icon will only be shown while counting and while the condition passes, it will only show right after the last person used their ability when IJ is happening, but the timer will expire before it is time for the next person to use theirs after you use yours.


> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

The problem with the first suggestion is that I don't want to rely on other people in my raid to always remember their cooldowns.

The problem with the second suggestion is that some boss timers are not quite that predictable and might work with a cooldown and then have a certain window in which they're cast. They also might interact with other boss abilities, altering the timers further.


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

What do you propose for a new icon type, then? How does it function and what configuration options are available?


> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

Ideally it'd be some kind of counter that counts how often a boss has used a certain ability and resets when the encounter resets. It wouldn't have to be a new icon type, just a condition that can be set to something like ("Interrupting Jolt" = 6) or ("Interrupting Jolt" = 9).


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

Added in r794. Spell Cast Count in the Spells/Items category.

If you want to use it in a Lua condition, use

``` UnitCastCount("unit", "spell name") ```

or

``` UnitCastCount("unit", spellID) ```


Posted by CurseForge user Cybeloras

tmw-issue-import commented 11 years ago

@Cybeloras: Go

How could this condition reset? The checked unit is dead? or other? Is it possible to make a option to set a cap to reset that condition?


Edited Apr 28, 2013

> Posted by CurseForge user lsjyzjl
tmw-issue-import commented 11 years ago

Tracks things per GUID. Players will never be reset. Pets will be reset when summoned (since they get a different GUID every time). Bosses will get a different GUID every time they are spawned (well, I sure as hell hope they would. Would be weird if they didn't), so a boss will reset for each attempt. Normal NPCs will be reset when they die and a new one spawns in its place.

If a unit dies close enough to the player to be seen in the combat log, its data will be immediately forgotten (although the condition may not be immediately updated to reflect that). Unit Cooldowns now behave the same way too (as of the last revision as of the time of writing this comment) - non players that die will have their cooldown data wiped to prevent excessive memory usage.


Edited Apr 28, 2013

> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

If you want some functionality like having the condition pass every N casts, do something like this in a Lua condition:

``` (UnitCastCount("unit", "spell name") - N) % M == 0 ```

where N is the first cast that the condition should pass for and M is the number of casts after that at which it should be shown.

For example, if N = 2 and M = 3, then the condition would pass on the 2nd, 5th, 8th, 11th, etc. casts. If N = 0 and M = 2, the the condition would pass on every even numbered cast (including 0).

Going to sleep now, I can help more tomorrow.


Edited Apr 28, 2013

> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

Is the counter going to go up when the unit starts casting or finishes? Either can probably work, in my case it'd just usually be simpler if the counter jumped at the beginning of a cast. Then again, somebody else might only be interested in successful casts.


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

It starts when the cast finishes. The combat log is very restrictive about notifying of when casts start (it doesn't notify at all, actually - you can only check this using the UNIT_SPELLCAST_START event, which only works for units that have a valid unitID), so it has to work when the cast finishes. Channeled casts are counted as soon as they begin.


> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

I didn't follow the conversation from the start but I'm pretty sure bosses don't get a new GUID when they spawn.

If that was the case things like LibBossIDs-1.0 would never work or wowhead having static NPCID.

If I misunderstood what you were discussing, apologies :P


> Posted by CurseForge user Road_Block
tmw-issue-import commented 11 years ago

A unit's GUID isn't the same as its npcID. npcID is actually one part of the GUID, but there is a lot more to it. My GUID, for example, is 0x0580000008311F15, and it will stay the same until I were to pay to transfer off the server I play on (although the first bit of it may change as I hop across realms and instances and battlegrounds - I'm not sure if that is true anymore since everybody is always in the cross-realm system now as opposed to only being it it for battlegrounds, but it used to be the case a long time ago).

The GUID of the spawn of Cloudrunner Leng, the flying trainer in the alliance city in Pandaria, that is on Aerie Peak right now, is 0xF130EB0600000C92. 0xEB06 is the part of that that is his npcID (60166 in base 10). 0x000C92 is his spawn counter. If he were to be somehow killed, the one that replaces him would have a different spawn counter.


Edited Apr 28, 2013

> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

Alright, I've done a few bosses now with the new condition and I am able to achieve the functionality that I'm looking for, I just feel like it could be done a little simpler. Since I only want to be alerted when say Interrupting Jolt #6 is incoming in 3 seconds I need some kind of timer to count the seconds since the last Interrupting Jolt was cast. And the only way I can do that is via a combat event icon. So I need to make a new combat event icon for every spell. Example:

^1^T^SType^Scleu ^SConditions^T ^N1^T ^SType^SCASTCOUNT ^SUnit^Sboss1 ^SName^SInterrupting`Jolt ^SLevel^N6 ^t^Sn^N1 ^t^SSourceUnit^Sboss1 ^SName^SInterrupting`Jolt ^SFakeHidden^B ^SShowWhen^N1 ^SCustomTex^SDemoralizing`Banner ^SCLEUEvents^T ^SSPELL_CAST_SUCCESS^B ^t^SCLEUDur^N15 ^SEnabled^B ^t^N62045^S`| ^Sicon^^

Also I haven't been able to figure out what I should do if I was supposed to take the first ability. This happened with Cosmic Barrage on Twin Consorts. Since there is no preceding Cosmic Barrage to start the timer I would have to start a timer when the boss is pulled, which doesn't seem to be possible. I've been thinking for a while on possible solutions. The one that would require the least changes to the addon would probably just to make 'raidboss engaged' a detectable event for combat event icons. The (for me) more userfriendly solution would be to add another box to the spell cast count condition "time since last cast", where if there is no last cast it uses the time since the boss was engaged instead. Then again this could be its own condition. Then again I could just use a combat event icon. Then again most conditions would be redundant following that logic.


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

I think we are starting to reach the point that these features are just becoming far too specific for what TMW was originally intended for - a simple-yet-versatile combat tracking addon. Some things do make sense being added as some generalized function, like the Cast Count condition, since they could be used for a ton of different purposes.

Adding another input to the condition just isn't possible without a huge redesign of the condition editor. The best way to implement this whole thing would be as a new icon type, but it isn't something that I am going to develop at this point - my WoW sub runs out in less than two weeks, and after that, that's it as far as new features in TMW developed by me go.

I may hop on the beta for the next expansion once us addon authors get our free keys and add in whatever needs to be added for basic functionality with whatever API changes and game system changes are made - but that is still at least 6 months away, possibly even up to a year.

I don't mean anything malicious by this, but there does exist a point where addon functionality should end and playing the game with a high level of situational awareness & communication should begin. If you or somebody else wants to develop new things like this for TMW (http://wow.curseforge.com/addons/tellmewhen/pages/api/) then feel free to do so, but I personally can't see anything more along these lines of a raid cooldown usage helper fitting into TMW. Sorry.


> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

Not even the 'raidboss engaged' as a combat event? :(


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

You could do that using a condition icon - either check Unit Exists ("boss1") or check IsEncounterInProgress() in a Lua condition.

I've never actually used IsEncounterInProgress and wasn't aware that it existed until about 2 minutes ago, so I'm not sure how good it will be or what exactly determine if an encounter is in progress. Its only use in FrameXML is to disable the "Release Spirit" button while in a boss fight, so it should be OK. I don't know what events it might respond to, so it will not be very efficient just as a Lua condition or as a normal condition with no events (but you would have to have tens or of thousands of calls per second before you would notice a difference in framerate).


Edited Apr 29, 2013

> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

The thing is I want to start a timer as soon as I enter combat so I can alert myself after x seconds that an ability is incoming.


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

IsEncounterInProgress() should do just that - I believe that it will start returning true the moment that you engage a boss.


> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

I'm not sure how this would work. Suppose I want to show an icon 45 seconds after we've pulled a boss. How would I use IsEncounterInProgress()?


> Posted by CurseForge user AmeroGer
tmw-issue-import commented 11 years ago

Uhhh... Uh.......

Shit. Condition icons need a "Only show if timer is not active" option, don't they? Otherwise, there really isn't a way. I ran into this same problem helping someone else a few hours ago - I was trying to pull some wizard magic using condition icon timers and it just didn't work very well at all - the end solution I came up with was quite horrifying.

I'll get back to you when I've added this in. Brb, churning code.


> Posted by CurseForge user Cybeloras
tmw-issue-import commented 11 years ago

For r800

^1^T^SType^Sconditionicon ^SOnlyIfNotCounting^B ^SConditionDurEnabled^B ^SConditionDur^N45 ^SCustomTex^S1 ^SConditions^T ^N1^T ^SType^SLUA ^SName^SIsEncounterInProgress() ^t^Sn^N1 ^t^SEnabled^B ^t^N62047^S~`~| ^Sicon^^


> Posted by CurseForge user Cybeloras