Goto page 1, 2  Next Public Macros my shaman macro
Reply
my shaman macro
I'm on THF, this seems to be working pretty well

Macro
More +

| Events and Chat and Includes
#turbo          40
#chat           tell
#chat           group
#Event          ImDead          "You have been slain by#*#"
#Event          ImDead          "You died."
#event          Zoned           "You have entered#*#"
#event          Zoned           "LOADING, PLEASE WAIT..."
#event          ImHit           "#*#hits YOU for#*#"
#Event          Thirsty         "#*#are thirsty#*#"
#Event          Hungry          "#*#are hungry#*#"
#Event          Exp                             "#*#have gained experience#*#"
#Event          RaidExp                 "#*#have gained raid experience#*#"
#Event          SlowOff                 "Your Balance of Discord spell has worn off of#*#"
#Event          CrippleOff              "Your Crippling Spasm spell has worn off of#*#"
#Event          MalosOff                "Your Malos spell has worn off of|#*#"
#Event          DoTOff                  "Your Blood of the Orc spell has worn off of|#*#"
#Event          EnrageOn        "#*#|${Target.CleanName}| has become ENRAGED#*#"
#Event          EnrageOff       "#*#|${Target.CleanName}| is no longer enraged#*#"
#Event          Zoning          "You have entered#*#"
#include        ninjadvloot.inc


Sub Main

/if (${Me.Class.ShortName.NotEqual[SHM]}) {
        /echo Sorry you are not a Shaman.
    /echo I'm afraid this macro to PC relationship just isn't going to work out.
    /echo I do hope we can still be friends though.
    /end
}

| - Detect AA spell gems
| ################## Setup AA Extra gem slot variables

        /if (${Me.AltAbility[Mnemonic Retention]}>=3) /multiline ;      /declare  Gem9 int outer  1 ; /declare Gem9Spell        outer

| name the main tank
/declare tank                           string outer    Feldorn

|Spell Declares, Adjust Spells Here (Melee Disc's)
/declare focus                  outer "Talisman of Wunshi"
/declare sense                  outer "Talisman of Sense"
/declare might                  outer "Talisman of Might"
/declare regen                  outer "Talisman of Perseverance"
/declare sow                            outer "Spirit of Bih`Li"
/declare avatar                         outer "Champion"
/declare panther                        outer "Spirit of the Panther"
/declare invis                          outer "Spirit Veil"
/declare pet                            outer "Farrel's Companion"
/declare cripple                        outer "Crippling Spasm"
/declare crippleGem                     int outer       4
/declare slow                           outer "Balance of Discord"
/declare slowGem                        int outer       3
/declare shrink                         outer "Tiny Terror"
/declare haste                          outer "Talisman of Alacrity"
/declare malo                           outer "Malos"
/declare maloGem                        int outer       2
/declare root                           outer "Petrifying Earth"
/declare dot                            outer "Blood of the Orc"
/declare dotGem                         int outer       7
/declare canni                          outer "Spiritual Sacrifice Rk. I"
/declare canniGem                       int outer       1
/declare glad                           outer "Gladiator Rk. II"
/declare buffGem                        int     outer   8
/declare miscGem                        int     outer   9
/declare heal                   outer "Spiritual Touch Rk. I"
/declare healGem                        int outer       6
/declare hot                            outer "Spiritual Serenity"
/declare hotGem                         int outer       5
/declare food                           outer "Summon Food"
/declare drink                          outer "Summon Drink"
/declare gate                           outer "Gate"

/declare CastRetryTime          string outer 15s
/declare slowTarget                     int outer
/declare slowTimer                      timer outer 0s
/declare crippleTarget          int outer
/declare crippleTimer           timer outer 0s
/declare malosTarget            int outer
/declare malosTimer                     timer outer 0s
/declare dotTarget                      int outer
/declare dotTimer                       timer outer 0s


/declare Bot                            bool outer      FALSE
/declare Verbose                        int     outer   1
/declare Enraged                        bool outer      FALSE
/declare enrageTimer            timer outer 0s
/declare subLockOut                     timer outer 0s


/declare healAt                         int     outer   45
/declare hotAt                          int outer       77

|Item Clicky Declares
/declare manaOrb                outer   "Orb of Spirits"
/declare orbTimer                       timer outer 0m
/declare epic                           outer   "Ancient Talisman of Fates"
/declare epicTimer                      timer outer 0m
/declare circletTimer           timer outer 0m


|Declares for NetBots
/declare NBToon1                        outer
/declare NBToon2                        outer
/declare NBToon3                        outer
/declare NBToon4                        outer
/declare NBToon5                        outer
/declare NBToon6                        outer

/echo Tank=${tank}
/echo TankID=${Spawn[=${tank}].ID}

/if (!${Bot}) /call Start1

|Main Loop, Add other loop and a connector /if command
:Main
/call Heal
/call HoT
/call Epic
/call Panther
/call Canni_Check
/if ( ${NetBots[${tank}].Attacking} ) /call Slow
/if ( ${NetBots[${tank}].Attacking} ) /call Cripple
/if ( ${NetBots[${tank}].Attacking} ) /call Dot
/if ( !${NetBots[${tank}].Attacking} ) /call Buff
/if ( !${NetBots[${tank}].Attacking} ) /call Selfies
/if ( !${NetBots[${tank}].Attacking} ) /call Pet
/doevents

/goto :Main
/return

Sub Start1
/varset Bot TRUE
/declare x int local
/echo Building NetBots Array
        /for x 1 to ${NetBots.Counts}
        /varset NBToon${x} ${NetBots.Client.Token[${x}, ]}
                /echo ${NetBots[${NBToon${x}}].Name}
        /next x
/g NetBots Array loaded and ready!
/return

Sub Heal
/if (${Me.Casting[${Spell[${heal}].ID}].ID} || ${Me.Casting[${Spell[${hot}].ID}].ID} || ${Me.Moving}) /return
/if (${NetBots[${NBToon${x}}].PctHPs}<=${healAt} && ${NetBots[${NBToon${x}}].InZone}) {
        /if (!${Me.Casting[${Spell[${heal}].ID}].ID} || !${Me.Casting[${Spell[${hot}].ID}].ID}) /interrupt
        /g Incoming << ${heal} >> for ${Target} ...
        /casting ${heal} gem${healGem} -maxtries|5 -targetid|${NetBots[${NBToon${x}}].ID}
        }
/return

Sub HoT
/if (${Me.Casting[${Spell[${heal}].ID}].ID} || ${Me.Casting[${Spell[${hot}].ID}].ID} || ${Me.Moving}) /return
/if (${NetBots[${NBToon${x}}].PctHPs}<=${hotAt} && ${NetBots[${NBToon${x}}].PctHPs}>=${healAt} && !${NetBots[${NBToon${x}}].Buff.Find[${Spell[Pious Elixir].ID}]} && ${NetBots[${NBToon${x}}].InZone}) {
        /g Incoming << ${hot} >> for ${Target} ...
        /casting ${hot} gem${hotGem} -maxtries|5 -targetid|${NetBots[${NBToon${x}}].ID}
        }
/return

Sub Epic
/if (${Me.Casting.ID} || ${Me.Moving}) /return
/if (${FindItem[${epic}].Timer}==0 && ${EpicTimer}==0 && ${Target.PctHPs}>55 && ${NetBots[${tank}].Attacking} && ${Target.Named}) {
/echo Clicking Shaman Epic 1.5
/g Clicking Shaman Epic 1.5
/casting ${epic} item 1s
/varset EpicTimer 5m
}
/return

Sub Panther
/if (${Me.Casting.ID} || ${Me.Moving} || ${subLockOut}!=0) /return
/if (${Me.PctMana}>30) {
        /declare x int local
        /for x 1 to ${NetBots.Counts}
                /if ( ${NetBots[${tank}].Attacking} && !${NetBots[${NBToon${x}}].Buff.Find[${Spell[${panther}].ID}]} && ${Spawn[${NetBots[${NBToon${x}}]}].Distance}<90 && ${NetBots[${NBToon${x}}].FreeBuffSlots}>=1 && ${NetBots[${NBToon${x}}].InGroup} && ${Select[${NetBots[${NBToon${x}}].Class.ShortName},SHD,PAL,WAR,MNK,BRD,BER,BST,ROG]} ) {
                        /g Buffing << ${panther} on ${NetBots[${NBToon${x}}].Name} >>
                        /casting ${panther} gem${buffGem} -targetid|${NetBots[${NBToon${x}}].ID}
                        /varset subLockOut 30s
                        /return
                }
                /if ( ${NetBots[${NBToon${x}}].PetID} && ${Spawn[${NetBots[${NBToon${x}}].PetID}].Distance}<90 && !${NetBots[${NBToon${x}}].PetBuff.Find[${Spell[${panther}].ID}]} ) {
                        /g Buffing << ${panther} on ${Spawn[${NetBots[${NBToon${x}}].PetID}].Name} >>
                        /casting ${panther} gem${buffGem} -targetid|${NetBots[${NBToon${x}}].PetID}
                        /varset subLockOut 30s
                        /return
                }
        /next x
}
/return

Sub Slow
/if (${Me.PctMana}<30 || ${Me.Moving}) /return
/if (${slowTimer}==0) /varset slowTarget 0
/if ( ${Spawn[${NetBots[${tank}].TargetID}].Type.Equal[NPC]} && ${NetBots[${tank}].TargetID}!=${slowTarget} && ${NetBots[${tank}].Attacking} && ${NetBots[${tank}].TargetHP}<97 && ${NetBots[${tank}].TargetHP}>60 ) {
        /casting ${slow} gem${slowGem} -maxtries|4 -targetid|${NetBots[${tank}].TargetID}
        /g Attempting to slow << ${Target.CleanName} >>
        /if ( ${Cast.Result.Equal[CAST_SUCCESS]} ) {
                /g << ${Target.CleanName} >> successfully slowed!
                /varset slowTarget ${NetBots[${tank}].TargetID}
                /varset slowTimer 150s
                /return
        }
        /if ( ${Cast.Result.Equal[CAST_RESIST]} ) {
                /g << ${Target.CleanName} >> resisted ${slow}, trying again.
                /casting ${slow} gem${slowGem} -maxtries|4 -targetid|${NetBots[${tank}].TargetID}
                /if ( ${Cast.Result.Equal[CAST_SUCCESS]} ) {
                        /g << ${Target.CleanName} >> successfully slowed!
                        /varset slowTarget ${NetBots[${tank}].TargetID}
                        /varset slowTimer 150s
                        /return
                }
                /if ( !${Cast.Result.Equal[CAST_RESIST]} ) {
                        /g << ${Target.CleanName} >> couldn't be slowed, moving on.
                        /varset slowTarget ${NetBots[${tank}].TargetID}
                        /varset slowTimer 300s
                        /return
                }
        }
        /if ( ${Cast.Result.Equal[CAST_TAKEHOLD]} ) {
                /g << ${Target.CleanName} >> couldn't be slowed, moving on.
                /varset slowTarget ${NetBots[${tank}].TargetID}
                /varset slowTimer 300s
                /return
        }
}
/return

Sub Cripple
/if (${Me.PctMana}<30 || ${Me.Moving}) /return
/if (${crippleTimer}==0) /varset crippleTarget 0
/if ( ${Spawn[${NetBots[${tank}].TargetID}].Type.Equal[NPC]} && ${NetBots[${tank}].TargetID}!=${crippleTarget} && ${NetBots[${tank}].Attacking} && ${NetBots[${tank}].TargetHP}<97 && ${NetBots[${tank}].TargetHP}>60 ) {
        /casting ${cripple} gem${crippleGem} -maxtries|4 -targetid|${NetBots[${tank}].TargetID}
        /g Attempting to cripple << ${Target.CleanName} >>
        /if ( ${Cast.Result.Equal[CAST_SUCCESS]} ) {
                /g << ${Target.CleanName} >> successfully crippled!
                /varset crippleTarget ${NetBots[${tank}].TargetID}
                /varset crippleTimer 300s
                /return
        }
        /if ( ${Cast.Result.Equal[CAST_RESIST]} ) {
                /g << ${Target.CleanName} >> resisted ${slow}, trying again.
                /casting ${cripple} gem${crippleGem} -maxtries|4 -targetid|${NetBots[${tank}].TargetID}
                /if ( ${Cast.Result.Equal[CAST_SUCCESS]} ) {
                        /g << ${Target.CleanName} >> successfully crippled!
                        /varset crippleTarget ${NetBots[${tank}].TargetID}
                        /varset crippleTimer 300s
                        /return
                }
                /if ( !${Cast.Result.Equal[CAST_RESIST]} ) {
                        /g << ${Target.CleanName} >> couldn't be crippled, moving on.
                        /varset crippleTarget ${NetBots[${tank}].TargetID}
                        /varset crippleTimer 600s
                        /return
                }
        }
        /if ( ${Cast.Result.Equal[CAST_TAKEHOLD]} ) {
                /g << ${Target.CleanName} >> couldn't be crippled, moving on.
                /varset crippleTarget ${NetBots[${tank}].TargetID}
                /varset crippleTimer 600s
                /return
        }
}
/return

Sub Dot
/if (${Me.PctMana}<30 || ${Me.Moving}) /return
/if (${dotTimer}==0) /varset dotTarget 0
/if ( ${Spawn[${NetBots[${tank}].TargetID}].Type.Equal[NPC]} && ${NetBots[${tank}].TargetID}!=${dotTarget} && ${NetBots[${tank}].Attacking} && ${NetBots[${tank}].TargetHP}<97 && ${NetBots[${tank}].TargetHP}>65 ) {
        /casting ${dot} gem${dotGem} -maxtries|4 -targetid|${NetBots[${tank}].TargetID}
        /g Attempting to DoT << ${Target.CleanName} >>
        /if ( ${Cast.Result.Equal[CAST_SUCCESS]} ) {
                /g << ${Target.CleanName} >> successfully DoT'd!
                /varset dotTarget ${NetBots[${tank}].TargetID}
                /varset dotTimer 60s
                /return
        }
        /if ( ${Cast.Result.Equal[CAST_RESIST]} ) {
                /g << ${Target.CleanName} >> resisted ${dot}, trying again.
                /casting ${dot} gem${dotGem} -maxtries|4 -targetid|${NetBots[${tank}].TargetID}
                /if ( ${Cast.Result.Equal[CAST_SUCCESS]} ) {
                        /g << ${Target.CleanName} >> successfully DoT'd!
                        /varset dotTarget ${NetBots[${tank}].TargetID}
                        /varset dotTimer 60s
                        /return
                }
                /if ( !${Cast.Result.Equal[CAST_RESIST]} ) {
                        /g << ${Target.CleanName} >> couldn't be DoT'd, moving on.
                        /varset dotTarget ${NetBots[${tank}].TargetID}
                        /varset dotTimer 150s
                        /return
                }
        }
        /if ( ${Cast.Result.Equal[CAST_TAKEHOLD]} ) {
                /g << ${Target.CleanName} >> couldn't be DoT'd, moving on.
                /varset dotTarget ${NetBots[${tank}].TargetID}
                /varset dotTimer 150s
                /return
        }
}
/return

Sub Buff
/if (${Me.PctMana}<20 || ${Me.Moving}) /return
/if (!${Me.Buff[${focus}].ID} && !${Me.Moving}) {
        /memorize ${focus} gem${buffGem}
        /casting ${focus} gem${buffGem} -maxtries|3
        /g Buffing << ${focus} >> on the party
        /return
}
/if (!${Me.Buff[${sense}].ID} && !${Me.Moving}) {
        /memorize ${sense} gem${buffGem}
        /casting ${sense} gem${buffGem} -maxtries|3
        /g Buffing << ${sense} >> on the party
        /return
}
/if (!${Me.Buff[${might}].ID} && !${Me.Moving}) {
        /memorize ${might} gem${buffGem}
        /casting ${might} gem${buffGem} -maxtries|3
        /g Buffing << ${might} >> on the party
        /return
}
/if (!${Me.Buff[${regen}].ID} && !${Me.Moving}) {
        /memorize ${regen} gem${buffGem}
        /casting ${regen} gem${buffGem} -maxtries|3
        /g Buffing << ${regen} >> on the party
        /return
}
/return


Sub Selfies
/if (${Me.Moving}) /return
/declare maelins                        local "Maelin's Meditation"
/if (${circletTimer}==0) {
        /declare x int local
        /for x 1 to ${NetBots.Counts}
                /if ( !${NetBots[${tank}].Attacking} && !${NetBots[${NBToon${x}}].Buff.Find[Aura of Quellious].ID} && ${Spawn[${NetBots[${NBToon${x}}]}].Distance}<90 && ${NetBots[${NBToon${x}}].FreeBuffSlots}>=1 && ${NetBots[${NBToon${x}}].InGroup} && ${Select[${NetBots[${NBToon${x}}].Class.ShortName},SHM,CLR,MAG,BST]} ) {
        /casting "Circlet of the Dragon" item -targetid|${Me.ID}
        /varset circletTimer 1m
        /return
        }
}
/if (!${Me.Buff[${maelins}].ID} && ${Me.FreeBuffSlots}>=1) {
        /casting "Chaotic Embroidered Black Cape" item -targetid|${Me.ID}
        /return
}
/return

Sub Pet
/if (${Me.PctMana}<40) /return
/if (!${Me.Pet.ID}) /casting ${pet} ${miscGem} -maxtries|3
/return


Sub Canni_Check
/if (${Me.Casting.ID} || ${Me.Moving}) /return
/if (${Me.CurrentHPs} > 7000 && ${Me.PctMana} < 0.80 && ${Me.AltAbilityReady[Cannibalization]}) {
        /casting "Cannibalization" alt
        /g I now have ${Me.PctMana}% Mana
        /return
}  
/if (${Me.CurrentHPs} > 4000 && ${Me.PctMana} < 0.50 && ${Cast.Ready[Spritual Sacrifice Rk. I]}) {
        /casting "Spritual Sacrifice Rk. I" gem${canniGem}
        /g I now have ${Me.PctMana}% Mana
        /return
}
/if ( ${Me.PctMana}<=18 && ${orbTimer}==0 ) {
        /g Need, mana, using Orb of Spirits, 10 second cast!
        /casting "Orb of Spirits" item 15s
        /varset orbTimer 5m
        /g I now have ${Me.PctMana}% Mana
        /return
}
/return


|Chat Trigger events check #chat {Setting
Sub Event_Chat(string ChatType,string ChatSender,string ChatText)
/if (${Select[${ChatText},tank]}) {
    /varset tank ${ChatSender.Right[-2].Left[-1]}
    /echo Main Assist Changed to ${tank}
    }
/if (${Select[${ChatText},hot]}) {
    /target ${ChatSender.Right[-2].Left[-1]}
    /casting ${hot} gem${hotGem} -maxtries|4
    /echo Casting ${hot} on ${Target.CleanName}
    }
/if (${Select[${ChatText},sow]}) {
        /casting ${sow} gem${buffGem} -maxtries|3
        /g Buffing << ${sow} >> on the party
        }
/return

|Events
Sub Event_Exp
        /if ( !${Spawn[${slowTarget}]} ) {
                /varset slowTarget 0
                /varset slowTimer 0s
        }
        /if ( !${Spawn[${crippleTarget}]} ) {
                /varset crippleTarget 0
                /varset crippleTimer 0s
        }
        if ( !${Spawn[${dotTarget}]} ) {
                /varset dotTarget 0
                /varset dotTimer 0s
        }
       
Sub Event_SlowOff
        /if ( !${Spawn[${slowTarget}]} ) {
                /varset slowTarget 0
                /varset slowTimer 0s
        }
       
Sub Event_CrippleOff
        /if ( !${Spawn[${crippleTarget}]} ) {
                /varset crippleTarget 0
                /varset crippleTimer 0s
        }
       
Sub Event_DoTOff
        /if ( !${Spawn[${dotTarget}]} ) {
                /varset dotTarget 0
                /varset dotTimer 0s
        }
       
Sub Event_ImHit
        /g I'm under attack!
/return

Sub Event_Zoned
        /delay 40s
/return

Sub Event_EnrageOn
        /varset Enraged TRUE
        /varset enrageTimer 10s
/return

Sub Event_EnrageOff
        /varset Enraged FALSE
/return

Sub Event_Hungry
        /if (${NetBots[${tank}].Attacking}) /return
        /echo I am Hungry
        /if (${Verbose}) /gsay Summoning Food, hold pulls for 30 secs.
        /declare i int local
        /for i 1 to 5
                /casting ${food} gem${miscGem} ${CastRetryTime}
                /delay 1
                /autoinventory
                /delay 1
                /next i
        /if (${Verbose}) /gsay Ready for pulls again.
/return

Sub Event_Thirsty
        /if (${NetBots[${tank}].Attacking}) /return
        /echo I am Thirsty
        /if (${Verbose}) /gsay Summoning Drink, hold pulls for 30 secs.
        /declare i int local
        /for i 1 to 5
                /casting ${drink} gem${miscGem} ${CastRetryTime}
                /delay 1
                /autoinventory
                /delay 1
                /next i
        /if (${Verbose}) /gsay Ready for pulls again.
/return

Sub Event_ImDead
/end


Any critique would be welcome.

I'm especially curious on what people with more knowledge/experience think of the way I handle target tracking for my debuff subs.
Wed Feb 26, 2014 1:13 am
Debuff handling
I am little confused as to why you use chat events to assist with your debuff handling. It appears to do more harm than good. Since you play on THF and twincasting is prominent in the later tiers, I recommend getting away from chat events to handle your debuffs.

Here is why:
If you cast a slow and proc a twincast on that cast, your chat will show that the first one wore off (even though it was immediately replaced) and thus your macro will interpret it as the debuff wearing off naturally, attempting to cast it again.

I, like you, use timers to handle debuffs and I can recommend using them exclusively. Is there anything I'm missing with the way you use chat events for debuffs?

Otherwise, your macro looks great and somewhat similar to mine.
Sun Mar 23, 2014 3:14 pm
No such 'string' member 'shortname'
Attempting to get this to work, but I get the message No such 'string' member 'shortname' and massive spam when I turn I turn on the macro. I'm sure it's something really simple that I need to edit. Any guidance please?
Wed Nov 05, 2014 10:00 pm
are these echos the messages of spam?

Macro
More +

/if (${Me.Class.ShortName.NotEqual[SHM]}) {
    /echo Sorry you are not a Shaman.
    /echo I'm afraid this macro to PC relationship just isn't going to work out.
    /echo I do hope we can still be friends though.
    /end
}
Thu Nov 06, 2014 12:21 pm
Listen to This Guy
Spam..
Thanks for the response!

I get the message below over and over, and spams my group chat that talisman of wunshi is being cast.



No mention of the echoes shown above.
Thu Nov 06, 2014 4:08 pm
The macro is balking at...

${Select[${NetBots[${NBToon${x}}].Class.ShortName},SHM,CLR,MAG,BST]}

And a similar line. But I'm not sure why.

Try some troubleshooting. Please type out each line and post the results for each line.

/echo ${NetBots[${Me.Name}].Class}
/echo ${NetBots[${Me.Name}].Class.Name}
/echo ${NetBots[${Me.Name}].Class.ShortName}
/echo ${NetBots[${Me.Name}].Class.ID}
/echo ${NetBots[${Me.Name}].Class.Left[3]}
Thu Nov 06, 2014 6:44 pm
Senior Project Member
Test
Thanks Grumble, here are the results.

/echo ${NetBots[${Me.Name}].Class}

[MQ2] NULL

/echo ${NetBots[${Me.Name}].Class.Name}

No such 'string' member 'shortname'
[MQ2] NULL


/echo ${NetBots[${Me.Name}].Class.ShortName}

No such 'string' member 'shortname'
[MQ2] NULL


/echo ${NetBots[${Me.Name}].Class.ID}

No such 'string' member 'ID'
[MQ2] NULL


/echo ${NetBots[${Me.Name}].Class.Left[3]}

[MQ2] NUL
Thu Nov 06, 2014 7:38 pm
/bcaa //netbots on
/bcaa //netbots send on
/bcaa //netbots grab on

Make sure all your characters are setup for netbots. I created a new character and didn't properly enable netbots. I received the same results you did. I then fully enabled netbots and received the expected results.
Thu Nov 06, 2014 8:44 pm
Senior Project Member
Thanks
Thanks Grumble. I should have picked up on that one...

At least gets it running, think I have a few tweaks to make to it, but I think I can figure the rest out.
Thu Nov 06, 2014 8:52 pm
I'm trying to use this with some mods but its not healing. it will do everything but heal. I'm using the rof2 off the site here.... any help?


I did change the heal spell and the heal at %
Fri Nov 16, 2018 6:33 am
I’m at work so I can’t run it but I’m suspicious of the ${x} in the heal routines. Maybe I’m misreading it but I don’t see how those would have a value

I’d suggest peppering the heal routine with a bunch of /echo statements between each line, including “/echo ${x}” and maybe some other variables to see where it’s skipping out.
Fri Nov 16, 2018 9:29 am
Project Lead
I have put a few echo in and it never went in the line where it’s grabing the % I to am at work. When I get home I’ll do a few more of the ${x} isn’t correct what should I change it to?
Fri Nov 16, 2018 1:19 pm
the ${x} appears to be getting the value in sub start1 but when i try to echo everything comes back a null after the start up
Fri Nov 16, 2018 4:31 pm
I’m not 100% sure what their intent was but this section in the start loops through net it’s and loads their names into the NBToons variables

/for x 1 to ${NetBots.Counts}
/varset NBToon${x} ${NetBots.Client.Token[${x}, ]}
/echo ${NetBots[${NBToon${x}}].Name}
/next x


I’ve never really been a macro writer, maybe one or two small ones a decade ago but I’ve never seen this method before.

Usually that loop would be in the heal routine itself... just poop through each netbot and heal inside the loop. It’s also limited to 6 characters it looks like, NBToons 1-6. If you wanted to just heal your group it would probably work better to loop through the group TLO and then feed those names into the methods TLO to get a more accurate hit point value.

If this is your first go at working with macros I’d suggest making your own simple one that just does 1 thing, like heal everyone and that’s it. That relatively simple exercise hits all the fundementals, variables, loops, conditionals. And it does it without overwhelming. The basic design would be a sub main with the main loop inside. That main loop calls the heal sub. The heal sub has a /for loop that loops through each group/netbots member and heals if their below a percent. One step at a time, e.g., nake the sub main with loop but it just has an echo in it at first. You’d expect to see an infinite spam from that. Then add the heal sub and move the echo there... etc.

Even if you intend on using someone else’s macro it’s a great exercise.

This macro looks like it might be a little specific to the authors setup, but it has great examples of typical design that you could borrow from.
Fri Nov 16, 2018 7:05 pm
Project Lead
Here’s a good submain with loop example, the third post is a good example of a chat event.

http://mqemulator.net/forum2/viewtopic.php?t=63
Fri Nov 16, 2018 7:09 pm
Project Lead
Goto page 1, 2  Next Public Macros my shaman macro
Reply