Posté le: 18/02/10 14:21 Sujet du message: Correctement sélectionné les joueurs
Bonjour !
Voici le problème sur le quel je planche depuis deux jours :
Je crée une carte sur la quel tout les sorts sont des sorts personnalisé.
Et évidement je veux faire des sorts à effet de zone. J'ai donc trouvé dans un tuto ( ou je ne sais plus où ailleurs ) un système qui s'occupe de sélectionner les unités. Le problème c'est qu'il me sélectionne toutes les unités y compris les unités alliées. J'ai donc essayé de reproduire le système d'unité avec les joueurs :
Gui:
Trigger:
Tourbillon test
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Tourbillon
Actions
Groupe joueur - Pick every player in (All enemies of (Owner of (Casting unit))) and do (Actions)
Boucle - Actions
Groupe joueur - Add (Picked player) to Ennemi
Set Entier_joueur = (Number of players in Ennemi)
For each (Integer A) from 1 to Entier_joueur, do (Actions)
Boucle - Actions
Set TmpPoint = (Position of (Casting unit)) Set Joueur_ennemi = (Random player from Ennemi)
Groupe unité - Pick every unit in (Units within 300.00 of TmpPoint matching ((Owner of (Matching unit)) Egal à Joueur_ennemi)) and do (Actions)
Boucle - Actions
Groupe unité - Add (Picked unit) to Groupe_zone_dummy
Set Entier_dummy = (Number of units in Groupe_zone_dummy)
For each (Integer A) from 1 to Entier_dummy, do (Actions)
Boucle - Actions
Set Dumm_random_unit = (Random unit from Groupe_zone_dummy) Set Degat[(Player number of (Owner of (Casting unit)))] = (Degat[(Player number of (Owner of (Casting unit)))] + ((((Agilité of (Casting unit) (Inclure bonuses)) x 3) + 0) + 0)) Unité - Cause (Casting unit) to damage Dumm_random_unit, dealing (((Real((Agilité of (Casting unit) (Inclure bonuses)))) x 3.00) + 0.00) damage of attack type Chaos and damage type Frappe des ténèbres Panneau de commandes - Change the value for (Owner of (Casting unit)) in Leaderboard to Degat[(Player number of (Owner of (Casting unit)))] Panneau de commandes - Sort Leaderboard by Valeur in Descendant order Set TmpPoint = (Position of Dumm_random_unit) Texte flottant - Create floating text that reads (- + (String((((Agilité of (Casting unit) (Inclure bonuses)) x 3) + 0)))) at TmpPoint with Z offset 30.00, using font size 8.00, color (100.00%, 0.00%, 100.00%), and 0.00% transparency Texte flottant - Change the lifespan of (Last created floating text) to 2.00 seconds Texte flottant - Change the fading age of (Last created floating text) to 2.00 seconds Texte flottant - Change (Last created floating text): Désactiver permanence Texte flottant - Set the velocity of (Last created floating text) to 60.00 towards 90.00 degrees Texte flottant - Montrer (Last created floating text) for (All players) Custom script: call RemoveLocation( udg_TmpPoint ) Groupe unité - Remove Dumm_random_unit from Groupe_zone_dummy
Groupe joueur - Remove Joueur_ennemi from Ennemi Custom script: call RemoveLocation( udg_TmpPoint )
Ça ne me sélectionne plus les unités alliées, mais ca ne sélectionne pas toujours les unités ennemies, du coup le sort fonctionne une fois sur dix à peu prêt.
Si j'ai fait des erreurs merci de me les soulignées afin que je puisse les corriger.
Variable :
Entier_joueur = variable d'entier
Ennemi = Variable groupe de joueur
Joueur_ennemi = Variable joueur
Groupe_zone_dummy = Variable Groupe d'unité
Entier_dummy = Variable d'entier
Dumm_random_unit = Variable d'unité
TmpPoint = Variable de point
Degat = Variable d'entier mais elle n'a pas grand chose à voir avec la sélection des unités
C'est parce que la variable "Joueur_ennemi" désigne un player aléatoirement, et donc si le joueur désigné n'est pas dans la zone du sort, le sort ne marcheras pas.
Citation:
Gui:
Trigger:
For each (Integer A) from 1 to Entier_joueur, do (Actions) Boucle - Actions Set TmpPoint = (Position of (Casting unit)) Set Joueur_ennemi = (Random player from Ennemi)
Groupe unité - Pick every unit in (Units within 300.00 of TmpPoint matching ((Owner of (Matching unit)) Egal à Joueur_ennemi)) and do (Actions)
C'est le bordel dans ton déclencheur.
Déjà, n'utilise jamais "Casting Unit". Si tu veux renvoyer à l'unité qui a déclenché le déclencheur, utilise "Triggering unit".
Et si j'ai bien compris, tu veux simplement faire subir plusieurs actions à plusieurs unités ennemies au "Triggering unit" dans une zone c'est ça ?
Gui:
Trigger:
-------- On défini le centre de la zone du cercle -------- Set LocPoint[0] = (Target point of ability being cast) -------- On défini le groupe qui subira l'action, c'est à dire toutes les unités qui sont dans la zone (ici de rayon 300) étant ennemi au joueur. -------- Set GroupEnnemies = (Units within 350.00 of LocPoint[0] matching (((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Egal à TRUE)) -------- Pour éviter les fuites de mémoire, on détruit le point. -------- Custom script: call RemoveLocation(udg_LocPoint[0])
Donc là on a le groupe d'unités ennemies au "Triggering unit"
Ensuite, le plus intéressant :
Gui:
Trigger:
-------- On répète les actions autant de fois qu'il y a d'unités dans le groupe. --------
For each (Integer A) from 1 to (Number of units in GroupSarments), do (Actions)
Boucle - Actions
-------- On prend une unité au hasard dans le groupe -------- Set RandomUnit = (Last created unit) -------- On défini sa position -------- Set LocPoint[0] = (Center of (Playable map area))
Page 1 sur 1 La question posée dans ce topic a été résolue !
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