StarCraft® II

Changer la couleur d'une unité plusieurs fois

Bonjour à tous, je me suis mis en tête récemment de créer un Tower Defense. Après avoir parcouru plusieurs forum et vu quelques tuto (notamment ceux youtube de VisionElf :p) j'ai créer un TD basique.

Afin de le faire évoluer je voudrais pouvoir faire évoluer une tour spécifique (durant le jeu). Techniquement je créer une capacité lié à un effet de type "appliquer un comportement", le dit comportement donne un bonus de dégâts. Si j'ajoute à l'acteur de ma tour un événement qui se déclenche lorsque mon effet démarre et qui joue une action "définir la nuance de couleur" ça fonctionne. En jeu lorsque je déclenche la capacité j'ai bien le bonus de dégât d'une part et le changement de couleur.

Mon problème c'est que je voudrais pouvoir faire plusieurs "amélioration" (activation de la capacité pour être exact) avec à chaque fois un bonus des dégâts (ça, ça fonctionne en modifiant le nombre cumulable du comportement) et modifier la couleur de la tour à chaque "amélioration" (ne fonctionne pas). Savez-vous comment faire ?

PS : d'autres petit trucs lié à cette capacité que j'aimerais pouvoir modifier
    Actuellement j'ai mis un coût technologique sur ma capacité mais je ne sais pas comment le modifier pour que "l'amélioration" suivante soit plus cher.

    Actuellement l'effet donne un bonus de dégât, je préférerais modifier les dégâts de base de la tour plutôt que lui donner un bonus si c'est possible.

    Actuellement je ne sais pas combien de fois la capacité a été appliqué. Comment le savoir ? Ça me permettrait notamment de pouvoir connaitre le prix total de la tour afin d'une éventuelle revente
Modifié par DarkWolf le 13/02/2012 22:26 CET
Répondre Citer
Bonsoir,

Tu dois tout bêtement "effacer la couleur de teinte" avant d'appliquer une autre action "définir la nuance de couleur" dans tes évènements d'acteurs.

---

Dans tes déclencheurs, tu peux associer un message d'acteur de type signal à l'acteur pour qu'il effectue la tâche correspondante.

Dans tes évènements d'acteurs, ajoutes un évènement "Signal" et un nom que tu veux (je prends "Clear" dans mon exemple). En action de cet évènement, tu indiques "Effacer la couleur de teinte". Bien entendu, il faut qu'il y ait une "Teinte1" d'appliqué avant d'effacer.

Enfin, dans ton déclencheur, tu envoies un message d'acteur à un acteur de type "Signal" avec le nom que tu as spécifié ("Clear").

En outre, dans tes déclencheurs, pour appliquer une seconde teinte, tu envoies un signal "Clear" et juste après, un signal "Teinte2".
Modifié par Ouchon le 13/02/2012 23:17 CET
Répondre Citer
Merci de ta réponse rapide mais ça ne marche pas. Je détaille ce que j'ai (mal ?) fait :

j'ai pour l'événement Effect.BonusDegat.Start l'action "effacer la couleur de teinte" et dessous pour le même événement l'action "définir la nuance de couleur".
Lorsque je déclenche une première fois la capacité la tour change de couleur (avec un message d'avertissement puisqu'il n'y a aucune couleur à enlever). Lorsque je redéclenche la capacité la couleur ne change pas (et plus de warning puisque la couleur existe bien). Je pense qu'il a envelé puis réappliquer la même puisque je ne sais pas lui dire d'utiliser d'abord un bleu puis un vert puis un jaune pis de boucler par exemple.

Je pense qu'il faudrait conditionner les événements mais je vois pas sur quoi me baser (l'idéal serait de lui dire d'appliquer une couleur plus clair mais je ne vois pas non plus comment utiliser de variable la dedans)
Répondre Citer
J'ai modifié mon précédent message.

Il s'agît d'une solution parmi une autre. Je sais qu'elle fonctionne.

EDIT : N'oublies pas de donner un nom au champ "Label" ("Teinte1", "Teinte2" par exemples).
Ensuite tu références ces mêmes labels pour l'effacement (je crois que ce n'est pas obligatoire pour l'effacement et pour l'application d'une teinte, je ne sais pas mais il vaut mieux en mettre un).
Modifié par Ouchon le 13/02/2012 23:20 CET
Répondre Citer
Autre chose, ce que tu cherches à faire est indépendant des déclencheurs.

A ce moment là, il faudrait que tu aies un évènement d'acteur commun pour effacer cette teinte.
Tu pourras jouer sur les "Status" qui portent un sous-nom ET une valeur.
Selon cette valeur, tu pourrais appliquer la teinte que tu veux.
Cependant, pour effacer, il faut que tu trouves quelque chose d'unique (effet, comportement, capacité ...) qui soit exécuté à chaque fois. Cette chose DOIT impliquer la modification de teinte.
Modifié par Ouchon le 13/02/2012 23:25 CET
Répondre Citer
A force de te relire je commence à entrevoir les prémices d'un début de compréhension ;)

De ce que je comprend tu me conseilles de faire un déclencheur qui s'active sur l'effet qui m’intéresse. Il enverrait un message à l'acteur concerné pour effacer la couleur puis un autre message avec la bonne couleur à appliquer. C'est ça ?

Demain j'essaierais de créer le déclencher et les envois / réceptions de signaux. En admettant que j'arrive à faire ça il reste un problème. Comment savoir le "niveau" de ma tour ? Il y a un moyen de récupérer le nombre de fois que la capacité a été utiliser sur l'unité ? Dans le déclencheur je vois bien une action pour définir le niveau de la capacité (mais pas comment le connaitre).
Répondre Citer
Je t'ai donné deux solutions :
- La première consiste effectivement de passer par les déclencheurs.
- La seconde à rester exclusivement (ou plutôt inclusivement) dans les évènements d'acteur.

La première méthode est la plus claire et la plus simple. A contrario de la seconde.


Déclencheur A

Evènements -
------- Ce que tu veux.
Conditions -
------- Ce que tu veux.
Actions -
Acteur - Envoyer le message "Signal Clear" à l'acteur (Acteur pour TON_UNITE)
Acteur - Envoyer le message "Signal Teinte1" à l'acteur (Acteur pour TON_UNITE)


Note : Je rappelle que le signal "Clear" a pour action d'acteur "Effacer la couleur de teinte" et le signal "Teinte1" a pour action d'acteur "Définir la couleur de teinte".

---

Pour résoudre ton problème, il vaudrait mieux que tu passes par un objet de données appelée "Amélioration".
Ces dernières te permettent d'appliquer des effets (d'amélioration) à tes unités (spécifiées).
Une image pour illustrer :
http://sd-5.archive-host.com/membres/images/151307787413145835/SC2_-_Teinte_et_amelioration.png
(Désolé de "teaser" un peu mais c'est image prise depuis la carte du Mod sur lequel je travaille et j'ai pas vu certains textes à cacher. ^^')

Tu dois au minimum paramétrer :
* Amélioration : Effets +
* Amélioration : Matrice d'unité affectée +
* Amélioration : Niveau maximum

En fait, il faudrait que tu aies un déclencheur qui attende (= évènement(s)) que c'est la capacité "Améliorer ma tour" qui est lancée.
Cela implique que l'on va vérifier (= condition(s)) que c'est la bonne capacité lancée.
Et par conséquent, on exécute (= action(s)) les instructions que l'on veut.

NOTE : Pour l'évènement, soit tu fais comme suit ; soit tu indiques que le déclencheur attend "N'importe quelle commande de capacité" ET dans les conditions, tu fais vérifier que (d'après mon exemple) l'ordre déclencheur est égal à la commande de capacité TA_CAPACITE.


Déclencheur B

Evènements -
Unité - N'importe quelle unité a reçu un ordre de TA_CAPACITE
Conditions -
------- Ce que tu veux.
Actions -
Arbre technologique - Définir le niveau d'amélioration TON_AMELIORATION à NIVEAU_SOUHAITE pour le joueur NUMERO_JOUEUR
Acteur - Envoyer le message "Signal Clear" à l'acteur (Acteur pour TON_UNITE)
Acteur - Envoyer le message "Signal Teinte1" à l'acteur (Acteur pour TON_UNITE)


Voilà, normalement, tu as tout.

---

BONUS : Tu peux jouer sur le système de pré-requis à employer pour ta capacité selon le niveau de l'amélioration TON_AMELIORATION du joueur.
Cela empêchera le joueur de cliquer s'il ne possède pas les entités qui permettent de déverrouiller le niveau suivant de la capacité (et donc de l'amélioration).
Attention, ce n'est pas une chose aisée, il y a quelques petites choses à savoir sur les pré-requis.


Il y a des choses qu'il faut savoir à propos des prérequis : Ils sont vicieux.
Il faut savoir que les prérequis de type "Utiliser" permettent de verrouiller et déverrouiller quelque chose (capacité, amélioration, unité, etc etc).
Et que le type "Montrer" sert à afficher ou à masquer le bouton de la chose verrouillée ou déverrouillée.
Les deux types peuvent être combinées.
Répondre Citer
Merci j'ai compris la théorie mais je péche sur son application. J'ai créer l'amélioration et le déclencheur et utiliser l'action "envoyer un message à l'acteur de l'unité " . En message je choisis "définir la nuance de couleur" en prenant une couleur (je ferais un switch sur le niveau de l'amélioration plus tard).

Côté acteur (qui à obligatoirement le modèle :/ ) je ne sais pas quoi mettre. Si en événement je met signal en spécifiant en nom mon unité l'action ne se déclenche pas. Par ailleurs vu que le message contient l'action à appliquer existe-il une action qui appliquerai directement le message reçu ?

Ps . Je sens que je vais devoir créer nombre de tour x nombre de niveau voulu amélioration avec les coût qui vont bien... Il existe un moyen de faire plus simple pour modifier le coût ?
Répondre Citer
Stop.

Recommençons.

Il faut savoir distinguer les évènements d'acteurs de l'acteur sélectionné qui se trouvent dans l'éditeur de données et les évènements du déclencheur donné dans l'éditeur de déclencheur.

En fait, tu configures ton acteur pour qu'il ait un truc de ce type :

Signal.*.Teinte1
SetTintColor {255, 128, 64 4.000000} 2.000000 OneShot LABEL 200.000000

Signal.*.Teinte2
SetTintColor {64, 128, 255 4.000000} 2.000000 OneShot LABEL 200.000000

Signal.*.Clear
ClearTintColor 0.000000 LABEL


Note : LABEL est optionnel.

Puis, et seulement après, tu fais ce que je t'ai écrit plus haut.

Note : Tu dois utiliser l'action "Envoyer un message d'acteur".

Pour les coûts, si disponible (car normalement, une capacité qui a un coût doit pouvoir être dans les effets d'amélioration), tu peux ajouter un effet (d'amélioration) qui ajoute un certain montant à la ressource qui doit subir une augmentation de coût.
Modifié par Ouchon le 14/02/2012 15:53 CET
Répondre Citer
Toujours un problème...
Dans mon déclencheur j'utilise l'action "Envoyer un message d'acteur" avec pour message "Signal clear" pour "l'unité déclencheuse" du déclencheur. Puis une seconde action avec "Signal teinte1".

Dans mon acteur j'ai un événement "signal.*.clear" avec en action "ClearTintColor 0.000000 LABEL" et un autre événement "signal.*.teinte1" avec en action "SetTintColor {255, 0, 0 4.000000} 2.000000 OneShot LABEL 200"

Lorsque j'utilise l'amélioration, le déclencheur s'active (visible dans le debugguer et grace à un "coucou") mais la tour ne change pas de couleur... une idée de ce que j'ai mal fait ?


PS : j'ai bien compris qu'il y a des événement d'acteur (mon 2nd §) et des événement de déclencheur (mon 1er §), de même pour les actions. Pour mon information peux-tu me dire où mon vocabulaire prête à confusion ?

edit : j'ai également essayer de mettre en message "définir le texte" avec teinte1 mais ça ne marche pas plus
Modifié par DarkWolf le 14/02/2012 19:24 CET
Répondre Citer
14/02/2012 19:22Publié par DarkWolf
Dans mon déclencheur j'utilise l'action "Envoyer un message d'acteur" avec pour message "Signal clear" pour "l'unité déclencheuse" du déclencheur.


Pour l' "Unité déclencheuse" ?
A ce moment là, j'aimerai connaître l'évènement que tu as mis dans ton déclencheur.

En fait, si tu fais référence à "Unité déclencheuse", ça veut dire que c'est une unité qui a déclenché un évènement de type 'Unité'.

Or, je t'avais dit que c'est le joueur qui clique sur une capacité. Donc l'évènement ne correspond pas avec ce que Blizzard appelle "Réponse d'évènement" (et je suis d'accord avec eux) comme "Unité déclencheuse", "Région déclencheuse" etc etc.

Tu devrais avoir, normalement, une variable de type "Unité" qui permet de stocker une unité.
Définies ta variable (A) comme stockant ton unité et utilises cette variable dans l'action "Envoyer un message d'acteur" pour ton acteur d'unité (A).
Répondre Citer
2 captures d'écrans valent mieux qu'un long discours :)
déclencheur :
http://dark11wolf.free.fr/ftp/SC2/Declencheur.png

acteur :
http://dark11wolf.free.fr/ftp/SC2/acteur.png
Répondre Citer
Plusieurs erreurs.

Déclencheur :

L'évènement n'est pas le bon si et seulement si ta capacité n'est pas une capacité de type "Rechercher", sinon l'évènement est bon.

En fait, si tu lis l'aide qui figure en bas de la fenêtre lorsque tu sélectionnes ton évènement, tu verras que la "Réponse évènement" que tu as défini dans ta variable "uniteCourante" n'apparait pas. Ceci signifie que ça n'aura pas d'effet (cela peut mener à un avertissement via le débogueur pour signaler un problème).

Tu dois savoir que le paramètre "Unité" de cet évènement est l'unité qui est en train d'effectuer cette recherche (via la capacité de type "Rechercher" qui permet d'augmenter de 1 le niveau de l' "Amélioration" liée à cette recherche).

Je te propose de résoudre ça comme ça :

Déclencheur A
Evènements -
Unité - La progression de la recherche de N'importe quelle unité est Terminé
Conditions -
Ou -
Type d'unité de (Unité déclencheuse) == Tour_type_1
Type d'unité de (Unité déclencheuse) == Tour_type_2
Type d'unité de (Unité déclencheuse) == Tour_type_3
Variables locales -
------- Ce que tu veux.
Actions -
Acteur - Envoyer le message acteur "Signal Clear" à l'acteur principal de l'unité (Unité déclencheuse)
Acteur - Envoyer le message acteur "Signal Feu1" à l'acteur principal de l'unité (Unité déclencheuse)


Si j'ai bien compris, c'est la tour qui possède la capacité permettant de s'améliorer elle-même.
Donc normalement, pas de soucis au niveau de ce déclencheur.

---

Acteur :

Je t'avais écrit ceci :
Signal.*.Teinte1
SetTintColor {255, 128, 64 4.000000} 2.000000 OneShot LABEL 200.000000

Signal.*.Teinte2
SetTintColor {64, 128, 255 4.000000} 2.000000 OneShot LABEL 200.000000

Signal.*.Clear
ClearTintColor 0.000000 LABEL


Et je t'avais parlé du label (ici : LABEL).
Ce que tu dois savoir, c'est que :
- Définir un label pour ta teinte est optionnel.
- Définir un label pour effacer (une teinte ou autre) ordonne à l'action d'acteur de trouver une action d'acteur qui porte le label que tu as spécifié.

Si je lis tes évènements d'acteur, le signal "Clear" cherche une action d'acteur qui porte un label LABEL. Or il ne risque pas d'effacer une teinte où aucune de ces teintes portent ce même label LABEL.
Répondre Citer
Oki merci, ça fonctionne. Lorsque j'ai renseigné ma variable je n'ai pas vu unité déclencheuse (en gris).

Un gros merci en tout cas :)
Répondre Citer
De rien !

Surtout, n'hésites pas à poser tes autres questions sur ce forum ! ;)
Répondre Citer
Bonjour,

J'ai une petite question, enfaîte quand je joue à starcraft 2 sur la mini-map et sur mon écran toutes les unités et les bâtiments adverses sont en rouge, toutes les unités alliées sont en jaune et toutes les miennes sont en vert a chaque fois et bon sa commence a être un peut gonflant.
si quelqu'un peut m'aider ce serait cool.

Merci.
Répondre Citer
@Nalayi

Tu as un bouton à coté de la minimap avec des pauv'mains qui se serrent. Tu es en fait en vue par alliance là.
Modifié par Darkblob le 01/05/2012 18:06 CEST
Répondre Citer

Veuillez nous signaler toute violation de nos chartes, comme :

Menaces de violences. Nous les prenons très au sérieux et alerterons les autorités compétentes.

Les messages contenant des informations personnelles sur d’autres joueurs. Ceci inclut notamment les adresses postales et e-mail, les numéros de téléphone et les photos et vidéos inconvenantes.

Harcèlement et discriminations. Nous ne tolérons pas ces comportements.

Code de Conduite sur les forums

Signaler le message # écrit par

Raison
Explication (256 caractères max.)
Envoyer Annuler

Signalé !

[Fermer]