d2data

C'est quoi les fichiers D2O

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

Dernière mise à jour