Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=28ecd3d1ba2138999d8a0afd059ef5ecMédailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

invulnerabilité spéciale via trigger

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 22/05/17 19:32    Sujet du message: invulnerabilité spéciale via trigger Citer

Bonsoir à tous !

J'ai tenté de construire un système qui donne à un unité la capacité, lors de mort imminente, de s'immuniser à cette dernière pendant un laps de temps donné.

En effet, le système fonctionne lorsque peu d'ennemi attaquent l'unité en question, mais dès que les sources de dégât se font trop importantes, il arrive qu'elle meurt avant la fin de cette capacité.

Voici mes deux déclencheur qui concernent le système.

Secret:

Gui:
Trigger:
Initialization and settings
Collapse Evénements
Temps - Elapsed game time is 0.10 seconds
Conditions
Collapse Actions
Collapse Groupe unité - Pick every unit in (Units in (Playable map area)) and do (Actions)
Collapse Boucle - Actions
Déclencheur - Add to Lifesteal <gen> the event (Unité - (Picked unit) Subit des dégâts)
If ((Unit-type of (Picked unit)) Egal à  Grom Hellscream) then do (Déclencheur - Add to UndyingRage <gen> the event (Unité - (Picked unit) Subit des dégâts)) else do (Do nothing)
Set LSA_FloatingText = TRUE




Secret:

Gui:
Trigger:
UndyingRage
Evénements
Collapse Conditions
(Damage taken) Supérieur ou égal à  (Vie of (Triggering unit))
isUndyingRageInCd Egal à  FALSE
Collapse Actions
Set tempUnit = (Triggering unit)
Set DmgTakenUndyingRage = (Damage taken)
Unité - Set life of tempUnit to (DmgTakenUndyingRage + 2.00)
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
HasUndyingRageBuff Egal à  FALSE
Collapse Alors - Actions
Unité - Create 1 Dummy for (Owner of tempUnit) at (Position of tempUnit) facing Orientation bâtiment par défaut degrees
Unité - Add Furie sanguinaire  to (Last created unit)
Unité - Order (Last created unit) to Chaman orc - Furie sanguinaire tempUnit
Unité - Add a 2.00 second Générique expiration timer to (Last created unit)
Set HasUndyingRageBuff = TRUE
Sinon - Actions
Wait 10.00 seconds
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
HasUndyingRageBuff Egal à  TRUE
Collapse Alors - Actions
Partie - Display to (All players) the text: La rage s'estompe
Set HasUndyingRageBuff = FALSE
Sinon - Actions
Compte à  rebours - Start UndyingRageTimer as a Un coup timer that will expire in 10.00 seconds
Set isUndyingRageInCd = TRUE



La vie du héros devrait être maintenue à 2 minimum pendant 10 secondes.

Concernant le leak, je suis au courant. Cette map n'étant utile que pour les tests, je ne m'en préoccupe pas.

Pour moi, je pense jusque que tellement d’événement sont générés que le code ne parvient pas à être aussi précis que je ne le voudrais.

Qu'en pensez-vous? Avez vous une idée pour le rendre infaillible?

Merci à vous.

EDIT : ce système fonctionne de concert avec un système de vol de vie commandé par le trigger suivant. Il me semble comprendre que c'est ce système qui provoque parfois la mort du héro. Si je le désactive, il devient bien invulnérable pour ce temps.

Secret:

Gui:
Trigger:
Lifesteal
Evénements
Conditions
Collapse Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Unit-type of (Damage source)) Egal à  Grom Hellscream
((Triggering unit) is Un bâtiment) Egal à  FALSE
((Triggering unit) is Mécanique) Egal à  FALSE
Collapse Alors - Actions
Set LSA_DamagesTaken = (Damage taken)
Set tempA = (100.00 - (Percentage life of (Damage source)))
Set tempB = (tempA / 1.50)
Partie - Display to (All players) the text: (String(tempA))
Partie - Display to (All players) the text: (String((tempB x 0.01)))
Set LSA_DamageTakenR = (LSA_DamagesTaken x (0.01 x tempB))
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
HasUndyingRageBuff Egal à  TRUE
Collapse Alors - Actions
Set LSA_DamageTakenR = (LSA_DamageTakenR x 2.00)
Sinon - Actions
Set LSA_DamageTakenS = (String((Integer(LSA_DamageTakenR))))
Unité - Set life of (Damage source) to ((Vie of (Damage source)) + (Real(LSA_DamageTakenS)))
Effet spécial - Create a special effect attached to the origin of (Damage source) using AbilitiesSpellsUndeadVampiricAuraVampiricAuraTarget.mdl
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
LSA_FloatingText Egal à  TRUE
Collapse Alors - Actions
Texte flottant - Create floating text that reads LSA_DamageTakenS above (Damage source) with Z offset 0.00, using font size 10.00, color (10.00%, 100.00%, 10.00%), and 10.00% transparency
Texte flottant - Change (Last created floating text): Désactiver permanence
Texte flottant - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
Texte flottant - Change the fading age of (Last created floating text) to 0.40 seconds
Texte flottant - Change the lifespan of (Last created floating text) to 1.20 seconds
Sinon - Actions
Collapse Sinon - Actions


_________________


Dernière édition par louisdespi le 23/05/17 17:20; édité 4 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DarK™
Membre actif


Inscrit le: 29 Aoû 2011
Messages: 197
Sujets: 15
Spécialité en worldedit: Système/Déclencheurs [GUI]


MessagePosté le: 23/05/17 09:03    Sujet du message: Citer

A première vue, tu n'utilises pas de Damage Detection System, par conséquent ton événement "Une unité subit des dégâts" se déclenche APRES résolution des dégâts, soit ton unité a déjà perdu ses points de vie.
Pour vérifier, créer une unité avec 1000 points de dégâts, et donne 500 points de vie à ton héros. Il mourra à 100% sans que la capacité ne se déclenche, puisque normalement, ses points de vie seront de -500 (en omettant l'armure) et sera donc mort. Tu auras beau le soigné, ton personnage est mort (et au passage, a déclenché l'événement "Une unité meurt"). Peut-être que les fois où il fonctionne ton unité n'est pas considérée comme morte avec un lag, ou un petit bug. On est pas à l'abri sur Warcraft lors de cas comme celui-ci.

Pour faire court, impossible sans DDS de le rendre "infaillible" selon moi.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 Hisoka
Membre actif


Inscrit le: 10 Sep 2014
Messages: 116
Sujets: 3
Spécialité en worldedit: Scénario/cinématiques/effets spéciaux


MessagePosté le: 23/05/17 10:20    Sujet du message: Citer

Salut!

J'ai eu le même problème à une époque antérieure pour la détection des dégâts. Vas ici pour trouver ta réponse:
http://worldedit.free.fr/forum/viewtopic.php?t=8095&highlight=

Wink
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 23/05/17 14:37    Sujet du message: Citer

Avant tout, merci pour vos réponse !

DarK™ a écrit:
A première vue, tu n'utilises pas de Damage Detection System, par conséquent ton événement "Une unité subit des dégâts" se déclenche APRES résolution des dégâts, soit ton unité a déjà perdu ses points de vie.


C'est étrange ce que tu dis là, car dans la majorité des cas, j'arrive à maintenir le héros à exactement 2-3 pdv.
Quant aux attaquant, pour le test, j'ai mis des dégâts de type Chaos, afin d'ignorer l'armure. sachant que ces unités tapent à +/- à 20 de dégâts

Si ce que tu dis est vrai, il devrait être impossible de le maintenir en vie, dans TOUS les cas. Non?

J'ai trouvé ceci dans le lien envoyé par Hisoka, peut-être cela aurait-il un lien avec mon problème.

Troll-Brain a écrit:
Si mes souvenirs sont bons, lorsque l’événement "une unité subit des dégâts" se produit, les dégâts ne sont pas encore appliqués.
Et donc à ce moment il suffit de vérifier si les dégâts sont supérieurs aux points de vie actuels de l'unité (sans oublier les 0.405, aller 0.5 pour être safe).


Troll-Brain a écrit:
[...] une unité meurt si elle a 0.405 points de vie, ou un truc du style.
Vaut mieux le prendre en compte.


J'insiste sur le fait que lorsque le système de vol de vie n'est pas activé, il semble n'y avoir aucun bug imprévu quand à sa survie.

Je vais tester un petit peu avec ces nouveaux éléments. Si réponse trouvée, je posterai le déclencheur final ici.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DarK™
Membre actif


Inscrit le: 29 Aoû 2011
Messages: 197
Sujets: 15
Spécialité en worldedit: Système/Déclencheurs [GUI]


MessagePosté le: 23/05/17 16:13    Sujet du message: Citer

Autant pour moi alors, de toute façon je ne mod plus sans un DDS. Bon courage si ça marche alors Wink
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 louisdespi
Floodeur prématuré


Inscrit le: 21 Oct 2007
Messages: 437
Sujets: 70



MessagePosté le: 23/05/17 17:09    Sujet du message: Citer

Le problème est résolu.

J'ai éclaircis un peu le tout, créé quelques variables et de manière surprenante cela s'est mis à fonctionner.

En même temps, je ne comprenais pas trop ce qui ne marchais pas là dedans.

Voici les déclencheurs finaux :

Secret:

Gui:
Trigger:
Initialization
Collapse Evénements
Temps - Elapsed game time is 0.10 seconds
Conditions
Collapse Actions
Set tempRect = (Playable map area)
Collapse Groupe unité - Pick every unit in (Units in tempRect) and do (Actions)
Collapse Boucle - Actions
Déclencheur - Add to Lifesteal <gen> the event (Unité - (Picked unit) Subit des dégâts)
If ((Unit-type of (Picked unit)) Egal à  Grom Hellscream) then do (Déclencheur - Add to LastBreath <gen> the event (Unité - (Picked unit) Subit des dégâts)) else do (Do nothing)
Custom script:   call RemoveRect(udg_tempRect)



Secret:

Gui:
Trigger:
LastBreath
Evénements
Collapse Conditions
(Damage taken) Supérieur ou égal à  ((Vie of (Triggering unit)) - 1.00)
LB_Available Egal à  TRUE
Collapse Actions
Set LB_GromUnit = (Triggering unit)
Set LB_DamagesTaken = (Damage taken)
Unité - Set life of LB_GromUnit to (LB_DamagesTaken + 1.00)
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
LB_IsActive Egal à  FALSE
Collapse Alors - Actions
Set LB_TempPoint = (Position of LB_GromUnit)
Unité - Create 1 Dummy for (Owner of LB_GromUnit) at (Position of LB_GromUnit) facing Orientation bâtiment par défaut degrees
Custom script:   call RemoveLocation(udg_LB_TempPoint)
Unité - Add Furie sanguinaire  to (Last created unit)
Unité - Order (Last created unit) to Chaman orc - Furie sanguinaire LB_GromUnit
Unité - Add a 2.00 second Générique expiration timer to (Last created unit)
Set LB_IsActive = TRUE
Sinon - Actions
Wait 10.00 seconds
Set LB_IsActive = FALSE
Set LB_Available = FALSE
Compte à  rebours - Start LB_Cooldown as a Un coup timer that will expire in 10.00 seconds



Secret:


Gui:
Trigger:
LastBreathCooldown
Collapse Evénements
Temps - LB_Cooldown expires
Conditions
Collapse Actions
Set LB_Available = TRUE



Secret:

Gui:
Trigger:
Lifesteal
Evénements
Collapse Conditions
(Unit-type of (Damage source)) Egal à  Grom Hellscream
((Triggering unit) is Un bâtiment) Egal à  FALSE
((Triggering unit) is Mécanique) Egal à  FALSE
Collapse Actions
Set LS_GromUnit = (Damage source)
Set tempA = (100.00 - (Percentage life of LS_GromUnit))
Set tempB = (tempA / 2.00)
Set LS_HealAmountReal = ((Damage taken) x (0.01 x tempB))
If (LB_IsActive Egal à  TRUE) then do (Set LS_HealAmountReal = (LS_HealAmountReal x 2.00)) else do (Do nothing)
Set LS_HealAmountString = (String((Integer(LS_HealAmountReal))))
Set LS_NewHealth = ((Vie of LS_GromUnit) + (Real(LS_HealAmountString)))
Unité - Set life of LS_GromUnit to LS_NewHealth
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
LS_HealAmountReal Supérieur à  0.00
Collapse Alors - Actions
Effet spécial - Create a special effect attached to the origin of (Damage source) using AbilitiesSpellsUndeadVampiricAuraVampiricAuraTarget.mdl
Effet spécial - Destroy (Last created special effect)
Texte flottant - Create floating text that reads LS_HealAmountString above LS_GromUnit with Z offset 0.00, using font size 10.00, color (10.00%, 100.00%, 10.00%), and 10.00% transparency
Texte flottant - Change (Last created floating text): Désactiver permanence
Texte flottant - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
Texte flottant - Change the fading age of (Last created floating text) to 0.40 seconds
Texte flottant - Change the lifespan of (Last created floating text) to 1.20 seconds
Collapse Sinon - Actions



Je pense avoir retiré toutes les possibilités de leak.

Merci pour votre aide à tous les 2.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1
La question posée dans ce topic a été résolue !

 
Sauter vers:  
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


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com