Gestion des présents des cités

+ fix bug sur conquête cité (pour supprimer la casetmr)
+ svg couleur plus lisibles
This commit is contained in:
Vincent Vandemeulebrouck
2021-02-12 12:50:17 +01:00
parent 1c5d14a1fa
commit 99ed077da8
18 changed files with 527 additions and 356 deletions

View File

@ -123,9 +123,9 @@ export class RdDTMRDialog extends Dialog {
_tokenRencontre(rencontre) {
return EffetsDraconiques.rencontre.token(this.pixiTMR, rencontre, () => rencontre.coord);
}
_tokenCaseSpeciale(caseSpeciale) {
const draconique = Draconique.get(caseSpeciale.data.specific);
return draconique?.token(this.pixiTMR, caseSpeciale, () => caseSpeciale.data.coord);
_tokenCaseSpeciale(casetmr) {
const draconique = Draconique.get(casetmr.data.specific);
return draconique?.token(this.pixiTMR, casetmr, () => casetmr.data.coord);
}
_tokenSortEnReserve(sortEnReserve) {
return EffetsDraconiques.sortReserve.token(this.pixiTMR, sortEnReserve.sort, () => sortEnReserve.coord);
@ -313,7 +313,7 @@ export class RdDTMRDialog extends Dialog {
}
/* -------------------------------------------- */
async _tentativeMaitrise(rencontreData) {
async _tentativeMaitrise(rencontreData, presentCite) {
console.log("-> matriser", rencontreData);
rencontreData.reve = this.actor.getReveActuel();
@ -321,7 +321,10 @@ export class RdDTMRDialog extends Dialog {
RollDataAjustements.calcul(rencontreData, this.actor);
rencontreData.rolled = await RdDResolutionTable.roll(rencontreData.reve, RollDataAjustements.sum(rencontreData.ajustements));
rencontreData.rolled = presentCite
? this._rollPresentCite(rencontreData)
: await RdDResolutionTable.roll(rencontreData.reve, RollDataAjustements.sum(rencontreData.ajustements));
let postProcess = await TMRRencontres.gererRencontre(this, rencontreData);
ChatMessage.create({
@ -351,6 +354,13 @@ export class RdDTMRDialog extends Dialog {
}
}
_rollPresentCite(rencontreData) {
let rolled = RdDResolutionTable.computeChances(rencontreData.reve, 0);
mergeObject(rolled, { caracValue: rencontreData.reve, finalLevel: 0, roll: rolled.score });
RdDResolutionTable.succesRequis(rolled);
return rolled;
}
/* -------------------------------------------- */
_deleteTmrMessages(actor, nbRounds = -1) {
setTimeout(() => {
@ -381,6 +391,9 @@ export class RdDTMRDialog extends Dialog {
return;
}
this.currentRencontre = undefined;
if (this._presentCite(tmr, postRencontre)) {
return;
}
let rencontre = await this._jetDeRencontre(tmr);
if (rencontre) { // Manages it
@ -396,19 +409,39 @@ export class RdDTMRDialog extends Dialog {
}
}
_presentCite(tmr, postRencontre) {
const presentCite = this.casesSpeciales.find(c => EffetsDraconiques.presentCites.isCase(c, tmr.coord));
if (presentCite) {
this.minimize();
EffetsDraconiques.presentCites.choisirUnPresent(presentCite, (type => this._utiliserPresentCite(presentCite, type, tmr, postRencontre)));
}
return presentCite;
}
async _utiliserPresentCite(presentCite, typeRencontre, tmr, postRencontre) {
const rencontre = TMRRencontres.getRencontre(typeRencontre);
let rencontreData = {
actor: this.actor,
alias: this.actor.name,
reveDepart: this.actor.getReveActuel(),
competence: this.actor.getBestDraconic(),
rencontre: rencontre,
tmr: tmr
};
await TMRRencontres.evaluerForceRencontre(rencontre);
await EffetsDraconiques.presentCites.ouvrirLePresent(this.actor, presentCite);
this.removeToken(tmr, presentCite);
await this._tentativeMaitrise(rencontreData, presentCite);
this.maximize();
postRencontre();
}
/* -------------------------------------------- */
async _jetDeRencontre(tmr) {
let rencontre = this.rencontresExistantes.find(prev => prev.coord == tmr.coord);
if (rencontre) {
return rencontre;
}
if (this.casesSpeciales.find(c => EffetsDraconiques.isPresentCite(c, tmr.coord))) {
// TODO: dialog pour remplacer la rencontre par un présent
}
let myRoll = new Roll("1d7").evaluate().total;
if (TMRUtility.isForceRencontre() || myRoll == 7) {
return await this.rencontreTMRRoll(tmr, this.actor.isRencontreSpeciale());
@ -416,7 +449,6 @@ export class RdDTMRDialog extends Dialog {
this._tellToUser(myRoll + ": Pas de rencontre en " + tmr.label + " (" + tmr.coord + ")");
}
/* -------------------------------------------- */
async rencontreTMRRoll(tmr, isMauvaise = false) {
let rencontre = TMRUtility.utiliseForceRencontre() ??
@ -450,8 +482,8 @@ export class RdDTMRDialog extends Dialog {
forceCarac: { 'reve-actuel': { label: "Rêve Actuel", value: this.actor.getReveActuel() } },
maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' }
}
rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true: undefined,
rollData.competence.data.defaut_carac = 'reve-actuel';
rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined,
rollData.competence.data.defaut_carac = 'reve-actuel';
await this._rollMaitriseCaseHumide(rollData);
}
}
@ -541,7 +573,7 @@ export class RdDTMRDialog extends Dialog {
difficulte: -7,
action: 'Conquérir',
onConqueteReussie: r => EffetsDraconiques.conquete.onConquete(r.actor, tmr.coord, (casetmr) => this.removeToken(tmr, casetmr)),
onConqueteEchec: r => {},
onConqueteEchec: r => { },
canClose: false
});
}
@ -605,7 +637,7 @@ export class RdDTMRDialog extends Dialog {
/* -------------------------------------------- */
async declencheSortEnReserve(coord) {
let sortReserveList = TMRUtility.getSortReserveList(this.sortsReserves, coord);
if (sortReserveList.length > 0) {
if (EffetsDraconiques.isConquete(this.actor)) {