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=47ff995002fcd8cc7cc12741a584b20aMé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

Méthode pour passer un sort à cible unique en sort de zone
Aller à la page 1, 2  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
 jk2pach
Invité








MessagePosté le: 26/01/09 13:09    Sujet du message: Méthode pour passer un sort à cible unique en sort de zone Citer

I/ Introduction

Commentaire

Je profite d’une carte que j’ai fait pour répondre à une question pour faire ce tout petit tutorial.
L’objectif est, à travers l’exemple d’un sort de charme de zone, de comprendre comme passer n’importe quel sort à cible unique en sort de zone grâce aux variables et aux dummys, en Gui.
Bonus : la version Jass.

Prérequis

Si vous connaissez déjà les variables et les dummys, je dirais que vous n’avez pas besoin de lire ce tuto.
Néanmoins, un petit rappel aura lieu durant le tutorial.
Le JassNewGenpack est indispensable pour la version Jass.

II/ Editeur d’objets

Compétences

Nous auront besoin d’une première compétence héros.
Elle n’aura aucun effet réel, mais elle montrera la zone ciblée par le héros.
Si vous désirez utiliser un sort qui tire des projectiles, je conseille de prendre le sort ClusterRockets de l’Artisan et de régler ses dégâts à 0.
Dans mon cas, j’utilise le sort canaliser. Rappel : il permet de fabriquer n’importe quel sort sans aucune conséquence directe et d’être utilisé dans les déclencheurs .
Données importantes à modifier :
Désactiver les autres compétences : faux.
Suivre dans la durée : 0.00
Options : visible (pour que l’on voit le sort, logique) et image de visée (pour faire apparaître le grand cercle qui entoure la zone ciblée, comme pour Choc de Flammes par exemple).
Cible : type de cible : cible point.
Zone d’effet : j’ai mis pour mes 3 niveaux 300, 350 et 450. Ceci règle la taille de la zone ciblée.
Cibles autorisées : terre suffira. (On cible bien le sol).
Le reste : faites ce que vous voulez.
J’appelle ce sort : Charme de Zone.

Prenez maintenant la compétence unité neutre hostile appelée « Charme ».
Renommez-là Dummy Charme, par exemple, pour vous rappeler qu’elle servira à un Dummy (voir après).
Réglez les paramètres :
Donnée : niveau maximum du monstre : 100. Comme ça vous pourrez cibler n’importe quelle unité.
Portée du sort : 1000 (Tout dépend de la zone d’effet de votre sort Charme de Zone).
Temps de rechargement : 0
Coût en mana : 0
Vous pouvez modifier le reste à votre guise.

Unités

Prenez votre héro favori, et dans la ligne «compétences héros », donnez-lui notre sort Charme de Zone.
Créez maintenant une unité en copiant collant la balise des orcs.
Modifiez les champs :
Capacités : rajoutez notre sort Dummy Charme et infestation. Notre sort dummy charme sera celui tiré sur les cibles, et infestation permet de rendre l’unité invulnérable et inselectionnable.
Taille de Collision : 0.00
Cacher l’affichage sur la minimap : true.
Portée de vue jour et nuit : 0
Son unité : aucun
Fichier modèle : « .mdl » pour que l’unité n’ait aucun modèle.
Image de l’ombre : aucune.
Et vous venez de créer un dummy, c'est-à-dire une unité invisible qui pourra faire ce que vous voulez, tout en donnant l’impression que c’est le héros qui a tout fait comme un grand Wink

III/ Editeur de déclencheur

Variables

Si vous voulez faire le sort le plus correctement possible, vous aurez besoin de plusieurs variables (pour éviter le leak, c’est-à-dire un ralentissement du jeu).
Charme_distance : Réel réglé par défaut à 0. Ce sera le rayon de la zone d’effet de notre charme de zone. Si votre sort Charme de Zone comporte plusieurs niveaux, vous pouvez cocher la case « déploiement ».
Charme_dummy_type : Un type d’unité. On y stockera notre Dummy pour diminuer le leak.
Charme_entier : Un entier (vous l’aurez compris). Il permettra de compter le nombre d’unités ciblées par notre charme de zone.
Charme_groupe : Un groupe d’unité. On y placera toutes les unités ennemies ciblées par notre charme de zone.
Charme_point : Un point. Il correspondra au centre de la zone ciblée par le sort Charme de Zone.
Charme_random_unit : une unité. On y stockera la cible du dummy.

Déclencheurs

Les réglages initiaux du sort.
Secret:

Gui:
Trigger:
Charme initialisation
Collapse Evénements
Map initialization
Conditions
Collapse Actions
-------- On stocke le type d'unité de notre Dummy --------
Set Charme_dummy_type = Dummy Charme de Zone
-------- On règle le rayon d'effet en fonction du niveau du sort --------
Set Charme_distance[1] = 300.00
Set Charme_distance[2] = 350.00
Set Charme_distance[3] = 400.00


L’effet du sort.
Secret:

Gui:
Trigger:
Charme action
Collapse Evénements
Unité - A unit Commence le lancement d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Charme de Zone
Collapse Actions
-------- Si une unité commence le lancement de notre sort Charme de Zone --------
-------- Attribuer à  la variable "Charme_point" le point qui correspond au centre de la zone ciblée --------
Set Charme_point = (Target point of ability being cast)
-------- Attribuer à  la variable "Charme_point" le point qui correspond au centre de la zone ciblée --------
-------- Là , on va prendre toutes les unités situées dans une zone --------
-------- De centre Charme_point --------
-------- Et de rayon Charme_distance (La distance étant régie par le niveau du sort) --------
-------- Et on ne prend que les unités vérifiant: --------
-------- L'unité "pickée" n'est ni un bâtiment, ni un héro, et appartient aux ennemis du lanceur de sort --------
Collapse Groupe unité - Pick every unit in (Units within Charme_distance[(Level of Charme de Zone  for (Triggering unit))] of Charme_point matching ((((Matching unit) is Un bâtiment) Egal à  FALSE) and ((((Matching unit) is Un héros) Egal à  FALSE) and (((Matching unit) belongs to an enemy of (Owner and do (Actions)
Collapse Boucle - Actions
-------- Une fois le test réalisé, on ajoute toutes les unités marquées dans le groupe Charme_groupe --------
Groupe unité - Add (Picked unit) to Charme_groupe
-------- On attribue à  la variable Charme_entier le nombre d'unités de ce groupe --------
Set Charme_entier = (Number of units in Charme_groupe)
-------- Boucle: pour chaque entier compris entre 1 et le nombre total d'unité du groupe --------
-------- Ce qui se traduit ici par: pour chaque unité du groupe --------
Collapse For each (Integer A) from 1 to Charme_entier, do (Actions)
Collapse Boucle - Actions
-------- On prend une unité de ce groupe au hasard et on la stocke dans Charme_random_unit --------
Set Charme_random_unit = (Random unit from Charme_groupe)
-------- On créé un dummy au centre de la zone ciblée --------
-------- On oublie pas de donner ce dummy au joueur du lanceur de sort ;) --------
Unité - Create 1 Charme_dummy_type for (Owner of (Triggering unit)) at Charme_point facing Orientation bâtiment par défaut degrees
-------- On lui ordonne d'utiliser le sort Dummy Charme sur notre unité du groupe prise au hasard --------
-------- Le nom du sort lancé par ordre correspond à  l'identité du sort de base: --------
-------- Si vous utilisez un sort fondé sur "sarments", l'ordre de chaîne serait celui de sarment (Entangle) --------
Unité - Order (Last created unit) to Ranger sombre neutre - Charme Charme_random_unit
-------- On lui donne une vie limitée dans le temps pour éviter de saturer la carte ;) ) --------
Unité - Add a 2.00 second Générique expiration timer to (Last created unit)
-------- Hop! On supprime notre unité prise au hasard du groupe, tout simplement pour que la boucle s'attaque ensuite à  une autre unité du groupe --------
Groupe unité - Remove Charme_random_unit from Charme_groupe
-------- Et comme on demande à  la boucle de se répéter aussi souvent qu'il y a d'unités dans le groupe, tout le monde aura le droit à  son petit Dummy Charme --------
-------- Très important: on supprime le point pour éviter le leak --------
Custom script:   call RemoveLocation( udg_Charme_point )
Custom script:   call DestroyGroup( udg_Charme_group )


La version jass de l’effet du sort.
A utiliser avec le JassNewGenPack.
Permet de ne pas utiliser de variables globales (cf la première partie de la rubrique déclencheur) autre que la distance réglée en fonction du sort. Et encore on pourrait s’en passer.
Ici je n’ai mis qu’une seule condition : le groupe d’unité prendra en compte tout ennemi (et non tout ennemi non héros/non bâtiment)
Secret:

Jass:
 //La condition: si le sort lancé est notre charme de Zone
function Trig_Charme_action_en_jass_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction
//L'action du déclencheur
function Trig_Charme_action_en_jass_Actions takes nothing returns nothing
local unit u = GetTriggerUnit() // L'unité qui lance le sort
local player pl = GetOwningPlayer(u) // Le joueur possédant le lanceur de sort
local location p = GetSpellTargetLoc() //Le point ciblé
local group g = GetUnitsInRangeOfLocAll(udg_Charme_distance[GetUnitAbilityLevelSwapped('A000', u)], p) //Toutes les unités situées dans le rayon correspondant au niveau du sort
local unit target //Ce qui sera la cible du dummy durant la boucle

 

   
    loop
        set target = FirstOfGroup(g) //On cible une première unité
        call GroupRemoveUnit(g, target) //On la supprime du groupe
        exitwhen (target == null) //La boucle s'arrêtera quand il n'y aura plus d'unités dans le groupe
        if (IsUnitEnemy(target, pl) then //Et on applique le sort uniquement si l'unité target est un ennemy du lanceur du sort
        call CreateNUnitsAtLoc( 1, udg_Charme_dummy_type, pl, p, bj_UNIT_FACING )// on créé n1 petit dummy pour le lanceur de sort sur le point ciblé, et on se moque de ce qu'il regarde de toute façon personne ne le voit
        call IssueTargetOrderBJ( GetLastCreatedUnit(), "charm", target ) //Et pan! On lui ordonne de charmer notre cible. Ironiquement la cible sera charmée par un être invisible. La classe.
        call UnitApplyTimedLifeBJ( 2.00, 'BTLF', GetLastCreatedUnit() )//La beauté est éphémère. Notre charmeur n'existera que deux secondes.
        else//On n'oublie pas d'écrire le esle et le endif sinon le jeu ne va pas apprécier.
        endif
    endloop//Ibid pour la boucle.
//Et le plus important: on supprime toute source de leak.
call RemoveLocation( p)
set p = null
call DestroyGroup(g)
set g = null
set u = null
set target = null
set pl = null
endfunction

//===========================================================================
function InitTrig_Charme_action_en_jass takes nothing returns nothing
    set gg_trg_Charme_action_en_jass = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Charme_action_en_jass, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Charme_action_en_jass, Condition( function Trig_Charme_action_en_jass_Conditions ) )
    call TriggerAddAction( gg_trg_Charme_action_en_jass, function Trig_Charme_action_en_jass_Actions )
endfunction

 



IV/ Conclusion

Et voilà. Les possibilités de cette méthode sont larges : on peut faire des sorts de Feu Sacré de zone, de Sarment de zone, de Boule de foudre de zone etc…Il suffit de changer le sort du dummy Wink

Télécharger la map
_________________


Dernière édition par jk2pach le 26/01/09 17:58; édité 2 fois
Revenir en haut
 Batt
Membre honoraire


Inscrit le: 25 Jan 2009
Messages: 392
Sujets: 43



MessagePosté le: 26/01/09 16:49    Sujet du message: Citer

Pas de problème à suivre le tuto, meme pour un débutant...

Faudra par contre surement paramètrer plus en détails le Sort créé à partir de canaliser en fonction des besoins.

SUPER TUTO
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 26/01/09 17:57    Sujet du message: Citer

Edit: ajouté le destroy group. Je l'avais complètement oublié.
_________________
Revenir en haut
 kapoka
Membre a fort taux de post


Inscrit le: 21 Aoû 2007
Messages: 915
Sujets: 47
Spécialité en worldedit: Faire des maps avec 500 déclos en GUI alors que 2 en JASS suffisent
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 27/01/09 19:33    Sujet du message: Citer

Pourquoi on a besoin de choisir une unité aléatoire ?


Comment peut on faire pour limiter le nombre d'unité. Genre le charme va prendre que 3 unités dans la zone au niveau 1, au niveau 2 il en prendre 4 et au niveau 3 il en predra 5 ?
_________________
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
 jk2pach
Invité








MessagePosté le: 27/01/09 19:56    Sujet du message: Citer

L'unité choisie au hasard: parce qu'en Gui c'est la seule méthode pour sélectionner successivement toutes les unités du groupe en passant par une boucle.

En revanche, pour ta demande (3, 4 , 5 unités...) il suffit de remplacer

For each (Integer A) from 1 to Charme_entier, do (Actions)

par

For each (Integer A) from 1 to Ton Nombre, do (Actions)

Si tu veux régler dès le début le nombre en fonction du niveau, tu mets en place une variable entier de déploiement (exemple: nombre_cible) et dans le premier déclencheur (initialisation) tu règle nombre_cible[1] = 3 etc...

Enfin, tu mets

For each (Integer A) from 1 to nombre_cible[Level of (Charme de Zone) for (Triggering Unit)], do (Actions)
_________________
Revenir en haut
 Keitaro_Ura
Floodozaurus


Inscrit le: 21 Aoû 2007
Messages: 2073
Sujets: 38
Spécialité en worldedit: Oui
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #2 (Quantité : 1)

MessagePosté le: 27/01/09 20:01    Sujet du message: Citer

C'est la même méthode que j'avais posté pour le Sarments de zone et la Brûlure de mana de zone Wink

Bon tuto.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 28/01/09 22:36    Sujet du message: Citer

Passé en officiel
_________________
Revenir en haut
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Créateur de race (Quantité : 1)

MessagePosté le: 10/02/09 18:48    Sujet du message: Citer

J'essaye (ça n'en est qu'au stade expérimental) de faire un système automatisé de passage à des sorts de zone n'utilisant pas le JNGP (même si c'est débile de pas s'en servir vJass ou pas) et ne fonctionnant qu'avec l'éditeur de compétences et le set de variables (pas d'autres triggers à faire). Si les résultats sont concluants et à moins d'inconvénients trop nombreux, je la posterai ici.

Edit : Voici une première mouture. Si des gens pouvaient la tester et essayer d'autres sorts, ce serait cool.
Cette carte de test nécessite le Jass NewGen Pack à cause de trois triggers de test. Si vous ne l'avez pas, supprimez-les tout simplement.

Télécharger la map : passage de sort simple à sort de zone
_________________


Dernière édition par Rhadamante le 11/02/09 18:41; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Baltha28
Membre actif


Inscrit le: 01 Fév 2009
Messages: 147
Sujets: 32



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

J'ai suivi le tuto exactement (je crois que je n'ai pas fait d'erreur) mais je ne peux utiliser le sort de zone qu'une fois, ensuite un effet apparait et le dummy n'ait pas créé (sûrement l'effet du sort canaliser habituel)
si quelqu'un pourrait m'aider (j'envoie la map test sa peux toujours aider)
Télécharger la map
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 10/02/09 19:34    Sujet du message: Citer

@Baltha28:

-déjà j'ai modifié les ordres chaînes de tes sorts qui étaient tous les deux "channel".
-ensuite ton feu sacré de zone: dans les unités que tu ajoute au groupe, tu ne prends que les unités alliées.(Pour un feu sacré mieux vaut prendre toutes les unités).
-j'ai retesté ma map exemple: le sort marche sur les 4 groupes d'unités neutre hostile.

J'ai ensuite reglé le rechargement de canaliser sur 1 seconde. Là, le feu sacré fonctionne deux fois -_-

Mais je n'ai pas trouvé Sad
_________________
Revenir en haut
 Baltha28
Membre actif


Inscrit le: 01 Fév 2009
Messages: 147
Sujets: 32



MessagePosté le: 10/02/09 19:53    Sujet du message: Citer

Ah dommage ^^ je comparerais ma map à la tienne histoire de chercher un peu + Very Happy
merci de ton effort ^^
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Rhadamante
Petit flooder


Inscrit le: 28 Aoû 2007
Messages: 1457
Sujets: 24
Spécialité en worldedit: Bêêh hé hé hé !
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Créateur de race (Quantité : 1)

MessagePosté le: 11/02/09 00:41    Sujet du message: Citer

Apocalypse a écrit:
-j'ai retesté ma map exemple: le sort marche sur les 4 groupes d'unités neutre hostile.


Etrange pourtant il s'y trouve plusieurs erreurs, qui ne sont pourtant pas dans le tutoriel.

Gui:
Trigger:
Custom script:   call RemoveGroup( udg_Charme_group )


La fonction RemoveGroup n'existe pas, la variable udg_Charme_group non plus (et oui le "e" manque"). Mais de toute façon je crois que le problème vient du fait que tu détruises un groupe que tu réutilises.

Soit tu mets un custom script au début pour faire du groupe une locale (astuce qui ne fonctionne que pour une variable par déclencheur) :
Gui:
Trigger:
Custom script:   local group udg_Charme_groupe = CreateGroup()


Et dans ce cas tu dois le détruire par le DestroyGroup() à la fin.
Soit tu rajoutes juste avant le Pick Every Unit, le custom script :

Gui:
Trigger:
Custom script:   set bj_wantDestroyGroup = true


Qu'on m'arrête vite si je me trompe. En tout cas les tests me donnent raison.

ps : et n'oubliez pas de regardez le système que j'ai fait, et reportez-moi toutes erreurs (cf. plus haut pour les précisions) : Télécharger la map : passage de sort simple à sort de zone
_________________


Dernière édition par Rhadamante le 11/02/09 18:41; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Baltha28
Membre actif


Inscrit le: 01 Fév 2009
Messages: 147
Sujets: 32



MessagePosté le: 11/02/09 13:41    Sujet du message: Citer

Donc selon toi sa serait à cause de la destruction du groupe ?
j'essaie et je met à jour le plus rapidement possible mon message Smile

Edit : j'ai enlevé le destroy group et je peux faire le sort plusieurs fois mais il y a toujours un effet violet bizarre qui est sur moi et sur le point du centre du sort lorsque je lance le sort sur aucune unité. Mais ce n'est pas très grave ; le principale c'est que sa marche Rolling Eyes
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 11/02/09 14:48    Sujet du message: Citer

L'effet c'est que sur la cible du sort tu n'as pas enlevé le graphisme du sort canaliser.
_________________
Revenir en haut
 Baltha28
Membre actif


Inscrit le: 01 Fév 2009
Messages: 147
Sujets: 32



MessagePosté le: 11/02/09 18:28    Sujet du message: Citer

ah oui youps Wink mais pour le sort feu sacré est ce qu'il y aurait un moyen de faire que le héros qui lance le sort en profite aussi ?
_________________
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  Suivante
Page 1 sur 2
La question posée dans ce topic a été résolue !

 
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