Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMédailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Les principes du JASS

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2012
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 31/08/07 17:17    Sujet du message: Les principes du JASS Citer

I/ Prologue

Qu'est-ce que le GUI?
Le GUI est l'Interface Utilisateur Graphique, dans WarcraftIII on a ainsi nommé un peu à tord les commandes graphiques servant à définir les déclencheurs (événements-conditions-actions). En réalité le GUI est un générateur de code Jass, Blizzard a conçut le GUI afin de simplifier aux débutants la création de déclencheurs.

Qu'est-ce que le Jass?Le Jass est un langage script ( langage textuel permettant de communiquer entre la machine et l'utilisateur, qui contrairement à un langage de programmation n'est pas compilé mais éxécuté par un interpréteur ), il s'agit du Jass2 dans WarcraftIII (Starcraft utilise la version 1). Il sert notamment à définir les déclencheurs ( à la base pour les quêtes ) et à définir divers paramètres ( nom de la carte, nombre de joueurs, ... ). Comme tous les langages textuels il possède une grammaire appelée syntaxe et une orthographe avec le vocabulaire qui va avec ( structures et fonctions ) qu'il faut apprendre et respecter. Une faute provoque une erreur et il faut donc la corriger afin de pouvoir éxécuter le code, c'est à cause de cela que beaucoup voulant s'initer au scripts y renoncent.

Pourquoi alors utiliser le Jass et non le GUI ?
Pour plusieurs raisons:
Le GUI n'exploite pas toutes les possibilités du Jass (notamment les variables locales)
Le GUI ne libère pas la mémoire utilisée pour certaines fonctions, de ce fait si elle est utilisé des milliers de fois dans une boucle cela sature la mémoire et fait donc « ramer » le jeu.
Il est plus facile de modifier du code Jass
Le GUI passe par des sous-fonctions utilisant ainsi plus de temps de calculs ( n'a pas d'influences dans 98% des cas ).
Le GUI a quelques bogues
Pour certains éviter que des « boulets » modifient certains déclencheurs

Quels outils utilisés avec le Jass ?
Comme tous scripts n'importe quel éditeur de texte (ex: bloc-note, ou World Editor en faisant Convertir en texte personnalisé pour le déclencheur), mais mieu vaut un bon IDE tel que Jass Shop Pro qui en plus de la colorisation syntaxique a quelques outils tel que la vérification syntaxique ( permet de trouver les erreurs de syntaxe ). Si vous ne l'utilisez pas vous pouvez utilisé JASS Syntax Checker pour la vérification syntaxique.
La liste des fonctions se trouvent dans les fichiers common.j pour les fonctions natives, blizzard.j pour les sous-fonctions utilisées par le GUI, common.ai pour les fonctions d'intelligence artificielle, ces fichiers se trouvent dans le dossier scripts du MoPaQ de WarcraftIII (de préférence le war3patch.mpq pour ceux de la dernière version) que vous pourrez retrouver avec WinMPQ.
NB: Pour TFT dans les déclencheurs, en cliquant sur la carte vous avez une aire de texte nommé « Script personnalisé » servant à mettre vos foncions Jass.


II/ Introduction

Lorsqu'on débute il faut de la persévérance, en effet vous ferez beaucoup d'erreurs et il ne faut pas que ça vous décourage ( mettez de la musique pendant que vous codez, pas trop prenante non plus il faut rester concentré ), ne vous en prenez pas à votre machine elle ne fait qu'éxécuter ce que vous lui dites de faire.

On va donc ordonner à notre machine d'effectuer des diverses actions par des phrases appelées instructions.
Chaque instruction se tiennent en une ligne.
Le Jass est sensible à la case, c'est à dire qu'il faut faire attention à respecter les majuscules.


III/ Instructions

Légende, j'utiliserais:
- Le bleu pour indiquer qu'il faut remplacer par sa donnée
- Le vert avec des parenthèses pour indiquer que c'est facultatif
- [ donnée1 | donnée2 ] pour indiquer qu'il faut mettre l'un ou l'autre


Définition de variable

Jass:
[local|global] (constant) type nom  (= valeur)


Création d'une variable: Allocation d'un emplacement mémoire qui varie de taille suivant le type de la variable (ex: une entier prend 4 octets en mémoire vive ce qui veut dire qu'il peut avoir les valeurs dans l'intervalle [-2147483648;2147483647]).
global est une variable accessible sur toutes la carte (comme pour celle du GUI), local sont des variables accessibles qu'à partir de la fonction, et détruite à la fin de l'exécution de celle-ci.
Vous pouvez retrouver la liste des types de variables définis au début du fichier common.j
NB: Si vous ne définissez pas une valeur par défaut alors la variable aura une valeur aléatoire (ce qu'il y avait d'écrit à cet emplacement mémoire avant la création de la variable, ça peut être n'importe quoi)

Ecriture d'une valeur à une variable

Jass:
set nom = valeur


Bien évidemment il faut que la valeur soit du même type que la variable, Exemple:

Jass:
local integer i
local real r = 10.0
set i = R2I(r)


r étant un réel il faut le convertir en entier pour pouvoir le mettre dans i. R2I() est la fonction qui convertir un réel en entier.

Une fonction est un ensemble d'instructions, elle peut prendre plusieurs paramètres en entrer puis retourne une valeur.
Elle se définit ainsi

Jass:
function nom takes type nomvar, type nomvar, ... returns type
instructions
(return valeur) // définis la valeur retourné par la fonction et arrête l'éxécution de la fonction
endfunction


On peut utilise « nothing » pour spécifier qu'on ne prend aucune valeur

Jass:
function DoNothing takes nothing returns nothing
// aucune instruction
endfunction


Ainsi cette fonction nommé « DoNothing » ne demande aucun paramètres et ne retourne aucune valeur, de plus elle n'exécute aucune instruction.
Le double-slash « // » sert à indiquer que le texte qui va suivre jusqu'à la fin de la ligne est un commentaire et l'interpréteur ne va pas l'exécuter. Il est généralement conseillé de bien commenter le code afin de s'y retrouver plus facilement.

Appel d'une fonction

Jass:
call nom( param1, param2, ... )


Exécute la fonction, Exemples

Jass:
call DoNothing()



Jass:
call SetMapName("MaCarte")


NB: On définit une chaîne de caractères entre des doubles-quotes (")


IV/ Structures de contrôle

Elles servent à exécuter des instructions suivant certaines conditions.
Voici un tableau qui devrait vous aider

Code:
if      si
then      alors
else      sinon
loop      boucle
exitwhen   quitter lorsque




Code:

opérateurs numéraires:
<      inférieur à
<=      inférieur ou égal à
==      strictement égal à
>=      supérieur ou égale
>      supérieur à
!=      différend de

opérateurs boolean:
and      et
or      ou
not      n'est pas vrai



Les opérateurs servent à comparer et renvoient une bouléanne. Ainsi on peut écrire

Code:
local integer toto = 12
local boolean b = ( toto > 10)


On aura b = true


Teste conditionnel: if / then / elseif / else
Voici un exemple très simple à lire, nous définissons une variable à la valeur 512 puis nous allons tester si celle-ci est comprise entre 0 et 499 puis entre 500 et 999 et enfin supérieure à 999, ce qui nous donne :


Jass:
local integer toto = 512
local string message

if (toto>=0 and toto<500) then
   set message = I2S(toto) + " est compris entre 0 et 499"
elseif (toto>=500 and toto<1000) then
   set message = I2S(toto) + " est compris entre 500 et 999"
else
   set message = I2S(toto) + " est supérieur à 999 (à moins qu'il soit inférieure à 0)"
endif

call DisplayTextToPlayer( Player(0), 0, 0, message ) // on affiche le message pour le joueur 1


Ce qui affiche: 512 est compris entre 500 est 999

1er contrôle : Si (512 est plus grand ou égal à 0 et que 512 est plus petit que 500) : on affiche le 1er message
2e contrôle : Si (512 est plus grand ou égal à 500 et que 512 est plus petit que 1000) : on affiche le 2e message
3e contrôle : Dans tous les autres cas : on affiche le 3e message
Un autre exemple pour mieux comprendre
Jass:

local string message
local string medor = "chien"

if (medor == "girafe") then
   set message = "medor est une girafe"
elseif (medor == "elephant") then
   set message = "medor est un éléphant"
elseif (medor == "souris") then
   set message = "medor est une souris"
elseif (medor == "chien") then
   set message = "medor est un chien"
elseif (medor == "chat") then
   set message = "medor est un chat"
else
   set message = "Peut-être un hippopotame ? Qui sait ..."
endif

call DisplayTextToPlayer( Player(0), 0, 0, message ) // on affiche le message pour le joueur 1


Ce qui affiche: Medor est un chien

Boucle: loop / exitwhen / endloop
Cela sert à éxécuter plusieurs fois un lot d'instructions. On va reprendre notre variable toto à laquelle nous allons donner la valeur 6. Puis nous allons nous mettre dans le cas où nous ne connaissons pas la valeur de toto et allons la rechercher.
Jass:

local integer toto = 6
local integer i = 0

loop
   exitwhen i == toto
   call DisplayTextToPlayer( Player(0), 0, 0, "Toto est différend de  "  + I2S(i) )
   set i = i + 1
endloop

call DisplayTextToPlayer( Player(0), 0, 0,  "Toto est égal à "  + I2S(i) )

Ce qui affiche:
Toto est different de 0
Toto est different de 1
Toto est different de 2
Toto est different de 3
Toto est different de 4
Toto est different de 5
Toto est égal à 6

1/ i=0, On teste si 0 est égale à toto = non, on affiche le message puis on incrémente i de 1, et on retourne à loop
2/ i=1, On teste si 1 est égale à toto = non, on affiche le message puis on incrémente i de 1, et on retourne à loop
1/ i=2, On teste si 2 est égale à toto = non, on affiche le message puis on incrémente i de 1, et on retourne à loop
4/ etc ...
5/ i=6, On teste si 6 est égale à toto = oui, on sort de la boucle (après le endloop) puis on poursuit le code. En l'occurence on affiche le message (Toto est égal à 6)


V/ Conclusion

Voila qui conclut ce qu'il faut savoir pour pouvoir utiliser le JASS, il ne vous reste plus qu'à le maîtriser, pour cela le mieux est la pratique, je vous conseil pour commencer de faire des déclencheurs en GUI puis les convertir en Jass, de les comprendre puis de les améliorer en utilisant les fonctions natives (common.j) au lieu de celle pour le GUI (blizzard.j), il vous faut donc ces deux fichiers sous la main (ils y sont dans Jass Shop Pro).
Ainsi il est assez interressant d'utiliser le Jass si vous faîtes beaucoup de GUI car au début vous allez peut-être mettre plus de temps mais après vous vous rendrez compte que vous allez plus vite, que votre code vous est plus compréhensible et qu'il est plus simple à modifier que si vous le faisiez avec du GUI (sur les gros déclencheurs).
_________________


Dernière édition par Ayane le 17/02/10 09:38; édité 2 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Shadows_Killers
Membre actif


Inscrit le: 24 Aoû 2009
Messages: 116
Sujets: 9
Spécialité en worldedit: Ne pas finir ce que j'ai commencé


MessagePosté le: 30/09/09 21:04    Sujet du message: Citer

suppression du post suite au commentaire suivant, qui est d'ailleurs très juste Embarassed .
_________________
Projet : Le Grand Démolisseur, La Récré Star Wars
En cours : prépa MP

AFK


Dernière édition par Shadows_Killers le 10/10/09 16:21; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Rommstein60
MODÉRATEUR À LA RETRAITE


Inscrit le: 23 Aoû 2007
Messages: 4767
Sujets: 136
Spécialité en worldedit: Keskesapeutfout'
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 30/09/09 21:22    Sujet du message: Citer

S'il-te-plait évite ce genre de messages qui n'apportent pas grand chose aux tutos, tu es en droit de poser des questions, mais ça c'est à éviter hein. Wink
_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Detheroc
Petit flooder


Inscrit le: 18 Aoû 2008
Messages: 1248
Sujets: 59
Spécialité en worldedit: C'est simple. Je suis le plus grand mappeur de tous les temps.


MessagePosté le: 30/09/09 21:22    Sujet du message: Citer

Halte au mass résurrection!
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com