Jump to content

caanmasu

Miembro
  • Contador contenido

    358
  • Ingreso

  • Última visita

  • Días ganados

    38

Todo lo publicado por caanmasu

  1. Hola y bienvenido Me sentí identificado con lo de las quest. A mí también me encantan y eso me llevó a ciertos niveles que no creí llegar. Las cosas se fueron dando. Empecé con un "Hola mundo" al estilo Metin2 quest prueba begin state start begin when 20095.chat."Hola" begin say("Hola amigo") end end end Para hacer eso, tuve muchos problemas. Es normal. No sabía qué significaba "state", me perdía con los "end" y los "begin". Tuve muchos errores de sintaxis. Tuve errores que me costaban días en descubrirlos o volvía a hacer la quest. Muchas cosas no me salían como esperaba. Habían quest que yo compilaba y salían defectuosas en el object. Hice demasiadas pruebas para ver por qué pasaban las cosas. La práctica hace al maestro. Fui ensayando pero mi truco sabio que aplicaba todo el tiempo mientras era novato era hacer una línea y compilar. Si funcionó, entonces hago otra línea, compilo y pruebo. Y así. No te recomiendo hacer todo el código y luego compilarlo. Siempre has una pequeña estructura, compila y prueba. Con la práctica te vas volviendo un crack y terminas haciendo quest sin errores. Para aprender adquirí conocimientos de: - Lua, buscando en internet sobre ese lenguaje (sintaxis) - Descargando muchas carpetas quest de muchos files y aprendiendo la forma de programar de todos ellos. - Foros. Por ejemplo yo me puse a ver todos los post que tengan que ver con quest. Y los post donde pedían quest, las hice todas. Aprendes más cuando haces quest a petición. - quest_function, ahí es donde pones a prueba tu creatividad. Tantas funciones combines, creas cosas que nunca nadie ha hecho. En internet hay unas páginas donde explican cada función sobre cómo se utiliza, qué parámetros reciben, etc. - questlib.lua, de ahí sacas otras funciones que son genéricas. En vez de hacer una función igual para cada quest, haces una función y la metes en questlib, luego esa función simplemente la llamas en las quest que quieras. Hay muchas cosas que vas a ir aprendiendo por el camino. Claro, si quieres meterte de lleno a las quest. Si quieres sacar tu máximo potencial en las quest, te recomiendo que revises mi perfil y mires las quest que he publicado. Yo he tenido que dejar todo esto, no volveré a hacer quest ni nada relacionado con el Mt2. Ánimo pues que esto es fascinante
  2. Por casualidad entré a este post y me topé con esto. Encontré que debía compartir algo importante que aprendí luego de tanto dolor de cabeza Resulta y pasa hay un error al poner un caracter especial al final de un texto de la interfaz de quest. Es decir, no puedes poner, por ejemplo: say("reclamará") ni puedes poner otro tipo de caracteres especiales. Las tildes ni símbolos. Cuando tienes un say así, el compilador va a interpretar hasta esa línea y por supuesto que no te dará error pero tampoco te lo compilará, simplemente quedará igual. Solución: Si deseas poner caracteres especiales, simplemente pon espacio al final, así: say("reclamará ") Ves la diferencia? Lo mismo pasa con el select() y otras funciones de mostrar texto. Sabes lo que yo pienso? es que pusiste tal vez algo así como: say("El Evento de San Valentín empezó") y esa línea ya presenta un error. Puedes poner signos de admiración e interrogación y no presentará error ya que no son caracteres especiales. say("El Evento de San Valentín empezó!") Esto es correcto. Esto me tomó meses descubrirlo. Un dolor de cabeza menos. Un saludo amigos.
  3. caanmasu

    borrar

    Ok. Crearé mi propio anillo teleport y lo posteo. Ahora no puedo hacerlo, estoy en época de exámenes cuando lo suba te aviso
  4. Hola! En la línea local job= {"Guererro","Ninja","Sura","Schaman"})[pc.get_job()+1] encontré un error en el paréntesis que está después del arreglo. La corrección sería la siguiente (y espero que funcione porque no puedo probar) local job= {"Guerrero","Ninja","Sura","Chamán"} notice_all (pc.get_name().." es un nuevo "..job[pc.get_job()+1].." y comienza su aventura en Tuserver")
  5. caanmasu

    borrar

    Te lo envié al privado
  6. caanmasu

    borrar

    no amigo pero igual puedes tomarlo de inventorywindow.py del locale
  7. caanmasu

    borrar

    Editado, leer lo nuevo y actualizar!
  8. caanmasu

    borrar

    Corregí un pequeño error. Ya compila xD! Actualicen y arranquen!
  9. El lenguaje Lua no tiene la propiedad de identación, o sea, que ignora si está tabulada o no, por lo que puedes usarla así pero tendrías que arreglarle partes donde hay palabras pegadas como "endend" Te recomiendo siempre identar todo el código para que puedas editarlo cómodamente si prefieres. Toma, te regalo mi quest. Esta quest es configurable, es decir, puedes agregar las perlas que quieras con su respectivo valor en trozos de piedra. Puedes agregar perlas doradas, moradas, plateadas, etc. tan solo agregándolas en las listas. Como siempre, haré una descripción de cómo funciona: si el jugador tiene el mínimo de trozos de piedra para comprar la perla de menos valor, le mostrará las perlas que puede cambiar y les aparecerá el nombre con la cantidad de trozos a cambiar. En este caso: Si tienes 100 trozos te aparecerá: Perla Blanca (50 trozos) Perla Azul (100 trozos) Si tienes 200 trozos te aparecerá: Perla Blanca (50 trozos) Perla Azul (100 trozos) Perla Roja (200 trozos) Si tienes 88 trozos de piedra te aparecerá: Perla Blanca (50 trozos) Y ya, el resto solo elimina los trozos correspondientes y te da la perla correspondiente, una sola. (Nota: es posible que al copiar este código aparezcan signos de interrogación al final de alguna línea, solo quítalos) --Camilo Martínez --Discord: Camilo#0869 quest cambiar_trozos_piedra begin state start begin function info() return { ["item"] = 27990, ["perlas"] = {27992, 27993, 27994}, ["valor"] = {50, 100, 200}, } end when 9009.chat."Cambiar Trozos de Piedra" begin local s = cambiar_trozos_piedra.info() local tabla_menu, tabla_perlas, tabla_valor = {}, {}, {} local cantidad = pc.count_item(s.item) if cantidad < s.valor[1] then setskin(0) syschat("No tienes suficientes "..item_name(s.item)) return end for i = 1, table.getn(s.perlas) do local perlas_desc = table.getn(s.perlas)-i+1 if cantidad/s.valor[perlas_desc] >= 1 then for j = 1, perlas_desc do tabla_perlas[j] = s.perlas[j] tabla_valor[j] = s.valor[j] tabla_menu[j] = item_name(s.perlas[j]).." ("..s.valor[j].." trozos)" end break end end table.insert(tabla_menu, "Cerrar") say_title(mob_name(npc.get_race())) local sel = select_table(tabla_menu) if sel == table.getn(tabla_menu) then return end pc.remove_item(s.item, tabla_valor[sel]) pc.give_item2(tabla_perlas[sel]) syschat("Cambio realizado") end end end
  10. Hay que testearla en un sv ya con jugadores porque en verdad no sé si afecte al servidor
  11. Hola amigo jajaja es verdad lo de la transparencia, te explicaré cómo funciona para que no te sientas inseguro xD En sí es un simulador, funciona de esta manera: Al arrastrar el objeto al alquimista determina el id del objeto, según el id va a tomar el addon_type. Primero revisa si el objeto tiene addon_type igual a -1 (o sea, que tiene bonus de media y habilidad). Si es así, entonces sale el menú de cuál media quieres sacar, habilidad y cuántos cambios quieres poner. Luego hay una función donde saco media y habilidad. Ver: Hará tantos ciclos hasta que llegue al número de cambios que pusiste o se cumpla la condición de que la habilidad o media que sacó el simulador es mayor o igual que la media o habilidad que pusiste. Después de encontrar la media o habilidad, habrá una función donde genera 5 cambios aleatorios (ahora explico cómo funciona) y de esos 5 tomo los tres primeros en caso de que haya salido bonus regular (media > 0 y hab > 0). Si salió media = 0 y hab != 0 entonces tomo 4 de los cambios generados, y lo mismo para la hab = 0, y así se obtienen los 5 bonus. Luego para el caso de los otros objetos de addon_type != -1, Simplemente generará 5 bonus de la siguiente manera: Creé una función que se llama verificar() donde toma los applytype# de ese ítem (del item_proto) y se guardan en un arreglo. Luego esos serán los bonus "prohibidos" o bloqueados. Para que cuando se haga la selección de bonus, no tome esos. O sea, si es una Tritón, no tomará velocidad de ataque (igual esa no saldrá porque no está en item_attr para armas), fuerza contra humanos ni fuerza contra demonios. Luego de tomar todos los bonus menos los prohibidos, el siguiente paso es tomar todos los bonus disponibles para ese ítem. Y ahí necesito sacar el type y sub_type. Si el type es 1, entonces es un arma y no importa el sub_type porque todas las armas tienen los mismos bonus disponibles. Si el type es 2 entonces no es un arma y hay que clasificarlo entre collar, brazalete, armadura, etc. con el sub_type. Sabiendo ya el subtype podemos sacar los bonus disponibles junto con los niveles de los bonus. Y la función retornará los bonus disponibles sin los prohibidos, para el objeto puesto encima del NPC. Luego creé una función llamada agregar_bonus donde saco 5 types aleatorios diferentes y 5 niveles diferentes de esos types. La variable aleatoria es uniforme porque no agregué la parte de la prob del item_attr, eso está en revisión. Esa función retorna 5 tipos de bonus cada uno con su nivel (aleatorio uniforme entre 1 y 5 cada uno de los bonus) Luego sí viene la parte interesante que es cuando se comparan. Se hace un ciclo hasta la cantidad de cambios o hasta que los bonus retornados de agregar_bonus sean iguales o mayores a cada uno de los bonus elegidos por el jugador. Obviamente validé de que no sean en orden aunque eso implica 5 veces menos rendimiento. Y cuando pase lo segundo, se agregará el bonus al objeto con item.set_value En resumen Validaciones: 1. Bonus prohibidos o bloqueados. Los bonus que ya vienen en el proto en applytype no saldrán como bonus disponibles o en otras palabras, los bonus que vienen fijos en el objeto no saldrán. 2. Bonus válidos. Se seleccionan los bonus del item_attr del sub_type del objeto y excluye los prohibidos. 3. Bonus sin repetir. El bonus elegido aleatoriamente no vuelve a salir. 4. Select con bonus válidos. Aparecerá en el seleccionador los bonus que tienen la posibilidad de salir en el objeto junto con los posibles valores que pueden salir. Optimizaciones: Para mejorar el rendimiento del simulador hice lo siguiente para la comparación de los 5 bonus generados con los elegidos: 1. En el primer type generado, si el primer type del bonus generado es igual a algún type del bonus elegido, entonces se hará la siguiente condición: Si el valor del bonus generado es mayor o igual al bonus elegido, entonces guardar y continuar con el siguiente type bonus. En el segundo type generado, si sucede lo mismo que en la primera pero para el segundo bonus generado, entonces guardará y continuará con el tercer type. Y así hasta el 5. Qué ocurre si no sucede lo mismo? pues continuará con el siguiente cambio o iteración. Algo más práctico: 1 -En este caso el primer bonus elegido por ti, salió en los bonus generados y el valor >= al que elegiste. 2 -Acá salió otro bonus válido 3 -Acá salió otro bonus válido. Ya van 3 en la misma iteración o cambio. 1 -Acá perdió la racha. O sea, el cuarto bonus tuyo no apareció dentro de la lista de los bonus generados. Y se cambiaron los bonus otra vez y apareció uno que sí coincide 1 -El siguiente bonus tampoco estaba, así que volvió a generar nuevos bonus y apareció uno que sí hace parte de los tuyos. 0 -El siguiente bonus no estuvo, así que se generaron nuevos bonus y... tu primer bonus no estuvo en la lista de bonus generados 0 -Aquí sucedió lo mismo. 1 -Y así xD 2 1 -Aquí empieza a tomar el primer bonus tuyo y lo compara con los generados. El primer bonus estuvo, bien. 2 -El segundo bonus también estuvo 3 -El tercer bonus también estuvo 4 -El cuarto bonus también estuvo 5 -El quinto bonus también estuvo. Aquí se terminan las iteraciones. De esta forma evito hacer iteraciones innecesarias. Aunque hace 5 ciclos en cada comparación, eso está en revisión. Y bueno, en la generación de bonus de media y habilidad no hay problema, está óptimo.
  12. caanmasu

    borrar

    Edité la quest. Leer el editado en la publicación y actualizar! go go go
  13. caanmasu

    borrar

    Brother borra la carpeta object, haz un make.sh, reboot, compila la quest y prueba; yo también tengo ese problema
  14. caanmasu

    borrar

    Hola NazoX Muchas gracias por tu comentario. Tienes toda la razón. Lo he corregido. Leer descripción y actualizar quest!
×
×
  • Crear nuevo...