Fix calcul de l'expérience
Ajout d'une commande pour calculer l'expérience pour augmenter
This commit is contained in:
@ -3,6 +3,20 @@ const competenceTroncs = [["Esquive", "Dague", "Corps à corps"],
|
||||
["Epée à 1 main", "Epée à 2 mains", "Hache à 1 main", "Hache à 2 mains", "Lance", "Masse à 1 main", "Masse à 2 mains"]];
|
||||
|
||||
const competence_xp_par_niveau = [5, 5, 5, 10, 10, 10, 10, 15, 15, 15, 15, 20, 20, 20, 20, 30, 30, 40, 40, 60, 60, 100, 100, 100, 100, 100, 100, 100, 100, 100];
|
||||
const competence_niveau_max = competence_xp_par_niveau.length - 10;
|
||||
|
||||
function _buildCumulXP() {
|
||||
let cumulXP = { "-11": 0 };
|
||||
let cumul = 0;
|
||||
for (let i = 0; i <= competence_xp_par_niveau.length; i++) {
|
||||
let level = i - 10;
|
||||
cumul += competence_xp_par_niveau[i];
|
||||
cumulXP[level] = cumul;
|
||||
}
|
||||
return cumulXP;
|
||||
}
|
||||
|
||||
const competence_xp_cumul = _buildCumulXP();
|
||||
|
||||
export class RdDItemCompetence extends Item {
|
||||
|
||||
@ -43,44 +57,25 @@ export class RdDItemCompetence extends Item {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static computeCompetenceXPCost(competence) {
|
||||
let minLevel = competence.data.base;
|
||||
if (minLevel == competence.data.niveau) return 0;
|
||||
if (competence.data.niveau < -10) return 0;
|
||||
|
||||
let xp = 0;
|
||||
for (let i = minLevel + 1; i <= competence.data.niveau; i++) {
|
||||
xp += competence_xp_par_niveau[i + 10];
|
||||
//console.log(i, i+10, competence_xp_par_niveau[i+10]);
|
||||
}
|
||||
if (competence.data.categorie == 'draconic') {
|
||||
xp += competence.data.xp_sort;
|
||||
}
|
||||
let xp = RdDItemCompetence.getDeltaXp(competence.data.base, competence.data.niveau ?? competence.data.base);
|
||||
xp += competence.data.xp ?? 0;
|
||||
xp += competence.data.xp_sort ?? 0;
|
||||
return xp;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeCompetenceTroncXP(competences) {
|
||||
let xp = 0;
|
||||
static computeEconomieCompetenceTroncXP(competences) {
|
||||
let economie = 0;
|
||||
for (let troncList of competenceTroncs) {
|
||||
let minNiveau = 0;
|
||||
for (let troncName of troncList) {
|
||||
let comp = RdDItemCompetence.findCompetence(competences, troncName);
|
||||
if (comp) {
|
||||
minNiveau = Math.min(comp.data.niveau, minNiveau);
|
||||
}
|
||||
}
|
||||
minNiveau = Math.max(minNiveau, 0); // Clamp à 0, pour le tronc commun
|
||||
let minNiveauXP = competence_xp_par_niveau[minNiveau + 10];
|
||||
xp += minNiveauXP;
|
||||
for (let troncName of troncList) {
|
||||
let comp = RdDItemCompetence.findCompetence(competences, troncName);
|
||||
if (comp) {
|
||||
xp += competence_xp_par_niveau[comp.data.niveau + 10] - minNiveauXP;
|
||||
}
|
||||
}
|
||||
let list = troncList.map(name => RdDItemCompetence.findCompetence(competences, name))
|
||||
.sort( (c1, c2) => c2.data.niveau - c1.data.niveau); // tri du plus haut au plus bas
|
||||
list.splice(0,1); // ignorer la plus élevée
|
||||
list.forEach(c => {
|
||||
economie += RdDItemCompetence.getDeltaXp(c.data.base, Math.min(c.data.niveau, 0) );
|
||||
});
|
||||
}
|
||||
return xp;
|
||||
return economie;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static findCompetence(list, name) {
|
||||
name = name.toLowerCase();
|
||||
@ -89,7 +84,24 @@ export class RdDItemCompetence extends Item {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getCompetenceNextXp(niveau) {
|
||||
return competence_xp_par_niveau[niveau + 10];
|
||||
return RdDItemCompetence.getCompetenceXp(niveau + 1);
|
||||
}
|
||||
|
||||
static getCompetenceXp(niveau) {
|
||||
RdDItemCompetence._valideNiveau(niveau);
|
||||
return niveau < -10 ? 0 : competence_xp_par_niveau[niveau + 10];
|
||||
}
|
||||
|
||||
static getDeltaXp(from, to) {
|
||||
RdDItemCompetence._valideNiveau(from);
|
||||
RdDItemCompetence._valideNiveau(to);
|
||||
return competence_xp_cumul[to] - competence_xp_cumul[from];
|
||||
}
|
||||
|
||||
static _valideNiveau(niveau){
|
||||
if (niveau < -11 || niveau > competence_niveau_max) {
|
||||
console.warn("Niveau en dehors des niveaux de compétences: [-11, " + competence_niveau_max + "]", niveau)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user