Arma 3 scripting pour les créateurs de missions

Vaste sujet ! Il s'agit ici de décrire de façon rapide les principales caractéristiques du développement de scripts afin de faire gagner du temps pour les premiers pas. Il s'adresse aux personnes qui disposent d'une culture générale en codage informatique ou aux développeurs confirmés qui débarquent dans le scripting Arma et dans le code des jeux en ligne plus généralement. On renverra à des ressources détaillées pour chaque rubrique.

Le blog de Shinriel tutojeu.fr contient pas mal de ressources intéressantes dans la catégorie Arma 3. Si vous voulez vous lancer, il faut d'abord vous équiper. Jetez un œil à l'article sur les outils pour scripter.

Pour exécuter du code, on peut (ou on doit selon les cas) :

  • S'appuyer sur de scripts particuliers exécutés lors du lancement de la mission (init.sqf, initServer.sqf, etc.). Attention, ces scripts sont exécutés dans un ordre spécifique et sur des localités différentes en fonction du type de jeu (single player, multiplayer).
  • Utiliser des événements propres à chaque objet, en particulier l'init de l'objet, qui est éxécuté une seule fois lors de la création de l'objet par la moteur de jeu
  • Utiliser des conditions en s'appuyant sur les déclencheurs (trigger) du jeu
  • Utiliser les événements prédéfinis dans le moteur de jeu
  • Utiliser des boucles qui s'exécutent de façon continue ou conditionnelle.
Dans un environnement distribué tel qu'un jeu en ligne, le code s'exécute de façon asynchrone. L'ordre d'exécution du code est géré par un moteur d'ordonnancement particulier (scheduler).

C'est un sujet clé et non trivial :-). Pour commencer, il faut savoir que le code est exécuté sur une des “localités” suivantes :

  • en local, c'est-à-dire sur un client (le PC d'un joueur donné) ou sur le serveur seulement
  • en local sur tous les clients
  • en global : sur tous les clients et le serveur.
  • Attention au cas particulier du Headless Client qui n'est ni un serveur, ni un client comme les autres

Un exemple concret : localité d'exécution des scripts d'initialisation d'une mission

  • init.sqf : exécuté chez tout le monde (clients et serveur).
  • initServer.sqf : exécuté uniquement sur le serveur
  • initClient.sqf : exécuté uniquement sur les clients (donc pas sur le serveur)

Pour aller plus loin : (en anglais) l'article sur la localité sur KK's Blog, le blog de Killzone Kid qui a biberonné pas mal d'entre nous.

Une variable peut être :

  • Privée : sa portée est limitée à la fonction qui l'utilise. Elle se déclare en utilisant un underscore avant le nom de la variable, par exemple _maVariablePrivee
  • Globale : partagée par tous les scripts sur le client local
  • Publique : partagée par tous les clients et le serveur

Pour aller plus loin…

Dans les pratiques habituelles de développement, on ne modifie pas une variable sans passer par une fonction (ou une classe, une méthode, etc.), sauf exception. En effet, la fonction contrôle le traitement de la variable pour éviter des modifications interdites (type de variable, casting, etc.), contrôle les appels et les modifications de valeur, etc. La doc complète https://community.bistudio.com/wiki/Variables#Public_Variables

Les scripteurs Arma ont (souvent) une pratique plus laxiste, du coup plus souple (mais potentiellement bordélique). Par exemple, il est possible d'affecter des groupes à GAIA de façon conditionnelle.

Du fait que les espaces (de nommage, localité, etc.) et les types sont complexes, il existe des fonctions dédiées à la manipulation des variables : setVariable et getVariable.

Pour aller plus loin…

Une variable (ou une fonction) est disponible dans un espace de nommage donné. Par exemple, la mission a un espace de nommage dédié (missionNameSpace). Idem pour le profil d'un utilisateur (profileNamespace).

A compléter !

Pour aller plus loin…

En cours de mission (en appuyant sur la touche Echap) ou en cours d'édition de mission via l'éditeur de mission Eden (Ctrl+D), on accède à la console de débogage. Attention, les droits d'accès à la console durant la mission se paramètrent via Eden par le menu Attributs → Général, onglet Etats.

La console permet diverses choses, en particulier d'exécuter du code à la volée et de surveiller jusqu'à 4 variables.

Des messages de débogage peuvent être affiché via la commande systemChat. Un outre, un journal d'exécution est disponible sur chaque PC (fichier rpt)

Pour aller plus loin : un article plus complet sur tutojeu.fr

  • arma_3/createurs_de_missions/tips_en_tout_genre.txt
  • Dernière modification : 2020/04/03 12:57
  • de tanin69