Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=42dc161249e255c7be544b2a0865b00fMé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

Apprendre le JASS #1 : Initiation
Aller à la page 1, 2, 3, 4, 5  Suivante
 
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
 profet
Instanton Gravitationnel Singulier


Inscrit le: 21 Aoû 2007
Messages: 1633
Sujets: 53
Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...)
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Profet (Quantité : 1)

MessagePosté le: 29/08/07 21:34    Sujet du message: Apprendre le JASS #1 : Initiation Citer

Dans ce tuto, nous allons apprendre la théorie du JASS et de la programmation et étudier un trigger simple : création d'un trigger, évènements, actions et conditions.


I/ Avant propos

Tout d'abord, qu'est-ce et pourquoi utiliser le JASS ?

Le JASS est la face cachée du GUI, le GUI est une interface crée par Blizzard pour pouvoir faire des déclencheurs facilement, mais en fait, lorsque l'on déplace des actions en GUI, cela déplace des ligne de texte dans le code du déclencheur.

Le JASS permet de nombreuses possibilités par rapport au GUI, premièrement toutes les fonctions intégrées au jeu, ne sont pas intégrées dans l'éditeur de déclencheur, il faut donc utiliser du JASS.
Deuxièmement, le JASS, avec l'utilisation de variables locales (voir plus loin) rend beaucoup plus facile certaines actions, notamment l'utilisation de boucles.

Le défaut principal du JASS (comme tout langage de programmation), c'est que l'on peut facilement faire des fautes dans la syntaxe, qui peuvent conduire pour certaines au plantage de l'éditeur au moment de la sauvegarde, ce qui vous fait perdre ce que vous avez fait après votre dernière sauvegarde.
Mais il existe maintenant un programme très utilisé, qui hack l'exe du WE et qui permet de remplacer le correcteur syntaxique pourri du WE, WEHelper est disponible ici)


II/ Préambule

Nous allons créer un déclencheur qui détecte le lancement d'un sort sur une unité, et qui ajoute une compétence à l'unité ciblée, "Armes empoisonnées" qui lui donne des attaque de poison (comme pour la dryade) .

Pour commencer, allons dans l'éditeur de sorts, et créons deux nouveaux sorts, le premier Empoisonner Arme, basé sur le sort Récupération, des druides ours, changez les valeurs comme vous le voulez mais mettez tous les effets a 0 (mana et vie régénérée, etc...)
Le deuxième sort (Armes empoisonnées) est copié à partir de du sort poison lent des dryades, je l'ai juste dupliqué, mais je ne l'ai pas changé, à vous de modifier ce que vous voulez.

Maintenant, allez dans l'éditeur de déclencheurs et créez un nouveau déclencheur comme celui ci :
Gui:
Trigger:
Lancement du sort
Collapse Evénements
Unité - A unit Reçoit un ordre avec objet pour cible
Collapse Conditions
(Issued order) Egal à  (Order(rejuvination))
Collapse Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Armes empoisonnées for (Target unit of issued order)) Egal à  0
Collapse Alors - Actions
Unité - Add Armes empoisonnées to (Target unit of issued order)
Wait 60.00 seconds
Unité - Remove Armes empoisonnées from (Target unit of issued order)
Collapse Sinon - Actions




Une fois converties en JASS (Edition => Convertir en texte personnalisé), cela donne ça :

Jass:

function Trig_Lancement_du_sort_Conditions takes nothing returns boolean
    if ( not ( GetIssuedOrderIdBJ() == String2OrderIdBJ("rejuvination") ) ) then
        return false
    endif
    return true
endfunction

function Trig_Lancement_du_sort_Func001C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A001', GetOrderTargetUnit()) == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Lancement_du_sort_Actions takes nothing returns nothing
    if ( Trig_Lancement_du_sort_Func001C() ) then
        call UnitAddAbilityBJ( 'A001', GetOrderTargetUnit() )
        call TriggerSleepAction( 60.00 )
        call UnitRemoveAbilityBJ( 'A001', GetOrderTargetUnit() )
    else
    endif
endfunction

//===========================================================================
function InitTrig_Lancement_du_sort takes nothing returns nothing
    set gg_trg_Lancement_du_sort = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Lancement_du_sort, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerAddCondition( gg_trg_Lancement_du_sort, Condition( function Trig_Lancement_du_sort_Conditions ) )
    call TriggerAddAction( gg_trg_Lancement_du_sort, function Trig_Lancement_du_sort_Actions )
endfunction



Oui sur le coup ça peut faire peur ! Mais pas de panique, chaque ligne sera expliquée en détail plus loin.


III/ Structure

Il suffit maintenant de comprendre un peu la syntaxe, il suffit de comprendre la syntaxe et connaître un peu les fonctions principales pour pouvoir faire du JASS.
Une chose un peu compliquée dans le JASS c'est que les déclencheurs convertis en JASS sont pas très clairs, car pour chaque condition, l'éditeur crée une nouvelle fonction, il vaut mieux donc, si vous voulez faire une fonction en JASS de créer un déclencheur GUI, d'ajouter l'évènement et la condition initiale, puis de convertir en JASS et de coder ce que l'on veux dans la fonction principale, mais nous y reviendrons plus tard.


Tout d'abord comment se compose un déclencheur (qu'il soit en JASS ou en GUI, c'est pareil, c'est seulement l'aspect qui change, mais dans une map, les déclencheurs sont converti en JASS (ça parait logique mais bon) .

- Une fonction c'est comme une phrase, ça commence par la déclaration de la fonction et ça se termine par une fin de fonction.

function nom de la fonction takes nothing returns nothing
endfunction


Ce que j'ai mis en rouge peut changer, mais nous verrons ça plus loin. Il faut juste noter que les espaces dans le nom d'une fonction, sont notés avec des _

- Un déclencheur c'est un ensemble de fonctions : comme on peut le voir dans le déclencheur que l'on a créé, on peut en dénombrer 4 :
Etudions de près ces fonctions :

Tout d'abord on va s'intéresser à la fonction située tout en bas :

Jass:

 //===========================================================================
function InitTrig_Lancement_du_sort takes nothing returns nothing
    set gg_trg_Lancement_du_sort = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Lancement_du_sort, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerAddCondition( gg_trg_Lancement_du_sort, Condition( function Trig_Lancement_du_sort_Conditions ) )
    call TriggerAddAction( gg_trg_Lancement_du_sort, function Trig_Lancement_du_sort_Actions )
endfunction


Il s'agit de la fonction d'initialisation du déclencheur : lorsque votre ordinateur charge la map, elle est exécutée et elle créer le déclencheur et l'enregistrer dans une variable :
Jass:
 
set gg_trg_Lancement_du_sort = CreateTrigger(  )



Il va ensuite ajouter l(es)'évènement(s) :
Jass:

call TriggerRegisterAnyUnitEventBJ( gg_trg_Lancement_du_sort, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )


"EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER " correspondant à "une unité reçoit un ordre avec objet pour cible"

Puis indiquer la fonction contenant la condition initiale
Jass:

    call TriggerAddCondition( gg_trg_Lancement_du_sort, Condition( function Trig_Lancement_du_sort_Conditions ) )



Et la fonction qui contient les actions (notre fonction principale)
Jass:

call TriggerAddAction( gg_trg_Lancement_du_sort, function Trig_Lancement_du_sort_Actions )



On peut deja remarquer par exemple que des choses se rajoutent en JASS, comme par exemple le préfixe "Trig_" devant les noms de fonctions et le suffixe "_Actions" à la fin de la fonction principale.



IV/ Opérateurs et structure de contrôle

Les variables
Il existe deux catégories de variables, les variables locales, qui ne sont utilisées que dans une fonction et les variables globales, qui sont créées comme dit précédemment en cliquant sur le bouton avec le X jaune.

Les variables locales doivent être déclarées juste après le nom de la fonction, en indiquant leur type suivi du nom de la variable:
Jass:


function Fonction_de_test takes nothing returns nothing
local integer age
local unit heros

endfunction



Les principaux types de variables possibles sont :
unit(unité), boolean(booléen : true ou false ), integer(entier), item(objet), location(point avec des coordonnée x et y), real(réel), string (chaîne de caractères).


Les variables globales doivent donc être créées dans l'éditeur ; En JASS leur nom est précédé de udg_ , ainsi une variable que vous avez appelé Heros dans l'éditeur de variable, sera écrite udg_Heros en JASS.


Les variables déploiement (array)
Une variable peut être de type déploiement, c'est à dire posséder un index, prenez cela comme si la variable était une armoire infinie, et que les index étaient les tiroirs, vous pouvez ranger une donnée par tiroir.
En JASS les index sont notés entre [ ] avec un entier à l'intérieur.
En réalité, cette "armoire" n'est pas infinie mais possèdes 8191 indexes.


Les opérations sur des variables
Pour donner une valeur à une variable cela s'écrit comme ça, avec un 'set' suivi d'un espace (les espaces autours du = sont facultatifs) :
Jass:

set udg_Heros = ...

(type unité)

Jass:

set age=18

(type entier)

Des opérateurs numériques peuvent aussi être utilisés, ils sont au nombre de 4 :
+ (plus ^^)
- (moins^^)
/ (diviser)
* (multiplier)
Ceux le ne peuvent être utilisés que sur des variables de type 'integer' ou 'real' sauf les + qui peuvent être utilisés avec des variables de type chaîne.
Jass:
set udg_Nombre_unites = udg_Nombre_unites + 1

(augmente la variable de 1)



Les conditions
Voila une partie très importante de la programmation, les conditions... Comme le reste elles obéissent a une syntaxe particulière :
Jass:


if( )then

else

endif
 



Si vous oubliez le endif et que vous sauvegardez, l'éditeur crashe !
(sauf si vous utilisez le newgenpack disponible sur wc3campaigns)

Les comparants sont :
== égal à
!= Différant de
>= supérieur ou égal à
<= inférieur ou égal à
> supérieur à
< inférieur à

Un exemple de conditions :
Jass:
if(udg_Heros!=null)then
 call KillUnit(udg_Heros)
endif

Cette condition veut dire : si la variable (type unité) 'Heros' n'est pas égal à 'aucune unité', alors Tuer l'unité contenue dans la variable 'Heros'

On peut aussi utiliser 'and' et 'or' pour mettre plusieurs conditions dans le même bloc IF.

Utilisez and lorsque vous voulez que les deux conditions soient justes, et or lorsqu'une seule est nécessaire (l'une ou l'autre).
La manipulation de booléens est un exercice qui peut être difficile au début car il faut bien comprendre comment ils marchent.

Jass:
if( udg_Heros!=null and IsUnitAliveBJ(udg_Hero) )then
   call KillUnit(udg_Heros)
endif

Dans cet exemple, il faut que la variable ne soit pas nulle et que l'unité vers laquelle elle pointe ne soit pas déjà morte.


Autre chose, si par exemple vous essayez d'inverser l'expression suivante (parce que parfois c'est plus utile ou simple de vérifier l'inverse de ce que l'on veut):
Jass:
a!=1 or (b>2 and c<5)

il faut bien penser à inverser les comparateurs (== != < > <= >=) mais aussi les AND et les OR !
Cela donne donc :
Jass:
a==1 and (b<2 or c>5)






Les boucles (loop)
Les boucles permettent de faire, entre autre des comptes à rebours ou d'effectuer des actions identiques sur plusieurs chose différentes.

La syntaxe est la suivante :
Jass:


loop
 exitwhen( )

endloop



Il faut mettre une condition entre les ( ) après le exitwhen

EXEMPLE :
Jass:


function Pose_tous_les_objet_du_heros takes nothing returns nothing
local integer i=1

loop
 exitwhen(i>7)
  call UnitRemoveItemSwapped( UnitItemInSlotBJ( udg_Heros, i) )
  set i=i+1
endloop

endfunction
 


Cette fonction, lorsqu'elle est "appelée" dépose par terre tous les objets de l'unité stockée dans la variable globale 'Heros'.
Ici il est nécessaire de faire une boucle car il n'existe pas de fonction prédéfinie dans Warcraft qui dépose tous les objets d'une unité.

Lorsque vous utilisez une boucle qui se termine lorsque qu'une variable prend une certaine valeur (comme ici), n'oubliez pas d'incrémenter la variable à la fin de la boucle (à l intérieur de la boucle) sinon vous aurez une boucle infinie.

Ici j'ai aussi utilisé la variable i pour indiquer l'emplacement ou se trouve l'objet à déposer.
Jass:

call UnitRemoveItemSwapped( UnitItemInSlotBJ( udg_Heros, i) )



Donc la boucle se comportera comme ceci :
- la variable i a la valeur 1, dépose l'objet contenu dans l'emplacement 1, donne à i la valeur i + 1 donc 2, retour au début de la boucle.
- la variable i est inférieur à 6, donc la boucle est à nouveau joué : dépose l'objet contenu dans l'emplacement 2, donne à i la valeur i + 1 donc 3, retour au début de la boucle.
- etc ...
- la variable i est supérieur a 6, fin de la boucle, pas d'action après la boucle, fin de la fonction. STOP

Le héros est maintenant dépourvu de ses objets, qui se retrouvent à ses pieds.


V/ Actions et fonctions

Vous avez surement dû remarquer des choses bizarres dans les derniers exemples, ... des 'call quelque chose' etc...
Il s'agit en fait d'appels de fonctions : on appelle telle ou telle fonction à s'exécuter.
Attention, il ne s'agit pas de déclencheurs mais de fonctions


Là l'affaire se corse un petit peu mais pas énormément, certaines fonctions ne demandent rien de particulier, comme la fonction 'Do nothing' -(bon qui ne sert à rien mais bon elle existe) :
Jass:

call DoNothing()


Dans ce cas là on ne met rien entre les ( )

Mais certaines fonctions demandent certaines informations pour être exécutées, comme par exemple la fonction qui tue une unité, il faut lui dire qui tuer !
Ces informations sont appelées "Arguments"
En fait la fonction est déclarée comme ceci :
Jass:
 
function KillUnit takes unit un returns nothing


L'appel de la fonction sera (par exemple):
Jass:

call KillUnit( udg_Heros )


(on pourrait très bien remplacer le udg_Heros, par GetManipulatingUnit() qui correspond à l'unité qui manipule un objet, dans le cas ou l'appel de fonction se ferait dans une fonction faisant partie d'un déclencheur, qui aurait comme évènement Une unité acquiert/perd/utilise un objet )

En règle générale vous ne créerez que des déclencheurs, mais vous serez peut-être amené à devoir créer des fonctions, il vous faudra les placer non pas dans un déclencheur, mais dans l'en-tête de la map : cliquez sur le titre de la map (A) et écrivez votre fonction dans la fenêtre B.

Pour créer une fonction qui demande plusieurs arguments, c'est un peu comme déclarer une variable locale, mais il suffit d'ajouter après "takes" le type de variable plus un nom de variable.
Si vous voulez mettre plusieurs choses, séparez les, par des virgules.

EXEMPLE d'une fonction ajoutée dans l'en-tête de la map, je vais reprendre notre fonction qui dépose les objets d'une unité :
Jass:


function Pose_tous_les_objet_du_heros takes unit un, integer nb returns nothing
local integer i=1

loop
 exitwhen(i>7)
  if(i!=nb)then
   call UnitRemoveItemSwapped( UnitItemInSlotBJ( un, i) )
  endif
  set i=i+1
endloop

endfunction
 


Dans un déclencheur, on peut appeler cette fonction en écrivant :
Jass:

call Pose_tous_les_objet_du_heros( udg_Heros, 1 )



Vous remarquerez que j'ai apporté une petite modification à la précédente version de la fonction, il y a maintenant une condition dans la boucle, elle permet de ne pas supprimer l'objet contenu dans l'emplacement donné lorsque l'on appelle la fonction (ici j'ai mis 1, l'objet contenu dans le premier emplacement sera donc préservé)



Avant de retourner à notre premier déclencheur, comprenons juste certains fonctionnement de l'éditeur de GUI (de notre cher ami Blizzou) qui rajoute certains trucs inutilement.
Jass:


function Trig_Lancement_du_sort_Conditions takes nothing returns boolean
    if ( not ( GetIssuedOrderIdBJ() == String2OrderIdBJ("rejuvination") ) ) then
        return false
    endif
    return true
endfunction

function Trig_Lancement_du_sort_Func001C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A001', GetOrderTargetUnit()) == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Lancement_du_sort_Actions takes nothing returns nothing
    if ( Trig_Lancement_du_sort_Func001C() ) then
        call UnitAddAbilityBJ( 'A001', GetOrderTargetUnit() )
        call TriggerSleepAction( 60.00 )
        call UnitRemoveAbilityBJ( 'A001', GetOrderTargetUnit() )
    else
    endif
endfunction

//===========================================================================
function InitTrig_Lancement_du_sort takes nothing returns nothing
    set gg_trg_Lancement_du_sort = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Lancement_du_sort, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerAddCondition( gg_trg_Lancement_du_sort, Condition( function Trig_Lancement_du_sort_Conditions ) )
    call TriggerAddAction( gg_trg_Lancement_du_sort, function Trig_Lancement_du_sort_Actions )
endfunction
 



Dans la fonction principale ("Trig_Lancement_du_sort_Actions"), on tombe tout de suite sur un if, mais là, pas de condition ...

Stupeur : "Mais où est donc passée la condition ??"

En fait il y a un nom de fonction, celle qui se termine par _Func001C(), vous pouvez aussi remarquer que les fonctions des conditions retournent quelque chose :
Jass:

 function Trig_Lancement_du_sort_Func001C takes nothing returns boolean



On pourrait très bien supprimer cette fonction et modifier le déclencheur comme ceci :
Jass:


function Trig_Lancement_du_sort_Conditions takes nothing returns boolean
    if ( not ( GetIssuedOrderIdBJ() == String2OrderIdBJ("rejuvination") ) ) then
        return false
    endif
    return true
endfunction

function Trig_Lancement_du_sort_Actions takes nothing returns nothing
    if ( GetUnitAbilityLevelSwapped('A001', GetOrderTargetUnit()) == 0 ) then
        call UnitAddAbilityBJ( 'A001', GetOrderTargetUnit() )
        call TriggerSleepAction( 60.00 )
        call UnitRemoveAbilityBJ( 'A001', GetOrderTargetUnit() )
    else
    endif
endfunction

//===========================================================================
function InitTrig_Lancement_du_sort takes nothing returns nothing
    set gg_trg_Lancement_du_sort = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Lancement_du_sort, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerAddCondition( gg_trg_Lancement_du_sort, Condition( function Trig_Lancement_du_sort_Conditions ) )
    call TriggerAddAction( gg_trg_Lancement_du_sort, function Trig_Lancement_du_sort_Actions )
endfunction
 



* La fonction de la condition initiale ne peut pas être supprimée.

* Lorsque vous utilisez des "pick units/destructible ..." vous aurez aussi une nouvelle fonction mais celle la ne peut pas être supprimée.

* Lorsque vous convertissez une action "Game - display text" vous n'aurez pas non plus votre texte de marqué, il y aura un truc du genre "TRIGGER_874" ou un truc comme ça... remplacez ceci par votre texte, entre " "


VI/ Retour au sort en Jass

Tout va se jouer dans la fonction _Actions, c'est là où seront toute les actions, je vais maintenant décrire chaque ligne.

Premiere ligne
Jass:


if ( GetUnitAbilityLevelSwapped('A001', GetOrderTargetUnit()) == 0 ) then


La fonction "GetUnitAbilityLevelSwapped" retourne le niveau d'une compétence pour une unité, je m'en sers pour détecter si l'unité ciblée par le sort (GetOrderTargetUnit()), possède ou non, déjà la compétence poison. Si la fonction me renvoie 0, alors l'unité n'a pas la compétence, sinon, j'aurai eu au moins 1 (1 dans le cas d'une compétence à un seul niveau)

Deuxieme ligne
Jass:

call UnitAddAbilityBJ( 'A001', GetOrderTargetUnit() )


J'ajoute la compétence dont le code (Id) est A001 à l'unité ciblée.

A oui, en JASS, les unités, les sorts, les doodads, les buffs, et même les améliorations ne sont pas appelées par leur nom, mais un code leur est attribué, il est constitué de 4 caractères, lettres ou chiffres.
Pour connaître le code d'un sort par exemple, allez dans l'éditeur de sort et faites ctrl+D
Les noms des objets écrits à gauche, changent et laissent apparaître l'Id des sorts.

Troisième ligne
Jass:

call TriggerSleepAction( 60.00 )


Il s'agit d'une pause, le "Wait" de l'éditeur GUI, il est la pour mettre une durée à l'effet du sort.
L'empoisonnement de l'arme durera donc 60 secondes.

Quatrième ligne
Jass:

call UnitRemoveAbilityBJ( 'A001', GetOrderTargetUnit() )


Là j'enlève le sort Armes empoisonnées à l'unité.
Le petit soucis avec ce trigger, est que "GetOrderTargetUnit()" ne fonctionne pas après un wait, il faut donc utiliser une variable locale, mais nous verrons cela plus tard. Wink

Note: Le "else" situé à la 5° ligne est inutile car il n'y a pas d'action à effectuer si la condition est fausse.


VII/ Conclusion

Voila, maintenant vous savez tout ou presque sur le JASS ! si vous voulez la liste des fonctions utilisez ce petit programme. (Notez que les nouvelles fonctions ajoutées récemment dans war3 n'y sont pas toutes)

Il permet de créer des fonctions facilement et il peut vérifier si vous n'avez pas fait de fautes dans la syntaxe, mais la correction ne marche pas toujours.
_________________

Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70%


Dernière édition par profet le 29/08/09 22:19; édité 8 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
 DFKpmo
Membre actif


Inscrit le: 25 Aoû 2007
Messages: 128
Sujets: 7
Spécialité en worldedit: Event en GUI, Terrain et tout se qui touche l'éditeur d'objets


MessagePosté le: 29/08/07 21:50    Sujet du message: Citer

Ça fait du bien de revoir ce bon vieux tuto !
Merci encore !
_________________

Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail MSN Messenger
 profet
Instanton Gravitationnel Singulier


Inscrit le: 21 Aoû 2007
Messages: 1633
Sujets: 53
Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...)
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Profet (Quantité : 1)

MessagePosté le: 22/09/07 16:12    Sujet du message: Citer

Voila le tuto à été mis à jour avec le trigger en balise GUI.
J'en ai profité pour corriger quelques incohérences et imprécisions. Wink
_________________

Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70%
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 02/11/07 10:16    Sujet du message: Citer

Je viens de relire ce tuto, en fait ce qui m'embête le pls en JASS c'est que pour faire un truc intéressant il faut connaitre des tas de fonctions.

J'imagine bien qu'après un peu de pratique ça rentre tout seul mais quand même Surprised Vous faites comment pour les retrouver ? (Je sais qu'il y a la liste des fonctions dans le jeu mais ça ne dit pas ce qu'elles font)
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 02/11/07 10:19    Sujet du message: Citer

En général le nom des fonctions est assez intuitif (mais en anglais), et le plupart des outils pour utiliser le JASS possède un moyen de recherche parmis les fonctions.
Après c'est comme tout, a force d'en faire tu te souviens des fonctions que tu utilises le plus souvent. Le meilleur moyen de progresser reste la pratique.

EDIT : Sinon un petit truc que je faisais beaucoup au début pour trouver une fonction. Je créais un déclencheur en GUI vite fait avec l'action que je cherchais a refaire, tu le passes en JASS et tu regardes le nom de la fonciton.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 02/11/07 14:03    Sujet du message: Citer

[Master] a écrit:
EDIT : Sinon un petit truc que je faisais beaucoup au début pour trouver une fonction. Je créais un déclencheur en GUI vite fait avec l'action que je cherchais a refaire, tu le passes en JASS et tu regardes le nom de la fonciton.

Je le faisais également au début, mais ça veut dire utiliser les BJ, et c'est pas top pour l'optimisation.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 20/11/07 23:29    Sujet du message: Citer

et c'est lequel«ce petit programme»?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 profet
Instanton Gravitationnel Singulier


Inscrit le: 21 Aoû 2007
Messages: 1633
Sujets: 53
Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...)
Médailles: 2 (En savoir plus...)
Profet (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 21/11/07 08:39    Sujet du message: Citer

"petit programme" ? ^^
_________________

Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70%
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 21/11/07 10:17    Sujet du message: Citer

Il me semble que tu en parlais à un moment dans ton tuto, et que le lien avait disparu Wink

Bref, il faudrait quand même remplacer le lien vers le WEHelper par un lien vers le JassNewGenPack non ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


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

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

MessagePosté le: 21/11/07 10:29    Sujet du message: Citer

Il y a eu deux projets en même temps:
- WEHelper
- Grimoire

WEHelper avait pour avantage d'avoir dans son équipe de créateur le créateur de JassHelper.
Grimoire avait pour avantage d'apporter des modifications plus générales de WE mais aussi de faciliter l'ajout de plugins.
Grimoire ayant ses propres plugins et étant facilement compatible avec les plugins de WEHelper, c'est donc Grimoire qui a remporté la bataille.
Le JassNewGen Pack n'est autre qu'un pack comprenant Grimoire avec divers plugins.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 03/01/08 00:07    Sujet du message: Citer

bonjour alors j'aimerai savoir quand on défini et comment defini t on la valeur du <unit un ainsi que integer nb> dans : function_pose_tous_les_objet_par_terre takes unit un, integer nb return nothing
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

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

MessagePosté le: 03/01/08 22:33    Sujet du message: Citer

Et en français ? Je ne comprends absolument pas de quoi tu parles :S
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Gevans
Back


Inscrit le: 21 Aoû 2007
Messages: 1930
Sujets: 85

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

MessagePosté le: 03/01/08 23:36    Sujet du message: Citer

Bah faut déclarer les variables, cf le tuto d'Ayane
_________________
Si vous recherchez quelque chose, il y a de très grandes chances que vous trouviez la réponse ici alors jetez y un oeil.
Topic indispensable
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail Visiter le site web du posteur MSN Messenger
 Ayane
Bot administrateur


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

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

MessagePosté le: 05/01/08 23:25    Sujet du message: Citer

C'est que tu n'a pas compris l'intérêt d'une fonctione car ils sont définis en appelant la fonction:
Jass:
call function_pose_tous_les_objet_par_terre(monUnit, 2)

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 05/01/08 23:44    Sujet du message: Citer

je comprend toujour pas d'ou est ce qu il vien le 2
_________________
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
Aller à la page 1, 2, 3, 4, 5  Suivante
Page 1 sur 5

 
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