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: 11/11/07 17:33 Sujet du message: La foire aux bugs
Petite définition (Wikipedia.org power)
Secret:
Un bogue ou bug informatique est une anomalie dans un programme informatique l’empêchant de fonctionner correctement. Sa gravité peut aller de bénigne (défauts d’affichage mineurs) à majeure (explosion du vol 501 de la fusée Ariane 5).
Les bogues sont généralement dus à un problème de conception du logiciel ; l'erreur peut parfois être identifiée (et la correction effectuée simplement), mais elle peut aussi bien provenir de la conception même du programme, ce qui nécessite une refonte profonde. Plus rarement, les bogues dans les logiciels peuvent être dus à des erreurs dans les outils de développement utilisés par les programmeurs du logiciel. Enfin, le matériel lui-même peut comporter des bogues, comme ce fut le cas du bogue de la division du Pentium qui a affecté les premières versions de ce processeur.
Ici seront listés les bogues qui n'ont aucune utilité mais qu'il faut prendre en compte.
Et ceux plus rares mais parfois trés utiles, les bugs exploitables.
CODE DE LA MISE EN FORME :
Code:
[color=blue][size=20]TitreDuBug[/size][/color]
DescriptionEnQuelquesLignes
[b][size=15][color=red]A) EXPLOITATION DU BUG[/color][/size][/b]
ExplicationAvecEventuellementUnExemple
[b][size=15][color=red]B) RESOLUTION DU BUG[/color][/size][/b]
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: 11/11/07 17:35 Sujet du message: Bogues en tout genre
En construction
Conversion de types
Tout d'abord il faut savoir qu'il existe 4 types principaux.
- handle (objet)
C'est tout ce qui est créé avec l'éditeur, aussi bien les choses concrètes, telle une unité, que les choses abstraites (une condition de trigger)
- integer (entier)
nombre ayant comme valeurs possible : - à +.
Il existe plusieurs bases mais cela fera l'objet d'un autre topic
- real (reel) - boolean (booleen)
D'autres types existent mais ils sont tous une sous famille du type handle.
Tous les types sont codés sous le même nombre de bits, et un bug du compilateur permet leur conversion.
Voici le légendaire H2I :
Jass:
function H2I takes handle returns integer
return H
return 0 // on retourne une valeur entière mais ce return ne sera jamais exécuté, c'est juste pour feinter le compilateur qui autrement vomirait une erreur de compilation
endfunction
en utilisant cette fonction on récupère l'adresse d'un objet sous la forme d'un entier exploitable.
On peut comparer cela à un tatouage unique pour chaque objet. _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 14/11/07 11:49; édité 2 fois
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: 14/11/07 11:43 Sujet du message:
"Mélange" de compétences
Quand 2 compétences ont les mêmes ordres chaînes, et sont possédées en même temps, elles se "mélangent".
Le fait de changer ces ordres chaînes n'a aucun effet sauf pour les compétences livre de sort 'Aspb' et canaliser 'ANcl'.
Il faut donc ne pas se baser sur la même compétence si une unité peut posséder 2 compétences en même temps (hormis canaliser et livre de sort où l'on peut changer l'ordre chaîne pour éviter cela )
IMPORTANT : Ne pas oublier que pour une compétence soit utilisable il faut que les requis soit valides ( premiers champs dans l'éditeur d'objet ) _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 15/11/07 19:11; édité 2 fois
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: 14/11/07 11:58 Sujet du message:
Ordres reçus par la mise en pause / stun d'une unité
Quand une unité est mise en pause, elle reçoit un ordre avec point pour cible (le centre de la map)
Quand une unité est assomée (compétence passive ou non), elle reçoit un ordre avec objet pour cible ( l'objet ou l'unité qui l'a assomé).
Si l'unité est déjà en pause ou assomée elle ne reçoit pas d'ordre
A) EXPLOITATION DU BUG
A ce jour je n'ai pas découvert d'utilité étant donné que l'unité ne reçoit pas d'ordre si elle est déjà en pause.
Ca peut servir pour détecter la première mise en pause d'une possible longue série
B) RESOLUTION DU BUG
Il suffit de spécifier vos ordres en conditions ou sinon d'utiliser ma fonction >>> DebugPauseUnit <<< _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 15/11/07 17:13; édité 1 fois
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: 14/11/07 22:03 Sujet du message:
Ordres reçus quand l'unité possède une compétence que l'on peut activer / désactiver
A ma connaissance les ordres concernés sont :
- "undefend"
- "magicundefense"
- "unflamingarrows"
Il y en a peut être d'autres.
Si une unité possède une telle compétence elle recoit l'ordre de la désactiver ( Texte Ordre chaînes off ) 1 ou 2 fois, dans les cas suivants :
- remove de la compétence : ( 2 fois )
- kill de l'unité ( 1 fois )
- remove de l'unité ( 2 fois )
Et ce, même si la compétence n'est pas disponible ( requis valides ) et désactivée pour le joueur possesseur de l'unité.
A) EXPLOITATION DU BUG
J'ai une idée un peu bizarre à défaut de mieux pour l'instant.
Ca pourrait servir pour éxécuter automatiquement une suite d'actions , du genre anti leak sans devoir le faire à chaque remove d'unité.
bon d'accord c'est un peu space comme idée
B) RESOLUTION DU BUG
Vous pouvez utiliser une variable booleene.
Cela fonctionne parfaitement pour le remove ability et le kill mais pas pour le remove unit.
ex :
Gui:
Trigger:
Actions
Set b = FALSE -------- votre action -------- Unité - Kill Fantassin 0000 <gen> Set b = TRUE
Il ne vous reste plus qu'à rajouter en condition de votre trigger détectant les ordres sans cible :
Gui:
Trigger:
b Egal à TRUE
On ne peut utiliser cette technique avec le remove unit, car cette fonction est trop lente, on pourrait rajouter un wait mais si vous utilisez une globale, comme dans cette exemple c'est pas top
L'astuce consiste à kill l'unité d'abord, mettre un wait de 0 s et remove l'unité ensuite
IMPORTANT : Votre variable booleene globale doit avoir la valeur initiale TRUE _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 19/01/08 19:54; édité 3 fois
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: 15/11/07 19:09 Sujet du message:
Impossible de donner un ordre sans cible
Quand l'unité vient de recevoir un ordre avec point/objet pour cible, lui donner un ordre sans cible sera sans effet
A) EXPLOITATION DU BUG
En cherchant une amélioration de la résolution du bug j'ai eu l'idée de donner à l'unité un ordre sans cible (celui reçu par la mise en pause d'une unité ) et ca fonctionne
Ca stoppe immédiatement l'unité et conserve même l'ordre sans cible si l'unité en avait un (tenir position, stop, etc).
Par contre si vous voulez donner un autre ordre sans cible, c'est toujours aussi lent
On peut mettre un wait juste avant l'action sans cible mais dans ce cas l'unité aura le temps de bouger.
A défaut de mieux j'ai trouvé cette technique :
Gui:
Trigger:
Test
Evénements
Unité - A unit Reçoit un ordre avec objet pour cible Unité - A unit Reçoit un ordre avec point pour cible
Conditions
Actions
Unité - Pause (Triggering unit) Unité - Order (Triggering unit) to Arrêter // ou si l'ordre voulu n'est pas stop utiliser le custom script du haut ( EXPLOITATION DU BUG ) car l'ordre sans cible ne sera détecté qu'un peu de temps aprés la demande de celui ci :( Unité - Reprendre (Triggering unit) -------- votre ordre s'il est différent de stop -------- Unité - Order (Triggering unit) to Tenir la position
IMPORTANT : Ne pas oublier l'ordre généré par la pause d'une unité _________________
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: 19/01/08 19:50 Sujet du message:
a partir de maintenant je ne repecterais plus ma propre mise en forme (trop de boulot pour pas assez de lectures).
Ca sera la foire au bug.
J'en ai appris un récemment.
Si on utilise l'index 8191 (index maximum) d'une variable déployée.
Il devient impossible de charger une partie sauvegardée de cette map (warcraft plante au chargement) _________________
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: 20/01/08 11:22 Sujet du message:
pas besoin, t'utilises l'index 8191 de nimporte quel variable déployée, et tu lui donnes une quelquonque valeur à l'init de la map, pour être sûr de ne pas oublier _________________
Inscrit le: 21 Aoû 2007 Messages: 915 Sujets: 47 Spécialité en worldedit: Faire des maps avec 500 déclos en GUI alors que 2 en JASS suffisent Médailles: 1 (En savoir plus...)
Posté le: 20/01/08 13:05 Sujet du message:
Il y a aussi celui ci :
Gui:
Trigger:
Evénements
Map initialization
Conditions
Actions
Set Reg[0] = Région 000 <gen> Set Reg[1] = Région 001 <gen> Set Reg[2] = Région 002 <gen>
Gui:
Trigger:
Evénements
Unité - A unit enters Région 000 <gen> Unité - A unit enters Région 001 <gen> Unité - A unit enters Région 002 <gen>
Conditions
Actions
For each (Integer A) from 0 to 2, do (Actions)
Boucle - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
(Reg[(Integer A)] contains (Triggering unit)) Egal à TRUE
Alors - Actions
Set ResuPoint[(Player number of (Owner of (Entering unit)))] = Reg[(Integer A)] Partie - Display to (All players) the text: (String((Integer A))) Skip remaining actions
Sinon - Actions
Qui ne fonctionne que si l'unité vient de la gauche ou d'en bas de la région
Résolution :
Gui:
Trigger:
Evénements
Map initialization
Conditions
Actions
Set Reg[1] = Point1 <gen> Set Reg[2] = Point2 <gen> Set Reg[3] = Point3 <gen> Set Reg[4] = Point4 <gen>
For each (Integer A) from 1 to 4, do (Actions)
Boucle - Actions
Set Center[(Integer A)] = (Center of Reg[(Integer A)])
Set Unit[1] = Fantassin 0000 <gen> Set ResuPoint[1] = (Center of Depart <gen>)
Gui:
Trigger:
Evénements
Unité - A unit enters Point1 <gen> Unité - A unit enters Point2 <gen> Unité - A unit enters Point3 <gen> Unité - A unit enters Point4 <gen>
Conditions
(Unit-type of (Triggering unit)) Egal à Fantassin
Actions
Set Dist = 1000000000.00 Set U = (Triggering unit) Set TempPoint = (Position of U)
For each (Integer A) from 1 to 4, do (Actions)
Boucle - Actions
Set R = (Distance between Center[(Integer A)] and TempPoint)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
R Inférieur à Dist
Alors - Actions
Set Index = (Integer A) Set Dist = R
Sinon - Actions
Set ResuPoint[(Player number of (Owner of U))] = Center[(Integer A)] Effet spécial - Create a special effect at (Center of Reg[Index]) using AbilitiesSpellsOtherHowlOfTerrorHowlCaster.mdl Effet spécial - Destroy (Last created special effect) Son - Play Rescue <gen> Custom script: call RemoveLocation(udg_TempPoint)
Je sais pas vraiment a quoi est du la bug donc il faudrai bien expliqué ^^ _________________
Brissou de Mourièssou Créateur de sorts, depuis 1936.
Inscrit le: 30 Aoû 2007 Messages: 1510 Sujets: 26 Spécialité en worldedit: Développer des jeux vidéos pour le fun, donc world edit c'est comme faire une addition. Médailles: 2 (En savoir plus...)
Posté le: 20/01/08 13:25 Sujet du message:
Euh je suis le seul à trouver que ce bug sert à rien et qu'il est plutôt néfaste ?
Je vois mal en quoi c'est trop cool de pas pouvoir save/load Oo _________________
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: 20/01/08 13:27 Sujet du message:
Hmm Kopaka cette solution ne fonctionne que si les regions sont suffisamment petites et éloignées les une des autres.
quand l'event une unité entre dans une région se déclenche :
Quand l'unité vient de la droite son X est plus grand que le Xmax de la region , elle est donc considérée en dehors de la région.
Quand l'unité vient du haut son Y est plus grand que le Ymax de la region , elle est donc considérée en dehors de la région.
J'ai pas essayé avec l'event une unité sort d'une région
Brissou de Mourièssou a écrit:
Euh je suis le seul à trouver que ce bug sert à rien et qu'il est plutôt néfaste ?
Je vois mal en quoi c'est trop cool de pas pouvoir save/load Oo
+1 c'est surtout à eviter car de toute façon on peut détecter le chargement d'une partie
Edit : tient c'est une annonce now _________________
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: 20/01/08 18:55 Sujet du message:
Quand j'ai appris le bug, j'ai enfin compris pourquoi Vexorian n'utilisait pas l'index 8191 pour le Vjass.
Mais ce genre de mentalité ca m'énerve.
Fallait le trouver ce bug, et il est resté trés longtemps dans un cercle trés fermé de geeks de l'hack de l'éditeur.
Si jamais je me mets à l'éditeur de starcraft2 (en gros si ils me répondent ), je créerais un tel topic _________________
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2, 3, 4, 5Suivante
Page 1 sur 5
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