B
BoulaTheBoula
Invité
Provient du message de hohorga
Boula, ici on est pas pressé évites de tout compresser : on a du mal à comprendre ce que tu écrits
C'est quoi le nom de la DLL pour décoder le Boula ? :razz:
THC.dll
Note: This feature may not be available in some browsers.
Provient du message de hohorga
Boula, ici on est pas pressé évites de tout compresser : on a du mal à comprendre ce que tu écrits
C'est quoi le nom de la DLL pour décoder le Boula ? :razz:
C'est pour l'instant mon but JE veux juste que vous compreniez un peu les bases. Ensuite l'exemple devrait être plus abordables et vous permettra de relire les bases plus facilement. Ca n'a rien d'évident, d'autant que je ne suis pas professeur ni formateur de métierSi je puis me permettre, l’expression, je ne les comprends que de façon grossière, car je vois de ce dont tu parles, mais je ne peux rien coller comme image dessus
Provient du message de Myrdinn
Puis en relisant le tout mon transfert de compétence sera peut etre un succès.
#include supermath.h
float CalculBidon(float BidonA, float BidonB, int *erreur)
{
float Resultat;
Resultat=FastAdd(BidonA,BidonB,erreur);
if (erreur==0)
{
return FastMul(Resultat,BidonA,erreur);
}
else
return 0;
}
Euh non (quoique certainement un peu vu le nombre d'info qu'il laisse trainé dans les Dlls). Justement pour ne pas avoir à réécrire sans cesse les choses qui ne bougent pas ou presque depuis les premiers patch (Lire le IlvL de tel objet, calcule lles %ED de la maitrise à partir des MPQs ...) Bref la plupart des fonctions générales(D2common.dll) n'ont pas bougés depuis les premiers patch ou depuis l'extension. Ensuite il fallait séparer le client (D'ou le D2client.dll) du serveur (D2game.dll) car suivant les cas elles sont chargées en mémoire sur le client et/ou serveur. Ensuite la partie graphisme n'a presque pas évoluée, bref pas la peine de déplacer ou réécrire la partie graphique, donc la d2GFX.dll reste inchangée. Si tu mets tout dans la même Dll alors il faut, a chaque fois que tu insère une nouvelle fonction que tu réécrives les table d'exportation et les appels internes. Bref beaucoup de bonne raison de séparé les fonctions dans plusieurs DllsProvient du message de Tony
Blizzard a fait cela volontairement pour favoriser le moding, donc si je comprends bien, n'est ce pas ?
Je sais que ce point a été abordé dans les posts suivants (non sans quelques anicroches), mais je tenais à lancer mon petit caillou inutile dans la mare.[...]
Maintenant l'exemple
L'UNIT Dégat
+00 Flags
..........1) Annule les dégats physiques 0=non 1=oui (Pareil pour toute la suite)
..........2) Annule tous les dégats
..........4) Annule le vol de vie
..........8) Annule le vol de mana
.........10) Annule le vol de stamina
.........20) ????
.........40) Berserk Actif
Bref si la valeur est 5 les dégats physiques et vol de vie sont annulés dans la procédure de combat. Autre remarque seul
le premier byte est utilisé sur les 4
+04 REsultat du coup
..........1) Touché
..........2) Dégats > Point de vie de la cible
..........4) Attaque "ne peut etre interrompue" Concentration par exemple
..........8) Knockback
.........10) Block (Annule 1)
.........20) Coup critique
.........40) Thorn
.........80) Dodge (Annule 1)
........100) Avoid (Annule 1)
........200) Evade (Annule 1)
........400) Iron Maiden
........800) Life Tap
.......1000) Annule attaque ne peut être interrompue (Annule 4)
.......2000) Coup critique
.......4000) Graphisme associé au coup reçu
+08 Dégats Physiques
+0c +Dégats physiques %
+10 Dégats de feu
+14 Dégat de brulure
+18 Durée de brulure
+1c Dégats de Foudre
+20 Dégats Magiques
+24 Dégats de Froid
+28 Dégats de poison
+2c Durée du poison
+30 Durée de chill
+34 Durée de Freeze
+38 Vol de vie
+3c Vol de mana
+40 Vol de stamina
+44 Durée de Stun
+48 Dégats Absorbés
+4c Dégats Totaux
[...]
Les ??? sont dus au fait que je ne sais pas si le programme utilise ces dword en arithmétique signée (de -(2^31) = - 2 147 483 648 à 2^31 - 1 = 2 147 483 648) ou non (de 0 à 2^32 - 1 = 4 294 967 295) ...[...]
Maintenant l'exemple
L'UNIT Dégat
Dword en +00 : Flags
0x01 = 0b_0000_0001 ) Annule les dégats physiques : 0=non 1=oui (Pareil pour toute la suite)
0x02 = 0b_0000_0010 ) Annule tous les dégats
0x04 = 0b_0000_0100 ) Annule le vol de vie
0x08 = 0b_0000_1000 ) Annule le vol de mana
0x10 = 0b_0001_0000 ) Annule le vol de stamina
0x20 = 0b_0010_0000 ) ????
0x40 = 0b_0100_0000 ) Berserk Actif
Bref, si la valeur est 0x05 = 0b_0000_0101, les dégats physiques et vol de vie sont annulés dans la procédure de combat. Autre remarque : de par le codage 'little endian' utilisé, seul le premier (le LSB, le plus faible) des 4 bytes du dword est utilisé.
Dword en +04 : Résultat du coup
0x0001 = 0b_0000_0000_0000_0001 ) Touché
0x0002 = 0b_0000_0000_0000_0010 ) Dégats > Point de vie de la cible
0x0004 = 0b_0000_0000_0000_0100 ) Attaque "ne peut être interrompue" (Concentration par exemple)
0x0008 = 0b_0000_0000_0000_1000 ) Knockback
0x0010 = 0b_0000_0000_0001_0000 ) Block (Annule 0x0001)
0x0020 = 0b_0000_0000_0010_0000 ) Coup critique
0x0040 = 0b_0000_0000_0100_0000 ) Thorn
0x0080 = 0b_0000_0000_1000_0000 ) Dodge (Annule 0x0001)
0x0100 = 0b_0000_0001_0000_0000 ) Avoid (Annule 0x0001)
0x0200 = 0b_0000_0010_0000_0000 ) Evade (Annule 0x0001)
0x0400 = 0b_0000_0100_0000_0000 ) Iron Maiden
0x0800 = 0b_0000_1000_0000_0000 ) Life Tap
0x1000 = 0b_0001_0000_0000_0000 ) Annule attaque ne peut être interrompue (Annule 0x0004)
0x2000 = 0b_0010_0000_0000_0000 ) Coup critique
0x4000 = 0b_0100_0000_0000_0000 ) Graphisme associé au coup reçu
De même, seul le premier word (le LSW) est ici utilisé.
Dwords en :
+08 : Dégats Physiques
+0C : + Dégats physiques %
+10 : Dégats de feu
+14 : Dégat de brûlure
+18 : Durée de brûlure
+1C : Dégats de Foudre
+20 : Dégats Magiques
+24 : Dégats de Froid
+28 : Dégats de Poison
+2C : Durée du Poison
+30 : Durée de Chill
+34 : Durée de Freeze
+38 : Vol de vie
+3C : Vol de mana
+40 : Vol de stamina
+44 : Durée de Stun
+48 : Dégats Absorbés
+4C : Dégats Totaux
Par contre, ici, le dword représente directement la valeur dont il est question, valeur pouvant donc aller de ??? à ???.
[...]
Ok c'est peut être plus parlant surtout pour l'aspect booléen des flags. En tout cas c'est une bonne idée pour la première approche, si j'aborde les différents Unit du jeu je pense que cette notation deviendra lourde.Provient du message de Simon33
Voici un exemple de notation qui d'après moi est moins nébuleux pour un néophyte (bien que prenant plus de place à la rédaction):Les ??? sont dus au fait que je ne sais pas si le programme utilise ces dword en arithmétique signée (de -(2^31) = - 2 147 483 648 à 2^31 - 1 = 2 147 483 648) ou non (de 0 à 2^32 - 1 = 4 294 967 295) ...
Quel est la réponse du Maître ?
@++
[edit]Yeepeekaï ! J'ai la 33ème réponse ![/edit]