integer iCHANNEL_INDICATOR = -5564234; //chat channel
float fTimer = 0.02; //timer
float fZOffset = 1.6; //meter above player
key kPlayer; //player
float fStartTime = 0; //Starttime
float fMaxTime = 600; //Maximum time before timeout.
string sMins = ":";
string sSecs = "s";
vector vColor = <1.0, 1.0, 1.0>;
float fAlpha = 1.0;
hide()
{ //stop timer
llSetTimerEvent(0.0);
}
show()
{ //make visible and start timer
llSetTimerEvent(fTimer); //start timer
}
default
{
state_entry()
{ //on script start
llListen(iCHANNEL_INDICATOR, "", NULL_KEY, ""); //setup listener
hide(); //stop timer and hide
}
timer()
{ //on timer event
if (fStartTime + fMaxTime < llGetTime())
{ //Time over.
llDie();
}
integer iNow = (integer)(llGetTime() - fStartTime);
integer iNowMinutes = iNow / 60;
integer iNowSeconds = iNow - (iNowMinutes * 60);
string sTime = (string)iNowMinutes + sMins + (string)iNowSeconds + sSecs;
llSetText(sTime, vColor, fAlpha);
vector vPos;
vPos = llList2Vector(llGetObjectDetails(kPlayer, [OBJECT_POS]),0);
if (vPos == ZERO_VECTOR)
{ //not found, die.
llDie();
return;
}
llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POSITION,<vPos.x, vPos.y, vPos.z + fZOffset>]);
}
listen(integer channel, string name, key id, string message)
{ //on listener message
if (channel == iCHANNEL_INDICATOR)
{
//set up for new player and update position
fStartTime = llGetTime();
kPlayer = (key) message;
vector vPos;
vPos = llList2Vector(llGetObjectDetails(kPlayer, [OBJECT_POS]),0);
if (vPos == ZERO_VECTOR)
{ //not found, stop timer and hide
hide();
return;
}
llSetRegionPos(<vPos.x, vPos.y, vPos.z + fZOffset>); //update position
show(); //make visible and start timer
}
}
}