[IA] Datas de combat

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
797
Reactions
9
#1
Inspire par la discussion avec @Nelimee sur le thread de @Babou (https://cadernis.fr/index.php?threads/recherche-tuteur-pour-création-dun-bot.2023/), j'aimerais lancer un dataset de donnees de combat pour que tout le monde puisse essayer de predire les IAs des monstres et invocations.

Bien sur, on ne peut pas vraiment utiliser ces donnees pour entrainer des bots au combat. En revanche, connaitre les IA des adversaires en PvM sera utile pour tous les bots.

J'avais eu l'idee il y a longtemps, mais ce n'est que maintenant que je pense en faire un projet collaboratif.

Pour recolter ces data, je pense coder un sniffeur de donnees de combat. Vous pourrez le lancer et partager les logs, que vous ayez joue avec un bot ou non.

Ce thread a plusieurs objectifs :
  • decider de ce qui sera dans les logs : il faut bien sur enlever tout ce qui n'a pas trait au combat pour proteger les bots. Est-ce qu'un simple critere base sur l'id du paquet est suffisant ? Il faut aussi par exemple inclure des dates pour pouvoir detecter les changements des IA.
  • decider du format des logs : les dumps des paquets sont pas mal, mais est-ce le meilleur format pour partager des donnees de combat ? Par exemple, ca ne change rien qu'un perso se deplace en un ou en plusieurs paquets. Avez-vous des bonnes idees de formats qui peuvent etre facilement lus ?
  • decider de comment on partage les logs : on n'a pas forcement envie que ca se retrouve sur github avec des logs de 10 persos en meme temps qui jouent H24, sachant que github logge les IPs (bon je suis parano, Ankama va jamais aller jusque la). Peut-etre que @BlueDream pourrait heberger un petit serveur pour partager nos logs de texte ? Avez-vous d'autres idees ? Il faudrait pouvoir tout downloader d'un coup
  • decider de ou on partage les decouvertes : surement faire un post sur Cadernis, et maintenir une list de ces posts.
  • savoir qui est interesse pour utiliser le sniffeur et partager ses logs ou qui veut m'aider a developper le sniffeur
 
Inscrit
31 Mars 2016
Messages
33
Reactions
0
#2
Juste pour info, on a accès au code source des IA des monstres ?
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
351
Reactions
2
#3
Du tout pas , les IA des monstres sont mises du côté serveur qui n'est accessible à personne ici .
 
Inscrit
20 Juin 2016
Messages
38
Reactions
0
#4
La plupart des IA des mobs sont assez simple : si le mob a la PO il attaque, puis soit il fuit soit il avance.

A partir de ça on peut déjà avoir un bon paquet de mobs classables dans au moins deux catégories avec comme spécificités : la po des sorts du mob et ses pms.

Avec bien sûr quelques spécificités du style :
- le déplacement des mobs se fait en utilisant le même algo de pathfinding que celui que l'on a pour déplacer un personnage
- les mobs esquives les pièges
- la priorité est donné à celui où le mob tapera plus (sauf si le finit ?)
- les invocs ne sont pas prioritaires

Tout ça pour dire que avant de récupérer des données ils faudraient savoir lesquelles utilisées et donc lesquelles chercher.

Notamment l'IA des boss des nouveaux djs, avec le changement d'IA lié aux modificateurs dimensionnelles
 
Inscrit
18 Février 2015
Messages
231
Reactions
4
#5
La plupart des IA des mobs sont assez simple : si le mob a la PO il attaque, puis soit il fuit soit il avance.

A partir de ça on peut déjà avoir un bon paquet de mobs classables dans au moins deux catégories avec comme spécificités : la po des sorts du mob et ses pms.

Avec bien sûr quelques spécificités du style :
- le déplacement des mobs se fait en utilisant le même algo de pathfinding que celui que l'on a pour déplacer un personnage
- les mobs esquives les pièges
- la priorité est donné à celui où le mob tapera plus (sauf si le finit ?)
- les invocs ne sont pas prioritaires

Tout ça pour dire que avant de récupérer des données ils faudraient savoir lesquelles utilisées et donc lesquelles chercher.

Notamment l'IA des boss des nouveaux djs, avec le changement d'IA lié aux modificateurs dimensionnelles
c'est tout à fait le contraire les mobs sont bien plus intelligent que ça.
Si tu as joué des classes spécials comme les éliotropes ou les steamer, ils peuvent utiliser par exemple les portails ou les tourelles à leur avantage.
Faut pas croire qu'il joue sur des IA aussi basique.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
797
Reactions
9
#6
Au lieu de vous chamailler, vous voulez pas répondre au topic ? :D
Si mon projet aboutit, vous aurez la réponse à toutes vos questions !

Tout ça pour dire que avant de récupérer des données ils faudraient savoir lesquelles utilisées et donc lesquelles chercher.

Notamment l'IA des boss des nouveaux djs, avec le changement d'IA lié aux modificateurs dimensionnelles
Tu m'intéresses ! Tu peux développer s'il-te-plaît ?
 

nowis13

Rédacteur
Inscrit
11 Janvier 2015
Messages
22
Reactions
0
#7
Bonne idée !

J'ai jamais automatisé de combats mais je pense que ça vaut le coup d’essayer.
Je vois bien un système d'aide au jeu pour les boss les plus difficiles.

Je pense qu'on peut partir sur le fait que les IA ne s'appuient pas sur des états précédents du combat.
Pour moi on peut considérer chaque tour comme indépendant.

Je vois bien comme format de log:

JavaScript:
{
    "version_log": "0.1",
    "version_game": "2.41.26",
    "date": 1321231,
    "map": [{
            "x": 0,
            "y": 0,
            "wall": false
        }, {
            "x": 1,
            "y": 0,
            "wall": false
        }, {
            "...": "..."
        }
    ],
    "players": [{
            "team": 0,
            "strength": 999,
            "health": 3500,
            "health_max": 3500,
            "...": "...",
            "action_points": 12,
            "movement_points": 6
        }, {
            "team": 1,
            "strength": 50,
            "health": 1000,
            "health_max": 1000,
            "...": "...",
            "action_points": 7,
            "movement_points": 3
        }
    ],
    "states": [
        {
            "modifiers": [
                {
                    "health": 3400,
                    "position": {
                        "x": 2,
                        "y": 1
                    }
                }, {
                    "health": 999,
                    "position": {
                        "x": 0,
                        "y": 1
                    }
                }
            ],
            "choices": [{
                    "player_id": 1,
                    "action": "move",
                    "position": {
                        "x": 1,
                        "y": 1
                    }
                }, {
                    "player_id": 1,
                    "action": "attack_cac",
                    "position": {
                        "x": 2,
                        "y": 1
                    }
                }
            ]
        }
    ]
}
players: La liste des joueurs dans le combat.
states: La liste des tours joués dans le combat.
modifiers: Une autre liste avec les modifications des joueurs pour ce tour. (par exemple de la vie en moins ou une position sur la map). Même id que players.
choices: La liste des actions que le joueur a choisi pour ce tour.

PS: Ne pas oublier de faire un sniffer open-source et facile à installer.
 
Dernière édition:
Inscrit
24 Juin 2015
Messages
49
Reactions
0
#8
(Sorry if I write on English :p I don't know at all french)

Personally I don't think you need to overcomplicate the process, your can implement some concepts of ML on Dofus, I already did it successfully:

A neural network (The first on emulation I think I :D) to classify every monster IA based on their spell cast zone and effects, with this classification I just code the IA for every type of IA (about 8 I don't remember at all), and it works fairly good (with Bosses too without applying a new IA, but of course you can improve it by hand).

This implementation is simple and really usefull, I tried to implement other kind of algorithms but is simply waste of time, or I don't get the enough dataset.

I think the main problem to create a Dofus IA is the correct implementation of a Pathfinder, just think about it, you can cast a spell from determined cell and move to other cell to cast other one, do a general for this is almost impossible because every monsters spell are completely different on working, but with a good (and really big) dataset of monster spell cast secuences with their distance to the player/s and obstacle can implement a good algorithm (convolutional neural network for example)

This is a bit of my experience that I have with Dofus IA, I research many possible ways to achieve the perfect IA but it requires a lot of experience with IA/ML.

I really love IA (and ML), sadly I still beginner on that ^^, anyway good luck :D
 
Dernière édition:
Inscrit
20 Juin 2016
Messages
38
Reactions
0
#9
c'est tout à fait le contraire les mobs sont bien plus intelligent que ça.
Si tu as joué des classes spécials comme les éliotropes ou les steamer, ils peuvent utiliser par exemple les portails ou les tourelles à leur avantage.
Faut pas croire qu'il joue sur des IA aussi basique.
Va à Astrub combat un bouftou essaye de prédire où il va. Va à Frigost combat un stalak et essaye de prédire où il va. En général ceux qui farm les mobs THL connaissent les IA parce que justement l'IA reste basique et que de toute façon quand tu as un ou deux sorts dans ta barre tu n'as pas non plus beaucoup de choix (et les mobs ne sont pas encore à préparer des tours, si ?).

D'ailleurs c'est en partit ce que GenesisMoreder dit :
Personally I don't think you need to overcomplicate the process

[...] I just code the IA for every type of IA (about 8 I don't remember at all)
Tu m'intéresses ! Tu peux développer s'il-te-plaît ?
En Reine des Voleurs ou Vortex il y a un changement de comportement de certains mobs sous puissance cyclique par exemple peut être dût à l'augmentation des dommages.

En Missiz Frizz je pense qu'avec les glyphes et les dopou qui os les mobs agissent différemment mais cela reviens à devoir prendre un compte un paramètre supplémentaire comme les portails elio.

A mon avis pour un combat la première chose à faire est de déterminer les cibles du mob et son déplacement sera fortement lié. Pour pousser un peu il faut prévoir aussi les mobs qui se tp, échangent de position, repousse etc...
 
Inscrit
28 Juin 2013
Messages
37
Reactions
24
#10
Bonne idée !

J'ai jamais automatisé de combats mais je pense que ça vaut le coup d’essayer.
Je vois bien un système d'aide au jeu pour les boss les plus difficiles.

Je pense qu'on peut partir sur le fait que les IA ne s'appuient pas sur des états précédents du combat.
Pour moi on peut considérer chaque tour comme indépendant.

Je vois bien comme format de log:

JavaScript:
{
    "version_log": "0.1",
    "version_game": "2.41.26",
    "date": 1321231,
    "map": [{
            "x": 0,
            "y": 0,
            "wall": false
        }, {
            "x": 1,
            "y": 0,
            "wall": false
        }, {
            "...": "..."
        }
    ],
    "players": [{
            "team": 0,
            "strength": 999,
            "health": 3500,
            "health_max": 3500,
            "...": "...",
            "action_points": 12,
            "movement_points": 6
        }, {
            "team": 1,
            "strength": 50,
            "health": 1000,
            "health_max": 1000,
            "...": "...",
            "action_points": 7,
            "movement_points": 3
        }
    ],
    "states": [
        {
            "modifiers": [
                {
                    "health": 3400,
                    "position": {
                        "x": 2,
                        "y": 1
                    }
                }, {
                    "health": 999,
                    "position": {
                        "x": 0,
                        "y": 1
                    }
                }
            ],
            "choices": [{
                    "player_id": 1,
                    "action": "move",
                    "position": {
                        "x": 1,
                        "y": 1
                    }
                }, {
                    "player_id": 1,
                    "action": "attack_cac",
                    "position": {
                        "x": 2,
                        "y": 1
                    }
                }
            ]
        }
    ]
}
players: La liste des joueurs dans le combat.
states: La liste des tours joués dans le combat.
modifiers: Une autre liste avec les modifications des joueurs pour ce tour. (par exemple de la vie en moins ou une position sur la map). Même id que players.
choices: La liste des actions que le joueur a choisi pour ce tour.

PS: Ne pas oublier de faire un sniffer open-source et facile à installer.
J'aime bien ton format (le JSON non?) mais je pense qu'il faudrait aussi rajouter les monstres dans les données (sauf si tu les inclus dans player, mais dans ce cas je trouve que c'est mieux de bien marquer la différence entre les joueurs "humains" et les IA de Dofus).
Ensuite je verrais bien un format de la forme:
  1. Les données statiques du début de match:
    1. PdV/PA/PM/classe des joueurs et PdV/PA/PM/[type de monstre]/niveau monstres
    2. Placement initial des joueurs/monstres (j'ai aussi pensé aux cases de placement disponibles, mais ça c'est statique pour chaque maps donc c'est pas à écrire dans les logs)
    3. L'ordre de jeu des différents joueurs/monstres (basé sur l'initiative du coup)
  2. Puis ensuite une sorte de stream qui va enregistrer au fur et à mesure les actions (déplacement, lancé de sort, PdV perdus/gagnés, monstre/joueur mort, ...). Ici c'est inutile d'enregistrer l'état courant puisqu'on peut revenir à l'état courant en remontant les actions. Autrement dit, c'est inutile d'écrire "le joueur 1 a maintenant 3000 PdV", il suffit d'écrire "le joueur 1 perds 300 PdV".
Ce que j'aime pas trop dans ton format c'est:
  1. Tu enregistre à chaque fois la disposition de la map alors que c'est des données relativement statiques. Est-ce que c'est vraiment utile? A mon avis il vaut mieux enregistrer ça à part et après y faire éventuellement référence dans le fichier de log.
  2. J'ai du mal à le visualiser correctement. Autrement dit, même en y réfléchissant dessus j'ai du mal à voir si il manque des informations ou pas :/
Sinon je suis chaud pour aider à développer le sniffer! J'ai un peu d'expérience en Python 3, mais au niveau réseau je suis pas très à l'aise :p Du coup j'aiderai sur ce que je peux :)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
797
Reactions
9
#11
@nowis13 Bien sur, il sera open-source et facile a lancer puisqu'il sera en Python. Ton format est peut-etre encore un peu complique, surtout avec les modifiers et choices. Peut-etre que je vais juste filtrer les paquets en fait... J'aimerais bien un systeme vers lequel il soit simple de convertir les paquets, parce que c'est simple et parce que c'est le plus general. Je reduirai peut-etre juste pour rassembler les moves d'un meme personnage durant un tour. Apres, j'ecrirai plein de fonctions pour pouvoir retrouver toutes les grandeurs utiles, sinon le log va etre immense.

@GenesisMoreder Actually, I was considering much simpler methods. First, I want to have a complete database of the spell characteristics of the monsters. That is really easy to do if we have a complete database. Then, we can use the various data to test hypothesis concerning the monsters' moves.

@Nelimee zut j'avais pas encore lu ton message, j'ai dit la meme chose moins bien en repondant a @nowis :p
En revanche, je ne suis pas d'accord : les maps peuvent changer, et ca ne prend pas beaucoup d'espace. On peut juste ne pas redonner deux fois la meme map dans un fichier de log, mais je ne sais pas si ca en vaut la peine. Pour la partie reseau, elle est en fait a peu pres faite : il s'agit juste d'utiliser mon sniffeur scapy. Il faudra rajouter des handler pour les differents paquets qui nous interessent mais c'est tout.
 
Dernière édition:
Inscrit
25 Février 2012
Messages
180
Reactions
1
#12
Les mobs n'esquivent pas les pièges, ils essayent de predict où le piège s'est mit. Si tu mets un piège derrière lui et qu'il pense que c'est devant, il va reculer et le toucher.
Les IAs des mobs ne sont pas assez facile crois moi ^^
 
Dernière édition:

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
797
Reactions
9
#13
Ce sujet est principalement dedie au projet de recolte de data, pas un flamewar pour debattre de l'intelligence des mobs :)

Quand on aura les data, il sera beaucoup plus facile de repondre a ces questions.
 
Inscrit
20 Juin 2016
Messages
38
Reactions
0
#14
Là ou je veux en venir, c'est savoir ce que l'on cherche pour ainsi savoir ce que l'on doit enregistrer.
 
Inscrit
19 Juillet 2017
Messages
18
Reactions
0
#15
Je suis partant pour ce projet.
Le concept est vraiment intéressant et pourquoi pas dans le futur, essayer d'étendre le concept à autre chose que le combat
comme par exemple essayer de voir ce qui fait qu'un humain est un humain afin de rendre les bots plus difficile à détecter (se faire signaler par d'autre joueurs)

edit : j'ai oublier de parler du sujet
Ne serait t-il pas intéressant de séparer les différentes actions des ia dofus. Je m'explique,
Au lieu d'avoir un seul gros réseau qui s'occupe de prédire toutes les actions, pourquoi ne pas séparer par catégorie du style : déplacement (utilisation des pm) / focus des mobs / élements de frape préféré ect ... (j'ai que ça en tête)
De ce fait, il y aura un fichier qui indique quelle est la prochaine étape à lire et
un fichier qui indique à chaque étapes tous les parametres.

Je sais pas si j'ai été assez clair mais voici un exemple :

fichier maitre (logs):
- read fichier pm
- read fichier focus
- read fichier action

fichier pm :
- le mob M se déplace à la case (x+3, y)

fichier focus :
-le mob M tape le personnage y

fichier action :
- le mob M tape avec l'elt feu -50 pdv

fichier parametres :
- (parametre de debut de combat)
personnage y : 100 pdv
mob M : pos (x, y)

- (autre info inchangée)

- (autre info inchangée)
mob M : pos (x+3 , y)

- (autre info inchangée)
personnage y : 50 pdv

Avec ce principe on peut voir le combat comme étant une succession d'étape qui mettent à chaque fois les parametres à jour. (parm0 - etape 0 - parm1 - ... - etape n - param n )
De meme, pour trouver l'ia de déplacement des mobs, il suffit de prendre toutes les étapes correspondants à un déplacement et de lire les parametres précedents.

Edit 2:
En terme de machine learning, on aura (si j'ai bien compris) de l'apprentissage supervisé :
J'ai ces parametres, j'ai l'action associée (+3 x, +0 y), trouve le liens entre les 2.

Et pour rendre la tache plus facile, on pourra aussi réduire la quantité de parametres en enlevant ceux qu'on pense ne pas influées l'action.
 
Dernière édition:

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
797
Reactions
9
#16
Je pense pas séparer en plusieurs fichiers.

Pour la partie machine learning il s'agira surtout de tester des "hypothèses". Normalement l'IA est pas super complexe, on doit pouvoir exhiber quelques comportements. En tous cas, déjà avoir les sorts des mobs ce serait génial.
 

Arth

Rédacteur
Inscrit
28 Aout 2016
Messages
80
Reactions
2
#17
Sympas comme analyse, ça sort même de la conception de bot, c'est juste de la théorie sur le jeu. Donc moi je trouve ça cool, et si tu dit dès le début que c'est pas spécialement pour la création de bot, tu as moins de risque face à ankama.

Sinon le format Json est pas mal car il y a déjà des lib pour le parse et il est lisible humainement.
Par contre il faut prendre en compte les résultats de chaque action aléatoire (retraite de pv, de pa, de PM, de %res etc..) sinon tu n'as pas l'état complet du mob et évidemment les actions du mob dépendent de cet état au cours de la partie. Je pense qu'il faut vraiment récolté toutes les infos relative au combat.

Par contre dans le format proposé je pense que la gestion des invocations peut être un peu complexe, il faudrait bien définir tout ça ;)

Edit (oui l'edit est plus long que le message :))
Je présent qu'une proposition pour le format JSON car je le pense préférable.
Du coup, je reprend la proposition de @nowis13 avec mes propositions de changement:
JavaScript:
{
    "version_log": "0.1",
    "version_game": "2.41.26",
    "date": 1321231,
    "map": [ {
            "x": 0, "y": 0,
            "walk": true,
            "sight": true
        }, {
            "x": 1, "y": 0,
            "walk": false,
            "sight": true
        }, {
            "...": "..."
        }
    ],
    "entitys": [ {
            "id": 1,
            "team": 0,
            "position": [3, 5],
            "...": "...",
        }, {
            "id": 2,
            "team": 1,
            "position": [2, 5],
            "...": "...",
    } ],
    "turns": [ {
            "entity" : 1,
            "moves": [ {
                    "action": "move",
                    "position": [1, 1]
                }, {
                    "action": "attack",
                    "position": [1, 2],
                    "effects": [ {
                            "target": 33,
                            "pdv" : -500000000,
                    } ]
                }, {
                    "action": "spell",
                    "position": [2, 1],
                    "effects": [ {
                            "target": 32,
                            "pdv" : -5,
                            "PA" : -1
                    }, {
                            "target": 31,
                            "pdv" : -5,
                            "PA" : -1,
                            "state": [ {
                                    "name": "un super buff",
                                    "turn_count": 5,
                                    "effect": { }
                            } ]
                    } ]
            } ]
    } ]
}
Concertant la map :
  • la placer dans un autre fichier serait peut-être intéressant
  • Il faut prendre en compte la ligne de vue je les appels 'sight' (j'ai mis walk a la place de wall pour une raison de logique avec sight, pour qu'un true ai le même sens dans les 2 cas)
  • on peut biensur eviter de lister toutes les cellules si on s'y prend bien en ne parlant que des case non marchable par exemple (dans ce cas, wall ou walk a plus d'utilité)
  • on pourrait utiliser une position sous la forme d'un tableau plutôt que x, y (c'est souvent plus court et aussi claire et plus consistant)
j'ai renommé players en entitys pour que cela sois plus claire.
  • On placera aussi les invocations dedans.
  • chaque entity a une id (on peut aussi utiliser la position dans la liste mais c'est pas toujours super)
  • tous les entitys présente au debut de la partie ont une position (on peut savoir que c'est une invocation si elle a pas de position au debut), la position utilise la notation sous forme de tableau [x, y]
  • il faut listé toutes les stats d'un perso, et son cac si il en a un (mais je connais pas assez les nouvelle version pour savoir tous ce qu'il faut listé ...)
J'ai renommé states en turns ce qui est plus claire. Et le contenu d'un tour est très différant de celui de @nowis13 cette fois. Car je pense que le tour d'un joueur/monstre ne peut pas etre jouer dans tout les sens, et le sens des actions a une importance pour comprendre l'ia (pour les joueur c'est pas utile c'est vrai).
chaque tour est un objet, qui contient l'id de l'entity qui joue. (on peut aussi la déterminer en fonction de l'ordre des tour, mais avec l'appel d'invocation cela complexifie le problème, donc je pense qu'on gagne en clarté de cette manière)
Il contient une liste moves qui correspond aux actions de jeu (pas au mouvement, pas encore):
  • chaque move a une propreté action, une position ciblé, et des effects.
  • une effects est une liste d'effet, qui contient une target qui precise l'entity id touché (pour gérer les effet de zone), et et toutes les states modifié. ou les buff ajouté.

Voila ma proposition amélioration. Elle est évidement imparfaite et encore un peu vague sur plein de points.
Je vous invites vivement à proposer des améliorations en plus ou de critiquer mes choix !

A+
 
Dernière édition:

nowis13

Rédacteur
Inscrit
11 Janvier 2015
Messages
22
Reactions
0
#18
Salut a tous,

@Arth A peu près toutes tes modifs me conviennent. Pour les invocations, le plus simple c'est de les gérer comme des mobs indépendants et de les ajouter à la liste entity.
C'est pour ça que j'avais introduit le champ modifers dans chaque turn.
Mon idée était d'avoir un état de combat initial et de voir chaque tours comme indépendants entre eux. Donc de rajouter dans le champ modifers toutes les informations pour arriver dans l'état du tour. (par exemple un champ summoned qui contient une liste d'entities bonus).
C'est vrai que c'est un peu une redite car on peut obtenir, par exemple, les points de vie actuels en sommant les effets des sorts subits dans des tours précédents. Mais si on simplifie au maximum pour le machine learning, il ne faut pas que les entrées dépendent de tours du jeu précédents.

Je pense pas que ces données pourront être exploitées directement par du ML mais le format m'a l'air de pouvoir être exhaustif quand au informations du combat. Cela serait donc un bon candidat pour la constitution d'un dataset :)

PS: Je suis pour le fait bouger les maps dans un autre fichier. Cela permettrait de gagner pas mal de place. Mais comme pour l'instant on est pas trop limité en terme de place, (on a pas de log :) ) on pourrait introduire la feature dans une version future.

PPS: On peut se rapprocher des formats du client officiel pour ce qui est des spells et des maps. Comme ça on reste "standard".
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
797
Reactions
9
#19

neross

Membre Actif
Inscrit
20 Decembre 2014
Messages
149
Reactions
0
#20
Tout ce que je peux dire c'est que juste un système de log est totalement inutile car l'IA actuelle de Dofus est a un point ou il faut prendre en compte des centaines de paramètre a chaque action faite.
Par exemple un Sanglier : il vas calculer les pm, ces possible tacleurs, si il peux pousser un joueur contre un mur ou mieux sur un joueur, s'il peux pousser pour avantager des attaques de zone produis par un de ces alliers, etc ... Il faudrait un gros système analytic qui reviendrais au même que faire l'IA en gros. Ou sinon faire un systeme de Log qui prendrais un compte chaque action et qui nous donnerais les infos global du combat a chaque action et avoir des devs motiver a lire 10.000.000 de données pour chaque combat.
 
Haut Bas