Jump to content

sossin

Miembro
  • Contador contenido

    77
  • Ingreso

  • Última visita

  • Días ganados

    1

Actividad de reputación

  1. Me Gusta
    sossin got a reaction from serloard in ayuda con quest para abrir tienda me echan una mano ?   
    bueno por alli estube revisando una quest que hizo keko en la cual tu te trasportas pero no
    cliqueando un itens, sino dandole clic a una mision y te salia el menu de trasporte,
    yo quiero hacer algo igualito pero para las tiendas, osea q te salga una mision que diga
    por ejemplo " tiendas" , escoje q tienda quieres
     
    armaduras
    armas
    peinados
    accesorios
    tienda gm
     
    eso es lo q quiero , de echo hize una quest pero no sirve, me pueden ayudar a corregirla?
     
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  2. Me Gusta
    sossin got a reaction from Yukki Kun in error con quest = error string information]:8 "=" expected near "/" ayuda   
    esto es lo q me sale al compilar la quest
     

     
    y aqui esta la ques
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    alguien me echa una mano
  3. Me Gusta
    sossin got a reaction from ✿Elisa✿ in error con quest = error string information]:8 "=" expected near "/" ayuda   
    esto es lo q me sale al compilar la quest
     

     
    y aqui esta la ques
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    alguien me echa una mano
  4. Me Gusta
    sossin got a reaction from KRIBER8 in error con quest = error string information]:8 "=" expected near "/" ayuda   
    esto es lo q me sale al compilar la quest
     

     
    y aqui esta la ques
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    alguien me echa una mano
  5. Me Gusta
    sossin reacted to fuuton97 in [DUNGEON]Capítulo II - Cómo hacer una Dungeon (PRINCIPIANTES).   
    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.
  6. Me Gusta
    sossin reacted to ElRaulxX in Capitulo I - Introducción al curso de quest   
    ¡Buenas zone!
     
    Como ya os han dicho, nos dedicaremos keko y yo un tiempo a hacer juntos este graaaaan curso de quests (ya veréis como se os hará corto ). Keko me ha concedido el honor de ser el que abra el curso, así que eso haré jeje
    Los que me conozcan ya sabrán que lo que se me da mejor en cuanto a servidores de metin2 son las quests. Así que aquí estoy... dando un curso a unos cuantos ineptos de lenguaje quest (espero que la palabra inepto la dejemos de lado cuando acabéis este curso, mientras tanto, para mi seréis ineptos xd) para ver si alguien más aprende este lenguaje y dejáis tranquilo al pobre keko xdd
     
    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. Aunque, por mucha complicación de una quest, si la analizas detalladamente y entiendes su funcionamiento, cualquier quest puede sernos fácil.
    Como para eso aún falta mucho, empezaremos por el principio.
     
    Algo importante que tenéis que tener en cuenta es que esto no se aprende en un día. Tenemos que recordar que estamos escribiendo en el lenguaje que habla nuestro servidor. El servidor hará lo que nosotros le digamos que haga. Es por eso que es importante que aprendáis a hablar y pensar en lenguaje informático. Ejemplo:
     
    1 - Pienso en levantarme.
    2 - ¿Estoy levantado? Si es así, se cancela la acción. Sino, paso al siguiente punto.
    3 - Si tengo ganas de andar, pasaré al siguiente punto. Sino, no haré nada.
    4 - Acción de levantarse: ¿se ha ejecutado correctamente? Si es así, voy al siguiente punto. Sino, vuelvo al primer punto.
    5 - Andar = mover las piernas
    6 - Cuando muevo las piernas me desplazo, doy una vuelta y vuelvo a sentarme.
    7 - Vuelvo al primer punto.
    8 - No sé si entenderéis eso, cuando os vayáis familiarizando entenderéis porqué pongo eso y que utilidad tiene.
     
    Creo que lo más lógico antes de aprender algo, es decir que es ese algo. Por eso empezaré definiéndoos lo que es una quest.
     
     
    Qué es una quest?
     
    Podríamos decir que una quest es cualquier archivo que utilice el lenguaje quest. Digo "podríamos" ya que no es un lenguaje de programación propiamente dicho. El lenguaje quest es una derivación de LUA (que sí que es un lenguaje informático) con muchas modificaciones con la intención de adaptarlo a Metin2. Es por eso, que si nos fijamos, el servidor utiliza archivos lua.
    A mi parecer, no es el lenguaje más importante del servidor. Aún así, con este podemos realizar cientos de cosas muy variadas y interesantes.
    Lo más común de una quest son las típicas tipo trama (ves a tal sitio, haz esto, haz lo otro...) pero las quests dan muchísimas más opciones a parte de eso, me atrevería a decir que eso es lo menos usado. Con las quests podemos crear dungeons (como la Torre de demonios), podemos corregir bugs (como el bug de hp negativo), podemos informar a la gente (por ejemplo, anuncios automáticos),... podría decir muchísimas más cosas pero tengo una guía que acabar
     
     
    Funciones
     
    Lo más importante de una quests son las funciones, pues las quests trabajan con ellas, pero ¿qué es una función?
    Una función es un carácter o grupo de carácter que corresponden a una acción del servidor o sustituyen un código determinado.
    La función "caminar" (del anterior ejemplo) equivale a mover las piernas con la intención de cambiar de lugar. Si en una quest tuviéramos que desplazarnos (caso hipotético), deberíamos utilizar la función "caminar" para movernos.
    Pero si tengo que definir una función dentro de nuestro lenguaje quest, lo dividiría en dos partes (sería lo mismo, pero uno más visual que el otro):
     
    ·Funciones definidas por el servidor. Serían aquellas funciones que, al ponerlas en nuestra quest, haría una acción. Un ejemplo real, un tipo de estas funciones sería la función "pc.give_item2(19,1)". Al utilizar esta función en una quest, el usuario (al que llamaremos pronto como pc) obtendrá una unidad del objeto con la id 19. Esta función sustituye la acción interna del servidor de dar un objeto al usuario.
     
    ·Funciones no definidas por el servidor. Son aquellas funciones que hemos definido a parte, en un archivo que más adelante del curso diremos, o en la propia quest. Estas funciones sustituye a varias acciones del servidor o de lua. Por ejemplo, si tenemos que escribir varias veces en la quest que se muestre en pantalla un mensaje de error, podemos poner estas funciones para ahorrarnos código.
     
    En concepto, podríamos pensar que son muy distintas, pero vienen a ser lo mismo.
     
     
    Object - Quest ¿Lo mismo?
     
    Lo que es una quest creo que ya lo hemos definido, pero ¿object?
    El object es lo que lee el servidor. El servidor no reconoce nuestra quest, sino que lee fragmentos de nuestra quest (en lenguaje lua).
    Existe un compilador que nos transforma nuestras quests y las deposita en la carpeta object para que las lea el servidor. El compilador crea un directorio con unas ids determinadas que corresponden al item, mob, timer... y al interior nos la separa en states y en la acción que se realiza. De esta manera, el servidor puede hacer uso de las quests.
    Este compilador se llama qc (quest compilator) y se encuentra en el directorio quest de nuestro servidor.
    Por lo tanto, para implementar las questa tendremos que hacer uso de él.
    Aquí os dejo un TIP que os ayudará:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
     
    Este capitulo ha sido el más teórico de todos y quizá tenga que añadir más información. Los siguientes capítulos serán más prácticos.
    Poco a poco empezareis a descifrar todos los secretos de las quests.
×
×
  • Crear nuevo...