In your case "$isstarting" is just a matter of checking whether your timer was created. You can also solve any other problems by unsetting %uptimepercent.start when you exit (and when you clean .temp), that way you can also check that .start is not set before setting it (in case only the timer was somehow turned off and script reloaded).
on *:start:{
;%uptimepercent.beginning is the "zero" point on which the script bases the start of measuring uptime
if (!%uptimepercent.beginning) set %uptimepercent.beginning $ctime
;incase the on exit event didn't trigger (crash or something) updates total time
if (%uptimepercent.temp) upaddtime %uptimepercent.temp
if (!$timer(UPTIME)) {
;periodically set %uptimepercent.temp in case of crash or something (it happens), this prevents loss of up time
.timerUPTIME -o 0 600 set %uptimepercent.temp $!ctime
;%uptimepercent.start is when mirc was started
if (!%uptimepercent.start) set %uptimepercent.start $ctime
}
}
on *:exit:upaddtime $ctime
alias upaddtime {
;adds the uptime from mirc start to exit to the total overall uptime
set %uptimepercent.up $calc(%uptimepercent.up + ($1 - %uptimepercent.start))
unset %uptimepercent.temp
unset %uptimepercent.start
}
alias uppercent {
say 7Uptime Percentage: $calc(100* ( %uptimepercent.up + ( $ctime - %uptimepercent.start )) / $&
( $ctime - %uptimepercent.beginning ) ) $+ % since $asctime(%uptimepercent.beginning)
}