Ir a contenido

Foto

Capí­tulo V - Los states


  • Please log in to reply
4 Respuesta(s) a este Tema
Metin2

#1
ElRaulxX

ElRaulxX

    Forero

  • Quest Master
  • MarcarMarcarMarcarMarcarMarcar
  • 97 Mensaje(s)
  • Sexo:Masculino
  • Localización:Barcelona, España

Buenas foreros de Metin2 Zone!
Os vengo a traer la quinta entrega de nuestro fantástico curso de quests. En este capítulo trataremos los states, algo básico que tenéis que tener en cuenta a la hora de crear una quest. La verdad es que esto formaría parte del capítulo II, pues los states estructuran las quests, pero hemos aplazado este capítulo para que lo podáis entender mejor ahora que ya habéis avanzado un poco.

Supongo que habréis visto ya en todas las quests la estructura state start begin. Efectivamente, eso es un state. Pero antes de todo debemos entender qué es realmente un state.


1 - ¿Qué es un state?

Podríamos decir que un state es la "división" de una quest. Las acciones de cada quest se dividen en bloques independientes: los states.
Cuando el usuario inicia la quest empezará en el state inicial (start). A partir de entonces el creador de la quest puede ir cambiando de states a su conveniencia. De esta manera podemos hacer que el usuario sufra diferentes acciones en cada uno de los states.

Algo importante a saber es que los states son totalmente independientes los unos de los otros. Las acciones que ocurren dentro de un state sólo ocurrirán en este state, es decir, cuando el usuario se encuentre dentro de este state.

Un ejemplo, para que lo entendáis, son las misiones de búsqueda de un npc o de matar un determinado mob, las misiones de toda la vida que utiliza ymir. Cuando empieza la quest aparece un determinado pergamino. Conforme vamos avanzando la quest, este pergamino irá cambiando; en un state podemos abrir un determinado texto en un npc, en otro no. Esto no lo podríamos hacer sin nuestros states.

 

Podemos entender mejor los states si los comparamos con un conjunto de habitaciones unidas a través de puertas.

Empezamos entrando a la primera habitación (state start - inicio de la quest). En ella nos encontramos una alfombra y una silla. Por lo tanto podemos caminar sobre la alfombra y sentarnos en la silla. Ahora decidimos ir a una segunda habitación.

En esta segunda habitación nos encontramos un sillón y una mesa. En esta habitación podemos sentarnos en el sillón y poner una baso sobre la mesa, pero no podemos caminar sobre la alfombra ni sentarnos en la silla ya que eso pertenece a la habitación anterior.

De esta manera podemos entender los states. Cada state es independiente de los otros; podemos realizar las acciones que se encuentran dentro de un state independientemente de los otros. Para cambiar de state deberemos atravesar una puerta que, en términos de quest, correspondería a una función para cambiar el state en que se encuentra el usuario.

Una quest puede tener un número indeterminado de states. Eso, como ya dije, va a conveniencia del creador de la quest.
Cuando compilemos la quest (implementamos en el servidor) aparecerá en object la quest dividida/fragmentada. Esa división será en función de los states. Por ejemplo, si implementamos la quest tutorial.quest que contiene los states start, run y final, en object nos aparecerán los archivos tutorial.start, tutorial.run y tutorial.final (todo dividido en mobs, timers..., claro está). Esto lo trataremos a fondo en otro capítulo.


2 - ¿Cómo cambiamos de state?

 

El state del jugador puede cambiarse a partir de funciones creadas para ello.

Los states se almacenan en la db y permanecerán hasta que sea modificado con cualquiera de las funciones creadas para ello.

Existen dos maneras de cambiar un state: internamente o remotamente.

 

Internamente:
La función de cambio de state principal es la función set_state() o setstate(). Su uso es muy sencillo: tan solo debemos introducir como único argumento el nombre del state al que queremos cambiar cuando queramos realizar el cambio de state interno de la quest (por si no se entiende, entre paréntesis tenemos que poner el nombre del state al que queremos ir).

Please Login or Register to see this Hidden Content

Ejemplo:

Please Login or Register to see this Hidden Content

Como veis en el ejemplo, cada state es independiente de los otros.

También debo recordar que TODOS los states se cierran con un end.
Los states pueden tener cualquier nombre, el que queramos. Aún así, para evitar cualquier tipo de error, es aconsejable utilizar nombres sencillos sin caracteres especiales.

Remotamente:
Los states de una quest también podemos cambiarlos remotamente, es decir, desde otra quest ajena. ¿Cómo hacemos eso? Pues con la función: set_quest_state(). Esta función toma dos argumentos: el primer argumento debe ser el nombre de la quest a la que queramos cambiar el state (IMPORTANTE: el nombre de la quest es el definido en la primera línea quest x begin donde x es el nombre de la quest; no confundir con el nombre del archivo quest) y el segundo el nuevo state al que queremos ir.

Please Login or Register to see this Hidden Content

Ejemplo:

 

Quest1:

Please Login or Register to see this Hidden Content

Quest2:

Please Login or Register to see this Hidden Content

3 - States en los when - enter y leave

 

Existen dos maneras de activar un when a través de los states: enter y leave.

  • Enter: Se ejecutará el when cuando entremos en el state.
  • Leave: Se ejecutará el when cuando salgamos del state.

A través de estos dos whens podemos aumentar mucho la funcionalidad de una quest en las ocasiones en que podamos cambiar los states.

He visto programadores quest que utilizan mucho esta táctica para conseguir solucionar problemas que de otra manera serían mucho más difíciles de solucionar, ¡incluso lo utiliza nuestra madre ymir!

 

Aquí tenéis un ejemplo explicativo:

Please Login or Register to see this Hidden Content

Cuando entremos al state run se ejecutará chat("Has entrado al state.") y cuando salgamos del mismo chat("Has salido del state."). Este ejemplo es muy sencillo pero estoy seguro que de aquí os pueden salir grandes ideas que mejorarán mucho vuestro código.

 

 

 

Con todo esto podemos ir jugando con los states y hacer miles de cosas.
Algo muy útil es poner un state sin ninguna acción. Así podemos dar por finalizada la quest, ¡muy útil para quests con recorrido!

Recordar que los states es lo principal de las quest. Si sabéis utilizarlos serán buenos aliados, sino tan solo serán neutrales. Siempre es mejor tener aliados, ¿no creéis?
 

 

Changelog

  • 31/07/12 20:18 - Primera publicación oficial del capítulo.
  • 04/09/13 11:35 - Correcciones varias.
  • 04/09/13 14:33 - Correcciones varias.
  • 04/09/13 15:31 - Correcciones varias, Añadida sección 3 - States en los when - enter y leave

  • A fuuton97, Joakin47, izaviona y a 3 más les gusta esto

Imagen enviada


Imagen enviada

Imagen enviada


#2
fuuton97

fuuton97

    Forero Profesional

  • Miembro
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 610 Mensaje(s)
Excelente Raúl, todas las guías me han servido de mucho. Sigue así :trollface:

#3
Santy!.

Santy!.

    Forero Experto

  • Miembro
  • MarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcarMarcar
  • 1.047 Mensaje(s)
yo igual que fuuton y devuelta tengo otra idea :D xD.. PD: ya van 3 dias quiero el capitulo siguiente xD.

#4
ElRaulxX

ElRaulxX

    Forero

  • Quest Master
  • MarcarMarcarMarcarMarcarMarcar
  • 97 Mensaje(s)
  • Sexo:Masculino
  • Localización:Barcelona, España

Changelog

  • 04/09/13 11:35 - Correcciones varias.
  • 04/09/13 14:33 - Correcciones varias.
  • 04/09/13 15:31 - Correcciones varias, Añadida sección 3 - States en los when - enter y leave

Imagen enviada


Imagen enviada

Imagen enviada


#5
Desagradable

Desagradable

    Interesado

  • Miembro
  • MarcarMarcarMarcarMarcar
  • 57 Mensaje(s)

gracias por tu me gusta






0 Usuario(s) están leyendo este Tema

0 miembro(s), 0 invitado(s), 0 usuario(s) anónimo(s)