diff --git a/module/actor.js b/module/actor.js
index 8669f918..8c0f2581 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -1365,6 +1365,7 @@ export class RdDActor extends RdDBaseActor {
await this.$finDeRoundSuppressionEffetsTermines(options);
await this.$finDeRoundBlessuresGraves();
await this.$finDeRoundSupprimerObsoletes();
+ await this.$finDeRoundEmpoignade();
}
async $finDeRoundSuppressionEffetsTermines(options) {
@@ -1394,6 +1395,13 @@ export class RdDActor extends RdDBaseActor {
await this.deleteEmbeddedDocuments('Item', obsoletes);
}
+ async $finDeRoundEmpoignade(){
+ const immobilisations = this.itemTypes[TYPES.empoignade].filter(it => it.system.pointsemp >= 2 && it.system.empoigneurid == this.id);
+ immobilisations.forEach(emp => RdDEmpoignade.onImmobilisation(this,
+ game.actors.get(emp.system.empoigneid),
+ emp
+ ))
+ }
/* -------------------------------------------- */
async setSonne(sonne = true) {
if (this.isEntite()) {
diff --git a/module/rdd-empoignade.js b/module/rdd-empoignade.js
index e0bdd52d..89f65256 100644
--- a/module/rdd-empoignade.js
+++ b/module/rdd-empoignade.js
@@ -20,13 +20,13 @@ export class RdDEmpoignade {
static registerChatCallbacks(html) {
html.on("click", '.defense-empoignade-cac', event => {
const chatMessage = ChatUtility.getChatMessage(event);
- const rollData = RdDEmpoignade.readRollEmpoignade(chatMessage);
+ const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Corps à corps", "melee")
});
html.on("click", '.defense-empoignade-esquive', event => {
const chatMessage = ChatUtility.getChatMessage(event);
- const rollData = RdDEmpoignade.readRollEmpoignade(chatMessage);
+ const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
RdDEmpoignade.onDefenseEmpoignade(rollData, defenseMode, "Esquive", "derobee")
});
@@ -37,19 +37,19 @@ export class RdDEmpoignade {
});
html.on("click", '.empoignade-entrainer-sol', event => {
const chatMessage = ChatUtility.getChatMessage(event);
- const rollData = RdDEmpoignade.readRollEmpoignade(chatMessage);
+ const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.entrainerAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id)
});
html.on("click", '.empoignade-projeter-sol', event => {
const chatMessage = ChatUtility.getChatMessage(event);
- const rollData = RdDEmpoignade.readRollEmpoignade(chatMessage);
+ const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.projeterAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id)
});
html.on("change", '.empoignade-perte-endurance', event => {
const chatMessage = ChatUtility.getChatMessage(event);
- const rollData = RdDEmpoignade.readRollEmpoignade(chatMessage);
+ const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
if (event.currentTarget.value && event.currentTarget.value != "none") {
RdDEmpoignade.perteEndurance(rollData, event.currentTarget.value)
ChatUtility.removeChatMessageId(chatMessage.id)
@@ -68,20 +68,28 @@ export class RdDEmpoignade {
}
/* -------------------------------------------- */
- static storeRollEmpoignade(msg, rollData) {
- rollData.attacker = { id: rollData.attacker.id }
- rollData.defender = { id: rollData.defender.id }
+ static $storeRollEmpoignade(msg, rollData) {
+ RdDEmpoignade.$reduceActorToIds(rollData);
ChatUtility.setMessageData(msg, "empoignade-roll-data", rollData);
}
+ static $reduceActorToIds(rollData) {
+ rollData.attacker = { id: rollData.attacker.id };
+ rollData.defender = { id: rollData.defender.id };
+ }
+
/* -------------------------------------------- */
- static readRollEmpoignade(msg) {
+ static $readRollEmpoignade(msg) {
const rollData = ChatUtility.getMessageData(msg, 'empoignade-roll-data');
- rollData.attacker = game.actors.get(rollData.attacker.id)
- rollData.defender = game.actors.get(rollData.defender.id)
+ RdDEmpoignade.$replaceIdsWithActors(rollData);
return rollData
}
+ static $replaceIdsWithActors(rollData) {
+ rollData.attacker = game.actors.get(rollData.attacker.id);
+ rollData.defender = game.actors.get(rollData.defender.id);
+ }
+
/* -------------------------------------------- */
static isEmpoignadeEnCours(actor) {
return actor.itemTypes[TYPES.empoignade].find(it => it.system.pointsemp > 0)
@@ -145,7 +153,6 @@ export class RdDEmpoignade {
if (!RdDEmpoignade.isActionAutorisee("empoigner", attacker, defender)) {
return
}
-
let empoignade = RdDEmpoignade.getEmpoignade(attacker, defender)
const isNouvelle = empoignade == undefined;
empoignade = empoignade ?? (await RdDEmpoignade.createEmpoignade(attacker, defender))
@@ -182,8 +189,10 @@ export class RdDEmpoignade {
RdDItemCompetenceCreature.setRollDataCreature(rollData)
}
if (empoignade.system.pointsemp >= 2) {
- let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-actions.html');
- RdDEmpoignade.storeRollEmpoignade(msg, rollData);
+ if (!empoignade.system.ausol) {
+ let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-entrainer.html');
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
+ }
} else {
await RdDEmpoignade.$rollAttaqueEmpoignade(attacker, rollData, isNouvelle);
}
@@ -196,6 +205,20 @@ export class RdDEmpoignade {
await this.onAttaqueEmpoignadeValidee(attacker, defender)
}
+ static async onImmobilisation(attacker, defender, empoignade) {
+ const rollData = {
+ mode: "immobilise",
+ empoignade, attacker, defender,
+ isEmpoignade: true,
+ competence: attacker.getCompetence("Corps à corps").clone()
+ }
+ const msg = await ChatMessage.create({
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(attacker.name),
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-empoignade-immobilise.html`, rollData)
+ })
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
+ }
+
/* -------------------------------------------- */
static async $rollAttaqueEmpoignade(attacker, rollData, isNouvelle = false) {
const dialog = await RdDRoll.create(attacker, rollData,
@@ -226,7 +249,7 @@ export class RdDEmpoignade {
rollData.particuliere = "finesse";
}
let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-resultat.html');
- RdDEmpoignade.storeRollEmpoignade(msg, rollData);
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
}
/* -------------------------------------------- */
@@ -260,8 +283,8 @@ export class RdDEmpoignade {
}
/* -------------------------------------------- */
- static async $rollDefenseEmpoignade(defender, rollData) {
- const dialog = await RdDRoll.create(defender, rollData,
+ static async $rollDefenseEmpoignade(defender, defenderRoll) {
+ const dialog = await RdDRoll.create(defender, defenderRoll,
{ html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-empoignade.html' },
{
name: 'empoignade',
@@ -277,7 +300,7 @@ export class RdDEmpoignade {
/* -------------------------------------------- */
static async $onRollContrerLiberer(rollData) {
let empoignade = rollData.empoignade
-
+
if (rollData.mode == "contrer-empoigner" && !rollData.rolled.isSuccess) {
empoignade.system.pointsemp++
RdDEmpoignade.$updateEtatEmpoignade(empoignade)
@@ -286,13 +309,12 @@ export class RdDEmpoignade {
empoignade.system.pointsemp--
RdDEmpoignade.$updateEtatEmpoignade(empoignade)
}
-
- if (empoignade.system.pointsemp >= 2) {
- let attacker = game.actors.get(empoignade.system.empoigneurid)
- let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-actions.html');
- RdDEmpoignade.storeRollEmpoignade(msg, rollData);
- }
+
await RdDResolutionTable.displayRollData(rollData, rollData.defender, 'chat-empoignade-resultat.html')
+ if (empoignade.system.pointsemp >= 2) {
+ let msg = await RdDResolutionTable.displayRollData(rollData, rollData.attacker, 'chat-empoignade-entrainer.html');
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
+ }
}
/* -------------------------------------------- */
@@ -323,7 +345,7 @@ export class RdDEmpoignade {
static async entrainerAuSol(rollData) {
let attacker = game.actors.get(rollData.attacker.id)
let defender = game.actors.get(rollData.defender.id)
- if (!RdDEmpoignade.isActionAutorisee("attaquant", attacker, defender)) {
+ if (!RdDEmpoignade.isActionAutorisee("immobilise", attacker, defender)) {
return
}
let empoignade = this.getEmpoignade(attacker, defender)
@@ -335,14 +357,14 @@ export class RdDEmpoignade {
await defender.setEffect(STATUSES.StatusProne, true);
let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-entrainer-sol.html');
- RdDEmpoignade.storeRollEmpoignade(msg, rollData);
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
}
/* -------------------------------------------- */
static async projeterAuSol(rollData) {
let attacker = game.actors.get(rollData.attacker.id)
let defender = game.actors.get(rollData.defender.id)
- if (!RdDEmpoignade.isActionAutorisee("attaquant", attacker, defender)) {
+ if (!RdDEmpoignade.isActionAutorisee("immobilise", attacker, defender)) {
return
}
let empoignade = this.getEmpoignade(attacker, defender)
@@ -351,14 +373,14 @@ export class RdDEmpoignade {
await this.$deleteEmpoignade(empoignade)
let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-projeter-sol.html');
- RdDEmpoignade.storeRollEmpoignade(msg, rollData);
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
}
/* -------------------------------------------- */
static async perteEndurance(rollData, perteMode) {
let attacker = game.actors.get(rollData.attacker.id)
let defender = game.actors.get(rollData.defender.id)
- if (!RdDEmpoignade.isActionAutorisee("attaquant", attacker, defender)) {
+ if (!RdDEmpoignade.isActionAutorisee("immobilise", attacker, defender)) {
return
}
let empoignade = this.getEmpoignade(attacker, defender)
@@ -378,7 +400,7 @@ export class RdDEmpoignade {
await defender.santeIncDec("endurance", -(3 * Math.floor(endValue / 4)));
}
let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-perte-endurance.html');
- RdDEmpoignade.storeRollEmpoignade(msg, rollData);
+ RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
}
/* -------------------------------------------- */
diff --git a/templates/chat-empoignade-actions.html b/templates/chat-empoignade-actions.html
deleted file mode 100644
index 6d9c30b8..00000000
--- a/templates/chat-empoignade-actions.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-