Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMé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

Triggers et fonctions récursives

 
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
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 26/10/09 21:19    Sujet du message: Triggers et fonctions récursives Citer

Salutations tout le monde !

Je me demandais tout simplement si le programme pouvait surcharger suite à un amoncellement de fonctions récursives.

Actuellement, les sorts du Boss que je programme s'appellent elles-mêmes.
Quand le Boss dure 30 secondes, on s'en fiche un peu à la rigueur, mais dans le cas présent, le Boss peut durer de 3 à 4 minutes...

En clair : est-ce qu'utiliser la récursivité entraîne du leak ? (dans le cas que je viens de donner : à savoir un sort de boss qui s'appelle lui-même après un certain temps).

PS : J'ai craqué... Chuis passé au vJass...
_________________


Soigner est la plus noble tâche que l'humanité puisse accomplir.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 26/10/09 21:23    Sujet du message: Citer

J'ai jamais essayé donc je peux rien te dire pour le leak est les performances.

Néanmoins, il est toujours possible de "dérécursifer". Fait voir ton code et tu verras (c'est plus simple d'expliquer avec un exemple).
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 26/10/09 21:29    Sujet du message: Citer

Jass:
function Trig_Darkalus_Invoquer_une_faille_Actions takes nothing returns nothing

    local group EnnemiesUnits = null
    local unit TargetOfSpell = null
   
    set EnnemiesUnits = GetUnitsInRangeOfLocMatching(5000.0, GetUnitLoc(gg_unit_n000_0001), Condition(function IsEligibility))
    set TargetOfSpell = GroupPickRandomUnit(EnnemiesUnits)
   
    if (VerifyFailles() == true) then
        call IssueTargetOrder( gg_unit_n000_0001, "slow", TargetOfSpell )
        call TriggerSleepAction( 5.00 )
        call UnitRemoveBuffBJ( 'B00D', TargetOfSpell )
        call SetUnitManaBJ(TargetOfSpell, GetUnitStateSwap(UNIT_STATE_MANA, TargetOfSpell) - 100)
        call CreateNUnitsAtLoc( 1, 'h000', Player(4), GetUnitLoc(TargetOfSpell), bj_UNIT_FACING )
        call CreateLinkWithDarkalus(GetLastCreatedUnit() )
        call TriggerSleepAction( 10.00 )
        call ConditionalTriggerExecute( GetTriggeringTrigger() )
    else
        call DisplayTextToPlayer(Player(1), 0, 0, "Nombre de failles maximum atteint.")
    endif
endfunction


IsEligibility retourne true / false selon divers critères qu'il serait inutile d'expliquer ici.
VerifyFailles retourne true s'il reste de la place dans la variable déploiement pour acceuillir une faille, false sinon.
CreateLinkWithDarkalus définit la variable de déploiement.

Dans le cas présent, quand on a atteint le nombre maximum, la fonction s'arrête... Et appelle une autre fonction (pas encore écrite).

Cette autre fonction va ensuite (peut-être, mais le plus souvent ça sera le cas), appeller à nouveau la fonction "Trig_Darkalus_Invoquer_une_faille_Actions"...
_________________


Soigner est la plus noble tâche que l'humanité puisse accomplir.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Bantas
Anomalie floodiforme


Inscrit le: 21 Aoû 2007
Messages: 1524
Sujets: 37

Médailles: 1 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 26/10/09 21:30    Sujet du message: Citer

Le leak n'est pas incontrôlable =o

Il vient généralement :
- des groupes d'unités et des points générés sans prévenir par le GUI.
- des variables locales non nullifiées.
- des références non-nullifiées vers des objets détruits (voir le topic sur le système de timer de Troll-Brain, j'avoue ne pas comprendre tous les détails de celui-ci).
- des boolexpr nuls ? (encore une fois, j'ai pas tout pigé ici)

Bref, en Jass, tu as en général le contrôle et tu sais où est-ce que tu crées des choses, et donc où tu dois en détruire.

EDIT : J'ai comme l'impression d'être à côté de la plaque pour le coup..
_________________


Dernière édition par Bantas le 26/10/09 21:32; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 26/10/09 21:31    Sujet du message: Citer

Si tu te mets au VJass: arrête d'utiliser des points, d'autant que maintenant on a GetSpellTargetX et pareil en Y; utilise un timer plutôt que TriggerSleepAction, et enfin: détruis tes variables (notamment le groupe!)

Et enfin, rend tes variables nulles.
_________________
Revenir en haut
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 26/10/09 21:41    Sujet du message: Citer

Je ne comprend pas en quoi ta fonction est récursive. Peut être un problème de compréhension du mot récursif.

Définition d'une fonction récursive en programmation : C'est une fonction qui s'appelle elle même.

Exemple :
Jass:
function test takes integer a returns nothing
    ...
    ...
    call test(a + 2)
endfunction

ça c'est une fonction récursive. Dans ton exemple, je ne vois pas trop ou la fonction s'appelle elle même pour l'instant.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 26/10/09 21:43    Sujet du message: Citer

Parce que n'est pas très visible :

Jass:
call ConditionalTriggerExecute( GetTriggeringTrigger() )


La voilà, la sale bête
(Oui, y a encore beaucoup de parties qui viennent du GUI, mais ça avance... Encore hier j'en étais nulle part sur la compréhension de ce language.

Enfin, j'en connaît assez maintenant pour savoir qu'on retrouve quelques marques du C, très trèèèès enfouies dans le fonctionnement.

Merci pour les conseils concernant le vJass, je vais essayer de me perfectionner de ce côté là.

Et d'arrêter de F***** CE P***** DE POINT VIRGULE A LA FIN DE CHAQUE LIGNE §§§§
_________________


Soigner est la plus noble tâche que l'humanité puisse accomplir.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2012
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 26/10/09 21:54    Sujet du message: Citer

Lancer un déclencheur, lance un nouveau thread qui s'exécute indépendamment du déclencheur actuel. Donc l'exécution actuelle va se terminer avant l'exécution que l'on a lancé (en grande partie).
Pour faire simple: lancer un déclencheur n'est pas bloquant.
Donc tu n'auras pas de soucis particulier.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Doubotis
Membre honoraire


Inscrit le: 10 Mai 2008
Messages: 246
Sujets: 15
Spécialité en worldedit: Worldediter ²


MessagePosté le: 26/10/09 21:58    Sujet du message: Citer

Merci Smile
_________________


Soigner est la plus noble tâche que l'humanité puisse accomplir.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 26/10/09 23:36    Sujet du message: Citer

Le leak saypabien, la parano saylemal, le vJass saylebien.
_________________
Le violet, c'est moche.
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

 
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