CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Forum
  • Accueil
  • Actus
  • Tests
  • Vidéos
  • Images
  • Soluces
  • Forum
Liste des sujets

[Tuto]base de scripting

darkiron_2012
darkiron_2012
Niveau 10
02 octobre 2013 à 16:01:50

Voici une mini tuto de base pour faire des scripts.
:d) un scripts est un ensemble de commandes suivant une logique.
un script repose sur des conditions ou boucles.

Convention d'écriture :
'==' égale à.
'=' est.
'!=' différent de
'!' pas ou n'est pas.
'#' '//' commentaire.

Nous allons commencer par les conditions :
Si == if
le if sert à déterminer si la condition est vrai.
exemple vous avez une variable _player.
elle n'est pas défini dans notre script.
if(_player)
{#mon code ici ne sera pas éxécuté}
else
{#_player n'est pas définit
_player = joueur1;

  1. _player est définie.

}
si vous noter votre if de cette façon : if(!_player){}votre else (le sinon)ou votre else if(sinon si) devras être inverser :ok:
exemple vous voulez tester si votre joueur n'est pas en vie:
if(! alive _player){
hint "vous êtez mort!"; //on affichera le texte si alive retourne 0(false==faux)
}
voilà maintenant nous allons tester plusieurs conditions:
maintenant nous allons tester si le jouer est vivant et blessé.
noté bien le et il a son importance.
if(_player alive && _player damage != 0){
hint "le joueur est vivant mais blessé";
// la commande damage retourne une valeur entre 0 et 1 si damage retourne 1 le joueur est mort ou le véhicule est détruit.à 0 le jouer est en bonne santé.
}
Maintenant testons si le joueur est mort ou blessé.
if(!_player alive || _player damage != 0){
hint "ça sent le sapin";
}

voilà pour les conditions au prochain poste nous verrons les boucles :)

darkiron_2012
darkiron_2012
Niveau 10
02 octobre 2013 à 17:34:47

:d) la version sur mon blog pour le mise en forme plus claire :
http://blog.darkiron.fr/ttutoscripting-sous-arma-3.html

chal00
chal00
Niveau 10
02 octobre 2013 à 17:55:06

Ça sert a rien de créer un tuto APRES l'autre dont tu reprend l'idée :honte:
Au mieux complete l'autre, mais ça sert a rien de faire un doublon :honte:
:d) https://www.jeuxvideo.com/forums/1-26453-105658-1-0-1-0-tuto-comprendre-l-editeur.htm

darkiron_2012
darkiron_2012
Niveau 10
02 octobre 2013 à 18:14:59

C'est pas un doublon ! Chal00.
Oui, c'est ce topic qui ma donner l'idée.

:d) faire des topics unique à tous vas c'est juste bon à embrouiller les gens.
il faut être progressif chapitre par chapitre !

chal00
chal00
Niveau 10
02 octobre 2013 à 18:30:32

Le problème c'est qu'il faut surtout que les auteurs choisissent bien le titre en plus de la balise !
J'ai répondu dans un topic intitule "caisse de munitions", alors qu'en fait il voulait une zone de réarmement <=> impossible pour celui qui vient derrière de trouver l'info là, sauf par accident :sarcastic:

D'ailleurs du coup, je vais recréer le topic juste pour mettre le bon titre !

darkiron_2012
darkiron_2012
Niveau 10
02 octobre 2013 à 18:47:50

:d) sweet :cute:

Passons au boucles. Les boucles sont utile pour parcourir un tableau, une chaines de caractères, un fichiers.
:d) tant que == while do
la boucle while est la plus simple
à chaque teste de condition tant que la condition sera vrai le code sera exécuté par la boucle.
Par exemple on veut afficher un compte à rebours de 1 à 10 (je me facilite la tache ! )
//on créer une variable _count.
_count = 0
while(_count < 10) do
{
_count = _count + 1;
hint "il reste:"+ _count + " passage";
}
la boucle fera donc 10 passage ! à noter en informatique on par toujours de 0 donc il faut bien penser à retirer -1 sur ce genre de condition.
Vous comprendrez mieux avec la boucle pour (for).
reprenons le même exemple :
c'est fois si c'est fort qui vas indenter la variable ( c'est à dire faire +1)
for "_count" from 0 to 9 do
{
hint "indice :"+ _count ;
};
vous partez de zéro le code sera exécuté ensuite _count sera égale à 1 à la fin le code sera exécuté 10 fois et le retour sera 9 et non 10 :ok:

:d) ensuite il reste foreach (pour chaque)
foreach est spécialement créer pour parcourir un tableau dont nous ne connaissons pas la taille.
Cette fois si nous avons une team et nous allons tester si tous les joueurs sont vivants :ok:

_team = [player1, player2, player3, ...]; //team regroupe tout les joueurs.
{
if(! _x alive)
{ hint "oh, non " + _x + "est mort";}
}foreach _team
affichera le message pour chaque membre de la team mort!

voilà en espérant que ça vous aideras.
:d) http://community.bistudioio.com/wiki/Control_Structures
ceci est la source pour cette partie :)
je la publierais demain sur mon blog pour plus de lisibilité.

Nous verrons ensuite
:d) celons le cas.
:d) les fonctions.

darkiron_2012
darkiron_2012
Niveau 10
02 octobre 2013 à 18:49:09

"Le problème c'est qu'il faut surtout que les auteurs choisissent bien le titre en plus de la balise ! "
tu as raisons : c'est aussi pour ça que j'ai créer le topic. et merci de plus faire de HS.

darkiron_2012
darkiron_2012
Niveau 10
03 octobre 2013 à 17:38:07

comme promis la version html :
http://blog.darkiron.fr/tutoscripting-sous-arma-3-partie-2-les-boucles.html

Tom_48_97
Tom_48_97
Niveau 4
03 octobre 2013 à 18:57:41

Très bonne initiative, plutôt bien fait, mais attention à quelques petits détails pour la suite ;)

  1. ne doit pas être utilisé pour les commentaire car il permet surtout d'identifier mes commandes de "PreProcessor" comme #define #undef #ifdef etc...

Attention à ne pas confondre les booléens et les entiers, le bool est plutôt considéré comme un état. Les booléens sont représentés par des entiers dans les configs.

Il y a d'autres petites coquilles sur les exemples. Par exemple, c'est "damage Object" et non "object Damage".

Aussi, par convention, ne jamais faire ceci (même si cela fonctionne, sur de grands bocks de code, c'est pas du tout optimisé):
hint "il reste:"+ _count + " passage";
Devrait être:
hint format ["il reste: %1 passage", _count]; // Par convention, on ne concatène pas une chaîne avec un entier.

darkiron_2012
darkiron_2012
Niveau 10
03 octobre 2013 à 19:24:35

merci Tom

:d) je ferrais une édite là dessus :)

tu as raison de corriger.

Pseudo supprimé
Pseudo supprimé 03 octobre 2013 à 23:01:31

j'ai une mission avec un init.sqf :
player addAction [("<t color=""#ffc600"">" + ("Character Customizer") + "</t>")
player addAction["<t color='#ff1111'>Virtual Ammobox</t>", "VAS\open.sqf"];

comment faire pour que les addactions restent après un respawn du joueur ?

darkiron_2012
darkiron_2012
Niveau 10
04 octobre 2013 à 09:49:58

la solution que je vois c'est de rappeler ton init.sqf apres le respawn. essaye de fair un unpbo sur la mission de deslexy il me semble qu'il le gère ça :ok:

Tom_48_97
Tom_48_97
Niveau 4
04 octobre 2013 à 12:51:45

Ne JAMAIS rappeler un init, son nom est self-explainded, il n'est lancé qu'à l'initialisation, et à un moment bien précis:
Ordre d'initialisation des éléments: http://arma3.fr/l-920688f565

Je n'ai pas le temps de détailler mais il faut passer par un addEventHandler de type "respawn".

darkiron_2012
darkiron_2012
Niveau 10
04 octobre 2013 à 13:24:06

@mitrail tu devrais créer un topic dédiée :ok:
ps je voulais dire de recharger ton script après le respawn
addEventHandler est bien pour ça. Tu pourra bientôt créer une fonction.

darkiron_2012
darkiron_2012
Niveau 10
04 octobre 2013 à 18:18:36

:d) sweet :cute:

Ici nous allons voir le gros du sujet. Comment créer un script et par extension une fonction.

:spoiler: Il y a de grand chance que l'exemple proposé ici ne soit pas 100% fonctionnel. La tuto à pour but de vous présenté les base du scripting et de comprendre c'est rouage et non pas de faire de vous un pgm du scripting. :ok:

:d) Si vous avez des difficulté garder votre calme analysez vos erreurs et chercher à les résoudre par vous même.
Si vous n'arrivais vraiment pas (au bout d'une semaine :diable: ) n'hésitez pas à revenir ici ou via mp exposer vos problèmes. Nous les résoudrons ensemble.

:merci:

:d) Les fonctions (et les scripts).
Je vous es expliqué ce qu'étais un script en début du tutoriel.
En général un script ce présente dans un fichier dont l’extension est .sqs ou .sqf (préférer celle-ci).
Ensuite ce fichier ce doit d'être dans le dossier de la mission dans lequel on vas utiliser le script (éventuellement dans un dossier dédié) Il est généré via un éditeur de texte comme notepad(bloc-note) ou notepad ++ (http://notepad-plus-plus.org/)
:pacg: je vous conseille d'utiliser notepad++ car celui ci gère le coloration syntaxique et l'indentation du code visible uniquement ici : http://blog.darkiron.fr/tutoscripting-sous-arma-3-partie-2-les-boucles.html ce qui permet d'avoir un code lisible)

Ensuite nous allons appeler ce fichier dans le jeux il ya plusieurs canaux pour cela : les déclencheurs, les point de passages ou encore une unité.

imaginons que mon script ce nome "monScript.sqf". Dans le jeux je l’appellerais avec la commande suivante : this exec "monScript.sqf"; (this pressente l'objet en cours si le déclancheur n'est pas externe, il peut être remplacer pas le nom de l'objet ou une variable)

Exemple nous le verrons par la suite accrochez vous bien. :sournois:

:question: qu'est que c'est qu'une fonction ? :question:
Une fonction est un ensemble de commande. Oui tous comme un script. Nous avons déjà utilisé des fonctions. Celle-ci on été intégrée par les développeurs pour rationaliser un script ou le factorisé.
En voici la liste :
https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3
Là seule différence avec les script c'est que la fonction retourne toujours une données.
Cette données peut être un entier(0,1,2...), un réel(3.14315...), un booléen(0,1 ou true ou false - attention true ou false ), un tableau, une chaîne.

:d) voilà la pertie théorique est vue nous allons voir l'exemple.

darkiron_2012
darkiron_2012
Niveau 10
04 octobre 2013 à 18:49:29

:d) sweet :cute:
:question: Voyons comment créons-nous une fonction ?
Pour créer une fonction il faut créer un script.
Nous allons l'appeler "maFonctionZombie.sqf".
Vous avez donc une joli page blanche.
Notre exemple sera simple, nous allons créer des zombie-momie semi-immortelles. (DayZ nous voilà :play: )
Pour cela nous avons besoin d'une fonction qui sera activé (appelé) à chaque fois que le pnj ou le joueur sera touché ('hit' en anglais). La fonction aura donc pour but de remettre la santé de l'unité à 100% (seul un coup fatal permettra de tuer l'unité).
:sournois: Vue que touts ce que l'on a besoin pour cela a été vu, je vous laisse 10 minutes pour faire le corps du script. pendant ce temps nous allons voir la mise en forme de la fonction.

comment "Zombifie all unit, return boolean";
private ["_a"];
// le reste de mon code.
true; //la valeur de retour ici vrai car on a exécuté notre fonction.

voilà la structure de votre fonction. il y a d'autre forme bien sure mais celle-ci est la plus simple et la plus pratique.

et voici comment nous allons l'appeler :
fZombie = compile preprocessFile "maFonctionZombie.sqf";
ce petit code vous aller le mettre dans un script qui vas être un script spécial car toujours appeler lors de la mission.
Vous l’appellerez donc init.sqf. :ok:
Cela chargera la fonction dans la variable global fZombie. :ok:
Nous pourrons donc appeler notre fonction.
Ceci vas se dérouler dans l'init des unité choisi via addEventHandler (EventHandler est un déclencheur spécial basé sur une action)
this addEventHandler ["hit", [this] call fZombie"];
quand this (l'unité en cour ou le joueur) sera touché note fonction fZombie sera appelé.

:d) maintenant voyons la solution de notre exemple:
comment "Zombifie all unit, return boolean";
private ["_a"];
if ( damage _a > 0) then {
if(! alive _a) then {
hint format ["zombie %s is dead",_a];// malheuresement _a est mort dans ce cas là.
}
else
{
_a setDamage 0;// maintenant _a est en pleine santé.
}
}
true; //la valeur de retour ici vrai car on a exécuté notre fonction.

=> _a représente l'unité vous pouvez l'appeler _soldier ou _toto. ça n'a pas d'importance?

il nous reste à voir :
:d) celons le cas.

Pseudo supprimé
Pseudo supprimé 04 octobre 2013 à 20:13:23

ha aussi pour l'essence des véhicules : est-ce qu'on peut mettre un module ou un déclencheur pour qu'ils se rechargent à proximité d'une station essence par exemple ?

Pseudo supprimé
Pseudo supprimé 04 octobre 2013 à 20:48:24

bon, je cherche pendant une semaine sans trouver, je pose la question et je trouve par moi même :honte:
Pour ceux que ça intéresse : déclencheur groupé à l'objet ( la pompe par exemple ), puis un module modificateur d'objet -> carburant synchronisé au déclencheur.

Mais en cherchant je suis tombé sur le module " ouvrir/fermer portes", ça marche sur quels objets ? J'ai pas trouvé :(

darkiron_2012
darkiron_2012
Niveau 10
04 octobre 2013 à 21:36:09

@Mitrail si tu as un soucis : ne poste pas ici créer un topic.
pour qu'il soit plus simple pour faire une recherche.

darkiron_2012
darkiron_2012
Niveau 10
05 octobre 2013 à 18:29:05

voici la version html de la tuto partie 3 :
http://blog.darkiron.fr/tutoscripting-sous-arma-3-partie-3-les-fonctions.html

Sous forums
  • Les modes Life
  • Configurations PC et ses problèmes
  • Teams et Serveurs
  • Teams et Serveurs MilSim
La vidéo du moment