93 lines
3.4 KiB
JavaScript
93 lines
3.4 KiB
JavaScript
|
/* -------------------------------------------- */
|
||
|
import { Misc } from "./misc.js";
|
||
|
import { RdDDice } from "./rdd-dice.js";
|
||
|
import { RdDUtility } from "./rdd-utility.js";
|
||
|
import { RdDCombat } from "./rdd-combat.js";
|
||
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||
|
import { RdDRoll } from "./rdd-roll.js";
|
||
|
import { RdDRollTables } from "./rdd-rolltables.js";
|
||
|
import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
/* On part du principe qu'une entité démarre tjs
|
||
|
une possession via le MJ (ie un joueur ne controle pas une entité)
|
||
|
Donc la compétence Possession ne peut être démarrée que par le MJ.
|
||
|
*/
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
export class RdDPossession {
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
static init() {
|
||
|
this.possessionList = [];
|
||
|
}
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
static searchPossessionFromEntite( attacker, target) {
|
||
|
let poss = this.possessionList.find( poss => poss.entiteId == attacker.data._id && poss.pjId == defender.data._id);
|
||
|
return poss;
|
||
|
}
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
static _onReussitePossession( r ) {
|
||
|
console.log("Success", r);
|
||
|
ui.notifications.warn("Succès du jet de Possession ! Mais La gestion des possessions n'est pas encore disponible, merci de la gérer manuellement");
|
||
|
}
|
||
|
/* -------------------------------------------- */
|
||
|
static _onEchecPossession( r ) {
|
||
|
console.log("Echec", r);
|
||
|
ui.notifications.warn("Echec du jet de Possession ! Mais La gestion des possessions n'est pas encore disponible, merci de la gérer manuellement");
|
||
|
}
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
static async managePosession(attacker, competence ) {
|
||
|
|
||
|
const target = RdDCombat.getTarget();
|
||
|
if (target == undefined) {
|
||
|
ui.notifications.warn((game.user.targets?.size ?? 0) > 1
|
||
|
? "Vous devez choisir <strong>une seule</strong> cible à posséder!"
|
||
|
: "Vous devez choisir une cible à posséder!");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const defender = target.actor;
|
||
|
let possession = this.searchPossessionFromEntite( attacker, defender);
|
||
|
if ( possession) {
|
||
|
// Manage ongoing possession
|
||
|
} else {
|
||
|
this.createPossession(attacker, defender);
|
||
|
}
|
||
|
|
||
|
console.log("Creation de possession", attacker, defender, competence);
|
||
|
let rollData = {
|
||
|
competence: competence,
|
||
|
};
|
||
|
if ( attacker.isCreature()) {
|
||
|
RdDItemCompetenceCreature.setRollDataCreature(rollData);
|
||
|
}
|
||
|
|
||
|
const dialog = await RdDRoll.create( attacker, rollData,
|
||
|
{
|
||
|
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
||
|
options: { height: 540 }
|
||
|
}, {
|
||
|
name: 'jet-possession',
|
||
|
label: 'Possession: ',
|
||
|
callbacks: [
|
||
|
{ condition: r => (r.rolled.isSuccess), action: r => this._onReussitePossession(r) },
|
||
|
{ condition: r => (r.rolled.isEchec), action: r => this._onEchecPossession(r) },
|
||
|
]
|
||
|
});
|
||
|
dialog.render(true);
|
||
|
}
|
||
|
|
||
|
/* -------------------------------------------- */
|
||
|
static createPossession( attacker, defender ) {
|
||
|
let poss = { entiteid: attacker.data._id,
|
||
|
pjId: defender.data._id,
|
||
|
possessionCount: 0, // Negative : conjuration, Positif : possession
|
||
|
}
|
||
|
this.possessionList.push( poss);
|
||
|
}
|
||
|
|
||
|
}
|