Jump to content

caanmasu

Members
  • Content Count

    112
  • Joined

  • Last visited

  • Days Won

    9

caanmasu last won the day on September 1 2019

caanmasu had the most liked content!

5 Followers

About caanmasu

  • Rank
    Interesado

Recent Profile Visitors

737 profile views
  1. 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!
  2. quest bonus_7 begin state start begin when id_npc.take begin -- cambia por el id de tu NPC if item.get_type() == 1 then item.set_attribute(6, type, value) end end end end
  3. 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
  4. Sí se puede, con cmdchat, se envía el comando de la interfaz del dopador desde la quest hacia el cliente. No me pregunten cómo hacerlo porque no sé xD
  5. Te refieres a poner un botón en alguna parte y que al darle clic aparezca el dopador?
  6. Lo entenderás en una guerra de reinos xD
  7. Lo bueno de confundir a la gente es que no saben que están confundidas - El virus 2020 :v Ole no vaya a venir que tengo el coronavirus... en la nevera jajaja
  8. xD Me puse a ver cada nivel y daño de las armas para ver si tenían algún patrón y sí tienen pero también tienen muchas irregularidades, así que prácticamente cada arma hay que hacerla a mano
  9. Hola "Equilibre" el valor de las armas? no entiendo tu pregunta
  10. Para los ítems de mejora es 100% recomendable usar el mob_drop_item.txt, ya si no te funciona es otra cosa pero me parece raro que no funcione, algo estás haciendo mal xD Para usar la probabilidad debes tener en cuenta que if number(1, 10) == 1 then Esto significa que se toma un número (pseudoaleatoriamente) del 1 al 10 N = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} y si cae el 1, entonces entrará a la condición. Es decir que las probabilidades son 1/10 = 0,1 = 10%, de 10 perros que mates te dropeará 1 (puede que sí, puede que no). Si quieres personalizar la probabilidad de drop haz esto: Para poner 1% de drop: if number(1, 100) == 1 then 1/100 = 0,01 = 1% de probabilidades Para poner 0.1% de drop: if number(1, 1000) == 1 then 1/1000 = 0,001 = 0,1% de probabilidades Y así vas viendo el patrón. Nota: solo funciona este patrón con 1. Luego si quieres poner el 2% de drop: if number(1, 100) <= 2 then Dice que si el número cae entre 1 y 2 va a entrar a la condición, o sea que hay 2/100 = 1/50 = 0.02 = 2% de probabilidades Si quieres poner 20% de drop aplica el patrón del 1% así: if number(1, 10) <= 2 then Ya sabiendo esto, si quieres poner 3.5% de drop: if number(1, 1000) <= 35 then 0.25% de drop: if number(1, 10000) <= 25 then Nota: se puede comparar con cualquier conjunto de números ya que number() crea números al azar con distribución uniforme. Así que puedes poner == 1, == 100, == 40 o cualquier número que esté en el rango. Una forma de hacer esto más fácil es tomar de referencia el (1, 100) como el 1% y si quieres aumentar las probabilidades debes quitar ceros. En cambio si quieres disminuir las probabilidades debes aumentar los ceros. (1, 10) == 1 -> 10% (1, 100) == 1 -> 1% (1, 1000) == 1 -> 0.1% (1, 10000) == 1 -> 0.01% (1, 100000) == 1 -> 0.001% Después para variar los porcentajes simplemente comparas con <= poniendo el dígito. Ejemplo para el 25 (1, 100) <= 25 -> 25% (1, 1000) <= 25 -> 0.25% (1, 10000) <= 25 -> 0.025% Si quieres que el perro te bote algo con probabilidad de drop del 0,15% se hace así: quest drop begin state start begin when kill with not npc.is_pc() begin if number(1, 1000) <= 15 then -- 0.15% items={ {30093,1},{30094,1},{30095,1},{30096,1} } for i = 1, table.getn(items) do game.drop_item(items[1],items[2]) end end end end end
  11. La quest no tiene errores. Algo raro te está pasando chucho... Cuéntanos si ahora te funciona
  12. Todo muy bien pero no te olvidas del end e.e
×
×
  • Create New...