Amélioration fiche d'item
This commit is contained in:
@ -10,9 +10,6 @@ export class BoLActor extends Actor {
|
||||
/** @override */
|
||||
prepareData() {
|
||||
super.prepareData();
|
||||
|
||||
console.debug("prepareData");
|
||||
|
||||
const actorData = this.data;
|
||||
// console.log(actorData);
|
||||
// const data = actorData.data;
|
||||
@ -25,12 +22,11 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Prepare Character type specific data
|
||||
// */
|
||||
/* -------------------------------------------- */
|
||||
/**
|
||||
* Prepare Character type specific data
|
||||
*/
|
||||
_prepareCharacterData(actorData) {
|
||||
let newVitality = 10 + this.data.data.attributes.vigor.value;
|
||||
let newVitality = 10 + this.data.data.attributes.vigor.value;
|
||||
if ( newVitality != this.data.data.resources.hp.max) {
|
||||
this.data.data.resources.hp.max = newVitality;
|
||||
this.update( { 'data.resources.hp.max': newVitality});
|
||||
@ -38,18 +34,153 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBoons() {
|
||||
return this.data.items.filter(i => i.type === "feature" && i.data.subtype === "boon");
|
||||
get itemData(){
|
||||
return Array.from(this.data.items.values()).map(i => i.data);
|
||||
}
|
||||
get details() {
|
||||
return this.data.data.details;
|
||||
}
|
||||
get attributes() {
|
||||
return Object.values(this.data.data.attributes);
|
||||
}
|
||||
get aptitudes() {
|
||||
return Object.values(this.data.data.aptitudes);
|
||||
}
|
||||
get resources() {
|
||||
return Object.values(this.data.data.resources);
|
||||
}
|
||||
get boons() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon");
|
||||
}
|
||||
get flaws() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw");
|
||||
}
|
||||
get careers() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "career");
|
||||
}
|
||||
get origins() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "origin");
|
||||
}
|
||||
get races() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "race");
|
||||
}
|
||||
get languages() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "language");
|
||||
}
|
||||
get features() {
|
||||
return this.itemData.filter(i => i.type === "feature");
|
||||
}
|
||||
get equipment() {
|
||||
return this.itemData.filter(i => i.type === "item");
|
||||
}
|
||||
get weapons() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.subtype === "weapon");
|
||||
}
|
||||
get armors() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.subtype === "armor" && i.data.worn === true);
|
||||
}
|
||||
get helms() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.subtype === "helm" && i.data.worn === true);
|
||||
}
|
||||
get shields() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.subtype === "shield" && i.data.worn === true);
|
||||
}
|
||||
get protections() {
|
||||
return this.armors.concat(this.helms)
|
||||
}
|
||||
get melee() {
|
||||
return this.weapons.filter(i => i.data.properties.melee === true && i.data.worn === true);
|
||||
}
|
||||
get ranged() {
|
||||
return this.weapons.filter(i => i.data.properties.ranged === true && i.data.worn === true);
|
||||
}
|
||||
buildFeatures(){
|
||||
return {
|
||||
"careers": {
|
||||
"label": "BOL.featureCategory.careers",
|
||||
"ranked": true,
|
||||
"items": this.careers
|
||||
},
|
||||
"origins": {
|
||||
"label": "BOL.featureCategory.origins",
|
||||
"ranked": false,
|
||||
"items": this.origins
|
||||
},
|
||||
"races": {
|
||||
"label": "BOL.featureCategory.races",
|
||||
"ranked": false,
|
||||
"items": this.races
|
||||
},
|
||||
"boons": {
|
||||
"label": "BOL.featureCategory.boons",
|
||||
"ranked": false,
|
||||
"items": this.boons
|
||||
},
|
||||
"flaws": {
|
||||
"label": "BOL.featureCategory.flaws",
|
||||
"ranked": false,
|
||||
"items": this.flaws
|
||||
},
|
||||
"languages": {
|
||||
"label": "BOL.featureCategory.languages",
|
||||
"ranked": false,
|
||||
"items": this.languages
|
||||
}
|
||||
};
|
||||
}
|
||||
buildCombat(){
|
||||
return {
|
||||
"melee" : {
|
||||
"label" : "BOL.combatCategory.melee",
|
||||
"weapon" : true,
|
||||
"protection" : false,
|
||||
"blocking" : false,
|
||||
"ranged" : false,
|
||||
"items" : this.melee
|
||||
},
|
||||
"ranged" : {
|
||||
"label" : "BOL.combatCategory.ranged",
|
||||
"weapon" : true,
|
||||
"protection" : false,
|
||||
"blocking" : false,
|
||||
"ranged" : true,
|
||||
"items" : this.ranged
|
||||
},
|
||||
"protections" : {
|
||||
"label" : "BOL.combatCategory.protections",
|
||||
"weapon" : false,
|
||||
"protection" : true,
|
||||
"blocking" : false,
|
||||
"ranged" : false,
|
||||
"items" : this.protections
|
||||
},
|
||||
"shields" : {
|
||||
"label" : "BOL.combatCategory.shields",
|
||||
"weapon" : false,
|
||||
"protection" : false,
|
||||
"blocking" : true,
|
||||
"ranged" : false,
|
||||
"items" : this.shields
|
||||
}
|
||||
};
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFlaws() {
|
||||
return this.data.items.filter(i => i.type === "feature" && i.data.subtype === "flaw");
|
||||
buildRollData(mode, title) {
|
||||
return {
|
||||
mode : mode,
|
||||
title : title,
|
||||
actorId: this.id,
|
||||
actorImg: this.img,
|
||||
boons : this.boons,
|
||||
flaws : this.flaws,
|
||||
d6Bonus: 0,
|
||||
d6Malus: 0,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
optionsBonusMalus: BoLUtility.buildListOptions(-8, +2),
|
||||
bonusMalus: 0
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getCareers() {
|
||||
return this.data.items.filter(i => i.type === "feature" && i.data.subtype === "career");
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
|
||||
saveRollData( rollData) {
|
||||
this.currentRollData = rollData;
|
||||
}
|
||||
@ -61,20 +192,8 @@ export class BoLActor extends Actor {
|
||||
attr = this.data.data.aptitudes[attrKey];
|
||||
}
|
||||
if (attr) {
|
||||
let rollData = {
|
||||
mode : "attribute",
|
||||
actorId: this.id,
|
||||
actorImg: this.img,
|
||||
attribute: duplicate(attr),
|
||||
boons : this.getBoons(),
|
||||
flaws : this.getFlaws(),
|
||||
d6Bonus: 0,
|
||||
d6Malus: 0,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
title: game.i18n.localize(attr.label),
|
||||
optionsBonusMalus: BoLUtility.buildListOptions(-8, +2),
|
||||
bonusMalus: 0
|
||||
}
|
||||
let rollData = this.buildRollData("attribute", game.i18n.localize(attr.label));
|
||||
rollData.attribute = duplicate(attr);
|
||||
let rollDialog = await BoLRollDialog.create( this, rollData);
|
||||
rollDialog.render( true );
|
||||
} else {
|
||||
@ -86,22 +205,10 @@ export class BoLActor extends Actor {
|
||||
async rollCareer( careerId ) {
|
||||
let career = BoLUtility.data(this.data.items.find( item => item.type == 'feature' && item.id == careerId));
|
||||
if (career) {
|
||||
let rollData = {
|
||||
mode : "career",
|
||||
actorId: this.id,
|
||||
actorImg: this.img,
|
||||
career : career,
|
||||
rollAttribute: 'mind',
|
||||
attributes : duplicate(this.data.data.attributes),
|
||||
boons : this.getBoons(),
|
||||
flaws : this.getFlaws(),
|
||||
d6Bonus: 0,
|
||||
d6Malus: 0,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
title: `${career.name} : ${career.data.rank}`,
|
||||
optionsBonusMalus: BoLUtility.buildListOptions(-8, +2),
|
||||
bonusMalus: 0
|
||||
}
|
||||
let rollData = this.buildRollData("career", `${career.name} : ${career.data.rank}`);
|
||||
rollData.career = career;
|
||||
rollData.rollAttribute = 'mind';
|
||||
rollData.attributes = duplicate(this.data.data.attributes);
|
||||
let rollDialog = await BoLRollDialog.create( this, rollData);
|
||||
rollDialog.render( true );
|
||||
} else {
|
||||
@ -111,35 +218,24 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollWeapon( weaponId ) {
|
||||
let weapon = BoLUtility.data(this.data.items.find( item => item.type == 'weapon' && item.id == weaponId));
|
||||
let weapon = BoLUtility.data(this.data.items.find( item => item.type == 'item' && item.id == weaponId));
|
||||
if (weapon) {
|
||||
let target = BoLUtility.getTarget();
|
||||
if ( !target) {
|
||||
ui.notifications.warn("You must have a target to attack with a Weapon");
|
||||
return;
|
||||
}
|
||||
let objectDefender = BoLUtility.data(game.actors.get(target.data.actorId));
|
||||
objectDefender = mergeObject(objectDefender, target.data.actorData);
|
||||
let rollData = {
|
||||
mode : "weapon",
|
||||
actorId: this.id,
|
||||
actorImg: this.img,
|
||||
weapon : weapon,
|
||||
target: target,
|
||||
isRanged: BoLUtility.isRangedWeapon( weapon ),
|
||||
defender: objectDefender,
|
||||
boons : this.getBoons(),
|
||||
flaws : this.getFlaws(),
|
||||
rollAttribute: 'agility',
|
||||
attributes: duplicate(this.data.data.attributes), // For damage bonus
|
||||
d6Bonus: 0,
|
||||
d6Malus: 0,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
title: weapon.name,
|
||||
rangeModifier: 0,
|
||||
optionsBonusMalus: BoLUtility.buildListOptions(-8, +2),
|
||||
bonusMalus: 0
|
||||
}
|
||||
// if ( !target) {
|
||||
// ui.notifications.warn("You must have a target to attack with a Weapon");
|
||||
// return;
|
||||
// }
|
||||
let objectDefender = (target) ? BoLUtility.data(game.actors.get(target.data.actorId)) : null;
|
||||
objectDefender = (objectDefender) ? mergeObject(objectDefender, target.data.actorData) : null;
|
||||
let rollData = this.buildRollData("weapon", weapon.name);
|
||||
rollData.weapon = weapon;
|
||||
rollData.target = target;
|
||||
rollData.isRanged = BoLUtility.isRangedWeapon( weapon );
|
||||
rollData.defender = objectDefender;
|
||||
rollData.rollAttribute = 'agility';
|
||||
rollData.attributes = duplicate(this.data.data.attributes); // For damage bonus
|
||||
rollData.rangeModifier = 0;
|
||||
|
||||
if ( weapon.data.type == 'melee') {
|
||||
rollData.aptitude = duplicate(this.data.data.aptitudes.melee);
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user