Jump to content

Capítulo III - Profundicemos en los Whens


ElRaulxX

Mensajes recomendados

En el anterior capítulo, keko os explico más o menos como podemos estructurar una quest. En este capítulo nos centraremos en el cuerpo, exactamente en los whens.

El uso de los whens es lo más básico dentro de una quest. A partir de aquí podremos desarrollar cualquier acción de una quest.

 

Estructura básica de un when.

 

Antes de todo, tenemos que recordar la estructura de un when:

when [x] begin
--
end
*Esta es la estructura básica. Podemos añadirle muchísimas más cosas que explicaré en este capítulo, pero de momento, no nos avancemos. Llamaremos [x] a una variable que nos sirva para todos los casos.

 

¿Qué pasaría si no siguiéramos esta estructura? Pues que nos saltaría este error:

 

Imagen enviada

 

Debéis recordar siempre que todos los whens siguen esa estructura. Sino, no funcionará y no la reconocerá el servidor.

 

Pero como la variable [X] que nos hemos inventado no existe, tendremos que poner algo en su lugar, ¿no?

Podemos poner muchas acciones que puede realizar el usuario (pc) dentro del servidor.

Voy a listarlas todas (o casi todas). Las pondré en orden de uso y dificultad. Es posible que algunas de ellas ahora no les encontréis utilidad en este momento. Es recomendable que dentro de un tiempo las volváis a repasar para acabar de entenderlas y poder darles su debido uso.

 

*Lo que está en cursiva puede ser sustituido.

idnpc.chat."texto" : Al utilizarlo se abrirá un dialogo con opciones. Al dar click al texto empieza el contenido del when.

idnpc.click : Al hacer click en el npc, empieza el contenido del when.

kill : Cuando el jugador mata un enemigo, comienza el contenido del when.

idmob.kill : Cuando el jugador mata al enemigo con idmob empieza el contenido del when.

party_kill : Cuando un miembro del grupo mata a un enemio, comienza el contenido del when.

idmob.party_kill : Cuando un miembro del grupo mata a aun enemigo con idmob, empieza el contenido del when.

login : Cuando el jugador se logea, empieza el contenido del when.

logout : Cuando el jugador se deslogea, empieza el contenido del when.

letter : Relacionado con las letters (explicación en otro capitulo).

button : Relacionado con las letters (explicación en otro capitulo).

info : Relacionado con las letters (explicación en otro capitulo).

nombre.timer : Cuando el timer llamado con nombre llega a 0, empieza el contenido del when.

nombre.server_timer : Cuando el server_timer llamado con nombre llega a 0, empieza el contenido del when.

nombre.target.click : Cuando haces click al tarjet nombre empieza el contenido del when.

nombre.target.arrive : Cuando llegas al punto con el tarjet nombre empieza el contenido del when.

( )

 

Unos cuantos ejemplos:

quest cap3_1 begin
		 state start begin
			   when login begin --cuando te logeas
					 say("¡Hola mundo!") -- muestra en dialogo
			   end
		 end
end
quest cap3_2 begin
		 state start begin
			   when 9012.chat."Quest de prueba" begin --cuando hablas con el npc 9012
					 say("¡Hola mundo!") --muestra en dialogo
			   end
		 end
end
quest cap3_3 begin
		 state start begin
			   when 101.kill begin --cuando matas al mob con id 101
					 say("¡Hola mundo!") --muestra en dialogo
			   end
		 end
end

Sabiendo todo esto que acabo de explicar ya tenemos una gran parte avanzada, pero ¡aquí no acaba toda la información de los whens!

Hasta ahora he puesto tan solo un when por quest ¿no se pueden poner más? ¡Claro que sí! Veamos:

(recordar cerrar todos los whens!)

 

quest cap3_4 begin
		 state start begin
			   when 9012.chat."Quest de prueba 1" begin --cuando hablas con el npc haciendo click a Quest de prueba 1 9012
					 say("¡Hola mundo!") --muestra en dialogo
			   end
			   when 9012.chat."Quest de prueba 2" begin --cuando hablas con el npc haciendo click a Quest de prueba 2 9012
					 say("¡Hola mundo!") --muestra en dialogo
			   end
		 end
end
quest cap3_5 begin
		 state start begin
			   when 9012.chat."Quest de prueba" begin --cuando hablas con el npc 9012
					 say("¡Hola mundo!") --muestra en dialogo
			   end
			   when login begin --cuando te logeas
					 say("¡Hola mundo!") -- muestra en dialogo
			   end
		 end
end

 

En este momento ya deberíais empezar a entender el funcionamiento básico de las quests. Si no es así, revisa estos 3 capitulos de nuevo antes de continuar el capítulo y el curso restante. Es importante que nunca escribáis algo que no entendáis. Si no, (me cito a mí mismo) pasaría esto en un futuro:

[/size][/font]

 

A mi parecer, este lenguaje os empezará siendo bastante sencillo. Aún así, esta sencillez puede ir complicándose hasta llegar al punto de que sino entendéis realmente el funcionamiento básico de las quests no entenderéis nada.

 

Expandiendo la estructura básica de un when.

 

Como dije antes, esa tan solo era la estructura básica de un when. Esta estructura podemos complicarla tanto como queramos añadiendo condiciones o juntando varias acciones de distintos whens.

 

Partiremos de la quest básica: (A partir de ahora tan solo pondré la parte del when. No os olvidéis nunca de poner el inicio de la quest y los states, igual que su correspondiente cierre)

 

when 101.kill begin --cuando matas al mob con id 101
	   say("¡Hola mundo!") --muestra en dialogo
end

Empezaremos poniendo una condición. En este caso, que el usuario sea mayor de nivel 5.

 

when 101.kill with pc.get.level() > 5 begin --cuando matas al mob con id 101 + con nivel mayor de 5
	   say("¡Hola mundo!") --muestra en dialogo
end

De esta manera (utilizando with) podemos añadirle una condición. Si el usuario no coincide con la condición, el servidor omitirá el when en el que estamos trabajando. Esto nos puede ahorrar escribir codigo. En vez de poner una condición dentro del when, la ponemos en el propio when (más información sobre las condiciones en el capítulo IV de keko).

Más ejemplos:

 

when 101.kill with pc.get_map_index == 41 begin --cuando matas al mob con id 101 + estando en el mapa con index 41
	   say("¡Hola mundo!") --muestra en dialogo
end
when 101.kill with pc.get_max_hp > 5000 begin --cuando matas al mob con id 101 + teniendo un valor de HP mayor de 5000
	   say("¡Hola mundo!") --muestra en dialogo
end
when 101.kill with pc.is_mount begin --cuando matas al mob con id 101 + estando montado en una montura
	   say("¡Hola mundo!") --muestra en dialogo
end

Hasta ahora hemos trabajado con una sola condición ¿podemos añadir más? Claro!

Cogemos nuestro ejemplo anterior.

when 101.kill with pc.get.level() > 5 begin --cuando matas al mob con id 101 + con nivel mayor de 5
	   say("¡Hola mundo!") --muestra en dialogo
end
Ahora queremos que, demás de ser mayor de nivel 5, posea el item con vnum 19:

when 101.kill with pc.get.level() > 5 and pc.count_item(19) > 1 begin --cuando matas al mob con id 101 + con nivel mayor de 5 + en posesión del item con id 19
	   say("¡Hola mundo!") --muestra en dialogo
end
De esta manera (utilizando and) podemos añadirle todas las condiciones que queramos, poniendo siempre antes un with.

 

Partiremos de nuevo (aunque ahora algo diferente) de dos whens básicos.

when 101.kill begin --cuando matas al mob con id 101
	   say("¡Hola mundo!") --muestra en dialogo
end
when login begin --cuando te logeas
	   say("¡Hola mundo!") --muestra en dialogo
end

Podemos juntarlos? Claro! Veamos:

 

when login or 101.kill begin --cuando matas al mob con id 101 / te logeas
	   say("¡Hola mundo!") --muestra en dialogo
end
De esta manera (utilizando or) podemos poner que la acción se efectúe en diversas situaciones o con diferentes condiciones.

Todo lo que hemos visto hasta ahora podemos combinarlo como queramos.

 

when 101.kill or 102.kill or 103.kill begin
	   say("¡Hola mundo!") --muestra en dialogo
end
when login with pc.get_map_index == 41 or 101.kill with pc.get.level() > 5 and pc.count_item(19) > 1 begin
	   say("¡Hola mundo!") --muestra en dialogo
end
when 101.kill with pc.get_map_index == 1 or 101.kill with pc.get_map_index == 41 begin
	   say("¡Hola mundo!") --muestra en dialogo
end

Podemos hacer tantas combinaciones de whens como queramos. Tan solo es saber entender el funcionamiento de las quests.

Y lo más importante! Sin práctica no se aprende!

La mejor manera de aprender quest es mirar otras quests ya echas e intentar imitarlo, hacer pruebas y pruebas hasta ver el funcionamiento, o leer este curso.

Pero claro! Solo con este curso no vais a aprender. Recordar que, sin práctica, nada se aprende!

Enlace para comentar
Compartir en otros sitios

Buena raul, me gusto el guiño (no se si alguien se habra fijado) a los programadores novatos para los que tan aprendiendo lua xd:

 

 

 

Que es lo tipico que hace una persona cuando aprender a programar, un programa que diga Hello World.

 

P.D: Siguiente capi me toca a mi.

 

No podemos hacer un curso sin decir eso :D
Enlace para comentar
Compartir en otros sitios

Excelente Raúl, ya he tenido muchas ideas de crear quest, otra cosa, si es posible que hagas la guía de como poner o la función para que te cargue una imagen en la quest, así como en el .sg :okay:

 

Mira la mision de caza ahi aparesen:

 

setbgimage('level_bg.tga')

 

y luego mas adelante

 

addimage(20,12,special.levelup_img[special.levelup_quest[lev][s*2-1]])

 

eso lo puedes utilizar para poner imagenes en las misiones de forma simple, reemplazando y/o agregando las imagenes que quieras cargar.

Enlace para comentar
Compartir en otros sitios

  • Dilong locked this tema
Guest
Este tema está cerrado a otras respuestas.
  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...