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() then global:printSuccess("C'est le tour de mon personnage !") global:delay(5000)else global:printMessage("C'est le tour de "..fightSlave:name().." !")local slave = fightSlave:entity()if slave ~=nilthen global: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()else global:printError("Une erreur est survenue !")end global: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'interface global: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 ==nilthen global: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éplacer global:printSuccess("Je me déplace à la cellule "..moveCell.." pour lancer le sort !") fightSlave:moveTowardCell(moveCell)if fightSlave:cellId() ~= moveCell then global:printError("Le déplacement a échoué !")returnfalseend-- Lancer global: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'interface global: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 ==nilthen global: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éplacer global:printSuccess("Je me déplace à la cellule "..moveCell.." pour lancer le sort !") fightSlave:moveTowardCell(moveCell)if fightSlave:cellId() ~= moveCell then global:printError("Le déplacement a échoué !")returnfalseend-- Lancer global:printSuccess("Je lance le sort !")if fightSlave:castSpellOnCell(209, enemyCell) thenreturntrueendendreturnfalseend