Не знаю, поможет тебе это или нет, но на просторах инета есть плагин(модуль) для таймера, суть плагина в том, что если человек ставит на карте(например бхоп) рекорд, то потом его призрак(бот) проходит эту же карту до тех пор, пока не поставят новый. 
 Cвоеобразная демка на сурсмоде. 
 Я думаю если ты найдешь этот плагин, то почерпнешь в нем необходимые знания для написания своей "машины времени" :DДобавлено (08.06.2014, 02:57:59)
---------------------------------------------
Короче этого плагина(модуля) я не нашел, поэтому написал свою хреньку, на звание лучшего метода мой код не претендует, так что не кидайтесь тапками! 
 
Код
 
 #include <sdktools> 
 new Handle:TimeMach[MAXPLAYERS+1]    = {INVALID_HANDLE, ...}; 
 new bool:Start[MAXPLAYERS+1]  = {false, ...}; 
 new bool:R_W[MAXPLAYERS+1]   = {false, ...}; 
 new bool:CD[MAXPLAYERS+1]   = {false, ...}; 
 public OnPluginStart() 
 { 
  for(new client = 1; client < MaxClients; client++) { TimeMach[client] = CreateArray(3); /*#vector size#*/ } 
   
  RegConsoleCmd("t_s", Command_Stat_TimeAr); 
  RegConsoleCmd("t_r", Command_Read_TimeAr); 
 } 
 public OnClientPutInServer(client) { ClearValues(client); } 
 public OnClientDisconnect(client)  { ClearValues(client); } 
 public Action:Command_Stat_TimeAr(client, args) 
 { 
  Start[client] = !Start[client]; 
  PrintToChatAll("5 sec Demo Array %s", Start[client] ? "Activate" : "Deactivate"); 
 } 
 public Action:Command_Read_TimeAr(client, args) 
 { 
  R_W[client] = !R_W[client]; 
  PrintToChatAll("Read Time %s", R_W[client] ? "Start" : "End"); 
 } 
 public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) 
 { 
  if(Start[client]) 
  { 
   if(!R_W[client])    /*#Write Array#*/ 
   { 
    new Float:ClPos[3]; 
    GetClientAbsOrigin(client, ClPos); 
     
    if(GetArraySize(TimeMach[client]) < 900) /*Items In Array*/ 
    { 
     PushArrayArray(TimeMach[client], ClPos); 
    } 
    else 
    { 
     if(!CD[client]) { CD[client] = true; PrintToChat(client, "[Time Machine All Ok]"); } 
      
     RemoveFromArray(TimeMach[client], 0); 
     PushArrayArray(TimeMach[client], ClPos); 
    } 
   } 
   else    /*#Read Array#*/ 
   { 
    new index = GetArraySize(TimeMach[client]); 
     
    if(index && CD[client]) 
    { 
     new Float:ArPos[3]; 
      
     GetArrayArray(TimeMach[client], index-1, ArPos); 
     RemoveFromArray(TimeMach[client], index-1); 
      
     TeleportEntity(client, ArPos, NULL_VECTOR, NULL_VECTOR); 
    } 
    else 
    { 
     if(CD[client]) { CD[client] = false; R_W[client] = false; PrintToChat(client, "[Time Machine Cool Down]"); } 
    } 
   } 
  } 
 } 
 stock ClearValues(client) 
 { 
  Start[client] = R_W[client] = false; 
  ClearArray(TimeMach[client]); 
 } 
 
Добавлено (08.06.2014, 03:00:21)
---------------------------------------------
тут никаких заумных проверок нет, это просто основа, все остальное допиливайте сами.