Jump to content

caanmasu

Miembro
  • Contador contenido

    359
  • Ingreso

  • Última visita

  • Días ganados

    39

Actividad de reputación

  1. Me Gusta
    caanmasu got a reaction from emilio45 in borrar   
    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.
     
     
     
  2. Sorprendido
    caanmasu got a reaction from Mircea Vlad in borrar   
    borrar
  3. Me Gusta
    caanmasu got a reaction from Frezi Op in borrar   
    borrar
  4. Me Gusta
    caanmasu got a reaction from clocki in borrar   
    borrar
  5. Me Gusta
    caanmasu got a reaction from Christofer Siguas in borrar   
    borrar
  6. Me Gusta
    caanmasu got a reaction from rapopero in borrar   
    borrar
  7. Me Gusta
    caanmasu got a reaction from Lord Ahriman in [R]Cambiar piedras contra perlas   
    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  
  8. Sorprendido
    caanmasu got a reaction from jose reyes in borrar   
    borrar
  9. Me Gusta
    caanmasu got a reaction from devgames in borrar   
    borrar
     
  10. Me Gusta
    caanmasu got a reaction from Hashirama in borrar   
    borrar
  11. Me Gusta
    caanmasu got a reaction from Only4Fun in borrar   
    borrar
  12. Me Gusta
    caanmasu got a reaction from Magueta in borrar   
    borrar
     
  13. Haha
    caanmasu got a reaction from Anthony's in borrar   
    borrar
     
  14. Me Gusta
    caanmasu got a reaction from emilio45 in borrar   
    borrar
     
  15. Me Gusta
    caanmasu got a reaction from Frezi Op in borrar   
    borrar
  16. Me Gusta
    caanmasu got a reaction from litachi1995l in borrar   
    borrar
  17. Me Gusta
    caanmasu got a reaction from JavierSirenz in borrar   
    borrar
  18. Me Gusta
    caanmasu got a reaction from barbera69 in borrar   
    borrar
  19. Me Gusta
    caanmasu got a reaction from [[ADM]Dark in borrar   
    borrar
  20. Me Gusta
    caanmasu got a reaction from LastSamurai in borrar   
    borrar
  21. Me Gusta
    caanmasu got a reaction from kco 1 in borrar   
    borrar
  22. Me Gusta
    caanmasu got a reaction from Ahmet Zeki Taşgar in borrar   
    borrar
  23. Me Gusta
    caanmasu got a reaction from xJin in borrar   
    borrar
  24. Me Gusta
    caanmasu reacted to NazoX in borrar   
    Esta bien esa quest, pero ya existe la función del grupo que viene desactivada por ymir debido que podías hacer que un pj tirase un objeto y le dabas teletransportar y así le robabas el ítem, o bueno siempre pensé eso, aún así gracias, si hubiera alguna forma de bloquear el inventario cuando sucede el viaje o algo así quizás sirva mas no se XD!
  25. Me Gusta
    caanmasu got a reaction from stein20 in borrar   
    borrar
×
×
  • Crear nuevo...