Download
(57 Kb)
Download
Updated: 12/03/17 09:53 AM
Pictures
File Info
Compatibility:
Clockwork City (3.2)
Updated:12/03/17 09:53 AM
Created:12/07/14 04:06 AM
Monthly downloads:49
Total downloads:150,799
Favorites:138
MD5:
Sorcerer Helper  Popular! (More than 5000 hits)
Version: 3.2.0
by: RunningDuck [More]
Sorcerer Helper
An addon for sorcerers that reminds you to keep your minions and buffs up, alerts you with a countdown when Crystal Fragments proc, and countdown for quite a few of your abilities with a duration.
Available for non-Sorcs, but currently only for common skills (no class skills except for Sorcerers yet).


Features
  • Alerts and Procs display a countdown of seconds remaining
  • Two display modes:
    • Two types of icons: Reminders (buffs) and Alerts & Procs, in two different windows
    • In slot order, for example it can be placed just above the skill bar
  • Scaleable icon sizes, for example alert icons twice the size of reminder icons
  • All abilities (buffs, procs & alerts) can be individually turned on or off
  • Option to hide when in menus
  • Option to show repositioning help, otherwise the position is locked
  • Selectable if it should load for non-sorcerer characters
  • Selectable if settings should be account wide (like today) or for each character (new in 2.5.1)
  • Sorcerer / Dark Magic
    • Crystal Fragments (proc)
    • Encase
    • Rune Prison
  • Sorcerer / Daedric Summoning
    • Unstable Familiar (buff)
    • Daedric Curse
    • Summons Winged Twilight (buff)
    • Bound Armor (buff)
    • Conjured Ward
  • Sorcerer / Storm Calling
    • Mages' Fury
    • Lightning Form
    • Lightning Splash
    • Surge
    • Bolt Escape
  • Weapon / Destruction Staff
    • Weakness of Elements
    • Wall of Elements (new in 2.5.0)
  • Weapon / Restoration Staff
    • Steadfast Ward
  • World / Soul Magic
    • Soul Trap
  • Guild / Fighters Guild
    • Expert Hunter
  • Guild / Mages Guild
    • Mage's Light (buff)
    • Entropy
  • Alliance War/ Assault
    • Magicka Detonation

Controls
  • Set "Show repositioning help" to ON in the settings
  • Left-click and drag to reposition the windows
  • Set "Show repositioning help" to OFF in the settings to get rid of the repositioning windows and lock the icons

Known Issues
  • Expert Hunter countdown doesn't extend (as the actual ability do)
  • Daedric Curse timer tracks from when it was cast, not from when it affects the target. As such, it might be off by a second or two depending on the distance to the target.
  • Timers need fine-tuning, for example some now depend also on skill rank
  • Ligtning Splash does not do a good job to detect when the cast is aborted and usually display countdown anyway
  • If you use redefine keys to mouse buttons, the abilities that is solely detected by the key detection routine will fail to be detected
  • Sometimes at load of new scene or mount/dismount, a timer might display in large icon. Remedy is to toogle the ability
  • There is a small memory leak, so after some time you might have to give command /RELOADUI to clear it out.

Possible Future Features
  • More abilities with a duration
  • Modify Mage's Fury depending on targets health above/below 20%
  • Display countdowns in time order, i.e. 1 sec left before the one with 2 sec left
  • Add class skills for non-sorcerers, for example:
    • Show proc for Nightblade assasins Merciful Resolve (similar to Crystal Fragments)
  • Summoned creature HP display (currently not possible as far as I know due to limitations in the game API)
  • Summoned pets now have abilities/buffs that can be activated. If game API allows tracking of this on the pets (I have some doubts) these could also be shown with a timer kind of like how daedric curse works. For example:
    • Familiar Damage Pulse (4 sec PBAOE)
    • Empower Twilight Tormentor (15 second 50% damage buff to pet)
  • Cosmetic issue when you scale the icons to 100%, you can see the border frame. If you scale it bigger, you can't see this any more. Maybe add an option to show/hide border and let it scale with the ability icon size.

Acknowledgments
Continued version of SorcererHelper by stjobe (1.1.13 from 09/18/14).
Suggestion and part of code for per character settings: Baertram
3.2.0 Adapted to Clockwork City (Update 16 - game version 3.2 - API 21) and LibAddonMenu 2.0 r25

3.1.0 Adapted to Horns of the Reach (Update 15 - game version 3.1 - API 20) and LibAddonMenu 2.0 r24

2.8.1 Bump to API 19 (and embarrassingly not even tested)

2.8.0 Adapted to Homestead (Update 13 - game version 2.7 - API 18) and LibAddonMenu 2.0 r23
Fixed that Bound Armor and Conjured Ward have swapped places in this update
Fixed that Velocious Curse (Daedric Curse morph) changed name to Haunting Curse and time to 8.5s
Fixed that Crystal Fragments proc didn't show if non-sorc was enabled

2.7.1 Adapted to addition of Ultimate skills for weapons. Are these skills useful to have an alert with countdown?
2.7.0 Adapted to One Tamriel (Update 12 -game version 2.6.0 - API 17)

2.6.0 Adapted to Shadows of the Hist (Update 11 -game version 2.5.5 - API 16)

2.5.2 Updated some durations like Annulment (thanks Tim), Boundless storm (thanks Luciana) and a few more I found.
2.5.1 Added support for per character settings, as suggested and shown by Baertram. Hopefully also Elemental Blockade (morph of Wall of Elements) work properly (hope Luciana can confirm).
2.5.0 Adapted to Dark Brotherhood (game version 2.5 and API 15). Added support for Destruction Staff - Wall of Elements

2.3.1 Correctly adapted to LibAddonMenu-2.0 r20 ?
2.3.1 Adapted to LibAddonMenu-2.0 r20
2.3.0 Adapted to Thieves Guild (game version 2.3 and API 14). Fixed timer for Proximity Detonation (morph of Magicka Detonation)

2.2.2 Added timer for Magicka Detonation (Alliance War/Assault), at least I hope so as I can't test myself
2.2.1 Adapted to Orsinium (game version 2.2.4 and API 13)
2.2.0 Allowed for non-Sorcs, for the common skills

2.1.8 Updated quite a few durations after the update, for example Surge
2.1.7 Detects re-proc of Crystal Fragments (but are there cases where it fails to detect a proc entirely, please give feedback)
2.1.5 Adapted to Update 7 (game version 1.7.0). Removed detection of Crystal Fragment proc based on magicka cost, as other methods seems to work properly, and the cost-based sometimes did not.

2.1.4 New abilities: Lightning Splash. Hopefully better ability to detect Crystal Proc in special cases. Either show repositioning and allow move, or hide repositioning and lock icons
2.1.3 Unslotted but still active alerts are now shown. Repositioning window no longer interfere with clickable objects (like unlocking a chest). Fade out of an icon should no longer repeat indefinitely on any machine.
2.1.2 Bugfix for unmorphed Lightning Form or Daedric Curse
2.1.1 Display option for skill bar order. Icon scaling. New abilities: Conjured Ward, Encase, Rune Prison, Mages' Fury, Weakness of Elements, Entropy, Soul Trap, and maybe Bolt Escape and Steadfast Ward
2.1.0 Beta version
2.0.1 Can lock position of alert and reminder windows in settings
2.0.0 Update 6 required quite some more changes and now it should have a (much?) better key detection routine
1.2.2 Adapted to LibAddonMenu-2.0 r17
1.2.1 Adapted to Update 6 (game version 1.6.5)
1.2.0 Adapted to Update 5 (game version 1.5.2) and LibAddonMenu 2.0 r16
Archived Files (17)
File Name
Version
Size
Uploader
Date
3.1.0
57kB
RunningDuck
08/21/17 11:32 AM
2.8.1
53kB
RunningDuck
05/27/17 03:29 AM
2.8.0
53kB
RunningDuck
02/16/17 03:13 PM
2.7.1
53kB
RunningDuck
10/11/16 01:30 PM
2.7.1
53kB
RunningDuck
10/11/16 01:25 PM
2.7.0
53kB
RunningDuck
10/08/16 11:30 AM
2.6.0
53kB
RunningDuck
08/05/16 08:33 AM
2.5.2
53kB
RunningDuck
07/10/16 04:36 AM
2.5.1
53kB
RunningDuck
07/05/16 03:02 PM
2.5.0
53kB
RunningDuck
07/02/16 08:48 AM
2.3.2
52kB
RunningDuck
04/04/16 11:49 AM
2.3.1
53kB
RunningDuck
04/01/16 12:01 PM
2.3.0
39kB
RunningDuck
03/31/16 12:42 PM
2.2.2
39kB
RunningDuck
02/08/16 12:25 PM
2.2.1
39kB
RunningDuck
11/03/15 04:40 PM
2.2.0
39kB
RunningDuck
10/13/15 11:37 AM
2.1.8
38kB
RunningDuck
09/09/15 12:39 PM


Post A Reply Comment Options
Unread 04/16/15, 04:27 PM  
shadowpanther

Forum posts: 0
File comments: 1
Uploads: 0
2.1.1 is not working

Just updated to 2.1.1, and now every UI load I get these messages:

user:/AddOns/SorcererHelper/SorcererHelper.lua:191: operator < is not supported for number < nil
stack traceback:
user:/AddOns/SorcererHelper/SorcererHelper.lua:191: in function 'SH.GetAbilities'
user:/AddOns/SorcererHelper/SorcererHelper.lua:737: in function 'OnPlayerActivated'
Report comment to moderator  
Reply With Quote
Unread 04/16/15, 03:17 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
2.1.1 released

Just uploaded 2.1.1 with what I hope is a fair amount of new features and bugfixes.

A big THANKS! for you who contributed with knowledge and ideas.
Report comment to moderator  
Reply With Quote
Unread 04/16/15, 12:25 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
Re: Fantastic Addon!

Originally Posted by EricBLivingston
Thanks for reviving and continuing this - this is a great aid in battle when it's hard to keep track of everything going on!

Can you add in Healing Ward?
Yes will try
Report comment to moderator  
Reply With Quote
Unread 04/16/15, 12:24 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
Re: Re: Re: Re: 2.1.0 BETA

Originally Posted by Garkin
Originally Posted by RunningDuck
I want to call it every time EVENT_ACTIVE_WEAPON_PAIR_CHANGED. But I thought it just called it once after 300 ms...
Do you mean that zo_callLater() will call the function every 300 ms?
No I mean that zo_callLater() is not a filter.
Good, that's what I hoped you say. Then I understand.
The initial intention was only to delay the call a bit.
But with your suggestion it would filter out a few calls and reduce the strain on the system.

Originally Posted by Garkin
True, it is not guaranted that at the time when EVENT_ADD_ON_LOADED is fired unit "player" already exist. Using EVENT_UNIT_CREATED will be safer.
Thanks for the suggestion, I'll try that
Report comment to moderator  
Reply With Quote
Unread 04/16/15, 05:26 AM  
EricBLivingston

Forum posts: 25
File comments: 23
Uploads: 0
Fantastic Addon!

Thanks for reviving and continuing this - this is a great aid in battle when it's hard to keep track of everything going on!

Can you add in Healing Ward?
Report comment to moderator  
Reply With Quote
Unread 04/15/15, 06:25 PM  
Garkin
 
Garkin's Avatar
AddOn Author - Click to view AddOns

Forum posts: 832
File comments: 1097
Uploads: 33
Re: Re: Re: 2.1.0 BETA

Originally Posted by RunningDuck
Originally Posted by Garkin
  • This doesn't do anything useful: zo_callLater(function() SH.GetSlotted() end, 300)
I want to call it every time EVENT_ACTIVE_WEAPON_PAIR_CHANGED. But I thought it just called it once after 300 ms...

Do you mean that zo_callLater() will call the function every 300 ms?
Then what happen if you call the same function F() that it is declared in? Wouln't there be a recursive overload?
Lua Code:
  1. local function F()
  2.         <do something>
  3.         zo_callLater(function() F() end, 300)
  4. end
No I mean that zo_callLater() is not a filter.
You want to call SH.GetSlotted() when EVENT_ACTION_SLOT_ABILITY_SLOTTED is fired, but not more often then once in 300ms. What it actually does is that function SH.GetSlotted() is called for each event - not immediately, but 300ms later. Code which I have posted works as a filter.

If you want to run some code every 300ms, use:
Lua Code:
  1. EVENT_MANAGER:RegisterForUpdate("uniqueId", 300, someFunction)

Originally Posted by RunningDuck
Originally Posted by Garkin
  • It would be probably better to register events only if character is a sorcerer instead of unregistering when character is not a sorcerer.
Well yes, as long as GetUnitClassId() is valid at that time.
True, it is not guaranted that at the time when EVENT_ADD_ON_LOADED is fired unit "player" already exist. Using EVENT_UNIT_CREATED will be safer.
Last edited by Garkin : 04/15/15 at 07:19 PM.
Report comment to moderator  
Reply With Quote
Unread 04/15/15, 12:25 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
Re: Re: Re: 2.1.0 BETA

Originally Posted by RunningDuck
Originally Posted by Garkin
It was in the code before, but after Update 6 ESO seemed to have changed again.
Maybe I did something wrong, but I could not detect it via EVENT_EFFECT_CHANGED or EVENT_UNIT_ATTRIBUTE_VISUAL_ADDED, which was quite frustrating as I saw the added visual effect.
Regarding the EVENT_EFFECT_CHANGED I stand corrected!
Will look into how to use it in a good way. It should improve things...
Report comment to moderator  
Reply With Quote
Unread 04/14/15, 01:34 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
Re: Re: 2.1.0 BETA

Originally Posted by Garkin
Originally Posted by RunningDuck
I've uploaded a beta version to get some feedback and give you some fixes.
You read through all the code? Impressing!
Thanks for the thorough lesson!!!

Originally Posted by Garkin
  • If possible, do not use global variables.
Ouch...Fixed!

Originally Posted by Garkin
  • Do not create new animation every time when you want to fade in/out control, reuse existing animations.
Thanks. Stealing you code.

Originally Posted by Garkin
It was in the code before, but after Update 6 ESO seemed to have changed again.
Maybe I did something wrong, but I could not detect it via EVENT_EFFECT_CHANGED or EVENT_UNIT_ATTRIBUTE_VISUAL_ADDED, which was quite frustrating as I saw the added visual effect.

Originally Posted by Garkin
  • ???
    Lua Code:
    1. SorcererHelperBuffBarWindow:SetMovable(not not not SH.SV.LockMove)
For some reason I got an error as the ingame lua engine didn't recognized LockMove as an boolean, so I found a lua workaround on the net. (It's not very elegant so I will try to fix it eventually)

Originally Posted by Garkin
  • This doesn't do anything useful: zo_callLater(function() SH.GetSlotted() end, 300)
I want to call it every time EVENT_ACTIVE_WEAPON_PAIR_CHANGED. But I thought it just called it once after 300 ms...

Do you mean that zo_callLater() will call the function every 300 ms?
Then what happen if you call the same function F() that it is declared in? Wouln't there be a recursive overload?
Lua Code:
  1. local function F()
  2.         <do something>
  3.         zo_callLater(function() F() end, 300)
  4. end

Originally Posted by Garkin
  • It would be probably better to register events only if character is a sorcerer instead of unregistering when character is not a sorcerer.
Well yes, as long as GetUnitClassId() is valid at that time.
Report comment to moderator  
Reply With Quote
Unread 04/14/15, 11:59 AM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
Re: Daedric Prey

Originally Posted by parrotpirate
Great addon, thanks for picking it up!
The alert for the daedric prey evolution of daedric curse isn't showing up for me.
Found the bug for Daedric Prey morph, hopefully fixed in next release.
Thanks for reporting!
Report comment to moderator  
Reply With Quote
Unread 04/13/15, 01:50 PM  
Garkin
 
Garkin's Avatar
AddOn Author - Click to view AddOns

Forum posts: 832
File comments: 1097
Uploads: 33
Re: 2.1.0 BETA

Originally Posted by RunningDuck
I've uploaded a beta version to get some feedback and give you some fixes.
  • If possible, do not use global variables. Example:
    Code:
    local _, _, _, _, _, _, progressionIndex = GetSkillAbilityInfo(SKILL_TYPE_CLASS, 3, 3) -- Lightning Form
  • Do not create new animation every time when you want to fade in/out control, reuse existing animations. Example for fade out:
    Lua Code:
    1. function SH.FadeOut(control)
    2.     if control:GetAlpha() == 0 then return end
    3.  
    4.     if not control.anchor then
    5.         control.anchor = ZO_Anchor:New()
    6.     end
    7.  
    8.     control.anchor:SetFromControlAnchor(control, 0)
    9.  
    10.     if not control.fadeOut then
    11.         control.fadeOut = ANIMATION_MANAGER:CreateTimeline()
    12.  
    13.         local popout = control.fadeOut:InsertAnimation(ANIMATION_SCALE, control)
    14.         popout:SetScaleValues(1, 0)
    15.         popout:SetDuration(1000)
    16.         popout:SetEasingFunction(SH.CustomEasing)
    17.  
    18.         local fadeOut = control.fadeOut:InsertAnimation(ANIMATION_ALPHA, control)
    19.         fadeOut:SetAlphaValues(1, 0)
    20.         fadeOut:SetDuration(500)
    21.         fadeOut:SetEasingFunction(ZO_EaseInQuartic)
    22.  
    23.         control.fadeOut:SetHandler('OnStop', function()
    24.             control.anchor:Set(control)
    25.         end)
    26.     end
    27.  
    28.     control.fadeOut:PlayFromStart()
    29. end
  • A few information about crystal fragment proc which can make your life easier: http://www.esoui.com/forums/showpost...6&postcount=20
    If you use EVENT_EFFECT_CHANGED to detect this proc, you don't need OnUpdate function.
  • ???
    Lua Code:
    1. SorcererHelperBuffBarWindow:SetMovable(not not not SH.SV.LockMove)
  • This doesn't do anything useful:
    Lua Code:
    1. local function OnAbilitySlotted(newAbility)
    2.     --workaround for EVENT_ACTION_SLOT_ABILITY_SLOTTED firing too fast
    3.     zo_callLater(function() SH.GetSlotted()    end, 300)
    4. end
    I believe that you want call SH.GetSlotted just once in 300ms and filter out all additional calls. However this function doesn't filter anything, if you want to filter out additional calls, you'll have to add some kind of flag:
    Lua Code:
    1. local isUpdating = false
    2. local function OnAbilitySlotted(newAbility)
    3.     --workaround for EVENT_ACTION_SLOT_ABILITY_SLOTTED firing too fast
    4.     if not isUpdating then
    5.         isUpdating = true
    6.         zo_callLater(function()
    7.                 SH.GetSlotted()
    8.                 isUpdating = false
    9.             end, 300)
    10.     end
    11. end
  • It would be probably better to register events only if character is a sorcerer instead of unregistering when character is not a sorcerer. But it's probably just matter of personal preference.
    Lua Code:
    1. local function OnAddOnLoaded(eventCode, addOnName)
    2.     if (addOnName == SH.name and GetUnitClassId("player") == 2) then
    3.         SH.SV = ZO_SavedVars:NewAccountWide("SorcererHelper_SavedVariables", 1, nil, SH.Defaults)
    4.  
    5.         EVENT_MANAGER:RegisterForEvent(SH.name, EVENT_PLAYER_ACTIVATED, OnPlayerActivated)
    6.         EVENT_MANAGER:RegisterForEvent(SH.name, EVENT_ACTION_SLOT_ABILITY_SLOTTED, OnAbilitySlotted)
    7.         EVENT_MANAGER:RegisterForEvent(SH.name, EVENT_ACTIVE_WEAPON_PAIR_CHANGED, SH.GetSlotted)
    8.         SH.CreateSettings()
    9.     end
    10. end
    11.  
    12. EVENT_MANAGER:RegisterForEvent(SH.name, EVENT_ADD_ON_LOADED, OnAddOnLoaded)
Report comment to moderator  
Reply With Quote
Unread 04/13/15, 01:12 PM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4989
File comments: 6040
Uploads: 78
Thx, will try it.

Answer to your question:
How about this idea: an option that displays the alerts/buffs in slot order?

For me this wouldn't be necessary as I put the icons not near the skillbar but in my seight at the top of the screen.
But I'd like to see the effects:
-either in the order of appearance from left to right (newst to the left)
-or in the order of disappearance (longest left, shortest right)
Report comment to moderator  
Reply With Quote
Unread 04/13/15, 12:57 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
2.1.0 BETA

I've uploaded a beta version to get some feedback and give you some fixes.
Report comment to moderator  
Reply With Quote
Unread 04/09/15, 11:37 AM  
Omenpapa

Forum posts: 0
File comments: 44
Uploads: 0
I installed this addon, so i can track my crystal frag proc properly, and I do love the addon when it works. However, there are a lot of times when it does not show the proc and i can still cast it instantly. That's basicly made me turn off the addon, since I cant rely on it's information.

I can't really tell you when the bug happens sadly.
Report comment to moderator  
Reply With Quote
Unread 04/08/15, 12:36 PM  
RunningDuck
 
RunningDuck's Avatar
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 110
Uploads: 4
Re: Bug for track buff

Originally Posted by grimpows
there is a bug when u dont got a specific sorcerer buff and u get it in the light ultimate skill bar, there is no timer show the CD, i have to use Srendarr for got buff tracker, but the Proc of cristal work fine, juste the timer get a little bit buged sometime. mebbe u can look at srrendar buff for got help about traking buff better than actually.
Sumon pet statut is fine but that were cool if we are able to increase the scale of the icon .. i dont find anything about that.
Ty for this add-on hope u will continue to upgrade it
Could you help me with some more debug info? (My char haven't the morph yet )
* Does Deadric Prey work sometimes and sometimes not?
- If yes, then could you elaborate when it doesn't? (I didn't really understand...)
- If no, then it's connected to being morphed and I better level my char to debug...

As for Crystal Fragments, the countdown doesn't work that well when it procs. I haven't found a good way to detect it yet. (and yes I might have a peek at Srendarrs eventually)
Report comment to moderator  
Reply With Quote
Unread 03/30/15, 11:07 PM  
grimpows

Forum posts: 0
File comments: 1
Uploads: 0
Bug for track buff

there is a bug when u dont got a specific sorcerer buff and u get it in the light ultimate skill bar, there is no timer show the CD, i have to use Srendarr for got buff tracker, but the Proc of cristal work fine, juste the timer get a little bit buged sometime. mebbe u can look at srrendar buff for got help about traking buff better than actually.

sumon pet statut is fine but that were cool if we are able to increase the scale of the icon .. i dont find anything about that.

ty for this add-on hope u will continue to upgrade it
Last edited by grimpows : 03/30/15 at 11:08 PM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: