Ce sont des fichiers qui contient les différents données du jeu (Les items, les classes, les sorts, les monstres etc ...)
Ces fichiers sont situés dans le dossier \data\common dans le dossier contenant Dofus.
Connaitre la structure d'un fichier D2O
Il n'y a pas mieux que de convertir ce fichier en JSON, puis l'ouvrir dans un éditeur de JSON pour visualiser et comprendre sa structure.
Par exemple, en executant ce script sur AnkaBot :
functionmove() d2data:exportD2O("Items")end
On obtient un fichier Items.json dans le meme dossier que AnkaBot :
Vous pouvez alors l'ouvrir dans un éditeur de JSON pour visualiser et comprendre sa structure :
Cette structure va nous aider à savoir comment récupérer une valeur précise depuis notre script LUA.
Exemple
functionmove()-- Récupérer l'item dont le GID = 11499local item = d2data:objectFromD2O("Items", 11499)if item ==nilthen global:printError("Erreur")returnend-- Print le nomlocal name = d2data:text(item.Fields["nameId"]) global:printSuccess("Nom : "..name)-- Afficher la liste des objets dont la recette contient 11499for _, recipeId inipairs(item.Fields["recipeIds"]) dolocal recipeItem = d2data:objectFromD2O("Items", recipeId)if recipeItem ~=nilthen global:printSuccess("Contenue dans la recette de : "..d2data:text(recipeItem.Fields["nameId"]))endend-- Afficher la liste des monstres qui drop'ent cet itemfor _, dropMonsterId inipairs(item.Fields["dropMonsterIds"]) dolocal monster = d2data:objectFromD2O("Monsters", dropMonsterId)if monster ~=nilthen global:printSuccess("Se drop avec : "..d2data:text(monster.Fields["nameId"]))endend-- Afficher toutes les classes du jeulocal breeds = d2data:allObjectsFromD2O("Breeds")for _, breed inipairs(breeds) doif breed ~=nilthen global:printSuccess(d2data:text(breed.Fields["shortNameId"]))endendend
Données d'une carte
De la meme manière qu'un fichier D2O, vous pouvez exporter en JSON les données d'une certaine carte :
functionmove() d2data:exportMapData(212601350)end
Ces données peuvent être utile dans plusieurs situations :
Récupérer les ID des cartes adjacentes.
Savoir si une cellule est marchable, si elle laisse passer la ligne de vue.
...
Exemple
functionmove()-- Récuperer les datalocal mapData = d2data:mapData(212601350)if mapData ==nilthen global:printError("Erreur")returnend-- Afficher quelques données global:printSuccess("LeftNeighbourId : "..mapData["LeftNeighbourId"]) global:printSuccess("SubAreaId : "..mapData["SubAreaId"]) global:printSuccess("SubArea Name : "..d2data:text(d2data:objectFromD2O("SubAreas", mapData["SubAreaId"]).Fields["nameId"]))-- Récupérer des données sur la cellule 213local cell = mapData["Cells"][214] -- LUA commence les enumérations de 1 et non pas 0, pour avoir la cellule 213 on met 214 global:printMessage("Informations sur la cellule 213 :") global:printSuccess("walkable : "..tostring(cell["walkable"])) global:printSuccess("Los : "..tostring(cell["Los"]))end