ChuchoGamer Publicado 28 de Marzo del 2020 Reportar Compartir Publicado 28 de Marzo del 2020 Hola amigos Quiero pedirles un favor de Que alguien me pueda Ayudar a Crear una quest de un item por ejemplo Si soy ninja o war o sura o chaman al momento de que abra el item por ejemplo abro el item si soy ninja que me de cosas de ninja o si soy war que me de cosas de war o si soy sura que me de cosas de sura y si soy chaman que me cosas de chaman asi y que me Baje de nivel al 1 etc.... Espero que me puedan ayudar Gracias Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
TheZurka Publicado 28 de Marzo del 2020 Reportar Compartir Publicado 28 de Marzo del 2020 quest regalar_luna begin state start begin when 40004.use begin --siempre que uses el item 40004 ejecutará el código if pc.get_job() == 0 then --job = 0 es el guerrero, job = 1 es ninja, job = 2 es sura, job = 3 es chaman, job = 4 es lycan pc.give_item2_select(idobjeto) --entre parentesis metes el id del objeto, 299 en el caso de una luna+9 end --end del if end --end del when end --end del state end --end del quest basicamente la idea sería esta. Luego ya lo vas modificando a tu manera con las funciones que tiene definidas el propio metin Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 28 de Marzo del 2020 Reportar Compartir Publicado 28 de Marzo del 2020 quest itemxraza begin state start begin when id_item.use begin --cambia aquí el ítem items = { {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems guerrero. Solo sigue el patrón {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems ninja {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems sura {{item1, cant1}, {item2, cant2}, {item3, cant3}} --ítems chamán } pos_raza = pc.job+1 for i = 1, table.getn(items[pos_raza]) do pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2]) end end end end Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
ChuchoGamer Publicado 28 de Marzo del 2020 Author Reportar Compartir Publicado 28 de Marzo del 2020 hace 5 horas, TheZurka dijo: quest regalar_luna begin state start begin when 40004.use begin --siempre que uses el item 40004 ejecutará el código if pc.get_job() == 0 then --job = 0 es el guerrero, job = 1 es ninja, job = 2 es sura, job = 3 es chaman, job = 4 es lycan pc.give_item2_select(idobjeto) --entre parentesis metes el id del objeto, 299 en el caso de una luna+9 end --end del if end --end del when end --end del state end --end del quest basicamente la idea sería esta. Luego ya lo vas modificando a tu manera con las funciones que tiene definidas el propio metin Gracias los probare Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
ChuchoGamer Publicado 28 de Marzo del 2020 Author Reportar Compartir Publicado 28 de Marzo del 2020 hace 53 minutos, caanmasu dijo: quest itemxraza begin state start begin when id_item.use begin --cambia aquí el ítem items = { {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems guerrero. Solo sigue el patrón {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems ninja {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems sura {{item1, cant1}, {item2, cant2}, {item3, cant3}} --ítems chamán } pos_raza = pc.job+1 for i = 1, table.getn(items[pos_raza]) do pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2]) end end end end Gracias los probare Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
TheZurka Publicado 28 de Marzo del 2020 Reportar Compartir Publicado 28 de Marzo del 2020 hace 4 horas, caanmasu dijo: quest itemxraza begin state start begin when id_item.use begin --cambia aquí el ítem items = { {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems guerrero. Solo sigue el patrón {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems ninja {{item1, cant1}, {item2, cant2}, {item3, cant3}}, --ítems sura {{item1, cant1}, {item2, cant2}, {item3, cant3}} --ítems chamán } pos_raza = pc.job+1 for i = 1, table.getn(items[pos_raza]) do pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2]) end end end end Estaría bien aprender la sintaxis de los arrays, todavía voy a lo simple xD Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 28 de Marzo del 2020 Reportar Compartir Publicado 28 de Marzo del 2020 hace 19 horas, TheZurka dijo: Estaría bien aprender la sintaxis de los arrays, todavía voy a lo simple xD Jeje ok xD Estas son estructuras de datos. En el caso de los arrays son de dos dimensiones (una fila) y en el caso de matrices son de tres dimensiones (filas y columnas) array = {} Esto es un array vacío. array = {10} Esto es un array con un elemento. En Lua la posición de los arrays o matrices empiezan desde 1. Ese fue un número, pero podemos poner cualquier otro tipo de dato. Por ejemplo, pondré un array. array = {{10}} Esto de adentro es un array con un solo elemento. Se puede acceder al 10 así: array[1][1] ¿Por qué? míralo de esta forma array = { {10} } que es lo mismo. El primer elemento de array es {10} (pos 1), y la posición del 10 en ese arreglo es 1. Otro ejemplo: array = { {3, 4, 5}, {6, 7, 8} } Un array dentro de otro prácticamente es una matriz porque automáticamente estás creando columnas. Eso de arriba es lo mismo que poner: array = { {3, 4, 5}, {6, 7, 8} } Es un array con dos arrays adentro. Vamos a acceder al 4: array[1][2] Hay una forma de entenderlo mientras uno está aprendiendo y es suponer que array[fila][columna] (esto ya no es tan así cuando es más compleja la estructura) Entonces para acceder al 4, vas a la fila 1, columna 2 Ahora la forma genérica de la matriz quedaría: array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} } Por qué no se le pone la coma al final? por esto: array = {1, 2, 3,} Sería un error de sintaxis. Por qué hay algunas estructuras que sí se puede poner la coma al final? Porque es una función que retorna, o sea: function info() return { {3, 4, 5}, {6, 7, 8}, } end Esto es válido porque si ponemos return { {3, 4, 5}, {6, 7, 8}, } (mira la coma después del 8 ) lo que se toma después de la coma será un "nil" o nulo, pero sí es válida la sintaxis. ¿Cómo acceso a varios elementos? Si queremos mostrar el 3, 4 y 5 hacemos esto: for i = 1, table.getn(array[1]) do chat(array[1][i]) end table.getn() es una función que te devuelve el tamaño del array. Y al poner array[1], ¿cuántos elementos tiene? pues los elementos que tiene el primer arreglo {3, 4, 5}, o sea, 3. No olvidar que hay que poner i = 1. Pongo array[1] porque en el ciclo la variable es la i, que aumenta de uno en uno en este caso. Entonces mostrará en el chat esto: 3 -- por el array[1][1] 4 -- por el array[1][2] 5 -- por el array[1][3] Ahora explicaré el código de la quest pos_raza = pc.job+1 En verdad la función es pc.get_job() pero en el questlib.lua se le asigna otra variable para abreviar pc.job = pc.get_job() Así que es lo mismo. Puse +1 porque pc.job retorna 0, 1, 2, 3 (guerrero, ninja, sura, chamán respectivamente) Los arreglos empiezan en 1, así que debo sumarle 1 para "cuadrar" mi arreglo. Luego queda guerrero 1, ninja 2, sura 3, chamán 4. Que son las posiciones respectivas de mi arreglo. Si no hago esto, simplemente no funcionará porque no existe la posición 0. Luego en la línea pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2]) Puse que items[pos_raza][i][1] accediera al array en la posición de su personaje, o sea, si es guerrero, entonces va a la primera fila. Luego se va recorrer cada mini arreglo. Como cada mini arreglo tiene dos elementos (item, cantidad), lo que me interesa en este caso es ítem, así que elijo la primera posición Y hago lo mismo con la cantidad. Solo le cambio la posición del mini arreglo a 2. Hay una forma para ponerle posiciones arbitrariamente a los arreglos, así: array = { [0] = {tu contenido}, [1] = {tu contenido}, [2] = {tu contenido}, [3] = {tu contenido} } De esta forma al pc.job no se le sumaría 1 porque establecí las nuevas posiciones. Si quieres poner que la posición sea un texto también se puede array = { ["un_texto"] = "hola", ["un_numero"] = 10 } Para acceder a "hola" solo pones array.un_texto y para acceder al 10 pones array.un_numero Un ejercicio en la vida real de mis quests :v quest_biolog = { ["prob_elixir"] = 30, [0] = { ["level_req"] = 30, ["item_req"] = { ["id"] = 30006, ["count"] = 10, ["time_delay"] = 0, --seconds ["success_prob"] = 60, ["monsters_drop"] = {631, 632, 633, 634}, ["prob_drop"] = 1 -- 1(%) to 500(%) }, ["soul_stone"] = { ["id"] = 30220, ["prob_drop"] = 1 -- 1(%) to 500(%) }, ["award"] = { ["box"] = 50109, ["bonus"] = { { ["id"] = 8, ["value"] = 10, ["apply"] = true -- true: apply, false: point } } } }, En la última línea, después de la coma va a el elemento [1] y así con todas las misiones del biólogo pero lo voy a hacer solo con el primero. Quiero poner el nivel que se requiere para que la misión aparezca, entonces voy al level_req = 30 así: quest_biolog[0].level_req Ahora quiero hacer que los mobs me dropeen el objeto (en este caso son dientes de orco), entonces debo ir a ver monsters_drop: for i = 1, table.getn(quest_biolog[0].item_req.monsters_drop) do quest_biolog[0].item_req.monsters_drop[i] end Necesito saber cuál es el objeto a entregar y cuántos: quest_biolog[0].item_req.id quest_biolog[0].item_req.count Ahora debo darle al pj los bonus permanentes: for i = 1, table.getn(quest_biolog[0].award.bonus) do quest_biolog[0].award.bonus[i].id quest_biolog[0].award.bonus[i].value end Hay una bandera que dice si el bonus es apply o no, eso es otro tema. Lo importante era saber cómo llegar a cada elemento. Ahora si queremos hacer esto con todas las misiones: for i = 1, table.getn(quest_biolog[0].award.bonus) do for j = 0, table.getn(quest_biolog) do quest_biolog[j].award.bonus[i].id quest_biolog[j].award.bonus[i].value end end que obviamente no va a suceder, solo era para el ejercicio. En mi quest de biólogo tengo esa parte así: local awards = quest_biolog[pc.getqf("biolog_quest")].award for i = 1, table.getn(awards.bonus) do local attr = awards.bonus[i].id local value = awards.bonus[i].value if awards.bonus[i].apply == true then affect.add_collect(attr, value, 60*60*24*365*60) else affect.add_collect_point(attr, value, 60*60*24*365*60) end end Bueno este fue más o menos el tutorial. La práctica hace al maestro. Éxitos! TheZurka y - Evolve - reacciono a esto 2 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
ChuchoGamer Publicado 28 de Marzo del 2020 Author Reportar Compartir Publicado 28 de Marzo del 2020 hace 39 minutos, caanmasu dijo: Jeje ok xD Estas son estructuras de datos. En el caso de los arrays son de dos dimensiones (una fila) y en el caso de matrices son de tres dimensiones (filas y columnas) array = {} Esto es un array vacío. array = {10} Esto es un array con un elemento. En Lua la posición de los arrays o matrices empiezan desde 1. Ese fue un número, pero podemos poner cualquier otro tipo de dato. Por ejemplo, pondré un array. array = {{10}} Esto de adentro es un array con un solo elemento. Se puede acceder al 10 así: array[1][1] ¿Por qué? míralo de esta forma array = { {10} } que es lo mismo. El primer elemento de array es {10} (pos 1), y la posición del 10 en ese arreglo es 1. Otro ejemplo: array = { {3, 4, 5}, {6, 7, 8} } Un array dentro de otro prácticamente es una matriz porque automáticamente estás creando columnas. Eso de arriba es lo mismo que poner: array = { {3, 4, 5}, {6, 7, 8} } Es un array con dos arrays adentro. Vamos a acceder al 4: array[1][2] Hay una forma de entenderlo mientras uno está aprendiendo y es suponer que array[fila][columna] (esto ya no es tan así cuando es más compleja la estructura) Entonces para acceder al 4, vas a la fila 1, columna 2 Debes iniciar sesión para ver el contenido del enlace en esta publicación. Ahora la forma genérica de la matriz quedaría: array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} } Por qué no se le pone la coma al final? por esto: array = {1, 2, 3,} Sería un error de sintaxis. Por qué hay algunas estructuras que sí se puede poner la coma al final? Porque es una función que retorna, o sea: function info() return { {3, 4, 5}, {6, 7, 8}, } end Esto es válido porque si ponemos return { {3, 4, 5}, {6, 7, 8}, } (mira la coma después del 8 ) lo que se toma después de la coma será un "nil" o nulo, pero sí es válida la sintaxis. ¿Cómo acceso a varios elementos? Si queremos mostrar el 3, 4 y 5 hacemos esto: for i = 1, table.getn(array[1]) do chat(array[1][i]) end table.getn() es una función que te devuelve el tamaño del array. Y al poner array[1], ¿cuántos elementos tiene? pues los elementos que tiene el primer arreglo {3, 4, 5}, o sea, 3. No olvidar que hay que poner i = 1. Pongo array[1] porque en el ciclo la variable es la i, que aumenta de uno en uno en este caso. Entonces mostrará en el chat esto: 3 -- por el array[1][1] 4 -- por el array[1][2] 5 -- por el array[1][3] Ahora explicaré el código de la quest pos_raza = pc.job+1 En verdad la función es pc.get_job() pero en el questlib.lua se le asigna otra variable para abreviar pc.job = pc.get_job() Así que es lo mismo. Puse +1 porque pc.job retorna 0, 1, 2, 3 (guerrero, ninja, sura, chamán respectivamente) Los arreglos empiezan en 1, así que debo sumarle 1 para "cuadrar" mi arreglo. Luego queda guerrero 1, ninja 2, sura 3, chamán 4. Que son las posiciones respectivas de mi arreglo. Si no hago esto, simplemente no funcionará porque no existe la posición 0. Luego en la línea pc.give_item2(items[pos_raza][i][1], items[pos_raza][i][2]) Puse que items[pos_raza][i][1] accediera al array en la posición de su personaje, o sea, si es guerrero, entonces va a la primera fila. Luego se va recorrer cada mini arreglo. Como cada mini arreglo tiene dos elementos (item, cantidad), lo que me interesa en este caso es ítem, así que elijo la primera posición Y hago lo mismo con la cantidad. Solo le cambio la posición del mini arreglo a 2. Hay una forma para ponerle posiciones arbitrariamente a los arreglos, así: array = { [0] = {tu contenido}, [1] = {tu contenido}, [2] = {tu contenido}, [3] = {tu contenido } De esta forma al pc.job no se le sumaría 1 porque establecí las nuevas posiciones. Si quieres poner que la posición sea un texto también se puede array = { "un_texto" = "hola", "un_numero" = 10 } Para acceder a "hola" solo pones array.un_texto y para acceder al 10 pones array.un_numero Un ejercicio en la vida real de mis quests :v quest_biolog = { ["prob_elixir"] = 30, [0] = { ["level_req"] = 30, ["item_req"] = { ["id"] = 30006, ["count"] = 10, ["time_delay"] = 0, --seconds ["success_prob"] = 60, ["monsters_drop"] = {631, 632, 633, 634}, ["prob_drop"] = 1 -- 1(%) to 500(%) }, ["soul_stone"] = { ["id"] = 30220, ["prob_drop"] = 1 -- 1(%) to 500(%) }, ["award"] = { ["box"] = 50109, ["bonus"] = { { ["id"] = 8, ["value"] = 10, ["apply"] = true -- true: apply, false: point } } } }, En la última línea, después de la coma va a el elemento [1] y así con todas las misiones del biólogo pero lo voy a hacer solo con el primero. Quiero poner el nivel que se requiere para que la misión aparezca, entonces voy al level_req = 30 así: quest_biolog[0].level_req Ahora quiero hacer que los mobs me dropeen el objeto (en este caso son dientes de orco), entonces debo ir a ver monsters_drop: for i = 1, table.getn(quest_biolog[0].item_req.monsters_drop) do quest_biolog[0].item_req.monsters_drop[i] end Necesito saber cuál es el objeto a entregar y cuántos: quest_biolog[0].item_req.id quest_biolog[0].item_req.count Ahora debo darle al pj los bonus permanentes: for i = 1, table.getn(quest_biolog[0].award.bonus) do quest_biolog[0].award.bonus[i].id quest_biolog[0].award.bonus[i].value end Hay una bandera que dice si el bonus es apply o no, eso es otro tema. Lo importante era saber cómo llegar a cada elemento. Ahora si queremos hacer esto con todas las misiones: for i = 1, table.getn(quest_biolog[0].award.bonus) do for j = 0, table.getn(quest_biolog) do quest_biolog[j].award.bonus[i].id quest_biolog[j].award.bonus[i].value end end que obviamente no va a suceder, solo era para el ejercicio. En mi quest de biólogo tengo esa parte así: local awards = quest_biolog[pc.getqf("biolog_quest")].award for i = 1, table.getn(awards.bonus) do local attr = awards.bonus[i].id local value = awards.bonus[i].value if awards.bonus[i].apply == true then affect.add_collect(attr, value, 60*60*24*365*60) else affect.add_collect_point(attr, value, 60*60*24*365*60) end end Bueno este fue más o menos el tutorial. La práctica hace al maestro. Éxitos! Gracias Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Mensajes recomendados
Unirse a la conversación
Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.