📝 Structure de base

Tout ce qu'il faut savoir pour écrire un script OnlyBot valide : variables globales, fonctions obligatoires, champs de déplacement, combat et récolte.

Variables globales

Ces variables sont déclarées en haut du script, en dehors de toute fonction. Elles configurent le comportement général du bot et sont lues au démarrage de chaque itération.

Variable Type Obligatoire Description
MAX_PODS int Oui Pourcentage de pods déclenchant le retour en banque. Ex : 90 = dépôt quand l'inventaire est rempli à 90%.
ELEMENTS_TO_GATHER table Si gather = true IDs des ressources à récolter sur la carte. Le bot ignorera toutes les autres ressources.
MIN_MONSTERS int Non (défaut: 1) Nombre minimal de monstres dans un groupe pour que le bot lance le combat.
MAX_MONSTERS int Non (défaut: 8) Nombre maximal de monstres dans un groupe. Les groupes plus grands seront ignorés.
OK_MONSTER table Non IDs des monstres obligatoires. Le groupe doit contenir au moins un de ces monstres pour être attaqué. Si vide, tous les groupes valides sont attaqués.
NO_MONSTER table Non IDs des monstres interdits. Si un groupe contient un de ces monstres, il sera ignoré, même s'il contient un monstre de OK_MONSTER.
-- Configuration globale du script MAX_PODS = 90 -- Dépôt en banque à 90% de charge ELEMENTS_TO_GATHER = {254, 426} -- IDs des ressources à récolter MIN_MONSTERS = 1 -- Attaque dès 1 monstre dans le groupe MAX_MONSTERS = 4 -- Ignore les groupes de plus de 4 monstres OK_MONSTER = {651} -- Attaque uniquement si le groupe contient le monstre 651 NO_MONSTER = {652, 800} -- Ignore les groupes contenant les monstres 652 ou 800
Note : OK_MONSTER et NO_MONSTER sont complémentaires. NO_MONSTER est évalué en premier — un groupe avec un monstre interdit est toujours ignoré, même s'il contient un monstre de OK_MONSTER.

Fonctions obligatoires

Un script OnlyBot doit obligatoirement contenir deux fonctions : move() et bank(). Ces deux fonctions doivent retourner un tableau de structures de déplacement.

Fonction Rôle Déclencheur
move() Déplacements, récoltes et combats normaux Appelée quand les pods sont inférieurs à MAX_PODS
bank() Retour en banque pour déposer l'inventaire Appelée quand les pods atteignent ou dépassent MAX_PODS

Structure de déplacement

Chaque entrée dans le tableau retourné par move() ou bank() est une table Lua avec les champs suivants :

Champ Type Obligatoire Description
map string Oui Identifiant de la carte. Peut être une position ("4,-18") ou un MapID numérique ("191104002").
changeMap string Oui Direction de changement de carte une fois les actions terminées. Valeurs : "right", "left", "top", "bottom", ou un identifiant de cellule.
gather bool Non Si true, le bot récolte les ressources définies dans ELEMENTS_TO_GATHER avant de changer de carte.
fight bool Non Si true, le bot attaque les groupes de monstres présents sur la carte selon les critères MIN_MONSTERS, MAX_MONSTERS, OK_MONSTER et NO_MONSTER.
custom string Non Nom d'une fonction Lua définie dans le script à appeler sur cette carte. Utile pour des actions spécifiques (interagir avec un NPC, utiliser un objet, etc.).
Ordre d'exécution : Sur une même carte, les actions s'enchaînent dans cet ordre : fightcustom → attente fin de combat → gatherchangeMap.

Format du champ map

Le champ map accepte deux formats :

Format Exemple Description
Position "x,y" "4,-18" Coordonnées de la carte. Le bot compare ces coordonnées avec la position actuelle du personnage.
MapID numérique "191104002" Identifiant unique de la carte. Plus précis que les coordonnées (utile pour les cartes qui partagent les mêmes coordonnées).

Exemples

Déplacement simple

Le script se déplace de carte en carte sans effectuer d'action particulière.

MAX_PODS = 90 function move() return { {map = "4,-18", changeMap = "right"}, {map = "5,-18", changeMap = "right"}, {map = "6,-18", changeMap = "bottom"}, {map = "6,-19", changeMap = "left"}, {map = "5,-19", changeMap = "left"}, {map = "4,-19", changeMap = "top"}, } end function bank() return { {map = "4,-18", changeMap = "left"}, {map = "3,-18", changeMap = "top", custom = "deposer_banque"}, } end

Récolte de ressources

Le bot récolte les ressources listées dans ELEMENTS_TO_GATHER sur les cartes où gather = true.

MAX_PODS = 85 ELEMENTS_TO_GATHER = {254, 426, 741} -- IDs des ressources ciblées function move() return { {map = "4,-18", changeMap = "right", gather = true}, {map = "5,-18", changeMap = "right", gather = true}, {map = "6,-18", changeMap = "bottom"}, {map = "6,-19", changeMap = "left", gather = true}, } end function bank() return { {map = "4,-18", changeMap = "left"}, {map = "3,-18", changeMap = "top", custom = "deposer_banque"}, } end

Combat avec filtres monstres

Le bot attaque les groupes de monstres sur les cartes où fight = true, en respectant les filtres définis par OK_MONSTER et NO_MONSTER.

MAX_PODS = 90 MIN_MONSTERS = 1 -- Attaque dès qu'il y a au moins 1 monstre MAX_MONSTERS = 4 -- Ignore les groupes de plus de 4 monstres OK_MONSTER = {651} -- N'attaque que les groupes contenant le monstre 651 NO_MONSTER = {652, 800} -- Ignore les groupes contenant ces monstres function move() return { {map = "4,-18", changeMap = "right", fight = true}, {map = "5,-18", changeMap = "right", fight = true}, {map = "6,-18", changeMap = "bottom", fight = true}, {map = "6,-19", changeMap = "left"}, } end function bank() return { {map = "6,-19", changeMap = "right"}, {map = "6,-18", changeMap = "top"}, {map = "6,-17", changeMap = "left", custom = "deposer_banque"}, } end

Récolte ET combat combinés

Il est possible d'activer gather et fight sur la même carte. Le combat est lancé en premier, puis la récolte est effectuée une fois le combat terminé.

MAX_PODS = 85 ELEMENTS_TO_GATHER = {254} MIN_MONSTERS = 1 MAX_MONSTERS = 8 function move() return { {map = "4,-18", changeMap = "right", fight = true, gather = true}, {map = "5,-18", changeMap = "right", fight = true, gather = true}, {map = "6,-18", changeMap = "bottom"}, } end function bank() return { {map = "4,-18", changeMap = "left"}, {map = "3,-18", changeMap = "top", custom = "deposer_banque"}, } end

Action custom — fonction Lua personnalisée

Le champ custom permet d'appeler une fonction Lua définie dans le script. Elle est idéale pour les interactions avec les PNJ, l'utilisation d'un zaap, ou toute autre action non couverte par gather et fight.

MAX_PODS = 90 function deposer_banque() npc_Speak(50) -- Parler au PNJ banquier npc_Reply(2) -- Sélectionner "Déposer" storage_DropAll() -- Tout déposer npc_Close() -- Fermer le dialogue end function move() return { {map = "4,-18", changeMap = "right"}, {map = "5,-18", changeMap = "right"}, {map = "6,-18", changeMap = "bottom"}, } end function bank() return { {map = "4,-18", changeMap = "left"}, {map = "3,-18", changeMap = "top", custom = "deposer_banque"}, } end

Script complet — exemple réel

Voici un exemple complet et fonctionnel qui combine récolte, combat avec filtres, et retour en banque avec une fonction custom.

-- ============================================================ -- Configuration générale -- ============================================================ MAX_PODS = 85 ELEMENTS_TO_GATHER = {254, 426} MIN_MONSTERS = 1 MAX_MONSTERS = 4 OK_MONSTER = {651} NO_MONSTER = {652} -- ============================================================ -- Fonction custom appelée sur la carte de la banque -- ============================================================ function deposer_banque() npc_Speak(50) npc_Reply(2) storage_DropAll() npc_Close() end -- ============================================================ -- Boucle de déplacement principale -- Appelée quand les pods < MAX_PODS -- ============================================================ function move() return { {map = "4,-18", changeMap = "right", fight = true, gather = true}, {map = "5,-18", changeMap = "right", fight = true, gather = true}, {map = "6,-18", changeMap = "right", fight = true}, {map = "7,-18", changeMap = "bottom"}, {map = "7,-19", changeMap = "left", fight = true, gather = true}, {map = "6,-19", changeMap = "left", fight = true, gather = true}, {map = "5,-19", changeMap = "left", fight = true}, {map = "4,-19", changeMap = "top"}, } end -- ============================================================ -- Boucle de retour en banque -- Appelée quand les pods >= MAX_PODS -- ============================================================ function bank() return { {map = "4,-19", changeMap = "top"}, {map = "4,-18", changeMap = "left"}, {map = "3,-18", changeMap = "top", custom = "deposer_banque"}, } end

Erreurs communes

Message d'erreur Cause probable Solution
Variable MAX_PODS non trouvée MAX_PODS n'est pas déclaré Ajouter MAX_PODS = 90 en haut du script
Aucun script trouvé Aucun fichier Lua chargé pour ce personnage Uploader le script via l'interface OnlyBot
La fonction move() ne retourne pas un tableau valide La fonction move() ne contient pas de return { ... } Vérifier que move() retourne bien une table
DEPLACEMENT: Aucune correspondance trouvée La position actuelle du personnage ne correspond à aucune entrée de move() Vérifier les coordonnées ou MapIDs dans le script. Le bot retourne au Haven Bag en attendant.
MIN_MONSTERS doit être un nombre MIN_MONSTERS est déclaré avec un type incorrect Utiliser un entier : MIN_MONSTERS = 1
OK_MONSTER doit être une table OK_MONSTER est déclaré sans accolades Utiliser une table : OK_MONSTER = {651} et non OK_MONSTER = 651
attempt to call a nil value Une fonction appelée dans le script n'existe pas Vérifier l'orthographe des fonctions OnlyBot appelées