DarkiAI 2.0 - AI custom para homúnculos, homúnculos S y mercenarios - by Darki

Darki · 71 · 76812

Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
¡Bienvenidos a todos! Tengo el gusto de presentaros DarkiAI, un AI custom para RO de codificación propia pensada tanto para homúnculos como para mercenarios. Espero que disfrutéis este AI hecha por hispanos (?) tanto como yo disfruto cada día trabajando en ella (moderadamente <_<).



La versión actual es: DarkiAI 2.0



DarkiAI tiene muchisimas opciones configurables, algunas de ellas te serán familiares si ya has usado otras AIs custom como MirAI o AzzyAI, pero muchas otras son completamente originales. Uno de los puntos fuertes de DarkiAI es la gran cantidas de opciones de configuración que posee, que te permitirán hacer que tu homúnculo o mercenario se comporte de formas únicas en comparación a otros usuarios, incluso si también usan DarkiAI.

Algunas de las opciones principales de DarkIAI son:

  • Opciones de HP y SP:
    DarkiAI mantiene un control constante del HP y SP de tu homúnculo o mercenario, y activa y desactiva funciones dependiendo de estos parámetros. Por ejemplo, la patrulla se desactiva si el HP y/o el SP están bajos para no interrumpir la regeneración natural, mientras que si el HP está muy bajo, no intentará atacar enemigos salvo en defensa propia para mantenerse a salvo.

  • Posición y seguimiento:
    Ahora, DarkiAI controla de forma bastante eficiente la posición de tu homúnculo o mercenario, para evitar que se quede atrás al seguirte, o que se bloquee ante obstáculos. Es posible configurar varios parámetros de seguimiento distintos para que tu homúnculo o mercenario permanezcan en combate aunque tú te alejes un poco para posicionarte mejor, y además el AI sabrá cuando te estás acercando a ella para evitar movimientos innecesarios.

  • Funciones de "aburrimiento":
    DarkiAI presenta varias funciones que realizará cuando esté "aburrida", es decir, cuando tú te quedes inactivo durante un tiempo. Estas funciones son la patrulla, que consiste en girar a tu alrededor para controlar cualquier monstruo agresivo que pueda aparecer, y el paseo, en el cual tu homúnculo o mercenario vagabundearán de forma aleatoria a tu alrededor para evitar que se quede totalmente quieto.

  • Lista de amigos:
    Tu AI podrá guardar una lista de jugadores considerados "amigos", a los cuales se podrá defender y coordinar ataques, además de "saludar" cuando tu homúnculo o mercenario esté "aburrido".

  • Comandos manuales más eficientes:
     DarkiAI emplea los mismos comandos manuales que cualquier otra AI, pero se les han añadido funciones y modificaciones para hacerlos más eficientes y mejores.

  • Tácticas de combate:
    Las tácticas de combate son el punto fuerte de DarkiAI, permitiéndote crear comportamientos completamente únicos al enfrentar a tu homúnculo o mercenario a enemigos distintos. Podrás controlar la forma en la que se buscan objetivos, la prioridad al elegirlos, la distancia máxima de escaneo, e incluso funciones de evasión y huida, y también funciones de rescate para cuando los monstruos te ataquen a tí.

  • Soporte para la mayoría de Skills:
    DarkiAI presenta funciones para controlar un gran número de skills usables por homúnculos, homúnculos S y mercenarios, y algunas skills presentan varios usos.

    De hecho, las únicas skills que no presentan soporte son aquellas cuyos datos no puedan accederse por medio del AI, como podría ser el caso de skills que curen estados alterados (desgraciadamente el AI es incapaz de saber cuando un estado ha sido aplicado), ni skills que influyan en algún parámetro importante como la Intimacy o Loyalty Points, que considero demasiado importantes para que se usen de forma automática.

    Sin embargo, encontrarás soporte para skills que no suelen usarse en otras AIs custom, como Castling o skills curativas.

  • Vínculo entre mercenario y homúnculo:
    Los mercenarios no pueden reconocer tipos de enemigo, por lo que es imposible crear tácticas con ellos, pero DarkiAI incluye dos funciones que permiten compartir información sobre objetivos, una de forma pasiva y otra de forma activa, para que tu mercenario pueda reconocer objetivos y usar tácticas con la ayuda de un homúnculo.

  • Soporte para plugins:
    DarkiAI ofrece un sistema mediante el cual puedes modificar el código o añadir funciones nuevas sin necesidad de alterar el código original.



  • Tareas por hacer:
    • Debuggear todo lo que falle
    • Crear una GUI para facilitar la configuración del AI



[NOTAS]: Lo siguiente son datos que cualquiera que use mi AI deberá conocer:

- NO, no se puede implementar Auto Aid Potion ni nada que tenga que ver con usar skills del Alchemist. NO, no es posible hacerlo en ningun caso, no es que yo sea un n00b que no sepa hacerlo, es simplemente que YA NO SE PUEDE, Gravity actualizó el juego para hacer esto imposible.

- NO, los mercenarios no pueden reconocer objetivos a no ser que uses la función MobID de DarkiAI. NO, no es posible hacerlo en ningun caso, no es que yo sea un n00b que no sepa hacerlo, es simplemente que NO SE PUEDE, Gravity la cagó con un bug, o lo hicieron porque les salió de los huevos.

- DarkiAI está aún en fase beta, por lo que es posible que os encontréis algunos bugs durante su uso, pero no os preocupéis y postead cualquier problema que encontréis, que lo solucionaré lo antes posible. Pero no seáis pesados que no por mucho darme el coñazo voy a arreglarlas más rápido.

- Las skills de mercenario son nuevas, así que probablemente fallen MUCHO. Lo mismo va por las skills de homúnculo S. Cualquier fallo ruego que me lo reportéis para poder revisarlo lo antes posible.

Espero que no pregunten estas cosas porque entonces supondré que no han leído estas notas ni tampoco el manual, y entonces responderé de forma sarcástica y desagradable. :D



Sorry but you are not allowed to view spoiler contents.


La última edición del AI es de las 8:25 (GMT+1), del 27 de Marzo de 2012. Para descargarla, haced click en el adjunto DarkiAI v2.0.zip al final del post.

                 
« Última modificación: 27 de Marzo de 2012, 08:39 por Darki »
 





Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
FINALMENTE aquí tenéis el nuevo update del AI! Uso este post para anunciarlo y también para subir el plugin eAthena de nuevo, para los que queráis usarlo. Estoy viendo si puedo subir el AI a Google Code, cuando lo haga pondré links más bonitos. xD

Hale, a disfrutarla y a reportarme todos los bugs que encontréis, que seran MUCHOS, porque no he tenido tiempo de testearlo apenas. Cualquier error, screen y posteadlo.
 





Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
[EDIT] Limpio esto un poco ahora que parece que el AI no causa crashes inmediatos. xD A partir de ahora voy a intentar mantener el topic limpio, eliminaré los reportes de bugs una vez los haya solucionado y dejaré las dusas más "conceptuales" para que otros puedan leerlas.



Ahora que tengo tiempo, ya que el AI está "acabada" (es decir, que no me tengo que tirar horas seguidas desarrollando código básico, me puedo dedicar a "pulir detalles", he estado pensando en algunas mejoras para el AI que espero que no impacten mucho en laforma de los archivos config.

El primer cambio que tengo en mente es modificar ligeramente la forma en la que el AI decide si está en una mob o no. Actualmente, si por ejemplo tienes dos monstruos con táctica "mob" 6, y luego tienes cinco monstruos con táctica "mob" 10, el AI se consideraría mobeada, ya que contaría 7 monstruos, y la táctica "mob" más baja de las disponibles es 6.

He pensado que sería más realista considerar la táctica "mob" de forma proporcional. De esta forma, consideraría el número de mob como "el total", es decir, el 100%, y el número de monstruos sería la proporción existente. Así que, en el caso del primer monstruo, el 100% sería 6 monstruos, y como sólo hay dos, eso sería mas o menos el 34% de la mob completa. En el caso del segundo monstruo, "el total" sería 10, y como hay 5, eso sería el 50%. En total, tendríamos un porcentaje de mob del 84%, por lo que el AI no se consideraría mobeada, a diferencia del caso actual.

En segundo lugar, estaba pensando en añadir un número de mob también a las skills, para que así el AI decida cuando usarlas en base a este número y no al de mob "normal". Así por ejemplo el AI puede considerarse mobeada con 2 monstruos, pero no empezar a usar skills de área hasta que la ataquen más, para ahorrar SP. En este caso, la táctica "mode" de skills, lo que decidiría es si usar la skill cuando la mob es inferior, o superior a este número.

Además, voy a ver si mejoro la forma en la que el AI detecta objetivos para las skills de área, para que no requiera incluir al enemigo principal en el área. Así, si por ejemplo el AI va a atacar a un enemigo pero hay un grupo de enemigos diferente aparte, el AI soltará la skill sobre el grupo.

finalmente, creo que sería interesante que las skills de tipo "Debuff" se pudieran incluir en la táctica "mode" como tipo "Owner", así el AI podrá usarlas para dar soporte al dueño sin tener a estos enemigos como principales.
A ver que os parecen estas ideas, aún no he implementado nada de esto.
 





Cepo013579

  • Raydric
    • Mensajes: 64
    • Ver Perfil
2) Si no te gusta la opción de Wandering, no la actives. Por favor, no hagas sugerencias tontas...

3) Lo de dance lo he mirado y había un pequeño fallo en el código, lo subiré cuando tenga tiempo de hacer el .exe

Podrías tratar de ser mas condescendiente, el Wandering puedo desactivarlo de cierta forma poniendo un alto lapso de tiempo, pero pense que podrias agregar un tipo de opcion ON/OFF, como con el SayHi dado que no se hasta que rango de tiempo es aceptable para el wandering, por el momento lo tengo en 999.

Gracias por revisar lo del Dance.



Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
Podrías tratar de ser mas condescendiente, el Wandering puedo desactivarlo de cierta forma poniendo un alto lapso de tiempo, pero pense que podrias agregar un tipo de opcion ON/OFF, como con el SayHi dado que no se hasta que rango de tiempo es aceptable para el wandering, por el momento lo tengo en 999.

Yo podría ser más condescendiente, y tú podrías mirarte las instrucciones, dado que el parámetro que pides ya existe desde hace 2 años. Si por alguna razón eso no funciona y el AI siempre acaba paseando entonces el error sería mío, así que lo revisaría y todos contentos (y lo acabo de comprobar, al menos en mi AI funciona perfectamente), pero por la forma en que preguntas da la sensación de que casi ni te las has mirado.

Cosa que, lo siento mucho, me irrita ligeramente, como habrás notado, dado que no sólo me he tirado bastante desarrollando el AI para que sea lo más customizable posible, ni me he tirado otro tanto haciendo unas instrucciones superdetalladas para que sepáis cómo funciona todo, sino que encima me he tomado la molestia de buscar un formato tipo "wiki" para evitar que tengáis la sensación de "9865 páginas de manual" como dijo Aldarin un día.

Así que perdóname que sea poco condescendiente, pero creo que puedo serlo si tu puedes hacer sugerencias cuando ni siquiera te has molestado en comprobar que lo que sugieres existe. Como verás, no me molesto cuando la gente me pregunta incluso la mayor tontería sobre las tácticas, porque sé que son algo bastante complicado, pero el parámetro por el que preguntas no es que sea tan complicado de entender.

No pido que te leas todas las tonterías que escribo en el manual, pero si vas a modificar la hoja de configuración, que tiene "pocos" parámetros (mas que pocos, son cortos y muy simples), al menos podrías tomarte la molestia de abrir el manual una vez y comprobar para qué sirve cada una.
« Última modificación: 26 de Marzo de 2012, 05:26 por Darki »
 





Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
[EDIT] He resubido el AI con algunos arreglos a los detalles que me habéis notificado estos días. La táctica Dance está arreglada, además he mejorado un poco más la función de seguimiento (no sé por qué pero esa función me obsesiona <_<).

Además, para los interesados, he añadido un nuevo parámetro respecto a la recomendación de Cepo para que el AI vuelva al dueño tras el combate. Este parámetro es ReturnDelay. El funcionamiento es simple: tras cada combate, el AI esperará el tiempo que hayas indicado en este parámetro (en segundos) por si existe algún objetivo válido a la vista. Si no existe, al finalizar este tiempo, el AI volverá a tu posición. Este parámetro funciona a la vez que las funciones de patrulla y paseo, por lo que puedes hacer que el AI vuelva a ti y después que patrulle o pasee; pero si usas un número mayor que el tiempo para iniciar estos movimientos, el AI pasará directamente a patrullar o a pasear.

Por ejemplo, si pones 2 segundos, el AI matará a todos los enemigos, esperará 2 segundos y si no sale ningún otro enemigo, volverá a ti. En caso de que el tiempo para iniciar la patrulla fuera menor o igual que éste, el AI simplemente pasará directamente a patrullar, sin necesidad de "volver" primero.

PD: He estado toqueteando las skills y demás. No he implementado el cambio aún, pero notificadme si el AI va rara, por si acaso se me ha colado algún cambio no intencionado en la versión que he subido.
« Última modificación: 26 de Marzo de 2012, 05:52 por Darki »
 





Aldarin

  • Raydric
    • Mensajes: 66
    • Ver Perfil
Sorry but you are not allowed to view spoiler contents.
   

Estas ID, no estaban en la lista actual de monstruos. La dejo para el que la quiera agregar a su hojita. Ahora hay algo con el modo S_Counter, ando en Niff y no funciona como antes tengo varios Ludes pegandome y el homunculo anda bailando por ahi,esta es la tactica que uso.

Citar
Tact["Lude"] =                 {M_ATTACK, 9, 10, 1, D_ON, KS_OFF, AV_OFF, 5, 5, 50, S_COUNTER, 1, 1, 100}

Ok, hoy me puse a probar Urgent con Lif y no hay forma es que me lo active desde escape level <<.




« Última modificación: 27 de Marzo de 2012, 02:11 por Aldarin »


Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
[EDIT x2] Vale, ya está todo arreglado, me refiero a la táctica Save y a Urgent Escape. El primer error de hecho estaba relacionado con la forma en la que el AI detecta los mobs, que cometí un error al codificar esa parte. El segundo bug fue un error conceptual, ahora debería aplicarse correctamente. He modificado el Skill.lua, DarkiAI.lua y Util.lua. Si os manejáis bien con los archivos del AI, sólo es necesario sobrescribir estos, los demás podéis dejarlos tal cual.

[EDIT] En cuanto a lo de las IDs de Summon Flora, desgraciadamente he notado que el programa que incluyo para actualizar las IDs de la lista de monstruos borra las IDs que hayáis incluido que no salgan en la DB de iRO Wiki, y allí no tienen listados a los monstruos de summon Flora. Esto quiere decir que cada vez que corráis el actualizador os borrará todo monstruo que no estén allí listados. De momento he posteado esto en iW, ya que tienen listados los monstruos de tipo "slave" que invocan los bosses así que me parece raro que no tengan estos monstruos. Mientras tanto, intentaré arreglar el actualizador, a ver si puedo hacer que en lugar de borrar los monstruos "extra" simplemente los meta en una categoría aparte.

PD: Limpio un poco los posts que tengan cosas resueltas, Cepo, no te lo tomes como algo personal. <_<

« Última modificación: 27 de Marzo de 2012, 08:42 por Darki »
 





Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
[EDIT x3] (esto de ser mod y poder hacer doble post impunemente tiene sus cosillas. : D)

Bueno, a lo que iba. Conversando con un amigo sobre el tema del mobeo, se me han ocurrido una serie de ideas para mejorar bastante la forma en la que el AI decide el objetivo de las skills, basado en la prioridad. Esto es algo que no he implementado aún pero aprovechando que dentro de nada es Semana Santa, probablemente me ponga en plan obsesivo-compulsivo a trabajarlo. xD

La idea es la siguiente: El AI usará la suma de prioridades a la hora de decidir donde usar una skill de área. Imaginad que tenéis un grupo de 10 porings, con prioridad 1, y otro de 4 Drops, de prioridad 2, y queréis que el AI los mate usando una skill de área, por ejemplo, Xeno Slasher.

Actualmente, al tener los Drops mayor prioridad que los Porings, DarkiAI usaría la skill en los primeros, matando sólo 4 enemigos en lugar de 10. Sin embargo, al usar la suma de prioridades, el AI trabajaría así:

10 Porings x prioridad 1 = 10, mientras que 4 Drops x prioridad 2 cada uno = 8

De esta forma, el AI usaría la skill primero sobre los Porings. Este método me parece bastante acertado, porque si quisieras que el AI atacara primero a los Drops en cualquier caso, sólo sería necesario aumentar el número de prioridad lo suficiente. Si pones Porings de prioridad 1 y Drops de prioridad 10, por ejemplo, haría falta que hubieran 10 Porings por cada Drops, para que el AI eligiera usar la skilll primero sobre los porings. Esto, además, no afectaría para nada al combate melee, ya que el AI no tiene en cuenta como de mayor sea la prioridad al seleccionar objetivos melee, simplemente que sea mayor que el anterior.

Junto con este nuevo sistema, que en principio no afectaría a los parámetros, tambien añdiré un número de "mob de skill", para indicar un número mínimo de enemigos que activen el uso de la skill.

Con estos dos métodos, el AI debería tener totalmente personalizado el uso de skills de área, y espero que de la forma más útil posible. ¿Qué os parece? Una vez esto esté implementado, podría dar el AI por "terminada (salvo debugs) y ponerme a trabajar en la GUI "oficial" que de momento creo que tengo a alguien que está dispuesto a echarme una mano.
« Última modificación: 27 de Marzo de 2012, 13:20 por Darki »
 





Aco del Mal

  • Valkyrie Randgris
    • Mensajes: 420
    • Ver Perfil
Me agrada esa idea, si deseas usar mi homunculo te lo presto, no hay problema aunque es lvl 100 ya que no he tenido tiempo de jugar por mi trabajo.

Avisame y te mando los datos

PD: mi homunculo es un unicornio xd


Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
El problema es que tu Bayeri no tendrá Heilage Stange hasta el nivl 130 y pico, que es la skill que me interesa. De todas formas, aún estoy liado con el nuevo código porque tengo un pequeño problema que se me resiste.

Como dije, estoy intentando adaptar el uso de skills debuff en el tipo "Owner", es decir, que el AI use debuffs en enemigos para dar soporte al dueño. El problema es que el AI en principio no usa skills si el enemigo no está a tiro (por ejemplo, si tienes programado el uso de "Caprice" y el enemigo no está a tiro, simplemente ignorará esa skill), pero en el caso de skills de tipo "Owner", el AI debería aceptar como válida la skill aunque el objetivo no esté a tiro, y simplemente ir a donde haga falta.

Bueno, dejando las monsergas, que gracias por el gesto de prestarme tu cuenta pero desgraciadamente no me va a ser de mucha ayuda porque no tiene la skill que me interesa. De todas formas, cuando tenga el código este listo, sii quieres podemos comprobar si el AI no da fallos con homúnculos S.
 





Aco del Mal

  • Valkyrie Randgris
    • Mensajes: 420
    • Ver Perfil
Vale, yo ando muy poco ya por aqui pero al mandarme pm recibo e-mail de notificacion y estos llegan a mi fon asi que estare pendiente


Aldarin

  • Raydric
    • Mensajes: 66
    • Ver Perfil
Hey Darki tengo dudas con respecto a una tactica que ando programando.

Citar
Tact["Beelzebub (True Form)"] =      {M_RCT_SK, 1, 10, 1, D_ON, KS_OFF, AV_CWD, 5, 5, 50, S_REACT, 1, 1, 100}

Citar
Tact["Beelzebub (True Form)"][T_SK]      =

             
             {"Urgent Escape",     M_OBJECT, 5, 0, 0 },
             
             

}

Mi idea es que apenas llame al homunculo este active Urgent, como el beelzebu elimina a la Lif con cada ataque nova. Pienso que esto me permitiria tener Urgent On cada vez que le de resu, me funcionaria asi como esta o debo cambiar algun otro parametro.
« Última modificación: 01 de Abril de 2012, 16:40 por Aldarin »


Cepo013579

  • Raydric
    • Mensajes: 64
    • Ver Perfil
Hola

Darki, me ha estado apareciendo el siguiente error de vez en cuando.

./AI/USER_AI/DarkiAI/Data/Util.lua:161: error loading package `AI/USER_AI/DarkiAI/Data/Temp/Health.drk' (AI/USER_AI/DarkiAI/Data/Temp/Health.drk:1: invalid control near `char(0)')

Pongo como adicional que al entrar en carpeta Temp en Data y eliminar el archivo ya el error no aparece, si sigue saliendo despues de vez en cuando.

Si ocupas mas info acerca de como tengo configurada el AI me avisas

Gracias.
« Última modificación: 02 de Abril de 2012, 00:14 por Cepo »


Darki

  • Moderador Global
    • Mensajes: 2496
  • Dragonology bitches~!!
    • Ver Perfil
@Aldarin: El modo "React skill" (y el de ataque) son exclusivos para skills ofensivas, así que el AI no debería hacer nada diferente a ponerlo en simple modo React.

¿Has probado a poner Urgent Escape en modo "Owner"? probablemente te de mejores resultados, además haciendo eso no importa qué táctica tengas para el enemigo, usará esa skill en cuanto la necesites.

@Cepo: Vaya, ese archivito sigue dando problemas. :/ Se supone que se usa para que el AI monitorice el HP y SP para saber cuando usar skills de soporte y tal, pero a veces da error. Supongo que ocurrirá cuando el AI se interrumpe a medio escribirlo. La próxima vez que te de error, antes de borrarlo, ¿podrías abrirlo con un editor de texto cualquiera y postearme lo que tenga escrito?