}
* @private
*/
async _generateTechniques(actor, newItemsData) {
// Clear actor items
const deleteIds = actor.data.items.filter((e) => e.type === "technique").map((e) => e.id);
if (deleteIds.length > 0) {
await actor.deleteEmbeddedDocuments("Item", deleteIds);
}
const avgrv = this.data.avgRingsValue;
/**
* Techs config
*
* exemple: {
* probability: .7,
* skill: {
* grp_name: "scholar",
* value_min: 1,
* },
* qty: {
* min: 1,
* max: avgrv,
* },
* },
*/
const techCfg = {
kata: {
probability: 1,
skill: {
grp_name: "martial",
value_min: 1,
},
qty: {
min: 1,
max: avgrv,
},
},
kiho: {
probability: 0.1,
skill: {
grp_name: "martial",
value_min: 1,
},
},
ninjutsu: {
probability: 0.1,
skill: {
grp_name: "martial",
value_min: 1,
},
},
shuji: {
probability: 1,
qty: {
min: 1,
},
},
rituals: {
probability: 0.2,
},
maho: {
probability: 0.1,
},
invocations: {
probability: 0.3,
skill: {
grp_name: "scholar",
value_min: 1,
},
qty: {
min: 2,
max: Math.max(2, avgrv),
},
},
};
for (const pack in techCfg) {
const cfg = techCfg[pack];
// Minimum skill required (npc only for now)
if (!!cfg.skill && actor.data.data.skills[cfg.skill.grp_name] < cfg.skill.value_min) {
console.log("1");
continue;
}
console.log("2");
// Check probabilities to have more than min qty
let qtyMax = cfg.qty?.min ?? 0;
if (Math.random() < cfg.probability) {
qtyMax = CharacterGenerator._randomInt(cfg.qty?.min ?? 0, cfg.qty?.max ?? avgrv);
}
for (let qty = 0; qty < qtyMax; qty++) {
// Rank is limited by avgRingsValue
let item;
do {
item = await CharacterGenerator._getItemFromPack(`l5r5e.core-techniques-${pack}`);
} while (item && item.data.data.rank > avgrv);
if (item) {
// console.log('adding', pack, item.data.name);
newItemsData.push(foundry.utils.duplicate(item.data));
}
} // fr qty
} // fr techCfg
}
/**
* Fill notes with some values that don't appear in sheet
* @param {DocumentData.data} actorDatas
* @private
*/
_generateNotes(actorDatas) {
actorDatas.notes =
`${game.i18n.localize("l5r5e.social.age")}: ${this.data.age}
` +
`${game.i18n.localize("l5r5e.social.gender.title")}: ${game.i18n.localize(
"l5r5e.social.gender." + this.data.gender
)}
` +
`${game.i18n.localize("l5r5e.clan")}: ${game.i18n.localize("l5r5e.clans." + this.data.clan)}
` +
`${game.i18n.localize("l5r5e.social.marital_status.title")}: ${game.i18n.localize(
"l5r5e.social.marital_status." + this.data.maritalStatus
)}
`;
}
/**
* Generate Narrative fluff
* @param {DocumentData.data} actorDatas
* @private
*/
_generateNarrative(actorDatas) {
// actorDatas.description = '';
}
//