Alternately you could use a DelayCommand that points to a function that handles the out of time stuff.
Pseudo code
<cut>
SetLocalInt(oPC, "TimedOut", 1); // 1 = true
DelayCommand(5.0f, YourScrewed(oPC));
<cut>
<cut>
// PC finishes in time
SetLocalInt(oPC, "TimedOut", 0); // 0 = false
<cut>
<cut>
// PC finishes out of time
void YourScrewed(object oPC)
{
if(!(GetLocalInt(oPC, "TimedOut")))
return;
// failure code from here on
}
<cut>
TR