Muffinnutz
New member
- Joined
- Jan 17, 2006
- RedCents
- 0¢
As a necro one one the most tedious thing is twitching a cleric for a long time like on the Council raids. I found a great little macro theat does just that on the MQ site. Problem is I am allready running The Krust macro. What I need (I guess) is to have the twitch macro made into an include file and be called from the main macro using a /twitch typed command. I am sure this CAN be done i just don't know how so if any kind soul can help me out here thanks.
Main Krust Macro
Twitch Macro
Main Krust Macro
Rich (BB code):
#include spell_routines.inc
#define BELLOW_LOWEST_LVL 61
#define NOT_FOUND 0
#define INI_FILE krust.ini
#define ZONEINFO_FILE krust_zoneinfo.ini
#include gimp_metabolism.inc
#include gimp_modrod.inc
#include gimp_buffrequests.inc
#include gimp_buffstatus.inc
#include gimp_clickies.inc
#include gimp_debuffinfo.inc
#include gimp_consent.inc
#include gimp_dps.inc
#include gimp_xptrack.inc
#include gimp_assist.inc
#include gimp_lions.inc
#include gimp_spawncheck.inc
#include gimp_selflearn.inc
#include gimp_selfbuffs.inc
| Notes:
| * Requires /filter pcspells, to be *ALL* or *GRP* to see others debuffs
| * Requires hit modes->your hits to be normal or abbreviated for DPS counter to count melee damage
| * To automatically drop unwanted buffs, use MQ2BuffBlock plugin
|monk kicks
|Kick - level 1, cap 265
|Round Kick - level 5, cap 240
|Tiger Claw - level 10, cap 240
|Eagle Strike - level 20, cap 240
|Dragon Punch - level 25, cap 240
|Flying Kick - level 30, cap 240
#define MONK_KICK "Flying Kick"
#Event ToggleDisarm "#*#[MQ2] toggledisarm#*#"
#Event ToggleTaunt "#*#[MQ2] toggletaunt#*#"
|druid stuff:
#Event UsedOakenGuard "Your skin turns hard as oak."
#Event UsedOakenGuard "You have finished memorizing Oaken Guard."
|monk stuff:
#Event UsedMend "You mend your wounds and heal some damage."
Sub Event_UsedMend
/echo [${Time}] Mend used
/varset mendReuseTime 6m
/varcalc mendReuseTime ${mendReuseTime}+4
/return
#Event WhoNotInZone "[MQ2] notinzone"
Sub Event_WhoNotInZone(string Line)
/if (!${Raid.Members}) {
/echo /notinzone: You are not in raid.
/return
}
/echo --------------------------
/echo # Raid members not in zone:
/declare i int local 0
/declare cnt int local 0
/for i 1 to ${Raid.Members}
/if (!${Spawn[PC ${Raid.Member[${i}].Name}].ID}) {
/echo # ${Raid.Member[${i}].Name} [${Raid.Member[${i}].Class.ShortName}] (${SpawnCount[pc ${Raid.Member[${i}].Class.ShortName}]} ${Raid.Member[${i}].Class.Name.Lower}s in zone)
/varcalc cnt ${cnt}+1
}
/next i
/echo # ${cnt} of ${Raid.Members} raid members not in zone
/echo --------------------------
/return
Sub Event_UsedOakenGuard
/varset oakenGuardReuseTime 15m
/echo [${Time}] Oaken Guard used
/return
#Event Camping "#*#It will take you about 30 seconds to prepare your camp.#*#"
Sub Event_Camping
/echo Camping - Ending macro!
/endmacro
/return
Sub DoRegularUpdates
/declare i int local 0
/declare cnt int local 0
/declare str string local
/call CheckBuffs
/call CheckModRod
/call CheckFood
/call CheckSpawns
/varset str DR
/varset i ${Me.svDisease}
/if (${Me.svPoison} < ${i}) {
/varset str PR
/varset i ${Me.svPoison}
}
/if (${Me.svMagic} < ${i}) {
/varset str MR
/varset i ${Me.svMagic}
}
/if (${Me.svFire} < ${i}) {
/varset str FR
/varset i ${Me.svFire}
}
/if (${Me.svCold} < ${i}) {
/varset str CR
/varset i ${Me.svCold}
}
/varset mcHUDLowestResist ${i} (${str})
/if ((${Raid.Members} > 0) && ${Zone.Name.NotEqual["The Plane of Knowledge"]}) {
|If i am anon or roleplay, turn off
/if (${Me.Anonymous}) /anonymous off
/if (${Me.Roleplaying}) /roleplay off
}
|Fixes stacking bug in EQ, currently Aura of Devotion and Blessing of Devotion stacks, and taking up 2 buff slots. this code automatically clicks off the one with least duration if you have both
/if (${Me.Buff["Aura of Devotion"].Duration} && ${Me.Buff["Blessing of Devotion"].Duration}) {
/if (${Me.Buff["Aura of Devotion"].Duration} < ${Me.Buff["Blessing of Devotion"].Duration}) {
/echo # Clicking off Aura of Devotion!
/nomodkey /notify BuffWindow Buff${Math.Calc[${Me.Buff["Aura of Devotion"].ID}-1].Int} leftmouseup
} else {
/echo # Clicking off Blessing of Devotion!
/nomodkey /notify BuffWindow Buff${Math.Calc[${Me.Buff["Blessing of Devotion"].ID}-1].Int} leftmouseup
}
}
|Opens up friend window, since the macro uses a modified feedback xml file to display data
/if (!${Window[FriendsWindow].Open}) /nomodkey /keypress alt+f
/varset UpdateTimer 3s
/return
#Event AutoAcceptInvite "[MQ2] acceptinvite"
Sub Event_AutoAcceptInvite(string Line)
/varcalc autoAcceptInvite ${autoAcceptInvite}+1
/if (${autoAcceptInvite} == 1) {
/echo # The next group or raid invite will be auto-accepted.
} else {
/echo # The next ${autoAcceptInvite} group or raid invites will be auto-accepted.
}
/return
#Event HandleInvitedRaid "#1# invites you to join a raid."
Sub Event_HandleInvitedRaid(string Line, string Player)
/if (!${autoAcceptInvite}) /return
/varcalc autoAcceptInvite ${autoAcceptInvite}-1
/echo # Auto-accepting raid invite from ${Player} <${Spawn[PC ${Player}].Guild}>
/delay ${Math.Calc[${Math.Rand[3]}+1]}s
/raidaccept
/return
#Event HandleInvitedGroup "#1# invites you to join a group."
Sub Event_HandleInvitedGroup(string Line, string Player)
/if (!${autoAcceptInvite} || ${Group.Members}) /return
/varcalc autoAcceptInvite ${autoAcceptInvite}-1
/echo # Auto-accepting group invite from ${Player} <${Spawn[PC ${Player}].Guild}>
/delay ${Math.Calc[${Math.Rand[3]}+1]}s
/if (${Target.Type.Equal[PC]}) /squelch /target clear
/invite
/return
#Event AutoAcceptRez "[MQ2] acceptrez"
Sub Event_AutoAcceptRez(string Line)
/varset autoAcceptRez 1
/echo # The next resurrection casted on you will be auto-accepted.
/return
#Event EnteredNewZone "You have entered #1#."
Sub Event_EnteredNewZone(string Line, string ZoneName)
/if (${gimp_spawncheck_loaded}) /call CheckSpawns
/if (${autoAcceptRez} && ${Spawn[${Me.Name}'s corpse].ID}) {
|fixme: did i zone to same zone where i am bound? fixme2: without below delay, auto looting of corpse messes up
/echo # Zoned to ${ZoneName} after auto accepting rez
/delay 8s
/call Event_LootMyCorpse
/varset autoAcceptRez 0
/if (${Me.Standing} && ${Me.MaxMana} && !${Me.Moving} && !${Me.Casting.ID}) /sit
}
/return
Sub Main
/declare autoAcceptRez int outer 0
/declare autoAcceptInvite int outer 0
|HUD variables
/declare mcHUDmend string outer
/declare mcHUDoakenguard string outer READY IN ???
/declare mcHUDbuffslots int outer ${Math.Calc[15+(${Me.AltAbility["Mystical Attuning"]}/5)+${If[${Me.AltAbility["Embrace of the Keepers"].ID},1,0]}+${If[${Me.AltAbility["Embrace of the Dark Reign"].ID},1,0]}]}
/declare mcHUDLowestResist string outer
/declare mendReuseTime timer outer 0
/declare oakenGuardReuseTime timer outer 0
/declare UpdateTimer timer outer 0
|Load settings from INI file
/declare AutoDisarm int outer ${Ini[INI_FILE, ${Me.Name}, AutoDisarm, NOT_FOUND]}
/declare AutoMend int outer ${Ini[INI_FILE, ${Me.Name}, AutoMend, NOT_FOUND]}
/declare AutoTaunt int outer ${Ini[INI_FILE, ${Me.Name}, AutoTaunt, NOT_FOUND]}
/declare i int local 0
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|XXXX Adds aliases to the script
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/squelch /alias /toggledisarm /echo toggledisarm
/squelch /alias /toggletaunt /echo toggletaunt
/squelch /alias /notinzone /echo notinzone
/squelch /alias /acceptrez /echo acceptrez
/squelch /alias /acceptinvite /echo acceptinvite
/squelch /alias /buffself /echo buffself
/declare tmp int local 0
/if (${AutoDisarm}) /echo Auto Disarm is ON
/if (${AutoTaunt}) /echo Auto Taunt is ON
/if (${AutoMend}) /echo Auto Mend is ON
/call Init_DPS
/call Init_XP
/call Init_Assist
/call Init_Clickies
:krustloop
/doevents
/if (!${UpdateTimer}) /call DoRegularUpdates
/if (!${gimp_clickies_timer}) /call DoClickies
|Uses Healing Potion X if possible
/if ((${Me.PctHPs} <= 15) && !${Me.Stunned} && !${Me.Invis} && !${Me.Feigning}) {
/if (${FindItem["Healing Potion X"].InvSlot} && !${FindItem["Healing Potion X"].Timer}) {
/call Cast "Healing Potion X" item
/echo # CLICKING HEALING POTION X!!!
} else {
|Warrior invunerability
/if (${Me.CombatAbilityReady["Furious Discipline"]}) {
/doability "Furious Discipline"
/echo # Using FURIOUS DISC!!!
/delay 10
}
}
}
|Uses mod rod if possible
/if (${Me.MaxMana} && !${Me.Invis} && (${Me.PctMana} <= 10) && (${Me.CurrentHPs} >= 1500)) {
/if (${FindItem["Rod of Mystical Transvergance"].InvSlot} && !${FindItem["Rod of Mystical Transvergance"].Timer}) {
/call Cast "Rod of Mystical Transvergance" item
/echo # CLICKING MOD ROD!!!
}
}
|If rez box is open:
/if (${autoAcceptRez} && ${Window[ConfirmationDialogBox].Open}) {
/echo # Debug: Auto accepting rez in 5 sec
/echo # Debug: Rez window text: ${Window[ConfirmationDialogBox].Child[CD_TextOutput].Text}
/delay 5s
/notify ConfirmationDialogBox Yes_Button leftmouseup
/delay 5s
}
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|XX Melee classes
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/if (${Me.Class.Name.Equal["Monk"]}) {
|This will auto-kick the kick specified in MONK_KICK
|Will only auto kick if auto attack is on, player has a target & it's a NPC, in LoS, <20 range, and player is not stunned
/if (${Target.ID} && ${Target.Type.Equal[NPC]} && ${Me.Combat} && !${Me.Stunned} && ${Target.LineOfSight} && !${Me.Casting.ID}) {
/if (${Me.AbilityReady["MONK_KICK"]} && (${Target.Distance} < 30)) {
/doability "MONK_KICK"
/if (!${Me.Buff["Spiritual Vigor"].ID} && !${Me.Buff["Spiritual Vitality"].ID} && !${Me.Buff["Vallon's Quickening"].ID} && !${Me.Buff["Speed of Vallon"].ID} && !${Me.Buff["Hastening of Salik"].ID} && !${Me.Buff["Speed of Salik"].ID} && !${Me.Buff["Strength of Tunare"].ID} && !${Me.Buff["Strength of the Hunter"].ID} && (${Me.Buff["Celestial Tranquility"].Duration} < 2)) {
/if (${InvSlot[hands].Item.Name.Equal["Celestial Fists"]}) /call Cast "Celestial Fists" item
/if (${InvSlot[hands].Item.Name.Equal["Gauntlets of Enlightenment"]}) /call Cast "Gauntlets of Enlightenment" item
}
}
/if (${Me.AbilityReady["Mend"]}) {
/if (${AutoMend} && ${Me.PctHPs} <= 70) {
/echo Using Mend at ${Me.PctHPs}%
/if (${Group.Members}) /delay 2s
/if (${Me.PctHPs} <= 70) /doability "Mend"
}
/varset mcHUDmend READY
} else {
/varcalc tmp ${mendReuseTime}/10
/varset mcHUDmend READY IN ${tmp}s
}
}
}
/if (${Me.Class.Name.Equal["Rogue"]} || ${Me.Class.Name.Equal["Warrior"]}) {
/if (${Target.ID} && ${Target.Type.Equal[NPC]} && ${Me.Combat} && !${Me.Stunned} && ${Target.LineOfSight} && !${Me.Casting.ID}) {
|Warrior kick, need to put Kick on ability hotkey for it to work
/if (${AutoTaunt}) {
|Bazu bellow on mobs at lv55 or above (dont waste bellow on fearable in mpg fear trial), dont bellow if im ungrouped
/if ((${Me.TargetOfTarget.ID} && (${Me.TargetOfTarget.ID} != ${Me.ID})) && ${Group.Members} ) {
/if ((${Me.PctEndurance} >= 20) && !${Me.Stunned} && ${Me.CombatAbilityReady["Bazu Bellow"]} && (${Target.Distance} < 50) && (${Target.Level} >= BELLOW_LOWEST_LVL)) {
/echo # BELLOW: ${Target.CleanName} (${Me.TargetOfTarget.Name} has aggro)
/doability "Bazu Bellow"
/delay 10
}
}
|just taunt
/if (${Me.AbilityReady["Taunt"]} && (${Target.Distance} < 20)) {
/echo # TAUNT: ${Target.CleanName} (${Me.TargetOfTarget.Name} has aggro)
/doability "Taunt"
}
/if (${InvSlot[offhand].Item.Type.Equal[shield]}) {
/if (${Me.AbilityReady["Bash"]} && (${Target.Distance} < 16)) {
/echo # BASH: ${Target.CleanName}
/doability "Bash"
}
} else {
/if (${Me.AbilityReady["Kick"]} && (${Target.Distance} < 20)) /doability "Kick"
}
}
/if (${Me.AbilityReady["Kick"]} && (${Target.Distance} < 20)) /doability "Kick"
/if (${AutoDisarm} && ${Me.AbilityReady["Disarm"]} && (${Target.Distance} < 15)) /doability "Disarm"
}
}
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|XX Priest classes
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/if (${Me.Class.Name.Equal["Druid"]} || ${Me.Class.Name.Equal["Cleric"]} || ${Me.Class.Name.Equal["Shaman"]}) {
|Stand up when FM and spell book is not open
/if ((${Me.PctMana} >= 99) && ${Me.Sitting} && !${Me.Feigning} && !${Me.Invis} && !${Me.AFK} && !${Window[SpellBookWnd].Open}) {
/echo Sitting & FM, standing
|Wait 5 sec & process events in between, so /camp can be triggered
:StandLoop
/for i 1 to 5
/delay 1s
/doevents
/next i
/if (${Me.Sitting}) /stand
}
}
/goto :krustloop
/return
Sub Event_ToggleDisarm
/if (${AutoDisarm}) {
/varset AutoDisarm 0
/echo Disarm mode is now OFF
} else {
/varset AutoDisarm 1
/echo Disarm mode is now ON
}
/ini "INI_FILE" "${Me.Name}" "AutoDisarm" "${AutoDisarm}"
/return
Sub Event_ToggleTaunt
/if (${AutoTaunt}) {
/varset AutoTaunt 0
/echo Taunt mode is now OFF
} else {
/varset AutoTaunt 1
/echo Taunt mode is now ON
}
/ini "INI_FILE" "${Me.Name}" "AutoTaunt" "${AutoTaunt}"
/return
Twitch Macro
Rich (BB code):
|twitch.mac
| Twitch one person with both of your twitch spells.
| Use "Ctrl \" combo to start twitching or stop twitching.
#event OOM "#*#Insufficient Mana#*#"
|--------------------------------------
|--- SUB: Main
|--------------------------------------
Sub Main
/declare Twitch1Slot int outer
/declare Twitch2Slot int outer
/declare Ready1 bool outer FALSE
/declare Ready2 bool outer FALSE
/declare Ready1Timer timer outer
/declare Ready2Timer timer outer
/declare TwitchToggle int outer 0
/declare TwitchToggleChange int outer 0
|--- Custombind routine
/squelch /custombind delete TwichToggle
/squelch /custombind add TwitchToggle
/squelch /custombind set TwitchToggle /varset TwitchToggleChange 1
/bind TwitchToggle Ctrl+\
|-------------------------------------------------
|--- which slots do you use for Sedulous/Covetous?
/varset Twitch1Slot 8
/varset Twitch2Slot 9
|-------------------------------------------------
/if (${Me.Gem[Sedulous Subversion]}) {
/varset Ready1 TRUE
} else /varset Ready1 FALSE
/if (${Me.Gem[Covetous Subversion]}) {
/varset Ready2 TRUE
} else /varset Ready2 FALSE
:retry1
/delay 1
/if (${Ready1}==FALSE) {
/memspell ${Twitch1Slot} "Sedulous Subversion"
/varset Ready1Timer 80
}
:loop1
/delay 1
/if (!${Me.Gem["Sedulous Subversion"]}) /if (${Ready1Timer}<1) /goto :retry1
/if (${Me.Gem["Sedulous Subversion"]}) /goto :next
/goto :loop1
:next
:retry2
/delay 1
/if (${Ready2}==FALSE) {
/memspell ${Twitch2Slot} "Covetous Subversion"
/varset Ready2Timer 80
}
:loop2
/delay 1
/if (!${Me.Gem["Covetous Subversion"]}) /if (${Ready2Timer}<1) /goto :retry2
/if (${Me.Gem["Covetous Subversion"]}) /goto :ready
/goto :loop2
:ready
/call TwitchTarget
/return
|--------------------------------------
|--- SUB: TwitchTarget
|--------------------------------------
Sub TwitchTarget
/echo To toggle twitching, press Ctrl+\
|--- Main Twitching Loop.
:twitchloop
/doevents
/delay 1
/if (${TwitchToggleChange}==1) {
/varset TwitchToggle ${If[${TwitchToggle}==1,0,1]}
/varset TwitchToggleChange 0
}
/if (${Target.Type.Equal[PC]}) {
/if (${TwitchToggle}==1) {
/if (${Me.SpellReady[Sedulous Subversion]}) /if (!${Me.Casting.ID}) /cast "Sedulous Subversion"
}
}
/doevents
/delay 1
/if (${TwitchToggleChange}==1) {
/varset TwitchToggle ${If[${TwitchToggle}==1,0,1]}
/varset TwitchToggleChange 0
}
/if (${Target.Type.Equal[PC]}) {
/if (${TwitchToggle}==1) {
/if (${Me.SpellReady[Covetous Subversion]}) /if (!${Me.Casting.ID}) /cast "Covetous Subversion"
}
}
/goto :twitchloop
|--- End Main Twitching Loop.
/return
|--------------------------------------
|--- EVENT: OOM
|--------------------------------------
Sub Event_OOM
/echo Twitching stopped due to OOM. Press Ctrl \ at any time to resume.
/varset TwitchToggle 0
/return