Yopla,
alors je voulais écrire des explications plus détaillées hier, mais j'étais un peu naze...
La simu est déjà modifiée, et produit déjà pas mal plus de surprises.
Je n'ai pas trop forcé pour les paramètres, donc le classement est encore largement respecté (dans 75 à 80% des matchs où la différence de classement est moyenne, je pense), pour préserver le statut des meilleurs joueurs (sinon, ils restent les meilleurs joueurs à la fin de l'année, mais avec bcp trop de défaites).
Version courte (en français
) :
"FormLowering" est le coefficient maximale de perte de force, pour simuler l'état de forme du jour.
A 0.4, il fait perdre au maximum 40% de la force des joueurs.
Ce coefficient est multiplié par un nombre tiré au hasard compris entre 0 et 1, modifié par "FormPow".
Plus "FormPow" est grand, plus la baisse de forme maximale sera rare. Plus il est petit, plus la baisse de forme maximale sera fréquente.
Les 2 joueurs ont chacun leur propre forme du jour.
Ce sont ces paramètres qui augmentent vraiment les chances des joueurs forts de perdre contre les joueurs plus faibles qu'eux.
"StressPow" serre à simuler le "petit bras" du joueur le plus fort. Seul le joueur le plus fort en est affecté.
Il voit sa force diminuer pour atteindre celle du plus faible.
Plus "StressPow" est grand, plus il est rare pour le fort de se retrouver au niveau du faible. Plus il est petit, plus il est fréquent pour le fort de se retrouver au niveau du faible.
Ce paramètre fait que certains matchs entre 1 joueur très fort et 1 joueur très faible sont plus équilibrés.
(/!\ : il rapproche également les joueurs déjà proches)
Version longue (en maths) :
Ca se passe en 2 étapes.
1ère étape, on cacule la force des joueurs et on applique le ratio de la forme du jour.
Skill = Fonction_Compliquée_dépendante_des_compétences_du_joueur;
Le ratio est réglé à "FormLowering".
ratio = FormLowering;
Avec FormLowering à 0.4, on enlevera au maximum 40% de la force du joueur.
pour chaque joueur, on tire ensuite un nombre aléatoire compris dans [0 ; 1[ .
Rd = Random();
Ensuite, on transforme ce nombre aléatoire à l'aide d'une fonction : on l'élève à la puissance "FormPow".
Rd = Rd ^ FormPow;
Avec FormPow à 6, cela fait que la plupart du temps, la diminution sera minimale : seulement 25% du temps, Rd sera supérieur à 0.2 .
(si on n'applique pas la fonction, alors c'est linéaire, et 50% du temps Rd est supérieur à 0.5, 75% du temps supérieure à 0.25, etc...)
Si vous avez une calculatrice scientifique, vous pouvez vous faire une idée de la courbe avec une fonction comme ceci :
y = graph(pow(x, 6), 0, 1) (fonction pour x de 0 à 1)
Ensuite, on multiplie le ratio maximale et le ratio aléatoire :
ratio = ratio * Rd;
Et on applique le produit à la force:
Skill = Skill * (1 - ratio);
Voilà, on a une force qui dépend d'un paramètre aléatoire qui fait que certain jour, les joueurs ont pas trop la patate.
Maintenant, le paramètre petit bras, qui fonctionne sur le même principe de calcul.
On prend la différence entre la force du joueur le plus fort et la force du joueur le plus faible :
Différence = SkillFort - SkillFaible;
On multiplie cette différence par le coefficient "StressLowering", pour obtenir la valeur maximale qu'on pourra retirer à la force du plus fort.
Moi j'ai mis 1, donc ça ne change rien à la différence, donc au final, le plus fort pourra se retrouver au pire avec la force du plus faible. Vous pouvez mettre par exemple 1.2, pour que le plus fort se retrouve au pire encore moins fort que le plus faible.
Ensuite on recalcule le ratio de la même manière que pour la forme du joueur.
Rd = Random();
Rd = Rd ^ StressPow;
Et on enlève le produit de la différence et de ce ratio à la force du plus fort :
SkillFort = SkillFort - Rd * Difference * StressLowering;
Voilà, si vous avez tout compris, ben alors vous devriez être programmeur !
(ou je devrais p'tet devenir professeur ...

)
@Gollum :
Si tu fais comme tu avais écris dans le message de la DB que tu as posté (et que j'ai corrigé

), alors il faut que tu changes le fichier Players.ini, et non pas Players.bak !