Moderator: MacroQuest Developers

Genbot only allows you to set up your own shortcuts to either cast spells or click items or use keyboard commands and such. So, unless your debuffs are spells or clicky items you are SOL.Fred wrote:Hi
Thanks for creating/mainting a great macro.
One thing I'd like though, is to be able to debuff mobs.
So /g debuff
and all the bots will cast all their debuffs on my target.
Thanks!
andsov=snt Speed of Vallon on NameS
Will cause genbot to try to parse:/t bot sov on someone
Which doesn't work.snt Speed of Vallon on on someone
sov=snt Speed of Vallon on NameS
Or/t bot sov someone
sov=snt Speed of Vallon NameS
/t bot sov on someone
Code: Select all
} else /if (${ChatIn.Equal[IRC]}) {
/i say ${ChatText}
}
Code: Select all
Sub Event_SelfEcho(string EchoText)
| /varset MasterName ${Me.CleanName}
/varset EchoText ${EchoText.Right[-13]}
/call ExecCommand "${EchoText}"
/return
Code: Select all
|Testing new taunt code.
|Be nice to see if you have ToT or Raid ToT skill.
|This assumes you do since I never group without it.
/if (${DoTaunt} && ${Me.AbilityReady[Taunt]}) {
/if (${Group}>2) {
/if (${Me.TargetOfTarget.ID}!=${Me.ID}) {
/if (${Target.Distance}<20) {
/call ChatOut 5 ${MasterName} "Taunting ${Target.CleanName}.
/doability "Taunt"
}
}
} else {
/declare TempCalc int local
/declare HeadingMax int local
/declare HeadingMin int local
/varset TempCalc ${Math.Calc[${Me.Heading.Degrees}+180]}
/if (${TempCalc}>360) /varset TempCalc ${Math.Calc[${TempCalc}-360]}
/varset HeadingMax ${Math.Calc[${TempCalc}+10]}
/varset HeadingMin ${Math.Calc[${TempCalc}-10]}
/if ((${Target.Heading.Degrees}>${HeadingMax})||(${Target.Heading.Degrees}<${HeadingMin})) {
/if (${Target.Distance3D}<20) {
/call ChatOut 5 ${MasterName} "Taunting ${Target.CleanName}.
/doability "Taunt"
}
}
}
}
/call swap "itemname"
ex: /call swap "Shrunken Goblin Skull Earring"
Code: Select all
Sub Swap(spellName)
/declare slotName int local
/declare slotID int local
/declare oldSlotID int local
/if ( ${FindItem[${spellName}].InvSlot}>30 ) {
/if ( ${FindItem[${spellName}].WornSlot[1]} ) {
/varset slotName ${FindItem[${spellName}].WornSlot[1]}
} else {
/varset slotName pack8
}
/varset slotID ${InvSlot[${slotName}].ID}
/varset oldSlotID ${FindItem[${spellName}].InvSlot.ID}
/autoinventory
/if ( ${InvSlot[${oldSlotID}].Pack} ) {
:open_pack
/nomodkey /itemnotify ${InvSlot[${oldSlotID}].Pack} rightmouseup
/if ( !${Window[${InvSlot[${oldSlotID}].Pack.Name}].Open} ) /goto :open_pack
}
:pick_up_item
/if ( ${InvSlot[${oldSlotID}].Pack} && !${Window[${InvSlot[${oldSlotID}].Pack.Name}].Open} ) /nomodkey /itemnotify ${InvSlot[${oldSlotID}].Pack} rightmouseup
/nomodkey /itemnotify ${InvSlot[${oldSlotID}]} leftmouseup
/if ( !${Cursor.Name.Equal[${spellName}]} ) /goto :pick_up_item
:exchange_items
/nomodkey /itemnotify ${slotID} leftmouseup
/if ( !${Me.Inventory[${slotID}].Name.Equal[${spellName}]} ) /goto :exchange_items
/if ( ${InvSlot[${oldSlotID}].Pack} ) {
:close_pack
/nomodkey /itemnotify ${InvSlot[${oldSlotID}].Pack} rightmouseup
/if ( ${Window[${InvSlot[${oldSlotID}].Pack.Name}].Open} ) /goto :close_pack
}
:drop_item
/if ( ${InvSlot[${oldSlotID}].Pack} && !${Window[${InvSlot[${oldSlotID}].Pack.Name}].Open} ) /nomodkey /itemnotify ${InvSlot[${oldSlotID}].Pack} rightmouseup
/nomodkey /itemnotify ${oldSlotID} leftmouseup
/if ( ${Cursor.ID} ) /goto :drop_item
/if ( ${InvSlot[${oldSlotID}].Pack} ) {
:close_pack2
/nomodkey /itemnotify ${InvSlot[${oldSlotID}].Pack} rightmouseup
/if ( ${Window[${InvSlot[${oldSlotID}].Pack.Name}].Open} ) /goto :close_pack2
}
}
/return Code: Select all
Sub SwapCast(item,equipslot)
/declare inventoryslot int local
/declare pack local
/declare packslot int local
/declare leaveopen int local 1
/declare packnumber int local 0
/declare leavetwisting int local 0
/if (!${Defined[item]}) /goto :end
/if (${Twisting}) {
/twist stop
/varset leavetwisting 1
}
:stopsingingdelay
/if (${Me.Casting.ID}>0) {
/stopsong
/goto :stopsingingdelay
}
/varset inventoryslot ${FindItem[${item}].InvSlot}
/if (!${inventoryslot}) /goto :notfound
:packcountloop
/if (${inventoryslot}>250 && ${inventoryslot}<331) {
/varset packnumber ${Math.Calc[${packnumber}+1]}
/varset inventoryslot ${Math.Calc[${inventoryslot}-10]}
/goto :packcountloop
}
/if (${packnumber} > 0) {
/varset pack pack${packnumber}
/varset packslot ${Math.Calc[${inventoryslot}-240]}
/goto :foundit
}
:notinpack
/call CastItem ${inventoryslot}
/goto :end
:foundit
/if (!${Window[${pack}].Open}) {
/nomod /itemnotify ${pack} rightmouseup
/varset leaveopen 0
}
/call WaitCursor ${packslot} ${pack}
/if (${String[${equipslot}].Find[null]}) {
/if (${Cursor.WornSlots}>0) {
/varset equipslot ${Cursor.WornSlot[1]}
} else {
/varset equipslot pack1
}
}
/call WaitCursor ${equipslot}
/call CastItem ${equipslot}
/call WaitCursor ${equipslot}
/call WaitCursor ${packslot} ${pack}
/if (${leaveopen} == 0) /nomod /itemnotify ${pack} rightmouseup
/goto :end
:notfound
/echo ${item} not found in inventory.
:end
/if (${leavetwisting} == 1) /twist start
/return
Sub CastItem(slot)
/nomod /itemnotify ${slot} rightmouseup
/echo Casting the effect on your ${InvSlot[${slot}].Item.Name}
:castloop
|| special case composer greaves don't ever stop casting
/if (${InvSlot[${slot}].Item.Name.Find["Composers Greaves"]}) {
/delay 12
/stopsong
}
/if (${Me.Casting.ID}>0) /goto :castloop
/return
Sub WaitCursor(slot, pack)
/declare item local
/declare timeout timer 30
/varset item ${Cursor.ID}
/if (${Defined[pack]}) /goto :waitloop2
:waitloop1
/nomod /itemnotify ${slot} leftmouseup
/if ((${item} == ${Cursor.ID}) && (${timeout} > 0)) /goto :waitloop1
/goto :donewaiting
:waitloop2
/nomod /itemnotify in ${pack} ${slot} leftmouseup
/if ((${item} == ${Cursor.ID}) && (${timeout} > 0)) /goto :waitloop2
:donewaiting
/return