Jump to content

[DUNGEON]Capítulo II - Cómo hacer una Dungeon (PRINCIPIANTES).


fuuton97

Mensajes recomendados

Hola, estoy de nuevo aquí trayéndoles el segundo capítulo de DUNGEON, y hoy comenzaremos haciendo paso a paso una dungeon sencilla para principiantes, nos profundizaremos en una dungeon muy eficaz, con funciones generales y de su derivado.

Si te pasaste el Primer Capítulo te lo dejo aquí:

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

 

Bien, primero que nada, debemos saber que dungeon es lenguaje LUA, y por lo tanto vamos a usar sus funciones ya sean de dungeon o no.

 

1. Comenzamos haciendo lo inicial, que es lo que toda quest debe llevar:

quest dungeon_principiante begin			state start begin

2. En este paso comenzamos haciendo el cuerpo de la dungeon. Haremos el NPC que nos va a hacer llevar a X mapa para comenzar la dungeon:

				when 20090.chat."Dungeon Principiante" begin					say_title("Dungeon:")					say("Hola viajero, hoy te llevaré")					say("aun magico lugar donde podrás explorar")					say("nuevas tierras")					say("")					say("Quieres ir?")				local dungeon = select("Si" , "No")					if dungeon == 1 then						pc.warp(6521200, 1231200)					elseif dungeon == 2 then					return				end			end

Bueno, como ven es un simple NPC que te va a llevar a ese X mapa, para comenzar la dungeon.

 

3. Ahora iremos con el paso dentro del mapa, para darle el comienzo en sí, en este caso pondré que inicie mediante un mob, osea matando a ese mob.

		when 101.kill begin

Una vez aniquilado el mob 101, será comenzado la dungeon.

 

4. Paso seguido ponemos el timer, para que los lleve a comenzar en 5 segundos:


timer("inicio_dungeon", 5)
end
 
Se preguntarán, ¿Qué es un timer?, pues bien timer quiere decir en su significado literal, tiempo, pero este da inicio en tiempo, ejemplo, si queremos ir a otro lugar ponemos timer, más un nombre para darselo y el tiempo, puede ser en segundos, minutos, etc; también el timer se usa para acabar en un evento o algo. 

Esta fue la manera que trate de explicarles, no se si me entiendan bien xD.

 

5. En este paso ya comenzaremos con el inicio dentro de la dungeon, comenzaremos con el timer que pusimos anteriormente:

			when inicio_dungeon.timer begin

6. Aquí en este paso vamos a usar la primera función "d." de dungeon, y será para que nos lleve a X planta:

			d.new_jump_all(23, 2312, 2122)

Explicaré: La función mostrada nos da a ir a todos que se encuentren en ese mapa a esas coordenadas (X y Y), el número 23 que está de primero nos indica el INDEX de ese mapa donde los va a llevar o donde están.

 

7. El paso séptimo, usaremos nuestra segunda función dungeon, para eso miremos:

			d.setf("fuuton97", 1)

Cómo ven pusimos la función "d.setf", donde nos indica un nombre inicial secuencial denominado "fuuton97", cabe decir que se puede colocar cualquier nombre, pero siempre en todos los d.setf se debe colocar el mismo nombre; el número "1", indica que es el primer d.setf, en otras palabras primera planta en la que comenzamos la dungeon.

 

En este mismo paso colocamos un anunció, para darle ambiente a la dungeon, pero ojo, aquí comenzamos a jugar nuestra imaginación de como haremos divertido esta dungeon. Invocamos al mob con la función "d.spawn_mob".

Quedaría así:

			d.setf("fuuton97", 1)                        d.spawn_mob(101, 12312, 123123)			d.notice("Están en la Primera Planta!!!!")

8. Seguidamente ponemos a disposición el "juego", llamaremos a un mob que nos permitirá ir a la segunda planta. Le hacemos ambiente de diálogo a la dungeon:

				when 101.kill d.getf("fuuton97") == 1 begin					d.notice("Havepis destruido al Perro Salvaje...")					d.notice("Avanzarán a la segunda planta.")

Cómo ven vemos otra función nueva para ustedes, y es la "d.getf" que es el complemento de "d.setf", en esa hay que colocar el nombre que dimos para todas las plantas, osea fuuton97, en mi caso, pero ustedes pueden colocarle otro nombre; el "1" no hace referencia también como en "d.setf", en otras palabras quiere decir que vamos por la primera planta.

 

9. Cerramos con un timer que nos va a dirigir a la segunda planta y un end:

					timer("seguda_dungeon", 5)					end

Hasta ahora toda la dungeon debe ir así:

quest dungeon_principiante begin			state start begin										when 20090.chat."Dungeon Principiante" begin					say_title("Dungeon:")					say("Hola viajero, hoy te llevaré")					say("aun magico lugar donde podrás explorar")					say("nuevas tierras")					say("")					say("Quieres ir?")				local dungeon = select("Si" , "No")					if dungeon == 1 then						pc.warp(6521200, 1231200)					elseif dungeon == 2 then					return				end			end											when 101.kill begin			timer("inicio_dungeon", 5)			end												when inicio_dungeon.timer begin			d.new_jump_all(23, 2312, 2122)			d.setf("fuuton97", 1)                        d.spawn_mob(102, 12312, 123123)			d.notice("Están en la Primera Planta!!!!")			d.notice("Encontrar el Perro Salvaje.")			end							when 102.kill d.getf("fuuton97") == 1 begin					d.notice("Havepis destruido al Perro Salvaje...")					d.notice("Avanzarán a la segunda planta.")					timer("segunda_dungeon", 5)					end

10. Iniciamos llamando al timer, y hacemos lo mismo en los pasos anteriores, ambientando con diálogo, haciendo jugadas de kill mob o metines, etc, que vuele su imaginación:

			when segunda_dungeon.timer begin				d.jump_all(312312, 12131)				d.setf("fuuton97", 2)				d.spawn_mob(8025, 431232, 412421)				d.notice("Viajeros estás en la segunda planta")				d.notice("Acaba con un metin y avanzarán.")				end

11. Ahora llamamos al metin que pusimos y hacemos lo mismo con los pasos anteriores:

			when segunda_dungeon.timer begin				d.jump_all(312312, 12131)				d.setf("fuuton97", 2)				d.spawn_mob(8025, 431232, 412421)				d.notice("Viajeros estás en la segunda planta")				d.notice("Acaba con un metin y avanzarán.")				end							when 8025.kill with d.getf("fuuton97") == 2 begin				d.notice("Haveís acabado con un Metin")				d.notice("Avanzarán a la tercera planta....")				timer("tercera_dungeon", 5)				end

12. Acá iniciamos con el timer que dejamos, osea lo llamamos, y en esta tercera planta haremos este jueguito: Pondremos un drop en mob, soltará una llave, al coger la llave damos click derecho y nos llevará a la cuarta y última planta de dungeon.

 

En este paso conoceremos otras funciones que combinaremos con la dungeon, veamos:

			when tercera_dungeon.timer begin				d.jump_all(3123, 123123)				d.setf("fuuton97", 3)				d.setf("drop_dungeon", 0)				d.spawn_mob(103, 312312, 123123)				d.spawn_mob(104, 123123, 123123)				d.spawn_mob(105, 123123, 123123)				d.spawn_mob(103, 312312, 123123)				d.spawn_mob(104, 123123, 123123)				d.spawn_mob(105, 123123, 123123)				d.notice("Encontrar la llave!!!!!!!!!!")				end							when 103.kill or 104.kill or 105.kill with d.getf("fuuton97") == 3 begin				d.setf("drop_dungeon", d.getf("drop_dungeon")+1)				if d.getf("drop_dungeon") == 2				game.drop_item(43003, 1)				d.setf("drop_dungeon", 0)				end			end						when 43003.use begin				item.remove()				timer("cuarta_dungeon", 5)				end

Cómo ven es algo fantástico, el código de esta tercera planta es fácil, igual al de todos, solo invocamos más mob para el drop, utilizamos el game.drop_item para que suelte la llave.

 

13. Llamamos al timer, y haremos la última planta, que en este caso solo se hizo para 4.

 

Haremos los mismos pasos cómo los demás, solo veremos una función que agregaremos:

 

			when cuarta_dungeon.timer begin			d.jump_all(12312, 13212)			d.setf("fuuton97", 4)			d.spawn_mob(108, 12312, 12312)			d.notice("Acaba con el Jefe y ganarás la Dungeon")			end						when 108.kill with d.getf("fuuton97") == 4 begin				game.drop_item(289, 1)				notice_all("El Jugador ".. pc.get_name() .." ha derrotado al Jefe...")				d.notice("Acabaron con el Jefe, felicitaciones...")				d.notice("Tienen 10 segundos para recoger su premio..")				timer("salir_dungeon", 10)				end 

 

Bueno como ven pusimos el Jefe, al matarlo suelta un item, que es la recompensa, ponemos un anuncio General para que lo vean todos de quien fue el que mató al Jefe, cerramos con un timer de 10 segundos para recoger el premio, y nos llevará para afuera de la dungeon.

 

14. Último paso, solo añadiremos el timer que nos llevará fuera de la dungeon, o si quieres llevar a todos a sus citys:

		when salir_dungeon.timer begin				d.exit_all()				end			end		end

También podemos usar la otra función: warp_to_all_village():

		when salir_dungeon.timer begin				warp_to_all_village()				end			end		end

Por último cerramos con end del when, otro end del begin de inicio y el segundo begin de inicio, con total de 3 end's.

 

 

Y para ver como quedó toda la dungeon, pequeña pero atendible para este curso:

quest dungeon_principiante begin			state start begin										when 20090.chat."Dungeon Principiante" begin					say_title("Dungeon:")					say("Hola viajero, hoy te llevaré")					say("aun magico lugar donde podrás explorar")					say("nuevas tierras")					say("")					say("Quieres ir?")				local dungeon = select("Si" , "No")					if dungeon == 1 then						pc.warp(6521200, 1231200)					elseif dungeon == 2 then					return				end			end											when 101.kill begin			timer("inicio_dungeon", 5)			end												when inicio_dungeon.timer begin			d.new_jump_all(23, 2312, 2122)			d.setf("fuuton97", 1)			d.spawn_mob(102, 12312, 123123)			d.notice("Están en la Primera Planta!!!!")			d.notice("Encontrar el Perro Salvaje.")			end							when 102.kill d.getf("fuuton97") == 1 begin					d.notice("Havepis destruido al Perro Salvaje...")					d.notice("Avanzarán a la segunda planta.")					timer("segunda_dungeon", 5)					end						when segunda_dungeon.timer begin				d.jump_all(312312, 12131)				d.setf("fuuton97", 2)				d.spawn_mob(8025, 431232, 412421)				d.notice("Viajeros estás en la segunda planta")				d.notice("Acaba con un metin y avanzarán.")				end							when 8025.kill with d.getf("fuuton97") == 2 begin				d.notice("Haveís acabado con un Metin")				d.notice("Avanzarán a la tercera planta....")				timer("tercera_dungeon", 5)				end											when tercera_dungeon.timer begin				d.jump_all(3123, 123123)				d.setf("fuuton97", 3)				d.setf("drop_dungeon", 0)				d.spawn_mob(103, 312312, 123123)				d.spawn_mob(104, 123123, 123123)				d.spawn_mob(105, 123123, 123123)				d.spawn_mob(103, 312312, 123123)				d.spawn_mob(104, 123123, 123123)				d.spawn_mob(105, 123123, 123123)				d.notice("Encontrar la llave!!!!!!!!!!")				end							when 103.kill or 104.kill or 105.kill with d.getf("fuuton97") == 3 begin				d.setf("drop_dungeon", d.getf("drop_dungeon")+1)				if d.getf("drop_dungeon") == 2				game.drop_item(43003, 1)				d.setf("drop_dungeon", 0)				end			end						when 43003.use begin				item.remove()				timer("cuarta_dungeon", 5)				end											when cuarta_dungeon.timer begin			d.jump_all(12312, 13212)			d.setf("fuuton97", 4)			d.spawn_mob(108, 12312, 12312)			d.notice("Acaba con el Jefe y ganarás la Dungeon")			end						when 108.kill with d.getf("fuuton97") == 4 begin				game.drop_item(289, 1)				notice_all("El Jugador ".. pc.get_name() .." ha derrotado al Jefe...")				d.notice("Acabaron con el Jefe, felicitaciones...")				d.notice("Tienen 10 segundos para recoger su premio..")				timer("salir_dungeon", 10)				end 													when salir_dungeon.timer begin				warp_to_all_village()				end			end		end

Espero que valoren mi tiempo, esto solo es una dungeon explicativa para principiantes, solo digo y hago lo básico, luego iremos añadiendo más funciones, condiciones, etc. 

 

Aprovecho para decir que se hacen Dungeon's profesionales, con las plantas que quieran, y como quieren que sea, claro no se vallan de la imaginación xD, a tan solo 15 Euros; pueden contáctarme por skype: fuuton97 o enviarme un mensaje por mp al foro.

 

 

Próximo capítulo: [DUNGEON] Capítulo III - Condiciones y Funciones en Dungeon.

 

Espero que valoren este POST, me tome mi tiempo para ustedes, no desaprovechen esta oportunidad.

 

Saludos.

Enlace para comentar
Compartir en otros sitios

Para salir de una dungeon supongo que la función será d.exit_all(), y no warp_all_to_village(), que por cierto tienes warp_to_all_village(). XD En los kill tienes d.setf("drop_dungeon") == 2, en vez de get, y en el timer cuarta_dungeon el d.spawn supongo que quieres decir d.spawn_mob

Madre mía, eso me pasa por no ver antes de publicar xDDDDDDD! Vale gracias.

 

Pero si miras yo puse dos opciones a usuario, no se que te cuesta mirar ¬¬, aparte para mi siempre es mejor llevar a la city. 

Enlace para comentar
Compartir en otros sitios

En esta parte

when 20090.chat."Dungeon Principiante" begin	say_title("Dungeon:")	say("Hola viajero, hoy te llevaré")	say("aun magico lugar donde podrás explorar")	say("nuevas tierras")	say("")	say("Quieres ir?")	local dungeon = select("Si" "No")	if dungeon == 1 then		pc.warp(6521200, 1231200)	if dungeon == 2 then		return	endend

Hay 2 errores, uno es el siguiente

local dungeon = select("Si" "No")

Esto, es así

local dungeon = select ("Si", "No")

Segundo, esto

local dungeon = select("Si", "No")	if dungeon == 1 then		pc.warp(6521200, 1231200)	if dungeon == 2 then		return	end

Está mal, esto es así

if dungeon == 1 then	pc.warp(6521200, 1231200)elseif dungeon == 2 then	returnend

Tercero, esto

when 103.kill or 104.kill or 105.kill with d.getf("fuuton97") == 3 begin	d.setf("drop_dungeon", d.getf("drop_dungeon")+1)	if d.detf("drop_dungeon") == 2	game.drop_item(43003, 1)	d.setf("drop_dungeon", 0)	endend

También está mal, debería ser así

when 103.kill or 104.kill or 105.kill with d.getf("fuuton97") == 3 begin	d.setf("drop_dungeon", d.getf("drop_dungeon") +1)	if d.getf("drop_dungeon") == 2 then		game.drop_item(43003, 1)		d.setf("drop_dungeon", 0)	endend

Eso es lo que ví, un gran dungeon como tú dices serlo, debe arreglar todo esto y no equivocarse

 Aprovecho para decir que se hacen Dungeon's profesionales, con las plantas que quieran, y como quieren que sea, claro  no se vallan de la imaginación xD, a tan solo 15 Euros

No es por nada, pero tienes que ver los errores antes de decir que eres professional en las dungeons.

Enlace para comentar
Compartir en otros sitios

En esta parte

when 20090.chat."Dungeon Principiante" begin	say_title("Dungeon:")	say("Hola viajero, hoy te llevaré")	say("aun magico lugar donde podrás explorar")	say("nuevas tierras")	say("")	say("Quieres ir?")	local dungeon = select("Si" "No")	if dungeon == 1 then		pc.warp(6521200, 1231200)	if dungeon == 2 then		return	endend

Hay 2 errores, uno es el siguiente

local dungeon = select("Si" "No")

Esto, es así

local dungeon = select ("Si", "No")

Segundo, esto

local dungeon = select("Si", "No")	if dungeon == 1 then		pc.warp(6521200, 1231200)	if dungeon == 2 then		return	end

Está mal, esto es así

if dungeon == 1 then	pc.warp(6521200, 1231200)elseif dungeon == 2 then	returnend

Tercero, esto

when 103.kill or 104.kill or 105.kill with d.getf("fuuton97") == 3 begin	d.setf("drop_dungeon", d.getf("drop_dungeon")+1)	if d.detf("drop_dungeon") == 2	game.drop_item(43003, 1)	d.setf("drop_dungeon", 0)	endend

También está mal, debería ser así

when 103.kill or 104.kill or 105.kill with d.getf("fuuton97") == 3 begin	d.setf("drop_dungeon", d.getf("drop_dungeon") +1)	if d.getf("drop_dungeon") == 2 then		game.drop_item(43003, 1)		d.setf("drop_dungeon", 0)	endend

Eso es lo que ví, un gran dungeon como tú dices serlo, debe arreglar todo esto y no equivocarse

 Aprovecho para decir que se hacen Dungeon's profesionales, con las plantas que quieran, y como quieren que sea, claro  no se vallan de la imaginación xD, a tan solo 15 Euros

No es por nada, pero tienes que ver los errores antes de decir que eres professional en las dungeons.

Vale, Gracias, como iba a hacer esta guía fui muy rápido y no percibí esos errores, pero gracias por verlos, para eso eres Corrector :P.

 

Referente a lo que dices, si no supiera dungeon, no fuese posteado 3 dungeon a la sección como regalo, simplemente me equivoqué por ir a prisas,  espero que te quede claro. :)

 

Saludos,

Enlace para comentar
Compartir en otros sitios

  • 3 weeks later...

En esta parte

when 20090.chat."Dungeon Principiante" begin	say_title("Dungeon:")	say("Hola viajero, hoy te llevaré")	say("aun magico lugar donde podrás explorar")	say("nuevas tierras")	say("")	say("Quieres ir?")	local dungeon = select("Si" "No")	if dungeon == 1 then		pc.warp(6521200, 1231200)	if dungeon == 2 then		return	endend

Hay 2 errores, uno es el siguiente

local dungeon = select("Si" "No")

Esto, es así

local dungeon = select ("Si", "No")

No es por nada, pero tienes que ver los errores antes de decir que eres professional en las dungeons.

 

Sera el parentesis separado del select porque lo digas tu? Yo siempre lo he escrito junto, no pasa nada.

 

Y os he dicho millones de veces que a un select que cierre el diálogo NO HAY QUE PONERLE NADAAAAAAAA

if dungeon == 2 then return end

Y la funcion de lo que pasa si le das al 1 y ya esta, te ahorras lineas.

 

Un detalle:

d.spawn_mob(103, 312312, 123123)d.spawn_mob(104, 123123, 123123)d.spawn_mob(105, 123123, 123123)d.spawn_mob(103, 312312, 123123)d.spawn_mob(104, 123123, 123123)d.spawn_mob(105, 123123, 123123)

No se que haces exactamente ahi, supongo que las cordes seran inventadas pero spameos multiples de mobs esta la estructura:

local cordes = {{cordx,cordy},{cordx,cordy},{cordx,cordy}}for i=1, cantidadmobs dod.spawn_mob(idmob,cordes[i][1],cordes[i][2]do

(Por si a alguien le sirve)

 

Sobre la guia la verdad es que ni la he leido (me da igual ya no trabajo en metin2) pero es una pena que no la haya hecho yo que precisamente era el que mejor hacia dungeons del foro xd

Enlace para comentar
Compartir en otros sitios

  • 3 months later...
  • 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...