• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

Need Help Adding to my copy of Krust UI (1 Viewer)

Muffinnutz

New member
Joined
Jan 17, 2006
RedCents
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
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
 
change name of it to Twitch.inc

Change Sub Main to Sub Twitch or something unique

add the include line in krust.mac for twitch.inc

also I would add an event to krusti.mac ..

for your twitching command .. maybe you just say

#Event NeedTwitch #*#I am twitching#*#"

Sub Event_NeedTwitch

/call Twitch

/return

ARMY
 
armysoldier said:
also I would add an event to krusti.mac ..

for your twitching command .. maybe you just

#Event NeedTwitch #*#I am twitching#*#"
TY Army as usual you are my hero :) I get the rest of it put what is the purpose of the above part???
 
Last edited:
OK I did it and the krust macro loads and works fine till i hit CTRL+\ (supposed to be the command to turn auto-twitching on/off) then i get:

Rich (BB code):
/varset failed, variable 'TwitchToggleChange' not found krust.mac@356 (Main): goto :krustloop
Any ideas?
 
the event is so that you can trigger the Sub Twitch ... basically you need to start the old twitch macro .. so to do that ... use an event to call the sub twitch ...

then you will have to put in something so that it /returns from sub twitch to krust.mac

I will look more when i get home in an hour or so

ARMY
 
ok thanks I will check back in the am

Onve i get this working I am gonna try to make a inc that when someone in the group or raid ask for DMF it just does it. Hmm that may be in there allready will have to look closer.
 
armysoldier said:
the event is so that you can trigger the Sub Twitch ... basically you need to start the old twitch macro .. so to do that ... use an event to call the sub twitch ...

ARMY
Army was just thinking maybe i wasn't really clear in the original post...this is not a afk macro, I don't really need to trigger the twitch part off of a tell or /gsay or anything...i want to be able to type /twitch. That is how most of the other features are used, see /illusion or /rez in krust.mac for examples

Thanks again for the help looking forward to a fix:)
 
Muffinnutz said:
Army was just thinking maybe i wasn't really clear in the original post...this is not a afk macro, I don't really need to trigger the twitch part off of a tell or /gsay or anything...i want to be able to type /twitch. That is how most of the other features are used, see /illusion or /rez in krust.mac for examples

Thanks again for the help looking forward to a fix:)

i undersdtand its not an AFK macro .. but understand why your doing when you use includes...

Twitch.INC has to be called ..

it is not automatic .. so .. either you build in a command so that it will call the sub twitch or you use an event..

thats why when you CTRL+/ it is not twitching

if you used an event ...

it would work fine ...

so basically you hotkey that phrase and your good to go 8-)


make sense?


ARMY
 
OK i get it now but is still not working:
When i say in group or chat channel I am twitching %t or even just I am twitching it doesn't trigger the sub and ideas? posting the mess i have atm below:

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
#include twitch.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#*#"
|necro stuff:
#Event NeedTwitch #*#I am twitching#*#"
Sub Event_needtwitch
/call twitch
/return
|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.inc

Rich (BB code):
 |twitch.inc 
| Twitch one person with both of your twitch spells. 
| Use "Ctrl \" combo to start twitching or stop twitching. 
#event OOM "#*#Insufficient Mana#*#" 
|-------------------------------------- 
|--- SUB: twitch 
|-------------------------------------- 
Sub twitch 

/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
 
Last edited:
try these.... Toggle it just like you normally would with just the twitch macro. (Ctrl+\). Changes from the origional file are marked with bold if you would like to see where i made changes.

Krust.mac
Rich (BB code):
#include twitch.inc
#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
/call setuptwitch
/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
 
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X
|XXXX Adds aliases to the script
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X
/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 (${TwitchToggle} || ${TwitchToggleChange}) /call TwitchTarget
/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.inc
Rich (BB code):
|twitch.inc
| 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 setuptwitch
/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
/echo To toggle twitching, press Ctrl+\ 
/return 
 
|-------------------------------------- 
|--- SUB: TwitchTarget 
|-------------------------------------- 
Sub TwitchTarget 
|--- Main Twitching Loop. 
/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" 
	} 
} 
/return  
 
|-------------------------------------- 
|--- EVENT: OOM 
|-------------------------------------- 
Sub Event_OOM 
/echo Twitching stopped due to OOM. Press Ctrl \ at any time to resume. 
/varset TwitchToggle 0 
/return
 
the problem i'm seeing is that it goes into sub setuptwitch, but there is no event to change it so that it will /return from the twitch.inc.
that is what you need to get.
 
did you use the twitch.inc i pasted? The coding looks correct. Heres a new twitch.inc with a lot less of the setup (which your describing its getting stuck in). Try it with the spells pre-memmed and see if it works.

Rich (BB code):
|twitch.inc
| 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 setuptwitch
	/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+\ 
	/echo To toggle twitching, press Ctrl+\ 
/return 
 
|-------------------------------------- 
|--- SUB: TwitchTarget 
|-------------------------------------- 
Sub TwitchTarget 
|--- Main Twitching Loop. 
/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" 
	} 
} 
/return  
 
|-------------------------------------- 
|--- EVENT: OOM 
|-------------------------------------- 
Sub Event_OOM 
/echo Twitching stopped due to OOM. Press Ctrl \ at any time to resume. 
/varset TwitchToggle 0 
/return
 
OK I tried both of Z16's .inc and they don't work for me. If I type /mac twitch it loads the 2 spells and when I press ctrl-\ it twitches my target till oom. That is how I want it to work. I don't want to have to mem the spells, that is part of what the macro is for. I guess for the time being I'll /mac twitch till we find a way to make it work.
 
ok if that didnt work I'll start my own twitch code tonight, Its more likly to work that way anyway since I'll start it from scratch. Look for a new post here in a little bit.

Save this as krusttest.mac and run it. If it works you'll be set - again bolded additions i made so you can easily re-add it to future krust.mac versions.

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
 
Sub Init_Twitch
	|----------------------Twitch  Spells--------------------
	/declare twitchspell  	string 	outer Sedulous Subversion
	/declare twitchspell2  	string 	outer Covetous Subversion
	
	|-------------------Twitch Spell Gems--------------------
	/declare twitchgem 	int 	outer 8
	/declare twitchgem2 	int 	outer 9
	
	|-----------Stop Twitching @ this percent Mana-----------
	/declare TwitchStopAt 	int 	outer 10
	
	|-----------------System vars-Dont Touch-----------------
	/declare Twitch		int 	outer 0
	/declare TwitchSwitch 	int 	outer 0
	/squelch /custombind delete TwichToggle
	/squelch /custombind add TwitchToggle
	/squelch /custombind set TwitchToggle /varset TwitchSwitch 1
	/bind TwitchToggle Ctrl+\
/return

Sub TwitchSub
	/if (${Me.Casting.ID} || ${Me.Moving} || ${Me.Sitting} || ${Me.Ducking} || ${Me.Feigning} || ${Me.Invis}) /return
	/if (${TwitchSwitch}) {
		/if (${Twitch}) {
			/varset Twitch 0
			/varset TwitchSwitch 0
			/echo Twitching now off.
			/return
			}
		/varset Twitch 1
		/varset TwitchSwitch 0
		/echo Twitching now on.
		}
	/if (${Me.PctMana}<${TwitchStopAt}) {
		/varset Twitch 0
		/varset TwitchSwitch 0
		/echo Twitching now off - Reached Mana Threshhold (${TwitchStopAt}%).
		/return
		}
	/if (!${Me.Gem[${twitchspell}]}) {
		/memspell ${twitchgem} "${twitchspell}"
		/delay 4s ${Me.Gem[${twitchspell}]}
		}
	/if (!${Me.Gem[${twitchspell2}]}) {
		/memspell ${twitchgem2} "${twitchspell2}"
		/delay 4s ${Me.Gem[${twitchspell2}]}
		}
	/delay 1
	/if (${Me.SpellReady[${twitchspell}]} {
		/call Cast "${twitchspell}" gem${twitchgem}
		}
	/if (${Me.SpellReady[${twitchspell2}]} {
		/call Cast "${twitchspell2}" gem${twitchgem2}
		}
/return
| 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
 
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X
|XXXX Adds aliases to the script
|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X
/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
/call Init_Twitch
:krustloop
/doevents
/if (${Twitch} || ${TwitchSwitch}) /call TwitchSub
/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
 
Last edited:
Need Help Adding to my copy of Krust UI

Users who are viewing this thread

Back
Top