Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
PepeK Ptit Nouveau
Inscrit le: 31 Aoû 2014 Messages: 12 Sujets: 3
|
|
Revenir en haut |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 07/09/14 13:33 Sujet du message: |
|
|
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 |
|
|
PepeK Ptit Nouveau
Inscrit le: 31 Aoû 2014 Messages: 12 Sujets: 3
|
|
Revenir en haut |
|
|
PepeK Ptit Nouveau
Inscrit le: 31 Aoû 2014 Messages: 12 Sujets: 3
|
|
Revenir en haut |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 07/09/14 15:35 Sujet du message: |
|
|
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.
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 |
|
|
PepeK Ptit Nouveau
Inscrit le: 31 Aoû 2014 Messages: 12 Sujets: 3
|
Posté le: 07/09/14 16:03 Sujet du message: |
|
|
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 )
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 )
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 ) _________________
|
|
Revenir en haut |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 07/09/14 16:20 Sujet du message: |
|
|
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 |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 07/09/14 19:39 Sujet du message: |
|
|
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. _________________
|
|
Revenir en haut |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
|
Revenir en haut |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 07/09/14 20:23 Sujet du message: |
|
|
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 :
_________________
|
|
Revenir en haut |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 07/09/14 20:35 Sujet du message: |
|
|
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 |
|
|
PepeK Ptit Nouveau
Inscrit le: 31 Aoû 2014 Messages: 12 Sujets: 3
|
|
Revenir en haut |
|
|
kungfu-sheep Anomalie floodiforme
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
|
|
Revenir en haut |
|
|
gisgalion Membre honoraire
Inscrit le: 30 Oct 2013 Messages: 284 Sujets: 21 Spécialité en worldedit: Spellmaker
|
Posté le: 08/09/14 11:41 Sujet du message: |
|
|
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 |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 08/09/14 12:10 Sujet du message: |
|
|
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 |
|
|
|