KeKo

Capitulo VI - Nuestro colegas los locales

Buenas zoneros y zoneras, de nuevo esta aqui el curso de creacion de quests (despues de un pequeño descanso por causas de mucho curro) para ayudaros en vuestro apasionante viaje por el mundo de las quest de metin2.

 

En el capitulo de hoy os voi a hablar un poco sobre los popularmente llamados locales, que sera algo que utiliceis constantemente en vuestras quests.

 

Y para que quiero yo un local?

 

Pues eso tiene sencilla respuesta: un local nos sirve para trabajar con variables. Y aqui os estareis preguntando: um vale keko, pero que es una variable? Pues una variable (como su nombre indica) no es mas que el valor de una funcion que no es siempre el mismo.

 

No me ha quedado muy claro eso, me pones un ejemplo?

 

Venga va, os pondre un ejemplo: pensemos en una funcion que saque informacion del personaje, como puede ser pc.get_level. Esta claro que el resultado que muestre este funcion al recoger el nivel no va a ser siempre el mismo, ya que no siempre seremos un nivel fijo. He aqui entonces un resultado que es una variable, por lo que si queremos trabajar con ese resultado podremos usar un local.

 

Veamos otro ejemplo por si aun no os ha quedado claro, con el más típico de todos los local: el local select

 

local keko = select ("Hola"  , "Adios")

Ese es un local select de dos opciones. Para que os ambienteis los local select se usan cuando tenemos un dialogo, ya que como es obvio si vamos a hacer escojer entre diferentes opciones el dialogo no sera fijo, si no que tendra una variacion para escojer entre 2 nuevos dialogos que no son fijos, dependen de cada local select que hagamos.

 

Ya voi entendiendo algo, explicame: como se estructura un local?

 

Para usar un local siempre tendremos que escribirlo de la siguiente manera:

 

local nombre = variable

En el cual:

 

- local se pone siempre igual.

- nombre: ahi ponemos el nombre que queramos a nuestro local (local keko por ejemplo como puse yo arriba)

- variable: ahi pondremos la variable con la queramos trabajar (select en el caso de los dialogos o pc.get_level() en el ejemplo anterior)

 

Detalle MUY imporante: Teneis que tener MUY claro que un local no es lo mismo que una condicion, veamos un ejemplo:

 

if pc.get_level() == 1 then

local nivel = pc.get_level()

Como veis tanto la condicion como el local trabajan con una variable (pc.get_level), pero ojo! hay una diferencia muy grande entre ambos:

 

- La condicion no utiliza la variable, si no que da un valor fijo a la funcion (el nivel debe ser igual a 1) .

- El local sí utliza la variable: si nosotros ponemos la palabra nivel en nuestra quest despues del local el resultado que mostrara en el juego sera nuestro nivel (es decir una variable).

 

Y eso se nota en que (como espero que os hayais fijado) la condicion es una comparacion, por lo que lleva un == (que se usa en lua para comparar datos) y el local lleva un =

 

Ya se hacer un local, ahora que hago con el??

 

Pues resulta que hay momentos en los que os encontrareis con cosas en vuestras quest que seran variables, y no podreis simplemente poner una funcion, veamos algunos ejemplos:

 

quest expnegativa begin
state start begin

    when login begin

		 if pc.get_exp() < 0 then

				 local exper = pc.get_exp()
				 pc.give_exp2(-exper)
				 chat("Anda, tenias exp negativa")
				 chat("pero ya te la puse bien")
		 end
end
		 end
end

En este ejemplo, si nos logeamos con exp menor que 0 (negativa) usaremos el local exper para que recoja la variable de nuestra exp (que como ya sabeis a estas alturas, no es un dato fijo) y lo use para darnos tanta exp como tenemos en negativo pasandola a positivo (es decir poniendole el - al exper ya que - por - es mas) y asi dejarla en 0 otra vez.

 

Como acabo de explicar hemos usado un local ya que si lo hubieramos como pongo aqui abajo no funcionaria, ya que no podemos meter una funcion dentro de otra: y para eso usamos un local como habeis visto arriba.

 

 

quest expnegativa begin
state start begin

    when login begin

		 if pc.get_exp() < 0 then

				 pc.give_exp2(-pc.get_exp()) -- Linea mala
				 chat("Anda, tenias exp negativa")
				 chat("pero ya te la puse bien")
		 end
end
		 end
end

Ademas, lo bueno que tienen los local es que no tienen que ser siempre una funcion, mirad un ejemplo:

 

quest explicandolocales begin
state start begin
when 20094.chat."Quiero un local" begin
say_title("Quiero un local")
say("")
say("Hola, si estas leyendo el curso")
say("de quests del majo de keko")
say(" te estara explicando los local")
say("asi que toma este item")
say("")
local objeto = 27003
pc.give_item2(objeto, 1)
end
  end
    end

Anda! Podemos poner por ejemplo un numero en un local tmbn , pues si! De paso esto me sirve para deciros que no siempre el local es la unica opcion, ya que ahi podria haber puesto simplemente la id 27003 en el pc.give_item2 y no habria problema.

 

Por lo tanto el detalle mas importante que debereis tener en cuenta es el de que no podemos meter una funcion dentro de otra, pero si un local: veamos otro ejemplo para que os quede claro:

 

quest bonus begin
state start begin
when 70044.use begin
local reino = pc.get_empire()
affect.add_collect(apply,ATT_GRADE_BONUS,reino*1000, 60*30)
end
end
end

Como podeis ver este item es algo racista, dependiendo de tu reino (de nuevo otra variable) te dara mas o menos del bonus de ataque, de la siguiente forma:

 

local reino = pc.get_empire() -- recojemos el dato del reino del pj

reino*1000 -- Como veis usamos nuestro local, al ponerlo de esa manera os dara tanto ataque como vuestro reino (1, 2 o 3 que recordar que en quests no hay shinso, chunjoo ni jinno) multiplicado (el * sirve para multiplicar) por 1000

Y de nuevo, si hubierais puesto asi no os habria funcionado.

 

affect.add_collect(apply,ATT_GRADE_BONUS,pc.get_empire()*1000, 60*30)

Ya lo entiendo!!! , alguna cosa mas?

 

Pues ahora que ya sabeis como funcionan y como usar los local ya poco me queda por deciros, nada mas que que hay una serie de funciones de quests que solo se utilizan en local como son:

 

local texto = input()

Que sirve para que el jugador introduzca un texto (lo que obviamente es una variable, no se va a escribir un mensaje fijo si no lo que ponga el pj).

 

local numero = math.random(1,100)

Que sirve para que el juego saque un numero aleatorio comprendido entre 1 y 100 (en este caso, ya que podeis poner los que querais en el parentesis) y que de nuevo es una variable (ya que el resultado va variando cada vez).

 

*Nuestro amigo el local select*

 

local elegir = select ("Me gusta" , "No me gusta")

Ya que este es el local mas habitual que vais a usar en vuestras quests voi a centrarme un poco en el: cuando tenemos un dialogo que siempre es igual:

 

say("Hola me llamo keko")
say("estoi haciendo un curso de quests")
say("que opinas de el?")

cada vez que veamos ese dialogo siempre sera ese, mientras que si metemos un local select:

 

say("Hola me llamo keko")
say("estoi haciendo un curso de quests")
say("que opinas de el?")

local pregunta = select ("Me encanta" , "Me mola" , "Me gusta" , "Lo odio")

ya no siempre pasara la mismo, el dialogo cambiara (variará, ya tenemos una variable de por medio) dando lugar a diferentes opciones.

 

Ahi hay un detalle importante, vuestros locales (cualquier no solo el select) podeis usarlos para hacer una comparacion cpmo en el caso del select, ya que tenemos que asignar lo que queremos que pase en cada una de las nuevas variantes del dialogo:

 

say("Hola me llamo keko")
say("estoi haciendo un curso de quests")
say("que opinas de el?")

local pregunta = select ("Me encanta" , "Me mola" , "Me gusta" , "Lo odio")

if pregunta == 1 then

say("asi me gusta!")

elseif pregunta ==2 then

say("buen chico")

elseif pregunta == 3 then

say("deberias ponerle mas entusiasmo")

elseif pregunta == 4 then

say("baneado!")

Como veis ahi hago que a cada una de las variantes se les haga una comparacion:

 

if pregunta == 1 then

Es decir, si de las opciones que hemos hecho en el dialogo elegimos la primera.

 

Pues esto sirve para todos los locales:

 

local sexo = pc.get_sex()
if sexo == 1 then
say("eres un tio")
elseif sexo == 2 then
say("eres una tia")

Eso fue un ejemplo, poco a poco tendreis que ir viendo vosotros cuando usar vuestro propios locales.

 

Y hasta aqui ha llegado este emocionante nuevo capitulo del curso de creacion de quests de KeKo y ElRaulxX, estad atentos a nuevos capitulos y recordad:

 

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!

 

Un saludo, KeKo

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!


Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.


Conectar ahora

  • Recientemente navegando por este tema   0 miembros

    No hay usuarios registrados visitando esta página.