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 :
function move()
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
function move()
-- Récupérer l'item dont le GID = 11499
local item = d2data:objectFromD2O("Items", 11499)
if item == nil then
global:printError("Erreur")
return
end
-- Print le nom
local name = d2data:text(item.Fields["nameId"])
global:printSuccess("Nom : "..name)
-- Afficher la liste des objets dont la recette contient 11499
for _, recipeId in ipairs(item.Fields["recipeIds"]) do
local recipeItem = d2data:objectFromD2O("Items", recipeId)
if recipeItem ~= nil then
global:printSuccess("Contenue dans la recette de : "..d2data:text(recipeItem.Fields["nameId"]))
end
end
-- Afficher la liste des monstres qui drop'ent cet item
for _, dropMonsterId in ipairs(item.Fields["dropMonsterIds"]) do
local monster = d2data:objectFromD2O("Monsters", dropMonsterId)
if monster ~= nil then
global:printSuccess("Se drop avec : "..d2data:text(monster.Fields["nameId"]))
end
end
-- Afficher toutes les classes du jeu
local breeds = d2data:allObjectsFromD2O("Breeds")
for _, breed in ipairs(breeds) do
if breed ~= nil then
global:printSuccess(d2data:text(breed.Fields["shortNameId"]))
end
end
end
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 :
function move()
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
function move()
-- Récuperer les data
local mapData = d2data:mapData(212601350)
if mapData == nil then
global:printError("Erreur")
return
end
-- 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 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