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=0cd67360f225be931d6b0228c3f9afc1Mé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

Sort (Bouclier Divin) MUI (?) sur cible cliquable

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 PepeK
Ptit Nouveau


Inscrit le: 31 Aoû 2014
Messages: 12
Sujets: 3



MessagePosté le: 07/09/14 12:03    Sujet du message: Sort (Bouclier Divin) MUI (?) sur cible cliquable Citer

Salut a tous

Alors voila je sais qu'il y a déja eu cette question posée et d'autres du genre ... j'ai passé une journée a fouiller partout j'ai pas trouvé de réponse à mon problème

Pour ceux qui connaissent c'est toujours par rapport a warcraft2 :

Je souhaite créer un sort d'armure qui rend la cible invulnérable pour 30s (Bouclier Divin me parait approprié)
Ce sort est lancé par l'unité Death Knight et s'applique à une cible (alliée ou ennemie puisqu'il réduit de 50% la vie)

Jusque la je gère ça fonctionne trés bien avec le sort Canaliser + Triggers j'ai trouvé plusieurs méthode pour y parvenir

La plus efficace était de donner au cast de canaliser la capacité Bouclier Divin a l'unité ciblée et lui donner l'ordre de le lancer (trés transparent)

La ou ça coince c'est que je n'arrive pas à supprimer la capacité à la fin de l'effet du bouclier dés lors qu'il y a 2 cibles ou + sous cet effet
J'ai tenté tout ce que je maitrisais en déclencheurs mais je n'arrive pas sauvegarder chaque unité en variable / Hashtable etc ... pour supprimer dans l'ordre la capacité sur chaque cible affectée

Peut - etre cele n'est réalisable qu'en JASS mais je ne trouve pas la réponse alors si quelqu'un pouvait m'aiguiller un peu ?

Appliquer le sort la capacité etc... ça va mais c'est la retirer de chaque unité affectée a la fin de la durée du sort

D'avance Merci Smile
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 07/09/14 13:33    Sujet du message: Citer

Tu peux aussi, au lieu de donner la compétence, le rendre invulnérable pendant X seconde puis pour donner l'effet du bouclier, tu crées une compétence pour un dummy comme frénésie impie, ces stats à 0, la durée X puis tu assignes ton buff avec ton modèle bouclier et tu lances le sort sur ta cible. Ainsi, l'unité ne verra pas apparaître la compétence.
Sinon, pour ton problème ne faisant que du jass, je ne suis pas trop calée pour le GUI/MUI.
Jass:
local timer t = CreateTimer()
local unit u = GetSpellTargetUnit()

Ajoute ceci en tout début du déclo.
Jass:
call SaveUnitHandle( udg_TaHashtable, GetHandleId( t ), 0, u )
set u = null
call TimerStart( t, 30.00, false, function TonNomDeSort_End )

Ceci à la fin de ton déclo.
Ces deux derniers doivent être utilisés en customscript.

Jass:
function TonNomDeSort_End takes nothing returns nothing
    local unit u = LoadUnitHandle( udg_TaHashtable, GetHandleId( GetExpiredTimer() ), 0)
    call IssueImmediateOrder( u, "undivineshield" )
    call UnitRemoveAbility( u, 'A000'// Remplace A000 par la raw id de ton sort
    call FlushChildHashtable( udg_TaHashtable, GetHandleId( GetExpiredTimer()) )
    set u = null
    call DestroyTimer( GetExpiredTimer() )
endfunction

Colle ça dans l'en-tête de ta map et remplace la nom des variable et le nom de la fonction par des noms appropriés.
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 PepeK
Ptit Nouveau


Inscrit le: 31 Aoû 2014
Messages: 12
Sujets: 3



MessagePosté le: 07/09/14 14:05    Sujet du message: Citer

oulaaah ... merci Smile

Je suis en train d'analyser ce que tu m'as donné pour comprendre comment ça fonctionne ... mais j'ai du mal ^^

Tu m'as perdu avec le coup de l'en-tête de map ... J'en ai vite fait survolé un bout mais j'ai pas pigé pourquoi ça partait la etc ...

Je vais tenter de faire marcher tout ça

(Au secouuuurs Crying or Very sad .... ) Very Happy

Je reviens pleurer si j'y arrive pas lol
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 PepeK
Ptit Nouveau


Inscrit le: 31 Aoû 2014
Messages: 12
Sujets: 3



MessagePosté le: 07/09/14 15:00    Sujet du message: Citer

EDIT : Oups Double Post Rolling Eyes

Un grand merci a toi Florianlenecro !!!

Tu as solutionné (en partie, et c'est ce que je demandais du coup ça m'a fait chercher Very Happy ) mon problème en partant de ma base du coup je comprends déja mieu le fonctionnement JASS

J'ai bien grace à mon sort canaliser l'application Bouclier Divin sur l'unité ciblée qui est retiré a la fin du timer ... j'avais du mal a comprendre le concept et la c'est déja mieu


Par contre je me permets de te poser la question sur ta premiere solution avec le dummy et frénésie impie ... la j'avoue que je comprends pas trop
Je vais aller relire ce que je trouve sur les dummy mais si je comprends bien :

Toujours en JASS je ferai un call UnitInvulnerable qui remplacerait les call Ability/Order de ma méthode ?
Car la c'est le dummy qui me chiffonne (surtout si c'est en JASS) j'ai pas encore saisi son fonctionnement

M'enfin jvai aller zieuter ça si je trouve

Encore merci tu m'as bien fait avancer (tu donnes des cours particuliers ? Wink )

Ah j'oubliais mais ... pourquoi la derniere fonction va dans l'en-tête de la map ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 07/09/14 15:35    Sujet du message: Citer

L'en-tête de la map est une zone déjà définis pour pouvoir faire du script, tu peux néanmoins le faire sur un déclencheur convertis en script, fait pour ce genre de fonction l'en-tête est suffisante.

Sinon, pour ma première solution, c'est réalisable en GUI après je sais pas trop si la réponse évènement qui renvoi l'unité ciblée est MUI néanmoins c'est réalisable en quelque ligne.
Une dummy unit est une unité servant à la création de sort/système, elle permet de faire lancer des compétences annexes à l'insu de l'utilisateur pour arriver aux effets voulue par le créateur. Dans mon cas, la dummy lancera une compétence custom basé sur Frénésie impie néanmoins il existe une multitude d'autre similaire ( lucioles, feu intérieur*, ect... ) que j'utilise pour faire appliquer des buffs étant donné qu'on ne peut en appliquer directement par les déclencheurs. Le buff aura donc en modèle ( généralement dans "cible" ) celui que je veux appliquer, je nullifie les Data de la compétence pour garder seulement la durée que je veux.

Gui:
Trigger:
Déclencheur sans titre 008
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Réanimation
Collapse Actions
Unité - Create 1 TonDummy for (Triggering player) at (Center of (Playable map area)) facing Orientation bâtiment par défaut degrees
Unité - Add a 1.00 second Générique expiration timer to (Last created unit)
Unité - Order (Last created unit) to Nécromancien mort-vivant - Frénésie impie (Target unit of ability being cast)
Unité - Make (Target unit of ability being cast) Invulnérable
Wait 30.00 seconds
Unité - Make (Target unit of ability being cast) Vulnérable

Ca devrait ressembler à ça, si tu veux être sûr que ce soit soit MUI je t'invites à utiliser des variables locales et n'oublie pas d'enlever le leak.
Autorise les cibles invulnérables sur le sort au cas où l'effet du sort prendrait "effet" quand il est invulnérable.
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"


Dernière édition par florianlenecro le 07/09/14 18:48; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 PepeK
Ptit Nouveau


Inscrit le: 31 Aoû 2014
Messages: 12
Sujets: 3



MessagePosté le: 07/09/14 16:03    Sujet du message: Citer

Ok d'accord

Bah je vais réessayer en GUI (mais je t'avoue que la je commence à préférer le JASS et les locales y a pas photo Wink )

En fait tout passait en GUI les sorts sont MUI mais c'est sur la fin du déclo quand tu veux annuler l'effet précédemment appliqué que ça chie ... car l'unité en question change pendant le timer et donc l'annulation se fera sur la dernière unité affectée par le déclo ... variable ou pas

C'est pour ça que la variable locale est nécessaire du coup enfin c'est ce que j'ai retenu de tout ça mais en tout cas c'est plus simple et ça marche nickel


Par contre pour le leak est-ce que ça concerne les variables ?
Car tu as fait un set uBD = null a la fin (je ne sais trop pourquoi) mais je ne peux le faire sur ma real UBD_Life
(Je te jure que je cherche avant de poser une question ^^ mais sur ce forum j'ai beau trier et préciser ma recherche au maximum il me ressort toujours 200 posts qui n'ont rien a voir Sad )

Jass:

function Trig_TEST02_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_TEST02_Actions takes nothing returns nothing
    local timer tBD = CreateTimer()
    local unit uBD = GetSpellTargetUnit()
    local real UBD_Life = ( GetUnitStateSwap(UNIT_STATE_LIFE, uBD) / 2.00 )

    call UnitAddAbilityBJ( 'A00C', uBD )
    call SetUnitLifeBJ( uBD, UBD_Life )
    call IssueImmediateOrderBJ( uBD, "divineshield" )
    call SaveUnitHandle( udg_UBD_HTable, GetHandleId( tBD ), 0, uBD )
    set uBD = null
    call TimerStart( tBD, 5.00, false, function UnholyArmor_End )
endfunction

//===========================================================================
function InitTrig_Unholy_Armor_DK takes nothing returns nothing
    set gg_trg_Unholy_Armor_DK = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Unholy_Armor_DK, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Unholy_Armor_DK, Condition( function Trig_TEST02_Conditions ) )
    call TriggerAddAction( gg_trg_Unholy_Armor_DK, function Trig_TEST02_Actions )
endfunction


Je vais terminer ce script la pour le rendre opérationnel puis tenter la méthode invulnérable et dummy plus tard (mais bon je verrai pas de différence je pense Wink )
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 07/09/14 16:20    Sujet du message: Citer

Tutoriel : Les secrets des memory leaks de Rommstein60 et les variables locales de Ayane
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 07/09/14 19:39    Sujet du message: Citer

PepeK a écrit:
En fait tout passait en GUI les sorts sont MUI mais c'est sur la fin du déclo quand tu veux annuler l'effet précédemment appliqué que ça chie ... car l'unité en question change pendant le timer et donc l'annulation se fera sur la dernière unité affectée par le déclo ... variable ou pas


En fait, c'est précisément quand on a ce genre de problème qu'on dit que le sort n'est pas MUI ^^
Je pense qu'on aurait pu régler ça en GUI mais ça aurait été vachement plus compliqué : il aurait fallu passer par des variables à déploiement et faire un système pour que 1 index corresponde à 1 instance du sort. Vladadamm faisait beaucoup ce genre de système à l'époque. C'est quand même mieux de passer par le jass, ne serait-ce que pour pouvoir créer 1 timer par instance.

Petite remarque, la condition peut être écrite comme ça plutôt :
Jass:
function Trig_TEST02_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

La façon dont WE convertit un déclencheur en jass n'est pas la plus lisible.

Pour la variable que tu ne peux pas nullifier, c'est normal : le leak ne s'applique qu'aux objets que tu peux potentiellement détruire (une unité, une location, un timer...) mais tu ne détruis jamais un nombre.

Puisque tu apprends le jass (et je ne peux que te féliciter ^^), tu auras sûrement envie de connaître la liste des fonctions. Les voici :
common.j
Blizzard.j
Tu peux aussi les récupérer depuis tes archives .mpq (dans ton dossier Warcraft III) grâce à un éditeur MPQ.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 07/09/14 19:58    Sujet du message: Citer

Il y a quand même beaucoup plus portable
http://jass.sourceforge.net/doc/api/index.shtml

PS : Tout le monde a ses débuts Smile, au début je faisais la même syntaxe que WE.
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 07/09/14 20:23    Sujet du message: Citer

Ah oui, tiens, je connaissais pas. C'est vrai que c'est plus beau. Mais tu n'as pas les lignes de commentaires du coup, qui sont parfois intéressantes (quand il ne s'agit pas de troll de la part du staff de Blizzard).

Sinon, je viens de finir de tester les unités du concours et Gisgalion fait justement le même sort que toi. Il règle la question du MUI d'une façon originale en GUI :
Gui:
Trigger:
Collapse Armure divine
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  (==) Armure divine
Collapse Actions
Groupe unité - Add (Target unit of ability being cast) to Grp_armure
Unité - Make (Target unit of ability being cast) Invulnérable

Collapse Armure divine stop
Collapse Evénements
Temps - Every 0.10 seconds of game time
Conditions
Collapse Actions
Collapse Groupe unité - Pick every unit in Grp_armure and do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
((Picked unit) has buff Armure divine ) Egal à  (==) FALSE
Collapse Alors - Actions
Unité - Make (Picked unit) Vulnérable
Groupe unité - Remove (Picked unit) from Grp_armure
Collapse Sinon - Actions
Do nothing

_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 07/09/14 20:35    Sujet du message: Citer

Ah oui, je l'avais oublié celle là, je l'utilisais souvent pour des auras de dégénérations/régénérations, mais pas exactement de la même manière
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 PepeK
Ptit Nouveau


Inscrit le: 31 Aoû 2014
Messages: 12
Sujets: 3



MessagePosté le: 07/09/14 22:26    Sujet du message: Citer

OH MAIS MEEERDE ...

Désolé ^^

Mais je l'ai cherché 2h cette condition has buff = FALSE !!!!!!

C'était ma premiere idée de faire un groupe et un periodic event ... mais je trouvais pas la foutue condition ... je devais etre fatigué Crying or Very sad

M'enfin le JASS est plus pratique mais cela dit j'ai tenté un autre sort pour contrôler le mouvement d'une unité qui en fait est le sort tornade ... (oui je sais je fais parfois compliqué ^^) mais je me suis perdu dans les lignes de codes et la fatigue m'a fait faire un joli ALT+F4 ^^

En tout cas merci pour vos liens Smile mais ça me fait bizarre d'avoir des réponses sur un éditeur et un jeu qui ont 10 ans passé lol

J'ai lu quelques tutos sur le JASS mais je les trouve assez incomplets on aborde a peine un exemple sans vraiment bien expliquer en détail ... j'en ai + appris avec vous 2 en 1 page que tout seul en une journée complete Very Happy
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1843
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 08/09/14 00:43    Sujet du message: Citer

florianlenecro a écrit:
Il y a quand même beaucoup plus portable
http://jass.sourceforge.net/doc/api/index.shtml

PS : Tout le monde a ses débuts Smile, au début je faisais la même syntaxe que WE.


Surprised et dire que tirlititi m'a fait lire en boucle ces deux **** de fichier x) ARGL ! j'ai passé des HEURES à chercher des trucs qui m'auraient pris 10 secondes sur ce site !! alala... tirlititi je te hais maintenant xD
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 gisgalion
Membre honoraire


Inscrit le: 30 Oct 2013
Messages: 283
Sujets: 20
Spécialité en worldedit: Spellmaker


MessagePosté le: 08/09/14 11:41    Sujet du message: Citer

Oh mon sort pour le concours... XD
Et c'est seulement maintenant que je vois qu'il y a peut être du leak à cause du groupe... :/
_________________
Le vaste monde vous entoure de tous côtés ; vous pouvez vous enclore, mais vous ne pouvez éternellement le tenir en dehors de vos clôtures.

John Ronald Reuel Tolkien.

Hâtez-vous lentement, et sans perdre courage,
Vingt fois sur le métier remettez votre ouvrage.
Polissez-le sans cesse, et le repolissez.
Ajoutez quelquefois, et souvent effacez.

Boileau
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 08/09/14 12:10    Sujet du message: Citer

Les tutos de jass mise a part sur hive servent seulement à te présenter la syntaxe du langage et ces principes, tu découvres les fonctions au fur et à mesure que tu en as besoin.

Pour la condition du buff c'était dans Boolean - Unit Has specific buff.
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
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 -> Les sorts Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
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