Inscrit le: 12 Sep 2009 Messages: 801 Sujets: 64 Spécialité en worldedit: Ne pas.
Posté le: 08/07/11 20:21 Sujet du message: Déclencheur suspect
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
Evénements
Temps - Every 0.50 seconds of game time
Conditions
Actions
For each (Integer A) from 1 to 8, do (Actions)
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 ======
For each (Integer B) from 1 to 6, do (Actions)
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))
For each (Integer B) from 1 to 12, do (Actions)
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
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 08/07/11 20:29 Sujet du message:
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. _________________
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 08/07/11 21:17 Sujet du message:
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). _________________
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...)
Posté le: 09/07/11 17:43 Sujet du message:
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 ^^ _________________
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 09/07/11 18:56 Sujet du message:
JE NE SUIS PAS SUR LES NERFS
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. _________________
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