Actually, it's totally possible to create sequential spell casts with standard macros (Obviously, no more than 1 spell per 1 keypress.) In vanilla you can call CastSpellByName if the parent caller is an input event.
This basically means you can create a macro like /script DoRotation(); then create an addon containing the function DoRotation, that increments a variable and calls whatever spell should be at that point using CastSpellByName.
I've actually made a little addon for this myself but I haven't posted it. (I can if anyone wants though.) This is basically how it works:
- Code: Select all
    -- Basic caster druid rotation. Casts moonfire if moonfire debuff is expired, otherwise it spams wrath, but switches to healing if health is less than 50%
   [_Rotation_BasicDruid] = {
      ['Healing Touch'] = {
         ['priority'] = 0.96,
         ['shouldRun'] = function()
            return _PlayerHealthFloat < 0.5
         end
      },
      ['Rejuvenation'] = {
         ['priority'] = 1,
         ['shouldRun'] = function() return _PlayerHealthFloat < 0.5 and _TimeSinceLast > 12 and not _Casting; end
      },
      ['Wrath'] = {
         ['priority'] = 0.1,
         ['shouldRun'] = function() return true; end
      },
      ['Moonfire'] = {
         ['priority'] = 0.9,
         ['shouldRun'] = function() return _TimeSinceLast > 9 and not _Casting and not _FirstCast; end -- debuf duration
      }
   }
        -- shifts out of bear form, heals, until health is more than 60% then shifts back
   [_Rotation_DruidBearHealShift] = {
      ['Bear Form'] = {
         ['priority'] = 0.1,
         ['hasGCD'] = false,
         ['shouldRun'] = function() 
            return _PlayerShapeshiftForm == 1 or _vars['finishedHealing'];
         end,
         ['didRun'] = function()
            _vars['finishedHealing'] = false;
         end
      },
      ['Healing Touch'] = {
         ['priority'] = 0.2,
         ['shouldRun'] = function()
            return _PlayerShapeshiftForm == 0 and not _vars['finishedHealing'];
         end,
         ['finished'] = function()
            _vars['finishedHealing'] = _PlayerHealthFloat > 0.6;
         end
      }
   }
Cast sequences are definitely allowed, that's a big part of why macros exist in the first place. It's multiple actions with 1 input that's not, as far as I can tell from the TOS. (And that's blizzard's policy aswell)
Not intending to hijack the thread lol, just sayin'