Modbot 4.0

ModBot - A Universal Bot Macro

  • Caster
  • Melee
  • Shrouds & MM's
  • Mez, Charm, Heal, Melee, etc
  • All classes supported
  • Now supports mixed groups of MQ2 and Non-MQ2 users/players
  • ModBot is under constant improvement effort, open to suggestions / additions / adjustments, etc
General Note on Wiki Entries - Release ZIP packages - While the majority of entries in the Wiki apply to ModBot in general, there are always some entries that apply to changes, additional functionality, new commands, etc. Please keep this note in the back of your mind as you work with the Wiki - if you come across a command, etc. that will just not seem to work for you (and you have already thoroughly researched it, checked syntax, re-checked syntax, etc.), please take a moment to check your version of the module that it applies to - you may need to update.

How To

To use ModBot
  1. 1.
    Extract and place all included files from zip (all .mac and .inc files) into your MQ2 macro directory.
  2. 2.
    From inside EQ, type /macro modbot (e.g. /macro modbot OR /macro modbot raidmode).
    This will build, if it doesn't exist, your MB_.ini file. Optional entries will make a
    MB__.ini. Being shrouded on startup without using an option will use your race and class for the
    creation of an MB__.ini file.
  3. 3.
    From inside EQ, end the macro by typing /endmac
  4. 4.
    Tab out of EQ, locate your new MB_.ini file in your macro directory, and open it. You can use the editor
    of your choice, but Notepad will work just fine.
  5. 5.
    For every component of the macro you want to use, increase the respective "count", if you want two heals, set
    AHCount=2, if you want 2 debuffs, set ADCount=2, etc. After you have set your counts, save and close the INI file.
  6. 6.
    Tab back over into EQ and restart the macro (/macro modbot). This will now populate your INI file based on the count
    entries that you made in the previous step
  7. 7.
    End the macro again by typing /endmac
  8. 8.
    Open the INI file once more and "tweak" the newly created entries to fit your needs. When you are done, save and
    close the INI file.
  9. 9.
    Tab back over to EQ and restart the macro.
Your bot should now be just that, a BOT and will listen to your every command (assuming you are the master).
For examples of complete class ModBot INI files, please go to the example INI page.
Please Note!! One thing to keep in mind throughout the configuration of the ModBot INI file: keep your most critical and most used spells, activities, etc., first in their respective INI sections. You don't want your mez spell as Debuff number 20, you don't want slow as debuff 10, you don't want a CBT based buff as buff 23, and you don't want CH as heal 1 (you want your most desperate heal as heal 1), etc. Configure your heals, buffs, debuffs, etc. in a highest priority first order.

Reference to Understanding the ModBot WiKi

- Replace this with the respective descriptor Example 1 -_is luclin_bobby Example 2 -is bobby
(text) - These are "comments" and should be removed when saving the respective file Example 1 - Send=1 (If set to 1 it will send netbots information over the network) This text: *``\(If`````set to 1 it will send netbots information over the network)``\*`should NOT appear in the INI file` ````` \[text\] - This is to show different options or series of options Example 1 - /bc cast[, %t, grp,, etc]``

Plugin Requirements & Examples

I suggest you have a good understanding of how to configure each of these plugins. Any misconfiguration can have an adverse affect on the performance of ModBot
Prefered versions are found within the file that can be found Here (Our thanks go out to the orignal makers and maintainers of these plugins)
MQ2AdvPath (Wiki page) MQ2Cast (Wiki Page) MQ2eqbc (Wiki Page) MQ2Exchange (Wiki Page) MQ2Melee (Wiki Page) MQ2MoveUtils (Wiki Page) MQ2NetBots (Wiki Page) MQ2Twist (Wiki Page) and a modified version of MQ2Main\MQ2Utilities Optional: Mq2Banolier (Wiki Page)
  • If you plan to use item swapping and spell foci items, you may need to configure "sets"

Plugin INI Examples

Example _.INI for MQ2NetBots, MQ2Cast, MQ2Melee:
[MQ2NetBots] Stat=1 Send=1 Grab=1 [MQ2Cast(SpellSet)] ModBot2=1111|1 12345|2 22342|3 43241|4 42342|5 23423|6 12532|7 22334|8 33221|9 11225|10 55443|11 22337|12 88559 [MQ2Melee] enrage=1 facing=1 infuriate=1 jugular=0 petassist=1 petengagehps=94 petrange=45 plugin=1 resume=75 stickrange=75 version=8.000
Example MQ2MoveUtils.INI for MQ2MoveUtils:
[Defaults] AutoPause=on BreakOnWarp=on BreakDist=250.0 BreakOnGate=on Verbosity=1 stuckDist=0.8 turnDirection=10.0 stuckCheck=5 StuckLogic=off
Example MQ2Bandolier_.ini for MQ2Bandolier:
[ThisSet] 17=12345 13=23456 14=34567

ModBot HUD

[_] Last=ModBotHUD SkipParse=7 CheckINI=100 UpdateInBackGround=on ClassHUD=on ZoneHUD=on
[ModBotHUD] Target= 3,060,210,225,225,225,${If[${Target.ID},Dis:${Int[${Target.Distance}]}-Lvl:${Target.Level}-${Target.Class.ShortName}-${Target.PctHPs}%,]} Name1= 3,060,220,240,240,000,${If[${NetBots.Counts}>=1,${NetBots.Client.Arg[1]} ${NetBots[${NetBots.Client.Arg[1]}].Level} XP:${Int[${NetBots[${NetBots.Client.Arg[1]}].PctExp}]} AXP:${Int[${NetBots[${NetBots.Client.Arg[1]}].PctAAExp}]},NA]} HP1= 3,060,230,255,100,100,HP:${If[${NetBots.Counts}>=1,${NetBots[${NetBots.Client.Arg[1]}].PctHPs},]}% Mana1= 3,105,230,100,100,255,M:${If[${NetBots.Counts}>=1,${NetBots[${NetBots.Client.Arg[1]}].PctMana},]}% End1= 3,145,230,255,234,008,E:${If[${NetBots.Counts}>=1,${NetBots[${NetBots.Client.Arg[1]}].PctEndurance},]}% Pet1= 3,185,230,255,255,255,Pet:${If[${NetBots.Counts}>=1 && ${NetBots[${NetBots.Client.Arg[1]}].PetID}>0,${NetBots[${NetBots.Client.Arg[1]}].PetHP},]}% Name2= 3,060,240,240,240,000,${If[${NetBots.Counts}>=2,${NetBots.Client.Arg[2]} ${NetBots[${NetBots.Client.Arg[2]}].Level} XP:${Int[${NetBots[${NetBots.Client.Arg[2]}].PctExp}]} AXP:${Int[${NetBots[${NetBots.Client.Arg[2]}].PctAAExp}]},NA]} HP2= 3,060,250,255,100,100,HP:${If[${NetBots.Counts}>=2,${NetBots[${NetBots.Client.Arg[2]}].PctHPs},]}% Mana2= 3,105,250,100,100,255,M:${If[${NetBots.Counts}>=2,${NetBots[${NetBots.Client.Arg[2]}].PctMana},]}% End2= 3,145,250,255,234,008,E:${If[${NetBots.Counts}>=2,${NetBots[${NetBots.Client.Arg[2]}].PctEndurance},]}% Pet2= 3,185,250,255,255,255,Pet:${If[${NetBots.Counts}>=2 && ${NetBots[${NetBots.Client.Arg[2]}].PetID}>0,${NetBots[${NetBots.Client.Arg[2]}].PetHP},]}% Name3= 3,060,260,240,240,000,${If[${NetBots.Counts}>=3,${NetBots.Client.Arg[3]} ${NetBots[${NetBots.Client.Arg[3]}].Level} XP:${Int[${NetBots[${NetBots.Client.Arg[3]}].PctExp}]} AXP:${Int[${NetBots[${NetBots.Client.Arg[3]}].PctAAExp}]},NA]} HP3= 3,060,270,255,100,100,HP:${If[${NetBots.Counts}>=3,${NetBots[${NetBots.Client.Arg[3]}].PctHPs},]}% Mana3= 3,105,270,100,100,255,M:${If[${NetBots.Counts}>=3,${NetBots[${NetBots.Client.Arg[3]}].PctMana},]}% End3= 3,145,270,255,234,008,E:${If[${NetBots.Counts}>=3,${NetBots[${NetBots.Client.Arg[3]}].PctEndurance},]}% Pet3= 3,185,270,255,255,255,Pet:${If[${NetBots.Counts}>=3 && ${NetBots[${NetBots.Client.Arg[3]}].PetID}>0,${NetBots[${NetBots.Client.Arg[3]}].PetHP},]}% Name4= 3,060,280,240,240,000,${If[${NetBots.Counts}>=4,${NetBots.Client.Arg[4]} ${NetBots[${NetBots.Client.Arg[4]}].Level} XP:${Int[${NetBots[${NetBots.Client.Arg[4]}].PctExp}]} AXP:${Int[${NetBots[${NetBots.Client.Arg[4]}].PctAAExp}]},NA]} HP4= 3,060,290,255,100,100,HP:${If[${NetBots.Counts}>=4,${NetBots[${NetBots.Client.Arg[4]}].PctHPs},]}% Mana4= 3,105,290,100,100,255,M:${If[${NetBots.Counts}>=4,${NetBots[${NetBots.Client.Arg[4]}].PctMana},]}% End4= 3,145,290,255,234,008,E:${If[${NetBots.Counts}>=4,${NetBots[${NetBots.Client.Arg[4]}].PctEndurance},]}% Pet4= 3,185,290,255,255,255,Pet:${If[${NetBots.Counts}>=4 && ${NetBots[${NetBots.Client.Arg[4]}].PetID}>0,${NetBots[${NetBots.Client.Arg[4]}].PetHP},]}% Name5= 3,060,300,240,240,000,${If[${NetBots.Counts}>=5,${NetBots.Client.Arg[5]} ${NetBots[${NetBots.Client.Arg[5]}].Level} XP:${Int[${NetBots[${NetBots.Client.Arg[5]}].PctExp}]} AXP:${Int[${NetBots[${NetBots.Client.Arg[5]}].PctAAExp}]},NA]} HP5= 3,060,310,255,100,100,HP:${If[${NetBots.Counts}>=5,${NetBots[${NetBots.Client.Arg[5]}].PctHPs},]}% Mana5= 3,105,310,100,100,255,M:${If[${NetBots.Counts}>=5,${NetBots[${NetBots.Client.Arg[5]}].PctMana},]}% End5= 3,145,310,255,234,008,E:${If[${NetBots.Counts}>=5,${NetBots[${NetBots.Client.Arg[5]}].PctEndurance},]}% Pet5= 3,185,310,255,255,255,Pet:${If[${NetBots.Counts}>=5 && ${NetBots[${NetBots.Client.Arg[5]}].PetID}>0,${NetBots[${NetBots.Client.Arg[5]}].PetHP},]}% Name6= 3,060,320,240,240,000,${If[${NetBots.Counts}>=6,${NetBots.Client.Arg[6]} ${NetBots[${NetBots.Client.Arg[6]}].Level} XP:${Int[${NetBots[${NetBots.Client.Arg[6]}].PctExp}]} AXP:${Int[${NetBots[${NetBots.Client.Arg[6]}].PctAAExp}]},NA]} HP6= 3,060,330,255,100,100,HP:${If[${NetBots.Counts}>=6,${NetBots[${NetBots.Client.Arg[6]}].PctHPs},]}% Mana6= 3,105,330,100,100,255,M:${If[${NetBots.Counts}>=6,${NetBots[${NetBots.Client.Arg[6]}].PctMana},]}% End6= 3,145,330,255,234,008,E:${If[${NetBots.Counts}>=6,${NetBots[${NetBots.Client.Arg[6]}].PctEndurance},]}% Pet6= 3,185,330,255,255,255,Pet:${If[${NetBots.Counts}>=6 && ${NetBots[${NetBots.Client.Arg[6]}].PetID}>0,${NetBots[${NetBots.Client.Arg[6]}].PetHP},]}%

ModBot Commands & Syntax

ModBot commands are executed in a few different ways:
  • /bc
  • /bc
  • /bct
  • /bct
Are probably most common but check out the EQBC Forum thread for more methods / features.
You can also configure an alias so you can run modbot on the character you control and execute ModBot commands.
To create the alias you must run this from the EQ prompt:
  • /alias /mb /echo mb-
Or change the LoadAlias variable in [Settings] section from 0 to 1 if you've lost the alias in your Macroquest.ini
With this alias you can tell your bot locally what to do:
  • /mb makecamp
  • /mb buffup
  • /mb letsroll
  • /mb

Command Reference

Section Updated: June 7, 2009
  • abort (Interrupts any cast in progress, Sets - DoHeals, DoDebuffs & DoMelee FALSE and follows the sender
    closely, usefull when you want to RUN away)
  • addbuff "\|\" ABSpellAlias ABTarType (Adds a new buff entry to the
    character's INI file.)
    • You must restart the ModBot macro after executing the addbuff command in order to complete the adding of the
      buff entry.
    • The Spellname, etc. section can be entered directly (e.g. */mb addbuff "Bone Mask of the Ancient Iksar|item"
      iksar self) or, if adding a clicky, by holding the item on your cursor (e.g. /mb addbuff
      "${Cursor.Name}|item" iksar self*). Please note that the quotes around the spellname|gem section are required.
    • ABTarType will accept multiple targets if quotes are used (e.g. */mb addbuff "Levitiation|gem1" levi "war mnk
    • addbuff execution will add ABGem, ABSpell, ABSpellAlias and ABTarType entries to the characters INI file. The
      remaining buff lines (ABSpellFociX, ABDurModX, etc.) will be added once you restart the ModBot macro (the array
      size change (ABCount) will also not increment until after re-start). For example, using these Bonemask example
      command, the following entires will be added to the INI file (where "X" is equal to whatever the next numbered
      entry is in your advbuff section):
ABSpellX=Bone Mask of the Ancient Iksar
  • attack (Sets DoMelee TRUE and forces bot to attack the TankName's target)
  • attack (Sets DoMelee TRUE and forces bot to attack the target)
    * Note: OffTank must be TRUE to use this option (I may remove this requirement though TBD)
    * Example 1 - /bc attack badguy
    * Example 2 = /bc attack badguy 100 20
  • buffup (This will set DoBuffs & DoEvents TRUE & DoHeals FALSE)
  • campout (Performs a /camp desktop and ends the macro)
  • cast <on/off> (This will disable or enable the spell associated with this alias)
  • cast [<spawnname/id> \<%t> ] [<spawnname/id> \<%t> ] (infinte)
    • If the spell is detrimental, CAST targets the requester's target.
    • If the spell is beneficial, it targets the sender or, if grp is present, it casts buff on group members.
    • If %t is present, it targets the requester's target.
    • The cast command will ignore INI settings for things like minmana, maxmana, recasts, buff debuff counters, etc.
      This command is mainly used for manual, "one off" type casts.
Example 1 - /bc cast buffhp grp haste bob haste jane dmgshld bob Example 2 - /bc cast dmgshld bob nuke tash Example 3 - /bc cast slow "nasty add"
  • doafk [on, true, off, false, ]
  • dobuffbot [on, true, off, false, ] (Places the bot in "BuffBot Mode".
    Currently once set to on or true, it will NOT turn off and you MUST restart the macro to "quit" this mode. It will
    cast any spell alias on the requesting target. The requester must be a "master". Example: /t buffhp
  • dobuffs [on, true, off, false, ]
  • docombines (Toggle that turns docombines on/off (default off). Docombines will check for an open tradeskill
    window with an enabled combine button (you have to select recipe), and will click the button. Upon a successful
    combine, Modbot's built in cursor handling takes over. Useful for tank to summon more arrows during fight. An
    associated event will fire and toggle docombines to FALSE when you run out of recipe components.)
  • docures [on, true, off, false, ]
  • dodebuffs [on, true, off, false, ]
  • doevents [on, true, off, false, ]
  • doforage [on, true, off, false, ]
  • dofw [on, true, off, false, ]
  • doheals [on, true, off, false, ]
  • dolist (Used to /bc out the existing "Do" status)
  • doloot [on, true, off, false, ]
  • domelee [on, true, off, false, ]
  • domount [on, true, off, false, ] (To cast a mount or not, used in conjunction
    with MountCast INI entry)
  • dopet [on, true, off, false, ] (To cast a pet or not, used in conjunction
    with PetCast INI entry)
  • dopull [on, true, off, false, ] (not fully production yet)
  • dopull <on/off/path> (Self explanatory. See the instructions on forums.)
  • doquest [on,true,off,false] (Default is TRUE. If set to FALSE, your looter will ignore items marked "quest"
    and still loot other items.)
    • Can be used to add quest items to your loot.ini file. For example, while holding an item on cursor, */mb doquest
      4 Hair of the Dog* will set the item you're holding to "=Quest|4|Hair of the Dog|" in loot.ini.
    • Can also be used in conjunction with the QuestOnly variable (found in the setting section of the loot.ini
      file). If both doquest and QuestOnly are set to TRUE, your toon will only loot quest items. Also note that if
      QuestOnly is set to TRUE and doquest is set to FALSE, your toon will only loot cash off of mobs.
    • Please see the modloot section found
      here for more information on the
      loot.ini file.
  • dosit [on, true, off, false, ]
  • dosongs [on, true, off, false, ] (used for bards only)
  • dotells [on, true, off, false, ] (Toggles a beep when tells are recieved from
    non-netbots toons. Useful for tells in background sessions)
  • exclude \ (Adds to alert list, to save list you must use the "save" option, otherwise
    it will not be written to the INI file)
    • The exclude list is dynamic and will only exclude mobs that are present in the zone AND that are on the list.
    • If you want to force an exclude you must edit the INI file and place a "#" in front of the mobs name (e.g.
      ExcludeList=a dusty barrel|a dark coffin|#a bitten victim|a hollow tree|, this will always force "a bitten
      victim" to be on the exclude list)
    • Use the following commands from a character to add mobs to the exclude list (Kroak suggested just tossing this
      in a two-line hotkey):
      • /bcaa //mb exclude ${Target.CleanName} Will write the exclusion to a string that is checked through the
        debuff loop
      • /bcaa //mb exclude save Will write the exclusion in the mbcommon.ini and that exclusion includes the zone
        id, so mobs of the same name in a different zone are NOT excluded. You shouldn't have to re-run the macro
        after an exclude but if you do this in the midst of comabat or something, while mobs are near, it may not
        "take" as quickly.
    • For mob names with spaces in them, simply enter the name without any quotations. For example:
      • ''/bcaa //mb exclude a small bat
    • See the Include command (found below) to temporarily remove a mob from the alert list
  • follow (Follows the sender or )
  • follow close (Follows the sender within 3 steps, very close)
  • give (Calls the sub GiveCheck to hand an item to a toon or NPC.)
    • ItemCount is optional and will default to 1.
    • The give command can be used in conjunction with categories that have been defined in the loot.ini. For
      instance, if you have items marked 'SpellScroll' in your loot.ini, and the Category variable has "SpellScroll"
      included, you can issue the give command as follows: /mb give Bob SpellScroll TRUE. The result will be that
      all items on your toon that are marked with that category (SpellScroll) in your loot.ini will be handed to Bob.)
  • goto (Bot will move to the loc given)
  • handin (Target an NPC or PC, get one item on your cursor, and all of that item will be handed to them and trade
    or give button pressed.)
  • holdup (This will set DoBuffs,DoDebuffs,DoEvents,DoMelee all to FALSE)
  • include (Removes from alert list, this will not save to the INI file, see exclude save)
  • letsroll (This will set DoBuffs,DoHeals,DoMelee,DoEvents,DoDebuffs TRUE)
  • makecamp (This will Makecamp at existing location. Use /makecamp off or /mb stop to toggle makecamp
    functionality off)
  • mana (Used to /bc out the existing Mana % of the bot)
  • mbpause or mbp [on, true, off, false, ] (Used to pause or unpause the
  • mbwayplay (Used to playback previously recorded paths / waypoints, through zones, doors, chaining
    paths, etc.)
  • mbwayrec (Used to record a path / waypoint.)
    • Once started, ducking for each location will add a waypoint to the path.
    • Sitting stops path recording and returns to modbot functions.
    • To add doors, chains, pull locations, etc. you'll need to edit the MBWayPlay.INI file
    • Further information about mbwayplay and mbwayrec (along with examples) can be found
      here in the wiki.
  • offtank <on/off> (Toggles offtanking for dealing with adds.)
  • script (This will allow you to run custom commands while the macro is running, or
    combine series of commands, see script examples in manual / rev notes)
  • sell (You must be within range of a merchant in order to function, it will sell loot marked as
    "=SELL" in the loot.ini file)
  • sell (With NPC targeted will attempt to sell all items marked "sell" in your lootIni file to
    target. Otherwise optional target name can be supplied.)
  • setinivar (This will find and change any setting in your .ini)
    • Note that this command will have trouble with script settings if you have more than one (it will set the first
      C1= or whatever that it comes to.
    • Variables changed in the .ini are /varset with the macro running
    • Spells, gems, etc. will not be set unless you use the array correctly for . In other words,
      ADGem[1] is not the same as ADGem1:
      • Use ADGem[1] and this will set the ADGem1 .ini setting and varset the change to memory.
      • Use ADGem1 and it will only change the .ini.
    • This still has a problem finding variables in very long sections. If /echo ${Ini[${IniFile},
      ]} is over the MAX_STRING value - (You go LD typing that if it is). - Stuff like ABGem[20] is almost never found. (Still working on that.)
For example, Ligament Slice for a rogue was set up from in-game with these commands typed in to the MQ window (and the rogue was able to put it immediately to use):
/mb setinivar ADCount 4
(restart macro - had 0 count before)
/mb setinivar ADGem[1] alt
/mb setinivar ADSpell[1] Ligament Slice
/mb setinivar ADTarBegHP[1] 40
/mb setinivar ADTarCnt[1] 1
/mb setinivar ADTarType[1] 1
/mb setinivar ADAnnounce[1] /bc
/mb setinivar ADSpellAlias[1] snare
  • sing (Will sing this song and add the respective gem number to the Twist.List, it attempts to use
    detrimental as the qualifier to add it to combat songs, or rest songs)
  • stop (Will stop following and/or stop in place)
  • sung (Will remove this song from the respective Twist.List, it attempts to use detrimental as the
    qualifier to remove it from combat songs, or rest songs)

ModBot in game usage and commands

Example commands: /bc Bob follow me [This tells bob and only bob to follow me] /bc cast dd [this tells every bot to cast the spell alias dd] /bc shamandude cast buffsta grp buffhp focus grp buffhp %T [buffsta on the group, buffhp on the requester, focus on the group, buffhp on requesters target] /bc necroguy makecamp [this tells "necroguy" to makecamp] /bc campout [tells all bots to camp to desktop] /bc exclude ${Target.CleanName} [tells all bots to add your target to the exclude / ignore list, toons will not attack any spawn with that name.] /bc clericname dobuffs on [tells the cleric to set DoBuffs to true and will then begin buffing group] /bc pallyguy cast bmb %t buffhp grp [bmb on requesters target, buffhp on the group]
Typical commands sequence for an EXP group: /bc letsroll /bc makecamp You then begin to pull mobs and they will react accordingly.
Mobile Camp Example: /bc follow /bc buffup [once ready zone into the instance] /bc stop /bc letsroll [clear first room lets say] /bc follow [move to next room] /bc makecamp [etc, repeat]
Example movement options with or without invis /bc mbp on /bc follow
Make a EQBC Channel and do things like (using this technique you don't even have to be a master) /bct mycoolchannelname //mb letsroll /bct mycoolchannelname //mb campout

ModBot INI Settings

PreFace Notes

  • Spell Alias's must be unique across all alias's
    Obsolete? 06272011 -Changed - ?
"cast" command usage now allows for multiple aliases. If you have several spells with the same alias, using /bc castwill now cast all spells marked. Example, for shaman you can have Fo7, Talisman of Boar, Talisman of Wrulan, Talisman of Tribunal, ect.. all marked with "fullgroup". "/mb cast fullgroup" will cast each spell in the order they are found in the .ini file. Buffing -```Group buffs can now be seperated to different classes, and will allow keeping the spell on netbots members in seperate groups from the caster with the inclusion of keyword`` `"raid". Example -` Code: [AB2]`` `ABGem=8` `ABSpell=Focus of the Seventh` `ABSpellFoci=` `ABDurMod=50` `ABSpellAlias=fo7|grpfocus|fullgroup` `ABAnnounce=` `ABSpellMinMana=20` `ABTarCnt=2` `ABTarType=war shd pal rng mnk rog brd bst ber shm dru wiz mag enc nec raid` `ABRecast=FALSE` `ABSpellIcon=` `ABPreCondition=TRUE` ````` Note from the above example that clr is not included in the TarType.. My clerics have the spell blocked. Attempting to cast on them will cause a chain loop ofcasting until the cleric gets self buff on that doesn't "stack" with focus. - so watch spell stacking and make sure to set your toons accordingly.````` Old format of "self" will also work with no change if you don't want to buff other groups with the spell.````` `Commands -` `Tell commands will now check buff aliases, and don't need "cast" to ask for buffs.. "/tellfullgroup" from a non-master toon will make the shaman cast` `every spell with that alias on the sender of the tell. Masters still require use of "cast". - This does allow guildies or whoever else knows your aliases to get` `buffs easily.` `/say is not affected and is still not enabled for modbot.` ````` Added "docommand" -```Master toons that aren't in netbots can now directly command toons. "/telldocommand /sit" will make the receiving toon sit, or execute any command after the "docommand" keyword. - Word of caution - You can cause macro errors with this if you aren't careful. The command sent is executed directly with /docommand in the macro. A tell received of "/telldocommand /sit" will locally execute "/docommand /sit" Watch extra characters and or brackets.. - Because of the nature of this one, the commanding toon MUST be listed in MasterList.
  • You should be familiar or at least capable of making MQ2Bandolier sets as they are used by MQ2Cast for "foci"
  • Please treat the Buff, Debuff, Event, Heal INI sections as a first in first out (FIFO). Highest priority to lowest
    priority, you don't want mez or slow as AD12 but as AD1. You don't want AH1 as Complete Heal, you want AH1 to be
    DA/DB (those are examples, use common sense)
  • If you want to add some visual zip to your announcements (things are easy to miss in /bc..), you can use color
    coding and the like in any of your Announce settings. For example, *Announce=/bc [+r+]Group Mez[+x+] \<\<[+y+]
    %t [+x+]>> with[+g+] %s [+x+]* will produce a line in the MQ chat window that is MUCH easier to see than the
    regular fonts.
  • Rk. XX Usage - Heals, buffs, debuffs, and cures have code added to check your book and find the correct version of
    the spell you're using on startup of modbot. Rk. II and Rk. III are not needed, but only for these sections. If you
    upgrade a normal spell in these sections to Rk. II or III, restarting the macro will make the new spell work. Please
    note that this does not apply to discs, potionbelt, abilities, or PetCast at this time (meaning you must include the
    Rk. XX in the spell name for these types).
  • Setting spell duration modifications (AHDurMod, ADDurMod, ABDurMod, AEDurMod) - Use the following formula to
    determine what number to set your DurMod at:
${Spell[X].Duration} * (${AHDurModX}+${Spell[X].Duration}) == timer duration.
So if you want a 25% extension on the timer, set durmod to 25 to make ${Spell[X].Duration} * 1.25 = timer. Modbot shouldn't re-cast if timer is still running.


  • tnt = TankName Target
  • grp = group

Settings Section [Settings]

  • DoMelee=TRUE|FALSE
  • DoHeals=TRUE|FALSE
  • DoBuffs=TRUE|FALSE
  • DoDebuffs=TRUE|FALSE
  • DoEvents=TRUE|FALSE
  • DoCures=TRUE|FALSE
    • Must have a buff entry for creating a pet (in the AdvBuff section - see note for ABTarType). Also see note for
      Cleric pets under PetCast below.
    • Should I cast spells for food and water. (see FoodSpell and DrinkSpell entries)
  • DoForage=TRUE|FALSE
  • ForageIni=name of ini file for forage
    • Defaults to forage.ini. Please see the Related include files page for more information on the Forage.ini file.
  • DoMount=TRUE|FALSE
    • If set to TRUE, you must complete the MountCast entry below.
  • MountCast=Spell/Item name/AA name|gem #,item,alt
    • Use MQ2Cast syntax without quotes. Examples:
      • MountCast=Collapsable Roboboar|item
  • MasterList=PC Name,PC Name
    • Comma delimited list of names. Can also use ${NetBots.Client} to designate that any chars using NetBots can
      act as master. Examples:
      • MasterList=Bigbob,Sooper
      • MasterList=${NetBots.Client}
  • TankName=PC Name,PC Name
    • Comma delimited list of names. This variable will also be set when you designate a character using either the
      Main Tank or Main Assist group roles.
    • Can also use ${Group.MainTank.Name} to auto set this to whomever is set in the group main tank role. Examples:
      • TankName=Billytank,Larrytank
      • TankName=${Group.MainTank.Name}
  • Radius=#
    • Radius that I will monitor for NPCs. If you are having issues with your characters not casting buffs, etc. while
      not in combat, try adjusting the Radius setting down a bit to make certain that they are not pickng non-aggro
      mobs in the surrounding area. Example:
      • Radius=100
  • ExcludeList=npcname|npcname|
    • Pipe delimited names to exclude. Please note that you must have a Pipe "|" at the end. Example:
      • ExcludeList=a hollow tree|a broken barrel|
  • SitAggroRadiusCheck=#
    • Radius to check for aggro to see if I can sit. Default is 75.
  • AfkMessage=afk message
    • Enter a custom AFK message if desired (leave blank for no AFK message).
    • Default is "Not now, thanks".
  • DeathSlot=TRUE|FALSE
    • Will only be true if your bot needs to camp to desktop to save res timer. This way the macro will know if you
      died and had to camp out.
  • NetworkIni=Path and filename of ini file
    • Option for a network based INI file for scripts and path playback (mbwayplay and mbwaypnt.ini file).
    • File must be prefixed by "Network-" or "Net-"
    • Example: NetworkINI=X:\shared\modbot\mb_network.ini
  • TraderName=toon name|bazaar trader
    • For use with the Campout command. Example:
      • /bc campout trader will log in whatever toon you have set in the TraderName variable.
    • Second argument (|bazaar trader) will log in the toon and run the bazaar macro with the trader option (or any
      other mac+options you want there.)
  • FollowDistance=#
    • Designates how far you will stay from followee.
    • Default 20.
  • FollowStick=MQMoveUtils Options
    • If using MQ2MoveUtils, enter the options that you would like to use. Default 20 hold uw. Example:
      • FollowStick=20 hold uw
  • PetAggro=TRUE|FALSE
    • TRUE - pet taunt on
    • FALSE - pet taunt off
  • PetAssist=[1]
    • Assist and pet attack or not
  • PetFoci=[-bandolier|petfoci]
    • Any spell foci you want to swap in for this spell using MQ2Cast syntax, you must have previously created the set
      via the MQ2Bandolier plugin /createset command.
  • PetShrinkSpell=pet shrink spell name|gem#
    • Spell to be used to shrink your pet. Leave blank if you don't want your pet shrunk. Example:
      • PetShrinkSpell=Tiny Companion|gem9
  • GoMNuke/GoRMNuke/GoERMNuke/GoDERMNuke=[]
    • GoMNuke, GoRMNuke, GoERMNuke and GoDERMnuke will only appear if the toon has the AA available upon startup.
      These settings only require the * ALIAS * of the debuff you want to be "cast" on the MA's target when the
      event fires. No script required.
  • **SummonFood=spell name,item name,alt
    • These entries appear when DoFW is set to TRUE. Use MQ2Cast syntax for spell entry. Example:
      • SummonFood=Summon Food|gem12
  • **SummonDrink=spell name,item name,alt
    • MQ2Cast syntax. Example:
      • SummonDrink=Summon Drink|gem8
Deprecated Entries
  • DoAura=[TRUE,FALSE] (Must have a completed AuraCast entry below) DEPRICATED!! Set up aura as a buff with
    'self aura' as the ABTarType.
  • AuraCast=[\|\,item,alt>] (Example: Uber Aura|gem3) - DEPRICATED! Set up aura
    as a buff with 'self aura' as ABTarType. Use MQ2Cast syntax without quotes.
  • PetCast=|gem\<#>|(for Suspended Minion II)] (PLEASE NOTE: As of 3.499 beta, PetCast is
    no longer needed. You can now add pet to "AB" section by setting ABTarTypeX=petspell (or petcast). Pets won't be
    cast unless DoBuffs and DoPet are true. Also shouldn't cast if in combat unless "cbt" is included in ABTarType. When
    used with modbuff, Persistent Minion is also used automatically if you have it, and no extra entry needed. Original
    entry: Spell to cast to create / recall pet. Example: PetCast=Animate Dead|gem8|smii (Mainly MQ2Cast syntax
    without quotes))
    • Can also use for charming:
      • [charm \<NPC type 0=any 1=undead,vampyre 2=animal 3=summoned 4=(specify name
        type)> ]
      • Example: PetCast=charm 4 4 "lowland basilisk,a emerald drake"
    • For Cleric Hammer type pets that you only want to cast / have while in combat, you MUST have DoPet set to False
      AND have PetCast=|\,item,alt>)

AdvMelee [Melee]

  • OffTank=TRUE|FALSE
    • False - attack the MA target only
    • True - assist MA and then not change targets
  • ACLeash=#
    • The farthest the bot will move from where he is to engage a mob. However if "TankName" stays within 20 steps,
      the bot will exceed this leash.
  • ACAssistPct=#
    • Assist when target HP is this or less. Melee characters will engage at this point and caster pets will be sent
  • ACManaPct=#
    • Stop assisting when Mana drops below this.
      • Set to 0 for melee only
      • Set to 101 for non-melee casters
  • ACAnnounce=channel
    • Channel to announce in, or leave blank for no announce. Example:
      • ACAnnounce=/bc Will announce in MQ/EQBC window
      • ACAnnounce=/g Will announce in group chat
  • ACMeleeCmd=command
    • Use to set MQ2Melee commands. Example:
      • ACMeleeCmd=/melee plugin=1
  • ACBefore=script
    • Special script code to execute before you engage. Example:
      • *ACBefore=/if ({ACMATarget} && {Spawn[{ACMATarget}].Type.Equal[NPC]} &&
        {Spawn[{ACMATarget}].Distance3D}\<={ACLeash} && {Me.CombatAbilityReady[Sneak Attack]} && {Me.Invis} &&
        {Me.Sneaking} && {Me.PctEndurance}>40 && !{Me.Moving}) /call mbscript SneakAttack*
      • ACBefore=/if (!{Me.Pet.ID}) /casting ''{PetCast}'' \<-- cleric pet hammer example
  • ACAfter=script
    • Special script code to execute after you leave combat. Uses same script format as ACBefore.

AdvHeal Section [AdvHeal]

Please note that for FD class toons and ${Group.Puller} - If they are out of ACLeash range and not FD, they will not be healed (to prevent aggro on group), but only if healer is not in 'combat' combatstate. If not in combat they will be healed.
For group heal spells, you must set the TarCnt to something greater than 1 in order for the spell to evaluate correctly (and be used as a "group" heal when more than one member of the group requires healing). For instance, if you have TarCnt=3, then at least 3 members of your group will need to be below the HP level that you set in the Class line. A possible issue may arise when the cleric is in a loop state where a single heal is being fired (AHHealMode) - it may take a bit for it to realize the single heal should be stopped and the group heal cast instead. Depending on how you have it configured, the use of AHHealMode can force it to not even check the your group heal spell as it's being told to only check one (the single heal). If this is the case (and not the desired result), perhaps use the group heal as the spell to check in AHHealMode.
  • AHCount=#
    • Number of heals you plan to have.
  • AHNewFormat=#
    • Set to '1' for ModBot v4 INI format
    • Set to '0' for ModBot v3.49 INI format
  • AHCheckTime=#
    • How often to check for heals in seconds.
    • Do I heal characters outside of Netbots and EQBC (e.g. folks not running MQ2 or mercenaries.)
AHHealOOBC Thinking of an english name for that setting, all that comes up is "Heal Outside Of BC". So, in other words, if the setting is FALSE, it won't heal anyone that's not on YOUR EQBC server with the netbots plugin set up correctly, even if they're in your group. That is why I recommend you connect all toons and run modbot on all of them at least once, even if you don't plan to run it as a regular thing for the other toons.. It assures the plugins are set correctly. If AHHealOOBC=TRUE, then modbot will heal group members and pets even if there's no netbots connection. Out of group healing can only be done by the macro if there's a netbots connection, or if the other toon is a master and uses the cast command via /tell. I do recommend AHHealOOBC=TRUE setting, but I still left the default FALSE so people could check their connections before setting TRUE.
  • AHHealMode=#|#|#
    • 0 or 1 (off or on)|Heal #|Timer
    • This will keep the toon in the heal loop after casting to check for additional heals for the duration
      of .
  • AHInterruptLevel=#
    • Lowest interruptable spell. For example, AHHealSpell1 will never interrupt if this is set to 2.
  • AHClassPriority=class names
    • Set class healing priority (e.g. if you're currently healing a chanter, you won't interrupt for a monk).
      • Allowed entires are: enc,wiz,mag,nec,clr,dru,shm,pal,shd,war,bst,rng,ber,rog,brd,mnk (or any combination
  • AHAllowDismount=TRUE|FALSE
    • Designate whether your toon should dismount (or not) to interrupt a spell to cast a heal
    • TRUE - allow toon to dismount if necessary to interrupt a spell cast in order to fire off a heal.
    • FALSE - your toon will never dismount to interrupt a spell.
  • [AHx]
    • Where 'x' is the number of healing spell
  • Gem=source
    • Designate what the source of the spell is.
    • Valid entries: gem number, alt, ability, item, script, potionbelt
    • Note that 'potionbelt' does not require a slot number.
    • Examples:
      • Gem=3 Cast this spell from gem 3
      • Gem=alt This spell is an alternative advancement ability
  • Spell=source name
    • Valid entries: spell name, item name, alternate ability name, ability name, script name
    • Examples:
      • Spell=Superior Healing This would be generally be paired with an Gem entry indicating which spell gem to
        cast Superior Healing from.
      • Spell=Healing Thingy of Uberness This would be generally be paired with an Gem entry indicating that the
        source of this spell is an item.
  • SpellFoci=setname
    • Bandolier set name to swap in before casting this heal.
    • Please see MQ2Bandolier and MQ2Cast to understand how to use swap sets.
  • DurMod=##
    • Any spell extension percentage, e.g. 05 (for 5%), 25 (for 25%).
    • Due to how spell durations / extensions are calculated, you may need to enter extensions in excessive of 100%
      (e.g. a 25% extension would be entered here as 125). Check your results in game to make sure you have set the
      correct extension.
  • SpellMinMana=#
    • Minimum mana percentage to have in order to attempt this heal (e.g. 05 (for 5%), 25 (for 25%)
  • SpellAlias=spell alias
    • Alias name for the heal.
    • Please note that you can NOT have spaces in your alias names.
  • Announce=channel
    • Channel to announce in, or leave blank for no announce. See Announce description in the AdvMelee section for
      further explanation.
  • TarCnt=#
    • Designate how many targets are required to cast this spell.
  • Class=class name(s)
    • Valid entries: pc pet group hp0 war shd pal rng mnk rog brd bst ber shm clr dru wiz mag enc nec mypet self (or
      some combination there of). Please also note the following combination restrictions:
      • pc \<-- will include pc's and mercs. Leave pet out to ONLY heal PC's and mercs.
      • pet \<-- will include pets. Leave pc option out for pet only heals.
      • group \<-- will exclude everyone that is not in your group
      • hp0 \<-- set an overall health percentage for any named classes
      • classnames (war, shd, etc.) \<-- used to declare which classes this heal should apply to. Can also be
        combined with a health persentage (e.g. bst50).
      • mypet to be used by itself (e.g. set up a seperate heal for your pet)
      • self \<-- Only use self if the heal spell is SELF ONLY, or only to be cast on yourself. This setting is
        exclusive and other targets will not be checked for that spell.
  • PreCondition=TRUE|FALSE|PR
    • Defaults to TRUE
    • PR (only to be used with NetBots) If PreCondition=PR, then for that particular heal there will be a check on
      target (over NetBots) for any PR type spell. If target has a PR buff on, then the heal will be skipped. Please
      note that the PR setting does not currently account for the duration remaining of the PR buff. PreCondition=PR
      will check for these spell ID's:
      • 9755 (Promised Renewal)
      • 9756 (Promised Renewal Rk. II)
      • 9757 (Promised Renewal Rk. III)
      • 18270 (Promised Recuperation)
      • 18271 (Promised Recuperation Rk. II)
      • 18272 Promised Recuperation Rk. III)

AdvDebuff Section [AdvDebuff]

  • ADCount=#
    • Number of debuffs you plan to have.
  • ADNewFormat=x
    • Set 'x' to 1 for ModBot v4 style
    • Set 'x' to 0 for MobBot v3.49 style
  • ADMobMax=#
    • This is the array size where the valid mob ID's are stored after found. The loop to find valid mobs uses
      SpawnCount, then stores the mobs it "finds" in the array. Setting this to 20 or 30 should be way more than
      enough ever. It is best to keep this setting (and therefor the array) relative small for memory purposes (as
      well as for speed through the debuff loop).
    • If your toons are ignoring NPCs, this number may be set too low. First thing to check!!
  • ADCheckTime=#
    • How often to check for debuffs in seconds.
    • "It's the forced delay or timer between allowing that section of the macro to execute again.. Set higher for
      toons you want to have more emphasis somewhere else.. Like a cleric can be 8 for debuffs and 0 for heals, but a
      shammy you'd want 0 for debuffs. 0 = no forced delay. Speed still varies depending on the size of the loops or
      how many heals, debuffs, ect are in each section." - toomanynames
  • ADAggroOnly=1|0
    • 1 - only add mobs to the mob list if someone in your group or in netbots is the mob's target. Only use this
      option on bots that cast on targets that are NOT the main assist's target (e.g. chanter mezzing adds).
    • Please note: ADAggroOnly is not terribly reliable at times. If you are having issues with one of your bots
      auto-aggroing mobs (when they are not the tank), try setting ADAggroOnly=0 and then ADTarType=1 or 11.
  • ADHold=0|1|1|
    • 1=on 0=off|Debuff spell #|Time to wait for debuff|
    • This is used much like the AHHealMode setting, but only for type 12 debuffs. Sets a timer to hold the toon in
      the debuff loop (no buffs or events) until the debuff is complete.
  • [ADx]
    • Where 'x' is the number of Debuff spell
  • Gem[x]=source
    • Designate what the source of the spell is.
    • Valid entries: gem number, alt, ability, item, script, potionbelt
    • Note that 'potionbelt' does not require a slot number.
    • Examples:
      • Gem=3 Cast this spell from gem 3
      • Gem=alt This spell is an alternative advancement ability
  • Spell=source name
    • Valid entries: spell name, item name, alternate ability name, ability name, script name
    • Examples:
      • Spell=Ensnare This would be generally be paired with an Gem entry indicating which spell gem to cast
        Ensnare from.
      • Spell=Bangy Thingy of Uberness This would be generally be paired with an Gem entry indicating that the
        source of this spell is an item.
  • SpellFoci=setname
    • Bandolier set name to swap in before casting this spell. Please see MQ2Bandolier and MQ2Cast to understand how
      to use swap sets.
  • DurMod=##
    • Any spell extension percentage, e.g. 05 (for 5%), 25 (for 25%).
    • Due to how spell durations / extensions are calculated, you may need to enter extensions in excess of 100% (e.g.
      a 25% extension would be entered here as 125). Check your results in game to make sure you have set the correct
  • SpellAlias=spell alias
    • Alias name for the spell. Please note that you can NOT have spaces in your alias names.
  • Announce=channel
    • Channel to announce in, or leave blank for no announce. See ACAnnounce description in the AdvMelee section for
      further explanation.
  • SpellMinMana=#
    • Minimum mana percentage to have in order to attempt this spell (e.g. 05 (for 5%), 25 (for 25%)
  • SpellRecast=#
    • Number of times to recast this spell for fizzles, interrupts, etc.
  • SpellCastonResist=spell alias
    • Should this spell be resisted, is there another alias to cast before another attempt of this spell.
    • Please note that if SpellCastonResist is defined, ADSpellRecast must be at least 1.
  • SpellDelay=#
    • Number of seconds to wait between casts of this spell.
  • TarCnt=#
    • Number of targets required to be present to cast this spell. If set to 0, this spell will not be auto-casted)
  • TarType=#
    • Designate one target type to cast this debuff on.
    • Valid target types:
      • 0 = All mobs
      • 1 = MA Target only
      • 2 = All except MA Target
      • 3 = Only on named mob
      • 10 = All mobs before next spell
      • 11 = MA target only before next spell
      • 12 = All but MA target before next spell
      • 13 = Only on named mob before next spell
    • Priority Debuffs (10, 11, 12, 13) should be placed first most (prior to non-priorities). Meaning - settings of
      10, 11, 12 and 13 need to be in top spells slots (AD1, AD2, etc)
  • TarBegHP=#
    • The target must be equal or below this HP%.
  • TarEndHP=#
    • The target must be equal or above this HP%
  • IfSpellImmune=script name
    • This is meant to be a pointer to a quick, one line script that is executed when a mob is immune to the spell you
      have cast. If you need to do something complicated, other scripts can be called from it. 'Param1' is now passed
      as the immune target's ID. An example where this would be useful is for chanter mez:
      • /bc {TankName} //multiline ; /varset ACMATarget {Param1};/target id {Param1} will make your
        toon target the immune mob even if he was on another mob at the time.
  • UseHoTT=#
    • This will cause the macro to /target the mob and check TargetOfTarget before casting and delay # seconds before
      checking again if mob is skipped. If not a raid or group member, the macro will move on and recheck that mob for
      that debuff after the time has expired. Note that this will default to casting the debuff anyways if HoTT isn't
  • PreCondition=one line script
    • Whatever statement you add to this line needs to /return TRUE. i.e. - PreCondition=/if ({This} && {That})
      /return TRUE. Only a TRUE return will allow the spell to cast, so script carefully, or leave the lines default.
[AD1] Gem=2 Spell=Turgur's Insects SpellFoci= DurMod=0 SpellAlias=slow Announce=/bc Slowed <<[+y+] %t [+x+]>> with[+g+] %s [+x+] SpellMinMana=10 SpellRecast=2 SpellCastonResist=malos SpellDelay=0 TarCnt=1 TarType=11 TarBegHP=200 TarEndHP=15 IfSpellImmune= UseHoTT=0 PreCondition=TRUE
"Notice the TarBegHP setting. I have the same spell set with TarType=12 directly after this one to make sure he slows adds. (sometimes he pulls em too..) Everything else - mainly ACAssistPct is set to a lower value. Most around 95 or so. Buffs are a pita because if the debuff sub is called (it is called first) it won't cast the debuffs if there's any reason not to, then the macro runs through the whole buff loop before getting back to debuffs again.. Setting the TarBegHP at least over the level of all other functions at least attempts to keep the slow first. Also.. I find the macro works best if you always set your ACManaPct very low. Usually keep mine around 5 or so for every toon. I should change the default on that, but clearing targets and such is something your toon will do quite often if his mana is under that value." - Ptarp on the forums on Wed Mar 09, 2011 7:54 pm. (edited into Wiki by Arblis)

AdvBuff Section [AdvBuff]

If you want to cast single target buffs after group buffs, place all of your group buffs first.
  • ABCount=#
    • Number of buffs you plan to have.
  • ABNewFormat=x
    • Set 'x' to 1 for ModBot v4 style
    • Set 'x' to 0 for MobBot v3.49 style
  • ABMobMax=#
    • Max number of targets to track for buffs (do not include pets)
  • ABCheckTime=#
    • How often to check for buffs in seconds
  • [ABx]
    • Where 'x' is the number of buff spell
  • Gem=source
    • Designate what the source of the spell is.
    • Valid entries: gem number, alt, ability, item, script, potionbelt
    • Note that 'potionbelt' does not require a slot number.
    • Examples:
      • Gem=3 Cast this spell from gem 3
      • Gem=alt This spell is an alternative advancement ability
  • Spell=source name
    • Valid entries: spell name, item name, alternate ability name, ability name, script name
    • Examples:
      • Spell=Minor Shielding This would be generally be paired with an Gem entry indicating which spell gem to
        cast Minor Shielding from.
      • Spell=Uber Wand Thingy of Uberness This would be generally be paired with an Gem entry indicating that the
        source of this spell is an item.
  • SpellFoci=setname
    • Bandolier set name to swap in before casting this spell.
    • Please see MQ2Bandolier and MQ2Cast to understand how to use swap sets.
  • DurMod=##
    • Any spell extension percentage, e.g. 05 (for 5%), 25 (for 25%).
    • Due to how spell durations / extensions are calculated, you may need to enter extensions in excessive of 100%
      (e.g. a 25% extension would be entered here as 125). Check your results in game to make sure you have set the
      correct extension.
  • SpellAlias=spell alias
    • Enter an "alias" for the spell. This is often a short, easier to use name (e.g. the alias for Spirit of the Wolf
      might be SoW).
    • Please note that you can NOT have spaces in your alias names.
  • Announce=channel
    • Channel to announce in, or leave blank for no announce. See ACAnnounce description in the AdvMelee section for
      further explanation.
    • Annoucements also support formatting (makes it a bit easier to see in the MQ window). For example: