Code: Select all
|Revised May 10, 10:30am
| - added ini file support, HudTimer.ini (example below)
|
|Revised May 9, 12:30pm
| - Removes timer on death, if corpse exists or not
|
|
| HuDTimer.mac
|
| This macro will react to spells cast on your target.
| It displays the time remaining on the spell cast,the
| spell cast, and the mob cast upon.
|
| Currently it will display 5 debuffs at once.
| It will refresh any identical buff recast on the same mob
| It fills in timer slots from top to bottom as available
| Displays "timer list full" when max timers are running
|
| TODO:
|
| - dynamically create entries in the MQ2Hud.ini file to allow for more timers
| - revisit formatting spell duration (ticks) into time (hh:mm:ss)
| - write as HudTimer.inc and call from Personal.inc for genbot.
|
| by
| Seagreen
|
#turbo 40
#Event Debuff |${Target.CleanName}|#*#
sub Main
/declare counter int outer
/declare DebuffSpell string outer
/declare HudArrayTimer[5,5] string outer NULL
| [1,x] 1. Ending time of debuff
| [2.x] 2. Name of spell cast on npc
| [3.x] 3. Long name of npc
| [4.x] 4. ID of npc
| [5.x] 5. Duration (formatted)
/echo HuD DEBUFF Timer is now ACTIVE.
:mainloop
/doevents
/call CheckTimer
/delay 1
/goto :mainloop
/return
Sub Event_Debuff(string Line)
/declare DebuffText string local
/varset counter 1
|
| CYCLE THROUGH INI ENTRIES, ALL ENTRIES WILL BE GREATER THAN NULL
|
:iniloop
/if (!${Ini[HudTimer.ini,Debuffs,${Ini[HudTimer.ini,Debuffs].Arg[${counter},|]}].Length}>NULL) /return
/varset DebuffText ${Target.CleanName}${Ini[HudTimer.ini,Debuffs,${Ini[HudTimer.ini,Debuffs].Arg[${counter},|]}]}
|
| MATCH OUR INI DEBUFF TEXT WITH OUR EVENT TEXT
|
/if (${DebuffText.Equal[${Line}]}) {
/varset DebuffSpell ${Ini[HudTimer.ini,Debuffs].Arg[${counter},|]}
/call SetupTimer
/return
}
/varcalc counter ${counter}+1
/goto :iniloop
/return
Sub SetupTimer
|
| IF SAME DEBUFF IS BEING RECAST ON EXISTING NPC IN TIMER ARRAY, REFRESH
|
/for counter 1 to 5
/if (${Spawn[${HudArrayTimer[4,${counter}]}].ID}==${Target.ID} && ${String[${HudArrayTimer[2,${counter}]}].Equal[${DebuffSpell}]}) {
/varset HudArrayTimer[1,${counter}] ${Math.Calc[${Time.SecondsSinceMidnight}+(${Spell[${DebuffSpell}].Duration}*6)]}
/varset HudArrayTimer[2,${counter}] ${DebuffSpell}
/varset HudArrayTimer[3,${counter}] ${Target}
/varset HudArrayTimer[4,${counter}] ${Target.ID}
/return
}
/next counter
|
| SETUP NEW DEBUFF OF NPC IN OPEN SLOT
|
/varset counter 1
:counterloop
/if (!${Spawn[${HudArrayTimer[4,${counter}]}].ID} && !(${Math.Calc[${HudArrayTimer[1,${counter}]}-${Time.SecondsSinceMidnight}].Int}>0)) {
/varset HudArrayTimer[1,${counter}] ${Math.Calc[${Time.SecondsSinceMidnight}+(${Spell[${DebuffSpell}].Duration}*6)]}
/varset HudArrayTimer[2,${counter}] ${DebuffSpell}
/varset HudArrayTimer[3,${counter}] ${Target}
/varset HudArrayTimer[4,${counter}] ${Target.ID}
} else {
/if (${counter}>4) {
/echo Debuff timer slots are full
/return
}
/varcalc counter ${counter}+1
/goto :counterloop
}
/return
Sub CheckTimer
/declare duration int local
/declare myhour string local
/declare myminute string local
/declare mysecond string local
/for counter 1 to 5
/if (!${Spawn[${HudArrayTimer[4,${counter}]}].State.Equal[DEAD]} && ${Math.Calc[${HudArrayTimer[1,${counter}]}-${Time.SecondsSinceMidnight}].Int}>0) {
|
| FORMAT DURATION TO 00:00:00
|
/varset duration ${Math.Calc[${HudArrayTimer[1,${counter}]}-${Time.SecondsSinceMidnight}].Int}
/if (${duration}>3600) {
/varset myhour ${Math.Calc[${duration}/3600].Int}
/varset duration ${Math.Calc[((${duration}/3600)-${myhour})*3600]}
} else {
/varset myhour
}
/if (${duration}>60) {
/varset myminute ${Math.Calc[${duration}/60].Int}
/varset duration ${Math.Calc[((${duration}/60)-${myminute})*60]}
/if (${myhour} && ${myminute}<10) /varset myminute 0${myminute}
} else {
/varset myminute
}
/if (${duration}) {
/varset mysecond ${duration}
/if (${myminute} && ${mysecond}<10) /varset mysecond 0${mysecond}
} else {
/varset mysecond
}
|
| DISPLAY HH:MM:SS IF NEEDED
|
/if (${myhour}) {
/varset HudArrayTimer[5,${counter}] ${myhour}:${myminute}:${mysecond}
} else /if (${myminute}) {
/varset HudArrayTimer[5,${counter}] ${myminute}:${mysecond}
} else /if (${mysecond}) {
/varset HudArrayTimer[5,${counter}] ${mysecond}
}
} else {
/varset HudArrayTimer[1,${counter}]
/varset HudArrayTimer[2,${counter}]
/varset HudArrayTimer[3,${counter}]
/varset HudArrayTimer[4,${counter}]
/varset HudArrayTimer[5,${counter}]
}
/next counter
/return
Code: Select all
[Elements]
GMIndicator=3,5,45,0,0,255,${Spawn[gm]}
TargetInfo=3,300,10,255,255,255,${Target}
HudTimer1=3,150,30,50,255,255,${HudArrayTimer[5,1]}
HudSpell1=3,200,30,255,255,255,${HudArrayTimer[2,1]}
HudTarget1=3,300,30,255,255,50,${HudArrayTimer[3,1]}
HudTimer2=3,150,50,50,255,255,${HudArrayTimer[5,2]}
HudSpell2=3,200,50,255,255,255,${HudArrayTimer[2,2]}
HudTarget2=3,300,50,255,255,50,${HudArrayTimer[3,2]}
HudTimer3=3,150,70,50,255,255,${HudArrayTimer[5,3]}
HudSpell3=3,200,70,255,255,255,${HudArrayTimer[2,3]}
HudTarget3=3,300,70,255,255,50,${HudArrayTimer[3,3]}
HudTimer4=3,150,90,50,255,255,${HudArrayTimer[5,4]}
HudSpell4=3,200,90,255,255,255,${HudArrayTimer[2,4]}
HudTarget4=3,300,90,255,255,50,${HudArrayTimer[3,4]}
HudTimer5=3,150,110,50,255,255,${HudArrayTimer[5,5]}
HudSpell5=3,200,110,255,255,255,${HudArrayTimer[2,5]}
HudTarget5=3,300,110,255,255,50,${HudArrayTimer[3,5]}
**NOTE**
Your ini text must be 'exactly' what is after your targets name.
IE: even spaces, This is to allow for 's after the target name.
Name this one HudTimer.ini
Code: Select all
[Debuffs]
Bliss="'s jaw falls as they begin to drool."
Forlorn Deeds=" slows down."
Howl of Tashan=" glances nervously about."
Brell's Stalwart Shield=" begins to radiate with divine strength."


