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 ==nilthenglobal: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 ~=nilthenglobal: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 ~=nilthenglobal: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 ~=nilthenglobal: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 ==nilthenglobal:printError("Erreur")returnend-- Afficher quelques donnéesglobal: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 213 local 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