Merge pull request 'Fix: lien jets de dés' (#739) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 1m35s
All checks were successful
Release Creation / build (release) Successful in 1m35s
Reviewed-on: #739
This commit is contained in:
commit
8e578c6566
@ -1850,26 +1850,6 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) {
|
|
||||||
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
|
||||||
const competence = this.getCompetence(compName);
|
|
||||||
await this.openRollDialog({
|
|
||||||
name: 'jet-competence',
|
|
||||||
label: 'Jet ' + Grammar.apostrophe('de', competence.name),
|
|
||||||
template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
|
||||||
rollData: {
|
|
||||||
alias: this.getAlias(),
|
|
||||||
carac: this.system.carac,
|
|
||||||
selectedCarac: this.getCaracByName(caracName),
|
|
||||||
selectedCaracName: caracName,
|
|
||||||
diffLibre: diff,
|
|
||||||
competence: competence,
|
|
||||||
show: { title: options?.title ?? '' }
|
|
||||||
},
|
|
||||||
callbackAction: r => this.$onRollCompetence(r, options)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollTache(id, options = {}) {
|
async rollTache(id, options = {}) {
|
||||||
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
||||||
|
@ -294,6 +294,25 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
createCallbackAppelAuMoral() { return this.createEmptyCallback(); }
|
createCallbackAppelAuMoral() { return this.createEmptyCallback(); }
|
||||||
async _onCloseRollDialog(html) { }
|
async _onCloseRollDialog(html) { }
|
||||||
|
|
||||||
|
async rollCaracCompetence(caracName, compName, diff, options = { title: "" }) {
|
||||||
|
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
||||||
|
const competence = this.getCompetence(compName);
|
||||||
|
await this.openRollDialog({
|
||||||
|
name: 'jet-competence',
|
||||||
|
label: competence? 'Jet ' + Grammar.apostrophe('de', competence.name) : `Jet sans compétence (${compName})`,
|
||||||
|
template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
||||||
|
rollData: {
|
||||||
|
alias: this.getAlias(),
|
||||||
|
carac: this.system.carac,
|
||||||
|
selectedCarac: this.getCaracByName(caracName),
|
||||||
|
selectedCaracName: caracName,
|
||||||
|
diffLibre: diff,
|
||||||
|
competence: competence,
|
||||||
|
show: { title: options?.title ?? '' }
|
||||||
|
},
|
||||||
|
callbackAction: r => this.$onRollCompetence(r, options)
|
||||||
|
});
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Méthode pour faire un jet prédéterminer sans ouvrir la fenêtre de dialogue
|
* Méthode pour faire un jet prédéterminer sans ouvrir la fenêtre de dialogue
|
||||||
* @param {*} caracName code ou label de la caractéristique. On peut utiliser 'intel' pour Intellect.
|
* @param {*} caracName code ou label de la caractéristique. On peut utiliser 'intel' pour Intellect.
|
||||||
|
@ -36,12 +36,14 @@ export class RdDCreature extends RdDBaseActorSang {
|
|||||||
|
|
||||||
mapCarac(caracCode) {
|
mapCarac(caracCode) {
|
||||||
switch (caracCode) {
|
switch (caracCode) {
|
||||||
case 'vue': case 'ouie':
|
case 'vue': case 'ouie': case 'odoratgout': case 'empathie': case 'perception':
|
||||||
case 'odoratgout':
|
|
||||||
case 'empathie':
|
|
||||||
return 'perception'
|
return 'perception'
|
||||||
|
case 'agilite':
|
||||||
|
return 'force'
|
||||||
|
case 'force': case 'constitution': case 'taille': case 'reve': case 'volonte':
|
||||||
|
return caracCode
|
||||||
}
|
}
|
||||||
return caracCode
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -121,6 +121,7 @@ export class RdDEntite extends RdDBaseActorReve {
|
|||||||
mapCarac(caracCode) {
|
mapCarac(caracCode) {
|
||||||
switch (caracCode) {
|
switch (caracCode) {
|
||||||
case 'taille':
|
case 'taille':
|
||||||
|
case 'reve':
|
||||||
return caracCode
|
return caracCode
|
||||||
}
|
}
|
||||||
return 'reve'
|
return 'reve'
|
||||||
|
@ -9,16 +9,17 @@ import { TextRollManager } from "./textroll/text-roll-formatter.js";
|
|||||||
const TEXT_ROLL_MANAGERS = [
|
const TEXT_ROLL_MANAGERS = [
|
||||||
new TextRollAlchimie(),
|
new TextRollAlchimie(),
|
||||||
new TextRollCaracCompetence(),
|
new TextRollCaracCompetence(),
|
||||||
new TextRollFormula()];
|
new TextRollFormula()]
|
||||||
|
|
||||||
export class RdDTextEditor {
|
export class RdDTextEditor {
|
||||||
static registerChatCallbacks(html) {
|
static registerChatCallbacks(html) {
|
||||||
html.on("click", '.roll-text', async event => await RdDTextEditor.rollText(event))
|
html.on("click", '.roll-text', async event => await RdDTextEditor.rollText(event))
|
||||||
}
|
}
|
||||||
|
|
||||||
static async enrichHTML(text, object, options = {}) {
|
static async enrichHTML(text, object, options = {showlink:true}) {
|
||||||
const context = {
|
const context = {
|
||||||
text, object,
|
text,
|
||||||
|
object,
|
||||||
options,
|
options,
|
||||||
competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage),
|
competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage),
|
||||||
}
|
}
|
||||||
@ -29,7 +30,6 @@ export class RdDTextEditor {
|
|||||||
context.text = await manager.onReplaceRoll(context);
|
context.text = await manager.onReplaceRoll(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TEXT_ROLL_MANAGERS.forEach(async manager => await RdDTextEditor._applyReplaceAll(manager, context))
|
|
||||||
return await TextEditor.enrichHTML(context.text, {
|
return await TextEditor.enrichHTML(context.text, {
|
||||||
relativeTo: object,
|
relativeTo: object,
|
||||||
secrets: object?.isOwner,
|
secrets: object?.isOwner,
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
import "../xregexp-all.js";
|
import "../xregexp-all.js";
|
||||||
import { ACTOR_TYPES } from "../../item.js";
|
|
||||||
import { RdDCarac } from "../../rdd-carac.js";
|
import { RdDCarac } from "../../rdd-carac.js";
|
||||||
import { RdDItemCompetence } from "../../item-competence.js";
|
import { RdDItemCompetence } from "../../item-competence.js";
|
||||||
import { RdDUtility } from "../../rdd-utility.js";
|
import { RdDUtility } from "../../rdd-utility.js";
|
||||||
import { TextRollManager } from "./text-roll-formatter.js";
|
import { TextRollManager } from "./text-roll-formatter.js";
|
||||||
|
|
||||||
const REGEXP_ROLL_CARAC_COMP = "(?<carac>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)(\\/(?<competence>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+))?(/(?<diff>[\\+\\-]?\\d+))?"
|
const REGECP_CARAC = "(?<carac>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)"
|
||||||
|
const REGEXP_COMP = "(\\/(?<competence>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+))?"
|
||||||
|
const REGEXP_DIFF = "(/(?<diff>[\\+\\-]?\\d+(d\\d+)?))?"
|
||||||
|
const REGEXP_ROLL_CARAC_COMP = REGECP_CARAC + REGEXP_COMP + REGEXP_DIFF
|
||||||
const XREGEXP_ROLL_CARAC_COMP = XRegExp("@roll\\[" + REGEXP_ROLL_CARAC_COMP + "\\]", 'giu')
|
const XREGEXP_ROLL_CARAC_COMP = XRegExp("@roll\\[" + REGEXP_ROLL_CARAC_COMP + "\\]", 'giu')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,25 +28,33 @@ export class TextRollCaracCompetence {
|
|||||||
const caracCode = node.data('carac-code')
|
const caracCode = node.data('carac-code')
|
||||||
if (caracCode) {
|
if (caracCode) {
|
||||||
const competence = node.data('competence')
|
const competence = node.data('competence')
|
||||||
const diff = node.data('diff')
|
const diff = await this.calculDiff(node)
|
||||||
const actors = this.getSelectedActors(actor)
|
const actors = this.getSelectedActors(actor)
|
||||||
actors.forEach(async it => await this.doRoll(it, caracCode, competence, diff))
|
actors.forEach(async it => await this.doRoll(it, caracCode, competence, diff))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async calculDiff(node) {
|
||||||
|
const diff = node.data('diff') ?? 0
|
||||||
|
if (!Number.isInteger(diff)) {
|
||||||
|
const roll = new Roll(diff)
|
||||||
|
await roll.evaluate()
|
||||||
|
await roll.toMessage({ flavor: `La difficulté de ${diff} a donné ${roll.total}` })
|
||||||
|
return roll.total
|
||||||
|
}
|
||||||
|
return diff
|
||||||
|
}
|
||||||
|
|
||||||
async doRoll(actor, caracCode, competence, diff) {
|
async doRoll(actor, caracCode, competence, diff) {
|
||||||
caracCode = actor.mapCarac(caracCode)
|
caracCode = actor.mapCarac(caracCode)
|
||||||
if (competence) {
|
if (caracCode) {
|
||||||
if (actor.type == ACTOR_TYPES.personnage) {
|
if (competence) {
|
||||||
await actor.rollCaracCompetence(caracCode, competence, diff)
|
await actor.rollCaracCompetence(caracCode, competence, diff)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
await actor.doRollCaracCompetence(caracCode, competence, diff)
|
await actor.rollCarac(caracCode, { diff })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
await actor.rollCarac(caracCode, { diff })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getSelectedActors(actor) {
|
getSelectedActors(actor) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
|
import { SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
|
||||||
import { RdDTimestamp } from "./time/rdd-timestamp.js";
|
import { RdDTimestamp } from "./time/rdd-timestamp.js";
|
||||||
|
import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -198,6 +199,7 @@ export class ChatUtility {
|
|||||||
static async onCreateChatMessage(chatMessage, options, id) {
|
static async onCreateChatMessage(chatMessage, options, id) {
|
||||||
if (chatMessage.isAuthor) {
|
if (chatMessage.isAuthor) {
|
||||||
await chatMessage.setFlag(SYSTEM_RDD, 'rdd-timestamp', game.system.rdd.calendrier.getTimestamp());
|
await chatMessage.setFlag(SYSTEM_RDD, 'rdd-timestamp', game.system.rdd.calendrier.getTimestamp());
|
||||||
|
await chatMessage.update({ content: await RdDTextEditor.enrichHTML(chatMessage.content, undefined, {showLink:false}) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import { RdDCarac } from "./rdd-carac.js";
|
|||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||||
import { ReglesOptionnelles } from "./settings/regles-optionnelles.js";
|
import { ReglesOptionnelles } from "./settings/regles-optionnelles.js";
|
||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
|
import { ACTOR_TYPES } from "./item.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the base Dialog entity to select roll parameters
|
* Extend the base Dialog entity to select roll parameters
|
||||||
@ -62,7 +63,7 @@ export class RdDRoll extends Dialog {
|
|||||||
forceDiceResult: -1
|
forceDiceResult: -1
|
||||||
}
|
}
|
||||||
// Mini patch :Ajout du rêve actuel
|
// Mini patch :Ajout du rêve actuel
|
||||||
if (actor.system.type == "personnage") {
|
if (actor.type == ACTOR_TYPES.personnage) {
|
||||||
defaultRollData.carac["reve-actuel"] = actor.system.reve.reve
|
defaultRollData.carac["reve-actuel"] = actor.system.reve.reve
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,11 +132,12 @@ export class RdDRoll extends Dialog {
|
|||||||
console.log('RdDRoll.activateListeners', this.rollData);
|
console.log('RdDRoll.activateListeners', this.rollData);
|
||||||
|
|
||||||
// Update html, according to rollData
|
// Update html, according to rollData
|
||||||
if (this.rollData.competence) {
|
if (!this.rollData.selectedCarac && this.rollData.competence) {
|
||||||
const defaut_carac = this.rollData.competence.system.defaut_carac
|
|
||||||
// Set the default carac from the competence item
|
// Set the default carac from the competence item
|
||||||
this.rollData.selectedCarac = this.rollData.carac[defaut_carac];
|
this.rollData.selectedCarac = this.rollData.carac[this.actor.mapCarac(this.rollData.competence.system.defaut_carac)]
|
||||||
this.html.find("[name='carac']").val(defaut_carac);
|
}
|
||||||
|
if (this.rollData.selectedCarac) {
|
||||||
|
this.html.find("[name='carac']").val(RdDCarac.caracDetails(this.rollData.selectedCarac.label).code)
|
||||||
}
|
}
|
||||||
if (this.rollData.selectedSort) {
|
if (this.rollData.selectedSort) {
|
||||||
this.setSelectedSort(this.rollData.selectedSort);
|
this.setSelectedSort(this.rollData.selectedSort);
|
||||||
|
@ -102,10 +102,9 @@ export class RdDRollTables {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async getMaladresse(options = { toChat: false, arme: false }) {
|
static async getMaladresse(options = { toChat: false, arme: false }) {
|
||||||
const maladresse = await RdDRollTables.drawTextFromRollTable(
|
return await RdDRollTables.drawTextFromRollTable(
|
||||||
options.arme ? "Maladresse armé" : "Maladresses non armé",
|
options.arme ? "Maladresse armé" : "Maladresses non armé",
|
||||||
options);
|
options)
|
||||||
return await RdDTextEditor.enrichHTML(maladresse, undefined, {showLink:false})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,8 @@ system:
|
|||||||
|
|
||||||
<p>Si un personnage ainsi rendu dérisoire participe à un combat, il peut
|
<p>Si un personnage ainsi rendu dérisoire participe à un combat, il peut
|
||||||
tenter une fois par round de lancer une plaisanterie en guise d’attaque
|
tenter une fois par round de lancer une plaisanterie en guise d’attaque
|
||||||
(tout en esquivant/parant normalement). Il joue pour cela @roll[APPARENCE/Comédie]
|
(tout en esquivant/parant normalement). Il joue pour cela @roll[APPARENCE/Comédie/-1d4]
|
||||||
à @roll[-1d4] (ce d4 résume les conditions ponctuelles plus ou moins propices, et
|
(ce d4 résume les conditions ponctuelles plus ou moins propices, et
|
||||||
il est en fait soustrait du bonus de +4 conféré par le sort). Puis selon la
|
il est en fait soustrait du bonus de +4 conféré par le sort). Puis selon la
|
||||||
réussite, on obtient un ajustement :</p>
|
réussite, on obtient un ajustement :</p>
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ results:
|
|||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Ami bousculé : Le compagnon bousculé doit réussir
|
Ami bousculé : Le compagnon bousculé doit réussir
|
||||||
@roll[Empathie/Vigilance] à @roll[-1d6] ou être en
|
@roll[Empathie/Vigilance/-1d6] ou être en
|
||||||
demi-surprise jusqu’à la fin du round suivant.
|
demi-surprise jusqu’à la fin du round suivant.
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
@ -91,7 +91,7 @@ results:
|
|||||||
flags: {}
|
flags: {}
|
||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Déséquilibré : Réussir @roll[Agilité/Vigilance] à @roll[-1d6] ou être en demi-surprise
|
Déséquilibré : Réussir @roll[Agilité/Vigilance/-1d6] ou être en demi-surprise
|
||||||
jusqu’à la fin du round suivant.
|
jusqu’à la fin du round suivant.
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
@ -125,7 +125,7 @@ results:
|
|||||||
flags: {}
|
flags: {}
|
||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Déséquilibré : Réussir @roll[Agilité/Vigilance] à @roll[-1d6] ou être en demi-surprise
|
Déséquilibré : Réussir @roll[Agilité/Vigilance/-1d6] ou être en demi-surprise
|
||||||
jusqu’à la fin du round suivant.
|
jusqu’à la fin du round suivant.
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
@ -194,7 +194,7 @@ results:
|
|||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Ami bousculé : Le compagnon bousculé doit réussir
|
Ami bousculé : Le compagnon bousculé doit réussir
|
||||||
@roll[Empathie/Vigilance] à @roll[-1d6] ou être en
|
@roll[Empathie/Vigilance/-1d6] ou être en
|
||||||
demi-surprise jusqu’à la fin du round suivant.
|
demi-surprise jusqu’à la fin du round suivant.
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
|
@ -23,7 +23,7 @@ results:
|
|||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Ami bousculé : Le compagnon bousculé doit réussir
|
Ami bousculé : Le compagnon bousculé doit réussir
|
||||||
@roll[Empathie/Vigilance] à @roll[-1d6] ou être en
|
@roll[Empathie/Vigilance/-1d6] ou être en
|
||||||
demi-surprise jusqu’à la fin du round suivant.
|
demi-surprise jusqu’à la fin du round suivant.
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
@ -57,9 +57,8 @@ results:
|
|||||||
flags: {}
|
flags: {}
|
||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Déséquilibré : Réussir @roll[Agilité/Vigilance]
|
Déséquilibré : Réussir @roll[Agilité/Vigilance/-1d6]
|
||||||
à @roll[-1d6] ou être en demi-surprise
|
ou être en demi-surprise jusqu’à la fin du round suivant.
|
||||||
jusqu’à la fin du round suivant.
|
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
range:
|
range:
|
||||||
@ -92,9 +91,8 @@ results:
|
|||||||
flags: {}
|
flags: {}
|
||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Déséquilibré : Réussir @roll[Agilité/Vigilance]
|
Déséquilibré : Réussir @roll[Agilité/Vigilance/-1d6]
|
||||||
à @roll[-1d6] ou être en demi-surprise
|
ou être en demi-surprise jusqu’à la fin du round suivant.
|
||||||
jusqu’à la fin du round suivant.
|
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
range:
|
range:
|
||||||
@ -128,7 +126,7 @@ results:
|
|||||||
type: text
|
type: text
|
||||||
text: >-
|
text: >-
|
||||||
Ami bousculé : Le compagnon bousculé doit réussir
|
Ami bousculé : Le compagnon bousculé doit réussir
|
||||||
@roll[Empathie/Vigilance] à @roll[-1d6] ou être en
|
@roll[Empathie/Vigilance/-1d6] ou être en
|
||||||
demi-surprise jusqu’à la fin du round suivant.
|
demi-surprise jusqu’à la fin du round suivant.
|
||||||
img: icons/svg/d20-black.svg
|
img: icons/svg/d20-black.svg
|
||||||
weight: 1
|
weight: 1
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
data-code="{{param.code}}"
|
data-code="{{param.code}}"
|
||||||
data-json="{{json-stringify param}}"
|
data-json="{{json-stringify param}}"
|
||||||
data-carac-code="{{param.carac.code}}"
|
data-carac-code="{{param.carac.code}}"
|
||||||
{{#if competence}}data-competence="{{param.competence}}"{{/if~}}
|
{{#if param.competence}}data-competence="{{param.competence}}"{{/if~}}
|
||||||
{{#if diff}}data-diff="{{param.diff}}"{{/if~}}>
|
{{#if param.diff}}data-diff="{{param.diff}}"{{/if~}}>
|
||||||
<a class="roll-text">
|
<a class="roll-text">
|
||||||
{{~uppercase param.carac.label~}}
|
{{~uppercase param.carac.label~}}
|
||||||
{{#if param.competence}} / {{upperFirst param.competence}}{{/if~}}
|
{{#if param.competence}} / {{upperFirst param.competence}}{{/if~}}
|
||||||
|
@ -2,19 +2,19 @@
|
|||||||
<h4 class="rdd-roll-part">{{alias}} réussit une attaque particulière!</strong></h4>
|
<h4 class="rdd-roll-part">{{alias}} réussit une attaque particulière!</strong></h4>
|
||||||
{{#if isForce}}
|
{{#if isForce}}
|
||||||
<br>
|
<br>
|
||||||
<a class="chat-card-button" id="particuliere-attaque" data-mode="force" data-attackerId="{{attackerId}}">
|
<a class="chat-card-button particuliere-attaque" data-mode="force" data-attackerId="{{attackerId}}">
|
||||||
Attaquer en Force
|
Attaquer en Force
|
||||||
</a>
|
</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if isRapide}}
|
{{#if isRapide}}
|
||||||
<br>
|
<br>
|
||||||
<a class="chat-card-button" id="particuliere-attaque" data-mode="rapidite" data-attackerId="{{attackerId}}">
|
<a class="chat-card-button particuliere-attaque" data-mode="rapidite" data-attackerId="{{attackerId}}">
|
||||||
Attaquer en Rapidité
|
Attaquer en Rapidité
|
||||||
</a>
|
</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if isFinesse}}
|
{{#if isFinesse}}
|
||||||
<br>
|
<br>
|
||||||
<a class="chat-card-button" id="particuliere-attaque" data-mode="finesse" data-attackerId="{{attackerId}}">
|
<a class="chat-card-button particuliere-attaque" data-mode="finesse" data-attackerId="{{attackerId}}">
|
||||||
Attaquer en Finesse
|
Attaquer en Finesse
|
||||||
</a>
|
</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user