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=f5854b107b1fae41c3c43fdc60d9cdffMé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

Déclencheur suspect

 
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
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 08/07/11 20:21    Sujet du message: Déclencheur suspect Citer

Salut à tous,

J'ai ici un déclencheur qui s'effectue énormément de fois dans la partie, et j'ai peur qu'il provoque du lag/leak :/

Voici le déclo en question :

Secret:

Gui:
Trigger:
MaJ Multiboard
Collapse Evénements
Temps - Every 0.50 seconds of game time
Conditions
Collapse Actions
Collapse For each (Integer A) from 1 to 8, do (Actions)
Collapse Boucle - Actions
Custom script:   if (GetLocalPlayer()==udg_p_Player[GetForLoopIndexA()]) then
Multitable - Set the text for MB_InfosJoueur item in column 2, row 1 to (Name of Hero[(Player number of p_Player[(Integer A)])])
Multitable - Set the text for MB_InfosJoueur item in column 2, row 2 to (String(int_CaractDispo[(Player number of p_Player[(Integer A)])]))
Multitable - Set the text for MB_InfosJoueur item in column 2, row 3 to (String((Hero level of Hero[(Player number of p_Player[(Integer A)])])))
Multitable - Set the text for MB_InfosJoueur item in column 2, row 4 to (String((Integer((Percentage life of Hero[(Player number of p_Player[(Integer A)])])))))
Multitable - Set the text for MB_InfosJoueur item in column 2, row 5 to (String((Integer((Percentage mana of Hero[(Player number of p_Player[(Integer A)])])))))
Multitable - Set the text for MB_InfosJoueur item in column 1, row 6 to ======
Multitable - Set the text for MB_InfosJoueur item in column 2, row 6 to ======
Collapse For each (Integer B) from 1 to 6, do (Actions)
Collapse Boucle - Actions
Set AInt_PtsResistanceTMP = (Custom value of (Item carried by Hero[(Player number of p_Player[(Integer A)])] in slot (Integer B)))
Multitable - Set the text for MB_InfosJoueur item in column 2, row (6 + (Integer B)) to (String(AInt_PtsResistanceTMP))
Collapse For each (Integer B) from 1 to 12, do (Actions)
Collapse Boucle - Actions
Multitable - Set the display style for MB_InfosJoueur item in column 1, row (Integer B) to Montrer text and Masquer icons
Multitable - Set the display style for MB_InfosJoueur item in column 2, row (Integer B) to Montrer text and Masquer icons
Multitable - Set the width for MB_InfosJoueur item in column 1, row (Integer B) to 7.00% of the total screen width
Multitable - Set the width for MB_InfosJoueur item in column 2, row (Integer B) to 7.00% of the total screen width
Custom script:   endif


_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Tirlititi



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

MessagePosté le: 08/07/11 20:29    Sujet du message: Citer

Secret:

Jass:
function MultiboardSetItemValueBJ takes multiboard mb, integer col, integer row, string val returns nothing
    local integer curRow = 0
    local integer curCol = 0
    local integer numRows = MultiboardGetRowCount(mb)
    local integer numCols = MultiboardGetColumnCount(mb)
    local multiboarditem mbitem = null

    // Loop over rows, using 1-based index
    loop
        set curRow = curRow + 1
        exitwhen curRow > numRows

        // Apply setting to the requested row, or all rows (if row is 0)
        if (row == 0 or row == curRow) then
            // Loop over columns, using 1-based index
            set curCol = 0
            loop
                set curCol = curCol + 1
                exitwhen curCol > numCols

                // Apply setting to the requested column, or all columns (if col is 0)
                if (col == 0 or col == curCol) then
                    set mbitem = MultiboardGetItem(mb, curRow - 1, curCol - 1)
                    call MultiboardSetItemValue(mbitem, val)
                    call MultiboardReleaseItem(mbitem)
                endif
            endloop
        endif
    endloop
endfunction



Pour accéder à une case d'un multiboard, on doit créer et détruire un handle (mais ça se voit pas en GUI). Cependant, pour supprimer tout le leak, il faudrait également mettre les variables locales sur null, ce que Blizzard n'a pas fait dans sa BJ.
_________________
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)


Dernière édition par Tirlititi le 08/07/11 21:09; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 08/07/11 20:58    Sujet du message: Citer

Hum, je n'ai pas de variables locales dans mon déclencheur, juste un "GetLocalPlayer()" :/
_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Tirlititi



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

MessagePosté le: 08/07/11 21:17    Sujet du message: Citer

HumHum, j'ai bien vu que tu n'avais pas utilisé directement de variable locale, mais mon post est quand même approprié, ce serait bien de comprendre pourquoi...

Après, en règle générale, je t'aurais bien dit de ne mettre à jour ton multiboard que lorsque c'est nécessaire (quand tu modifies le nom d'un joueur par déclencheur, par exemple), mais je suppose que pour la vie et le mana des héros, c'est mieux d'utiliser un périodique (c'est pas la peine non plus de mettre TOUT le multiboard à jour à chaque fois quand même).
_________________
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é
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
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: 09/07/11 17:43    Sujet du message: Citer

Désynchronisation obligatoire, j'ai déjà essayé de créer ou détruire un mbitem dans un bloc local, par contre je n'ai jamais essayé de changer localement le text, normalement cela devrait fonctionner.

Mais de toute façon dans la majorité des cas il est juste préférable de créer autant de mb que de joueurs, de les mettre à jour sans GetLocalPlayer, et de n'afficher que le mb concerné pour chaque joueur avec GetLocalPlayer.

Et pour répondre à ta question ce n'est pas avec un event périodique de 0.5 s que tu devrais avoir des soucis, je parierais que même en gui avec de telles opérations et 0.01 s cela ne se sentirait pas (mais c'est inutile d'en arriver là bien évidemment)

PS :

@Tirlititi : Euh... t'es sur les nerfs en ce moment ?

Ta réponse est très enigmatique pour un non initié, globalement pour quelqu'un qui se pose la question de la performance :p
Après je suppose que tu voulais dire que la création/destruction d'handle n'est pas un opération anodine en ressource, j'ai envie de dire oui et non, certes pour une unité y'a pas photo mais faut relativiser pour des mbitem (du moins je le pense)

EDIT : Hmm tu parlais plus probablement du leak de référence d'handle, ca peut jouer en effet à terme sur les performances, c'est pas bien étouétou, mais comme cela se passe tous les 0.5s, à moins de jouer la même partie sans sauvegarde durant des années sur un pc moisi pas de souci à priori ^^
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



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

MessagePosté le: 09/07/11 18:56    Sujet du message: Citer

JE NE SUIS PAS SUR LES NERFS Surprised

J'espère que tu me crois. Y'a pas plus honnête que moi. :p

Nan, je lui ai pas répondu plus précisément parce que DaKanibal n'est pas le dernier des novices et que je considère qu'il devrait pouvoir comprendre ce que je dis (et le laisser réfléchir dessus, ça n'peut faire de mal à personne).

C'est vrai que le leak est faible, et qu'il y avait plus à dire sur les "performances" de ce déclencheur (y'a quand même beaucoup d'actions qui sont exécutées pour rien), mais comme il faut de toutes façons mettre à jour le multiboard régulièrement pour la vie et le mana, je me suis rabattu sur le leak.
_________________
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é
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