# Structure de base

## <mark style="color:yellow;">Définition - Fonction</mark>

Une fonction est un terme générique qui désigne une partie d'un programme indépendant qui peut être appelée par un autre programme ou par elle-même. ( dans ce cas, on dit qu'il y a récursivité )

Une fonction ( aussi appelé "routine" ), est une portion de code représentant un bloc et contenant un sous programme.

Suivant le langage utilisé et plus généralement en POO, on parlera aussi de méthode.( voir § suivant )

Mais pour ce qui nous intéresse ici, le langage LUA, nous parlerons tout simplement de fonction.

* On envoie à une fonction des **"paramètres"**. (param)
* Cette fonction va recevoir et traiter des **"arguments"**. (arg)
* Et cette fonction va retourner ( ou pas ), des **"résultats"**. (return)

La syntaxe pour définir une fonction est :

```lua
function leNomDeMaFonction(argument1,argument2,argument3)
    -- Le contenu de notre fonction
end
```

Voici un exemple de fonction appliquée à **AnkaBot** :

```lua
function envoyerMessage(argument)
    global:printMessage(argument)
end

-- Simplification :

function sendText(arg)
    global:printMessage(arg)
end
```

**AnkabotPC** nécessite une structure de base, de la même manière que la structure de base d’une maison.

Cette structure est la suivante:

```lua
AUTO_DELETE = {}
GATHER = {}
MIN_MONSTERS = 1
MAX_MONSTERS = 8


function move()
    return {
        -- Les déplacements, récoltes, combats
    }
end

function bank()
    return {
        -- Le retour en banque lorsque le personnage est en surpoids
    }
end

function phenix()
    return {
        -- La chemin vers le phenix si le personnage est mort
    }
end

function stopped()
    -- Lorsque le script est arrêté brusquement
end

function banned()
    -- Lorsque votre compte subi un bannissement
end

function mule_lost(bossMapId)
    -- Lorsqu'une mule ne se trouve pas dans la meme carte du chef
    global:printSuccess(bossMapId)
end
```

Les trois première fonctions sont appelées par <mark style="color:yellow;">AnkaBot</mark> **à chaque changement de carte**.

La fonction **stopped()** est appelée lorsque le script est arrêté brusquement.

La fonction **banned()** est appelée lorsque votre compte subi un bannissement.

## **Fonction « Move »**

La fonction **move** contient plusieurs types d’actions.

* Les déplacements sans action.
* Les déplacements avec récolte.
* Les déplacements avec combat.
* Les déplacements avec récolte et combat.
* Les actions customisées.

C’est cette fonction qui est la plupart du temps appelée à chaque changement de carte.

## **Fonction « Bank »**

La fonction **bank** ne contient que trois types d’actions.

* Les déplacements sans action en direction de la banque.
* Le dialogue avec le banquier pour vider son inventaire.
* L’accès au coffre d’une maison.
* Les actions customisées.

Elle est appelée lorsque le pourcentage de retour en banque est atteint. Si le pourcentage est à 90%, alors lorsque le personnage atteindra 90% ou plus dans son inventaire, **AnkaBot** appellera la fonction **bank** à la place de la fonction **move**.

## **Fonction « Phenix »**

La fonction **phenix** ne contient, elle aussi, que trois types d’actions.

* Les déplacements sans action en direction du phenix.
* L’utilisation du phœnix pour se réanimer.
* Les actions customisées.

Elle est appelée lorsque le personnage est un fantôme. La fonction **move** sera ensuite rappelée lorsque le personnage se sera réanimé avec un phœnix.

## **Fonction « Mule\_lost »**

Cette fonction est exécutée si une mule n'a pas rejoint le chef dans le temps requis <mark style="color:yellow;">(ce temps est contrôlé par la variable global</mark> <mark style="color:yellow;"></mark><mark style="color:yellow;">**ANKABOT\_TIMEOUT**</mark><mark style="color:yellow;">)</mark>, et sera exécutée à chaque changement de carte jusqu'à ce que la mule arrive chez le chef.

Pour **Dofus 2.0** qui contient l'auto-pilotage, la manière la plus simple est de faire ça :&#x20;

```lua
function mule_lost(bossMapId)
    map:moveToward(bossMapId)
end
```

Selon vos script, le bout de script ci-dessus peut ne pas marcher (peut etre il faut passer par un Zaap, havre sac etc ...) et donc c'est à vous dans ce cas de choisir soigneusement les actions à faire pour rejoindre le chef.

{% hint style="danger" %}
La syntaxe :&#x20;

<mark style="color:yellow;">return {</mark>

&#x20;     <mark style="color:yellow;">{ map = "X", path = "Y" },</mark>

<mark style="color:yellow;">}</mark>

Ne marche pas pour la fonction <mark style="color:yellow;">mule\_lost()</mark>, elle est réservée seulement pour <mark style="color:yellow;">move()</mark>, <mark style="color:yellow;">bank()</mark> et <mark style="color:yellow;">phenix()</mark>.
{% endhint %}

**Exemple :**&#x20;

```lua
function mule_lost(bossMapId)
    if map:onMap("4,-3") then
        map:changeMap("top")
    elseif map:onMap("4,-4") then 
        map:moveToCell(516)
    elseif map:onMap("4,-5") then
        map:door(200)
    end
end
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.ankabot.dev/installation/construction-dun-script/structure-de-base.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
