-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve Arcane Mage implementation #128
base: main
Are you sure you want to change the base?
Improve Arcane Mage implementation #128
Conversation
Various fixes and improvements to arcane mage rotation and consumables. Add Mage Armor to the mage ability list. Improvements to the arcane mage EP calculation. Restore the apparently missing ability to run EP for a chosen profile. Instead of applying a random 2% hit reduction, which messes with various proc chances, etc. switch the delta on the hit EP test to use a negative hit modifier. Add mage armor, which is used by arcane mages. Add a spirit buff mutex and scroll of spirit. Add Innervate. Add missing elixirs used by arcane mages. Frostbolt gets double benefit from Element Precision. (Who knows why?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the Mage expertise! I don't play one myself, so this is very helpful!
I noticed a few missing implementations - are there some missing commits for this PR? Let me know if there is anything I can help with!
- name: Blood Fury | ||
- name: Berserking | ||
- name: Bloodlust |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bloodlust is also a configurable raid buff, and is not an ability Mages can cast. As such, it should be removed from the rotation, as it won't do anything here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It wasn't clear to me how to configure the Bloodlust buff. For example, how do you specify when it triggers?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The raid version of Bloodlust is cast at the start of the fight, and lines up with generally-immediate cooldown usage by presets.
@@ -265,7 +258,11 @@ class TBCSim : CliktCommand() { | |||
val specFilter = specFilterStr?.split(",") | |||
val categoryFilter = categoryFilterStr?.split(",") | |||
|
|||
if (calcEP) { | |||
if (calcEP && configFile?.exists() == true) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry about this, looks like I broke that option a long time ago and never fixed the docs... The EP rankings on the site mostly replaced the intent of that feature.
Would the most useful output for a single-character sim be just a table of results to the console? Or, would something else be better?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I found creating the list of my personal EPs to be the most useful thing. Arcane mages have a few different points where haste, in particular, changes very dramatically in value. Understanding where I am relative to those points of inflection is what I wanted to get, and the current output with my local changes does that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good! Whenever you're ready, I'd love to see the implementation!
override val durationMs: Int = 60000 | ||
|
||
override fun modifyStats(sp: SimParticipant): Stats { | ||
return Stats(fireDamage = 80) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is missing the melee proc implementation, but I'm happy to add that later - just noting so I don't forget.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is looking great! I added a couple suggestions about spirit buff priority, and barring a couple comments in the rotation and the personal EP output, should be basically good to go soon!
override val name: String = "Scroll of Spirit V" | ||
override val icon: String = "inv_scroll_01.jpg" | ||
override val durationMs: Int = 30 * 60 * 1000 | ||
override val mutex: List<Mutex> = listOf(Mutex.BUFF_SPIRIT) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be useful to add an override for mutexPriority
here, since that will resolve based on the potency of the buff. The default priority is whichever is newer, which isn't correct for most stat-based buffs.
The value there would be mapOf(Mutex.BUFF_SPIRIT to 30)
, and the corresponding 50
weight in Divine Spirit.
@@ -20,6 +21,7 @@ class DivineSpirit : Ability() { | |||
override val name: String = Companion.name | |||
override val icon: String = "spell_holy_prayerofspirit.jpg" | |||
override val durationMs: Int = -1 | |||
override val mutex: List<Mutex> = listOf(Mutex.BUFF_SPIRIT) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As with the spirit scroll implementation, this would benefit from a mutexPriority
override to accurately express the potency.
@@ -2,6 +2,7 @@ package data.abilities.raid | |||
|
|||
import character.Ability | |||
import character.Buff | |||
import character.Mutex |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: Leftover import
@@ -265,7 +258,11 @@ class TBCSim : CliktCommand() { | |||
val specFilter = specFilterStr?.split(",") | |||
val categoryFilter = categoryFilterStr?.split(",") | |||
|
|||
if (calcEP) { | |||
if (calcEP && configFile?.exists() == true) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good! Whenever you're ready, I'd love to see the implementation!
Various fixes and improvements to arcane mage rotation and consumables.
Add Mage Armor to the mage ability list.
Improvements to the arcane mage EP calculation.
Restore the apparently missing ability to run EP for a chosen profile.
Instead of applying a random 2% hit reduction, which messes with various proc chances, etc. switch the delta on the hit EP test to use a negative hit modifier.
Add mage armor, which is used by arcane mages.
Add a spirit buff mutex and scroll of spirit.
Add Innervate.
Add missing elixirs used by arcane mages.
Frostbolt gets double benefit from Element Precision. (Who knows why?)