Jump to content

Capítulo II - Estructura de una quest


KeKo

Recommended Posts

Buenas zone!

 

Llega el segundo capítulo del esperado curso de creacion de quests. Tras un primer episodio lleno de aventuras, romance e intriga en esta entrega os voi a explicar como se estructura una quest.

 

Antes de nada recordaré las palabras de un sabio llamado raul sobre: qué es una quest? Y además tened esto en mente siempre durante este capítulo.

 

una quest es cualquier archivo que utilice el lenguaje quest

 

es importante que aprendáis a hablar y pensar en lenguaje informático.

 

 

Lo primero de todo cuando vas a hacer una quest es crear el archivo de la quest en si. Como es un archivo de una quest debe tener la extension .quest, para lo que le damos a boton derecho -> nuevo -> documento de texto y una vez creado el archivo. txt le cambiamos el nombre a .quest.

 

Bueno, después de esta ardua tarea nos encontraremos cara a cara con un archivo en blanco en el que tendremos que vertir nuestras ideas para que se convierta en una quest hecha y derecha. Voi entonces a explicaros como se estructura una quest estándar para que sepais como enfrentaros a nuestro terrible enemigo durante todo el curso: la quest en blanco.

 

Una quest se divide en 3 partes que podreis distinguir fácilmente:

 

- Apertura: Son siempre las 2 primeras lineas de una quest.

 

- Cuerpo: Es lo que podriamos llamar la quest en si, ya que es la parte de la quest que contiene todas las cosas que queremos que haga la quest.

 

- Cierre: Son siempre ends (a los que dedicare un apartado especial en este capitulo) que hacen que nuestra quest acabe correctamente.

 

Vamos a hablar ahora en profundidad de cada una de estas partes:

 

1 - La apertura:

 

La primera parte de una quest es la que llamaremos apertura a lo largo del curso (ya parezco un profesor ) y que como dije arriba son siempre las dos primeras lineas de una quest.

 

Veamos un ejemplo de como se debe hacer una apertura:

 

quest capidos begin
state start begin

Bien, ahora vamos a centrarnos en qué hace cada una de esas dos líneas:

 

quest capidos begin

La linea más básica de toda una quest, simplemente manda la orden de que comience la quest.

 

*Desmitificando las quests v1: Se que mucha gente tiene la creencia pagana de que el nombre que va despues de quest en la primera linea de la apertura tiene que ser el mismo que el nombre del archivo .quest PERO ES MENTIRA!!

 

El nombre que ponemos ahi puede ser el que nos apetezca, ya que simplemente es lo que el juego al cargar la quest para ver que está empezando una.

 

Bien, ahora la segunda linea:

 

state start begin

Esta linea lo que hace es que comience el estado "start" , es decir: que podemos empezar a escribir nuestra quest.

 

*Es muy importante que sepais que este estado va a continuar activo hasta el final de la quest, a expecion de casos en los que usemos otros estados aparte del inicial (en lo que profundizará raul en el capítulo de los estados).

Esto es todo sobre la apertura, espero aver resuelto dudas y enseñado algo que no sepais, y si no lo habreis leido pa na

 

 

2 - El cuerpo de una quest:

 

Ahora que ya hemos mandado la orden de que la quest comience (primera linea de la apertura) y hemos activo el estado de start (para poder empezar a escribir quest) nos toca elaborar nuestra quest para hacer eso que queríamos hacer para dejar de ver la temible quest en blanco.

 

quest capidos begin
		  state start begin

De momento tenemos esto, pero ahora queremos hacerlo más digo yo, no? Pues sí! Me remitiré de nuevo a la cita de mi colega raul:

 

Pienso en levantarme.

 

Acción de levantarse: ¿se ha ejecutado correctamente? Si es así, voy al siguiente punto

 

Como veis, cuando pensamos en lenguaje de quest nos planteamos hacer una acción y por lo tanto en el cuerpo de una quest puede suceder varias cosas:

 

- Que una accion comience.

- Que pongamos una condicion para que una accion se desarrolle.

- Que una accion se desarrole.

- Que comprobemos que una accion se esta desarrolando.

- Que una accion termine.

 

Es por eso que en el cuerpo de una quest vamos a usar una serie de operadores logísticos que nos permitiran desarrollar nuestra quest, y que son los siguientes:

 

when while with and or if elseif else > < >= <= == ~=

De ellos:

 

* when y while sirven para comenzar acciones.

* with and or if elseif y else sirven para poner condiciones.

* > < >= <= == ~= sirven para hacer comprobaciones entre acciones.

 

Primero veremos un ejemplo sencillo de quest que te pone un mensaje en la barra de chat cuando te logeas:

 

quest capìdos begin
state start begin
    
		  when login begin
					 chat("Bienvenido al servidor, pasalo bien")

Como veis tenemos apertura, la orden de que comience una accion cuando nos logeemos y luego la accion que se desarrola cuando nos logeamos.

 

Vamos a ver ahora mas fondo esto con un ejemplo de quest que envia un mensaje a todos cuando un nuevo pj comienza el juego:

 

quest capidos begin		   --- Lineas de apertura
state start begin
	    when login with pc.get_level() == 1 begin		 ---- Linea con orden de comienzo, condicion y comprobacion
			 notice_all("Hay un nuevo personaje en nuestro servidor")   --- Linea con la accion

Como veis empieza con la apertura.

 

Luego tenemos una orden para comnenzar una accion: en este caso la accion comenzará cuando nos logeemos con un personaje.

 

when login

Y este comienzo además tiene una comprobación antes de que se desarrolle la accion:

 

with pc.get_level() == 1

En este caso no solo llega con que nos logeemos con un personaje, ya que tiene que además ser nivel 1, porque tenemos una orden de login, pero con la orden with seguida de una funcion: pc.get_level() y como veis un == que sirve para comprobar que el valor del nivel del personaje es igual a 1.

 

when login with pc.get_level() == 1 begin

Y ahi ya está todo entero. Como veis una vez echa la orden de comenzar la accion cuando nos logeemos, con la condicion de que el personaje sea nivel 1 ponemos la orden begin, para que comience la accion.

 

Por último simplemente ponemos la accion que se va a desarrollar:

 

notice_all("Hay un nuevo personaje en nuestro servidor")

Bien, creo que ahora ya vais entendiendo como va el cuerpo de una quest, quedaros con el dato de que siempre habrá una orden que haga que comience una mision, ya sea con el when, while, if.... y luego despues de especificar que tiene que pasar para que comience la accion usaremos funciones de quest para desarrolar esa acción.

 

Bueno pues ahora ya tenemos nuestra accion desarrolandose, pero que hacemos con ella? Como las acciones no pueden ser eternas tenemos que acabarla, y para eso usaremos la palabra end, que indica que la accion termina.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

*Apartado especial, nuestros amigos los ends:

 

Como muchos sabeis uno de los errores más comunes a la hora de hacer quests es poner o bien ends de más o bien ends de menos, lo que hará que nuestras quests no funcionen. Por lo tanto antes de nada parémonos a pensar en que es lo que es un end.

 

Procediente del inglés la palabra end es un verbo que significa terminar, lo que no nos puede dejar más claro cual es su función en una quest: terminar una acción.

 

Por lo tanto cada vez que tengamos una accion tendremos que ponerle un end al final para acabarla. Y de que manera vamos a hacer eso? Os lo diremos en el proximo capitulo , na en serio, asi funcionan los ends:

 

- Por cada begin que tengamos en nuestra quest nosotros le colocaremos un end.

- Por cada if que haya en la quest pondremos un end.

 

Veamos algunos ejemplos:

 

when login begin
		 chat("Hola")
end

when 105.kill begin
		  say("Has matado un lobo")
end

when 20095.chat."Hola" begin
		   say("Buenas")
end

Por cada begin corresponde a un end

 

if pc.count_item("50084") == 1 then
say("Veo que tienes la llave")
end

En este caso hay un if asi que ponemos un end

 

*Desmitificando las quest v2: Mucha gente comete el error de pensar que si ves un elseif como lleva la palabra if pues debe tener un end también, pero NO!!! Y es porque un elseif es una continuacion de una condición y no una nueva condicion

 

Ejemplo:

 

local s = select ("opcion1" , "opcion2" , "opcion3)

if s == 1 then
say("Has clickado en la opcion 1")

elseif s == 2 then
say("Has clickado en la opcion 2")

elseif s == 3 then
say("Has clickado en la opcion 3")

end

Como veis solo hay un end, el correspondiente al primer if.

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Bien ahora que ya conocemos mejor a los ends (de los cuales os seguiremos hablando en posteriores capitulos) ya podemos acabar el cuerpo de nuestra quest, cerrando la accion que habeis comenzado.

 

 

quest capidos begin		   --- Lineas de apertura
state start begin
	    when login with pc.get_level() == 1 begin		 ---- Linea con orden de comienzo, condicion y comprobacion
			 notice_all("Hay un nuevo personaje en nuestro servidor")   --- Linea con la accion
	    end	  --- End correspondiente al begin de la linea 3

 

Pero los listos os habreis dado cuenta de que en nuestra quest quedan 2 begins (de la apertura) que no tienen su end y eso lo voi a explicar ahora en la ultima parte de la estructura de una quest.

 

3 - Cierre de una quest:

 

Cada vez que acabemos una quest vamos a tener que poner dos ends para cerrar la quest, y os estareis preguntando, y porque??? Pues la explicacion es esta:

 

state start begin

Os acordais de la apertura? Si lo haceis os acordareis de que para hacer una quest tenemos que hacer un estado de comienzo (state start), que logicamente acabara cuando acabe la quest. De ahi viene el primer end del cierre de una quest.

 

*Detalle importante: algún espabilado habrá visto quests en los que se usan otros states aparte del start. En eses casos el cierre solo lleva un end (el que explico abajo) ya que acabaremos el start antes de lo normal para poner nuestro nuevo estado (para mas info sobre estado atentos al capítulo dedicado a ellos que hará raul).

 

Y ahora el segundo end del cierre:

 

quest capidos begin

De nuevo dire si os acordais de la apertura (que espero que os acordeis ) sabreis que cada quest empieza con esa orden, y como os fijareis tiene un begin al final por lo que le corresponde un end, pero no se lo podemos poner en cualquier momento, ya que (me quoteo a mi mismo):

 

Procediente del inglés la palabra end es un verbo que significa terminar, lo que no nos puede dejar más claro cual es su función en una quest: terminar una acción.

 

Es decir, si acabamos la accion de que comience la quest, acabamos la quest (genial deduccion). Siguiendo este hilo de deduccion os habreis dado cuenta de que es por eso por lo que el end correspondiente al begin del quest nombre begin siempre va al final de la quest.

 

Y ahora ya podemos ver nuestra quest completa y lista para cargar

 

quest capidos begin		   --- Lineas
state start begin				 ----- de apertura
	    when login with pc.get_level() == 1 begin		 ---- Cuerpo de la quest
			 notice_all("Hay un nuevo personaje en nuestro servidor")   --- Cuerpo de la quest
	    end	  --- End correspondiente al begin de la linea 3   --- Cuerpo de la quest (end correspondiente el when login begin)
	  end   --- Cierre del state
end		 --- Cierre del quest begin

Y eso es todo por el capítulo de hoy, espero que lo hayas disfrutado y pronto llegará el 3er episodio de manos de raul.

Link to comment
Share on other sites

  • 3 months later...
  • 6 months later...
  • 2 months later...
  • Dilong locked this topic
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...