Go to Page... |
Compatibility: | Dragonflight (10.0.2) Shadowlands patch (9.2.7) Dragonflight Pre-patch (10.0.0) |
Updated: | 01-02-23 03:01 PM |
Created: | 10-12-09 06:05 AM |
Downloads: | 201,358 |
Favorites: | 378 |
MD5: | |
Categories: | Casting Bars, Cooldowns, Buff, Debuff, Spell, DPS, Healers, Tank, Combat Mods |
EventHorizon now has a Discord: https://discord.gg/mR8xUUK. Come say hi!
Also, EventHorizon is now on github: https://github.com/Brusalk/EventHorizon_Continued -- You can find the latest changes there, but releases will still be released here and on Curse.
-Brusalk (Kilrogg-US)
EventHorizon is now updated and working for Shadowlands. Just download the most recent version and you should be good to go!
If you have and comments, concerns, questions, suggestions, anything, don't hesitate to contact me either through comments here or via mail or whisper in game.
If you feel that the class config for your class is not up to snuff then please let me know why and update it yourself!
There is now a how-to on class configuration below!
There is also a how-to on customization of how EH looks below as well. Check it out!
Please be aware that I'm rewriting this addon from scratch to be released officially soon (tm). Addon development has had to take a backseat to real life for the past few months though I've been working on it as much as I can. (Also, coming in the rewrite is an in-game configuration menu as well as the ability to alter class-configs in-game to make it easier to customize EH.)
If you have a few extra bucks this month and you like all my work, consider chipping in
What does EventHorizon do?
EventHorizon displays all of your class/spec's rotational abilities on a common time scale. This means that instead of seeing a regular percentage-based timer bar, EH shows you exactly what is happening in relation to everything else. If that sounds complicated at all, just look at the screenshots.
The basic idea: An ability that lasts 12 seconds and has 6 seconds remaining shouldn't look exactly the same as one that lasts 5 minutes and has 2.5 minutes remaining.
Videos showing EH in action:
Dezzimal posted a great instructional video using a Shadow Priest for reference.
breakingsong demonstrated EH on a Destro Warlock.
Also, for instant gratification, here's a quick snippet showing a Shadow Priest's rotation at 1 frame per second, using an older layout:
The big white line is the current time. Future events are on the right side, past events on the left. As time goes by, the events scroll from right to left.
The green bars are your cast bars. They use exactly the same times that your normal cast bar would display, with all haste modifiers applied.
You can also see cooldowns, DoTs, and their ticks (predicted in the future, and from the combat log in the past). EventHorizon is extremely intelligent when dealing with most things DoT/HoT-related.
The white lines that appear before the cast times are the times when you press the button (send the cast message to the server). The difference between this line and the start of the cast is your lag.
How do I set it up?
EventHorizon does not include an in-game configuration UI. However, it really doesn't need one - Everything should "just work".
Power users and those wishing to theme EventHorizon for a specific UI, please read on to the advanced portion of this section. Don't worry, it's easier than it may seem.
The basics:
* The window may be moved via the drag-handle on the upper right frame corner. It may be a little hard to see at first, but will light up as soon as you mouse over it.
* You can show/hide EventHorizon manually by using /eventhorizon or /ehz.
Advanced configuration:
Note: I would highly recommend an advanced text editor such as VS Code if you wish to edit the configuration files. While this isn't required by any means, an editor with syntax highlighting makes changing the files MUCH easier.
* The default configuration for EventHorizon is located in EventHorizon\config.lua. This file contains every setting available for EH and is heavily commented to help tweak things to your liking. This file may be deleted and EventHorizon will maintain its functionality (not that I would ever recommend doing that).
* Any changes you make to config.lua will be removed when you update EventHorizon. This is by design. HOWEVER, there's an easy way to get around that. Simply create a new file (or a copy of config.lua) named "myconfig.lua". This file is automatically loaded, and because it loads after config.lua, the settings in myconfig.lua will always be the ones to appear in-game.
Files
There are 2 files which you can edit to change the physical appearance of EventHorizon including colors, size, global functionality and other things. I'm going to assume that you have the most recent version of the configuration file provided in the most recent version of EventHorizon.
config.lua:
You can think of this as the default settings of EventHorizon. If you want to change settings then you can do so here, but when you download a new version of EventHorizon you have to be careful as the new version includes config.lua and will overwrite any changes you've made to this file. You can always skip this file when overwriting, but it's better to use myconfig.lua as it's intended to avoid this problem.
myconfig.lua:
This file overwrites any values in config.lua with the values changed inside it. So if you have config.width set to 375 in config.lua and config.width set to 200 in myconfig.lua, EventHorizon will use 200 as the value.
Where this is useful is that myconfig.lua is never included in the updated versions of EventHorzion, and as such will never be overwritten when downloading a new version of EventHorizon.
As such best practice is to alter any values you wish to change in config.lua by changing the values inside myconfig.lua.
Configuration
In order to change settings of something you just have to change the text after the equals sign on the line with the setting you want to change.
For example if you wanted to change the width of the addon you would change line 33 which normally reads (by default)
config.width = 375 -- Width of a single bar....
config.width = 200 -- Width of a single bar....
local EHN,ns = ... local config = EventHorizon.config local c = EventHorizon.colors local _,class = UnitClass('player') -- These locals make in-line conditions a little easier. See the color section for a few examples. local DK = class == "DEATHKNIGHT" local Druid = class == "DRUID" local Hunter = class == "HUNTER" local Mage = class == "MAGE" local Paladin = class == "PALADIN" local Priest = class == "PRIEST" local Rogue = class == "ROGUE" local Shaman = class == "SHAMAN" local Warlock = class == "WARLOCK" local Warrior = class == "WARRIOR" --[[ EDIT BELOW THIS LINE ]]--
-- Vampiric Touch/swd cd self:newSpell({ debuff = {34914,3}, cast = 34914, cooldown = 32379, refreshable = true, hasted = true, requiredTree = 3, requiredLevel = 28, stance = 1, })
self:newSpell({ itemID = 1543 })
self:newSpell({ itemID = { 1543, 1544, ... , 1243 }, })
self:newSpell({ slotID = 13, })
self:newSpell({ cast = 1543 })
self:newSpell({ cast = { 1543, 1544, ... , 1243 }, })
self:newSpell({ channel = {1543,3}, })
self:newSpell({ channeled = { {1543,2}, {1544,4}, ... , {1254, 6} }, })
self:newSpell({ cooldown = 1543, })
self:newSpell({ cooldown = {1543, 1642, ... , 1274}, })
self:newSpell({ debuff = {1543, 3}, })
self:newSpell({ debuff = 1543, })
self:newSpell({ playerbuff = {1543, 3}, })
self:newSpell({ playerbuff = 1543, })
self:newSpell({ debuff = {1543, 3}, hasted = true, })
self:newSpell({ debuff = {1543, 3}, recast = true, })
self:newSpell({ playerbuff = {1543, 3}, minstacks = 2, })
self:newSpell({ slotID = 14, internalcooldown = 45, })
self:newSpell({ debuff = {1543, 3}, unique = true, })
self:newSpell({ debuff = {1543, 3}, keepIcon = true, })
self:newSpell({ debuff = {1543, 3}, icon = 1544, })
self:newSpell({ cooldown = 1543, smallCooldown = true, })
self:newSpell({ cooldown = 1543, smallCooldown = true, requiredGlyph = 12456, })
self:newSpell({ cooldown = 1543, smallCooldown = true, requiredTree = 3, })
self:newSpell({ cooldown = 1543, smallCooldown = true, requiredTree = {0,1,3}, })
self:newSpell({ cooldown = 1543, smallCooldown = true, requiredLevel = 84, })
self:newSpell({ cooldown = 1543, smallCooldown = true, stance = 1, })
self:newspell({ cooldown = 1543, smallCooldown = true, stance = {0, 1, 4}, })
File Name |
Version |
Size |
Author |
Date |
Type |
2.3e |
78kB |
11-10-14 11:20 PM |
Addon |
||
v1.9.3 |
71kB |
11-05-10 07:02 AM |
Patch |
Comment Options |
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
09-03-11, 12:30 AM | |
|
Re: Re: Re: Re: Re: Redshift Talent spec integration
EDIT: <SNIP>
Next post up.
Last edited by Taroven : 09-03-11 at 12:42 AM.
|
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
NarrillNezzurh |
View Public Profile |
Send a private message to NarrillNezzurh |
Find More Posts by NarrillNezzurh |
Add NarrillNezzurh to Your Buddy List |
09-02-11, 11:59 PM | ||
|
Re: Re: Re: Redshift Talent spec integration
|
|
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
09-02-11, 11:54 PM | ||
|
Re: Re: Redshift Talent spec integration
__________________
Big-eared and green, you talk the talk, but walk the other way.
Last edited by NarrillNezzurh : 09-03-11 at 12:26 AM.
|
|
|
NarrillNezzurh |
View Public Profile |
Send a private message to NarrillNezzurh |
Find More Posts by NarrillNezzurh |
Add NarrillNezzurh to Your Buddy List |
09-02-11, 11:13 PM | ||
|
Re: Redshift Talent spec integration
Open up EventHorizon.lua in a text editor. I'd recommend Notepad++, Scite, or Geany/Gedit (if you happen to use Linux). There's a function at line 1584 which handles most of EventHorizon's talent checks - You can search for "function ns:CheckTalents()" if you don't feel like scrolling. Find within it this line: Code:
ns:CheckRequirements() Code:
if (EventHorizonDB.redshift) and (ns.modules.redshift.isReady and EventHorizonDB.redshift.isActive == true) and (ns.config.Redshift.spec or ns.config.Redshift.ATG) then ns.modules.redshift:Check() end Next, search for "if (s.hideVehicle and UnitHasVehicleUI("player")) then" and add this just above it: Code:
if ( s.spec and (vars.activeTalentGroup ~= s.spec) ) then showState = nil end if ( s.ATG and (vars.activeTree > 0) ) then if s.ATG > 0 then if s.ATG ~= vars.activeTree then showState = nil elseif s.ATG == vars.activeTree then showState = nil end end end All that's left is a bit of class config tinkering. Open up your class config (EventHorizon_CLASSNAMEHERE\config.lua) and add one of the following lines just below function EventHorizon:InitializeClass(): Code:
self.config.Redshift.spec = 1 -- OR self.config.Redshift.ATG = 1 -- OR self.config.Redshift.ATG = -2 Redshift.ATG will tell Redshift to show or hide EH depending on your active tree - Meaning your actual spec, instead of just which spec you have active. This will be more useful if you occasionally respec or have multiple characters of the same class. Talent trees are numbered 1 to 3, from left to right according to your talent window. For example, Priest trees are Discipline (1), Holy (2), Shadow (3). When using the ATG option, there are two modes: 1) If ATG is positive (1, first example), Redshift will only show EH in that tree. Meaning, if ATG is 3 for a Priest, EH will only be visible for Shadow. 2) If ATG is negative (-2, second example), Redshift will hide EH only when in that tree. So if you want EH for Shadow and Disc but don't care for Holy bars, setting ATG to -2 will do the trick. You can combine both methods if you wish, though it'd be a bit redundant unless it's for something like PvE vs PvP specs where both specs are the same and you don't want bars for anything else. TLDR: I'll include similar changes whenever I release a new version of EventHorizon. Since that likely won't be soon, I'd recommend following the instructions above for now. Let me know if you run into trouble. Edit: Wow for not paying attention to names. Pardon the absolute-noob-level instructions, hopefully that'll help if someone else wants to try this though. Edit 2: Got the changes in to my local copy with some slightly different naming. Also finally got around to applying the Lines fix. If I have time and remember in the next few weeks, I'll get the class configs adjusted for recent patches and release a new version.
Last edited by Taroven : 09-02-11 at 11:38 PM.
|
|
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
09-02-11, 08:47 PM | |
|
Redshift Talent spec integration
I wonder if it might be possible to have EH hide or show based on which talent spec you're in, via Redshift. Perhaps also being configurable per character (per class, really) through EventHorizon_<class>\myconfig.lua.
__________________
Big-eared and green, you talk the talk, but walk the other way. |
|
NarrillNezzurh |
View Public Profile |
Send a private message to NarrillNezzurh |
Find More Posts by NarrillNezzurh |
Add NarrillNezzurh to Your Buddy List |
08-27-11, 06:20 PM | ||
|
EventHorizon is the one thing I miss most about WoW. Blizzard-induced headaches aside, it's been an amazing project to be a part of. I wouldn't trade a thing for the experience and inspiration that EH has been over the years. |
|
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
08-27-11, 05:06 PM | |
A Kobold Labourer
Forum posts: 0
File comments: 5
Uploads: 0
|
Nothing technical, I just wanted to say that I have been using EHZ for what has to be over two years now, and it is probably my favorite addon ever. EHZ's representation of time is unparalleled in the amount of precision of choice that it allows.
I just want to say thank you for its development. You have done me, and surely others, a great service. I attribute my performance over the years to your hard work and brilliance. |
|
Machinassiah |
View Public Profile |
Send a private message to Machinassiah |
Find More Posts by Machinassiah |
Add Machinassiah to Your Buddy List |
08-15-11, 03:53 PM | ||
|
If the cooldowns are missing as well, that's a whole separate issue, but it's easy enough to get the glove buffs tracked. I'll need you or another engineer to provide a list of spellIDs, one for each stat affected by the buff (assuming they're separate, which they very likely are) - Once I have that I can release a fix. |
|
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
08-15-11, 12:01 PM | |
|
Feral cat T11 bonus
For my feral cat brethren out there, here is the Class: Druid /myconfig entry for the 3 stack mangle you need to keep up with the 4T11. This tracks "Strength of the Panther" with a buff bar, allowing you to see exactly when the stacks are about to fall and need to be refreshed.
Code:
--Strength of the Panther-4T11 bonus self:NewSpell({ spellID = 90166, playerbuff = true, refreshable = true, cooldown = 22812, --barkskin cooldown, can be whatever you want or nothing. stance = 3, requiredTree = 2, }) |
|
Kogasu |
View Public Profile |
Send a private message to Kogasu |
Find More Posts by Kogasu |
Add Kogasu to Your Buddy List |
08-15-11, 01:16 AM | |
A Kobold Labourer
Forum posts: 0
File comments: 5
Uploads: 0
|
Seems with 4.2 that tinkers (namely, the agi/int/str to hands one) doesn't pop a timer on the bar. Any suggestions?
|
|
Der_Idiot |
View Public Profile |
Send a private message to Der_Idiot |
Find More Posts by Der_Idiot |
Add Der_Idiot to Your Buddy List |
07-27-11, 03:46 PM | ||
|
Re: Re: Re: Rupture Refresh Ticks
|
|
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
07-27-11, 01:34 PM | ||
|
Re: Re: Rupture Refresh Ticks
Negating pps seemed to fix it, and it's now accurate with or with out the icons. Problem solved it seems, though I'll let you know if anything comes up with it. Code:
local pps = -(ns.frames.nowIndicator:GetLeft() - mainframe:GetRight()) / vars.future
__________________
Big-eared and green, you talk the talk, but walk the other way. |
|
|
NarrillNezzurh |
View Public Profile |
Send a private message to NarrillNezzurh |
Find More Posts by NarrillNezzurh |
Add NarrillNezzurh to Your Buddy List |
07-27-11, 12:16 PM | |||
|
Re: Rupture Refresh Ticks
It shouldn't be too hard to revert tick handling back to dynamic detection, which should be far more accurate at the cost of occasionally seeing ticks jump around a bit. I believe v1.9 r378 was the last to use it, I can point you in the right direction if you like.
Edit: Another random thought, you could probably use a sort of hybrid approach, by anchoring the ticks against the nowline and finding the PPS via frame dimensions. You can do that with something like this: Code:
local pps = (ns.frames.nowIndicator:GetLeft() - mainframe:GetRight()) / vars.future -- GetLeft() and GetRight() return the distance in pixels from the frame edge, divide the difference by vars.future and call it good since we're anchoring from the nowline for i = 1, #c do local seconds = c[i] local position = pps*seconds -- don't actually need the 'now' portion with this Lines.line[i] = mainframe:CreateTexture(nil,"OVERLAY") Lines.line[i]:SetPoint('TOPLEFT', ns.frames.nowIndicator, 'TOPLEFT', position, 0) -- note the anchor change, we're ignoring mainframe for this if multicolor then Lines.line[i]:SetTexture(unpack(color[i])) else Lines.line[i]:SetTexture(unpack(color)) end Lines.line[i]:SetWidth(vars.onepixelwide) Lines.line[i]:SetPoint('BOTTOM', mainframe, 'BOTTOM') -- still use mainframe for the bottom of the line, can use ns.frames.nowIndicator if there's a difference end
Last edited by Taroven : 07-27-11 at 12:26 PM.
|
||
|
Taroven |
View Public Profile |
Send a private message to Taroven |
Find More Posts by Taroven |
Add Taroven to Your Buddy List |
You have just downloaded by the author . If you like this AddOn why not consider supporting the author? This author has set up a donation account. Donations ensure that authors can continue to develop useful tools for everyone.