HardOne
Member
- Joined
- Jan 15, 2006
- RedCents
- 61¢
Here is a pretty simple macro I wrote for the Emu server I play on. The mage willow follow you around, DS, Assist, and a few other options. If you use MQ2IRC you can issue commands to port using npcs.
Rich (BB code):
|------------------------------------------------------------|
| Includes
|------------------------------------------------------------|
#Include spell_routines.inc
|------------------------------------------------------------|
| Events
|------------------------------------------------------------|
#Chat Chat
#Chat tell
#Event DEATH "You have entered#*#"
#Event DEATH "You have been slain#*#"
#Event CHAT "#*# tells you, '#*#"
#Event GROUP "<#1#> #2#"
#Event COH "<#*#> coh #1#"
#Event COH "#*# tells you, 'coh #1#"
#Event HELP "[MQ2] help"
#Event SIT "[MQ2] sit #1#"
#Event ASSISTAT "[MQ2] assistat #1#"
#Event ASSIST "[MQ2] assist #1#"
#Event MASTER "[MQ2] master #1#"
#Event FOLLOW "[MQ2] follow #1#"
#Event SFG "<#1#> sfg"
#Event HATE "<#1#> hate"
#Event CRYSTAL "<#1#> crystal"
#Event ACRYLIA "<#1#> acry"
#Event FIRE "<#1#> fire"
#Event FAYDARK "<#1#> faydark"
#Event BUTCHER "<#1#> butcher"
#Event UNREST "<#1#> unrest"
#Event KITHICOR "<#1#> kithicor"
#Event KEEP "<#1#> keep"
#Event LAIR "<#1#> lair"
#Event OVERTHERE "<#1#> overthere"
#Event LAKE "<#1#> lake"
#Event MAZE "<#1#> maze"
#Event MARR "<#1#> marr"
#Event SOLUSEK "<#1#> solusek"
Sub Main
|------------READ THIS SECTION AND EDIT IF NEEDED-----------|
/Declare UseEpic outer TRUE
/Declare Follow outer TRUE
/Declare Assist outer TRUE
/Declare Sit outer FALSE
/Declare BigDS outer FALSE
/Declare DSTarg outer TRUE
/Declare PetDS outer FALSE
/Declare PetProc outer FALSE
/Declare Proc outer FALSE
|-----------IRC---------------------------------------------|
/Declare UseIRC outer TRUE
/Declare IRCServerAddr outer "127.0.0.1"
/Declare IRCPort outer "6667"
/Declare IRCChannel outer "#Bot"
|-----------SPELLS------------------------------------------|
/Declare SlowNuke outer "Fickle Inferno"
/Declare FastNuke outer "Scalding Sands"
/Declare PBAE outer "Wind of the Desert"
/Declare BIGDS outer "Scorching Skin"
/Declare PetHeal outer "Renewal of Aenda"
/Declare PetSummon outer "Essence of Air"
/Declare PetBuff outer "Burnout VI"
/Declare ProcBuff outer "Burning Aura"
/Declare DS outer "Circle of Magmaskin"
/Declare Epic outer "Staff of Elemental Essence"
/Declare EpicPetBuff outer "Elemental Conjunction"
/Declare COH outer "Call of the Hero"
/Declare GateItem outer "Newbie Charm"
|-----------PERCENTS TO DO THINGS---------------------------|
/Declare AssistAt outer 99
/Declare HealAt outer 30
/Declare ManaAt outer 5
/Declare PetHealAt outer 60
|-----------STOP EDITING -----------------------------------|
|-----------TIMERS------------------------------------------|
/Declare EpicTimer timer outer 0
/Declare CoHealing timer outer 0
/Declare CoMana timer outer 0
/Declare Master outer 0
/Declare DSTimer timer outer 0
/Declare MasterID outer 0
|------------------------------------------------------------|
| Main Loop (Start of Macro)
|------------------------------------------------------------|
/echo
/echo Mage Bot 2.0 started!
/echo Type /echo Help for more details!
/echo
/if (!${Target.ID}) {
/echo Target the Tank when you run this macro to designate him as MT
/end
} else {
/if (${Target.Type.Equal[PC]}) {
/varset Master ${Target}
/varset MasterID ${Target.ID}
} else {
/if (${Target.Type.Equal[NPC]}) {
/echo Target the Tank when you run this macro not an NPC to designate him as MT.
/end
}
}
/call MemSpells
/pet hold
/if (${UseIRC}) {
/delay 5
/iconnect ${IRCServerAddr} ${IRCPort} ${IRCChannel} ${Me}
}
:MyMainLoop
/if (${Me.Casting.ID}) /goto :MyMainloop
/doevents
/call Checks
/if (${Follow} && !${Sit}) {
/target ${Master} pc
/stick hold
}
/if (${Sit} && !${Follow}) /sit
/if (${Assist}) {
/target ${Master}
/assist
/delay 5
/if (${Target.Type.Equal[NPC]} && ${Target.PctHPs}<${AssistAt}) {
/pet Attack
/pet Focus
/delay 5
/pet Attack
/call Assist
}
}
/goto :MyMainLoop
/return
Sub Checks
/if (${DSTarg}) /call DS
/if (${BigDS}) /call BIGDS
/if (${Proc}) /call Proc
/call PetBuffs
/call PetHealth
/call CheckMyHealth
/call CheckMyMana
/return
Sub Assist
/popup Assisting on (${Target})!
:Attack_Loop
/if (${Target.Type.Equal[NPC]} && ${Target.PctHPs}<${AssistAt}) {
/if (${UseIRC}) /i say Assisting on -- (${Target}) --!
/pet Attack
/call cast ${FastNuke} gem2
/delay 40
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Attack_Loop
/if (${Macro.Return.Equal["CAST_NOTARGET"]}) /return
/if (${Macro.Return.Equal["CAST_RESISTED"]}) /goto :Attack_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :Attack_Loop
/call Checks
:Attack2_Loop
/if (${Target.Type.Equal[NPC]} && ${Target.PctHPs}<${AssistAt}) {
/pet Attack
/call cast ${SlowNuke} gem1
/delay 40
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Attack2_Loop
/if (${Macro.Return.Equal["CAST_NOTARGET"]}) /return
/if (${Macro.Return.Equal["CAST_RESISTED"]}) /goto :Attack2_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :Attack2_Loop
}
/call Checks
/goto :Attack_Loop
} Else {
}
/return
Sub BIGDS
/if (${Me.SpellReady[${BIGDS}]}) {
:BiIGDS_Loop
/if (${UseIRC}) /i say -- ${BIGDS} -- on ${Master}
/pet hold
/delay 3
/target ${Master}
/delay 5
/call cast ${BIGDS} gem8
/delay 20
}
/return
Sub DS
/if (${Me.SpellReady[${DS}]} && ${DSTimer}==0) {
/if (${UseIRC}) /i say -- ${DS} -- on ${Master}
:DS_Loop
/target ${Master}
/delay 5
/call cast ${DS} gem9
/delay 20
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :DS_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :DS_Loop
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset DSTimer 900s
}
/return
Sub CheckMyHealth
/if (${Me.PctHPs}<30 && ${CoHealing}==0) {
:HealMe_Loop
/target myself
/delay 5
/call cast "Charm of Healing" item
/delay 20
/if (${Macro.Return.Equal["CAST_NOTREADY"]}) {
/varset CoHeal ${FindItem["Charm of Healing"].Timer}
/return
}
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :HealMe_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :HealMe_Loop
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset EpicTimer ${FindItem["Charm of Healing"].Timer}
}
/return
Sub CheckMyMana
/if (${Me.PctMana}<5 && ${CoMana}==0) {
:COMana_Loop
/target myself
/delay 5
/call cast "Charm of Mana" item
/delay 20
/if (${Macro.Return.Equal["CAST_NOTREADY"]}) {
/varset CoMana ${FindItem["Charm of Mana"].Timer}
/return
}
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :COMana_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :COMana_Loop
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset CoMana ${FindItem["Charm of Mana"].Timer}
}
/return
Sub MakePet
:MakePet_Loop
/if (!${Me.Pet.ID}) {
/if (${UseIRC}) /i say Summoning your pet with spell: ${PetSummon}!
/echo Summoning your pet with spell: ${PetSummon}
/call Cast ${PetSummon}
/delay 20
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :MakePet_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :MakePet_Loop
}
/return
Sub PetHealth
/if (${Me.Pet.ID}) {
:PetHeal_Loop
/if (${Me.Pet.PctHPs}<${PetHealAt}) {
/if (${UseIRC}) /i say Healing your pet with spell: ${PetHeal}!
/echo Healing your pet with spell: ${PetHeal}
/call Cast ${PetHeal} gem5
/delay 20
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :PetHeal_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :PetHeal_Loop
}
}
/return
Sub PetBuffs
/if (${Me.Pet.ID}) {
/if (!${Me.PetBuff[${PetBuff}]}) {
/target ${Me.Pet}
/echo Pet needed ${PetBuff}!
/call Cast ${PetBuff} gem7
}
/if (!${Me.PetBuff[${DS}]} && ${PetDS}) {
/target ${Me.Pet}
/echo Pet needed ${DS}!
/call Cast ${DS} gem9
}
:Epic_Loop
/if (!${Me.PetBuff[${EpicPetBuff}]} && ${UseEpic} && ${EpicTimer}==0) {
/target ${Me.Pet}
/if (${UseIRC}) /i say Pet needed ${EpicPetBuff}!!
/echo Pet needed ${EpicPetBuff}!
/call Cast ${Epic} item
/delay 20
/if (${Macro.Return.Equal["CAST_NOTREADY"]}) {
/varset EpicTimer ${FindItem[${Epic}].Timer}
/return
}
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :Epic_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :Epic_Loop
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset EpicTimer ${FindItem[${Epic}].Timer}
}
} else {
/echo You dont have a pet! Making one!
/call MakePet
}
/return
|------------------------------------------------------------|
| Memorize your spells
|------------------------------------------------------------|
Sub MemSpells
/if ( !${Me.Gem[${SlowNuke}]} ) {
/memspell 1 ${SlowNuke}
/delay 150
}
/if ( !${Me.Gem[${FastNuke}]} ) {
/memspell 2 ${FastNuke}
/delay 150
}
/if ( !${Me.Gem[${PBAE}]} ) {
/memspell 3 ${PBAE}
/delay 150
}
/if ( !${Me.Gem[${COH}]} ) {
/memspell 4 ${COH}
/delay 150
}
/if ( !${Me.Gem[${PetHeal}]} ) {
/memspell 5 ${PetHeal}
/delay 150
}
/if ( !${Me.Gem[${PetSummon}]} ) {
/memspell 6 ${PetSummon}
/delay 150
}
/if ( !${Me.Gem[${PetBuff}]} ) {
/memspell 7 ${PetBuff}
/delay 150
}
/if ( !${Me.Gem[${BIGDS}]} ) {
/memspell 8 ${BIGDS}
/delay 150
}
/if ( !${Me.Gem[${DS}]} ) {
/memspell 9 ${DS}
/delay 150
}
/return
|------------------------------------------------------------|
| Find Person who just sent you a tell
|------------------------------------------------------------|
Sub FindExactPC(string name)
/declare nameid int local
/declare counter int local 1
:FindNext
/if (!${NearestSpawn[${counter}, pc ${name}].ID}) /return NOT_FOUND
/varset nameid ${NearestSpawn[${counter}, pc ${name}].ID}
/if (${Spawn[${nameid}].CleanName.Equal[${name}]}) {
/target id ${nameid}
/delay 1s ${Target.ID}==${nameid}
/if (${Target.ID}==${nameid}) /return TARGET_SUCCESS
}
/varcalc counter ${counter}+1
/if (${NearestSpawn[${counter}, pc ${name}].ID}) /goto :FindNext
/return NOT_FOUND
Sub Event_Chat(string ChatType,string Sender,string ChatText)
/if ((!${ChatType.Equal[${mychannel}]})&&(!${ChatType.Equal[TELL]})) /return
/if (!${Spawn[${Sender}].ID}) {
/e ${Sender} is not in the zone
/return
}
|------------------------------------------------------------|
|------------------------------------------------------------|
| Help Menu!
|------------------------------------------------------------|
/if ((${ChatText.Equal[Help]})) {
/call FindExactPC ${Sender}
/if (${String[${Macro.Return}].NotEqual[TARGET_SUCCESS]}) /return
/if (${Target.Distance}<=${patchhealrange}) {
/t ${Sender} ---------Janki Help Menu---------
/delay 25
/t ${Sender} HEAL, HOT, HP, And For more info on each command tell me (Example) E-HEAL!
} else /tell ${Sender} your OOR
}
|------------------------------------------------------------|
|------------------------------------------------------------|
| END of Event Procedures! |
|------------------------------------------------------------|
/return
|------------------------------------------------------------|
| Events
|------------------------------------------------------------|
|------------------------------------------------------------|
|This is called when you type /echo help. Did I forget anything, probably?
Sub Event_HELP
/echo ----- Macro Information ------
/echo "/echo Master <Tank Name>" Sets who the bot will heal/assist.
/echo "/echo HealAt <Percent>" Sets the macro to Heal at selected Percentage.
/echo "/echo AssistAt <Percent>" Sets the macro to Assist at selected Percentage.
/echo "/echo Follow <TRUE / FALSE>" Sets if the bot will follow the Tank.
/echo "/echo Assist <TRUE or FALSE>" turns on/off auto-assisting.
/echo "/echo Sit <TRUE / FALSE>" turns on/off sitting when Follow is FALSE.
/echo "/echo Coh <Character Name>" Will target name and Call of the hero.
/echo ------------------------------
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_MASTER(Zero, Name)
/echo ============================================
/echo Changing Master to ${Name}
/echo ============================================
/target ${Name} pc
/delay 5 ${Target}==${Name}
/target ${Name} pc
/if (!${Target.ID}) {
/echo Failed to target the new Master!
/return
} else {
/if (${Target.Type.Equal[PC]}) {
/varset Master ${Target}
/varset MasterID ${Target.ID}
/echo I am now ${Master} 's Bitch.
} else {
/if (${Target.Type.Equal[NPC]}) {
/echo Failed to target the New Master or New Master was an NPC/Corpse.
/return
}
}
}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_ASSISTAT(Zero, PercentAssA)
/echo ============================================
/echo Changing AssistAt to ${PercentAssA}
/echo ============================================
/varset AssistAt ${PercentAssA}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_SIT(Zero, TFS)
/echo ============================================
/echo Changing Sit to ${TFS}
/echo ============================================
/varset Sit ${TFS}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_ASSIST(Zero, TFA)
/echo ============================================
/echo Changing Assist to ${TFA}
/echo ============================================
/varset Assist ${TFA}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_HEALAT(Zero, PercentHA)
/echo ============================================
/echo Changing HealAt to ${PercentHA}
/echo ============================================
/varset HealAt ${PercentHA}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_FOLLOW(Zero, TFF)
/echo ============================================
/echo Changing Follow to ${TFF}
/echo ============================================
/varset Follow ${TFF}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_COH(Zero, COHT)
/echo ============================================
/echo Call of the Hero on: ${COHT}
/echo ============================================
/target ${COHT} pc
/delay 5
/target ${COHT} pc
/if (!${Target.ID}) {
/echo Failed to target the person to COH!
/return
} else {
/if (${Target.Type.Equal[PC]}) {
:COH_Loop
/call cast ${COH} gem4
/delay 20
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :COH_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :COH_Loop
}
}
/return
|------------------------------------------------------------|
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_DEATH(Zero, Death)
/echo ============================================
/echo Ohh shit! We died or zoned!
/echo ============================================
/end
/return
|------------------------------------------------------------|
Sub Event_SFG(Zero, SFGP)
|------------------------------------------------------------|
| SFG!
|------------------------------------------------------------|
:gosfg_Loop
/call cast ${GateItem} item
/delay 5 !${Me.Casting.ID}
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) /goto :gosfg_Loop
/if (!${Macro.Return.Equal["CAST_SUCCESS"]}) /goto :gosfg_Loop
/return
|------------------------------------------------------------
Sub Event_FAYDARK(Zero, FAYP)
|------------------------------------------------------------|
| Faydark!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say faydark
/return
|------------------------------------------------------------
Sub Event_CRYSTAL(Zero, CRYP)
|------------------------------------------------------------|
| Crystal!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say crystal
/return
|------------------------------------------------------------
Sub Event_ACRYLIA(Zero, ACRP)
|------------------------------------------------------------|
| Acrylia!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say acrylia
/return
|------------------------------------------------------------
Sub Event_BUTCHER(Zero, BUTP)
|------------------------------------------------------------|
| Butcher!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say butcher
/return
|------------------------------------------------------------
Sub Event_FIRE(Zero, FIRP)
|------------------------------------------------------------|
| Keep!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say fire
/return
|------------------------------------------------------------
Sub Event_KEEP(Zero, KEEP)
|------------------------------------------------------------|
| Keep!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say keep
/return
|------------------------------------------------------------
Sub Event_LAIR(Zero, LIAP)
|------------------------------------------------------------|
| Lair!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say lair
/return
|------------------------------------------------------------
Sub Event_OVERTHERE(Zero, OVEP)
|------------------------------------------------------------|
| Overthere!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say overthere
/return
|------------------------------------------------------------
Sub Event_HATE(Zero, HATP)
|------------------------------------------------------------|
| Hate!
|------------------------------------------------------------|
/target Sorin npc
/stick 5
/delay 15
/say hate
/return
|------------------------------------------------------------
Sub Event_UNREST(Zero, UNRP)
|------------------------------------------------------------|
| Unrest!
|------------------------------------------------------------|
/target "Aeridin of the Conclave" npc
/stick 5
/delay 15
/say unrest
/return
|------------------------------------------------------------
Sub Event_KITHICOR(Zero, KITP)
|------------------------------------------------------------|
| Kitchicor!
|------------------------------------------------------------|
/target "Aeridin of the Conclave" npc
/stick 5
/delay 15
/say kitchicor
/return
|------------------------------------------------------------
Sub Event_LAKE(Zero, LAKP)
|------------------------------------------------------------|
| Lake!
|------------------------------------------------------------|
/target "Aeridin of the Conclave" npc
/stick 5
/delay 15
/say lake
/return
|------------------------------------------------------------
Sub Event_MAZE(Zero, MAZP)
|------------------------------------------------------------|
| Maze!
|------------------------------------------------------------|
/target "Aeridin of the Conclave" npc
/stick 5
/delay 15
/say maze
/return
|------------------------------------------------------------
Sub Event_MARR(Zero, MARP)
|------------------------------------------------------------|
| Marr!
|------------------------------------------------------------|
/target "Aeridin of the Conclave" npc
/stick 5
/delay 15
/say marr
/return
|------------------------------------------------------------
Sub Event_SOLUSEK(Zero, SOLP)
|------------------------------------------------------------|
| solusek!
|------------------------------------------------------------|
/target "Aeridin of the Conclave" npc
/stick 5
/delay 15
/say solusek
/return
|------------------------------------------------------------
Last edited:

