No entiendo muy bien a lo que te refieres. Aún así la primera ocurrencia de los mensajes podría no ser a la media hora, pero para el resto de ocurrencias sí tienes que calibrar que sea más o menos media hora (será un poco más aunque no voy a entrar en el detalle ya que no se trata, ni mucho menos, de un sistema de tiempo real critico).
De todas formas, lo que más tergiversa la base de tiempos es la espera de 3 s entre mensaje y mensaje, que se hace aún antes de lanzar de nuevo el contador. Puedes probar a hacer esto (a sabiendas de que no termino de entenderte) a ver si mejora:
OnTimer5000: if (.inUse) { set .inUse, 0; } else { getmapxy .map$,.x,.y,1; set .curX, callfunc("NPCWalk",.minX, .maxX,.minD,.maxD,.x); set .curY, callfunc("NPCWalk",.minY, .maxY,.minD,.maxD,.y); npcwalkto .curX, .curY; } .current_count++; stopnpctimer; initnpctimer; if(.current_count >= 360) { // Número de veces que camina antes de anunciar .current_count = 0; npctalk "Hola Forastero!"; sleep 3000; npctalk "Si Me Das 10.000 Zeny Te Doy Agility y Blessing"; sleep 3000; npctalk "En nivel 15 Por 5 Minutos , Te Sera De Gran Ayuda.!"; } end;