Attention ! Ce chapitre est très important et il est nécessaire de le comprendre avant de poursuivre les cours.
Tout d’abord, les fonctions, c'est quoi ?
Les fonctions sont les commandes, les instructions qui permettent de dire à FRoG Creator de faire telle ou telle chose. C'est un langage donc vous permettant en quelque sorte de dialoguer avec le logiciel.
Il faut savoir que les fonctions sont souvent des expressions anglaises et le logiciel va en fait traduire les fonctions en langage informatique, afin que le programme puisse faire ce que vous lui demandez de faire.
C'est pourquoi nous rajoutons toujours plus de fonctions au fil des versions de FRoG Creator afin de permettre au logiciel de comprendre par des expressions anglaises plein de nouvelles commandes. Qui dit qu'un jour il n'existera pas une fonction givemecoffee(index)
( pour les non anglophones, cette phrase signifie "donne moi un café" en gros
).
Comme dans les sub, la propriété "Index" est toujours présente dans certaines fonctions. Cela veut dire que la fonction va effectuer une action sur le joueur qui l'enclenche. Vaut mieux car imaginez que la fonction "taper" cible toujours la même personne, le mec est mal
( et va avoir mal aussi ).
Ainsi, la présence de ce index va permettre, par exemple pour une fonction "taper" de taper uniquement la personne qui a lancé la fonction ( vous vous rappelez que les SUB sont en quelque sorte les conditions pour qu'une fonction se lance ).
Je vous rappelle que l'annexe 1 liste toutes les fonctions disponibles dans FRoG creator. Ainsi, pour composer un script, va falloir souvent passer par la rubrique Annexe 1, car avec le nombre de fonctions, il est impossible de toutes les connaître par coeur (sauf les plus utilisées).
Les fonctions sont complémentaires des variables. C'est à dire que pour composer des scripts utiles, va falloir combiner variables, fonctions et conditions (prochain chapitre).
Voyons dans un premier temps la structure d'une fonction :
Call PlayerWarp(index, num_map, X, Y)
Le premier mot, le "call" permet donc de lancer/appeler la fonction (pour vous souvenir, call = appeler en anglais).
Ensuite, comme pour les sub, nous voyons le nom de la fonction (ici, c'est playerwarp. Warp signifie en anglais "téléporter", donc vous en déduisez que cette fonction va téléporter le joueur).
Ensuite, entre parenthèses : « () », nous pouvons cerner plusieurs informations. Ce sont les
propriétés de la fonction qui doivent
à chaque fois être spécifiées.
Ici, nous retrouvons notre fameux "index". Laissez donc ce petit index tranquille (d’ailleurs nous ne changerons l'index que dans les scripts ultra compliqués, ce n'est pas encore de votre niveau alors oubliez cette propriété pour le moment, et laissez toujours index).
Ensuite, nous avons la propriété num_map. Nous devrons spécifier le numéro de la map ou le joueur sera téléporté.
Et de même avec les coordonnées X et Y de la map.
Remarquez que les propriétés sont séparées entre elles par une virgule.
Donc, pour téléporter un joueur, la fonction deviendra :
Call PlayerWarp(index, 10, 25, 25)
Cette fonction pourra se traduire en français par : "Je téléporte le joueur qui a lancé la fonction à la dixième map, aux coordonnées X=25 et Y=25".
Facile le scripting alors !
Hé hé, ce n'est pas très dur en effet, bien que l’on en reparlera au chapitre III tout de même

.
Mais il manque quelque chose à ce code pour qu'il marche : la condition pour lancer la commande "playerwarp".
Et pour spécifier ceci, il va falloir placer ce "call playerwarp" dans une case, comprise elle aussi dans une sub (et même un SELECT dans certains cas qui, lui, est inclus dans un SUB, vous vous rappelez de la structure du sub Commands ?). On pourra donc téléporter le joueur à une map précise dès qu'il mourra avec le sub "Ondeath", mais aussi téléporter le joueur quand il marchera sur une case spécifique avec le sub "ScriptedTile"( dans le select "Select Case Script") et même quand le joueur tapera quelque chose dans le tchat ( ce sera dans le sub "commands" et dans le "Select Case LCase(Trim(TextSay))" ). Les possibilités sont donc assez grandes, et dans l'exemple que nous allons voir, j'ai décidé (comme je suis un flemmard) de prendre le plus
dur (je rigole, relaxez vous, je vais prendre le plus facile

).
Nous allons donc téléporter une personne lorsqu’ella aura marché sur une case précise !
Cette case aura donc l'attribut "case script" 5 (cela se règle dans l'éditeur de map, niveau attributs, vous avec un attribut script il me semble, et vous pouvez choisir le numéro de la
case, pour ensuite l'appliquer a un endroit précis dans votre jeu.
Le mot "case" est assez délicat. En effet, nous pouvons discerner une case dans le jeu (vous l'avez remarqué, FRoG Creator fonctionne avec un quadrillage de cases pour le mapping ) mais aussi la case en scripting, qui elle est un EMPLACEMENT, un tiroir par exemple dans le cas d'une armoire (cette dernière, l’armoire je veux dire, sera donc un SUB).
Alors il va falloir se mettre dans le "Select Case Script" dans le "Sub ScriptedTile".
Ensuite, va falloir spécifier la case. Le code suivant est le script au complet.
Sub ScriptedTile(index, Script)
Select Case Script
Case 5
Call PlayerWarp(index, 10, 25, 25)
End Select
End Sub"
Normalement, dans le main.txt de frog, il existe déjà une case 0,1,2 et 3 il me semble. C'est pourquoi j'ai choisi une case 5 afin d'éviter les problèmes. A noter aussi que le End select et le End sub sont normalement déjà présent dans le Main.txt ( comme le sub scriptedtile et le select case script ). Donc il faudra juste rajouter le code
Case 5
Call PlayerWarp(index, 10, 25, 25)"
A noter que l'ordre des cases dans le main.txt n'est pas pris en compte. Ainsi vous pouvez avoir un
"Case 5
[fonction]
Case 2
[fonction]
Case 9
[fonction]"
cela marchera sans problème.
Voilà, le cours est presque terminé. J'ai encore un petit mot à vous dire.
Pour que vos scripts marchent, n'oubliez pas de vérifier que dans le Data.ini du dossier Server vous avez la ligne "Scripting=1". Si ce n'est pas le cas, mettez un 1 à la place du 0.
Je voulais aussi vous signaler qu'il existe principalement
2 familles de fonctions : les fonctions permettant de
stocker une valeur recueillie dans une variable et les fonctions permettant
d'agir sur le joueur (modifier les stats par exemple). Les premières sont caractérisées par leur nom
"GET" (= obtenir en anglais) et les secondes par leur nom
"SET" (= fixer en anglais).
"Z'ont de la luck" ces anglais hein ? A nous de leur prouver le contraire
en allant vers le deuxième TP 
.