roll.mac - Group roll tracking macro.

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

roll.mac - Group roll tracking macro.

Post by ml2517 » Thu Apr 29, 2004 9:51 pm

Code: Select all

|
| roll.mac  Automatic roll (/ran) tracker.
|
| Version 1.16
| Date:5/11/2004 4:00am 
|    
|  Usage:
|    /macro roll.mac [low end roll] [high end roll]  (If you don't specify a low and high roll it uses 0 to 1000)
|    
|    Begins tracking your group members rolls:
|    /echo start
|
|    Stops tracking your group members rolls and tells you the winner:
|    /echo stop
|


#Event WhoRolled "#*#**A Magic Die is rolled by#*#"
#Event Roll "#*#**It could have been any number from#*#"

#Event Start "[MQ2] start#*#"
#Event Stop "[MQ2] stop#*#"

| -------------------------------
Sub Main
/declare Low int outer
/declare High int outer
/if (${Defined[Param0]}) {
    /varset Low ${Param0}
} else {
    /varset Low 0
}
/if (${Defined[Param1]}) {
    /varset High ${Param1}
} else {
    /varset High 1000
}
/declare Started int outer
/varset Started 0
/declare ParseName string outer
/declare RollArray[6] int outer UNDEFINED-ARRAY-ELEMENT
/declare PlayerArray[6] string outer UNDEFINED-ARRAY-ELEMENT

/doevents flush

:MainLoop
/doevents WhoRolled
/doevents Start
/doevents Stop
/goto :MainLoop
/return

| -------------------------------
Sub Event_WhoRolled(EvtText)
/declare a int local
/declare Flag int local
/varset Flag -1
/varset ParseName ${String["${EvtText}"].Arg[7].Left[${Math.Calc[${String["${EvtText}"].Arg[7].Length}-1]}]}
/for a 1 to 6
    /if (${String["${ParseName}"].Equal["${Group[${Math.Calc[${a}-1]}]}"]}) /goto :Check1
    /goto :Check2
    :Check1
    /if (${Started}==1) {
        /varset Flag 1
        /goto :Check3
    }
    :Check2
/next a
:Check3
/if (${Flag}==-1) {
    /doevents flush
} else {
    /doevents Roll
}
/return

| -------------------------------
Sub Event_Roll(EvtText)
/declare ParseLow int local
/declare ParseHigh int local
/declare RollResult int local
/declare a int local
/declare b int local
/declare Flag int local

/varset ParseLow ${String["${EvtText}"].Arg[8]}
/varset ParseHigh ${String["${EvtText}"].Arg[10].Left[${Math.Calc[${String["${EvtText}"].Arg[10].Length}-1]}]}
/varset RollResult ${String["${EvtText}"].Arg[18].Left[${Math.Calc[${String["${EvtText}"].Arg[18].Length}-1]}]}

/varset Flag 0
/for a 1 to 6
    /if (${String["${ParseName}"].Equal["${Group[${Math.Calc[${a}-1]}]}"]}) /goto :Check1
    /goto :Check2
    :Check1
    /if (${ParseLow}==${Low}) /if (${ParseHigh}==${High}) {
        /for b 1 to 6          
            /if (${String["${PlayerArray[${b}]}"].Equal["${ParseName}"]}) /varset Flag 1
        /next b
        /if (${Flag}==0) {
            /varset PlayerArray[${a}] ${ParseName}
            /varset RollArray[${a}] ${RollResult}
            /echo Player:${PlayerArray[${a}]} rolled a ${RollArray[${a}]}.
            /goto :GetOut
        } else {
            /echo Player:${ParseName} had already rolled, ignoring this roll.
            /goto :GetOut
        }
    } else {
        /echo Player:${ParseName} rolled improperly. Low:${ParseLow} High:${ParseHigh} Roll:${RollResult}, ignoring this roll.
        /goto :GetOut
    }
    :Check2
/next a
:GetOut
/return

| -------------------------------
Sub Event_Start
/varset Started 1
/echo Roll tracking started.  Please have your group roll with: /ran ${Low} ${High}
/doevents flush
/return

| -------------------------------
Sub Event_Stop
/echo Roll tracking stopped.
/varset Started 0
/declare Winner string local
/declare WinnerRoll int local
/declare a int local
/varset Winner No One
/varset WinnerRoll -1

/for a 1 to 6
    /if (${String["${PlayerArray[${a}]}"].NotEqual["UNDEFINED-ARRAY-ELEMENT"]}) {
        /if (${RollArray[${a}]}>${WinnerRoll}) {
            /varset Winner ${PlayerArray[${a}]}
            /varset WinnerRoll ${RollArray[${a}]}
        }
        /varset PlayerArray[${a}] UNDEFINED-ARRAY-ELEMENT
        /varset RollArray[${a}] -1
    }
/next a
/if (${String["${Winner}"].Length}>0) {
    /echo The Winner is: [ ${Winner} ] with a roll of ${WinnerRoll}
    /doevents flush
}
/return
| -------------------------------
Last edited by ml2517 on Tue May 11, 2004 5:21 am, edited 1 time in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Mon May 10, 2004 10:53 pm

Updated:
roll.mac

Updated for the new event system rules.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Tue May 11, 2004 5:21 am

Updated:
roll.mac

Fixed an issue with the event system changes I'd made.