The Raven Magician
Joined: 13 Oct 2000 Posts: 463

Posted: Wed Jul 10, 2002 10:01 pm
Countdown (or up) Timer 
Note: This script will not run on versions of zMud prior to 6.26Beta, because it uses multistate triggers.
On Battletech 3030, I have a technician character. Most of the time on the MUX is spent repairing mechs that are damaged. It takes real life time to do these repairs, limiting how much one person can do.
To keep track of my time, I made a countdown timer, and I thought it was interesting enough to warrent posting it here. In particular, the alias 'modtechtime' could be useful in many situations when you need to manually handle a timer, and want to display it nicely using hours minutes and seconds, instead of just thousands of seconds.
#CLASS {Technician} {setdef}
At random intervals between 520 minutes it checks my tech time, to recalibrate the timer as it drifts slightly.
#ALIAS checktechtime {
#ALARM +%random( 300, 1200) {checktechtime}
~+techtime
}
This multistate trigger gags the output of the +techtime command, and captures the time into the TechTimeX variables... Days, Hours, Minutes, and Seconds. At the end of the states, it turns on the #TIMER (if it is not already on) with a 1 second loop.
#TRIGGER {^ Technician Time For: Tikatt Ren} {#GAG}
#COND {^$} {#GAG}
#COND {^} {#GAG}
#COND {^Logged Repairs: (&TechTimeD).(&TechTimeH):(&TechTimeM):(&TechTimeS) Remaining Time:} {#GAG}
#COND {^Rested Time:} {#GAG}
#COND {^} {
#GAG
#IF (not @TechTimer) {
#TIMER 1 {modtechtime 1} 0 0
#TSET 1
#VAR TechTimer 1
}
}
Here is the fun alias. It takes one parameter, the number of seconds to add or subtract from the timer. It then adjusts the clock variables accordingly, including adding padded 0s as necessary. If the timer goes negative, then it sets all the variables to 0 and turns off the tick timer.
#ALIAS modtechtime {
#MATH TechTimeS {@TechTimeS + %1}
#IF (@TechTimeS >= 60) {
#MATH TechTimeS {@TechTimeS  60}
#MATH TechTimeM {@TechTimeM + 1}
}
#IF (@TechTimeM >= 60) {
#MATH TechTimeM {@TechTimeM  60}
#MATH TechTimeH {@TechTimeH + 1}
}
#IF (@TechTimeH >= 24) {
#MATH TechTimeH {@TechTimeH  24}
#MATH TechTimeD {@TechTimeD + 1}
}
#IF (@TechTimeS < 0) {
#MATH TechTimeS {@TechTimeS + 60}
#MATH TechTimeM {@TechTimeM  1}
}
#IF (@TechTimeM < 0) {
#MATH TechTimeM {@TechTimeM + 60}
#MATH TechTimeH {@TechTimeH  1}
}
#IF (@TechTimeH < 0) {
#MATH TechTimeH {@TechTimeH + 24}
#MATH TechTimeD {@TechTimeD  1}
}
#IF (@TechTimeD < 0) {
#VAR TechTimeD 0
#VAR TechTimeH 0
#VAR TechTimeM 0
#VAR TechTimeS 0
#VAR TechTimer 0
#TIMER 0
}
#IF ((@TechTimeS < 10) and (@TechTimeS >= 0)) {
#MATH TechTimeS {@TechTimeS + 0}
#VAR TechTimeS {0@TechTimeS}
}
#IF ((@TechTimeM < 10) and (@TechTimeM >= 0)) {
#MATH TechTimeM {@TechTimeM + 0}
#VAR TechTimeM {0@TechTimeM}
}
#IF ((@TechTimeH < 10) and (@TechTimeH >= 0)) {
#MATH TechTimeH {@TechTimeH + 0}
#VAR TechTimeH {0@TechTimeH}
}
#IF ((@TechTimeD < 10) and (@TechTimeD >= 0)) {
#MATH TechTimeD {@TechTimeD + 0}
#VAR TechTimeD {0@TechTimeD}
}
}
This is one example of how I use the timer. It does not let me accidentally do more repairs when my tech time is over an hour already.
#ALIAS fix {#if (@TechTimeH > 0) {#ECHO Tech time too high, access denied.} {~fix %1}}
Simple Status bar to display my tech time.
#STAT {Tech Time: @TechTimeD~.@TechTimeH~:@TechTimeM~:@TechTimeS}
#CLASS 0 
