Aller au contenu

title: fight — Combat | MoonBot API description: API combat MoonBot Lua : lancer un sort, déplacement en combat, ciblage, IA de combat (72 fonctions).


fight — Combat

API combat MoonBot Lua : lancer un sort, déplacement en combat, ciblage, IA de combat (72 fonctions).

72 fonctions dans ce namespace.

Index


Référence

fight.isInFight

fight.isInFight()

returns boolean

True si en combat.


fight.isMyTurn

fight.isMyTurn()

returns boolean

True si c'est notre tour.


fight.getTurnNumber

fight.getTurnNumber()

returns number

Numero du tour (1, 2, 3...).


fight.getCurrentFighterId

fight.getCurrentFighterId()

returns number

ID de l'entite dont c'est le tour.


fight.getTurnOrder

fight.getTurnOrder()

returns table of number

IDs des combattants dans l'ordre de jeu.


fight.myId

fight.myId()

returns number

ID de notre personnage en combat.


fight.myCell

fight.myCell()

returns number

Cellule de notre personnage (depuis les donnees fighter, plus precis).


fight.myAP

fight.myAP()

returns number

PA actuels.


fight.myMP

fight.myMP()

returns number

PM actuels.


fight.myHP

fight.myHP()

returns number, number

Retourne 2 valeurs : (pv_actuels, pv_max). Exemple : local hp, hpMax = fight.myHP()


fight.myLifePercent

fight.myLifePercent()

returns number

Pourcentage de PV (0-100).


fight.myRange

fight.myRange()

returns number

Portee du personnage.


fight.myLevel

fight.myLevel()

returns number

Niveau du personnage.


fight.myBreed

fight.myBreed()

returns number

Classe (1=Feca, 2=Osa, 3=Enu, 4=Sram, 5=Xelor, 6=Eca, 7=Eni, 8=Iop, 9=Cra, 10=Sadi, 11=Sacri, 12=Panda).


fight.myTeamId

fight.myTeamId()

returns number

Equipe (0 ou 1).


fight.getEnemies

fight.getEnemies()

returns table of fighter

Ennemis vivants. Chaque fighter : {id, cellId, hp, hpMax, hpPercent, ap, mp, isEnemy, alive, name, teamId, level, summonerId, isSummon, invisible, templateId, distance}.


fight.getAllies

fight.getAllies()

returns table of fighter

Allies vivants (y compris nous).


fight.getAllFighters

fight.getAllFighters()

returns table of fighter

Tous les combattants (vivants et morts).


fight.getFighter

fight.getFighter(id: number)

returns fighter | nil

Combattant par ID.


fight.getFighterOnCell

fight.getFighterOnCell(cellId: number)

returns fighter | nil

Combattant vivant sur une cellule.


fight.getNearestEnemy

fight.getNearestEnemy()

returns fighter | nil

Ennemi vivant le plus proche en cases.


fight.getWeakestEnemy

fight.getWeakestEnemy()

returns fighter | nil

Ennemi vivant avec le moins de PV.


fight.enemyCount

fight.enemyCount()

returns number

Nombre d'ennemis vivants.


fight.allyCount

fight.allyCount()

returns number

Nombre d'allies vivants (y compris nous).


Filtrer les invocations

for _, e in ipairs(fight.getAllFighters()) do
  if e.isSummon and e.summonerId == fight.myId() then
    -- c'est notre invoc
  end
end

isSummon=true si invocation, summonerId=ID de l'invocateur. Permet de distinguer les invocations de chaque joueur/monstre.


Invisibilite

fighter.invisible

returns boolean

true si l'entite est invisible. Les entites invisibles ne bloquent pas la ligne de vue.


Limitations protocole

-- Limitations Dofus Retro 1.29

Le protocole ne transmet PAS : resistances/stats elementaires des monstres, etats actifs (empoisonne, porte...), etats requis pour lancer un sort. Si un sort necessite un etat, le serveur refusera silencieusement. Seuls HP, PA, PM, position, niveau, invisibilite et invocations sont fiables.


fight.castSpell

fight.castSpell(spellId: number, cellId: number)

returns boolean

Lance un sort sur une cellule.


fight.move

fight.move(cellId: number)

returns boolean

Deplacement en combat vers une cellule.


fight.passTurn

fight.passTurn()

returns boolean

Passe le tour.


fight.ready

fight.ready()

returns boolean

Signal pret (phase de placement).


fight.abandon

fight.abandon()

returns boolean

Abandonne le combat. Le personnage quitte immediatement.


fight.placeOnCell

fight.placeOnCell(cellId: number)

returns boolean

Se placer sur une cellule pendant la phase de placement.


fight.getPlacementCells

fight.getPlacementCells()

returns table of number

Cellules de placement de notre equipe.


fight.getEnemyPlacementCells

fight.getEnemyPlacementCells()

returns table of number

Cellules de placement ennemies.


fight.getSpells

fight.getSpells()

returns table of spell

Tous nos sorts. Chaque spell : {id, name, level, position, cdRemaining, castsThisTurn, apCost, minRange, maxRange, needLos, needLine, freeCell, rangeBoostable, maxPerTurn, maxPerTarget, cooldown, isSummon, zoneType ('P'=point, 'X'=croix, 'C'=cercle, 'L'=ligne, 'D'=anneau), zoneSize}.


fight.getSpell

fight.getSpell(spellId: number)

returns spell | nil

Donnees d'un sort.


fight.spellCooldown

fight.spellCooldown(spellId: number)

returns number

Tours de recharge restants (0 = pret).


fight.canCastSpell

fight.canCastSpell(spellId: number)

returns boolean, string

Retourne (true, "ok") ou (false, raison). Raisons : "spell_not_found", "no_spell_data", "not_enough_ap", "cooldown", "max_per_turn", "summon_limit".


fight.canCastSpellOnCell

fight.canCastSpellOnCell(spellId: number, cellId: number)

returns string

Retourne "ok" ou la raison du refus : "not_enough_ap", "cooldown_N", "max_per_turn", "max_per_target", "too_close", "out_of_range", "not_in_line", "no_los", "cell_occupied", "summon_limit".


fight.getTargetableCells

fight.getTargetableCells(spellId: number)

returns table of number

Toutes les cellules ciblables par ce sort actuellement.


fight.getSpellZoneCells

fight.getSpellZoneCells(spellId: number, targetCell: number)

returns table of number

Cellules dans la zone d'effet du sort.


fight.getEnemiesInZone

fight.getEnemiesInZone(spellId: number, targetCell: number)

returns table of fighter

Ennemis touches par la zone d'effet.


fight.getBestZoneTarget

fight.getBestZoneTarget(spellId: number)

returns number, number

Retourne (cellId, count) : cellule optimale pour toucher le plus d'ennemis. nil si aucun ennemi.


fight.cellDistance

fight.cellDistance(cellA: number, cellB: number)

returns number

Distance Manhattan isometrique entre deux cellules.


fight.distanceTo

fight.distanceTo(cellId: number)

returns number

Distance depuis notre cellule.


fight.getReachableCells

fight.getReachableCells()

returns table of number

Cellules accessibles avec nos PM (BFS).


fight.getPath

fight.getPath(fromCell: number, toCell: number)

returns table of number

Chemin A* entre deux cellules. Table vide si aucun chemin.


fight.pathLength

fight.pathLength(fromCell: number, toCell: number)

returns number

Nombre de cases du chemin (0 = inaccessible).


fight.isLineOfSight

fight.isLineOfSight(fromCell: number, toCell: number)

returns boolean

True si vue degagee (pas de combattant bloquant).


fight.adjacentCells

fight.adjacentCells(cellId: number)

returns table of number

4 cellules voisines.


fight.isCellWalkable

fight.isCellWalkable(cellId: number)

returns boolean

True si la cellule est marchable.


fight.isCellFree

fight.isCellFree(cellId: number)

returns boolean

True si marchable ET aucune entite vivante dessus.


fight.getSummons

fight.getSummons()

returns table of fighter

Nos invocations vivantes (allies avec ID negatif).


fight.hasSummons

fight.hasSummons()

returns boolean

True si on a des invocations en vie.


fight.getSummonById

fight.getSummonById(id: number)

returns fighter | nil

Invocation par ID.


fight.summon

fight.summon(spellId: number, cellId: number)

returns boolean

Lance un sort d'invocation sur une cellule.


fight.summonCount

fight.summonCount()

returns number

Nombre d'invocations actuelles.


fight.summonMax

fight.summonMax()

returns number

Nombre max d'invocations.


fight.hasChallenges

fight.hasChallenges()

returns boolean

True si des defis sont actifs.


fight.getChallengeIds

fight.getChallengeIds()

returns table of number

IDs des defis actifs.


fight.getChallengeCount

fight.getChallengeCount()

returns number

Nombre de defis.


fight.isChallengeActive

fight.isChallengeActive(id: number)

returns boolean

True si le defi est actif.


fight.challengeName

fight.challengeName(id: number)

returns string

Nom du defi.


fight.getActiveChallenges

fight.getActiveChallenges()

returns table of {id, name, active}

Tous les defis avec nom et statut.


fight.addSpell

fight.addSpell(spellId: number)

Ajoute un sort a la liste auto-play.


fight.clearSpells

fight.clearSpells()

Vide la liste auto-play.


fight.playTurn

fight.playTurn()

Lance tous les sorts de la liste sur l'ennemi le plus proche puis passe le tour.


fight.waitForTurn

fight.waitForTurn(timeoutMs?: number)

blocking · returns boolean

Bloque jusqu'a ce que ce soit notre tour. False si timeout ou fin de combat. Defaut 60s.


fight.waitForFightEnd

fight.waitForFightEnd(timeoutMs?: number)

blocking · returns boolean

Bloque jusqu'a la fin du combat. Retourne true si victoire. Defaut 5min.


fight.delay

fight.delay(ms: number)

blocking

Pause de ms millisecondes.


fight.log

fight.log(msg: string)

Log un message pendant le combat.