caanmasu 427 Report post Posted July 19, 2019 Hola a todos! Traje una información útil sobre las quest que resuelve varios problemas pero sobretodo uno: ¿Cómo hago para que no se me reinicie el contador de tiempo de las misiones? Resulta que, por ejemplo, haces una misión de 30 minutos y te quedan 5 minutos, cambias pj y vuelves a entrar, ahora vuelve el contador a 30 minutos. Claramente es un bug. Eso ocurre porque en el state actual, generalmente tienes tres disparadores (when) que son: letter: estos se inician cada vez que el personaje se loguea. Su tarea es mostrar el pergamino de la misión flotante en la parte izquierda. button: estos se inician cuando se le da clic al botón de la misión que está en la interfaz donde aparece carácter, habilidades, emociones, misiones. info: estos se inician cuando se le da clic al pergamino flotante de la izquierda. El error está cuando en alguno de esos disparadores asignas el timer o alguna otra variable inicial. Así que cuando el pj cambia de mapa o se vuelve a conectar, o cuando le das clic al pergamino, el contador (variable) se inicializa de nuevo en el número que pusiste. Así que cuál es la solución? Utilizar el disparador enter. Este disparador ya viene por defecto en el servidor, así que no hay que añadir nada con C++. La función de enter es ejecutarse una sola vez en el state. Es decir, si en un state pones when enter begin, apenas tu pj llegue a ese state, se ejecutará y no se volverá a ejecutar de nuevo. quest prueba begin state start begin when enter begin chat("Esto solo aparecerá una vez") end end end Si esta quest se ejecuta, apenas el pj se loguee, aparecerá el mensaje. Si te vuelves a conectar no aparecerá. La única manera de que vuelva a aparecer el mensaje sería reiniciando el state con set_state(start) Esto es útil para inicializar variables para las misiones. Así que si pones el timer en el enter, así cambien de pj, no se volverá a iniciar el reloj. No cometas el error de poner un timer en el state start porque el tiempo empezará a correr desde ahí, y la idea es que corra el tiempo cuando el personaje acepta la misión. Cuando el pj le dice al NPC "Sí, acepto el reto ahora", enviarlo a un nuevo state donde se ponga el timer, no en ese mismo state. Ocurre lo mismo con cualquier otra variable, no solo timers. Si pones en un letter, button o info, por ejemplo, pc.setqf("cantidad_monstruos", 100) es un error porque cada vez que te loguees va a volver a 100 ese qf. Bueno, en ese caso declara esa variable en el state start y santo remedio. En el caso de los timers ya es más complejo porque no puedes "guardar" un timer en los arreglos iniciales (o en donde guardes tus variables iniciales). Es por eso que me enfoqué en los timers en este post. Y eso es todo amigos. Éxitos! 3 emilio45, xLordneji and Break reacted to this Quote Share this post Link to post Share on other sites
PACI 460 Report post Posted July 20, 2019 Para que usas un timer? Quote Share this post Link to post Share on other sites
caanmasu 427 Report post Posted August 2, 2019 Me estaba basando en una quest que hice (no puedo decir de qué se trata) y que cuando acabara el tiempo pasara algo. En verdad no sé manejar muy bien lo de los tiempos, creo que no es necesario el timer ahora que lo veo. Debe haber una forma de que cuando llegue a 0 el contador de tiempo de la misión, haga ciertas instrucciones, sin tener que usar un timer. La verdad no he testeado mucho lo de los tiempos. Quote Share this post Link to post Share on other sites