map — Carte & Déplacement¶
API carte et déplacement MoonBot Lua : se déplacer, changer de map, pathfinding, zaaps, cellules.
48 fonctions dans ce namespace.
Index¶
map.currentMapmap.currentMapId / idmap.x / ymap.dimensions / width / heightmap.currentCell / cellIdmap.currentArea / currentSubAreamap.onMapmap.changeMapmap.moveToCellmap.gathermap.gatherResourcemap.fightmap.moveTowardmap.moveTowardMapmap.worldDistancemap.waitForMapChangemap.monsterGroupsmap.fightGroupmap.playersmap.npcsmap.getActors / getActorByIdmap.getResourcesmap.interactiveObjectsmap.useInteractiveLimites des interactifs generiquesmap.isWalkable / getWalkableCellsmap.getX / getYmap.hasChangedmap.openZaap / openZaapimap.useZaap / useZaapiSequence zaap recommandeemap.getZaapDestinationsmap.saveZaapmap.sendEmote / sitDeplacement et combat — aliasesInformations de zone et distanceUtilitaires de carteGroupe de jeumap.getPendingGroupInvitemap.waitForGroupInviteInfos groupe de jeuDefis entre joueursmap.aggressPlayermap.getPendingChallengemap.waitForChallengemap.joinableFightsmap.joinFightmap.exchangePlayer
Référence¶
map.currentMap¶
returns string
Coordonnees "x,y".
map.currentMapId / id¶
returns number
ID de la map.
map.x / y¶
returns number
Coordonnees x et y.
map.dimensions / width / height¶
returns table {width, height} / number / number
Dimensions de la map actuelle. dimensions() renvoie une table {width, height}. width()/height() renvoient directement le nombre. Standard Retro = 15x17, mais les maps non-standard sont gerees (valeurs lues depuis le SWF).
map.currentCell / cellId¶
returns number
Cellule actuelle.
map.currentArea / currentSubArea¶
returns string
Zone et sous-zone.
map.onMap¶
returns boolean
Verifie si sur la map ("x,y" ou ID).
map.changeMap¶
blocking · returns boolean
Change de map : "right", "left", "top", "bottom".
map.moveToCell¶
blocking · returns boolean
Deplace vers une cellule (attend l'arrivee).
map.gather¶
blocking · returns boolean
Recolte toutes les ressources.
map.gatherResource¶
blocking · returns boolean
Recolte la ressource de la cellule cible avec le sequenceur dedie (portee de l'outil, approche et confirmation serveur). Retourne true uniquement apres confirmation de la recolte ; false si la ressource est indisponible, refusee ou si aucune confirmation n'arrive sous 30 s.
map.fight¶
blocking · returns boolean
Attaque le groupe de monstres le plus proche.
map.moveToward¶
blocking · returns boolean
Un pas de map vers les coordonnees cibles.
map.moveTowardMap¶
blocking · returns boolean
Un pas de map vers la map cible.
map.worldDistance¶
returns number
Distance en maps vers les coordonnees (-1 si inaccessible).
map.waitForMapChange¶
blocking · returns boolean
Attend un changement de map.
map.monsterGroups¶
returns table of {id: number, cellId: number, name: string, level: number, count: number, monsters: table of {id: number, name: string, level: number}}
Groupes de monstres sur la map. name = noms des monstres, level = niveau du groupe, count = nombre de monstres, monsters = détail de chaque monstre (template ID, nom, niveau individuel).
map.fightGroup¶
blocking · returns boolean
Attaque un groupe de monstres spécifique par son ID (récupéré via map.monsterGroups()). Bloquant : attend la fin du combat. Retourne true si victoire, false si défaite ou groupe introuvable.
map.players¶
returns table of {id: number, cellId: number, name: string, level: number}
Joueurs visibles sur la map.
map.npcs¶
returns table of {id: number, cellId: number, name: string, templateId: number}
PNJ sur la map. id = ID acteur, templateId = ID du modele PNJ.
map.getActors / getActorById¶
returns table / table | nil
Tous les acteurs (monstres + joueurs + PNJ) : {id, cellId, name, type}. type = 'monster'/'player'/'npc'.
map.getResources¶
returns table of {cellId: number, gfxId: number, name: string}
Ressources recoltables sur la map.
map.interactiveObjects¶
returns table of {cellId: number, gfxId: number}
Objets interactifs (ateliers, portes, etc).
map.useInteractive¶
blocking · returns boolean
Utilise un objet interactif avec deplacement automatique. Le trajet cible la cellule exacte de l'objet ; le serveur peut confirmer un arret sur une cellule adjacente valide. skillIndex: 1=premier skill (defaut), 2=deuxieme, etc. Pour une recolte, utiliser de preference map.gatherResource(). Pour un menu (zaap, atelier, porte, enclos), l'action peut reussir sans evenement GatherComplete : le boolean generique ne confirme donc pas toujours l'ouverture et peut retourner false apres une attente allant jusqu'a 30 s. Preferer l'API specialisee lorsqu'elle existe.
Limites des interactifs generiques¶
Les objets ordinaires (zaaps, zaapis, ateliers, portes, coffres et enclos simples) partagent le meme pathfinding officiel. Les maisons ou enclos qui exigent un troisieme parametre instanceId ne sont pas pris en charge par l'API Lua generique ; utiliser le bouton Client natif pour ces variantes.
map.isWalkable / getWalkableCells¶
returns boolean / table
Verifie si une cellule est marchable / liste des cellules marchables.
map.getX / getY¶
returns number
Coordonnees d'une map depuis son ID (game data).
map.hasChanged¶
returns boolean
True si la map a change. Se remet a false automatiquement.
map.openZaap / openZaapi¶
blocking · returns boolean
Approche le zaap/zaapi avec le pathfinding officiel, ouvre son menu et attend la liste des destinations. Retourne true quand la liste est recue, false si aucune liste n'arrive sous 10 s.
map.useZaap / useZaapi¶
blocking · returns boolean
Selectionne une destination dans le menu deja ouvert (WU pour un zaap, Wu pour un zaapi) et attend le changement de carte. Ces fonctions n'approchent pas de l'objet et ne l'ouvrent pas : appeler openZaap()/openZaapi() juste avant. En cas de timeout de 10 s, useZaapi() retourne false tandis que useZaap() leve actuellement une erreur Lua ; utiliser pcall pour un script tolerant aux echecs.
Sequence zaap recommandee¶
if not map.openZaap() then return false end
local ok, result = pcall(map.useZaap, mapId)
return ok and result == true
blocking · returns boolean
Enchainement autonome et tolerant aux echecs recommande. Pour un zaapi, utiliser openZaapi() puis useZaapi(mapId).
map.getZaapDestinations¶
returns table of {map_id: number, cost: number, name: string, area: string, x: number, y: number}
Liste des destinations disponibles apres openZaap() ou openZaapi().
map.saveZaap¶
Sauvegarde le zaap actuel.
map.sendEmote / sit¶
Envoie une emote. sit() = emote 1.
Deplacement et combat — aliases¶
returns boolean
moveTo est un alias de moveToCell. Les fonctions tryFight ne lancent le combat que si le groupe cible est toujours present.
Informations de zone et distance¶
returns table / number / number
zoneInfo decrit la zone courante et worldDistanceToMap calcule une distance de monde. neighbourId est un stub historique et retourne 0.
Utilitaires de carte¶
returns boolean
Ferme l'interface zaap/zaapi ou envoie l'emote texte historique de slap.
Groupe de jeu¶
returns boolean
Inviter un joueur au groupe, quitter, accepter/refuser l'invitation en attente. acceptGroupInvite et declineGroupInvite retournent true seulement si une invitation etait reellement en attente ; sinon rien n'est envoye et le retour est false.
map.getPendingGroupInvite¶
returns inviterId: number, inviterName: string | nil
Invitation de groupe recue et pas encore traitee. Retourne 0, nil s'il n'y en a pas. Le paquet du jeu ne porte que des noms : inviterId vaut l'ID du joueur s'il est visible sur la map courante, sinon -1 (l'invitation est bien en attente, testez ~= 0). Les invitations traitees automatiquement (chef de groupe MoonBot, mode prive) ne sont pas exposees. L'invitation disparait quand elle est acceptee/refusee, quand le bot rejoint un groupe ou quand l'inviteur l'annule.
map.waitForGroupInvite¶
blocking · returns inviterId: number, inviterName: string | nil
Attend une invitation de groupe (retour immediat si une est deja en attente). Retourne 0, nil au bout du timeout (defaut 60000 ms). Exemple : local id, name = map.waitForGroupInvite(30000) if id ~= 0 then delay(math.random(1500, 4000)) map.declineGroupInvite() end
Infos groupe de jeu¶
returns table / number / boolean / number / boolean
getPartyMembers()→table of {id: number, name: string, class_id: number, sex: boolean, level: number, life_percent: number}. getPartyCount()→number. isInParty()→boolean. getPartyLeaderId()→number. isPartyLeader()→boolean.
Defis entre joueurs¶
returns boolean
Proposer un defi amical, accepter/refuser le defi en attente, annuler son propre defi. acceptChallenge et declineChallenge visent le defi en attente (id optionnel pour ne repondre qu'a ce joueur) et retournent true seulement si un defi etait reellement en attente ; sinon rien n'est envoye et le retour est false.
map.aggressPlayer¶
returns boolean
Demande une agression PvP contre un autre joueur visible sur la carte courante. target est son ID positif ou son nom exact (sans distinction de casse). L'appel Lua lance directement la demande ; le bouton de la MapViewer demande une confirmation. Retourne false si la cible ou l'action est indisponible, true si la commande est mise en file (le serveur peut encore la refuser). Les restrictions d'agression, l'etat du personnage et la presence de la cible sont reverifies avant envoi ; une commande devenue perimee lors d'un changement de carte est abandonnee. Exemple : local queued = map.aggressPlayer(123456). Accepte aussi map:aggressPlayer(target).
map.getPendingChallenge¶
returns challengerId: number, challengerName: string | nil
Defi PvP recu et pas encore traite. Retourne 0, nil s'il n'y en a pas. Le defi disparait quand il est accepte/refuse/annule, au changement de map et au debut d'un combat. En mode prive le defi est refuse automatiquement et n'est pas expose.
map.waitForChallenge¶
blocking · returns challengerId: number, challengerName: string | nil
Attend un defi PvP (retour immediat si un defi est deja en attente). Retourne 0, nil au bout du timeout (defaut 60000 ms). Exemple : local id, name = map.waitForChallenge(30000) if id ~= 0 then delay(math.random(2000, 5000)) map.declineChallenge(id) end
map.joinableFights¶
returns table of {fightId: number, teamId: number, fighters: table of {id: number, name: string, level: number}}
Liste les combats joignables visibles sur la map (1 entree par equipe, teamId negatif). fightId est synthetique : plus petit |teamId| de la paire (les 2 equipes d'un meme combat partagent le meme fightId).
map.joinFight¶
returns boolean
Rejoint une equipe d'un combat en cours sur la map. teamId vient de joinableFights() (ex: -862).
map.exchangePlayer¶
Demande un echange avec un joueur.