Compare commits
3 Commits
bol-v10.5.
...
bol-v10.5.
Author | SHA1 | Date | |
---|---|---|---|
5b91041a3f | |||
e7f3851daa | |||
75d562f922 |
@ -577,6 +577,6 @@
|
|||||||
"BOL.chat.welcome3": "Les cartes intégrées au système le sont grace à l'aimable autorisation de leur auteur Guillaume Tavernier et des éditions Ludospherik. Merci à eux !.",
|
"BOL.chat.welcome3": "Les cartes intégrées au système le sont grace à l'aimable autorisation de leur auteur Guillaume Tavernier et des éditions Ludospherik. Merci à eux !.",
|
||||||
"BOL.chat.welcome4": "Tout le support et le suivi de ce système est disponible via le <a href='https://discord.gg/pPSDNJk'>Discord Foundry FR</a>.",
|
"BOL.chat.welcome4": "Tout le support et le suivi de ce système est disponible via le <a href='https://discord.gg/pPSDNJk'>Discord Foundry FR</a>.",
|
||||||
"BOL.chat.welcome5": "Consulter l'aide en ligne pour plus d'informations : @UUID[Compendium.bol.aides-de-jeu.97rugQOtiwt8zPfQ]{Aide du Jeu}.",
|
"BOL.chat.welcome5": "Consulter l'aide en ligne pour plus d'informations : @UUID[Compendium.bol.aides-de-jeu.97rugQOtiwt8zPfQ]{Aide du Jeu}.",
|
||||||
"BOL.chat.welcome6": "Bon jeu en Lemurie !"
|
"BOL.chat.welcome6": "Bon jeu en Lemurie !",
|
||||||
|
"BOL.chat.nodamage": "Ne pas appliquer les dommages"
|
||||||
}
|
}
|
@ -22,6 +22,17 @@ export class BoLActor extends Actor {
|
|||||||
super.prepareData()
|
super.prepareData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
isHeroAdversary() {
|
||||||
|
if (this.type === 'character') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if (this.type === 'encounter' && this.chartype == "adversary") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getCharType() {
|
getCharType() {
|
||||||
if (this.type === 'character') {
|
if (this.type === 'character') {
|
||||||
@ -32,10 +43,10 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getVillainy() {
|
getVillainy() {
|
||||||
if (this.type === 'character') {
|
if (this.type === 'encounter' && this.chartype == "adversary") {
|
||||||
return false
|
return true
|
||||||
}
|
}
|
||||||
return true
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -734,7 +745,7 @@ export class BoLActor extends Actor {
|
|||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
||||||
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value })
|
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value, isHeroAdversary: this.isHeroAdversary() })
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (prone) {
|
if (prone) {
|
||||||
|
@ -523,6 +523,7 @@ export class BoLRoll {
|
|||||||
rollData.nbBoons = 0
|
rollData.nbBoons = 0
|
||||||
rollData.nbFlaws = 0
|
rollData.nbFlaws = 0
|
||||||
rollData.nbDice = 0
|
rollData.nbDice = 0
|
||||||
|
rollData.isHeroAdversary = actor.isHeroAdversary()
|
||||||
if (rollData.shieldBlock == 'blockall') {
|
if (rollData.shieldBlock == 'blockall') {
|
||||||
rollData.shieldMalus = rollData.shieldAttackMalus;
|
rollData.shieldMalus = rollData.shieldAttackMalus;
|
||||||
} else {
|
} else {
|
||||||
@ -677,10 +678,10 @@ export class BoLDefaultRoll {
|
|||||||
async sendChatMessage() {
|
async sendChatMessage() {
|
||||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||||
this._buildChatMessage(this.rollData).then(async msgFlavor => {
|
this._buildChatMessage(this.rollData).then(async msgFlavor => {
|
||||||
|
//console.log("MSG", msgFlavor )
|
||||||
let msg = await this.rollData.roll.toMessage({
|
let msg = await this.rollData.roll.toMessage({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
rollMode: game.settings.get("core", "rollMode"),
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
//whisper: BoLUtility.getWhisperRecipientsAndGMs(this.rollData.actor.name),
|
|
||||||
flavor: msgFlavor,
|
flavor: msgFlavor,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||||
})
|
})
|
||||||
|
@ -31,7 +31,7 @@ export class BoLUtility {
|
|||||||
hint: "Sélectionne la formule de dés (par défaut 2d6)",
|
hint: "Sélectionne la formule de dés (par défaut 2d6)",
|
||||||
scope: "world",
|
scope: "world",
|
||||||
config: true,
|
config: true,
|
||||||
default: "2d6",
|
default: "6",
|
||||||
type: String,
|
type: String,
|
||||||
choices: { "6": "2d6", "8":"2d8", "10":"2d10", "12":"2d12", "20":"2d20"},
|
choices: { "6": "2d6", "8":"2d8", "10":"2d10", "12":"2d12", "20":"2d20"},
|
||||||
onChange: value => {
|
onChange: value => {
|
||||||
@ -149,7 +149,7 @@ export class BoLUtility {
|
|||||||
df = "6"
|
df = "6"
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
diceFormula: this.diceFormula,
|
diceFormula: df,
|
||||||
successValue : this.successValue,
|
successValue : this.successValue,
|
||||||
criticalSuccessValue: this.criticalSuccessValue,
|
criticalSuccessValue: this.criticalSuccessValue,
|
||||||
criticalFailureValue: this.criticalFailureValue
|
criticalFailureValue: this.criticalFailureValue
|
||||||
@ -191,29 +191,6 @@ export class BoLUtility {
|
|||||||
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
|
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static templateData(it) {
|
|
||||||
return BoLUtility.data(it)?.data ?? {}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static data(it) {
|
|
||||||
if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
|
|
||||||
return it.data;
|
|
||||||
}
|
|
||||||
return it;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static storeRoll(roll) {
|
|
||||||
this.rollTab[roll.id] = roll
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static getRoll(rollId) {
|
|
||||||
return this.rollTab[roll.id]
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static createDirectOptionList(min, max) {
|
static createDirectOptionList(min, max) {
|
||||||
let options = {};
|
let options = {};
|
||||||
@ -258,7 +235,7 @@ export class BoLUtility {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getUsers(filter) {
|
static getUsers(filter) {
|
||||||
return game.users.filter(filter).map(user => user.data._id);
|
return game.users.filter(filter).map(user => user.id);
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getWhisperRecipients(rollMode, name) {
|
static getWhisperRecipients(rollMode, name) {
|
||||||
@ -422,14 +399,14 @@ export class BoLUtility {
|
|||||||
console.log("Damage Handling", attackId, defenseMode, weaponId)
|
console.log("Damage Handling", attackId, defenseMode, weaponId)
|
||||||
// Only GM process this
|
// Only GM process this
|
||||||
if (rollData && rollData.defenderId) {
|
if (rollData && rollData.defenderId) {
|
||||||
if (rollData.defenseDone) {
|
if (rollData.defenseDone || defenseMode == 'damage-not-applied') {
|
||||||
return
|
return
|
||||||
} // ?? Why ???
|
} // ?? Why ???
|
||||||
rollData.defenseDone = true
|
rollData.defenseDone = true
|
||||||
rollData.defenseMode = defenseMode
|
rollData.defenseMode = defenseMode
|
||||||
let token = game.scenes.current.tokens.get(rollData.targetId)
|
let token = game.scenes.current.tokens.get(rollData.targetId)
|
||||||
let defender = token.actor
|
let defender = token.actor
|
||||||
|
|
||||||
if (defenseMode == 'damage-with-armor') {
|
if (defenseMode == 'damage-with-armor') {
|
||||||
let armorFormula = defender.getArmorFormula()
|
let armorFormula = defender.getArmorFormula()
|
||||||
rollData.rollArmor = new Roll(armorFormula)
|
rollData.rollArmor = new Roll(armorFormula)
|
||||||
@ -522,7 +499,7 @@ export class BoLUtility {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static isRangedWeapon(weapon) {
|
static isRangedWeapon(weapon) {
|
||||||
return weapon.data.type == 'ranged' || weapon.data.thrown;
|
return weapon.system.type == 'ranged' || weapon.system.thrown;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -604,15 +581,15 @@ export class BoLUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeSpellCost(spell, nbOptCond = 0) {
|
static computeSpellCost(spell, nbOptCond = 0) {
|
||||||
let pp = spell.data.properties.ppcost
|
let pp = spell.system.properties.ppcost
|
||||||
let minpp = __circle2minpp[spell.data.properties.circle]
|
let minpp = __circle2minpp[spell.system.properties.circle]
|
||||||
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
||||||
return pp
|
return pp
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getDamageFormula(weaponData, fightOption) {
|
static getDamageFormula(weaponData, fightOption) {
|
||||||
let upgradeDamage = (fightOption && fightOption.data.properties.fightoptiontype == "twoweaponsatt")
|
let upgradeDamage = (fightOption && fightOption.system.properties.fightoptiontype == "twoweaponsatt")
|
||||||
let damageString = weaponData.properties.damage
|
let damageString = weaponData.properties.damage
|
||||||
let modifier = weaponData.properties.damageModifiers ?? 0
|
let modifier = weaponData.properties.damageModifiers ?? 0
|
||||||
let multiplier = weaponData.properties.damageMultiplier ?? 1
|
let multiplier = weaponData.properties.damageMultiplier ?? 1
|
||||||
|
@ -118,7 +118,7 @@ export const registerHandlebarsHelpers = function () {
|
|||||||
})
|
})
|
||||||
Handlebars.registerHelper('includesKey', function (items, type, key) {
|
Handlebars.registerHelper('includesKey', function (items, type, key) {
|
||||||
// console.log(items);
|
// console.log(items);
|
||||||
return items.filter(i => i.type === type).map(i => i.data.key).includes(key);
|
return items.filter(i => i.type === type).map(i => i.system.key).includes(key);
|
||||||
})
|
})
|
||||||
Handlebars.registerHelper('includes', function (array, val) {
|
Handlebars.registerHelper('includes', function (array, val) {
|
||||||
return array.includes(val);
|
return array.includes(val);
|
||||||
|
@ -49,7 +49,7 @@ export default function registerHooks() {
|
|||||||
let macro = game.macros.entities.find(m => (m.name === actor.name) && (m.command === command));
|
let macro = game.macros.entities.find(m => (m.name === actor.name) && (m.command === command));
|
||||||
if (!macro) {
|
if (!macro) {
|
||||||
macro = await Macro.create({
|
macro = await Macro.create({
|
||||||
name: actor.data.name,
|
name: actor.name,
|
||||||
type: "script",
|
type: "script",
|
||||||
img: "icons/svg/dice-target.svg",
|
img: "icons/svg/dice-target.svg",
|
||||||
command: command
|
command: command
|
||||||
@ -65,9 +65,9 @@ export default function registerHooks() {
|
|||||||
let macro = game.macros.entities.find(m => (m.name === journal.name) && (m.command === command));
|
let macro = game.macros.entities.find(m => (m.name === journal.name) && (m.command === command));
|
||||||
if (!macro) {
|
if (!macro) {
|
||||||
macro = await Macro.create({
|
macro = await Macro.create({
|
||||||
name: journal.data.name,
|
name: journal.name,
|
||||||
type: "script",
|
type: "script",
|
||||||
img: (journal.data.img) ? journal.data.img : "icons/svg/book.svg",
|
img: (journal.img) ? journal.img : "icons/svg/book.svg",
|
||||||
command: command
|
command: command
|
||||||
}, {displaySheet: false})
|
}, {displaySheet: false})
|
||||||
game.user.assignHotbarMacro(macro, slot);
|
game.user.assignHotbarMacro(macro, slot);
|
||||||
|
@ -37,13 +37,13 @@ export class Macros {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if(rollType === "attribute") {
|
if(rollType === "attribute") {
|
||||||
let attribute = eval(`actor.data.data.attributes.${key}`);
|
let attribute = eval(`actor.system.attributes.${key}`);
|
||||||
let rollLabel = (attribute.label) ? game.i18n.localize(attribute.label) : null;
|
let rollLabel = (attribute.label) ? game.i18n.localize(attribute.label) : null;
|
||||||
let description = actor.name + " - " + game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) ;
|
let description = actor.name + " - " + game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) ;
|
||||||
BoLRoll.attributeRollDialog(actor, actorData, attribute, rollLabel, description, adv, mod);
|
BoLRoll.attributeRollDialog(actor, actorData, attribute, rollLabel, description, adv, mod);
|
||||||
}
|
}
|
||||||
else if(rollType === "aptitude") {
|
else if(rollType === "aptitude") {
|
||||||
let aptitude = eval(`actor.data.data.aptitudes.${key}`);
|
let aptitude = eval(`actor.system.aptitudes.${key}`);
|
||||||
let rollLabel = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
let rollLabel = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
||||||
let description = actor.name + " - " + game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label) ;
|
let description = actor.name + " - " + game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label) ;
|
||||||
BoLRoll.aptitudeRollDialog(actor, actorData, aptitude, rollLabel, description, adv, mod);
|
BoLRoll.aptitudeRollDialog(actor, actorData, aptitude, rollLabel, description, adv, mod);
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
],
|
],
|
||||||
"url": "https://www.uberwald.me/gitea/public/bol",
|
"url": "https://www.uberwald.me/gitea/public/bol",
|
||||||
"license": "LICENSE.txt",
|
"license": "LICENSE.txt",
|
||||||
"version": "10.5.10",
|
"version": "10.5.13",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "10",
|
||||||
"verified": "10"
|
"verified": "10"
|
||||||
@ -202,7 +202,7 @@
|
|||||||
],
|
],
|
||||||
"socket": true,
|
"socket": true,
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
||||||
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.5.10.zip",
|
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.5.13.zip",
|
||||||
"background": "systems/bol/ui/page_accueil.webp",
|
"background": "systems/bol/ui/page_accueil.webp",
|
||||||
"gridDistance": 1.5,
|
"gridDistance": 1.5,
|
||||||
"gridUnits": "m",
|
"gridUnits": "m",
|
||||||
|
@ -4,20 +4,25 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
|
|
||||||
{{#if (eq hp 0)}}
|
|
||||||
{{localize "BOL.chat.vitalityzero" name=name hp=hp}}
|
|
||||||
<br>{{localize "BOL.chat.vitalityheroism"}}
|
|
||||||
<br>{{localize "BOL.chat.vitalityheroismhint"}}
|
|
||||||
{{else}}
|
|
||||||
{{localize "BOL.chat.vitalitydying" name=name hp=hp}}
|
|
||||||
<br>{{localize "BOL.chat.vitalitydyingheroism"}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if (lt hp -5)}}
|
{{#if isHeroAdversary}}
|
||||||
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
{{#if (eq hp 0)}}
|
||||||
<br>{{localize "BOL.chat.epitaph"}}
|
{{localize "BOL.chat.vitalityzero" name=name hp=hp}}
|
||||||
{{/if}}
|
<br>{{localize "BOL.chat.vitalityheroism"}}
|
||||||
|
<br>{{localize "BOL.chat.vitalityheroismhint"}}
|
||||||
|
{{else}}
|
||||||
|
{{localize "BOL.chat.vitalitydying" name=name hp=hp}}
|
||||||
|
<br>{{localize "BOL.chat.vitalitydyingheroism"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (lt hp -5)}}
|
||||||
|
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
||||||
|
<br>{{localize "BOL.chat.epitaph"}}
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
||||||
|
<br>{{localize "BOL.chat.epitaph"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
<div>
|
<div>
|
||||||
{{#if isSuccess}}
|
{{#if isSuccess}}
|
||||||
{{#if isLegendary}}
|
{{#if isLegendary}}
|
||||||
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.criticallegend"}}...
|
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.criticallegend"}}...
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if isCritical}}
|
{{#if isCritical}}
|
||||||
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.critical"}}...
|
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.critical"}}...
|
||||||
{{else}}
|
{{else}}
|
||||||
<h2 class="success"><i class="fas fa-check"></i> {{localize "BOL.ui.success"}}...
|
<h2 class="success"><i class="fas fa-check"></i> {{localize "BOL.ui.success"}}...
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if isFailure}}
|
{{#if isFailure}}
|
||||||
{{#if isFumble}}
|
{{#if isFumble}}
|
||||||
<h2 class="failure fumble"><i class="fas fa-skull-crossbones"></i> {{localize "BOL.ui.fumble"}}...
|
<h2 class="failure fumble"><i class="fas fa-skull-crossbones"></i> {{localize "BOL.ui.fumble"}}...
|
||||||
{{else}}
|
{{else}}
|
||||||
<h2 class="failure"><i class="fas fa-times"></i> {{localize "BOL.ui.failure"}}...
|
<h2 class="failure"><i class="fas fa-times"></i> {{localize "BOL.ui.failure"}}...
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<img class="chat-icon" src="{{img}}" alt="{{actor.name}}"/>
|
<img class="chat-icon" src="{{img}}" alt="{{actor.name}}"/>
|
||||||
@ -52,9 +52,6 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<div id="{{optionsId}}">
|
<div id="{{optionsId}}">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{#if isCritical}}
|
{{#if isCritical}}
|
||||||
<div>
|
<div>
|
||||||
{{localize "BOL.chat.criticalinfo"}}
|
{{localize "BOL.chat.criticalinfo"}}
|
||||||
@ -83,14 +80,14 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if reroll}}
|
{{#if reroll}}
|
||||||
<button class="chat-button button hero-reroll bol-margin-tb-2" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.reroll"}}</button>
|
<button class="chat-button button hero-reroll bol-margin-tb-2" data-actor-id="{{actorId}}">{{localize "BOL.chat.reroll"}}</button>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (and isSuccess (not isCritical))}}
|
{{#if (and isSuccess (not isCritical))}}
|
||||||
<button class="chat-button button transform-heroic-roll bol-margin-tb-2" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.toheroic"}}</button>
|
<button class="chat-button button transform-heroic-roll bol-margin-tb-2" data-actor-id="{{actorId}}">{{localize "BOL.chat.toheroic"}}</button>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isRealCritical}}
|
{{#if isRealCritical}}
|
||||||
<button class="chat-button button transform-legendary-roll bol-margin-tb-2" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.tolegend"}}</button>
|
<button class="chat-button button transform-legendary-roll bol-margin-tb-2" data-actor-id="{{actorId}}">{{localize "BOL.chat.tolegend"}}</button>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
@ -6,13 +6,17 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
||||||
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack--id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
||||||
|
|
||||||
{{#if defender.system.resources.hero.value}}
|
{{#if isHeroAdversary}}
|
||||||
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
{{#if (gt defender.system.resources.hero.value 0)}}
|
||||||
|
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
||||||
|
|
||||||
{{#each defenderWeapons as |weapon idx|}}
|
{{#each defenderWeapons as |weapon idx|}}
|
||||||
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
|
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<button class="damage-handling" data-defense-mode="damage-not-applied" data-attack-id="{{attackId}}">{{localize "BOL.chat.nodamage"}}</button>
|
||||||
|
|
||||||
{{/if}}
|
|
Reference in New Issue
Block a user