Démonstration

Base de l'exercice

Maintenant que nous avons terminé toute la partie précédente sur comment se construit un script, sur comment il est lu et comment SnowBot réagit, je vais te faire une petite démonstration.

Pour cet exercice, nous allons cibler la Forêt d'Astrub, et faire en sorte que notre personnage tape des monstres de la forêt et revienne à la Banque d'Astrub pour vider son inventaire dans son coffre lorsqu'il est plein.

Si on traduit cela dans le script :

  • Le fonction move() contiendra les déplacements vers et dans la Forêt d'Astrub

  • La fonction bank() contiendra les déplacements de la Forêt d'Astrub vers la banque

  • On part du principe pour cet exemple que notre bot est immortel (rappelles-toi, tu as eu des super-pouvoirs lors de ton arrivée sur mon wiki !), donc il n'y aura pas de fonction phenix().

Voici la zone ciblée :

Notre zone de démonstration

Nous allons commencer avec une base de script vierge :

Pour rappel, voilà à quoi notre script ressemble pour le moment :

-- DEMONSTRATION
function move()
return {
}
end
function bank()
return {
}
end
--[[
function phenix()
return {}
end
Nous ne l'utiliserons pas pour cet exemple
]]

Première étape de notre script, nous allons remplir notre fonction move(), l'objectif est de se déplacer de la Banque d'Astrub, vers la Forêt d'Astrub et y faire une boucle.

Fonction move()

Pour faciliter la compréhension de cet exercice, voici une modélisation de ce que nous cherchons à faire :

Les flèches noires représentent le déplacement du personnage indiqué dans la fonction move().

Voici donc à quoi notre script ressemble, en ayant indiqué chaque déplacement sur chacune des cartes de notre script :

Déplacements

-- DEMONSTRATION
function move()
return {
{map = "4,-18", path = "left"},
{map = "3,-18", path = "left"},
{map = "2,-18", path = "left"},
{map = "1,-18", path = "left"},
{map = "0,-18", path = "left"},
{map = "-1,-18", path = "top"},
{map = "-1,-19", path = "top"},
{map = "-1,-20", path = "left"},
{map = "-2,-20", path = "left"},
{map = "-3,-20", path = "bottom"},
{map = "-3,-19", path = "bottom"},
{map = "-3,-18", path = "bottom"},
{map = "-3,-17", path = "bottom"},
{map = "-3,-16", path = "right"},
{map = "-2,-16", path = "right"},
{map = "-1,-16", path = "top"},
{map = "-1,-17", path = "top"},
}
end
function bank()
return {
}
end

Très bien, mais il manque un élément dans notre script ! En effet, si nous regardons bien les lignes que nous avons ajouté à notre fonction move, c'est que notre personnage ne fera que des déplacements, aucun combat... De quoi avoir le tournis ! On ajoute donc la mention vue précédemment dans :

Combats

Les flèches rouges représentent là où le personnage doit combattre des monstres.

Voici le résultat dans notre script après avoir ajouté "fight = true" sur les cartes où nous souhaitions que notre personnage engage des combats :

-- DEMONSTRATION
function move()
return {
{map = "4,-18", path = "left"},
{map = "3,-18", path = "left"},
{map = "2,-18", path = "left"},
{map = "1,-18", path = "left"},
{map = "0,-18", path = "left"},
{map = "-1,-18", path = "top", fight = true},
{map = "-1,-19", path = "top", fight = true},
{map = "-1,-20", path = "left", fight = true},
{map = "-2,-20", path = "left", fight = true},
{map = "-3,-20", path = "bottom", fight = true},
{map = "-3,-19", path = "bottom", fight = true},
{map = "-3,-18", path = "bottom", fight = true},
{map = "-3,-17", path = "bottom", fight = true},
{map = "-3,-16", path = "right", fight = true},
{map = "-2,-16", path = "right", fight = true},
{map = "-1,-16", path = "top", fight = true},
{map = "-1,-17", path = "top", fight = true},
}
end
function bank()
return {
}
end

Notre fonction move() est fin prête ! Mais nous allons rencontrer un problème lorsque son inventaire sera plein : il s'arrêtera car nous n'avons pas configurer notre fonction bank(). Aller, c'est parti !

Fonction bank()

Déplacements

Voici ce à quoi doit ressembler notre retour en banque :

Les flèches bleues représentent le déplacement vers la banque depuis la fonction bank().

Ce qui nous donne :

-- DEMONSTRATION
function move()
return {
}
end
function bank()
return {
{map = "-3,-18", path = "right"},
{map = "-3,-19", path = "right"},
{map = "-3,-20", path = "right"},
{map = "-3,-17", path = "right"},
{map = "-3,-16", path = "right"},
{map = "-2,-16", path = "right"},
{map = "-2,-17", path = "right"},
{map = "-2,-18", path = "right"},
{map = "-2,-19", path = "right"},
{map = "-2,-20", path = "right"},
{map = "-1,-20", path = "right"},
{map = "-1,-19", path = "right"},
{map = "-1,-18", path = "right"},
{map = "-1,-17", path = "right"},
{map = "-1,-16", path = "right"},
{map = "0,-16", path = "top"},
{map = "0,-17", path = "top"},
{map = "0,-20", path = "bottom"},
{map = "0,-19", path = "bottom"},
{map = "0,-18", path = "right"},
{map = "1,-18", path = "right"},
{map = "2,-18", path = "right"},
{map = "3,-18", path = "right"},
}
end

Et voilà le travail ! Mais nous allons rencontrer un nouveau problème... Là, notre personnage s'arrêtera devant la banque car il s'agit d'une porte !

"LA PORTE !" - Toi

Mais pas d'inquiétude, il y a une solution à tout. Pour ce faire, nous allons récupérer l'identifiant de la carte de l'extérieur de la Banque d'Astrub à l'aide de notre carte interactive depuis le logiciel SnowBot. (spoiler : 191104002) et celui de l'intérieur (spoiler : 192415750).

Si nous faisons cela, en récupérant l'identifiant de la carte (que l'on appelle plus communément "mapID") c'est parce que nous ne pouvons pas indiquer deux fois la même position de cartes, alors que l'intérieur de la banque et l'extérieur ont la même position : [4,-18]. Nous allons donc utiliser les mapID de l'intérieur et de l'extérieur qui eux sont différents.

Nous allons donc ajouter ces deux cartes à notre fonction move(). Mais nous ne pourrons pas utiliser les déplacements classiques avec path, car pour entrer dans la banque il faut passer par la porte.

On récupère donc l'identifiant de la cellule de la porte (il s'agit d'un carré bleu sur la carte interactive de SnowBot) que l'on utilisera avec door. En ce qui concerne l'intérieur de la banque, nous allons utiliser la fonctionnalité npcBank = true que nous avons vu ensemble au chapitre :

Puis nous allons récupérer la cellule du trigger de sortie de la banque comme nous l'avons vu dans le sous-chapitre sur les Déplacements Trigger, dans le chapitre :

function bank()
return {
{map = "-3,-18", path = "right"},
{map = "-3,-19", path = "right"},
{map = "-3,-20", path = "right"},
{map = "-3,-17", path = "right"},
{map = "-3,-16", path = "right"},
{map = "-2,-16", path = "right"},
{map = "-2,-17", path = "right"},
{map = "-2,-18", path = "right"},
{map = "-2,-19", path = "right"},
{map = "-2,-20", path = "right"},
{map = "-1,-20", path = "right"},
{map = "-1,-19", path = "right"},
{map = "-1,-18", path = "right"},
{map = "-1,-17", path = "right"},
{map = "-1,-16", path = "right"},
{map = "0,-16", path = "top"},
{map = "0,-17", path = "top"},
{map = "0,-20", path = "bottom"},
{map = "0,-19", path = "bottom"},
{map = "0,-18", path = "right"},
{map = "1,-18", path = "right"},
{map = "2,-18", path = "right"},
{map = "3,-18", path = "right"},
-- C'EST ICI QUE CA SE PASSE :
{map = "191104002", door = "261"}, -- Nous entrons dans la banque
{map = "192415750", npcBank = true, path = "409"}, -- Dépôt de l'inventaire et sortie de la banque
}
end

Résultat

Maintenant, que le retour en banque est fonctionnel, il ne nous reste plus qu'à assembler tout ça, qui nous donnera :

-- DEMONSTRATION
function move()
return {
{map = "4,-18", path = "left"},
{map = "3,-18", path = "left"},
{map = "2,-18", path = "left"},
{map = "1,-18", path = "left"},
{map = "0,-18", path = "left"},
{map = "-1,-18", path = "top", fight = true},
{map = "-1,-19", path = "top", fight = true},
{map = "-1,-20", path = "left", fight = true},
{map = "-2,-20", path = "left", fight = true},
{map = "-3,-20", path = "bottom", fight = true},
{map = "-3,-19", path = "bottom", fight = true},
{map = "-3,-18", path = "bottom", fight = true},
{map = "-3,-17", path = "bottom", fight = true},
{map = "-3,-16", path = "right", fight = true},
{map = "-2,-16", path = "right", fight = true},
{map = "-1,-16", path = "top", fight = true},
{map = "-1,-17", path = "top", fight = true},
}
end
function bank()
return {
{map = "-3,-18", path = "right"},
{map = "-3,-19", path = "right"},
{map = "-3,-20", path = "right"},
{map = "-3,-17", path = "right"},
{map = "-3,-16", path = "right"},
{map = "-2,-16", path = "right"},
{map = "-2,-17", path = "right"},
{map = "-2,-18", path = "right"},
{map = "-2,-19", path = "right"},
{map = "-2,-20", path = "right"},
{map = "-1,-20", path = "right"},
{map = "-1,-19", path = "right"},
{map = "-1,-18", path = "right"},
{map = "-1,-17", path = "right"},
{map = "-1,-16", path = "right"},
{map = "0,-16", path = "top"},
{map = "0,-17", path = "top"},
{map = "0,-20", path = "bottom"},
{map = "0,-19", path = "bottom"},
{map = "0,-18", path = "right"},
{map = "1,-18", path = "right"},
{map = "2,-18", path = "right"},
{map = "3,-18", path = "right"},
{map = "191104002", door = "261"}, -- Nous entrons dans la banque
{map = "192415750", npcBank = true, path = "409"}, -- Dépôt de l'inventaire et sortie de la banque
}
end

Et voilà le résultat, si on le visualise en jeu :

Notre script est terminé !

A partir de là, tu perds tes super-pouvoirs, tes personnages ne sont plus immortels, il faudra donc faire la fonction phenix ! Essayes de la réaliser pour ce script, ça te fera un bon entrainement !