• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Lightweight semibot group set

Higamorph

New member
Joined
Feb 6, 2006
RedCents
30¢
I wrote these as a way to box my 5 lowbie toons. They are not full featured bots but work very well in my experience.

Rich (BB code):
|Written by Higamorph for Red Guides
|Written 3 of 2007
|Edited last on Sunday, April 7th, 2007
|Purpose - To semiautomate a melee player for use in a monitered botgroup.
|The macro as written requires mq2melee, and mq2moveutils to be loaded.   
|replace any instance of REPLACEME with the name of the main toon.  
|
|Thanks to Thez and Pugs for helping with my macro code. 
|
|Responds to the following commands in group chat or via tells.
|Commands
|Kill this  - attack the current target
|follow	 - start autofollow using stick
|wait here  - end autofollow
|camp	   - camps the whole group out
|reload	 - reloads the macro, left in from creation, though it was nifty
|
|The toons should autojoin a group after being invited.
|Start Syntax
|/macro group.mac AssistName
#include spell_routines.inc

#chat tell
#event attack "#*# tells the group, 'Kill this'"
#event attack "#*# tells you, 'Kill this'"
#event follow "#*# tells the group, 'follow'"
#event follow "#*# tells you, 'follow'"
#event stopfollow "#*# tells the group, 'wait here'"
#event stopfollow "#*# tells you, 'wait here'"
#event camp "#*# tells the group, 'camp'"
#event camp "#*# tells you, 'camp'"
#event reload "#*# tells the group, 'reload'"
#event reload "you tell your party, 'reload'"
#event invite "#*#invites you to join#*#"

sub main
/call CheckPlugin MQ2moveutils
/call CheckPlugin MQ2melee
/declare AssistName string outer
/varset AssistName ${Param0}
/melee load
:loop
/doevents
/goto :loop

|Place the main charcters name after target for the follow to work correctly
Sub Event_follow
	/target ${AssistName}
	/tt following
	/stick hold 10 moveback uw
	/return

Sub Event_stopfollow
	/stick off
	/return

|Place the main charcters name after target for the assist and attack features work correctly
	Sub Event_attack
	/assist ${AssistName}
	/delay 2s
	/tt Assisting on %T
	/stick hold 10 moveback uw
	/attack on
	/return
	
Sub Event_camp
	/sit
	/g Camping
	/camp
	/delay 30s
	/end
	/return

Sub Event_reload
	/macro group.mac
	/return

Sub Event_invite  
	/invite  
	/return 
	
|Code from EQManiac's brdhoh.mac
Sub CheckPlugin(string PluginName)
	/if (!${Plugin[${PluginName}].Name.Equal[${PluginName}]}) /plugin ${PluginName} noauto
	/if (!${Plugin[${PluginName}].Name.Equal[${PluginName}]}) {
	   /echo Exit Macro: Failed to load REQUIRED plugin ${PluginName}
	   /endmacro
	}
/return
 
Last edited:
This is the caster macro to go with the above melee macro
Rich (BB code):
|Written by Higamorph for Red Guides
   |Written 3 of 2007
   |Edited last on April 7th, 2007
   |Purpose - To semiautomate a melee player for use in a monitered botgroup.
   |The macro as written requires mq2melee, and mq2moveutils to be loaded.   
   |replace any instance of REPLACEME with the name of the main toon.  
  |
   |Thanks to Thez and Pugs for helping with my macro code. 
  |
   |Commands
   |Kill this  - attack the current target
   |follow	 - start autofollow using stick
   |wait here  - end autofollow
   |camp	   - camps the whole group out
   |reload	 - reloads the macro, left in from creation, though it was nifty
   |
   |The toons should autojoin a group after being invited.
   |See in code comments for changeable variables
   |Start Syntax
   |/macro wiz.mac Assistname Nukepct1 nukepct2 NukeSpell rootspell
   
   #include spell_routines.inc
   #turbo
   #chat tell
   #event attack "#*# tells the group, 'Kill this'"
   #event attack "#*# tells you, 'Kill this'"
   #event follow "#*# tells the group, 'follow'"
   #event follow "#*# tells you, 'follow'"
   #event stopfollow "#*# tells the group, 'wait here'"
   #event stopfollow "#*# tells you, 'wait here'"
   #event camp "#*# tells the group, 'camp'"
   #event camp "#*# tells you, 'camp'"
   #event reload "#*# tells the group, 'reload'"
   #event reload "you tell your party, 'reload'"
   #event invite "#*#invites you to join#*#"
   
   sub main
   	/call CheckPlugin MQ2moveutils
   	/call CheckPlugin MQ2melee
   
   	/declare AssistName string outer
   	/varset AssistName ${Param0}
   	/declare NukePct1 int outer
   	/varset NukePct1 ${Param1
   	/declare NukePct2 int outer
   	/varset NukePct2 ${Param2}
   	/declare Nuke1 string outer
   	/varset Nuke1 ${Param3}
   	/declare Move1 string outer
   	/varset Move1 ${Param3}
   	/ini "wizard.ini" "${Me}" "Move1" "${Move1}"
   	/ini "wizard.ini" "${Me}" "Nuke1" "${Nuke1}" 
   	:loop
   		/doevents
   		/goto :loop
   
   Sub Event_follow
   	/target ${AssistName}
   	/tt following
   	/stick hold 10 moveback uw
   /return
   
   Sub Event_stopfollow
   	/stick off
   /return
   
   Sub Event_attack
   	/assist ${AssistName}
   	/pause 4s
   	/g Nukes incoming on %t
   	/call nuke
   /return
   	
   Sub Event_camp
   	/sit
   	/g Camping
   	/camp
   	/delay 30s
   	/end
   /return
   
   Sub Event_reload
   	/macro wiz.mac
   /return
   
   
   |Ini support thanks to thez =D
   Sub Nuke
   	/stick off
   	/stand
   	:nukeloop
   	/if (${Target.PctHPs}>${nukepct1}) /call cast "${Ini[wizard.ini,${Me},Nuke1,"NULL"]}" gem1
   	/if (${Target.PctHPs}>${nukepct3}) /call cast "${Ini[wizard.ini,${Me},Move1,"NULL"]}" gem2
   	/if (${Target.PctHPs}>${nukepct1}) /goto :nukeloop
   /return
   
   Sub Event_invite  
   	/invite  
   /return 
   	
   |Code from EQManiac's brdhoh.mac
   Sub CheckPlugin(string PluginName)
   	/if (!${Plugin[${PluginName}].Name.Equal[${PluginName}]}) /plugin ${PluginName} noauto
   	/if (!${Plugin[${PluginName}].Name.Equal[${PluginName}]}) {
   	   /echo Exit Macro: Failed to load REQUIRED plugin ${PluginName}
   	   /endmacro
   	}
   /return

The macro will generate an .ini file that looks like this called wizard.ini
Rich (BB code):
[Charname]
 Nuke1=Fire Bolt
 Move1=Root
 
Last edited:
Couple of comments:

1) Instead of typing REPLACEME, make it a variable like this:
Rich (BB code):
/declare AssistName string outer
/varset AssistName REPLACEME
Then replace the REPLACEME with ${AssistName} in the macro. No *real* reason to do that, except that it allows you to set the name at the top of the macro, instead of searching for it through the code.

2) In your first macro, you /call PluginCheck (or something like that), but the sub for that isn't listed. That'll cause problems.

3) If you're interested in looking at ini's you can look at my DoTParse.inc for some good examples.

If you just want the answer, then...


Rich (BB code):
/call cast "${Ini[BotMacSettings.ini,Wizard,Nuke1,"NULL"]}" gem2
/call cast "${Ini[BotMacSettings.ini,Wizard,Nuke2,"NULL"]}" gem3
/call cast "${Ini[BotMacSettings.ini,Wizard,Nuke3,"NULL"]}" gem4

With an ini that would be formated like this:
BotMacSettings.ini
Rich (BB code):
[Wizard]
Nuke1=Fire Bolt
Nuke2=Numbing Cold
Nuke3=Root
 
Thanks for the advice Thez. I'll look at making those changes. And thank you for pointing out the missing subs, i made that change in a hurry.
 
Try this for a revision.

Syntax:
/macro wiz.mac Assistname Nukepct1 nukepct2 NukeSpell rootspell
--If you do not type in any of the parameters after Assist, the macro will attempt to get them from Wizard.ini, which will contain the settings that you used in the previous use of the macro.

--If you want to change the NukePcts, or spells used, "/echo Set Pct# to NewPct", "/echo Nuke NewNukeSpell", "/echo Root NewRootSpell"

Rich (BB code):
|Written by Higamorph for Red Guides
   |Written 3 of 2007
   |Edited last on April 7th, 2007
   |Purpose - To semiautomate a melee player for use in a monitered botgroup.
   |The macro as written requires mq2melee, and mq2moveutils to be loaded.   
   |replace any instance of REPLACEME with the name of the main toon.  
  |
   |Thanks to Thez and Pugs for helping with my macro code. 
  |
   |Commands
   |Kill this  - attack the current target
   |follow	 - start autofollow using stick
   |wait here  - end autofollow
   |camp	   - camps the whole group out
   |reload	 - reloads the macro, left in from creation, though it was nifty
   |
   |The toons should autojoin a group after being invited.
   |See in code comments for changeable variables
   |Start Syntax
   |/macro wiz.mac Assistname Nukepct1 nukepct2 NukeSpell rootspell
   
   #include spell_routines.inc
   #event attack "#*# tells the group, 'Kill this'"
   #event attack "#*# tells you, 'Kill this'"
   #event follow "#*# tells the group, 'follow'"
   #event follow "#*# tells you, 'follow'"
   #event stopfollow "#*# tells the group, 'wait here'"
   #event stopfollow "#*# tells you, 'wait here'"
   #event camp "#*# tells the group, 'camp'"
   #event camp "#*# tells you, 'camp'"
   #event reload "#*# tells the group, 'reload'"
   #event reload "you tell your party, 'reload'"
   #event invite "#*#invites you to join#*#"
   #event changePct "[MQ2] Set Pct#0# to #1#"
   #event changenuke "[MQ2] Nuke #0#"
   #event changeroot "[MQ2] Root #0#"   
   
   sub main
   	/call CheckPlugin MQ2moveutils
   	/call CheckPlugin MQ2melee
   	/declare AssistName string outer
   	/varset AssistName ${Param0}
   	
   /if (${Defined[Param1]}) {
   	/squelch /declare NukePct1 int outer
   	/varset NukePct1 ${Param1}
   	/ini "wizard.ini" "${Me}" "NukePct1" "${Param1}"
   	} else { /varset NukePct1 ${Ini[wizard.ini,${Me},NukePct1,95]} }
   	
   /if (${Defined[Param2]}) {
   	/squelch /declare NukePct2 int outer
   	/varset NukePct2 ${Param2}
   	/ini "wizard.ini" "${Me}" "NukePct2" "${Param2}"
   	} else { /varset NukePct2 ${Ini[wizard.ini,${Me},NukePct2,50]} }
   	
   /if (${Defined[Param3]}) {
   	/squelch /declare NukeSpell string outer
   	/varset NukeSpell ${Param3}
   	/ini "wizard.ini" "${Me}" "NukeSpell" "${Param3}" 
   	} else { /varset NukeSpell ${Ini[wizard.ini,${Me},NukeSpell,"NULL"]} }
   	
   /if (${Defined[Param4]}) {
   	/squelch /declare RootSpell string outer
   	/varset RootSpell ${Param4}
   	/ini "wizard.ini" "${Me}" "RootSpell" "${Param4}"
   	} else { /varset RootSpell ${Ini[wizard.ini,${Me},RootSpell,"NULL"]} }
   	
   		:loop
   		/doevents
   		/goto :loop
   
   Sub Event_follow
   	/target ${AssistName}
   	/tt following
   	/stick hold 10 moveback uw
   /return
   
   Sub Event_stopfollow
   	/stick off
   /return
   
   Sub Event_attack
   	/assist ${AssistName}
   	/pause 4s
   	/g Nukes incoming on %t
   	/call nuke
   /return
   	
   Sub Event_camp
   	/sit
   	/g Camping
   	/camp
   	/end
   /return
   
   Sub Event_reload
   	/macro wiz.mac
   /return
   
   Sub Nuke
   	/stick off
   	/stand
   	:nukeloop
   	/if (${Target.PctHPs}>${NukePct1}) /call cast "${NukeSpell}" gem1
   	/if (${Target.PctHPs}>${NukePct2}) /call cast "${RootSpell}" gem2
   	/doevents
   	/if (${Target.PctHPs}>${NukePct1}) /goto :nukeloop
   /return
   
   sub event_changeroot(string NewRoot)
      /varset RootSpell ${NewRoot}
      /echo Now rooting with ${RootSpell}
      /return
      
   sub event_changenuke(string NewNuke)
      /varset NukeSpell ${NewNuke}
      /echo Now nuking with ${NukeSpell}
      /return
      
   sub event_changePct(int WhatPct,int NewPct)
      /varset NukePct${WhatPct} ${NewPct}
      /echo NukePct${WhatPct} set to ${NewPct}
      /return

   
   Sub Event_invite  
   	/invite  
   /return 
   	
   |Code from EQManiac's brdhoh.mac
   Sub CheckPlugin(string PluginName)
   	/if (!${Plugin[${PluginName}].Name.Equal[${PluginName}]}) /plugin ${PluginName} noauto
   	/if (!${Plugin[${PluginName}].Name.Equal[${PluginName}]}) {
   	   /echo Exit Macro: Failed to load REQUIRED plugin ${PluginName}
   	   /endmacro
   	}
   /return
 
Lightweight semibot group set

Users who are viewing this thread

Back
Top
Cart