Français Apprendre le SQF

I'm the Boss

Admin
2/1/20
516
2
43
1 100
Bonjour à tous,

Ces quelques paragraphes que j'ai écris n'ont pas été écrits par The-Programmer. (non officiel)
Voyez ça comme un petit tutoriel pour vous introduire le (fabuleux) langage SQF.

alt text


👔 Introduction:

Le langage de programmation utilisé sur Arma 3 est le SQF (Status Quo Function).

Le SQF est un cousin éloigné de langages très connus tels que le PHP, C, etc...

Mais le SQF est un langage procédural, ce qui signifie qu'il s’exécute de haut en bas, ligne par ligne, instruction après instruction. C'est une notion que vous devez garder en tête.

Chaque instruction en SQF doit se terminer par un ; (point virgule).

Gardez en tête que le SQF est très puissant s'il est bien utilisé.

👔 Chapitre 1: Les variables

Avant de vous amuser dans la console de débug à détruire tous les bâtiments de Kavala, nous allons voir ensemble ce que sont les variables.

C'est moins drôle, mais c'est indispensable dans n'importe quel langage de programmation. Quand vous serez à l'aise avec les variables, promis, on cassera tout.

Une variable est un contenant.
Ce contenant peut être, une citation de Molière donc une chaine de caractère, un nombre, une voiture donc un objet, à peu près tout ce que vous voulez.

Votre ordinateur ne sait pas faire la différence entre une citation, un nombre et une voiture.
C'est pour ça qu'il existe plusieurs type de variables, voici les types de variables que l'on utilise souvent sur Arma 3.

S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Par exemple, la citation de Molière est une chaîne de caractère, comme ceci :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
Jean-Michel: oula rK je suis perdu c'est quoi ce _maCitation suivi d'un = (signe égal) ?

Je viens tout simplement de créer une variable locale nommée _maCitation, puis je lui ai assignée une chaîne de caractères avec le signe =.

D'autres exemples :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Si vous avez suivi, vous devez être capable de deviner les types des 3 premières variables que j'ai crée juste au dessus.

La dernière variable _estMajeur est un booléen, ce qui signifie qu'elle ne peut contenir que true OU false.
True veut dire Vrai.
False veut dire Faux.

Il ne reste plus que les tableaux, nous aborderons ce sujet plus tard dans le cours, retenez simplement que les tableaux peuvent contenir plusieurs variables et qu'ils commencent toujours par [ (crochet ouvrant) et finissent par ] (crochet fermant).

👔 Chapitre 2: Les commentaires

Figurez vous qu'il y a des bons et des mauvais développeurs, les bons développeurs commentent toujours leur code.

Les commentaires sont très utiles pour savoir où vous en êtes, croyez moi, après avoir écrit 300 lignes de code dans différents fichiers, vous serez bien contents de trouver un commentaire qui vous explique ce qu'il se passe.

Jean-Michel: c'est quoi un commentaire ? c'est comme Thierry Girard qui hurle "Vas y mon petit !" ?

Un commentaire, c'est très simplement une séquence de caractère qui est ignoré par le compilateur, donc non exécutée.

S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Par exemple ici, tout ce qui suivra // sur la même ligne, sera ignoré.
Également, tout ce qui se trouvera entre */ *et * / * sera ignoré.

Voici un bout de code qui reprend tout ce que l'on vient de voir :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

A la création d'un nouveau fichier, prenez la bonne habitude de mettre un en-tête commenté.

Ceci permet rapidement à tout le monde de s'y retrouver.

Comme ceci :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

👔 Chapitre 3.1: Les opérateurs Arithmetiques

Les opérateurs arithmetiques sont des signes mathématiques qui permettent d'effectuer des opérations spécifiques.
Je suppose que vous connaissez tous l'addition, la soustraction, la multiplication et la division. Et bien c'est ça.

Codons quelques exemples simples :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
Remarquez que seules les variables qui sont des nombres (integer) peuvent être utilisées dans un calcul.
Par exemple, ceci ne fonctionnera pas et créera une erreur :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

👔 Chapitre 3.2: Les opérateurs Logiques

Les opérateurs logiques évaluent des booléens. Ils servent à vérifier si une variable, ou un calcul, est vrai ou faux.

Un exemple écrit :
"SI le nombre de voitures que je possède est SUPÉRIEUR à 5, alors la condition est vérifiée, donc vraie."

Le même exemple transformé en code :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Si la variable _nombreVoitureJoueur est supérieure à _nombreVoitureMax , alors le hint sera affiché.

Par contre si la variable _nombreVoitureJoueur est inférieure ou égale à _nombreVoitureMax , alors le hint ne sera pas affiché.

Le hint est une fonction native d'Arma qui permet d'afficher un message en haut à droite, dans un carré noir :
alt text


👔 Test en ligne n°1

Pour être sûr d'avoir tout compris, je vous invite à répondre au questionnaire en cliquant sur le lien ci-dessous.

Rassurez vous, il reprend tout ce qu'on vient de voir.

Bonne chance !

S’il vous plaît, Connexion ou S'inscrire pour voir le lien !


👔 Chapitre 4: Les conditions

Les conditions sont utiles pour tester la valeur d'une variable. Elles évaluent aussi des booléens. Elles renvoient toujours true ou false.

Par exemple, on peut vérifier si le joueur est majeur grâce à son âge.
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

On peut aussi vérifier la richesse du joueur :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
Évidemment, si le joueur a 15 ans et qu'il a 50€ en poche, aucun message ne sera affiché.

Allons un peu plus loin...
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Oula, qu'est-ce qu'on vient de faire ? Rien de compliqué rassurez vous.

Nous avons simplement vérifié la valeur de la variable _genre, si elle est égale à "Male", alors on affiche un message pour un homme.
Le else signifie sinon, donc si ce n'est pas un homme, on affiche un message pour une femme.

Je pourrais continuer à vous parler des boucles, des différents types de conditions, des macros, des relations clients/serveur.

Toutefois je pense que le meilleur moyen pour vous d'apprendre et de commencer à faire les choses par vous même, c'est d'essayer, par des petits travaux, évidemment je suis là pour répondre à vos questions.
Tentez, faîtes des scripts dans la console de débug, intéressez-vous et surtout amusez-vous.

Ne vous voilez pas la face, la plupart des personnes non initiées à la programmation pensent que les développeurs écrivent leur code comme ils parlent le français, c'est absolument faux.
Quand j'écris un nouveau script, le plus long c'est de le tester et de le débug (corriger les erreurs), car vous avez beau vous relire, l'ordinateur est plus intelligent que vous et il vous trouvera toujours quelque chose qui ne va pas.
Donc pas d'inquiétude, vous avez des erreurs ? Réparez les.

Bref j'ai pensais que c'est important de préciser tout ça.

👔 Chapitre 5: Les tableaux

Enfin, nous y sommes ! A nos tableaux !

Comme je l'ai dis dans un chapitre précédent, les tableaux peuvent contenir plusieurs variables et ils commencent toujours par [ et finissent par ]. En anglais, on parle d'array.
Dorénavant je n'utiliserai plus le mot tableau mais le mot array.

D'ailleurs nous allons immédiatement prendre l'habitude de tout rédiger en anglais pour une meilleur lisibilité.
😭 N'ECRIVEZ JAMAIS DE CODE EN FRANÇAIS, OU PIRE, EN FRANGLAIS !

Let's go !

Voici un array vide.
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Voici un array vide dans un array.
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Comme vous le voyez, il n'y a pas de limite ! On peut créer un array dans un array, et ainsi de suite.
Bon, techniquement, un array peut comporter au maximum 9 999 999 éléments. On a de la marge. Tous les éléments sont séparés par des virgules, c'est obligatoire pour les délimiter.

Jean-Michel: Dis moi rk, t'es bien gentil avec tes array vides, mais à quoi ça sert ? Comment ça fonctionne ?

Imaginons l'array suivant :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
On a donc un array qui contient 3 nombres, 50, 20 et 130.

50, 20 et 130 sont des éléments.
Chaque élément à un index qui permet de connaître sa position dans l'array.
L'index commence toujours à partir de 0. Car oui en informatique on compte à partir de 0.
  • 50 à l'index 0
  • 20 à l'index 1
  • 130 à l'index 2

Voici comment utiliser ces index :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
Ma variable _index0 est donc égale à 50.
Ma variable _index1 est donc égale à 20.
Ma variable _index2 est donc égale à 130.

Je peux donc tout à fait utiliser ces variables pour faire des calculs :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Dans le cas de plusieurs array dans un array, le fonctionnement des index est le même :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Je vous recommande très fortement de tester ces commandes dans la console de débug ! Amusez-vous, faîtes des calculs avec des array !

Chapitre 6: Premier exercice

Nous allons enfin pouvoir procéder à la destruction complète des bâtiments autours de nous !
Évidemment ce n'est qu'un exercice, donc on les réparera aussi par la suite ! (nous sommes des gens biens)

Voici comment je procède lorsque je crée un script :

  • Mon objectif ? Détruire les bâtiments autours de moi.
  • Ok, mais combien de bâtiments ? Disons tous les bâtiments qui se situent à 50m maximum de mon joueur.
  • De quoi ai-je besoin pour tout casser ? J'ai besoin d'un array qui contient les bâtiments à détruire.

Première chose : classer toutes les maisons autours de nous dans une variable. Nous allons utiliser la fonction toute prête de Bohemia 😅 :
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !


Cette commande :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
permet de récupérer toutes les maisons autours du joueur dans un rayon de 50 mètres et de les classer dans un array.

Maintenant nous avons besoin de deux nouvelles fonctions.
La fonction forEach (
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !
)
et la fonction setDamage (
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !
)

La fonction forEach permet d'effectuer la même action pour tous les éléments d'un tableau. forEach veut dire pour chaque éléments du tableau.
La fonction setDamage permet d'appliquer ou d'enlever des dommages à un objet.

Voyons ce que ça donne :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Jean-Michel: Oulala, qu'est-ce que c'est que ce _x ?

_x est une variable magique qui n'existe que dans la fonction forEach, cette variable magique est égale à l'élément actuellement traité par le forEach.

La fonction forEach parcoure tous les éléments d'un tableau et exécute pour chacun les instructions données.

Par exemple, imaginons qu'il y est 3 maisons dans notre variable _houses.

S’il vous plaît, Connexion ou S'inscrire pour voir le code !

La fonction forEach va passer 3 foi**s dans la boucle étant donné qu'il y a **3 éléments (maisons).
La 1ere fois _x sera égale à house1
La 2eme fois _x sera égale à house2
La 3eme fois _x sera égale à house3

Vous avez compris ? Cela donne :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Évidemment, tout ceci se passe en une fraction de seconde, nous n'avons pas le temps de cligner l’œil que le moteur à déjà parcouru tous les éléments du tableau et détruit toutes les maisons !

Jean-Michel: Et pour réparer les maisons, je fais comment ?

Eh bien, en regardant le fonctionnement de la fonction setDamage, on voit que l'on peut détruire, mais aussi réparer des objets, dans ce cas il faut transformer le 1 en 0 !
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Je vous invite à tester les bouts de code ci-dessus dans votre console de débug, cela risque de provoquer quelques lags, car 50 bâtiments qui s’effondrent en même temps ce n'est pas commun !

Donnez moi votre avis sur la formation lorsque vous avez un peu de temps !

👔 Chapitre 7: Les fonctions

Tout d'abord, qu'est-ce qu'une fonction ?

Une fonction, c'est plusieurs lignes de code qui font toujours la même chose, mais jamais avec les même paramètres.

C'est comme une recette de cuisine où les ingrédients changent tout le temps, mais le plat final est toujours le même.

Je suis sûr que vous avez déjà vu dans vos scripts d'Altis Life, ce fameux life_fnc, ce sont les fonctions propre à Altis Life.

Par exemple, au lieu de faire un script qui permet de téléporter un joueur qui s'appelle Jean-Michel à un joueur qui s'appelle Zidane, je fais un script qui permet de téléporter n'importe quel joueur à n'importe quel autre joueur.

Voici comment on appelle (exécute) une fonction :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
Voici le contenu de myFunction :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !
A chaque fois que je vais appeler (exécuter) myFunction, le hint s'affichera, magique non ?

Un exemple, créons une fonction life_fnc_addition :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Nous allons pouvoir utiliser cette fonction pour effectuer des additions.
Comme vous le voyez au début du script, on se sert de la fonction select, pour récupérer les nombres à additionner.

Pour appeler la fonction on utilise toujours call, mais cette fois on ajoute nos paramètres pour les envoyer à la fonction.
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

La fonction va récupérer ces nombres, les additionner, et vous afficher le résultat !

On récapitule :
S’il vous plaît, Connexion ou S'inscrire pour voir le code !

S’il vous plaît, Connexion ou S'inscrire pour voir le code !

Changez les paramètres, essayez !

Je n'ai pas encore écris la suite, mais vous avez ici une bonne base pour commencer. Je suis disponible pour répondre à vos questions, pour vous assister, n'hésitez pas !

La suite sera postée un jour ! 🖐
 

Bugz

User
29/12/19
98
4
6
950
Avignon, Vaucluse, France
Bonjour, du coup si je voudrais créer un script permettant de modifier et choisir les chiffres/lettres qui composerai la plaque d’immatriculation de ma voiture je devrais commencer comment (oui c'est un peux complexe) (et sans utiliser le System de plaque de chez The programmer) ou déjà faire un script permettant que si on paye 150 euro la barrière s'ouvre
 
Dernière édition:

Maxence

Admin
Membre du personnel
Pour générer des lettres ou des chiffres aléatoirement, il faudra utiliser un
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !
, pour choisir une valeur dans la
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !
et ensuite convertir ce nombre pour avoir une lettre avec un
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !

Pour la barrière, commence par trouver comment ouvrir la barrière, le reste du script n'est pas compliqué, il suffira de modifier la variable : life_atmbank
 
20/4/20
53
1
300
Super formation très instructive, qui abat les préjugés sur le sqf !
A quand la suite ? ;)
 

3rk

TP-Shop Team
Developer
29/12/19
41
3
14
300
Bonjour, du coup si je voudrais créer un script permettant de modifier et choisir les chiffres/lettres qui composerai la plaque d’immatriculation de ma voiture je devrais commencer comment (oui c'est un peux complexe) (et sans utiliser le System de plaque de chez The programmer) ou déjà faire un script permettant que si on paye 150 euro la barrière s'ouvre

Bonjour,

Maxence t'a donné un bon moyen d'y arriver, je me permet de compléter son instruction en détaillant un peu plus.

Sur cette page,
S’il vous plaît, Connexion ou S'inscrire pour voir le lien !
, les colonnes qui nous intéressent sont décimal et char.
On peut observer que chaque char correspond à un chiffre en décimal.

Les chiffres de 0 à 9, ont un index qui va de 48 à 57.
Les lettres de A à Z ont un index qui va de 65 à 90.

Pour tirer un chiffre au hasard, il suffit de tirer un index aléatoire entre 48 et 57 avec la fonction random.
Et pour une lettre, il suffit de tirer un index aléatoire entre 65 et 90 avec la fonction random.

Puis il reste à transformer cet index avec la fonction toString pour récupérer notre chiffre ou notre lettre.

Pour les barrières, je pense qu'il faut ajouter une action à la barrière, qui appellera un script pour vérifier si le joueur peut ouvrir la barrière ou non.

Super formation très instructive, qui abat les préjugés sur le sqf !
A quand la suite ? ;)

Merci ! Je ne sais pas quand est-ce que je vais l'écrire, mais ça viendra ! :D
 
Dernière édition:
Activité
Pour l'instant, il n'y a personne ici