[1.10][1.09]L'expérience

M

Myrdinn

Invité
Avant de prendre ma retraite, voici un nouveau post sur les mécanismes du jeu.

En ce moment Je lis souvent des posts sur l'expérience, et comme je suis en désaccord avec le site officiel et les sites officieux, il est temps que je donne ma version des faits :D Je n'ai aucune certitude sur tous les points que je vais aborder, je suis comme toujours ouvert à tout débat contradictoire si vous avec de solides arguments :D

Ce post sera un minimum technique, les allergiques prendront de l'aspirine ou passeront les calculs ;)

Je tiens à remercier FoxBat (Le fameux auteur entre autre de Diablo2 Accelerator et de l'excellent SevenLance), même s'Il ne lira jamais ce post,pour m'avoir donné la plupart des offsets pour la version 1.08 / 1,09B.

Bon passons à l'expérience, c'est assez difficile à suivre de bout en bout car les morceux de codes sont eparpillés un peu partout,si j'ai oublié quelquechose, vous êtes les bienvenus pour me le faire remarquer.

Il y a 3 parties nécessaires pour calculer l'expérience.
Je donnerais les infos pour les versions 1.09 et 1.10

1)La naissance des monstres

Les Fichiers Nécessaires
Vous aurez besoin de
PAtch_D2.MPQ\Data\Global\Excel\Monstats.txt
PAtch_D2.MPQ\Data\Global\Excel\MonLvl.txt
PAtch_D2.MPQ\Data\Global\Excel\Levels.txt

BaseXP
A partir de ces 3 fichiers, il est possible de calculer les points d'expérience de base des monstres.
Le mieux est de donner un exemple.
Vous rencontrez un Fallen (Déchu) Dans la map DarkWood en normal.

Levels.txt
ligne 7 sous excel pour la Map DarkWood(Colonne DQ)
Les colonnes BE,BF et BG donne l'AreaLvl respectivement pour Normal,Cauchemar et enfer. En normal notre Fallen qui est influencé par le AreaLvl est MLVL=5

Monstats.txt
Ligne 22 pour notre fallen (J'ai choisi arbitrairement le Fallen 2 car c'est celui par defaut de la Map voir Levels.txt)
La colonne FC(Exp) nous donne l'expérience de base du Fallen=61

MonLvl.txt
Ligne 7 sous excel (La colone A Level nous indique la ligne à choisir suivant le MLVL)
En ladder on utilise la colonne AC (L-XP pour Ladder-Expérience) =70 C'est l'EXP% à appliquer suivant le niveau. Ici un monstre niveau 5 en Ladder a 70% de son expérience.

Exp Base du Fallen 2 (Map DarkWood) = 61*70/100 = 42 (Arrondi à l'inférieur c'est une IntegerDivision en Assembleur)

Players X
A la création les points de vie et d'expérience du monstre sont ajustés suivant le nombre de joueur (Qui peut être simulé par la commande /Players X en solo)
C'est un tableau extrait de la D2GAme.dll
En 1.10 on peut résumer ce tableau en disant que l'on a un bonus d'expérience de 50% par joueur supplémentaire, ce qui peut également être résumé par la formule suivante :

Exp=Base+Base*(NbJoueur-1)/2
Pour la version 1.09 je donne le contenu du tableau dans Ce post

2)La Mort du monstre
Ou encore Comment répondre à la question : Comment sont répartis les gains?

Bonus de Coopération
Le bonus pour les joueurs dans la même coterie est de
EXPGroupe=base+Base*(Nb de joueur-1)*35/100
Le forum officiel oublie de préciser que c'est 35% par joueur supplémentaire et indique seulement 35%.
En réalité c'est 89/256eme ce qui fait un peu moins de 35%

Cette formule s'applique aux joueurs Vivants dans la même MAP et dans la même coterie(A moins de 50 yards du tueur pour la 1.10 si j'ai tout compris :confused: )

Le partage
Le jeu additionne ensuite les niveaux des joueurs(CLVL-CharacterLevel) de tout les participants.
Ensuite chaque participant reçoit comme expérience
Exp=ExpGroupe*CLVL/(Somme des CLVL)

FAQ
Doit on accepter les leechers?
OUI - Tout personnage dont le niveau est inférieur au votre vous apporte forcément un bonus d'expérience quand il est dans votre coterie.

En construction
 
M

Myrdinn

Invité
3)Les Bonus Malus Personnel

Bonus du tueur
A ma connaissance le Bonus pour le Tueur n'existe pas (Je ne suis même pas sur qu'il ait existé un jour), tout au moins, je n'ai rien vu dans le code à ce sujet ;) Probablement une légende battlenetique :D

Bonus
Il existe 2 types de Bonus.
Expérience Shrine --> 50%
Objet donnant +Exp%
LA formule est Exp=Exp+Exp*(BonusShrine+BonusObjet%)/100

Malus de différence de niveau.
2 cas Les personnages avant le niveau 25 et les personnages Après le niveau 25

Rappel en 1.09D
Code:
CLVL<25
CLVL-MLVL	Coef(Hexa)	%Exp
0-5		100		100
6		CF		81
7  		9F  		62
8		6E		43
9		3D		24
10+		D		5
  
MLVL-CLVL	Coef(Hexa)	%Exp
0-5		100		100
6		E1		88
7  		AE  		68
8		5C		36
9		26		15
10+		D		5

Code:
CLVL>25
CLVL-MLVL	Coef(Hexa)	%Exp
0-5		100		100
6		CF		81
7  		9F  		62
8		6E		43
9		3D		24
10+		D		5
  
MLVL-CLVL  	%Exp
>0		(CLVL/MLVL)*100

Maintenant en 1.10

Code:
CLVL<25
CLVL-MLVL	Coef(Hexa)	%Exp
0-5		100		100
6		CF		81
7  		9F  		62
8		6E		43
9		3D		24
10+		D		5
  
MLVL-CLVL	Coef(Hexa)	%Exp
0-5		100		100
6		E1		88
7  		AE  		68
8		5C		36
9		26		15
10+		5		2

Code:
CLVL>25
CLVL-MLVL	Coef(Hexa)	%Exp
0-5		100		100
6		CF		81
7  		9F  		62
8		6E		43
9		3D		24
10+		D		5
  
MLVL-CLVL  	%Exp
>0		(CLVL/MLVL)*100
Bref la différence est minime. Elle concerne les perso dont le niveau est inférieur à 25 et dont la différence avec le monstre est supérieur à 10. Le résultat est 2% au lieu de 5%. Sinon pas de changement.

Malus des Personnages Haut Level

Il vous faut un nouveau fichier PAtch_D2.MPQ\Data\Global\Excel\experience.txt

La colonne I(ExpRatio) vous donne le malus à appliquer au haut niveau.
La formule etant Exp=Exp*ExpRatio/1024
Bref pour supprimer ces malus en solo il suffit simplement de mettre 1024 pour tout les niveaux.

Pour le reste du fichier c'est assez facile à comprendre.
Pour les amoureux des formules la progression de l'expérience requise est basée sur la formule
Perso <28
(Exp(lvl+1)-exp(Lvl))=1.25*(Exp(lvl)-exp(Lvl-1))
Après le niveau 27 la formule devient
(Exp(lvl+1)-exp(Lvl))=1.09*(Exp(lvl)-exp(Lvl-1))

Pour la 1.09 c'était un Malus Hardcodé dans D2Game.dll

Code:
Malus	CLVL
1/2 	76-80
1/3	81-85
1/4	86-90
1/5	91-98
0	99


4) Cas spéciaux Lié à l'expérience.
L'expérience des anciens

Archi Connu.
Bref je vais faire dans l'original avec les valeurs à changer pour les moddeurs intéressés

Code:
00086C1E   90               NOP
00086C1F   90               NOP
00086C20   83EC 10          SUB ESP,10
00086C23   53               PUSH EBX
00086C24   55               PUSH EBP
00086C25   56               PUSH ESI
00086C26   57               PUSH EDI
00086C27   8BF9             MOV EDI,ECX
00086C29   8BF2             MOV ESI,EDX
00086C2B   897C24 18        MOV DWORD PTR SS:[ESP+18],EDI
00086C2F   E8 EC00FEFF      CALL 00066D20
00086C34   33C0             XOR EAX,EAX
Bon sauvegarde classique des registres et allocation d'expace sur la pile

00086C36   BB C05C1500      MOV EBX,155CC0
Ok en normal on a 0x155CC0 Soit 1,400,000 Xp

00086C3B   8A47 6D          MOV AL,BYTE PTR DS:[EDI+6D]
EAX=Difficulty Mode (Normal=0,cauchemar=1 ou enfer=2)

00086C3E   48               DEC EAX
00086C3F   74 0A            JE SHORT 00086C4B
Si difficulté=nightmare alors jump section Cauchemar sinon on continue

00086C41   48               DEC EAX
00086C42   75 0C            JNZ SHORT 00086C50
00086C44   BB 005A6202      MOV EBX,2625A00
00086C49   EB 05            JMP SHORT 00086C50
Si difficulté= enfer alors Exp=0x2625A00 (40,000,000)
Sinon exit avec valeur par défaut = Normal

00086C4B   BB 002D3101      MOV EBX,1312D00
EXp pour cauchemar Ox1312D00 (20,000,000)

Quelque soit le niveau on arrive ici
00086C50   85F6             TEST ESI,ESI
...

Bref pour changer les valeurs il faut modifier les valeurs en couleur avec un éditeur héxa :D

L'expérience des anciens est limité à 1 niveau Voila ce que l'on trouve un peu plus loin dans la même routine.

Code:
00086CA8   2BE8             SUB EBP,EAX 
XP(Niveau Suivant)-XP(niveau actuel)
00086CAA   3BDD             CMP EBX,EBP
Compare Exp donné par les anciens avec valeur de 
passage d'un niveau que l'on vient de calculer

00086CAC   7E 02            JLE SHORT 00086CB0
Si inférieur alors OK on passe

00086CAE   8BDD             MOV EBX,EBP
Autrement on remplace l'expérience donné par les 
anciens par l'expérience pour passer du niveau actuel 
au niveau suivant

00086CB0   85DB             TEST EBX,EBX
00086CB2   74 74            JE SHORT 00086D28
00086CB4   6A 00            PUSH 0
00086CB6   6A 1E            PUSH 1E
00086CB8   56               PUSH ESI

Perte d'XP


Le cas des mercenaires
Voici un extrait du post sur les mercenaires explicants la problématique de l'expérience :D

5) Mercenaire et Expérience

Le montant d'expérience requis pour le mercenaire est calculé à partir de la colonne Exp/lvl.
LA formule étant
MLVLx((MLVL+1)²)xColonneExp/lvl

Vous remarquerez que les mercenaires ont beaucoup moins besoin d'expérience que nous et heureusement vous comprendrez par la suite.

Sinon a chaque Kill les règles suivantes s'appliquent

0) L'expérience initiale tient compte du nombre de joueur (Ou de la commande players X)
1) Les malus-Bonus sur l'expérience s'applique de la même façon que pour les joueurs.
2) O XP pour les kills de la coterie.
3) Totalité de l'expérience si le mercenaire fait le kill. Avec un Cap à 1/64 du montant necessaire pour passer de niveau.
4) 1/3 XP si le "maitre" (ou un des minions du maître - Merci Catyoul pour le rappel) fait le kill.

Bref dans les conditions optimum le mercenaire passe de niveau tout les 64 kills (Si il tue tous les monstres) ou tous les 192 kills si son maître tue les monstres :D. Enfin en partant du principe que les MLVLs des monstres et du mercenaires soit proches (ensuite les malus en expérience peuvent rendre le nombre de kill nécessaire bien plus élevé)

P.S. N'oubliez pas qu'un mercenaire ne peut pas dépasser votre niveau. Son expérience est bloquée dès qu'il atteint votre Niveau.
Le calcul se fait mais l'addition final non.

Voila vous pouvez poster, je compléterais le post petit à petit ;)
 
Y

Yoshi-Blast

Invité
Avant de prendre ma retraite...

:eek: :(

Sinon joli boulot, je n'ai encore compris que des bribes :p
Je ne savais pas qu'il n'y avait pas de bonus pour le tueur, merci de cette précision importante :)
 
M

Myrdinn

Invité
Je n'ai pas eut le temps d'avancer plus ce week end. Mais j'etofferais ce post avec des exemples et des questions réponses dès que je le pourrais, ca devrait être plus digeste :lol:
 
U

uauaua

Invité
Mmmm... Intéressant!

Si ce que tu dis est juste, le "Terminator", celui qui donne le coup de grâce, ne reçoit donc aucune expérience de plus que les autres!

Si cela est vrai, je trouve que cela renforce encore plus l'esprit de coopération déjà bien mis en avant depuis la 1.10...

Une nouvelle qu'il faudra largement diffuser!

Merci, tueur de Mythes ;)
 
H

hohorga

Invité
Provient du message de uauaua
Si cela est vrai, je trouve que cela renforce encore plus l'esprit de coopération déjà bien mis en avant depuis la 1.10...

Au tout au contraire les leecheurs seront moins incités à tuer des monstres... Donc l'esprit de coop...
 
K

Koko

Invité
D'abord bravo, je n'ai pas encore tout lu mais c'est passioant.
Au fait
LA formule est Exp=Exp+Exp*BonusShrine+BonusObjet%/100
Je pense que c'est plutôt
Exp=Exp+Exp*(BonusShrine+BonusObjet%)/100
Le * étant prioritaire sur l'addition les parenthéses me semblent nécessaire (a moins que la formule ne soit pas logique du tôut.
Merci au passage d'avoir confirmé ce que je soupsonnais depuis le début : les pourcents du shrine et des objets s'ajoutent (ce qui est habituel chez blizzard).
 
M

Myrdinn

Invité
Merci Koko effectivement il manque la parenthèse :D

En réalité j'ai, comme souvent, remanié les formules, en assembleur les étapes sont beaucoup moins digeste ;)
 
U

uauaua

Invité
Provient du message de hohorga
Au tout au contraire les leecheurs seront moins incités à tuer des monstres... Donc l'esprit de coop...

Pour ça y'a quand même une solution radicale que tu connais je pense (à moins que...): limitations de lvl dans les parties...

Des fois l'esprit de contrariété juste pour contredire c'est un peu agaçant, surtout quand ça frise la mauvaise foi ;)
 
A

Aerin

Invité
Provient du message de Myrdinn
Avant de prendre ma retraite, voici un nouveau post sur les mécanismes du jeu.


Argh, non, j'ai encore rien lu du post, mais je sens que je vais le savourer :bluecry:
 
C

chatmalo

Invité
Un question... Vu qu'a "la naissance" du monstre est calculé l'xp de base du monstre (qui dépend du nombre de joueurs dans la partie) si avant que le monstre soit tué tous les joueurs quittent la partie en cours, toute l'xp prévue pour 8 joueurs va etre reportée sur un seul?...

La question posée autrement... Certains persos qui tuent bcp plus vite que les autres des fois sortent de la coterie pour tuer les monstres... Ce perso va prendre toute l'xp prévue pour les 8 joueurs si c'est lui qui achève le mostre ou pas?...
 
M

Myrdinn

Invité
Provient du message de Chatmalo
Un question... Vu qu'a "la naissance" du monstre est calculé l'xp de base du monstre (qui dépend du nombre de joueurs dans la partie) si avant que le monstre soit tué tous les joueurs quittent la partie en cours, toute l'xp prévue pour 8 joueurs va etre reportée sur un seul?...

La question posée autrement... Certains persos qui tuent bcp plus vite que les autres des fois sortent de la coterie pour tuer les monstres... Ce perso va prendre toute l'xp prévue pour les 8 joueurs si c'est lui qui achève le mostre ou pas?...
C'est exact Chatmalo :D il volera toute l'expérience mais sans les 7 fois 35% de bonus du à la coterie, c'est un calcul à faire.Au passage si tu joues seul dans une autre map tu bénéficies également de l'effet des autres joueurs, c'est le même principe
 
M

Myrdinn

Invité
Provient du message de Laura-Hell
Donc les infos de l'arreat summit etaient bonnes.
Les infos étaient vraiment très fausses pour la 1.09.

Pour la 1.10 c'est déjà mieux, par contre il donne 35% de bonus pour la coterie au lieu de 35% par joueur supplémentaire.
Il manque également des petites précisions, mais bon le niveau est assez bon quand même :D
 
G

gir_linus

Invité
Provient du message de Myrdinn
C'est exact Chatmalo :D il volera toute l'expérience mais sans les 7 fois 35% de bonus du à la coterie, c'est un calcul à faire.Au passage si tu joues seul dans une autre map tu bénéficies également de l'effet des autres joueurs, c'est le même principe

je vais avoir l'air idiot
:razz: donc :

si je suis en coterie a 8 joueurs (je reste en coterie) mais je vais me tuer mes monstres à moi tout seul :evil: sur ma map je prend 8* plus d'xp ou j'ai rien compris?
ou juste 35% du bonus du à la coterie? :D
 
M

Myrdinn

Invité
Tu vas tuer les monstres à toi tout seul?
Ca veut dire quoi tu sors de la map?


Si c'est ca le monstre aura toujours de base (Cf naissance du monstre) XP+XP*7/2 et non 8 fois :rolleyes:
Par contre tu n'auras plus les bonus de coopération puisque pour s'appliquer les joueurs doivent être dans la même map. Ce bonus ne s'applique que si on partage l'XP. C'est pas un bonus pour racaille :evil: qui cherche à tirer profit des autres
 
G

gir_linus

Invité
Provient du message de Myrdinn
Tu vas tuer les monstres à toi tout seul?

oui admettons que je sois en tract ou que pendant que certains glandent en attendant mon tp pr baal je tue les monstres en étant seul sur la map ;)
Provient du message de Myrdinn
Ca veut dire quoi tu sors de la map?
je voulais dire je prends mes pixels et je me casse :razz:
non plus sérieusement je voulais dire si je ne suis plus sur la même map que les autres membres de la coterie


Provient du message de Myrdinn
Si c'est ca le monstre aura toujours de base (Cf naissance du monstre) XP+XP*7/2 et non 8 fois :rolleyes:
Par contre tu n'auras plus les bonus de coopération puisque pour s'appliquer les joueurs doivent être dans la même map.

xp+xp7/2 c'est déjà mieux que rien

Provient du message de Myrdinn
C'est pas un bonus pour racaille :evil: qui cherche à tirer profit des autres

c'est moi que tu appelles racaille :evil:














:jesors:
 
Haut