Ajout multiples pour le combat et ameliorations des items
This commit is contained in:
@ -11,7 +11,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-te-deum", "sheet", "actor"],
|
||||
template: "systems/fvtt-te-deum/templates/actors/actor-sheet.hbs",
|
||||
width: 860,
|
||||
@ -33,10 +33,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
system: duplicate(this.object.system),
|
||||
system: foundry.utils.duplicate(this.object.system),
|
||||
limited: this.object.limited,
|
||||
competences: this.actor.getCompetences(),
|
||||
config: duplicate(game.system.tedeum.config),
|
||||
config: foundry.utils.duplicate(game.system.tedeum.config),
|
||||
armes: this.actor.getArmes(),
|
||||
caracList: this.actor.prepareCaracteristiques(),
|
||||
providence: this.actor.prepareProvidence(),
|
||||
@ -44,6 +44,11 @@ export class TeDeumActorPJSheet extends ActorSheet {
|
||||
equipements: this.actor.getEquipements(),
|
||||
armures: this.actor.getArmures(),
|
||||
graces: this.actor.getGraces(),
|
||||
blessures: this.actor.getBlessures(),
|
||||
maladies: this.actor.getMaladies(),
|
||||
poisons: this.actor.getPoisons(),
|
||||
combat: this.actor.prepareCombat(),
|
||||
santeModifier: this.actor.getSanteModifier(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
|
||||
options: this.options,
|
||||
|
@ -89,48 +89,91 @@ export class TeDeumActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCompetences() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'competence') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'competence') || [])
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getGraces() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'grace') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'grace') || [])
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getArmes() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'arme') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'arme') || [])
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getEquipements() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'equipement') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'equipement') || [])
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getArmures() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'armure') || [])
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || [])
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getBlessures() {
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'blessure') || [])
|
||||
for (let c of comp) {
|
||||
let blessDef = game.system.tedeum.config.blessures[c.system.typeBlessure]
|
||||
c.malus = blessDef.modifier
|
||||
}
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getMaladies() {
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'maladie') || [])
|
||||
for (let c of comp) {
|
||||
c.malus = "N/A"
|
||||
if (c.system.appliquee) {
|
||||
let malDef = game.system.tedeum.config.virulence[c.system.virulence]
|
||||
c.malus = malDef.modifier
|
||||
}
|
||||
}
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getPoisons() {
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'poison') || [])
|
||||
for (let c of comp) {
|
||||
c.malus = "N/A"
|
||||
if (c.system.appliquee) {
|
||||
let poisDef = game.system.tedeum.config.virulencePoison[c.system.virulence]
|
||||
c.malus = poisDef.modifier
|
||||
}
|
||||
}
|
||||
TeDeumUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
calculMalusBlessures() {
|
||||
let modifierBlessures = 0
|
||||
let nbBlessures = 0
|
||||
// Cumul des malus de blessures
|
||||
for (let locKey in this.system.localisation) {
|
||||
let loc = this.system.localisation[locKey]
|
||||
let bDef = game.system.tedeum.config.blessures[loc.blessures]
|
||||
modifierBlessures += bDef.modifier
|
||||
nbBlessures += bDef.count
|
||||
getSanteModifier() {
|
||||
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'maladie') || [])
|
||||
let modTotal = 0
|
||||
for (let c of comp) {
|
||||
if (c.system.appliquee) {
|
||||
let maladieDef = game.system.tedeum.config.virulence[c.system.virulence]
|
||||
modTotal += maladieDef.modifier
|
||||
}
|
||||
}
|
||||
let simples= foundry.utils.duplicate(this.items.filter(item => item.type == 'simple') || [])
|
||||
for (let c of simples) {
|
||||
if (c.system.appliquee) {
|
||||
let simpleDef = game.system.tedeum.config.virulencePoison[c.system.virulence]
|
||||
modTotal += simpleDef.modifier
|
||||
}
|
||||
}
|
||||
let blessures = foundry.utils.duplicate(this.items.filter(item => item.type == 'blessure') || [])
|
||||
for (let c of blessures) {
|
||||
let blessDef = game.system.tedeum.config.blessures[c.system.typeBlessure]
|
||||
modTotal += blessDef.modifier
|
||||
}
|
||||
// Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire
|
||||
let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance")
|
||||
if ( nbBlessures > endurance.system.score) {
|
||||
modifierBlessures += -1
|
||||
}
|
||||
return modifierBlessures
|
||||
if ( blessures.length > endurance.system.score) {
|
||||
modTotal += -1
|
||||
}
|
||||
return modTotal
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -160,7 +203,26 @@ export class TeDeumActor extends Actor {
|
||||
providence.dice = game.system.tedeum.config.providence[providence.value].diceValue
|
||||
return providence
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareCombat() {
|
||||
let combatLoc = foundry.utils.deepClone(this.system.localisation)
|
||||
for (let key in combatLoc) {
|
||||
combatLoc[key] = foundry.utils.mergeObject(combatLoc[key], game.system.tedeum.config.LOCALISATION[key])
|
||||
combatLoc[key].armures = []
|
||||
combatLoc[key].protectionTotal = 0
|
||||
let armures = this.getArmures()
|
||||
for (let armure of armures) {
|
||||
if (armure.system.equipe && armure.system.localisation[key].protege) {
|
||||
combatLoc[key].armures.push(armure)
|
||||
combatLoc[key].protectionTotal += armure.system.protection
|
||||
}
|
||||
}
|
||||
let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance")
|
||||
combatLoc[key].endurance = endurance.system.score + game.system.tedeum.config.LOCALISATION[key].locMod
|
||||
combatLoc[key].touche = combatLoc[key].endurance + combatLoc[key].protectionTotal
|
||||
}
|
||||
return combatLoc
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
modifyProvidence(value) {
|
||||
let providence = foundry.utils.duplicate(this.system.providence)
|
||||
@ -202,7 +264,7 @@ export class TeDeumActor extends Actor {
|
||||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
}
|
||||
return item;
|
||||
}
|
||||
@ -232,7 +294,7 @@ export class TeDeumActor extends Actor {
|
||||
|
||||
/* ------------------------------------------- */
|
||||
async buildContainerTree() {
|
||||
let equipments = duplicate(this.items.filter(item => item.type == "equipment") || [])
|
||||
let equipments = foundry.utils.duplicate(this.items.filter(item => item.type == "equipment") || [])
|
||||
for (let equip1 of equipments) {
|
||||
if (equip1.system.iscontainer) {
|
||||
equip1.system.contents = []
|
||||
@ -288,10 +350,13 @@ export class TeDeumActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore(combatId, combatantId) {
|
||||
let init = Math.floor((this.system.attributs.physique.value + this.system.attributs.habilite.value) / 2)
|
||||
let subValue = new Roll("1d20").roll({ async: false })
|
||||
return init + (subValue.total / 100)
|
||||
getInitiativeScore() {
|
||||
let initiative = this.items.find(it=>it.type == "competence" && it.name.toLowerCase() == "initiative")
|
||||
if ( initiative ) {
|
||||
return initiative.system.score
|
||||
}
|
||||
ui.notifications.warn("Impossible de trouver la compétence Initiative pour l'acteur " + this.name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -327,8 +392,8 @@ export class TeDeumActor extends Actor {
|
||||
rollData.actorId = this.id
|
||||
rollData.img = this.img
|
||||
rollData.providence = this.prepareProvidence()
|
||||
rollData.malusBlessures = this.calculMalusBlessures()
|
||||
|
||||
rollData.santeModifier = this.getSanteModifier()
|
||||
|
||||
return rollData
|
||||
}
|
||||
|
||||
@ -336,7 +401,7 @@ export class TeDeumActor extends Actor {
|
||||
getCommonCompetence(compId) {
|
||||
let rollData = this.getCommonRollData()
|
||||
|
||||
let competence = duplicate(this.items.find(it => it.type =="competence" && it.id == compId))
|
||||
let competence = foundry.utils.duplicate(this.items.find(it => it.type =="competence" && it.id == compId))
|
||||
|
||||
rollData.competence = competence
|
||||
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
|
||||
@ -357,15 +422,30 @@ export class TeDeumActor extends Actor {
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollArme(armeId) {
|
||||
rollArme(armeId, compName = undefined) {
|
||||
let weapon = this.items.get(armeId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
weapon = foundry.utils.duplicate(weapon)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "arme"
|
||||
rollData.arme = weapon
|
||||
rollData.img = weapon.img
|
||||
rollData.title = weapon.name
|
||||
|
||||
// Setup competence + carac
|
||||
if (!compName) {
|
||||
compName = weapon.system.competence
|
||||
}
|
||||
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
|
||||
if ( competence) {
|
||||
rollData.competence = competence
|
||||
let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique])
|
||||
this.updateCarac( c, competence.system.caracteristique)
|
||||
rollData.carac = c
|
||||
} else {
|
||||
ui.notifications.warn("Impossible de trouver la compétence " + compName)
|
||||
return
|
||||
}
|
||||
this.startRoll(rollData).catch("Error on startRoll")
|
||||
} else {
|
||||
ui.notifications.warn("Impossible de trouver l'arme concernée ")
|
||||
|
Reference in New Issue
Block a user