Anatomie d'un Drop

M

Myrdinn

Invité
LE post est assez long à lire et est un minimum technique/mathematique
Il decrit les mecanismes internes du jeu, comme d'habitude les
questions sont les bienvenues.

Avant de commencer je voudrais comme d'habitude remercier Jarulf même s'il ne lira jamais ce post :D

Le mieux est de le faire a travers un exemple.
Vous etes Clvl70 et vous venez de tuer Mephisto en HELL.
Quel est son Drop???
Les fichiers abordés sont en piece jointe (Zipées) au format Excell

PREMIERE ETAPE : DETERMINATION DE L'OBJET
Les objets sont decrits dans le treasureclassex.txt
Chaque ligne est un TC=TreasureClass
Le TC de Mephisto en HELL est en ligne 685 sous Excell
Ce qu'il faut regarder

Colonne B Picks=7 c'est à dire que Mephisto peut dropper jusqu'a 7 objets.
En réalité le jeu est limité à 6, il faut comprendre il a 7 chances.
Il fait 7 fois ce qui suit.

Colonne G NoDrop : Valeur 15
Colonnes Suivantes :
gld,muilti Proba 5
Act4(H)EquipA Proba 52
Act4(H)Junk proba 5
Act4(H)Good Proba 3

La somme des Probas vaut 15+5+52+5+3=80

La signification
Dans L'ordre
NoDrop 15 chance sur 80 =18,75% de dropper que d'alle

Gld,mult.. c'est la chance de dropper de l'or=5/80 = 6,25
La formule pour calculer la taille du tas d'or est la suivante:
gold = random[(ilvl * 5)] + Ilvl (Merci Hammerman)
Ensuite l'or est modifié par la formule suivante
gold = gold + (gold * (goldbonus / 256))
Ensuite on applique Le GoldFing(GF) Anoter pas de Diminishing Return
gold = (gold * (%goldfind + 100)) / 100

ActxEquipA c'est la chance de dropper une arme ou armure =52/80=65%

Act4...Junk c'est la proba de dropper objet(Potion,parchemin,cle...==6,25%

Act4...Good c'est la proba de dropper bijou(Gemme,rune;amu,anneau)=3,75%

Avant de continuer. Il faut savoir que ces valeurs dependent du nombre de joueur.
Le nombre de joueur dans la Map/coterie diminue la chance d NoDrop,
je develloperais ce point plus tard.

Continuons
Admettons que l'on ai tiré Act4[h]EquipA
On obtient une arme ou armure Laquelle???
Act4[h]EquipA est un nouveau TC
On change de ligne sous excell:La ligne 97
On regarde les lignes H et suivante pareil on obtient
Somme des Proba=4116
Weap69 Proba 2
Armo69 Proba 1
Weap72 Proba 6
Armo72 Proba 3
Weap75 Proba 14
Armo75 Proba 7
Weap78 Proba 2
Armo78 Proba 1
Act3(H]EquipA 3980 (C'est encore un autre TC de classe inférieure)

De meme pour avoir les pourcentage faire Proba/Somme des proba
Exemple Weap75 =14/4116 soit 0,34%

Explication
Weap69 signifie Arme dont le Qlvl est compris entre 67 et 69
Armo78 signifie Armure dont le Qlvl est compris entre 76 et 78
LA liste de ces armes et armures est donné dans Weapon.txt et Armor.txt (Cf post 5 pour explication plus precise)
Etc ...
Vous avez compris la derniere ligne renvoie sur un autre TC de type ActeIII Hell ou
Vous retrouver des Weapxx et Armoxx inferieur ainsi qu'un ACTE2(H)EquipA
Et ainsi de suite

Donc Mephisto peut dropper toutes les armes et armures jusq'au niveau 78 et pas plus.
Vous pourrez regarder le reste tout seul le principe est toujours le meme.
Si vous avez des questions n'hesitez pas

OK Mephisto c'est assez facile.
Si c'est un autre monstre il faut regarder les fichiers Monstats.txt et Superuniques.txt

La suite en dessous
 
M

Myrdinn

Invité
Precision

Ou trouver le treasureClass
Vous aller me dire OK pour les boss la ligne d'entrée dans le TreasureClassEx est facile à trouver
Qu'en est il pour un monstre classique??
Pour cela il faut ouvrir Monstat.txt
Prenez la ligne 21 pour mes fallen adorés (dechu en français)
Les Colonnes GQ et suivante donne dans l'ordre les treasureclass de
Fallen Normal
Fallen ChampionNormal
Fallen Unique Normal
Fallen Nightmare
Fallen Champion nightmare
...
Après idem que Mephisto pour determiner l'objet
Pour les uniques (Bishibosh,pindleskin) c'est dans superunique.xls en piece jointe egalement. La vous trouverez facilement les colonnes. :)

Pou vous donner une idée je vous conseille ce post

Calcul du non drop
Revenons au non drop et prenons celui d'un Fallen Normal comme exemple
TresaureClassEx.txt Act 1 H2H A
C'est a dire la Ligne 271
Le NoDrop est de 100 sur la somme des proba 160

Soit 100/160=62,5%

Comme je vous l'ai dit c'est si vous etes tout seul
Autrement le calcul est

1) Calculer le nombre de joueur actif =
1(vous)+1/2par membre de la coterie dans autre zone)+1/2 Par joueur dans la partie(Non Coterie)+1(Par joueur dans la map et dans la coterie)
Arrondis à l'inferieur
Exemple vous jouez dans une game de trois dont un hors coterie dans la meme map que votre equipier
Ca fait 1(Vous)+1(Equipier)+1/2(L'autre)=2,5 arrondie à 2

2)Elever à la puissance du nombre trouvé le pourcentage de NoDrop
Ici ca fait 0,625^2 soit 0,39 (39%)

3)Calculer la nouvelle fraction comme ci dessous
SommeProbaDrop(horsNoDrop)*Nouveau pourcentage/(1-pourcentage)
60*0.39/(1-0.39) =38
Le nouveau Nodrop=38/somme des probas=38/98=environ 39%

Maintenant que vous savez determiné l'objet
Passons à la qualité (Unique?Set? ....)
 
M

Myrdinn

Invité
DEUXIEME ETAPE: LA QUALITE DE L'OBJET

Dans l'ordre si l'objet peut etre de differentes qualité le jeu determine si
Il est unique
Set
Rare
Magique
Bonne Qualité
Normal
Si toutes les etapes echoue alors l'objet et de mauvaise qualité.


Tout debute dans le fichier ItemRatio.txt en piece jointe XLS du premier Post.

Explication
La première colonne c'est pour les humains. Le jeu s'en Moque :lol:
Les Trois suivantes reecrivent pour l'ordinateur les info de la premiere colonne
Dans l'ordre
Version
0 DiabloII Classic
1 LOD
Uber
O Normal
1 Exceptionnel ou elite
ClassSpecific
Facile vous aurez compris ;)

Ensuite pour chaque qualité arrive
La chance de base. Objet unique Normal LOD -->500
De base une chance sur 500 d'avoir un unique.
Divisor
Regle l'influence du niveau du monstre sur le calcul voir la suite
Minimum
Pas encore utilisé, mais ca pourrait l'etre dans la 1.10. En fait ca n'existait pas dans la beta, c'est meme très récent :)

Exemple de Mephisto Hell
Vous venez de tuer Mephisto MLVL90 il droppe
La suite dans partie 4
 
M

Myrdinn

Invité
Reprenons le calcul. Un exemple au hasard Mephisto droppe une ballista

Je vais detaillé pour l'unique, la suite c'est pareil
Vous trouvez une ballista QLVL47
L'unique est BURIZA qui est QLVL49
Bizarre le hasard quand meme :)

1)Chance de base
La ligne
Vous jouez à LOD c'est un Uber non class-Specific --> ligne 5 de ItemRatio.xls

Dans unique la valeur est 500

Pour l'instant vous avez une chance sur 500 de dropper une Buriza
Continuons

2)Le MLVL
Le MLVL de Mephisto est 90 en HELL, QLVL de Buriza 49
Différence 90-49=41
Le UniqDivisor est 1

La nouvelle chance=Value-(MLVL-QLVL)/divisor
Ici c'est 500-41=459

Maintenant vous avez une chance sur 459

3)Facteur Monstre
Si on revient sur le TreasureClassEx.XLS de Mephisto on voit
Colonne C Unique 800
Colonne D Set 800
Colonne E Rare 900
Colonne F Magic 1024
Ici on s'interresse à unik le reste vous aurez compris ;)
La nouvelle chance est

Chance=Valeur*128-Valeur*128*Colonne/1024

On pourrait oublier le 128. Pourquoi? C'est ainsi que le jeu fonctionne car il utilise des nombres entiers donc pour la l'extra-précision il multiplie par 128
Reprenons

Chance=459*128-459*128*800/1024=12852
La chance pour vous est 12852/128=100

donc maintenant on est a 1 chance sur 100 et des poussières
Le 128 permet de reduire les poussières car le jeu ne gere
que des nombres entiers

4)Votre MF et celui de votre Merco
Rapidement si Le merco ou un minion(golem,valkyrie,shadow master ...)fait le kill
Son MF s'additionne au tien

Admettons que vous ayez 100 en MF (J'omet le diminishing Return pour simplifier les calculs)
La nouvelle chance est

Valeur*100/(100+MF*X)
ou X=1/5 pour les unique
1/3 pour les sets et rares
Et 1 pour les magiques

Donc dans notre exemple la chance est egal à

12852*100/[100+100/5]=12852*0,8333333...=10709,...

Si vous avez plus de 10 en MF. Alors il ne faut plus utiliser le MF mais l'EMF(EffectiveMagicFind comme EIAS pour l'IAS) dans les formules du dessus avec

EMF=(Avec application du Diminishing Return) ICI MF = BASE + MF bref le (100+MF) de la formule précédente (MErci Ulmo pour la demande de précision)

Pour les uniques
EMF=100 + (250*(MF-100)/(MF+150) <=> MF*250/(MF+250)

Pour les sets
EMF=100 + (500*(MF-100)/(MF+400) <=> MF*500/(MF+500)

Pour les rares
EMF=100 + (600*(MF-100)/(MF+500) <=> MF*600/(MF+600)

Pour les magic
EMF=MF


Moralité avec Meme en Hell
On a 128 chance sur 10709
soit 1 chance sur 10709/128
Soit 1 chance Sur 83,67... que la Balista soit une buriza

5)Pour Finir
Le jeu tire un nombre aleatoire entre 1 et La chance calculé ici 10709
Si le resultat est entre 0 et 127 l'objet est unique
Autrement on recommence le calcul pour le set

TROISIEME ETAPE :Objet Ethéré
Une fois la qualité détéreminée le jeu calcul si l'objet est ethéré avec les conditions suivantes :

1) L'objet doit être une arme ou une armure (Tout type d'armure cad gants, bouclier...) Bref il doit appartenir aux groupes weap ou Armo pour les modders

2)Ensuite il doit avoir une durabilité et ne doit pas avoir la propriété Indestruct bref en français il ne doit pas être indestructible.

3) Si l'objet est de mauvaise qualité ou de set Alors l'objet ne peut pas être ethéré. Bref il peut être de bonne qualité

4) Si toutes ces conditions sont remplies(pour chaque point enoncé il y a un exit si le test est négatif) il y a a peu près 5% (en réalité 7 chance sur 128) que l'objet soit Ethéré.


La seule exception serait une formule du cube horadrim ou le code ,eth serait utilisé, et encore sous certaines conditions.
 
M

Myrdinn

Invité
Quelque Precision et de la place pour repondre à vos questions
Revenons sur le calcul

Dans l'étape 3 Facteur Monstre
Admettons que le debut echoue et que l'on arrive à magic
L'etape 3 donne comme resultat pour Mephisto
Valeur*128-Chance*128*1024/1024
0????

Moralité on a 128 chance sur 0. En mathematique blizzard ca veut dire 100%
Un objet droppé par Mephisto est toujours Bleu au minimum (Pas les potions evidemment ;) )

Nombre de pick Negatif
Parfois le nombre de picks est negatif pourquoi?
Le drop n'est plus aléatoire mais obligatoire.
Il y a x Drop reparti parmis les treasure class secondaires.
Prenons un exmple Acte 5 Super C donne -4 donc 4 drops
Ensuite on voit 2 treasureClass avec comme proba 2
Le jeu commence par le treasure class le plus à droite (j'explique apres) il fait x drops ou x egal la proba ici 2 dans ce treasureClass. Puis il continue dans les autres treasureClass jusqu'a ce que les 4 drops soit atteint dans notre cas.
Pour resume ici on aurait 4 drop 2 dans chaque treasureClass Secondaires.

Cas de Duriel- dernieres lignes du fichier
Maintenant Duriel droppe toujours un Town Portal.
Resultat Nombre de picks-2
1pour le Town Portal(tsc)
et 1 pour sont treasure Class classique qui peut donne de 0 à 7 objets
Si vous suivez toujours je vous ai dit aux départ que le jeu est limité à 6 pour un drop de monstre.Comme on commence à droite, si le jeu atteint 6 drops dans le deuxième TreasureClass les autres drops sont ignorés et alors pas de Town Portal (Qui a dit BUG :lol: )

Super-Rare
Que se passe-t-il si on determine Unique et que l'unique n'existe pas ou que le niveau du monstre soir inferieur au QLVL de l'unique ,( idem pour le set)
On obtient 1 rare à la place
Ce rare à 3 fois plus de durabilité si il remplace un unique
Pour les set c'est un objet magique avec 2 fois plus de durabilité :)

Cas des coffres,racks ...
Le mieux est de voir le topic en question ici

Les treasuresClass speciaux Armoxx et Weapxx
Au demarrage, Le jeu lit sequentiellement les fichiers Weapon.txt et Armor.txt. A partir des QLVL des objets il cree des nouveaux treasure class Weapxx et Armoxx. Il en crée un pour 3 Level commencant à 3
On obtient Weap3 qui contient les weapon QLVL1 QLVL2 et QLVL3
puis Weap6,Weap9 .... jusqu'à Weap90(qui contient les QLVL88,89et 90) En fait il cree meme les autres jusqu'à Weap99 mais ils ne sont pas utilisés.
Idem pour les Armo qui correspondent aux armures.

Ensuite dans ces treasures class chaque objet obtient une probabilité comme dans n'importe quel treasureClass classique.
Maintenant comment sont gérés ces probas.

Pour les armures
Les objets class-specific ont leur proba à 1 alors que les objets classiques ont leur proba à 3.
Comme toujours probabilité=Proba de l'objet/Somme des probas

Pour les armes.
Comme toujours les objets classpecifique ont des fréquences Inférieures (1 ou 2) pendant que les objets non-classé ont une proba de 3.
Le problème est qu'il existe plusieurs treasureclass pour les armes. On a Weapxx pour toutes les armes, Melexx pour les armes de melee et Bowxx pour les arcs et arbalète. Tant que l'on regarde Weapxx les probas sont faciles à determinés pour chaque arme inclus dans ce TC.
Maintenant si l'on veut les probas pour une arme particulière. Il faut prendre en compte la somme des probas de 1) Weapxx (à laquelle elle appartient) et 2) Melexx ou Bowxx

MultiDrop d'unique
Un unique ne peut être droppé qu'une seule fois par partie. (Partie= action du joueur Escape/Save and Exit). Autrement même si vous possédez déjà l'unique vous pouvez toujours le dropper. Cette règle ne s'applique qu'aux uniques, elle ne concerne pas les Sets.


Voila.
Maintenant si vous avez des questions?? , il devrait y en avoir certain point n'ont pas été abordés :lol:
 
M

Myrdinn

Invité
Quelques Précision.

Cas des anneaux et amulettes
Le jeu regarde le MLVL du monstre.
Ensuite il construit un treasure class avec les anneaux dont le qlvl est <= au QLVL (idem pour amulette) en leur associant la proba de la colonne rarity. Comme tout les treasure Class la proba est egal a la rarity/Somme des proba.
Moralité pour une SOJ il vaut mieux eviter de tuer un monstre level 53 ou plus car la liste s'agrandie et les probas pour la chance diminue
Si aucun aucun anneau (pareil pour les amu) ne correspond alors il prend comme reference un super rare avec comme QLVL le QLVL de l'objet de base.


"Drop de Bishibosh"
C'est un "bug" bien connu que j'ai remonté aux dévellopeurs.
qui se manifeste de 2 façons. Une petite explication rapide des mécanismes du jeu :

Les monstres sont des unités chargées en mémoires, le jeu (dans la façon dont il est programmé) ne stoque pas toutes les informations les concernants dans la même structure mémoire.

Par exemple l'unité personnage ne contient ni l'équipement ni les skills. Ces données sont stoquées dans des plages mémoires séparées . Par contre l'unité personnage contient les pointeurs vers ces zones mémoires. Pourquoi ?
Je ne rentrerais pas dans les détails, mais c'est une façon d'optimiser la structure en exportant les zones à taille variable dans d'autres endroits. Toutes les propriétés doivent toujours être à la même place dans une structure.
Exemple si toutes tes skills se trouve en position +34 il faut prévoir une centaine d'emplacement (à cause des skills que tu pourrais avoir gràce à d'autre objets comme un anneau de téléportation par exemple) pour que la position +104 contiennent toujours la même chose. Encore pire pour l'équipement. résultat on en fait des structures séparées et on se contente du pointeur permettant de trouver ces structures.

Bref pas la peine de tvous embrouiller d'avantage. Il se trouve que dans certains cas (Retour en ville, eloignement du monstre à 1 ecran et demi, mort ...) Une partie de ces informations externes sont effacées car jugées inutiles par le jeu, dans ce cas les points de vie, le nom du monstre ... sont bien conservé mais le reste est reconstitué par les valeurs par défaut, dont le TreasureClass.

Je parlais de 2 façons. Les voila

-remplacement par les données de Bishibosh (première ligne du fichier superuniques.txt) c'est le cas quand on force les anciens à dropper. C'est le cas des uniques execpté les boss de fin d'acte.
- remplacement par le premier monstres de Monstats.txt (a vérifier quand même) pour les autres monstres c'est à dire Skeleton. C'est également le cas pour les Boss de fin d'acte, ce qui explique que lorsque vous tuez laborieusement mephisto il vous droppe 1 potion et un parchemin (ou une anneau +1 Degat Max). Vous êtes la victime du Bug du drop Skeleton



A moins qu'il y ait des questions ce sera tout pour ce post ce jour.
Je ferais quelques mises à jour plus tard ;)
A vos Questions ;)
 
O

oninogohei

Invité
avant les questions, d'abord les félicitations:
:clap:

sacré boulot bravo
 
T

tiissa

Invité
Ben pour être encore plus complet (est-ce possible ? ;)) tu pourrais rajouter dans la partie 3 le petit topo sur les éthérés et les sockets comme ça tout serait résumé dans le post ;)
Sinon vraiment un gros merci à toi pour tous ces nombres illisibles :D
 
M

Myrdinn

Invité
Pour les etherés et les socket je ne connais qu'une partie des données.
Le reste je le connais au travers des travaux de Jarulf, mais j'aimerais le verifier si possible.
Sinon je ferais un peu de recherche et Ok je poste
Petit rappel en attendant
A priori etheré environ 5% (7/128)
Socket de 1/3 à 5% suivant les auteurs, d'ou mon indecision :lol:
 
T

tiissa

Invité
Alors reprenons un peu cette partie 4 :D (t'as peur hein ? ;)) :
Paragraphe 2 :
tu fais : Mlvl - Qlvl
Mais tu parles du Qlvl de buri mais tu utilises celui de balliste :nono: c'est lequel c'est celui de l'unique non ?
Ca nous fait une chance à 459 (je passes sur les erreurs de calcul :D)

Paragraphe 3 :
pour la formule : chance := valeur*128 - chance*128*colonne/1024
la variable valeur c'est 500 ? ou 459 comme la variable chance? (De toute façon tu as transformé 467 en 463 mais c'est pas le nombre qui est important)

Paragraphe 4 :
Juste que 100/(100+100/5) ça doit pas faire 0.5 (mais c'est un détail)


Merci de m'avoir lu et de repréciser pour le néophyte que je suis les quelques points de détail qui m'ont échappés à cette 2° lecture :D


edit : remplacement des balises code par font=courier
 
M

Myrdinn

Invité
Je suis assez nul en calcul mental :lol:
En bon proffessseur je pourrait dire c'est pour voir si vous suivez :lol:
Ca m'apprendra
Alors

Valeur c'est l'ancienne prise dans le paragraphe précedent

Ok C'est le QLVL de Buriza qu'il faut prendre et donc 1 chance sur 459

Ok Ca fait pas 0,5 mais 0,833333
Bien Vu, j'editerais pas pour l'instant( demain peut etre) on comprendrais plus ton post. Les chiffres sont assez faux. Le resultat final ne devrait pas etre trop différent.
 
M

Myrdinn

Invité
C'est la nouvelle Valeur
Valeur=chance du paragraphe precedent
Chance=nouvelle chance calculée dans le paragraphe
Fait moi plaisir n'essaye pas de verifier si j'ai bien respecte cette regle :lol:
J'ai tapé tout d'une traite, je ferais un edit general plus tard apres impression de la page ;)
 
T

tiissa

Invité
chance := valeur*128 - chance*128*colonne/1024
Le chance de gauche c'est la nouvelle valeur qu'on est en train de calculer : ok
Le valeur de droite c'est la valeur obtenue au paragraphe d'avant : ok
Et le chance de droite ? en rouge là :)D) ? C'est le même que valeur ?

edit : J'effacerais bien évidemment tous les posts inutiles pour qu'il ne reste plus que la magnifique quintescence de la substantifique moëlle :D
 
M

Myrdinn

Invité
Effectivement c'est valeur
Previens moi quand tu seras Ok Tiissa, je ferais un EDIT general.

EDIT pas la peine d'effacer tes posts. J'assume :lol:

RE-EDIT
Je commence à corriger
 
T

tiissa

Invité
Provient du message de Myrdinn
Effectivement c'est valeur
Previens moi quand tu seras Ok Tiissa, je ferais un EDIT general.

EDIT pas la peine d'effacer tes posts. J'assume :lol:

RE-EDIT
Je commence à corriger
Chuis ok.
Juste une remarque, peut-être que tu pourrais séparer les formules du texte en changeant la font (courier par exemple ? :rolleyes: )...C'est juste une suggestion, à toi d'apprécier (et de voir si tu as le temps et pas la flemme ;))

Je vais quand même en effacer certains pour alléger le post, c'est déjà long à lire alors si en plus ya des conneries au milieu...

Et merci encore :D
 
M

Mescalito

Invité
juste une petite remarque: t'aurais pas oublier d'inclure le fichier superunique.xls ?

merci pour toutes ces infos, je vais tenter d'en faire un truc plus facile à utiliser (genre automatiser les calculs que tu fais... pour avoir un apercu plus rapide de ki peut droper koi)
Si j'y parviens, je le posterais (avec Copyright Myrdinn ;) )
 
M

Myrdinn

Invité
Non j'ai pas oublié il est dans le post N°2 en piece jointe avec Monstat
Le programme dont tu parles existe deja sur diabloii.net
Sinon Thott calcule le drop avant application de la qualité
Il y en sans soute d'autre
J'en ai fait un personnellement
L'interet est qu'il fonctionne pour mon MOD et que je suis le seul à ma connaissance a pouvoir donner les drops pour
Constricting Ring

@Tiissa Ok pour les font je le ferais bientot, la j'ai un serveur a installer. ;)
 
T

tiissa

Invité
Provient du message de Myrdinn

Que se passe-t-il si on determine Unique et que l'unique n'existe pas, idem pour le set
On obtient 1 rare à la place
Je t'arrête !! :p
Pour déterminer si c'est un unique on a utilisé le Qlvl de l'unique donc on sait déjà s'il y en a un ou pas !! (dans le paragraphe 2 de la partie 4)
Il fait le calcul avec le Qlvl de l'objet normal pour savoir s'il droppe un super rare ? ou alors j'ai pas compris ?


J'ai dit merci ?
 
M

Mescalito

Invité
Provient du message de Myrdinn
Non j'ai pas oublié il est dans le post N°2 en piece jointe avec Monstat

oups :p je l'avais téléchargé trop tôt

Provient du message de Myrdinn
Le programme dont tu parles existe deja sur diabloii.net
...
J'en ai fait un personnellement

justement, jveux voir si j'y arrive, donc si j'ai bien tout compris du mécanisme que tu détailles ici

ptite question: les fichier mpq, tu les ouvres avec un éditeur hex pour chopper toutes ces infos?

edit: c bon, j'ai trouve des mpq_viewer
 
Haut