Calcul d'Xp des monstres

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#1
Bonjour/Bonsoir
Je demande votre aide pour savoir, dans quel classe on peut trouver où Dofus calcule l'xp qu'on peut gagner contre un groupe de monstres ?
J'ai un peu cherché, mais Sothink bug quand je fais des recherches :oops:
Me donner la classe où il calcul, ou me dire simplement la logique de ce calcul :ugeek:
Merci beaucoup pour votre aide.
 
A

Anonymous

Invité
#2
Utilise pas sothink, mais JPEXS comme décompilateur, ce sera plus pratique pour faire des recherches.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#3
Yes, sinon c'est dans la class du monstre tu devrais avoir une variable du genre experience. Sinon c'est dans les frames de dofus, ya ptetre un calcul.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
Salut , ou sinon dans les d2o (regarde plutôt par la car c'est la)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
ToOnS mais des fois ya des etoiles donc on gagne plus d'xp. Experience serait static et on multiplierait donc l'xp par le nombre d'etoiles +1 ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
ah oui pardon j'avais lu trop vite je coyais qu'il cherchait le lvl des monstres , pas l'xp donc oui tu as raison c'est dans les messages
 
A

Anonymous

Invité
#8
Merci pour vos réponses, mais je n'ai rien trouvé dans les d2o qui parle d'xp
Mais je crois plutôt qu'on peut le trouver dans le dossier "/UI" pas dans le dafusinvoker ?!
EDIT: ah merci tifoux, je vais lire & relire WorldRpMonstersGroupTooltipUi :)
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#9
Voici le code que j'utilise sur Stump :

Code:
public static int CalculateWinExp(CharacterFighter fighter)
        {
            if (fighter.HasLeft())
                return 0;

            IEnumerable<MonsterFighter> monsters = fighter.OpposedTeam.GetAllFighters<MonsterFighter>(entry => entry.IsDead()).ToList();
            IEnumerable<CharacterFighter> players = fighter.Team.GetAllFighters<CharacterFighter>().ToList();

            if (!monsters.Any() || !players.Any())
                return 0;

            int sumPlayersLevel = players.Sum(entry => entry.Level);
            byte maxPlayerLevel = players.Max(entry => entry.Level);
            int sumMonstersLevel = monsters.Sum(entry => entry.Level);
            byte maxMonsterLevel = monsters.Max(entry => entry.Level);
            int sumMonsterXp = monsters.Sum(entry => entry.Monster.Grade.GradeXp);

            double levelCoeff = 1;
            if (sumPlayersLevel - 5 > sumMonstersLevel)
                levelCoeff = (double)sumMonstersLevel / sumPlayersLevel;
            else if (sumPlayersLevel + 10 < sumMonstersLevel)
                levelCoeff = ( sumPlayersLevel + 10 ) / (double)sumMonstersLevel;

            double xpRatio = Math.Min(fighter.Level, Math.Truncate(2.5d * maxMonsterLevel)) / sumPlayersLevel * 100d;

            int regularGroupRatio = players.Where(entry => entry.Level >= maxPlayerLevel / 3).Sum(entry => 1);

            if (regularGroupRatio <= 0)
                regularGroupRatio = 1;

            double baseXp = Math.Truncate(xpRatio / 100 * Math.Truncate(sumMonsterXp * GroupCoefficients[regularGroupRatio - 1] * levelCoeff));
            double multiplicator = fighter.Fight.AgeBonus <= 0 ? 1 : 1 + fighter.Fight.AgeBonus / 100d;
            var xp = (int)Math.Truncate(Math.Truncate(baseXp * ( 100 + fighter.Stats[PlayerFields.Wisdom].Total ) / 100d) * multiplicator * Rates.XpRate);

            return InvokeWinXpModifier(fighter, xp);
        }
Code:
public static readonly double[] GroupCoefficients =
new[]
{
1,
1.1,
1.5,
2.3,
3.1,
3.6,
4.2,
4.7
};
 
Haut Bas