online faq recherche accueil
 

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

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

trigger pour sort de zone

 
n°4591697
aesathr
Posté le 15-02-2008 à 19:46:53  profilanswer
 

Bonjour, c'est encore moi ^^
 
Je suis toujours sur ma campagne RPG. Je bloque actuellement sur un trigger permettant de faire en sorte que toutes les unités a portée de la pluie d'étoile filante subissent 4*intelligences en dégats à chaque seconde.
 
etoilelvl1 lancement
    Evénements
        Unité - A unit Commence le lancement d'une compétence
    Conditions
        (Triggering unit) Egal à toto
        (Ability being cast) Egal à Pluie d'étoile filantes (1)
    Actions
        Set etoilelvl1 = (4.00 x (Real((Intelligence of toto (Inclure bonuses)))))
        Wait 1.00 seconds
        Unité - Set life of (Random unit from (Units within 450.00 of (Position of toto))) to ((Vie of (Triggering unit)) - etoilelvl1)
        Wait 1.00 seconds
        Unité - Set life of (Random unit from (Units within 450.00 of (Position of toto))) to ((Vie of (Triggering unit)) - etoilelvl1)
        Wait 1.00 seconds
        Unité - Set life of (Random unit from (Units within 450.00 of (Position of toto))) to ((Vie of (Triggering unit)) - etoilelvl1)
        Wait 1.00 seconds
        Unité - Set life of (Random unit from (Units within 450.00 of (Position of toto))) to ((Vie of (Triggering unit)) - etoilelvl1)
 
 
évidement, non seulement ce truc ne marche que sur une unité, mais en plus ca peut etre mon héros xD (et même en faisant in range matching condition ca marche pas vu que les conditions portent sur l'évenements pas sur les unités in range donc je peux pas utiliser tous les triggering unit) et je trouve pas un moyen de ranger toutes mes unités ayant le buff pluie d'étoile dans un groupe (et encore même comme ca je serais coincé vu que je retomberai sur random unit from unit group...
 
j'ai pas trouvé d'évenement "unit acquiert buff" et même comme ca comme il y a plusieurs unités touchées je peux pas la ranger dans une variable unité... et si j'utilise une variable groupe j'ai a nouveau le probleme de random unit of unit group -_-
 
Enfin voila le topo quoi ^^ j'ai créé un sort qui fait des dégats en fonction de l'agilité ca a très bien marché mais c'était un sort monocible ou je foutait l'unité dans une variable.
 
PS : je sais pas si "Vie of (Triggering unit)" correspond a sa vie max ou a sa vie actuelle mais a priori je dirais actuelle
PS 2 : je sais pas me servir de picked player (jamais eu besoin jusqu'ici)
 
EDIT : j'aurais aussi une question concernant les conditions. Mon héros principal a trois catégories de sorts : combat démoniaque et astral. dans chaque catégorie, il y a un sort actif, un passif et un ultime. Or en théorie, le héros peut apprendre 5 des sorts de base (même s'il ne peut pas les maximiser) plus un seul ultime parmi les trois.
Ca fait donc 6 sorts possible sur les 9, (donc pile la place disponible xD la flemme d'apprendre a utiliser le livre de sort). Or la limite est de 5 (donc il manque 4 sorts qui ne sont pas placable) j'ai donc opté pour un systeme de compétence d'unités (donc une compétence par niveau ^^ ce qui fait en tout 75 compétences 10*6 pour les sorts de base et 5*3 pour les ultimes) qu'on apprend après un lvl up en tapant le nom du sort suivi du niveau souhaité (le suivant).
Jusqu'ici pas de probleme, je cree une variable unuse_skillpoint = 1 de base a laquelle je rajoute 1 apres un lvl up et j'enleve 1 quand on apprend un sort. Je cree une variable par sort et par niveau, false par défaut et qui tourne trus quand le sort est appris (comme ca pour acquérir le niveau suivant je met deux conditions : unuse_skillpoint sup ou égal a 1 et nomdusort_lvlprécédent=true).
quand on apprend un sort de lvl sup a 1 je supprime également l'ancienne compétence qui correspondait au rang précédent.
 
Et la intervient mon probleme !!! sur une seule carte ce systeme fonctionnerait très bien mais dans une campagne, il faut qu'a chaque map initialisation je recree les variables et mette a true celles correspondant au dernier rang des comps que j'ai déja et pour pouvoir faire ca il me faut une condition if heros have "nomdusort [suffixe éditeur pour que je reconnaisse le rang du sort]" et je trouve pas (une condition unit have compétence ferait parfaitement l'affaire quoi ^^)
avec cette condition je pourrais également créer une variable qui soustraite au lvl du héros me dirait quel nombre de point de skill le héros n'a pas utilisé dans la map précédente et permettrait de ne pas faire perdre un point de skill a quelqu'un qui aurait gagné la carte avant d'avoir appris le sort.
 
donc voila et merci d'avance^^


Message édité par aesathr le 16-02-2008 à 14:59:14

---------------
Hmm,hmm...
Non,je vois pas...
n°4591705
aesathr
Posté le 17-02-2008 à 23:01:33  profilanswer
 

Alors j'ai résolu mon probleme pour la condition "if unit have compétence".
 
J'imagine que pour beaucoup d'entre vous ca ne doit pas poser de probleme, mais pour ceux qui se poseraient un jour la question, je n'ai pas trouvé cette condition et je pense qu'elle n'existe pas (si je me trompe rectifiez ^^)
 
mais il y a une condition plus générale qui englobe celle la dans integer : lvl of compétence for unit (dans le cas d'une compétence d'unité on met 1 donc). voila ca aidera probablement personne mais on sait jamais ^^.
 
Sinon je cherche toujours une réponse a mon autre probleme (faire une pluie d'étoile filante qui fasse X*intell de toto -ouais j'ai utilisé le tutoriel game cache sur judge ^^- a tout le monde dans la zone).


---------------
Hmm,hmm...
Non,je vois pas...
n°4591706
zedeathcam​e4u
Posté le 18-02-2008 à 12:20:57  profilanswer
 

Pour ton problème d'étoile, tu fais un pick unit, ensuite un if controller of picked unit different de player1 then dmg else null.

n°4591707
aesathr
Posté le 18-02-2008 à 13:16:49  profilanswer
 

Je suis pas sur du tout d'avoir compris. j'ai précisé que je ne savais pas me servir du tout des pick unit donc y a des chances que je me goure completement en interprétant ta réponse.
 
Ton pick unit si je traduit bien l'anglais ca doit être une action non ? donc je ferais deux action consécutives la premiere pick unit et la 2e en if then elfe (multiple) ou je mettrait la condition "if pick unit have buff pluie d'étoile filante" is true alors make X*intell dammage else do nothing ?
Si j'ai bien compris ton déclencheurs marche pour toutes les unités sur toute la map donc en remplacant la condition par une condition sur le buff je regle le probleme de la zone en même temps que celui.
 
J'essaie ca tout de suite, si j'ai pas compris, encore désolé mais j'ai tout fait pour apprendre tout seul mais j'ai jamais fait d'info ou autre et en commencant un projet d'une certaine "ampleur" (enfin toute proportion gardée hein ^^) je suis confronté a propres limites ^^ désolé si mes questions vous paraissent évidentes.


---------------
Hmm,hmm...
Non,je vois pas...
n°4591709
zedeathcam​e4u
Posté le 18-02-2008 à 19:07:55  profilanswer
 

Pick unit c'est une action qui va sélectionner/mettre en mémoire les unités qui vérifient une condition.. Après pour chacune de ses unité, une action va leur être attribuée.
 
En gros ton déclencheur ressemblera à ça
 
 
Evenement-Une unité commence le lancement d'un sort.
Condition- Ability being cast egal à Pluie
Action-
 
--Déclarationde ta variable de dégats
If lvl of Pluie egal 1 then Dmg=X
If lvl of Pluie egal 2 then Dmg=Y
...-
 
Pick every unit range X (la distance) from casting unit and do action
              If owner of picked unit different de "joueur"[Ou possède tel buff, c'est comme tu veux] then
                 Set life of picked unit to current life of picked unit - Dmg
              else null;
             
 
 
Le "If/then/Else" se trouve à l'intérieur du "Pick unit."

n°4591711
aesathr
Posté le 19-02-2008 à 00:20:31  profilanswer
 

mon déclo c'est ca au final et ca marche très bien.
 
etoile lvl 1
    Evénements
        Unité - A unit Initie l'effet d'une compétence
    Conditions
        (Ability being cast) Egal à Pluie d'étoile filantes [1]
    Actions
        Set degats_etoile = (2.00 x (Real((Intelligence of toto (Inclure bonuses)))))
        Groupe unité - Pick every unit in (Units in (Playable map area)) and do (If (((Picked unit) has buff Etoile filante (Cible)) Egal à TRUE) then do (Unité - Set (Picked unit) movement speed to ((Current movement speed of (Picked unit)) - (Real((Intelligence of toto (Inclure bonuses)))))) else do (Do nothing))
        Groupe unité - Pick every unit in (Units in (Playable map area)) and do (If (((Picked unit) has buff Etoile filante (Cible)) Egal à TRUE) then do (Unité - Set life of (Picked unit) to ((Vie of (Picked unit)) - degats_etoile)) else do (Do nothing))
        Wait 1.00 seconds
        Groupe unité - Pick every unit in (Units in (Playable map area)) and do (If (((Picked unit) has buff Etoile filante (Cible)) Egal à TRUE) then do (Unité - Set life of (Picked unit) to ((Vie of (Picked unit)) - degats_etoile)) else do (Do nothing))
        Wait 1.00 seconds
        Groupe unité - Pick every unit in (Units in (Playable map area)) and do (If (((Picked unit) has buff Etoile filante (Cible)) Egal à TRUE) then do (Unité - Set life of (Picked unit) to ((Vie of (Picked unit)) - degats_etoile)) else do (Do nothing))
        Groupe unité - Pick every unit in (Units in (Playable map area)) and do (If (((Picked unit) has buff Etoile filante (Cible)) Egal à TRUE) then do (Unité - Set (Picked unit) movement speed to ((Current movement speed of (Picked unit)) + (Real((Intelligence of toto (Inclure bonuses)))))) else do (Do nothing))
 
j'ai préféré faire un trigger par lvl de sort parce qu'il y a un nombre de vague qui varie et des deg qui varie selon les 10 niveaux donc pour une question de lisibilité (et ptet de jouabilité faut voir)
 
probleme double, l'xp et l'or mais ca vu que c'est un rpg monojoueur c'est facile a regler avec le "pas d'unit" donc c'est pas un vrai probleme. donc merci beaucoup pour m'avoir aidé c'est très efficace ^^ je m'en suis aussi servi pour une aura de décomposition.


---------------
Hmm,hmm...
Non,je vois pas...
n°4591712
zedeathcam​e4u
Posté le 19-02-2008 à 20:21:49  profilanswer
 

Ouais enfin bon une boucle c'est plus simple et plus lisible (ce qui est dans la boucle se repete X fois). Si ton sort ne dure pas le même temps suivant les niveaux, tu ajoute une variable.
 
If level of blabla egal à N alors:
Set X=10.0 si ton spell dure 10sec
Set Dmg=D
end
 
For A in 1..X loop
 Pick blabla
 Wait 1s (pour attendre 1 sec entre les dégats)
end loop
 

n°4591713
aesathr
Posté le 20-02-2008 à 14:42:12  profilanswer
 

Je savais pas me servir d'une boucle aussi xD. J'ai jamais programmé quoi que ce soit avant le WE et c'est ma deuxieme carte après mon Aos que je viens de finir grace a ce que j'ai appris ici sur les variables.
 
Donc je fais une variable pour la durée du sort, une autre pour les dégats (enfin celle la existe déja) mais il faudrait une 3e variable pour le wait parce que le temps entre les vagues n'est pas non plus le même xD en plus je veux pas compter en nombre de secondes mais en nombre de vagues (sachant qu'avec les ralentissements un trigger censé prendre pile 5 sec en prend évidement plus mais que si jamais ca rame pas du tout chez quelqu'un d'autre va-t'il rajouter une vague ou non ? parce que j'ai fait le test avec mass programme allumés et je suis quasi persuadé qu'il m'a bien enlevé une vague même si c'était pas avec un loop et pas a propos de ca).
 
En plus il ne s'agit pas de niveau de sort mais de compétences différentes a chaque fois (vu que j'avais pas la place pour mes 9 sorts de héros vu que la limite est a 5 j'ai du utiliser des compétences d'unité, une par niveau de chaque sort).
Et puis le nombre de vagues est vraiment trop faible même au lvl max...
 
Sinon j'ai une question : avec mon systeme, je dois ranger les points de skills dans des variables pour déterminer si je peut apprendre un sort ou pas. Or cette variable qui me donne le nombre de point de skills non utilisés, je dois la recalculer a chaque nouvelle carte.
Or il faut que je teste chacune des 75 compétences (10 par sort de base et 5 par ultime ^^) de mon héros pour vérifier s'il l'a appris, soit en faisant 1 trigger par compétence (donc 75), soit en faisant 9 trigger avec une dixaine de if then else encastrés xD alors j'ai pensé a un truc (je sais je suis con -_-) je peux pas plutot stocker ma variables point de skill disponibles dans le cache.
Alors le cache peut il contenir mon héros + ma variable integer ou faut que je cree un cache par donnée a stocker (par exemple si j'ai trois héros et une variable integer il me faut 1 cache, deux (une pour les héros une pour la variable) ou quatres ?)


Message édité par aesathr le 20-02-2008 à 14:44:17

---------------
Hmm,hmm...
Non,je vois pas...

Aller à :
Ajouter une réponse