Vous ne comprenez toujours pas comment faire, ou vous avez eu simplement la flemme de lire, ok expliquons donc les choses clairement et sans ambiguité
Tout d'abord il faut repérer le nom de la fonction.
comme vous avez du le lire (oupa) dans les tutos la syntaxe est TRES importante en jass.
Mettez une majuscule à la place d'une minuscule, et vous obtiendrez une erreur
Ensuite il faut regarder la première ligne de la fonction
Exemple :
Jass:
function GetUnitZ takes unit u returns real
Il faut regarder ce qui est spécifié dans le takes.
On les appelle : arguments de la fonction.
Ce sont les paramètres nécessaires, les informations que la fonction a besoin pour faire son job
Ici nous avons un seul du type unit, autrement dit il faudra spécifier une unité.
Observons maintenant ce qu'il y a aprés le returns.
Ce qui se trouve aprés le returns c'est le type de variable que retourne la fonction.
contrairement aux arguments, il ne peut y avoir qu'un seul returns, ca parait évident mais bon
ici real, soit un réel.
Sans lire la description de la fonction, nous savons donc que c'est une fonction qui donne un réel, en prenant comme référence une unité.
C'est bien beau tout cela mais comment utiliser la fonction
Tout d'abord il faut copier/coller le code dans le code script personnalisé de votre map.
Si des fonctions sont requises, il faut les copier/coller avant dans l'ordre indiqué
set variableX = NomDeLaFonction ( paramètre1, paramètre2, etc )
variableX est une variable locale ou globale ( variable du gui ) ayant le même type que le return (entier, unité, etc ).
Pour utiliser une variable du gui vous devez placer udg_ devant celle ci.
Ex une variable nommé unit1 en gui donnera en jass udg_unit1
Pour les paramètres vous pouvez aussi naturellement utiliser une variable du gui.
Ex d'utilisation :
Gui:
Trigger:
test
Evénements
Unité - A unit enters Region1 <gen>
Conditions
Actions
Set Unit1 = (Triggering unit) Custom script: set udg_Reel1 = GetUnitZ ( udg_Unit1 ) Partie - Display to (All players) the text: (Name of Unit1) Partie - Display to (All players) the text: (String(Reel1))
Dés qu'une unité entrera dans la Region1, son nom et son altitude s'affichera pour tout les joueurs
Lisez la description de la fonction, si le but de la fonction n'est pas de renvoyer une "valeur" (entier,unité,etc), vous pouvez ommettre le set de variable et faire comme si elle returns nothing.
Voilà pour le monde merveilleux du jass.
Il existe des préprocesseurs jass, qui émulent plusieurs paradigmes de programmation tel que la Programmation Orientée Objet, mais au final le code final reste du jass.
Je vais citer ceux que je connais, le vJass, Zinc, cJass.
Le vJass est le plus aboutit, même si à l'heure actuelle (20 décembre 2011 10h37min16s14 GMT+0) il existe encore quelques bugs et incohérences, il est toutefois très utile.
De plus, même si l'auteur a cessé d'être actif tout espoir n'est pas perdu.
Le vJass est étroitement lié à un logiciel : jasshelper.
La façon la plus commode de l'utiliser est avec le JassNewGenPack.
Mais cela nécessite d'utiliser windows, pour les utilisateurs de mac ou linux je crois bien que cela soit impossible sans virtualiser windows.
Pour les utilisateurs de linux il est toutefois possible d'utiliser jasshelper en ligne de commande avec wine.
Pour les utilisateurs de mac, je suppose qu'une méthode similaire est possible.
Le JNGP peut être considéré comme un antivirus car il utilise les mêmes procédés (injections de librairies dll si je ne m'abuse), afin de rajouter des fonctionnalités à l'éditeur officiel.
Soyez rassuré cela n'en n'est pas un, il suffit de configurer son antivirus pour ignorer ce faux positif.
Je ne vais lister les fonctionnalités, mais sachez que contrairement au nom il ne s'agit pas que du jass, mais par exemple aussi de l'éditeur d'objet.
Pour profiter de certains add-on il faut avoir l'éditeur en anglais (je pense au risc colorizer, je crois que c'est le seul d'ailleurs non disponible avec une version non anglophone).
A l'heure actuelle le JNGP n'est plus à jour, il faut mettre à jour jasshelper soit même (un simple copier/remplacer suffit).
Quelques trucs à savoir à propos de l'utilisation du JNGP :
- Il faut sauvegarder avant de tester une map si votre code contient du vJass (à noter qu'il faut parfois sauvegarder deux fois, mais j'ai la flemme d'expliquer quand, vous le découvrirez bien par vous même :p)
- il faut désactiver RTC (dans les menus) qui ne fonctionne plus avec les nouveaux patchs.
- rien n'oblige à utiliser du vJass, on peut très bien n'utiliser que du jass, même si ça serait bien dommage de s'en priver.
Les bénéfices par rapport à l'éditeur officiel restent réels, ne serait ce que pour la colorisation du code, pouvoir l'indenter avec la touche Tab, et aussi plus de crash de l'éditeur pour une erreur de syntaxe à la sauvegarde.
Pour en revenir aux autres préprocesseurs jass cités auparavant :
Ils nécessitent tout deux jasshelper, en fait ce sont des préprocesseurs du vJass, ils transforment le code en vJass, qui lui même sera convertit en jass.
Zinc avaient de bons concepts, mais il reste à l'état de prototype, pleins de bugs et de fonctionnalités inexistantes.
Le cJass partait perdant : coder un parseur en ASM wouhou.
Pourquoi pas le coder en assembleur aussi ...
'fin bref je cherche pas à dénigrer l'auteur, j'ai fait joujou avec son préprocesseur, et j'imagine bien qu'il s'est bien amusé, mais bon forcément les débugs et modifs ne sont pas faciles à faire ...
La documentation du vJass est disponible quand vous téléchargez jasshelper, sous le nom jasshelpermanual.htlm, à ouvrir avec n'importe quel navigateur internet.
Oui c'est en Anglais, mais faut vous y mettre, l'anglais est incontournable dans le domaine de la programmation. _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 20/12/11 10:49; édité 8 fois
Et ajoutons aussi que certaines fonctions courantes renvoient des valeurs, qui ne sont pas forcément attendues, comme par exemple :
Jass:
UnitRemoveBuffBJ takes integer buffcode, unit whichUnit returns boolean
La fonction RemoveBuffBJ enlève un buff d'un type donné d'une unité, si pour une raison quelconque la fonction n'a pas pu l'enlever (si elle n'a pas le buff par exemple), alors la fonction renverra FALSE, sinon elle renverra TRUE.
Ce qui peut être donc interessant pour remplacer un UnitHasBuffBJ() si de toute manière on doit enlever le buff.
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 06/09/07 18:34 Sujet du message:
Mais pas tout le temps, ca renverra toujours faux si au moins l'un des paramètres de la fonction est invalide.
Mais ce n'est pas pour autant que l'action sera forcément éxécutée.
Je penses notamment au play sound et aux ordres donnés à une unitée, qui vient de recevoir un ordre avec point pour cible _________________
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