SkBot v1.70 Update 08/08/2009

devestator

Lifetime Member
Joined
Oct 25, 2006
Messages
1,550
Reaction score
15
Points
38
Ok here it is, my initial release of my sk bot. This is very much BETA! For one thing, my sk is only level 65, so if something dosn't work for higher levels I'll need to know about it. I'm gonna make a few posts below this one to explain the bot and to hopefully have a little bit of a help getting started area for it (I didn't do this with my mageBot and kind of regret not having it there).

SkBot V1.5 - 02/08/2009 Initial Release Notes

Required Files
skbot.mac
skbotsettings.ini
devCommon.inc v1.7
devMovement.inc v1.5
MQ2Cast_Spell_Routines.inc

Required Plugins
MQ2Debuff
MQ2Cast
MQ2Exchange

Notes
-This bot is meant solely to be run in a group, although you can run it afk with a healer merc or other afk bots. It does not have a pull routine, I may consider adding one later but not right now. In main tank mode, it will attack any mob not on the ignore list that gets in it's range.
-The main purpose of this bot is to tank, it has three modes, maintank, offtank, and dps. Offtank was one of the harder things to code so this may very well be a bit buggy.
-A lot of routines in this bot are brought over from my magebot. Thus the creation of devCommon.inc. You are welcome to use this include in your own bots if you like, but I do not have a write up for the subroutines in it yet.
-The way I decided to make taunt work in this bot, is it uses it sparingly. Only when it goes to a new target, or it detects a new add. You can however make it use taunt continously if you want in the ini (see the ini post below for details.)

Known Problems
-None as of yet, let me know when you find them!

Future Additions
-Working on a way to make it cast on mobs before it moves to them to melee engage. So that it isn't always running far away in order to intercept a mob.

Download Notes
The devCommon.inc download seperate from the rar file is the newest version. Please make sure you download this inc if you are experiencing any of the problems listed in the patch notes.

Other Notes
See update notes post below for details on version updates. I will included the supported devCommon.inc and devMovement.inc in the update notes. Future versions of these files should be backwards compatabile unless I release an update for the bot specifically stating updated for devCommon.inc.

If you run more than one bot of mine, this can get confusing, but the easiest thing to do will be to make sure all bots you are using have the same devCommon.inc and devMovement.inc supported versions.

Also for now the supported version of the inc files should be included in the rar. I may end up changing this and having the incs download seperately.

Note on example ini. I am now naming the example ini included in the rar skBotSettings_example.ini This is to avoid someone accidentally overwritting their default ini with the example. You must save it as skBotSettings.ini when modifying it, to use it as your default ini.

Downloads
SkBot v1.70
 

Attachments

  • devCommon.inc
    144.1 KB · Views: 221
Last edited:
skBot v1.70 Update Notes

Files Changed
skBot.mac
devCommon.inc v1.80

Bug Fixes
-None

New Additions
-Updated for devCommon.inc v1.80

INI Changes
-None

Please visit the devCommon.inc download to see full updates for it.


devCommon v1.72 - 03/01/2009 Updates

Compatability -Required versions of my bots for this version
clericBot v1.00
skBot v1.60
mageBot v3.00

Files Changed
devCommon.inc v1.72

Bug Fixes
-Corrected a bug in self buff check to properly check short duration buffs for auras (Really this time!)
-Corected a bug in buff routine that was causing some classes (Sk) to never buff themselves
-Corrected a crashbug in the tradecheck routine
-Corrected array error in tradecheck routine

New Additions
-TradeCheck routine has been changed slighlty so that it now should never accept a trade where items would be dropped to the ground.

Additional Notes
-This version should work fine with all my bots.

skBot v1.60- 02/16/2009 Updates

Files Changed
skbot.mac

Bug Fixes
-

New Additions
-Modified for devCommon.inc v1.70
-Can now use the new eq group roles in the devCommon. Set mainTank and mainAssist to group in the ini if you want to use EQ group settings.
If using EQ Group Roles and the main tank / assist changes, the bot will change it's grouprole to match. (Example if the bot is set as maintank role, and the main tank in group changes to soemoen else, the bot will switch to offtank mode. Or if the bot is in any role, and the tank is changed to it, the bot will switch to maintank role).
-Uses the TradeCheck routine in devCommon to auto accept trades to the bot.

INI Changes
-None

devCommon v1.70 - 02/16/2009 Updates

Compatability -Required versions of my bots for this version
clericBot v1.00
skBot v1.60
mageBot v3.00

Files Changed
devCommon.inc v1.70

Bug Fixes
-Global commands that turn the buffs on and off should now reset the buff timer so that it will do said buffs immediately (if turning them on)
-Corrected a bug that was causing minBuffCheckTimer to not be set correctly in some situations.

New Additions
-New Variable campRadius. Similiar in function to mobRadius but more for passive camp detection routines than active routines.
-New routine TargBuffCheck(int buffTargID) - this is a routine to check buffs on a specific target
-Added EQ GroupRole tracking. If you do not have a puller, maintank, or mainassist set, it will use the one set in the group in EQ.
-BuffCheck routine will now rebuff buffs that have less than a minute left on the duration instead of waiting for them to fade.
-New global command buff <alias> <name>, this will only work if you have groupBuffs set up. But it will buff any target with the specified <alias> buff (ignores class restrictions set in the ini).
-Added a minimum sit time of 5 seconds after aggro is detected on the character.
-TradeCheck routine, will automatically accept trades if there is room. However there is currently one bug I have left to work out on this, if inventory room is limited and you hand the character items in a bad order it may drop something to the ground. (Example: The character has two slots left, the first is giant and the second is small. You had it two items but give it a small then giant item. The small item would be put into the giant slot since it is first, and the giant item would then fall to the ground.)

This would be a rare and situational problem, but is a problem none the less. I hope to have a work around to fix this within the next few days, but I wanted to get the clericbot released and did not want this problem holding it up.

Additional Notes
-None at this time
______________________________________________________________
skBot v1.51- 02/08/2009 Updates

Files Changed
skbot.mac
skbotSettings.ini

Bug Fixes
-Corrected a potential bug if MeleeRadius was not included in the ini.

New Additions
-The sk will now check when it returns to camp from pulling to make sure it is not in combat before it sits. Also if it is sitting and it detects combat it should stand.
-Undocumented change from 1.5: MeleeRadius addition (see ini changes). This will set the maximum distance the sk will run out to meet a new mob (he will still run up to mobradius * 2 to get a mob off of a groupmate).

INI Changes
-Undocumented From 1.5 : [General] MeleeRadius, an integer that will specify the maximum range to run to a new mob.

devCommon V1.61 - 02/08/2009 Updates

Files Changed
devCommon.inc v1.61

Bug Fixes
-Corrected a typo in the new global follow command that was preventing follow from working.

New Additions
-

Additional Notes
The new 1.61 is included in the rar download but is also available for download by it self if you've already download the rar.

______________________________________________________________
skBot V1.5 - 02/08/2009 Updates

Files Changed
skBot.mac
devCommon.inc v1.6
devMovement.inc v1.5
skBotSettings.ini

Bug Fixes
-Corrected a type in the follow check that would cause error messsages while following
-Corrected a bug that could cause the sk to stutter on target selection when mobs first entered the camp.
-Corrected a bug causing SpellMinMobs setting to be ignored

New Additions
-Updated for devCommon.inc v1.6
-Improved performance in the main loop to get better response time on recognizing combat.
-Changed the way MainTank role chooses targets slightly. If you are the maintank and the mainassist (or the mainassist is missing or dead) it will make sure to go back to it's original target after getting aggro on new mobs. If you are not mainassist it will get aggro on new mobs and then go to the mob that the mainassist is on.
-AggroCheck routine no longer cycles targets and assist to check aggro. It now basis it's aggro tests on where the mob is and what direction it is facing. This may be slightly buggy so please let me know if you have problems, I've been using it pretty extensively though and I think I've got most of the kinks worked out.
-Modified offtank role to match maintank modifications if the main tank does not have any targets, or the maintank is missing / dead.
-In dps mode, if the mainassist is missing or dead the sk should still fight.
-Added a new pulling option. This is very much in its beta stage but I have used it some and found it to serve it's purpose. A littel bit about it, it does not attempt to split mobs or anything fancy, it simply walks a prerecorded path, finds a mob, and brings it back to camp. Or you have the option of it fighting it where it pulled it at, see the ini changes for full details on that.

In order to use this you will need to use my pathrecord.mac (now included in the rar) to create a path that the sk will walk to find mobs. You must start the macro near the first location in the path or pulling will not be available. If the sk finds himself to be stuck he will reset his home location to where he is stuck and discontinue pulling. See ini changes for full details on setting this up.
-Added command pull, this will enable / disable pulling mode.

INI Changes
-This is actully from 1.4 but it never got released since I was working on 1.5 already and it was a small change. Added [Alerts] AlertUnsafePC=Audio file, this will play the specified audio file if any unsafepc's are detected nearby.
-New ini section [PullSettings]
Code:
[PullSettings]
Pulling=false   | sets the initial pulling mode
PullPath=default | the path name to load (default is Zone.ShortName which is what pathrecord.mac records it as by default.)
PullReturnToCamp=true | specifies wether it pulls back to camp or fights it where it pulls it at.
PullPathRest=5m | If it walks the entire path and finds no mobs it will rest for this period of time.
PullRange=85 | The distance away to pull a mob
MinRestTime=10s | The minimum amount of time between pulls (started after combat ends)
MinLevel=1 | The minimum mob level to pull
MaxLevel=85 | The max mob level to pull
PullSpell=Siphon Strength | The spell to use to pull (can use an item clicky but currently does not support using a ranged weapon)
PullSlot=gem6 | The slot to mem the spell if it is not memmed, set to item if it is an item
MinCasterMana=60  | Min amount of mana for casters in the group to have before pulling
MinCasterHealth=60 | min amount of health for casters
MinHealerMana=70 | min mana for healer types
MinHealerHealth=60 | min health for healer types
MinSkMana=40 | Min mana on the sk
MinSkHealth=75 | Min health on the sk
MinOtherHealth=50 | Min health for any other type classes

Additional Notes
Allthough there are some pretty large changes in this version I am removing the beta tag from the skBot. It is pretty much in its full release now, any bugs will be fixed and there will be updates to it as needed or as I think of new things to add to it.

devCommon V1.6 - 02/08/2009 Updates

Files Changed
devCommon.inc v1.6

Bug Fixes
-Added checks to prevent using interrupt if you are on a mount. Should not dismount you anymore, but spells will finish casting even if a mob dies.
-Fixed a bug with assisting in groupmode that could cause you to get stuck on a corpse.
-Fixed a bug with CorpseCheck routine that could cause you to have an invalid number of live targets, causing spells that required certian numbers of live targets to be cast incorrectly.
-Fixed a bug in StripText routine that was not always stripping all escape characters.

New Additions
-The CheckForAggro routine now does a better job of testing if a mob is actually aggro on you.
-SendTell routine will now strip any escape characters from a message before it is sent "\a"
-Added a variable defaultEchoColor that sets the default echo output color
-Added more checks that should make sure the character will continue to fight if the main assist is not present or dead.
-buffCheck(bool useTimer) routine moved to devCommon.inc
-A lot of reused variables in my bots have been moved to devCommon.inc instead of being declared in each macro. This also gives more options of adding features to all my bots in the future.
-Added GlobalCommands(string comFrom,string comText) routine. This will contain commands that can be used for any bot of mine. (These commands can be issued in a tell from a SafePC or in an /echo on the character). Currently available global commands (note some of these were available before but were moved to here):
safepc <name> - adds or removes a safepc, this will update in the ini as well.
gnoremob <name> - adds or removes an ignored mob, this will update in the ini as well.
follow <target> - makes the character followed the specified target.
stay - sets the characters home location to their present location and turns off follow.
docmd <command> - can make the character do any command. It does not work with any ' or " in the command though. Example: /tell bot docmd /pet hold - the bot will do the /pet hold command.
-Created a new CommonLoad routine. If you use my common file for other macros you'd want to /call CommonInit before you load any settings or declare any variables. Once you have all your settings loaded CommonLoad will finish loading with any settings you loaded that it uses.
-The devCommon.incnow has a built in verification system to make sure the bot you are using is of sufficient version to be compatible. If it is not a warning message will be displayed and the macro will be ended.
-There is now and Ignored mobs alert list, and a safe pc alert list created. By default the numbers are 101 for ignore mobs and 102 for safe pcs. If you wish to change this add a /varset alertList n for ignore mobs or a /varset safeAlertList n for safepcs before calling CommonLoad. This should make it so none of my bots ever target an ignored mob, and make safepc checks a little quicker.

Additional Notes
Not all of these updates apply specifically to all my bots currently, some are really only used in the mage or the sk but not both. But I'm including them in the update notes for the devCommon to have one universal set of notes for this file.

devMovement V1.5- 02/08/2009 Updates

Files Changed
devMovement.inc v1.5

Bug Fixes
-No bug fixes

New Additions
-Movement routins now return more information about the movement success or failure. Also if rooted the movement routine will exit now instead of sitting around waiting for root to wear off and preventing bots from doing anything else while watiing.

Additional Notes
Not all of these updates apply specifically to all my bots currently, some are really only used in the mage or the sk but not both. But I'm including them in the update notes for the devMovement to have one universal set of notes for this file.

Additional download notes
My other bots are NOT compatible with this release of devCommon.inc. If you use any of my other bots you must download new versions that are compatible with this version of devCommon.inc.
____________________________________________________________
SkBot V1.3a BETA - 01/17/2009 Updates

Files Changed
skBot.mac

Bug Fixes
-Fixed problems with the follow command not working properly if outofcombatsit was on.

New Additions
-If you encounter mobs while in follow mode now the sk will reset his anchor point to his current location and then engage the mobs as he normally would. After combat is finished he will attempt to resume following on his follow target, if for some reason he cannot he will remain where the combat took place.

INI Changes

Additional Notes


___________________________________________________________
SkBot V1.3 BETA - 01/16/2009 Updates

Files Changed
skBot.mac
devCommon.inc v1.4
devMovement.inc v1.3
skBotSettings.ini

Bug Fixes
-No bug fixes

New Additions
-Modified for devCommon.inc v1.4
-Added the following commands (these work in /tell or /echo on the sk). Will only follow commands in a tell from a safepc (this includes anyone in your group).
*Follow <target> |Will make the sk follow the specified target, (follow me works as well).
*Stay |Will turn off follow and set the anchor location to where the sk is standing.
*Assist <target> |Will change the mainassist to the specified target
*Maintank <target> |Will change the maintank to the specified target, note this is ignored if the sk is running in maintank mode.
*groupRole <role> |Will allow you to change teh sk's group role without restarting the bot. Will assume the duties of the specified role right then.

INI Changes
-Added LeaveUnknown setting to LeaveLoot section. This will take priority over DestroyUnknown. This will leave any loot, that does not have a setting, on the corpse if set to true.

Additional Notes
I'm still working on a way to make the bot cast on an incoming rather than running straight out to it but there are some problems with it that I have to work out still. For instance, there is no way to tell if a mob is an incoming mob, or a mob that is aggro on a group member that is not standing within range.

If there are not any major problems in this version this will be my last beta version.

Also please see the devCommon.inc update notes for some important updates that effect the skBot.

devCommon V1.4 - 01/16/2009 Updates

Files Changed
devCommon.inc v1.4

Bug Fixes
-Corrected a bug that was causing items to not be cast correctly if used as a combat spell.
-Corrected a problem with casting cool down timers not being applied correctly under some circumstances.
-Corrected a potential problem in the evac routine that could cause it not to work properly.

New Additions
-Added a new itemswapcheck routine that will check if the item cannot be swapped automatically when attempting to cast it. (Example: You need to cast a must equip shield but have a 2hander equipped)
-Changed looting subroutine to allow for a leaveUnknown boolean to leave itemson a corpse that have no found loot setting.
-Choosetarget routine should now put healer type mobs higher on the priority list

Additional Notes
Not all of these updates apply specifically to all my bots currently, some are really only used in the mage or the sk but not both. But I'm including them in the update notes for the devCommon to have one universal set of notes for this file.

Special thanks goes out to Shank for helping me with getting the itemswap and item casting fixed

devMovement V1.3 - 01/16/2009 Updates

Files Changed
devMovement.inc v1.3

Bug Fixes
-Fixed a problem with MoveToSpawn routine that could cause it to not recognize being stuck.
-Made a few other stuck detection modifications to better detect when stuck.

New Additions
-SetNearestLoc routine now attempts to only set a nearby loc that is near your position on the path. This is to avoid skipping large sections of your path because of overlapping sections.
-All movement routines will now attempt to recognize when near a door and facing it and open it. This will only work if you run in first person mode, but should enable you to be able to create paths that go through doors.

Additional Notes
Not all of these updates apply specifically to all my bots currently, some are really only used in the mage or the sk but not both. But I'm including them in the update notes for the devMovement to have one universal set of notes for this file.

_______________________________________________________________
devCommon V1.3 - 01/12/2009 Updates

Files Changed
devCommon.inc v1.3

Bug Fixes
-Changed the way spelltimers work on unsuccessfull casts so that long recast items are not set on cool down if they do not successully cast

New Additions
-Added more item handling code to the casting routine, mainly just speeds up the routine some, but also notifies you if the item is not found.
-Added a check for lore items in your bank when looting, does not really effect anything just does not even attempt to loot a lore item you already have.
-CampCheck routine now assumes all your group members are safePCs. You no longer need to add group members to the safePC list in the ini.

_______________________________________________________________
SkBot V1.2a - 01/07/2009 Updates

Files Changed
skBot.mac

Bug Fixes
-Fix a typo in 1.2 that was preventing the too far away code from working.

New Additions
-

______________________________________________________________
SkBot V1.2 - 01/07/2009 Updates

Files Changed
skBot.mac
devCommon.inc v1.2
devMovement.inc v1.2

Bug Fixes
-Added a check for too far away message and made the bot move close if it gets it.

New Additions
-Offtank mode should now immediately engage any mobs in the camp if the main tank does not have them targeted yet, incase they are afk. If the main tank does have them targeted when they come into camp then the sk should not attack until the assist pct, as long as it is only one mob. It will continue to pick up adds as before.

Additional notes
If you are using v2.5 of my mageBot, devCommon 1.2 and devMovement 1.2 should work fine with it until I get v2.6 of the mageBot released with the fixes to the stuck detection problem in 2.5.
______________________________________________________________
SkBot V1.1 - 01/04/2009 Updates

Files Changed
skBot.mac
devCommon.inc v1.1
devMovement.inc v1.1

Bug Fixes
-Fixed a bug with spell casting priority that coudl cause a lifetap and dps spell to cast back to back ignoring spellcooldown setting.

New Additions
-Updated for devCommon.inc v1.1 changes.
 
Last edited:
INI Setup Instructions

I'm going to go through each section of the example ini included in the download and explain each setting.

Code:
[General]
SpellCoolDown=15s  *The amount of time between each spell cast.  Aggro spells ignore this.
OutOfCombatSit=true  *Whether or not you sit when not in combat.
MobRadius=60  *The radius to detect mobs and adds
MeleeRadius=60 *The radius to run out to melee range of new mobs
ResistTries=2  *The number of times total to attempt casting a spell in case of interrupts or resists.
ReplyToTells=false *Will reply to /tell commands (will never reply to an unsafepc, but keep in mind anyone in your group is now considered a safepc).
LootCorpses=tru  *Whether or not to loot corpses
HealPotName=Distillate of Celestial Healing IX  *If you wish to use heal pots this is the name of the ones to use.  Leave null if you do not wish to use them
HealPotHPs=40  *The PctHPs to use a healpot.
FDSpell=Death Peace  *Your FDSpell name, it will FD even as main tank if you have it set up to do so, if you leave the next setting 0 then it will not FD.
FDHps=0  *The PctHPs at which to FD.
I think the above is pretty straight forward. Just to elaborate a little as stated above spells flagged as aggro spells will ignore the SpellCoolDown setting. Also make sure to note that if you set it to FD at above 0% HPs it will do so no matter what the situation is.

Code:
[PullSettings]
Pulling=false   | sets the initial pulling mode
PullPath=default | the path name to load (default is Zone.ShortName which is what pathrecord.mac records it as by default.)
PullReturnToCamp=true | specifies wether it pulls back to camp or fights it where it pulls it at.
PullPathRest=5m | If it walks the entire path and finds no mobs it will rest for this period of time.
PullRange=85 | The distance away to pull a mob
MinRestTime=10s | The minimum amount of time between pulls (started after combat ends)
MinLevel=1 | The minimum mob level to pull
MaxLevel=85 | The max mob level to pull
PullSpell=Siphon Strength | The spell to use to pull (can use an item clicky but currently does not support using a ranged weapon)
PullSlot=gem6 | The slot to mem the spell if it is not memmed, set to item if it is an item
MinCasterMana=60  | Min amount of mana for casters in the group to have before pulling
MinCasterHealth=60 | min amount of health for casters
MinHealerMana=70 | min mana for healer types
MinHealerHealth=60 | min health for healer types
MinSkMana=40 | Min mana on the sk
MinSkHealth=75 | Min health on the sk
MinOtherHealth=50 | Min health for any other type classes
This is very much in its beta stage but I have used it some and found it to serve it's purpose. A little bit about it, it does not attempt to split mobs or anything fancy, it simply walks a prerecorded path, finds a mob, and brings it back to camp. Or you have the option of it fighting it where it pulled it at, see the ini changes for full details on that.

In order to use this you will need to use my pathrecord.mac (now included in the rar) to create a path that the sk will walk to find mobs. You must start the macro near the first location in the path or pulling will not be available. If the sk finds himself to be stuck he will reset his home location to where he is stuck and discontinue pulling.

Code:
[TankSettings]
GroupRole=maintank  *Your role in the group, can be maintank, offtank, dps.  Will explain these roles a little more below this section
MainAssist=Null  *The name of the main assist.  Must be set for offtank and dps modes, in maintank mode if it is not set it will target what it pleases.
MainTank=Null  *The main tank, if set as maintank grouprole it will ignore anything here, otherwise in offtank mode it will not attempt to pull mobs off this person.
AssistPct=95  *The pct to assist when running in dps mode or offtank mode, this value is ignore in maintank mode.
AggroCheckTimer=10s  *How often to check mob aggro.  See my notes below this section for further details.
Here is a little bit more explanation on the roles.
Maintank - Will attempt to pick up all mobs detected inside of mobRadius. If a main assist is set, it will assist them after getting aggro on any new adds or any mobs that it lost aggro on.
Offtank - Will assist main assist unless there is a new add or a mob detected that is not on it or the main tank. If there is a new add it will attempt to get aggro unless the main tank is already attempting so.
DPS - In this mode it always assist the main assist for it's target. It does not try to aquire one of it's own. It never taunts and never uses aggro spells int his mode.

Now a little more about the AggroCheckTimer setting. There are two types of mob detection in this bot. One is a simple add detection that happens continously while in combat. The second is an aggro detection, what this does is it cycles through all the targets it's in combat with and checks what they are attacking. If it finds one that is not attacking the maintank or the sk, then it will attempt to get aggro on it. (Note aggro detection is not used at all in dps mode). I could've made the leadership aa target of target required and used that instead, but I decided I didn't want to require that (mostly cause I dont have it on my test characters! hehe) So you don't want this setting to be to high, or something may aggro your healer and the bot would never know, but at the same time you dont want it be set to low or it will constantly be cycling through targets. I recommend a setting between 10 and 20 seconds, but play with it and find what setting you prefer.


Code:
[PetSettings]
SummonAtStart=true  *If set to true will summon the specified pet at the start of running the macro if you do not have a pet.  Set it to false if you do not want to use a pet.
PetSpellName=Invoke Death  *The name of the pet summoning spell
PetSlot=gem2  *The slot to mem the pet spells into
PetHasteName=Augmentation of Death  *The name of the pet haste buff spell if you have one, set to null to not cast this.
PetHasteText=Augmentation of Death  *The display text on your pet for the haste buff.

Code:
[SelfBuffs]
MinBuffCheckTimer=1m  *How often it checks it's buffs (also checks the pets on this timer).  It will never check buffs while in combat
Value=4  *The number of self buffs to load
SelfBuffName1=Cloak of the Akheva  *The spell name of the buff (If casting a buff from an item this should be the name of the item)
SelfBuffName2=Breastplate of Emblazoned Souls
SelfBuffName3=Voice of Thule
SelfBuffName4=Pact of Hate
SelfBuffText1=Cloak of the Akheva  *The text on the buff icon
SelfBuffText2=Black Shroud
SelfBuffText3=Voice of Thule
SelfBuffText4=Pact of Hate
SelfBuffSlot1=gem2  *The slot to mem the buff to, use item if it is an item buff, or alt if its an alt ability.
SelfBuffSlot2=item
SelfBuffSlot3=gem2
SelfBuffSlot4=gem2

Code:
[SafePCs]
UnsafePCAction=continue  *What to do if a pc is detected that is not in your list, see below for full options.
Value=0  *The number of PCNames in your list
PCName1=Null  *The name of the pc to add to your safe list
UnsafePCAction options
pause - Will pause not do anything else until it does not detect any unsafe pcs.
continue - Will ignore unsafe pcs
stop - Will end the macro
gate - Not applicable for an SK but it is an option, if you set it to this it would simply try to camp
camp - Will camp

*Note* If it detects an unsafepc while in combat, it will attempt to finish combat before taking any actions if it is not set to continue.

Code:
[LeaveLoot]  *Items in this section are left on the corpse
LootNoDrop=true  *Allow the bot to loot no drop items for all sections (will not loot no drop items that are set to be left though)
LeaveUnknown=false *Leaves any loot without a setting on the corpse (will take priority over DestroyUnknown)
Value=0  *The number of items in this loot section
LootItem1=  *The name of the item, it can be a partial name (example: uncut for Uncut Jacinth)
LootAlert1= *See the alerts section below for notes on this but will play the specified file if this item is encountered
[WantedLoot]  *Items in this section are kept
Value=0
LootItem1=
LootAlert1=
[DestroyLoot]  *Items in this section are destroyed
DestroyUnknown=false  *If set to true, it will destroy any item that does not have a setting in one of these sections.
Value=0
LootItem1=
LootAlert1=

Code:
[IgnoreMobs]
Value=0  *The number of mobs on the ignore list
MobName1=  *The name of the mob to ignore, it can be partial match
The bot should never under any circumstances attack a mob on this list. If it does please let me know how (if it was an add etc), where, and who (the mob name).

Code:
[CombatAbilities]
Value=1  *The number of combat abilities in this section
AbilityName1=Bash  *The name of the ability
AbilityRecastDelay1=5s  *How often you want to use the ability
This is the section that if you want it to use taunt continously it can. Just add it here with a low reuse time and it will use it whenever it is up. In order for combat abilities to work, you have to have a button for them in the actions window.

Code:
[Combat]
Value=6  *The number of spells in this section
SpellName1=Festering Darkness  *The name of the spell
SpellSlot1=gem8  *The slot to mem it in, can be item if it's an item or alt if it's an alternate ability
SpellMaxMobs1=100  *The maximum number of mobs in the area to cast the spell
SpellMinMobs1=1  *The minimum number of mobs in the area to cast the spell
SpellMaxMobHPs1=100  *The max hitpoints on the mob to cast the spell
SpellMinMobHPs1=5  *The minimum hitpoints on the mob to cast the spell
SpellMinMana1=10  *The minmum amount of mana to have to cast the spell
SpellMaxHPs1=100  *The maximum of amount of hitpoints to have to cast the spell (mostly used for lifetaps)
SpellRecastDelay1=1m  *How often you want to recast this spell.
SpellCondition1=Null  *Any conditions for this spell (see below this section)
SpellType1=Aggro  *The type of spell.  Can be aggro, lifetap, or dps.  See below this section for details.

SpellName2=Terror of Thule
SpellSlot2=gem5
SpellMaxMobs2=100
SpellMinMobs2=1
SpellMaxMobHPs2=100
SpellMinMobHPs2=5
SpellMinMana2=10
SpellMaxHPs2=100
SpellRecastDelay2=45s
SpellCondition2=Null
SpellType2=Aggro

SpellName3=Touch of Innoruuk
SpellSlot3=gem1
SpellMaxMobs3=100
SpellMinMobs3=1
SpellMaxMobHPs3=100
SpellMinMobHPs3=5
SpellMinMana3=20
SpellMaxHPs3=70
SpellRecastDelay3=30s
SpellCondition3=Null
SpellType3=lifetap

SpellName4=Zevfeer's Bite
SpellSlot4=gem7
SpellMaxMobs4=100
SpellMinMobs4=1
SpellMaxMobHPs4=95
SpellMinMobHPs4=20
SpellMinMana4=40
SpellMaxHPs4=95
SpellRecastDelay4=2m
SpellCondition4=Null
SpellType4=lifetap

SpellName5=Ignite Blood
SpellSlot5=gem4
SpellMaxMobs5=100
SpellMinMobs5=1
SpellMaxMobHPs5=95
SpellMinMobHPs5=40
SpellMinMana5=40
SpellMaxHPs5=100
SpellRecastDelay5=3m
SpellCondition5=Null
SpellType5=dps

SpellName6=Blood of Hate
SpellSlot6=gem3
SpellMaxMobs6=100
SpellMinMobs6=1
SpellMaxMobHPs6=95
SpellMinMobHPs6=40
SpellMinMana6=40
SpellMaxHPs6=100
SpellRecastDelay6=3m
SpellCondition6=Null
SpellType6=dps
SpellConditions - I dont know if SKs have any spells that work better under certain conditions but I included it in the skbot just in case. You could use things like Target.CleanName.Equal[a giant rat]. Just about any thing you could use that would evaluate to true or false in code. Just do not include any ${} in it, you can put ! in front of it for false evaluations. Also they must be one variable true false evaluations, math evalutaions (<>=) cannot be read and will most likely cause the spell to never cast.

SpellTypes
Aggro - These spells are only used when trying to get aggro on a mob. They ignore the globalcooldown setting in order to get aggro as fast as possible. Their timers are reset any time there is a new add detected or lost aggro on a mob.
Lifetap - These spells are pretty much what they say. Your lifetap spells. I'll get to the importance of differentiating these in a second.
DPS - These spells again are what they say. Your dps spells.

The importance of the spell types beyond aggro is the priority they are given. Aggro are given first priority, lifetaps second, and dps last.

Also just as an example. If you wanted to use the alt ability LeechTouch when you were about to die, you could do this.
Code:
SpellName3=Leech Touch
SpellSlot3=alt
SpellMaxMobs3=100
SpellMinMobs3=1
SpellMaxMobHPs3=100
SpellMinMobHPs3=20
SpellMinMana3=0
SpellMaxHPs3=5
SpellRecastDelay3=36m
SpellCondition3=Null
SpellType3=lifetap
You could do the same with harm touch if you wanted and any other mob targeted alt abilities.

Code:
[Alerts]
AlertDeathAudioFile=null  *Path and name of audio file to play in case of death (example C:\music.mp3)
AlertUnsafePC=null *Path and name of audio file to play if an unsafe pc is detected.
Value=1  *The number of mob alerts in this section
AlertMobName1=null  *The name of the mob to play the audio file for, can be a partial name
AlertAudioFile1=null  *The path and name of the audio file to play
This is something else that probably will not have much use in this bot since it is not meant to be an afk bot. But I included it just in case. Will play the specified file upon death, or upon encountering a listed mob.


Hopefully I explained everything sufficiently here, if you have any questions or need help with something please let mek now.
 
Last edited:
Once you have your ini set up it's time to run the bot!

Usage
The command line usage is as follows:

/macro skbot <iniName> <groupRole>

As with my magebot you can have custom ini names, so that you can make one for all roles, different zones or whatever you may want. Custom INI names are named like this skbotsettings_CustomName.ini If no ini name is supplied or if default is used skbotsettings.ini will be loaded by default.

Also you can change your grouprole on the command line if you want. This will take over whatever is set in the ini file. If you want to load the default ini and use a different role simply use /macro skbot default <group Role>. Again as stated above, the group roles are: maintank, offtank, dps.

When you first start the bot, it creates an anchor point and the location where it is standing. This will be used for a central camp location to work from.

Add Detection
It will detect mobs within a radius around the bot of mobRadius setting in the ini (unless running in dps mode where it only assist the mainassist). Once a mob is detected it will engage it and move into melee range and proceed to kill it based on its role. One thing to note, it will detect adds from its location, so if it moves off the anchor point to attack a mob, it may detect something further away from camp as an add. To prevent this from getting to bad, I added a leash effect where if it gets twice the distance of mobRadius from the anchor point it will return back to the anchor point. Also it will not attack any mobs beyond twice the mobRadius that it may already be in combat with. When not in combat it will leash back to the anchor point if it is half of mobRadius away.

Also, the add detection does not only happen from the sk, it will check each person in the group for adds within mobRadius. The same rules apply as above, it will not attacking anything further than twice the mob radius from the sk (note I said sk here, if he is not at the anchor point he'll go help a group member up to twice mobRadius from him). Just keep in mind it is possible under very bad circumstances to cause the Sk to get a good distance away from it's anchor point.


Moving around
I've added detection to try to prevent from getting stuck. But in the case where it does detect that it is stuck, it will reset its anchor point to where it is stuck at to prevent it from continously running around. If the sk is summoned and is more than four times the mobRadius from the anchor point he will reset his home location to the point where he was summoned to instead of trying to get back.

Death
In the event that the sk dies, the bot will continue to run in a loop waiting for a rez. Currently it will do this either until you rez it or you end the macro. I will most likely change this to have a time out after so long of waiting but for now it will wait indefinately.

Pulling and setting up a path
To begin the first thing you want to do to set up pulling is record a path. To do this run my pathrecord.mac using /macro pathrecord.mac <pathname> The <pathname> is option and if omitted it will use Zone.ShortName as the pathname. If you set Default on the path in the ini it will use Zone.ShortName as well.

Once you start the pathrecord.mac just walk around in the path that you would like the sk to walk to find mobs. (I suggest using stealth while doing this or making sure there aren't any mobs up to aggro you). Once you finish just end the macro.

Set your ini settings the way you would like them and thats it, enable pull mode while near the starting location of the and the sk should go out and pull.

Other notes
One thing to note on gating mobs, it will attempt to detect this (not by the gate spell but by the mob suddenly being far away). If a mob does gate and does not summon the sk, he will continue to fight anything in camp. Once everything in camp is dead, he will wait up to 30 seconds for the mob that gated to return, if it does not he will clear it from his aggro list.

And finally if you do find a bug (which I'm sure there are plenty of in this version) please report it. I can't correct it if I do not know about it. If you have a feature you would like to see added, please post here or pm me and let me know. Like my magebot this bot logs most of it's actions, so I may ask you to provide me with your log file. If I ask for this it is located in your MQ2\Logs folder. Now this file can contain character names and such in it, so it is up to you if you want to look through the log and remove those before sending it to me. I do not recommend posting any logs in a public location.
_______________________________________________________

I think that pretty much covers most of the important stuff. I'll update these posts as needed. If something is not clear to you please let me know!
 
This looks very interesting Devestator I haven't played eq in months but if this works good maybe I could come back and try it out :).

eqisdead
 
nice will try it out soon, a little busy right now getting all the AA I can while the getting is good :)

You couldn't have picked 2 better bots haha, I box a SK and a mage.
 
so far it works great. handled up to 8 adds at once so far with no problems. I have only been using this in the maintank role. I do have a couple questions though. Is it possible to setup something to use the Vilify spell line when you have a few adds in camp? I added the spell in to the INI as an aggro spell so it gets cast every time now, but was hoping to get it reserved for adds only. Is there any epic 1.5 or 2.0 support planned for this or should I just add the clicky in to the ini? and lastly is it possible to add in some sort of bandolier support for clickies that are in the secondary slot? I usually use zbot for my tanks and there is a problem with that clicky also. Seems the Muramite's Shield of Legend is a pain in the arse clicky =p skbot.mac says it cant find the shield and then skips it unless I have a 1hander and a shield equiped. any type of 2 hander and it causes problems and skips the clicky.

All in all I gotta say you did a F'ing awsome job on this macro and it is quickly becoming one of my favorites as I learn more about it. Have to wait for my friend to log on before I can test out the offtank role, sadly both my tanks are on the same account.
 
so far it works great. handled up to 8 adds at once so far with no problems. I have only been using this in the maintank role. I do have a couple questions though. Is it possible to setup something to use the Vilify spell line when you have a few adds in camp? I added the spell in to the INI as an aggro spell so it gets cast every time now, but was hoping to get it reserved for adds only.

For the Vilify, from what I'm reading on alla, it's just an ae aggro spell correct? You can increase your min number of mobs on the spell entry in the ini (SpellMinMobs setting) to 2 (or however many you want in camp before you use it). That should prevent it from being cast if you only have one mob in the camp. If I'm misunderstanding how you want to use it, let me know. As I said my sk is only 65 so I have no experience with that spell to know the best way to use it.

Is there any epic 1.5 or 2.0 support planned for this or should I just add the clicky in to the ini?
The epics you should be able to the INI as self buffs. Just put the name as the epic, and the bufftext as whatever the buff icon shows when it's on you. Here again, I'm assuming by what I'm reading on alla that the sk epic clickes are just buffs. If it's like the monk 1.5 and a short duration buff that you'd want to use only in certian cirumstances I'd have to look into it more.

and lastly is it possible to add in some sort of bandolier support for clickies that are in the secondary slot? I usually use zbot for my tanks and there is a problem with that clicky also. Seems the Muramite's Shield of Legend is a pain in the arse clicky =p skbot.mac says it cant find the shield and then skips it unless I have a 1hander and a shield equiped. any type of 2 hander and it causes problems and skips the clicky.
Hmm, looking at the shield on alla I can see where that would be a problem if your using a 2hander. The way MQ2Cast (which is what I use to cast spells and clickies) works if it has to equip the item to cast it just swaps it in and clicks it then swaps it back out. I will have to add special coding for something like this to check what is equipped and if there is suffucient free inventory space etc. The same problem would happen if you had a sword and board on and needed to equip a 2hander for a clicky, it wouldn't know how to do it. I'll add it to my future additions and see what I can come up with for it, it's not impossible, just tricky hehe :)

All in all I gotta say you did a F'ing awsome job on this macro and it is quickly becoming one of my favorites as I learn more about it. Have to wait for my friend to log on before I can test out the offtank role, sadly both my tanks are on the same account.

Thanks! Feel free to post your results with the offtank role when you test it out, as I said it was one of the harder things to code, so I expect it will be one of the buggier modes.
 
SkBot V1.1 - 01/04/2009 Updates

Files Changed
skBot.mac
devCommon.inc v1.1
devMovement.inc v1.1

Bug Fixes
-Fixed a bug with spell casting priority that coudl cause a lifetap and dps spell to cast back to back ignoring spellcooldown setting.

New Additions
-Updated for devCommon.inc v1.1 changes.
 
You got the Vilify right, I am just retarted for not completely reading that walk through you posted. Adjusted the minmob option and it works perfectly.

I will add the epic in to the aggro spell line so it casts at the right time and see if it works.


dps mode works perfect although I dont use the dots.

still waiting to test offtank mode. Currently in the wrong zone to accurately test that one. Way to hard to keep track when i am training my group =)
 
actually dps mode seems to have a range issue. I am pulling multiple mobs and it starts out fine but after a couple mobs the sk is out of range to melee and wont move up.
[MQ2] >> We are in combat, but cannot find a target. is also something that pops up and the SK wont target anything but himself.
 
When you say the sk wont move up after a few mobs, is he standing at his anchor point (the spot where you started the bot), or somewhere else?

The cannot find target message, was that in dps mode?

If you could pm me your log file of one of the times when having these problems it most likely could help me track down the cause a little. I have an idea on the first one that I'm going to look into in the meantime.
 
I start the mac in dps mode, then go pull a train with my monk. When I get back to camp with about 8-10 mobs the tank (not boxed) gets aggro on all the mobs. The SK will assist from his anchor point for a couple mobs then if a mob is too close he backs up and assists again, after that he just stands there getting "too far away" msg's.

The MQ2 msg was in dps mode. I didn't notice it in maintank mode but then again I wasn't really looking for it.

Let me look up where you said the log files were in that walk through and I will edit out the names and PM it to you when I get home from work. (around 3pm pacific)
 
I start the mac in dps mode, then go pull a train with my monk. When I get back to camp with about 8-10 mobs the tank (not boxed) gets aggro on all the mobs. The SK will assist from his anchor point for a couple mobs then if a mob is too close he backs up and assists again, after that he just stands there getting "too far away" msg's.

The MQ2 msg was in dps mode. I didn't notice it in maintank mode but then again I wasn't really looking for it.

Let me look up where you said the log files were in that walk through and I will edit out the names and PM it to you when I get home from work. (around 3pm pacific)

fantastic post I cant wait to try this
 
this works realy realy well.

Great post, i will try it for a few days, and give you a little feedback )

modified it for my 85 sk, it works like a charm

/maxine
 
Offtank mode tested.

As long as your main tank grabs a target at the start it works beautifully. If your main tank is afk or slacking (I used a real player as main tank to test this) the SK will just sit there doing nothing. I tried this with both OutOfCombatSit=false and OutOfCombatSit=true. Same results for both, mobs will beat on your group while the SK stands / sits there watching until the main tank targets a mob.

I am still encountering the out of melee range, with both dps and offtank modes. However I didn't get the MQ2 error msg in offtank mode. I am still trying to duplicate the MQ2 error msg in dps mode but I haven't had any luck.

I am PMing you my log again now, hope it helps :)
 
Ok, I'll look into getting fixes out for this stuff in the next patch. Hopefully will have it up tomorrow night.

I know exactly what the problem is with it not attacking in offtank mode until the main tank gets a target, I honestly didn't even think about people slacking off lol. The way I coded it for dps and off tank mode it dosn't even start to look for adds until it assists and finds a target from the main assist. It's an easy fix though for that.
 
SkBot V1.2 - 01/07/2009 Updates

Files Changed
skBot.mac
devCommon.inc v1.2
devMovement.inc v1.2

Bug Fixes
-Added a check for too far away message and made the bot move close if it gets it.

New Additions
-Offtank mode should now immediately engage any mobs in the camp if the main tank does not have them targeted yet, incase they are afk. If the main tank does have them targeted when they come into camp then the sk should not attack until the assist pct, as long as it is only one mob. It will continue to pick up adds as before.

Additional notes
If you are using v2.5 of my mageBot, devCommon 1.2 and devMovement 1.2 should work fine with it until I get v2.6 of the mageBot released with the fixes to the stuck detection problem in 2.5.
 
Maintank mode, Sk backs up when it gets the target and ignores the "too far away" msg's. only holds agro with spells now.

Doesn't do it every time but does it fairly often. If you move the SK up in to range it will just back up again and stand there casting, almost killed my over zealous wizard bot lol.

Also what am I doing wrong here?

SpellName3=Innoruuk's Dark Blessing
SpellSlot3=item
SpellMaxMobs3=100
SpellMinMobs3=1
SpellMaxMobHPs3=100
SpellMinMobHPs3=5
SpellMinMana3=20
SpellMaxHPs3=70
SpellRecastDelay3=5m
SpellCondition3=Null
SpellType3=aggro

I can't get the SK to click the 2.0. I have tried different SpellType (aggro, lifetap, dps) all with no luck
 
Hrmm what mobs are you fighting with that small of a hitbox lol.. If it gets the to far away message it should move within a range of 15... if it gets closer than 7 it backs up a tad to make sure it dosn't get to close or in case of being summoned under the mob.

Do me a favor and when it's standing there with too far away spamming do a /echo ${Target.Distance} and tell me what it returns. Also whats your mobRadius set to in your ini?