📝 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
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.). |
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 |