void action_t::execute()
{
  if ( sim -> log && ! dual ) 
  {
    log_t::output( sim, "%s performs %s (%.0f)", player -> name(), name(), 
                   player -> resource_current[ player -> primary_resource() ] );
  }

  if ( observer ) *observer = 0;

  player_buff();

  target_debuff( DMG_DIRECT );

  calculate_result();

  consume_resource();

  if ( result_is_hit() )
  {
    calculate_direct_damage();

    if ( direct_dmg > 0 )
    {
      assess_damage( direct_dmg, DMG_DIRECT );
    }
    if ( num_ticks > 0 )
    {
      if ( dot_behavior == DOT_REFRESH )
      {
        current_tick = 0;
        if ( ! ticking ) schedule_tick();
      }
      else
      {
        if ( ticking ) cancel();
        snapshot_haste = haste();
        schedule_tick();
      }
    }
  }
  else
  {
    if ( sim -> log )
    {
      log_t::output( sim, "%s avoids %s (%s)", sim -> target -> name(), name(), util_t::result_type_string( result ) );
      log_t::miss_event( this );
    }
  }

  update_ready();

  if ( ! dual ) update_stats( DMG_DIRECT );

  schedule_travel();

  if ( repeating && ! proc ) schedule_execute();

  if ( harmful ) player -> in_combat = true;
}
示例#2
0
 virtual void execute()
 {
   if ( sim -> log ) log_t::output( sim, "%s uses Dark Rune", player -> name() );
   player -> resource_gain( RESOURCE_MANA,   mana, player -> gains.dark_rune );
   player -> resource_loss( RESOURCE_HEALTH, health );
   update_ready();
 }
示例#3
0
void heal_t::execute()
{
  if ( ! initialized )
  {
    sim -> errorf( "action_t::execute: action %s from player %s is not initialized.\n", name(), player -> name() );
    assert( 0 );
  }

  if ( sim -> log && ! dual )
  {
    log_t::output( sim, "%s performs %s (%.0f)", player -> name(), name(),
                   player -> resource_current[ player -> primary_resource() ] );
  }

  player_buff();

  total_heal = 0;

  for ( unsigned int i = 0; i < heal_target.size(); i++ )
  {
    target_debuff( heal_target[ i ], HEAL_DIRECT );

    calculate_result();

    direct_dmg = calculate_direct_damage();

    schedule_travel( heal_target[ i ] );
  }

  consume_resource();

  update_ready();

  if ( ! dual ) stats -> add_execute( time_to_execute );

  if ( harmful ) player -> in_combat = true;

  if ( repeating && ! proc ) schedule_execute();


  // Add options found in spell_t::execute()
  if ( player -> last_foreground_action == this )
    player -> debuffs.casting -> expire();

  if ( harmful && callbacks )
  {
    if ( result != RESULT_NONE )
    {
      action_callback_t::trigger( player -> heal_callbacks[ result ], this );
    }
    if ( ! background ) // OnSpellCast
    {
      action_callback_t::trigger( player -> heal_callbacks[ RESULT_NONE ], this );
    }
  }
}
示例#4
0
  virtual void execute()
  {
    if ( player -> in_combat )
    {
      player -> buffs.volcanic_potion   -> trigger();
    }
    else
    {
      cooldown -> duration -= 5.0;
      player -> buffs.volcanic_potion   -> buff_duration -= 5.0;
      player -> buffs.volcanic_potion   -> trigger();
      cooldown -> duration += 5.0;
      player -> buffs.volcanic_potion   -> buff_duration += 5.0;
    }

    if ( sim -> log ) log_t::output( sim, "%s uses %s", player -> name(), name() );
    if ( player -> in_combat ) player -> potion_used = 1;
    update_ready();
  }
示例#5
0
 virtual void execute()
 {
   if ( sim -> log ) log_t::output( sim, "%s uses Health Stone", player -> name() );
   player -> resource_gain( RESOURCE_HEALTH, health );
   update_ready();
 }