#36 et #70 : corrections sur XP et ajout première version des taches

This commit is contained in:
2020-12-15 08:37:52 +01:00
parent 0e5caf048e
commit a726705c0c
12 changed files with 154 additions and 31 deletions

View File

@ -194,6 +194,12 @@ export class RdDActorSheet extends ActorSheet {
new Dialog( dialogData ).render(true);
}
/* -------------------------------------------- */
async createEmptyTache( ) {
let emptyTache = await Item.create( { name: 'Nouvelle tache', type: 'tache'} );
await this.actor.createOwnedItem( emptyTache.data, { renderSheet: true } );
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
@ -226,6 +232,9 @@ export class RdDActorSheet extends ActorSheet {
this.actor.remiseANeuf();
}
});
html.find('#creer-tache').click(ev => {
this.createEmptyTache();
});
// Blessure control
html.find('.blessure-control').click(ev => {
@ -280,7 +289,12 @@ export class RdDActorSheet extends ActorSheet {
let compName = event.currentTarget.text;
this.actor.rollCompetence( compName);
});
html.find('.tache-label a').click((event) => {
const li = $(event.currentTarget).parents(".item");
let tacheId = li.data('item-id');
this.actor.rollTache( tacheId );
});
// Points de reve actuel
html.find('.ptreve-actuel a').click((event) => {
this.actor.rollCarac( 'reve-actuel' );

View File

@ -1436,6 +1436,11 @@ export class RdDActor extends Actor {
ChatUtility.chatWithRollMode(chatOptions, this.name)
}
/* -------------------------------------------- */
getCompetenceList() {
return this.data.items.filter( (item) => item.type == 'competence');
}
/* -------------------------------------------- */
async rollCarac( caracName ) {
let rollData = {
@ -1503,6 +1508,55 @@ export class RdDActor extends Actor {
dialog.render(true);
}
/* -------------------------------------------- */
getTache ( id ) {
return this.data.items.find( item => item._id == id );
}
/* -------------------------------------------- */
async rollTache( id ) {
let tache = duplicate( this.getTache( id ) );
let competence = duplicate(this.getCompetence(tache.data.competence));
competence.data.defaut_carac = tache.data.carac; // Patch !
let rollData = {
competence: competence,
needSignificative : this.data.data.sante.sonne.value,
tache: tache,
diffConditions: tache.data.difficulte,
editLibre: false,
editConditions: false,
actor: this
}
rollData.carac = {};
rollData.carac[tache.data.carac] = duplicate(this.data.data.carac[tache.data.carac]); // Single carac
console.log("rollTache !!!", duplicate(rollData));
const dialog = await RdDRoll.create(this, rollData, {html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-competence.html'}, {
name: 'jet-competence',
label: 'Jet de Tâche ' + tache.name,
callbacks: [
this.createCallbackExperience(),
{ action: this._tacheResult }
]
} );
dialog.render(true);
}
/* -------------------------------------------- */
_tacheResult(rollData) {
ChatUtility.chatWithRollMode({
content: "<strong>Test de Tache : " + rollData.tache.name + " - " + rollData.selectedCarac.label + " / " + rollData.competence.name + "</strong>"
+ "<br>Difficultés <strong>libre : " + rollData.diffLibre + "</strong> / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat
+ RdDResolutionTable.explain(rollData.rolled)
+ "<br>Points de taches : " + rollData.rolled.ptTache + ", ajustement qualité: " + rollData.rolled.ptQualite
}, this.name);
rollData.tache.data.points_de_tache_courant += rollData.rolled.ptTache;
rollData.actor.updateEmbeddedEntity( "OwnedItem", rollData.tache);
}
/* -------------------------------------------- */
_competenceResult(rollData) {
ChatUtility.chatWithRollMode({
@ -1510,7 +1564,7 @@ export class RdDActor extends Actor {
+ "<br>Difficultés <strong>libre : " + rollData.diffLibre + "</strong> / conditions : " + Misc.toSignedString(rollData.diffConditions) +" / état : " + rollData.etat
+ RdDResolutionTable.explain(rollData.rolled)
+ "<br>Points de taches : " + rollData.rolled.ptTache + ", ajustement qualité: " + rollData.rolled.ptQualite
}, this.name)
}, this.name);
}
/* -------------------------------------------- */
@ -1587,6 +1641,8 @@ export class RdDActor extends Actor {
let competence = duplicate( RdDUtility.findCompetence( this.data.items, competenceName ) );
competence.data.xp += xpComp;
await this.updateEmbeddedEntity( "OwnedItem", competence);
} else {
xpCarac = 1; // Si pas de competence, le max d'XP en carac est de 1 (cf p. 144)
}
if ( !carac[caracName].isderivee) {
carac[caracName].xp += xpCarac;

View File

@ -32,6 +32,11 @@ export class RdDItemSheet extends ItemSheet {
getData() {
let data = super.getData();
if ( data.item.type == 'tache') {
//console.log("****", data, this);
data.caracList = duplicate(this.actor.data.data.carac),
data.competenceList = this.actor.getCompetenceList()
}
data.bonusCaseList = RdDItemSort.getBonusCaseList(data, true);
data.isGM = game.user.isGM; // Pour vérouiller certaines éditions
@ -63,7 +68,6 @@ export class RdDItemSheet extends ItemSheet {
}
/* -------------------------------------------- */
get template()
{
let type = this.item.type;

4
module/item-tache.js Normal file
View File

@ -0,0 +1,4 @@
export class RdDItemTache extends Item {
}

View File

@ -28,26 +28,27 @@ export class RdDRoll extends Dialog {
/* -------------------------------------------- */
static _setDefaultOptions(actor, rollData) {
mergeObject(rollData,
{
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
difficultesLibres: CONFIG.RDD.difficultesLibres,
etat: actor.data.data.compteurs.etat.value,
carac: actor.data.data.carac,
finalLevel: 0,
diffConditions: 0,
diffLibre: 0,
forceValue : actor.getForceValue(),
malusArmureValue: (actor.type == 'personnage ' && actor.data.data.attributs && actor.data.data.attributs.malusarmure) ? actor.data.data.attributs.malusarmure.value : 0,
surencMalusFlag: actor.type == 'personnage ' ? (actor.data.data.compteurs.surenc.value < 0) : false,
surencMalusValue: actor.type == 'personnage ' ? actor.data.data.compteurs.surenc.value : 0,
surencMalusApply: false,
isNatation: rollData.competence ? rollData.competence.name.toLowerCase().includes("natation") : false,
useEncForNatation: false,
encValueForNatation: actor.encombrementTotal ? Math.floor(actor.encombrementTotal) : 0,
ajustementAstrologique: actor.ajustementAstrologique()
},
{ overwrite: false });
let defaultRollData = {
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
difficultesLibres: CONFIG.RDD.difficultesLibres,
etat: actor.data.data.compteurs.etat.value,
carac: actor.data.data.carac,
finalLevel: 0,
diffConditions: 0,
diffLibre: 0,
editLibre: true,
editConditions: true,
forceValue : actor.getForceValue(),
malusArmureValue: (actor.type == 'personnage ' && actor.data.data.attributs && actor.data.data.attributs.malusarmure) ? actor.data.data.attributs.malusarmure.value : 0,
surencMalusFlag: actor.type == 'personnage ' ? (actor.data.data.compteurs.surenc.value < 0) : false,
surencMalusValue: actor.type == 'personnage ' ? actor.data.data.compteurs.surenc.value : 0,
surencMalusApply: false,
isNatation: rollData.competence ? rollData.competence.name.toLowerCase().includes("natation") : false,
useEncForNatation: false,
encValueForNatation: actor.encombrementTotal ? Math.floor(actor.encombrementTotal) : 0,
ajustementAstrologique: actor.ajustementAstrologique()
}
mergeObject(rollData, defaultRollData, { overwrite: false, insertValues:false } );
}
/* -------------------------------------------- */

View File

@ -236,6 +236,7 @@ export class RdDUtility {
data.data.souffles = this.checkNull(data.itemsByType['souffle']);
data.data.ombres = this.checkNull(data.itemsByType['ombre']);
data.data.tetes = this.checkNull(data.itemsByType['tete']);
data.data.taches = this.checkNull(data.itemsByType['tache']);
data.data.objets = data.data.conteneurs.concat(data.data.materiel).concat(data.data.armes).concat(data.data.armures).concat(data.data.munitions).concat(data.data.livres).concat(data.data.potions).concat(data.data.herbes).concat(data.data.ingredients);
}