GS Shadow PVE Spamable

welcome to the best macro i have ever made
it took a long time to track down how to setup the step function, so let’s focus on that first


StepFunction = [[
	stepa = "1234564321"

	limit = string.len(stepa) or 1
	if stepc == nil then
		stepc = 1
	end
	if stepc >= limit then
		stepc = 1
	else
		stepc = stepc + 1
	end
	step = tonumber(strsub (stepa, stepc, stepc))
	]],

wow that is a thing of beauty ant it, so what does it do you might ask well it allows the user complete control over there macro OMGOSH NO WAI!!! i hear you say to yourself, don’t talk to yourself its creepy

How Stepa Works


Sequences['demo'] = {
StepFunction = [[
	stepa = "111123"
PreMacro 
1	'/cast [nochanneling] Mind Spike',
2	'/cast Mind Blast',
3	'/cast Shadow Word: Death',
PostMacro = [[
/startattack
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

in the above macro stepa has a number chain or “string” of 111123 which means it will call the 1st line “Mind Spike” in you macro 4 times in a row then try and cast the 2nd “Mind Blast” and 3rd line “Shadow Word: Death” before looping back to start the sequence over
this can be any “string” of single digit “123456789” numbers it dose not matter how long, As long as there are no 0’s and the macro has a line to call
“if you call to cast line 4 but only have 3 spells it will not work”


Sequences['example'] = {
StepFunction = [[
	stepa = "12345678932789468127653986459218364521987634912745129345"

now on to the macro

Talents are 3 1 3 3 3 1 1
Glyphs are Mind Spike
Montra:disregard insanity acquire shadow orbs


Sequences['ShadowST'] = {
StepFunction = [[
	stepa = "1234564321"

	limit = string.len(stepa) or 1
	if stepc == nil then
		stepc = 1
	end
	if stepc >= limit then
		stepc = 1
	else
		stepc = stepc + 1
	end
	step = tonumber(strsub (stepa, stepc, stepc))
	]],
PreMacro = [[
/targetenemy [noharm][dead]
/console Sound_EnableSFX 0
/cast [noform] !Shadowform
]],
	'/cast [nochanneling] !Cascade',
	'/cast Mind Blast',
	'/cast Shadow Word: Death',	
	'/cast [nochanneling] Mind Spike',
	'/cast [nopet] Shadowfiend',
	'/cast [target=player, nochanneling]Power Word: Shield',
PostMacro = [[
/startattack
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

how is it spamable
well that’s a trickier statement i can click 5 times a second so i just do multiples of 5 in the “string”, i have 10 digits in my string which makes sure i am hitting the same part of the macro once every 2 seconds which is the timer on mind spike

how do you unload insanity when full on shadow orbs
with this secound macro silly


Sequences['shadowdots'] = {
StepFunction = [[
	stepa = "1"

	limit = string.len(stepa) or 1
	if stepc == nil then
		stepc = 1
	end
	if stepc >= limit then
		stepc = 1
	else
		stepc = stepc + 1
	end
	step = tonumber(strsub (stepa, stepc, stepc))
	]],
PreMacro = [[
/targetenemy [noharm][dead]
/console Sound_EnableSFX 0
/cast [noform] !Shadowform
]],	
	'/castsequence [nochanneling] reset=combat Shadow Word: Pain, Vampiric Touch, Devouring Plague, Mind Flay, Mind Flay',
PostMacro = [[
/startattack
/script UIErrorsFrame:Hide();
/console Sound_EnableSFX 1
]],
}

Shadow Word: Pain and Vampiric Touch were thrown in for some dotweaving, because why not its extra dps in the likely 8 seconds that you will not be casting mind spike

reserved for future updates