Ajout arme morsure au chafouin
retravail sur les competences; - standardiser les noms de fichiers de templates - méthodes classify pour construire une multimap par type - méthodes pour charger les entrées du compendium - méthodes spécifiques au compétences déplacées
This commit is contained in:
@ -1,17 +1,37 @@
|
||||
|
||||
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];
|
||||
|
||||
export class RdDItemCompetence extends Item {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isCompetenceMelee(name) {
|
||||
return name.toLowerCase().match(/(epée|épée|hache|fleau|fléau|masse|lance|hast|dague|bouclier)/);
|
||||
static isCompetenceArme(competence) {
|
||||
switch (competence.data.categorie) {
|
||||
case 'melee':
|
||||
return competence.name.toLowerCase() != 'esquive';
|
||||
case 'tir':
|
||||
case 'lancer':
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isArmeUneMain(competence) {
|
||||
return competence && competence.name.toLowerCase().includes("1 main");
|
||||
return competence?.name.toLowerCase().includes("1 main");
|
||||
}
|
||||
static isArme2Main(competence) {
|
||||
return competence?.name.toLowerCase().includes("2 main");
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isMalusEncombrementTotal(competence) {
|
||||
return competence && competence.name.toLowerCase().match(/(natation|acrobatie)/);
|
||||
return competence?.name.toLowerCase().match(/(natation|acrobatie)/);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static setRollDataCreature(rollData) {
|
||||
rollData.carac = { "carac_creature": { label: rollData.competence.name, value: rollData.competence.data.carac_value } };
|
||||
rollData.competence = duplicate(rollData.competence);
|
||||
@ -19,4 +39,65 @@ export class RdDItemCompetence extends Item {
|
||||
rollData.competence.data.categorie = "creature";
|
||||
rollData.selectedCarac = rollData.carac.carac_creature
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isTronc(compName) {
|
||||
for (let troncList of competenceTroncs) {
|
||||
for (let troncName of troncList) {
|
||||
if (troncName == compName)
|
||||
return troncList;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
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;
|
||||
}
|
||||
return xp;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeCompetenceTroncXP(competences) {
|
||||
let xp = 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
return xp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static findCompetence(list, name) {
|
||||
name = name.toLowerCase();
|
||||
return list.find(item => item.name.toLowerCase() == name && (item.type == "competence" || item.type == "competencecreature"))
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getCompetenceNextXp(niveau) {
|
||||
return competence_xp_par_niveau[niveau + 10];
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user