Skip to content

Instantly share code, notes, and snippets.

@cgdangelo
Created April 26, 2017 21:25
Show Gist options
  • Save cgdangelo/2acb27326132ae41cd64ce8e594af238 to your computer and use it in GitHub Desktop.
Save cgdangelo/2acb27326132ae41cd64ce8e594af238 to your computer and use it in GitHub Desktop.
diff --git a/engine/class_modules/sc_mage.cpp b/engine/class_modules/sc_mage.cpp
index 30370d8..a2a0df2 100755
--- a/engine/class_modules/sc_mage.cpp
+++ b/engine/class_modules/sc_mage.cpp
@@ -381,6 +381,11 @@ public:
// Procs
struct procs_t
{
+ proc_t* arcane_missiles_generated, // AM proc
+ * arcane_missiles_removed, // AM cast
+ * arcane_missiles_expired, // AM buff expires
+ * arcane_missiles_wasted; // Additional AM generated at max stacks
+
proc_t* heating_up_generated, // Crits without HU/HS
* heating_up_removed, // Non-crits with HU >200ms after application
* heating_up_ib_converted, // IBs used on HU
@@ -1606,6 +1611,13 @@ struct arcane_missiles_t : public buff_t
}
return buff_t::trigger( stacks, value, chance, duration );
}
+
+ void expire( timespan_t )
+ {
+ mage_t* p = static_cast<mage_t*>( player );
+
+ p -> procs.arcane_missiles_wasted -> occur();
+ }
};
@@ -1997,9 +2009,20 @@ public:
void trigger_am( int source_id, double chance = -1.0,
int stacks = 1 )
{
+ const auto am_stacks = p() -> buffs.arcane_missiles -> stack();
+
if ( static_cast<buff_t*>(p() -> buffs.arcane_missiles)
-> trigger( stacks, buff_t::DEFAULT_VALUE(), chance ) )
{
+ if (am_stacks == p() -> buffs.arcane_missiles -> max_stack() )
+ {
+ p() -> procs.arcane_missiles_wasted -> occur();
+ }
+ else
+ {
+ p() -> procs.arcane_missiles_generated -> occur();
+ }
+
if ( source_id < 0 )
{
p() -> sim -> out_debug.printf( "Action %s does not have valid AM source_id",
@@ -3444,6 +3467,8 @@ struct arcane_missiles_t : public arcane_mage_spell_t
p() -> buffs.arcane_missiles -> decrement();
+ p() -> procs.arcane_missiles_removed -> occur();
+
}
void last_tick ( dot_t * d ) override
@@ -8181,6 +8206,10 @@ void mage_t::init_procs()
switch ( specialization() )
{
case MAGE_ARCANE:
+ procs.arcane_missiles_expired = get_proc( "Arcane Missiles expired" );
+ procs.arcane_missiles_generated = get_proc( "Arcane Missiles generated" );
+ procs.arcane_missiles_removed = get_proc( "Arcane Missiles removed" );
+ procs.arcane_missiles_wasted = get_proc( "Arcane Missiles wasted" );
break;
case MAGE_FROST:
break;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment