diff --git a/module/rdd-possession.js b/module/rdd-possession.js new file mode 100644 index 00000000..587936d7 --- /dev/null +++ b/module/rdd-possession.js @@ -0,0 +1,93 @@ +/* -------------------------------------------- */ +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 une seule 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); + } + +} \ No newline at end of file