Créatures contrôlables = companion ou invocation qu'on peut contrôler.
Dans ce paragraphe nous allons apprendre comment contrôler ce type de créature avec AnkaBot.
Récupérer l'identifiant et les sorts
Créer et charger le script suivant :
functionfightManagement()global:printSuccess("TOUR : "..fightAction:getCurrentTurn())if fightCharacter:isItMyTurn() thenglobal:printSuccess("C'est le tour de mon personnage !")global:delay(5000)elseglobal:printMessage("C'est le tour de "..fightSlave:name().." !")local slave = fightSlave:entity()if slave ~=nilthenglobal:printSuccess("Id :"..slave.Id)global:printSuccess("CreatureGenericId :"..slave.CreatureGenericId)global:printSuccess("LifePoints :"..slave.LifePoints)global:printSuccess("AP :"..slave.AP)global:printSuccess("MP :"..slave.MP)global:printSuccess("CellId :"..slave.CellId)global:printSuccess("Level :"..slave.Level)global:printSuccess("Nearest Enemy :"..fightSlave:getNearestEnemy())global:printSuccess("Nearest Ally :"..fightSlave:getNearestAlly())global:printSuccess("Invocateur :"..slave.Stats.summoner) fightSlave:showSpells()elseglobal:printError("Une erreur est survenue !")endglobal:delay(5000)endend
Puis choisissez "IA Avancée dans le meme script" :
Lancer un combat avec n'importe quel monstre, le script va vous afficher quelques informations :
Nous allons récupérer les informations utiles suivants :
Un identifiant : 1 (Celui du companion Lumino)
Les identifiants des sorts du Lumino.
Exemple d'IA (Dofus 2.0)
La réalisation de l'IA pour un companion ou une invocation, se fait exactement de la meme manière que la réalisation de l'IA pour votre personnage, la seule différence c'est que au lieu d'utiliser les méthode fightAction: ou fightCharacter: il faut utiliser fightSlave:
Lorsque vous utiliser une IA avancée pour votre companion, vous pouvez continuer à utiliser l'IA intégrée dans l'interface d'AnkaBot pour votre personnage, voir :
Votre personnage principale va jouer avec l'IA intégrée dans l'interface d'AnkaBot.
Votre companion Lumino va jouer le sort "Tambourino" le maximum de fois possible.
Tout est expliqué avec des commentaires.
functionfightManagement()-- Vérifier que c'est le tour de mon personnage principale.if fightCharacter:isItMyTurn() then-- Jouer le tour de mon personnage avec l'IA configurée dans l'interfaceglobal:printMessage("C'est mon tour, je joue avec l'IA configurée dans l'interface !") fightBasic:playTurn(1)else-- L'entité qui joue le tourlocal slave = fightSlave:entity()if slave ==nilthenglobal:printSuccess("Une erreur est survenue, impossible de récupérer l'entité qui joue le tour !")end-- Tour de qui ?global:printMessage("C'est le tour de "..fightSlave:name().." !")-- Vérifier que c'est Lumino (1 = Lumino)if slave.CreatureGenericId ==1then-- Lancer le maximum de fois possible le sort "Tambourino" (ID: 4204) du Luminowhilespell_Tambourino() doend-- On se rapproche de l'ennemi le plus proche fightSlave:moveTowardCell(fightSlave:getNearestEnemy())endendendfunctionspell_Tambourino()-- Récupérer la cellule de l'ennemi le plus prochelocal enemyCell = fightSlave:getNearestEnemy()-- Chercher une cellule où on peut lancer le sort "Tambourino" (ID: 4204) du Luminolocal moveCell =-1local realReachableCells = fightSlave:getRealReachableCells()for _, cell inipairs(realReachableCells) doif fightSlave:canCastSpellOnCellAfterMove(cell, 4204, enemyCell) ==0thenif moveCell ==-1then moveCell = cellelseif fightAction:getDistance(cell, fightSlave:cellId()) < fightAction:getDistance(moveCell, fightSlave:cellId()) then moveCell = cellendendendend-- Vérifier et lancerif moveCell ~=-1then-- Se déplacerglobal:printSuccess("Je me déplace à la cellule "..moveCell.." pour lancer le sort !") fightSlave:moveTowardCell(moveCell)if fightSlave:cellId() ~= moveCell thenglobal:printError("Le déplacement a échoué !")returnfalseend-- Lancerglobal:printSuccess("Je lance le sort !")if fightSlave:castSpellOnCell(4204, enemyCell) thenreturntrueendendreturnfalseend
Exemple du "Chaton" (Dofus Touch)
Ci-dessous l'exemple d'une IA qui :
Votre personnage principale va jouer avec l'IA intégrée dans l'interface d'AnkaBot.
Votre invocation "Chaton" va jouer le sort "Chatataque" le maximum de fois possible.
Tout est expliqué avec des commentaires.
functionfightManagement()-- Vérifier que c'est le tour de mon personnage principale.if fightCharacter:isItMyTurn() then-- Jouer le tour de mon personnage avec l'IA configurée dans l'interfaceglobal:printMessage("C'est mon tour, je joue avec l'IA configurée dans l'interface !") fightBasic:playTurn(1)else-- L'entité qui joue le tourlocal slave = fightSlave:entity()if slave ==nilthenglobal:printSuccess("Une erreur est survenue, impossible de récupérer l'entité qui joue le tour !")end-- Tour de qui ?global:printMessage("C'est le tour de "..fightSlave:name().." !")-- Vérifier que c'est Chaton (45 = Chaton)if slave.CreatureGenericId ==45then-- Lancer le maximum de fois possible le sort "Chatataque" (ID: 209) du Chatonwhilespell_Chatataque() doend-- On se rapproche de l'ennemi le plus proche fightSlave:moveTowardCell(fightSlave:getNearestEnemy())endendendfunctionspell_Chatataque()-- Récupérer la cellule de l'ennemi le plus prochelocal enemyCell = fightSlave:getNearestEnemy()-- Chercher une cellule où on peut lancer le sort "Chatataque" (ID: 209) du Chatonlocal moveCell =-1local realReachableCells = fightSlave:getRealReachableCells()for _, cell inipairs(realReachableCells) doif fightSlave:canCastSpellOnCellAfterMove(cell, 209, enemyCell) ==0thenif moveCell ==-1then moveCell = cellelseif fightAction:getDistance(cell, fightSlave:cellId()) < fightAction:getDistance(moveCell, fightSlave:cellId()) then moveCell = cellendendendend-- Vérifier et lancerif moveCell ~=-1then-- Se déplacerglobal:printSuccess("Je me déplace à la cellule "..moveCell.." pour lancer le sort !") fightSlave:moveTowardCell(moveCell)if fightSlave:cellId() ~= moveCell thenglobal:printError("Le déplacement a échoué !")returnfalseend-- Lancerglobal:printSuccess("Je lance le sort !")if fightSlave:castSpellOnCell(209, enemyCell) thenreturntrueendendreturnfalseend