Jump to content
Sign in to follow this  
caanmasu

¿Se reinician los contadores de las misiones? debes ver esto!

Recommended Posts

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!

Share this post


Link to post
Share on other sites

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. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...