This beta WIP macro will make a monk clear events 1-4 in Solteris completely* automated. Just zone into solteris and /mac it. (The DZ requesting player must be flagged). It is buggy AF (especially event 1, looting/giving items is hard!), but at least it's pretty solid at event 3.
Why? The only real items worth getting is from event 6 IMO, the firebone illusion clicky for war/mnk/rog/ber, and maybe the werewolf clicky or drogmor from event 6.
Why a macro? Shouldn't this content be trivial at 120? Because to get to event 6, you have to beat event 3, a "balancing" event which is impossible to cheese/overpower.
How does this macro make you beat event 3? Doesn't just like 1 hit for 20k or something make you instantly fail the event?
The "algorithm" for beating event 3 is very simple. The macro will target the captain with the highest current HP, nav to it, and smack it with exactly 1 auto-attack. Rinse and repeat until win. You need have a "no dmg" mainhand like a fire beetle eye (to prevent ripostes), and rusty weapon (or 1 dmg 1hb weapon mace from vex thal trash) in your offhand.
This works exceptionally well with the "weapon mastery of the whatever* AA because even though you hit for pitiful dmg with a rusty weapon, the weapon mastery AA will just add a flat 5k or so damage onto that. This makes your single auto-attack generally do *at most* 10k damage, which is not enough to unbalance the bosses HP, but it is enough so the event doesn't take an eternity. Technically, this macro should work with *any* class with that AA, but I only tested with monk, and it's trivial to solo because you can just mend every 30 seconds. With a little finagling, you could modify this macro to work with a few different classes.
There are a lot of caveats/requirements....
Side notes.
[CODE title="monk solteris clear macro"]Sub Main()
/echo you MUST have MQ2Nav + navigation mesh enabled for this to work
/echo you MUST Have a bandolier "weak" and "kill"
/echo "weak" must have a non-dmg shield/whatever in main hand slot (no riposte) and rusty 1h in off
/echo "kill" can be whatever big dmg stuff you want
/echo MAKE SURE TO ENABLE AUTO LOOT NO DROP IN OPTIONS!
/echo MAKE SURE AUTO-SKILLS are TURNED ON IF YOU ARE A MONK
/echo MAKE SURE AUTO-SKILLS are turned "OFF" if you ARE NOT A MONK
/echo PLEASE DISABLE ANY LARGE DAMAGE SHIELDS (500+ dmg)
/echo Disable MQ2Melee or whatever plugins you have active that might do dmg
/call GoToEventOne
/call TriggerDialsAndKill
/call LootItems
/call GiveItems
/call WaitAndSlayAlthea
/echo Event 1 Complete
/call EventTwo
/echo Event 2 Complete
/call GoToEventThree
/call StartEventThree
/echo Event 3 Complete
/call EventFour
/echo Event 4 Complete
/call GoToEventFive
/return
Sub GoToEventFive()
/nav loc 2728.33 -1643.34 1332.90
/while (${Navigation.Active}) {
/delay 1
}
/doortarget
/click left door
/delay 30
/return
Sub EventFour()
/bandolier activate weak
/nav spawn astire
/while (${Navigation.Active}) {
/delay 1
}
| wait for adds to arrive
/delay 30
/bandolier activate kill
/call SlayNearbyAdds
/call WaitAndOpenChest
/return
Sub GoToEventThree()
/bandolier activate weak
/nav loc 454.41 -1640.27 30.97
/while (${Navigation.Active}) {
/delay 1
}
/doortarget
/click left door
/delay 30
/nav loc 993.30 -1849.46 1331.12
/while (${Navigation.Active}) {
/delay 1
}
/bandolier activate kill
| give time for adds to reach you, then kill adds
/if (${Me.AbilityReady[Imitate Death]}) {
/doability "Imitate Death"
/stand
}
/echo waiting 20 seconds for mobs to reach me
/delay 200
/call SlayNearbyAdds
/return
Sub StartEventThree()
/echo starting boss
| start boss
/nav loc 993.10 -1627.13 1351.25
/while (${Navigation.Active}) {
/delay 1
}
/call EventThreeLogic
/return
Sub SlayNearbyAdds()
/while (${Me.XTarget[1].ID}) {
| if the NPC is more than 30 units away, just wait for them, so we don't navigate off cliff
/if (${Me.XTarget[1].Distance} > 30) {
/echo waiting 5 seconds for xtarget1 to get close
/delay 50
/continue
}
/tar id ${Me.XTarget[1].ID}
/stick 8
/squelch /attack on
/while (${Target.ID} && ${Target.PctHPs} > 0 && !${Target.Type.Equal[corpse]} && ${Target.Distance} < 30) {
/delay 10
/call StandAndAttackIfFeigned
/call Mend
}
/delay 5
}
/echo All nearby adds are slain!
/return
Sub EventTwo()
/bandolier activate weak
/nav spawn Lochmaul
/while (${Navigation.Active}) {
/delay 1
}
/bandolier activate kill
/if (${Me.AbilityReady[Imitate Death]}) {
/doability "Imitate Death"
/delay 15
/stand
}
/call SlayNearbyAdds
/call WaitAndOpenChest
/return
Sub GoToEventOne()
/bandolier activate weak
/nav loc -593.43 -872.10 105.64
/while (${Navigation.Active}) {
/delay 1
}
/bandolier activate kill
/delay 50
/call SlayNearbyAdds
/return
Sub TriggerDialsAndKill()
/call Dial -593.43 -872.10 105.64
/call Dial -545.24 -785.38 105.64
/call Dial -563.47 -686.71 105.64
/call Dial -642.02 -622.05 105.64
/call Dial -744.69 -622.66 105.64
/call Dial -819.47 -689.55 105.64
/call Dial -836.42 -792.73 105.64
/call Dial -780.38 -878.61 105.64
/call Dial -684.79 -910.71 105.64
/return
Sub WaitAndSlayAlthea()
/while (!${Me.XTarget}) {
/delay 10
/echo waiting for althea to engage...
}
/echo Kill Althea!
/target Althea
/stick 8
/squelch /attack on
/while (${Target.ID}) {
/delay 10
/call StandAndAttackIfFeigned
/call Mend
}
/call WaitAndOpenChest
/return
Sub WaitAndOpenChest()
/delay 50
/tar "a chest"
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/open
/return
Sub Mend()
/if (${Me.AbilityReady[mend]}) /doability "mend"
/return
Sub LootItems()
/advloot personal "Buckler of Mistmoore" loot
/advloot personal "Finsternacht Cuirass" loot
/advloot personal "Lightning-Scored Greaves" loot
/advloot personal "Phial of Swirling Toxins" loot
/advloot personal "Serpentine Ornate Backstabber" loot
/advloot personal "Shroud of Purest Shade" loot
/advloot personal "Stave of Stinging Soot" loot
/advloot personal "Valen Ak-Daal" loot
/advloot personal "Vermilion Batfur Shawl" loot
/return
Sub GiveItems()
/if (!${Window[InventoryWindow]}) {
/keypress inventory
/delay 5
}
/target Christine
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/call Hand "Serpentine Ornate Backstabber"
/call Hand "Phial of Swirling Toxins"
/call Hand "Lightning-Scored Greaves"
/call GiveWnd
/target Brenda
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/call Hand "Valen Ak-Daal"
/call Hand "Buckler of Mistmoore"
/call Hand "Finsternacht Cuirass"
/call GiveWnd
/target Althea
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/call Hand "Stave of Stinging Soot"
/call Hand "Shroud of Purest Shade"
/call Hand "Vermilion Batfur Shawl"
/call GiveWnd
/return
Sub Dial(float x, float y, float z)
/nav loc ${x} ${y} ${z}
/while (${Navigation.Active}) {
/delay 1
}
/doortarget
/click left door
/delay 30
/target Guardian
/stick 8
/squelch /attack on
/while (${Target.ID}) {
/call StandAndAttackIfFeigned
/delay 5
}
/echo dead
/return
Sub StandAndAttackIfFeigned()
/if (${Me.State.Equal[FEIGN]} && !${Me.Sitting}) {
/stand
}
/stick 8
/squelch /attack on
/return
Sub Hand(string foo)
/echo Looking for ${foo} in bags...
/if (${FindItem[=${foo}].InvSlot}) {
/echo Did not find ${foo} in bags!!! waiting 5 seconds and trying again...
/echo Did you remember to actually loot ${foo} ???
/delay 50
/call Hand ${foo}
}
/ctrl /itemnotify "${FindItem[=${foo}]}" leftmouseup
/doevents
/delay 10
/click left target
/doevents
/delay 10
/return
Sub GiveWnd()
/if (!${Window[GiveWnd].Open}) {
/call GiveWnd
}
/notify GiveWnd GVW_Give_Button leftmouseup
/doevents
/delay 5
/return
Sub ToggleAutoskills()
/autoskill Flying Kick
/autoskill Tiger Claw
/autoskill Bash
/return
Sub EventThreeLogic()
/declare name string outer Rear Guard Captain Balreth
/declare captainCount int local 0
/call ToggleAutoskills
/while (1) {
/if (${Me.AbilityReady[mend]}) /doability "mend"
| break out of while loop if on the last phase
/varset captainCount ${SpawnCount[npc targetable radius 1000 ${name}]}
/if (${captainCount} == 16) {
/echo FINAL PHASE! SLAUGHTER EVERYTHING!
/bandolier activate kill
/call ToggleAutoskills
/break
}
| convergence of ash uses Rear guard as shield WTF!!!
| finishing blow on the CoA did 110k+dmg to the rear guard...
/call Balance
/delay 10
}
/call SlayNearbyAdds
/call WaitAndOpenChest
/return
Sub Balance()
/declare captainCount int local ${SpawnCount[npc targetable radius 500 ${name}]}
/declare maxHP int local
/declare maxID int local
/declare hp int local
/declare id int local
/declare i int local
/if (${captainCount} == 0) {
/echo no captains found
/return
}
/for i 1 to ${captainCount}
/varset id ${NearestSpawn[${i}, npc targetable radius 100 ${name}].ID}
/varset hp ${NearestSpawn[${i}, npc targetable radius 100 ${name}].CurrentHPs}
/if (${hp} > ${maxHP}) {
/varset maxHP ${hp}
/varset maxID ${id}
}
/next i
/bandolier activate weak
/call Murder ${maxID}
/return
Sub Murder(int id)
/target id ${id}
/squelch /nav id ${Target.ID} dist=10
/while (${Navigation.Active}) {
/delay 1
}
/face fast id ${Target.ID}
/squelch /attack on
/delay 1
/squelch /attack off
/squelch /target clear
/return[/CODE]
Why? The only real items worth getting is from event 6 IMO, the firebone illusion clicky for war/mnk/rog/ber, and maybe the werewolf clicky or drogmor from event 6.
Why a macro? Shouldn't this content be trivial at 120? Because to get to event 6, you have to beat event 3, a "balancing" event which is impossible to cheese/overpower.
How does this macro make you beat event 3? Doesn't just like 1 hit for 20k or something make you instantly fail the event?
The "algorithm" for beating event 3 is very simple. The macro will target the captain with the highest current HP, nav to it, and smack it with exactly 1 auto-attack. Rinse and repeat until win. You need have a "no dmg" mainhand like a fire beetle eye (to prevent ripostes), and rusty weapon (or 1 dmg 1hb weapon mace from vex thal trash) in your offhand.
This works exceptionally well with the "weapon mastery of the whatever* AA because even though you hit for pitiful dmg with a rusty weapon, the weapon mastery AA will just add a flat 5k or so damage onto that. This makes your single auto-attack generally do *at most* 10k damage, which is not enough to unbalance the bosses HP, but it is enough so the event doesn't take an eternity. Technically, this macro should work with *any* class with that AA, but I only tested with monk, and it's trivial to solo because you can just mend every 30 seconds. With a little finagling, you could modify this macro to work with a few different classes.
There are a lot of caveats/requirements....
- /echo you MUST have MQ2Nav + navigation mesh enabled for this to work
- /echo you MUST Have a bandolier "weak" and "kill"
- /echo "weak" must have a non-dmg shield/whatever in main hand slot (no riposte) and rusty 1h in off
- /echo "kill" can be whatever big dmg stuff you want
- /echo MAKE SURE TO ENABLE AUTO LOOT NO DROP IN OPTIONS!
- /echo MAKE SURE AUTO-SKILLS are TURNED ON IF YOU ARE A MONK
- /echo MAKE SURE AUTO-SKILLS are turned "OFF" if you ARE NOT A MONK
- /echo PLEASE DISABLE ANY LARGE DAMAGE SHIELDS (500+ dmg)
- /echo Disable MQ2Melee or whatever plugins you have active that might do dmg
Side notes.
- Why is the code for this macro awful? Because it's my first attempt at writing a macro, and the MQ scripting language/docs are abysmal, and I don't have enough time to dedicate to make it "good".
- Don't bother with the adds during event 3. The captains will "shield" them or whatever, so if you finishing blow AA one of the adds while it's shielded, you will instantly unbalance/lose the event.
- You don't need to use this macro for events 1/2 or 4 really. You can very easily just "comment out" the lines in the macro you don't want (it should be self-explanatory)
- I haven't tested this as 120, only at 115, and months ago. I see no reason it shouldn't still generally work.
- Auto-skills are bizarre. There is no on/off command to my knowledge. You can only toggle! This is probably solved somehow....a single flying kick will break event 3.
- The 2nd boss casts a warp that places you off the island, but you "mostly" get summoned right back. Mostly.
- Event 6 is a balancing event, but you can cheese it. It does break occasionally though....
- The firebone clicky has a 20% to drop. This might take a few tries.
- It feels pretty surreal to be able to press 1 button to solo-clear* an entire raid instance which at one point took an entire guild many hours to clear.
- I'm probably forgetting a TON of stuff to include here. I'll add more details or comments as it comes back to me.
- There are a million different reasons to lose event 3. Forget to remove that 6k mage DS = instant loss. Forget to remove that 10k proc thingy? LOSS. I've failed this event countless times for every reason imaginable.
- The auto-banestrike change makes this a bit dicey. While your max damage of 2 attacks + banestrike *should* still be under the 5% HP balance-break threshold, it's possible it's too much at 120.
- Sic, can I get access to the CWTN plugins for free please?
[CODE title="monk solteris clear macro"]Sub Main()
/echo you MUST have MQ2Nav + navigation mesh enabled for this to work
/echo you MUST Have a bandolier "weak" and "kill"
/echo "weak" must have a non-dmg shield/whatever in main hand slot (no riposte) and rusty 1h in off
/echo "kill" can be whatever big dmg stuff you want
/echo MAKE SURE TO ENABLE AUTO LOOT NO DROP IN OPTIONS!
/echo MAKE SURE AUTO-SKILLS are TURNED ON IF YOU ARE A MONK
/echo MAKE SURE AUTO-SKILLS are turned "OFF" if you ARE NOT A MONK
/echo PLEASE DISABLE ANY LARGE DAMAGE SHIELDS (500+ dmg)
/echo Disable MQ2Melee or whatever plugins you have active that might do dmg
/call GoToEventOne
/call TriggerDialsAndKill
/call LootItems
/call GiveItems
/call WaitAndSlayAlthea
/echo Event 1 Complete
/call EventTwo
/echo Event 2 Complete
/call GoToEventThree
/call StartEventThree
/echo Event 3 Complete
/call EventFour
/echo Event 4 Complete
/call GoToEventFive
/return
Sub GoToEventFive()
/nav loc 2728.33 -1643.34 1332.90
/while (${Navigation.Active}) {
/delay 1
}
/doortarget
/click left door
/delay 30
/return
Sub EventFour()
/bandolier activate weak
/nav spawn astire
/while (${Navigation.Active}) {
/delay 1
}
| wait for adds to arrive
/delay 30
/bandolier activate kill
/call SlayNearbyAdds
/call WaitAndOpenChest
/return
Sub GoToEventThree()
/bandolier activate weak
/nav loc 454.41 -1640.27 30.97
/while (${Navigation.Active}) {
/delay 1
}
/doortarget
/click left door
/delay 30
/nav loc 993.30 -1849.46 1331.12
/while (${Navigation.Active}) {
/delay 1
}
/bandolier activate kill
| give time for adds to reach you, then kill adds
/if (${Me.AbilityReady[Imitate Death]}) {
/doability "Imitate Death"
/stand
}
/echo waiting 20 seconds for mobs to reach me
/delay 200
/call SlayNearbyAdds
/return
Sub StartEventThree()
/echo starting boss
| start boss
/nav loc 993.10 -1627.13 1351.25
/while (${Navigation.Active}) {
/delay 1
}
/call EventThreeLogic
/return
Sub SlayNearbyAdds()
/while (${Me.XTarget[1].ID}) {
| if the NPC is more than 30 units away, just wait for them, so we don't navigate off cliff
/if (${Me.XTarget[1].Distance} > 30) {
/echo waiting 5 seconds for xtarget1 to get close
/delay 50
/continue
}
/tar id ${Me.XTarget[1].ID}
/stick 8
/squelch /attack on
/while (${Target.ID} && ${Target.PctHPs} > 0 && !${Target.Type.Equal[corpse]} && ${Target.Distance} < 30) {
/delay 10
/call StandAndAttackIfFeigned
/call Mend
}
/delay 5
}
/echo All nearby adds are slain!
/return
Sub EventTwo()
/bandolier activate weak
/nav spawn Lochmaul
/while (${Navigation.Active}) {
/delay 1
}
/bandolier activate kill
/if (${Me.AbilityReady[Imitate Death]}) {
/doability "Imitate Death"
/delay 15
/stand
}
/call SlayNearbyAdds
/call WaitAndOpenChest
/return
Sub GoToEventOne()
/bandolier activate weak
/nav loc -593.43 -872.10 105.64
/while (${Navigation.Active}) {
/delay 1
}
/bandolier activate kill
/delay 50
/call SlayNearbyAdds
/return
Sub TriggerDialsAndKill()
/call Dial -593.43 -872.10 105.64
/call Dial -545.24 -785.38 105.64
/call Dial -563.47 -686.71 105.64
/call Dial -642.02 -622.05 105.64
/call Dial -744.69 -622.66 105.64
/call Dial -819.47 -689.55 105.64
/call Dial -836.42 -792.73 105.64
/call Dial -780.38 -878.61 105.64
/call Dial -684.79 -910.71 105.64
/return
Sub WaitAndSlayAlthea()
/while (!${Me.XTarget}) {
/delay 10
/echo waiting for althea to engage...
}
/echo Kill Althea!
/target Althea
/stick 8
/squelch /attack on
/while (${Target.ID}) {
/delay 10
/call StandAndAttackIfFeigned
/call Mend
}
/call WaitAndOpenChest
/return
Sub WaitAndOpenChest()
/delay 50
/tar "a chest"
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/open
/return
Sub Mend()
/if (${Me.AbilityReady[mend]}) /doability "mend"
/return
Sub LootItems()
/advloot personal "Buckler of Mistmoore" loot
/advloot personal "Finsternacht Cuirass" loot
/advloot personal "Lightning-Scored Greaves" loot
/advloot personal "Phial of Swirling Toxins" loot
/advloot personal "Serpentine Ornate Backstabber" loot
/advloot personal "Shroud of Purest Shade" loot
/advloot personal "Stave of Stinging Soot" loot
/advloot personal "Valen Ak-Daal" loot
/advloot personal "Vermilion Batfur Shawl" loot
/return
Sub GiveItems()
/if (!${Window[InventoryWindow]}) {
/keypress inventory
/delay 5
}
/target Christine
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/call Hand "Serpentine Ornate Backstabber"
/call Hand "Phial of Swirling Toxins"
/call Hand "Lightning-Scored Greaves"
/call GiveWnd
/target Brenda
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/call Hand "Valen Ak-Daal"
/call Hand "Buckler of Mistmoore"
/call Hand "Finsternacht Cuirass"
/call GiveWnd
/target Althea
/nav target
/while (${Navigation.Active}) {
/delay 1
}
/call Hand "Stave of Stinging Soot"
/call Hand "Shroud of Purest Shade"
/call Hand "Vermilion Batfur Shawl"
/call GiveWnd
/return
Sub Dial(float x, float y, float z)
/nav loc ${x} ${y} ${z}
/while (${Navigation.Active}) {
/delay 1
}
/doortarget
/click left door
/delay 30
/target Guardian
/stick 8
/squelch /attack on
/while (${Target.ID}) {
/call StandAndAttackIfFeigned
/delay 5
}
/echo dead
/return
Sub StandAndAttackIfFeigned()
/if (${Me.State.Equal[FEIGN]} && !${Me.Sitting}) {
/stand
}
/stick 8
/squelch /attack on
/return
Sub Hand(string foo)
/echo Looking for ${foo} in bags...
/if (${FindItem[=${foo}].InvSlot}) {
/echo Did not find ${foo} in bags!!! waiting 5 seconds and trying again...
/echo Did you remember to actually loot ${foo} ???
/delay 50
/call Hand ${foo}
}
/ctrl /itemnotify "${FindItem[=${foo}]}" leftmouseup
/doevents
/delay 10
/click left target
/doevents
/delay 10
/return
Sub GiveWnd()
/if (!${Window[GiveWnd].Open}) {
/call GiveWnd
}
/notify GiveWnd GVW_Give_Button leftmouseup
/doevents
/delay 5
/return
Sub ToggleAutoskills()
/autoskill Flying Kick
/autoskill Tiger Claw
/autoskill Bash
/return
Sub EventThreeLogic()
/declare name string outer Rear Guard Captain Balreth
/declare captainCount int local 0
/call ToggleAutoskills
/while (1) {
/if (${Me.AbilityReady[mend]}) /doability "mend"
| break out of while loop if on the last phase
/varset captainCount ${SpawnCount[npc targetable radius 1000 ${name}]}
/if (${captainCount} == 16) {
/echo FINAL PHASE! SLAUGHTER EVERYTHING!
/bandolier activate kill
/call ToggleAutoskills
/break
}
| convergence of ash uses Rear guard as shield WTF!!!
| finishing blow on the CoA did 110k+dmg to the rear guard...
/call Balance
/delay 10
}
/call SlayNearbyAdds
/call WaitAndOpenChest
/return
Sub Balance()
/declare captainCount int local ${SpawnCount[npc targetable radius 500 ${name}]}
/declare maxHP int local
/declare maxID int local
/declare hp int local
/declare id int local
/declare i int local
/if (${captainCount} == 0) {
/echo no captains found
/return
}
/for i 1 to ${captainCount}
/varset id ${NearestSpawn[${i}, npc targetable radius 100 ${name}].ID}
/varset hp ${NearestSpawn[${i}, npc targetable radius 100 ${name}].CurrentHPs}
/if (${hp} > ${maxHP}) {
/varset maxHP ${hp}
/varset maxID ${id}
}
/next i
/bandolier activate weak
/call Murder ${maxID}
/return
Sub Murder(int id)
/target id ${id}
/squelch /nav id ${Target.ID} dist=10
/while (${Navigation.Active}) {
/delay 1
}
/face fast id ${Target.ID}
/squelch /attack on
/delay 1
/squelch /attack off
/squelch /target clear
/return[/CODE]
Last edited:

