online faq recherche accueil
 

Il y a 212 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Compétence multiniveau

 
n°4589329
lafamillex
Posté le 15-04-2007 à 12:40:01  profilanswer
 

Bonjour à tous !
J'essaie de faire une tourelle qui intégrère une recherche d'une compétence (ici assomoir) avec 3 niveaux.
Jusque là pas de probleme : j'active en recherche disponible la mise à jour voulu avec ses 3 niveaux d'amélioration, je rajoute à l'unité la compétence souhaité avec comme condition la mise à jour.
Le niveau 1 se passe bien : la compétence n'est pas active tant que la recherche n'a pas été effectué.
Par constre, quand j'effectue la recherche de niveau 2 comment faire pour la compétence passe elle aussi en niveau 2 ?
Est-ce qu'il y a un moyen de le faire sans passer par les triggers ?
 
Sinon je me doute qu'un trigger genre :  
évènement : (rien)
condition : la mise à jour de niveau 2 a été effectué
action : remplacer la compétence assomoir level 1 par la compétence level 2
devrait marcher.
 
Merci pour votre soutient.

n°4589330
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 15-04-2007 à 12:47:45  profilanswer
 

evenement : an unit finit une amélioration
condition : amelioration = X
action : set level of ability Y pour les unités concernés to level of amelioration


Message édité par Troll-Brain le 15-04-2007 à 12:48:23

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4589340
lafamillex
Posté le 15-04-2007 à 14:32:48  profilanswer
 

plusieurs difficultés à appliquer cette méthode :  
 
- tout d'abord il ne s'agit pas d'une amélioration mais d'une recherche : donc si je veux créer une autre unité qui bénéficie de la recherche, elle restera au niveau 1 et pas au 2 si la recherche a déjà été effectué. De plus si j'ai plusieurs unité identique, seule celle ayant effectuée la recherche passera au niveau de compétence 2.
 
- Ensuite j'ai trouvé une condition nommé "researche tech-type" qui me permet de sélectionner la recherche voulu mais pas son niveau. Ainsi si j'utilise cette condition, je ne peux pas choisir qu'à la recherche de niveau 1 équivaut la compétence de niveau 1 et qu'à la recherche de niveau 2 équivaut à la compétence de niveau 2
 
Dans mon cas j'ai une tower qui possède 20 level d'amélioration : speed tower level 1, speed tower level 2, etc...
J'ai créé une recherche disponible dans toutes les towers nommé "assomoir" a qui j'ai assigné une condition de level : pour assomoir level 1 -> speed tower 3, pour assomoir level 2 -> speed tower level 5
et j'ai activé la compétence assomoir (il y a une compétence nommée assomoir et une amélioration nommée assomoir) sur toutes les towers.
 
L'idée est quand la tower atteind un certain level alors l'utilisateur peut effectuer la recherche -> aucun probleme pour ça.
Mais je souhaiterai que quand la recherche atteind le level 2, uniquement les tourrelles ayant des niveaux 5 ou + passe  au niveau de compétence 2.
Les towers ayant un niveau 3 ou 4 reste au niveau de compétence 1. Uniquement si une tower de niveau 4 est upgrader au niveau 5, alors son niveau de compétence passe au niveau 2.
 
Toute la difficulté pour réalisé mon ou mes trigger étant de vérifier le niveau de la recherche voulu.

n°4589344
lafamillex
Posté le 15-04-2007 à 17:02:57  profilanswer
 

finalement j'y suis arrivé alors je vais poster la solution pour ceux qui éventuellement serait confronté à la meme difficulté :  
 
J'ai d'abord créer une variable (entier) nommé assomoirRED. Y'en a une par joueur et elle correspond au niveau technologique de cette upgade pour chacun des joueurs
Ensuite mon premier trigguer :  
evenement : a unit owned by joueur 1 termine une recherche
condition : researched-type = assomoir
action : set assomoirRED = assomoirRED + 1
Il faut en faire 1 par joueur
 
Ensuite j'ai fait une variable joueur que j'ai appelé PlayerTech
enfin j'ai fait un trigger généraliste
 
Condition :  
a unit termine une recherche
a unit termine une construction
a unit termine une amélioration
 
condition :  
aucune
 
action :
if assomoirRED = 1
 then  
   playtech = joueur 1
   pick every unit owned by joueur tech  
 Do
      if picked unit = speed tower level 3 or if picked unit = speed tower level 4 [...] or if picked unit = speed tower level 20
      then set level of competence assomoir = 1
      else do nothing
  else do nothing
 
action :
if assomoirRED = 2
 then  
   playtech = joueur 1
   pick every unit owned by joueur tech  
 Do
      if picked unit = speed tower level 4 or if picked unit = speed tower level 5 [...] or if picked unit = speed tower level 20
      then set level of competence assomoir = 2
      else do nothing
  else do nothing
 
Après faut rajouter les lignes pour les autres joueurs.
J'espère que ce message servira à d'autres personne
+

n°4589345
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 15-04-2007 à 17:10:59  profilanswer
 

Pas trés optimisé tout cela mais l'effort est louable  :D
Au lieu de faire X triggers pour X joueurs et X variables, tu peux faire un seul trigger mais avec une variable deployée (ca fonctionne comme un tableau) et en index de la variable déployée tu mets le numero du triggering player.


Message édité par Troll-Brain le 15-04-2007 à 17:16:17

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4589346
lafamillex
Posté le 15-04-2007 à 18:05:30  profilanswer
 

C'est comme une sorte de matrice c'est ça ?
J'ai regardé dans le menu création de nouvelle variable mais je ne l'ai pas trouvé dans la liste, peut etre comporte-t-elle un autre nom ?
 
Autre question :  
d'un point de vue performance est-ce qu'il faut mieux un trigguer de 1000 lignes ou 10 triguers de 100 lignes ??

n°4589347
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 15-04-2007 à 18:14:55  profilanswer
 

faut juste cocher déploiement.
Ce n'est pas une matrice c'est une liste on spécifie seulement sa taille mais pas sa largeur.
Si tu as une calculatrice casio graphique je penses que tu vois de quoi je parles.

 

Ex: Une variable de type unité nommé UNIT avec un déploiement de 3 donnera cela :

Code :
  1. UNIT[0]
  2. UNIT[1]
  3. UNIT[2]
 

Dans la plupart des types de variables si tu ne spécifies pas le déploiement, par défaut la taille du tableau sera de 8192 (taille maximale) donc de 0 à 8191.
Ce n'est pas vrai pour les groupes unités il faut spécifier la taille.

 

Il vaut mieux un seul trigger, aprés à toi d'utiliser correctement les boucles et les if/then/else

 



Message édité par Troll-Brain le 15-04-2007 à 18:15:53

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4589351
lafamillex
Posté le 15-04-2007 à 18:37:33  profilanswer
 

J'ai utilisé ta technique mais j'ai préférer mettre la compétence en triggering au lieu du joueur soit assomoir[1] correspondant à la variable du joueur 1.  
Sinon je trouve que dans l'autre sens je vais me mélanger un peu les pinceau.
On gagne en visibilité de programmation car dans mon cas çà m'aurait obliger de faire 21x4 variables différentes. Avec ton astuce, j'en ai plus que 21.
 
Mais pour le reste je ne vois pas comment plus optimiser.

n°4589356
Maximaxou
rejoignez les fidèles du JASS
Posté le 15-04-2007 à 19:07:58  profilanswer
 

Citation :

Dans la plupart des types de variables si tu ne spécifies pas le déploiement, par défaut la taille du tableau sera de 8192 (taille maximale) donc de 0 à 8191.

Ayant regardé le code entier d'une map, il me semble que spécifier la taille du tableau sert uniquement à initialiser les x variables du tableaux. Sinon, les variables du tableau sont crées dynamiquement. En clair si on donne une taille de 0 (pour une seule variable), les autres seront crées dynamiquement. Mais peut-être que si l'on ne donne pas de taille en effet, le tableau aura la taille maximale. Je ne savais même pas qu'il était possible de ne pas spécifier de taille.


Message édité par Maximaxou le 15-04-2007 à 19:09:17

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4589380
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 16-04-2007 à 16:10:07  profilanswer
 

Tout à fait d'accord Maximaxou c'est pour cela qu'il faut préciser pour les groupes unités car il faut créer un groupe pour pouvoir l'utiliser. et la valeur par défaut c'est CreateGroup()


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4589410
Maximaxou
rejoignez les fidèles du JASS
Posté le 17-04-2007 à 00:37:38  profilanswer
 

hmmm, en effet. Je me souviens une fois avoir fait set un_groupe = null au lieu de CreateGroup(), l'action add unit to group ne marchait pas, le groupe était toujours vide. J'avais d'ailleurs galéré pour trouver mon erreur.


---------------
Dota c'est bien, le slide c'est encore mieux !

Aller à :
Ajouter une réponse