Posté le: 09/05/12 14:22 Sujet du message: Position d'unité aléatoire
Bonjour à tous, je ne sais pas si je dois poster ici ou dans "sorts". Je pense qu'ici ce sera plus adapté car ce que j'aimerais faire peux servir pour autres choses que des sorts.
Alors voila, j'ai un boss de feu, je lui ai donné le sort canaliser qui dure 15s et avec un temps de recharge de 45s (30s de temps libre). C'est une unité et non un héros donc le sort est réglé en conséquence. Lorsque celui-ci lance sont sort, il devient invincible et perd sa mobilité (pour éviter les bugs/cheat) et toutes les secondes un effet spécial "phénix" tombe à la position d'une unité au hasard (on peut donc l'esquiver mais faut être rapide). Sur une ancienne map, avec mon système de sélection au cas par cas, je pouvais le faire facilement et j'avais 8 variables (pour 8 joueurs) de type unité qui était égale à "last created unit". Du coup j'avais créé 2 variable réél X et Y et je leurs attribuaient la position d'une des 8 variables en fonction du nombre tiré aléatoirement. Sur ma map je ne peux pas et je ne sais pas du tout comment faire. Je vous met un semblant de déclencheurs que j'ai triffouillé et qui est faux pour vous donner un peut la manière de penser que j'ai derrière ce sort.
Secret:
Gui:
Trigger:
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Burning
Actions
Unité - Make (Triggering unit) Invulnérable Unité - Set (Triggering unit) movement speed to 0.00 Set aleatoire = (Random integer number between 1 and Nbr_joueurs)
For each (Integer A) from 1 to 15, do (Actions)
Boucle - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
aleatoire Egal à 1
Alors - Actions
Set X = (Real(JE NE SAIS PAS ??????????)) Set Y = (Real(JE NE SAIS PAS ?????????????)) Effet spécial - Create a special effect at ((Center of (Playable map area)) offset by (X, Y)) using AbilitiesSpellsHumanMarkOfChaosMarkOfChaosTarget.mdl Unité - Cause (Matching unit) to damage circular area after 2.00 seconds of radius 600.00 at ((Center of (Playable map area)) offset by (X, Y)), dealing 100.00 damage of attack type Sorts and damage type Normal
Sinon - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
aleatoire Egal à 2
Alors - Actions
Set X = (Real(JE NE SAIS PAS ??????????)) Set Y = (Real(JE NE SAIS PAS ?????????????)) Effet spécial - Create a special effect at ((Center of (Playable map area)) offset by (X, Y)) using AbilitiesSpellsHumanMarkOfChaosMarkOfChaosTarget.mdl Unité - Cause (Matching unit) to damage circular area after 2.00 seconds of radius 600.00 at ((Center of (Playable map area)) offset by (X, Y)), dealing 100.00 damage of attack type Sorts and damage type Normal
Sinon - Actions
Ce que je vous demande aujourd'hui est un poil plus compliqué que d'habitude je pense, çà veux dire que je progresse nan ?
En tout cas, merci d'avance pour vos futur réponses. _________________
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 09/05/12 16:24 Sujet du message:
Il faut vraiment que tu apprennes à te servir des boucles d'unités, qui sont beaucoup plus simples d'utilisations que les boucles d'entiers dans ce genre de cas. Ce que tu fais pourrait marcher, mais il faudrait que tu répertories toutes les unités de la map dans des variables, bref, la galère...
Il suffit d'utiliser cette action :
Gui:
Trigger:
Actions
Groupe unité - Pick every unit in (Random 1 units from (Units within 512.00 of (Position of (Triggering unit)))) and do (Actions)
Boucle - Actions
Effet spécial - Create a special effect at (Position of (Picked unit)) using Ton Effet
Sinon SetUnitSpeed a des bornes, je ne crois pas que tu puisse mettre 0 (la vitesse de l'unité ne descendra pas en-dessous d'un certain seuil). Mais à la place, tu peux rendre le sort canalisé (comme tranquillité par exemple), pour qu'un mouvement de l'unité interrompe le sort (il y a un tutoriel là-dessus, dans les explications sur la compétence canaliser).
Aussi, je pense que tu allais mettre un Wait dans ta boucle pour que ça s'exécute toutes les secondes, sache que c'est mal : il entraîne à la fois imprécision et corruption de déclencheur. _________________
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 09/05/12 17:34 Sujet du message:
Ou alors simplement ne pas mettre de boucle :
Gui:
Trigger:
Set Target = Random unit from (Units within 512.00 of (Position of (Triggering unit)) matching ...)
Attention avec le "Unit - Damage area". Je te conseille vraiment de mettre un pick every units pour ça parce qu'on ne peut pas choisir les cibles avec cette action. Si tu utilises des dummy, par exemple, ça va te les tuer. De même, ça va taper le lanceur s'il est dans la zone.
Sinon, on peut mettre la movespeed d'une unité à 0 (ou à 1, me souviens plus) à condition de changer le champs "Movement - vitesse minimale (unité)" dans les constantes de jeu. Par contre, ça ne supprime pas les bonus de mouvement donc si ton unité a des boots of speed +50 et une vitesse de 0, ben elle pourra bouger avec une vitesse de 50 au final. _________________
Trigger: Actions Collapse Groupe unité - Pick every unit in (Random 1 units from (Units within 512.00 of (Position of (Triggering unit)))) and do (Actions) Collapse Boucle - Actions Effet spécial - Create a special effect at (Position of (Picked unit)) using Ton Effet
Je remplace le "random 1 units from ......" par le nombre de fois que je veux que sa le fasse ?
Sinon Sapeur, je demande que çà d'apprendre, et en ce moment je l'utilise souvent donc je suis en train de me l'approprier
En revanche Tirlititi ta variable je ne vois pas comment la faire du premier coup d'oeil, si je triffouille un peut je devrais y arriver mais je vais surement faire comme Sapeur, c'est plus claire dans ma tête _________________
Inscrit le: 14 Oct 2009 Messages: 719 Sujets: 40 Spécialité en worldedit: Les bugs Médailles: 1 (En savoir plus...)
Posté le: 09/05/12 18:05 Sujet du message:
Non, 1 veut dire que la fonction va choisir au hasard 1 unité à 512 de portée de TriggeringUnit. Si tu veux que ça se répète plusieurs fois, tu peux faire une boucle, mais les waits sont déconseillés.
Mais je te recommande tout de même la solution de Tirlititi, c'est plus propre, surtout que tu ne choisis qu'une unité au hasard. _________________
Je me suis débrouillez comme çà, est-ce que c'est bon ?
Secret:
Gui:
Trigger:
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Burning
Actions
Unité - Make (Triggering unit) Invulnérable Unité - Set (Triggering unit) movement speed to 0.00
For each (Integer A) from 1 to 15, do (Actions)
Boucle - Actions
Custom script: set bj_wantDestroyGroup = true
Groupe unité - Pick every unit in (Random (Random integer number between 1 and 5) units from (Units in Attaque Arios <gen>)) and do (Actions)
Boucle - Actions
Effet spécial - Create a special effect at (Position of (Picked unit)) using AbilitiesSpellsHumanMarkOfChaosMarkOfChaosTarget.mdl Unité - Cause (Picked unit) to damage circular area after 1.00 seconds of radius 85.00 at (Position of (Picked unit)), dealing 500.00 damage of attack type Magie and damage type Feu Effet spécial - Destroy (Last created special effect)
Wait 1.00 seconds
Unité - Make (Triggering unit) Vulnérable Unité - Set (Triggering unit) movement speed to (Default movement speed of (Triggering unit))
Désolé d'avoir utilisez un wait je ne vois pas comment faire d'autre. Mais j'ai remarqué que les actions après la boucle se produisent à la fin de celle-ci, mais je reconnais que le wait est imprécis car après des test, il y a deux seconde d'écart entre le fait que mon boss redevienne vulnérable/default movement et la fin des effets du déclencheurs. _________________
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 09/05/12 21:59 Sujet du message:
Un wait peut être remplacé par un timer pour être plus précis. Mais c'est vrai que ça complique un peu la chose, surtout en GUI (il faut créer un 2nd déclencheur et trouver un moyen de garder en mémoire les unités...).
Bon, là tu balances un effet "MarkOfChaos" et des dégâts jusqu'à 5 unités par vague alors que ce que tu avais plutôt l'air de vouloir ne le faire que sur 1 unité par vague.
Ensuite, ton boss peut s'infliger des dégâts à lui-même...
Bon, je te le fais en GUI parce que c'est pour un boss et qu'il ne faut pas le rendre MUI, à priori.
Secret:
Gui:
Trigger:
Burning1
Evénements
Unité - A unit Initie l'effet d'une compétence
Conditions
(Ability being cast) Egal à Burning
Actions
Set BurningCaster = Triggering unit Set BurningWaves = 15 Set BurningWaveIndex = 0 Set BurningCurrentWaveIndex = 0 Custom script: set bj_wantDestroyGroup = true Set BurningTarget = Random unit from (Units in Attaque Arios <gen> matching (Matching unit différent de BurningCaster) Set BurningTargetLocation[BurningIndex] = (Position of (BurningTarget)) Effet spécial - Create a special effect at BurningTargetLocation[BurningIndex] using AbilitiesSpellsHumanMarkOfChaosMarkOfChaosTarget.mdl Effet spécial - Destroy (Last created special effect) Set BurningIndex = BurningIndex + 1 Set BurningWaves = BurningWaves - 1 Compte à rebours - Start BurningTimer that will expire in 1 second as répété Compte à rebours - Start BurningWaveTimer that will expire in 1 second as répété
Burning2
Evénements
Compte à rebours - BurningTimer expires
Conditions
Actions
Custom script: set bj_wantDestroyGroup = true Set BurningTarget = Random unit from (Units in Attaque Arios <gen> matching (Matching unit différent de BurningCaster) Set BurningTargetLocation[BurningIndex] = (Position of (BurningTarget)) Effet spécial - Create a special effect at BurningTargetLocation[BurningIndex] using AbilitiesSpellsHumanMarkOfChaosMarkOfChaosTarget.mdl Effet spécial - Destroy (Last created special effect) Set BurningIndex = BurningIndex + 1 Set BurningWaves = BurningWaves - 1
If (BurningWaves inférieur ou égal à 0) Then do (Actions)
Compte à rebours - Stop BurningTimer
Burning3
Evénements
Compte à rebours - BurningWaveTimer expires
Conditions
Actions
Custom script: set bj_wantDestroyGroup = true
Groupe unité - Pick every unit in (Units within range of 85 from BurningTargetLocation[BurningWaveIndex] matching (Matching unit différent de BurningCaster) and do (Actions)
Unité - Cause BurningCaster to damage (Picked unit), dealing 500 damage ...
Custom script: call RemoveLocation(udg_BurningTargetLocation[udg_BurningWaveIndex]) Set BurningWaveIndex = BurningWaveIndex + 1
If ((BurningWaveIndex supérieur ou égal à BurningIndex) and (BurningWaves inférieur ou égal à 0)) Then do (Actions)
Merci bien par contre, tu pourrais détaillez les variables rapidos stp......je me perds sur certaines d’entre elles.
Sinon, si je veux raccorder d'autre type de sort un peut comme çà, çà marchera toujours ?
EDIT : oui à la base je voulais que çà touche une seul unité mais j'aime bien l'aléatoire c'est plus fun.
EDIT 2 : Enfaite je vais garder mon wait, sa joue en ma faveur. Sinon pour l'histoire des dégâts sur le boss, j'ai mis cette ligne :
Gui:
Trigger:
If ((Picked unit) Egal à (Triggering unit)) then do (Unité - Set life of (Triggering unit) to 500.00) else do (Do nothing)
Ne t'inquiète pas, les 3 déclo que tu m'as fais serviront quand même à quelques choses dans le futur, ou serviront pour des personnes qui liront le post
EDIT 3 : pas besoin de rajouter de la vie au boss, après plusieurs test, il ne prend pas de dégâts. _________________
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