forked from public/bol
Compare commits
18 Commits
bol-v10.0.
...
bol-v10.2.
Author | SHA1 | Date | |
---|---|---|---|
815b5ff2ac | |||
edf8325109 | |||
895aa01419 | |||
9631e5e72a | |||
716cc53b29 | |||
44952d4410 | |||
a7991bce92 | |||
a1c20019e8 | |||
af8576a4a1 | |||
6c35ddfb0b | |||
0cbcaee45e | |||
904ff821e1 | |||
5c13cde07a | |||
51c1e205e9 | |||
90a83f4571 | |||
3311bc091a | |||
fa8f9869a6 | |||
36b905134e |
@ -40,4 +40,4 @@ Maps : Emmanuel Roudier.
|
||||
|
||||
# Developmement
|
||||
|
||||
Zigmund, LeRatierBretonnien
|
||||
LeRatierBretonnien, Zigmund (historical)
|
||||
|
10
css/bol.css
10
css/bol.css
@ -389,16 +389,16 @@ ul.no-bullets {
|
||||
background-color: lightgray;
|
||||
}
|
||||
.bol h1.form-header {
|
||||
font-size: 2.5em;
|
||||
font-size: 2.2em;
|
||||
font-weight: 700;
|
||||
}
|
||||
.bol h2.form-header {
|
||||
font-size: 2em;
|
||||
font-size: 1.8em;
|
||||
font-weight: 500;
|
||||
border-bottom: 1px groove #eeede0;
|
||||
}
|
||||
.bol h3.form-header {
|
||||
font-size: 1.5em;
|
||||
font-size: 1.2em;
|
||||
font-weight: 500;
|
||||
border-bottom: 1px groove #eeede0;
|
||||
}
|
||||
@ -1051,3 +1051,7 @@ body.system-bol img#logo {
|
||||
.bol-hud-menu label {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.bol-margin-tb-2 {
|
||||
margin-top: 2px;
|
||||
margin-bottom: 2px;
|
||||
}
|
15
lang/fr.json
15
lang/fr.json
@ -391,6 +391,21 @@
|
||||
"BOL.chat.spellremaining": "Points de Pouvoir restants",
|
||||
"BOL.chat.nodamagesummary": "Aucun dégats n'a été subi ....",
|
||||
"BOL.chat.damageresume": "{name} a subi des blessures ...",
|
||||
"BOL.chat.fumblemessage": "Si vous acceptez les conséquences d'un echec catastrophique (au choix du MJ), vous pourrez bénéficier d'1 point d'Héroïsme supplémentaire",
|
||||
"BOL.chat.rangeinfo": "Tir/Lancer de {attackerName} vers {defenderName}",
|
||||
"BOL.chat.rangeweaponinfo": "Arme : {weaponName} - Portée de base {weaponRange}",
|
||||
"BOL.chat.rangeout": "Modificateur : Hors de portée",
|
||||
"BOL.chat.range0": "Modificateur : Bout portant (+1)",
|
||||
"BOL.chat.range1": "Modificateur : Portée courte (0)",
|
||||
"BOL.chat.range2": "Modificateur : Portée moyenne (-1)",
|
||||
"BOL.chat.range3": "Modificateur : Portée longue (-2)",
|
||||
"BOL.chat.range4": "Modificateur : Portée très longue (-4)",
|
||||
"BOL.chat.range5": "Modificateur : Portée extrême (-6)",
|
||||
"BOL.chat.range6": "Modificateur : Portée maximale (-8)",
|
||||
"BOL.chat.rangeprefix": "Distance évaluée : ",
|
||||
"BOL.chat.rangevisible": "La ligne de vue est dégagée entre les protagonistes.",
|
||||
"BOL.chat.rangenotvisible": "La ligne de vue est bloquée entre les protagonistes.",
|
||||
"BOL.chat.rangetitle": "Information MJ",
|
||||
|
||||
"BOL.dialog.soeasy": "Inmanquable (+4)",
|
||||
"BOL.dialog.veryeasy": "Trés Facile (+2)",
|
||||
|
@ -12,7 +12,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "actor"],
|
||||
template: "systems/bol/templates/actor/actor-sheet.hbs",
|
||||
width: 600,
|
||||
width: 860,
|
||||
height: 600,
|
||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }]
|
||||
@ -114,7 +114,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
getData(options) {
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
const actorData = duplicate(data)
|
||||
let formData = duplicate(data)
|
||||
@ -125,6 +125,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
formData.attributes = this.actor.attributes
|
||||
formData.aptitudes = this.actor.aptitudes
|
||||
formData.resources = this.actor.getResourcesFromType()
|
||||
formData.xp = this.actor.system.xp
|
||||
formData.equipment = this.actor.equipment
|
||||
formData.equipmentCreature = this.actor.equipmentCreature
|
||||
formData.weapons = this.actor.weapons
|
||||
@ -139,7 +140,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
formData.ammos = this.actor.ammos
|
||||
formData.misc = this.actor.misc
|
||||
formData.combat = this.actor.buildCombat()
|
||||
formData.combatCreature = this.actor.buildCombatCreature()
|
||||
//formData.combatCreature = this.actor.buildCombatCreature()
|
||||
formData.features = this.actor.buildFeatures()
|
||||
formData.isGM = game.user.isGM
|
||||
formData.options = this.options
|
||||
@ -147,8 +148,9 @@ export class BoLActorSheet extends ActorSheet {
|
||||
formData.editScore = this.options.editScore
|
||||
formData.useBougette = BoLUtility.getUseBougette()
|
||||
formData.charType = this.actor.getCharType()
|
||||
formData.villainy = this.actor.getVillainy()
|
||||
|
||||
formData.villainy = this.actor.getVillainy()
|
||||
formData.biography = await TextEditor.enrichHTML(this.object.system.details.biography, {async: true})
|
||||
formData.notes = await TextEditor.enrichHTML(this.object.system.details.notes, {async: true})
|
||||
formData.isSorcerer = this.actor.isSorcerer()
|
||||
formData.isAlchemist = this.actor.isAlchemist()
|
||||
formData.isPriest = this.actor.isPriest()
|
||||
|
@ -26,7 +26,7 @@ export class BoLActor extends Actor {
|
||||
if (this.type === 'character') {
|
||||
return 'player'
|
||||
}
|
||||
return 'tough'
|
||||
return this.system.chartype
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getVillainy() {
|
||||
@ -479,6 +479,15 @@ export class BoLActor extends Actor {
|
||||
"options": false,
|
||||
"items": this.melee
|
||||
},
|
||||
"natural": {
|
||||
"label": "BOL.combatCategory.natural",
|
||||
"weapon": true,
|
||||
"protection": false,
|
||||
"blocking": false,
|
||||
"ranged": false,
|
||||
"options": false,
|
||||
"items": this.natural
|
||||
},
|
||||
"ranged": {
|
||||
"label": "BOL.combatCategory.ranged",
|
||||
"weapon": true,
|
||||
@ -518,28 +527,6 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
buildCombatCreature() {
|
||||
return {
|
||||
"natural": {
|
||||
"label": "BOL.combatCategory.natural",
|
||||
"weapon": true,
|
||||
"protection": false,
|
||||
"blocking": false,
|
||||
"ranged": false,
|
||||
"options": false,
|
||||
"items": this.natural
|
||||
},
|
||||
"protections": {
|
||||
"label": "BOL.combatCategory.protections",
|
||||
"weapon": false,
|
||||
"protection": true,
|
||||
"blocking": false,
|
||||
"ranged": false,
|
||||
"options": false,
|
||||
"items": this.protections
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
buildRollList() {
|
||||
|
@ -67,6 +67,44 @@ export class BoLRoll {
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async detectDistance( weapon, target ) {
|
||||
let visible, dist
|
||||
if (weapon.system.properties.ranged || weapon.system.properties.throwing) {
|
||||
console.log("target", target, weapon)
|
||||
visible = canvas.effects.visibility.testVisibility(target.center, { object: _token })
|
||||
dist = Number(canvas.grid.measureDistances([{ ray: new Ray(_token.center, target.center) }], { gridSpaces: false })).toFixed(2)
|
||||
let range = Number(weapon.system.properties.range)
|
||||
let rangeMsg = "BOL.chat.rangeout"
|
||||
if ( dist <= range) {
|
||||
rangeMsg = "BOL.chat.range0"
|
||||
} else if (dist < range*2) {
|
||||
rangeMsg = "BOL.chat.range1"
|
||||
} else if (dist < range*3) {
|
||||
rangeMsg = "BOL.chat.range2"
|
||||
} else if (dist < range*4) {
|
||||
rangeMsg = "BOL.chat.range3"
|
||||
} else if (dist < range*5) {
|
||||
rangeMsg = "BOL.chat.range4"
|
||||
} else if (dist < range*6) {
|
||||
rangeMsg = "BOL.chat.range5"
|
||||
} else if (dist < range*7) {
|
||||
rangeMsg = "BOL.chat.range6"
|
||||
}
|
||||
ChatMessage.create({
|
||||
content: await renderTemplate('systems/bol/templates/chat/chat-info-range.hbs', {
|
||||
weapon: weapon,
|
||||
attackerName: _token.actor.name,
|
||||
defenderName: target.actor.name,
|
||||
weaponRange: weapon.system.properties.range,
|
||||
visible: visible,
|
||||
distance: dist,
|
||||
rangeMsg: rangeMsg
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static weaponCheckWithWeapon(actor, weapon) {
|
||||
|
||||
@ -76,6 +114,9 @@ export class BoLRoll {
|
||||
let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`)
|
||||
let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`)
|
||||
|
||||
// Compute distance
|
||||
this.detectDistance( weapon, target)
|
||||
|
||||
// Manage specific case
|
||||
let fightOption = actor.getActiveFightOption()
|
||||
if (fightOption && fightOption.system.fightoptiontype == "fulldefense") {
|
||||
@ -127,7 +168,7 @@ export class BoLRoll {
|
||||
return;
|
||||
}
|
||||
alchemy = duplicate(alchemy)
|
||||
let alchemyData = alchemy.data
|
||||
let alchemyData = alchemy.system
|
||||
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
||||
ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !")
|
||||
return
|
||||
@ -488,6 +529,9 @@ export class BoLDefaultRoll {
|
||||
this.rollData.isLegendary = false
|
||||
this.rollData.isFumble = (diceTotal === 2)
|
||||
this.rollData.isFailure = !this.rollData.isSuccess
|
||||
|
||||
//this.rollData.isRealCritical = true
|
||||
//this.rollData.isFumble = true
|
||||
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
if (this.rollData.reroll == undefined) {
|
||||
|
@ -19,7 +19,7 @@ export class BoLItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
getData(options) {
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
let itemData = duplicate(data.document)
|
||||
data.config = game.bol.config
|
||||
@ -27,6 +27,7 @@ export class BoLItemSheet extends ItemSheet {
|
||||
data.category = itemData.system.category
|
||||
data.isGM = game.user.isGM;
|
||||
data.itemProperties = this.item.itemProperties;
|
||||
data.description = await TextEditor.enrichHTML(this.object.system.description, {async: true})
|
||||
|
||||
// Dynamic default data fix/adapt
|
||||
if (itemData.type == "item") {
|
||||
|
@ -15,7 +15,7 @@ export class BoLCombatManager extends Combat {
|
||||
|
||||
/************************************************************************************/
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
console.log(`${game.data.system.data.title} | Combat.rollInitiative()`, ids, formula, messageOptions);
|
||||
console.log(`${game.system.title} | Combat.rollInitiative()`, ids, formula, messageOptions);
|
||||
// Structure input data
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
const currentId = this.combatant._id;
|
||||
@ -24,6 +24,7 @@ export class BoLCombatManager extends Combat {
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const combatant = this.combatants.get(ids[cId]);
|
||||
let fvttInit = 5
|
||||
//console.log("TYPE", combatant.actor.type)
|
||||
if (combatant.actor.type == 'character') {
|
||||
let initData = combatant.actor.getLastInitData()
|
||||
console.log("Init data !!!", initData)
|
||||
@ -37,11 +38,12 @@ export class BoLCombatManager extends Combat {
|
||||
fvttInit = 3
|
||||
}
|
||||
} else {
|
||||
fvttInit = 4 // Pietaille par defaut
|
||||
if ( combatant.actor.getSubtype == 'adversary') {
|
||||
fvttInit = 4 // Pietaille par defautco
|
||||
//console.log("ACTOR", combatant.actor.getCharType())
|
||||
if ( combatant.actor.getCharType() == 'adversary') {
|
||||
fvttInit = 7
|
||||
}
|
||||
if ( combatant.actor.getSubtype == 'tough') {
|
||||
if ( combatant.actor.getCharType() == 'tough') {
|
||||
fvttInit = 6
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,21 @@ import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
|
||||
export class BoLHotbar {
|
||||
|
||||
|
||||
static async assignToHotBar( item, slot) {
|
||||
let command = `game.bol.BoLHotbar.rollMacro("${item.name}", "${item.type}");`
|
||||
let macro = game.macros.contents.find(m => (m.name === item.name) && (m.command === command))
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: item.name,
|
||||
type: "script",
|
||||
img: item.img,
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
}
|
||||
await game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a macro when dropping an entity on the hotbar
|
||||
* Item - open roll dialog for item
|
||||
@ -10,55 +25,20 @@ export class BoLHotbar {
|
||||
*/
|
||||
static init( ) {
|
||||
|
||||
Hooks.on("hotbarDrop", async (bar, documentData, slot) => {
|
||||
Hooks.on("hotbarDrop", (bar, documentData, slot) => {
|
||||
// Create item macro if rollable item - weapon, spell, prayer, trait, or skill
|
||||
if (documentData.type == "Item") {
|
||||
console.log("Drop done !!!", bar, documentData, slot)
|
||||
let item = documentData.data
|
||||
let command = `game.bol.BoLHotbar.rollMacro("${item.name}", "${item.type}");`
|
||||
let macro = game.macros.contents.find(m => (m.name === item.name) && (m.command === command))
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: item.name,
|
||||
type: "script",
|
||||
img: item.img,
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
let item = fromUuidSync(documentData.uuid)
|
||||
if (item == undefined) {
|
||||
item = this.actor.items.get(documentData.uuid)
|
||||
}
|
||||
game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
// Create a macro to open the actor sheet of the actor dropped on the hotbar
|
||||
else if (documentData.type == "Actor") {
|
||||
let actor = game.actors.get(documentData.id);
|
||||
let command = `game.actors.get("${documentData.id}").sheet.render(true)`
|
||||
let macro = game.macros.contents.find(m => (m.name === actor.name) && (m.command === command));
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: actor.data.name,
|
||||
type: "script",
|
||||
img: actor.data.img,
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
game.user.assignHotbarMacro(macro, slot);
|
||||
if (item && (item.system.subtype === "weapon" || item.system.category === "spell")) {
|
||||
this.assignToHotBar( item, slot )
|
||||
return false
|
||||
}
|
||||
}
|
||||
// Create a macro to open the journal sheet of the journal dropped on the hotbar
|
||||
else if (documentData.type == "JournalEntry") {
|
||||
let journal = game.journal.get(documentData.id);
|
||||
let command = `game.journal.get("${documentData.id}").sheet.render(true)`
|
||||
let macro = game.macros.contents.find(m => (m.name === journal.name) && (m.command === command));
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: journal.data.name,
|
||||
type: "script",
|
||||
img: "systems/bol/icons/images/icone_parchement_vierge.webp",
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
/** Roll macro */
|
||||
@ -76,10 +56,10 @@ export class BoLHotbar {
|
||||
return ui.notifications.warn(`Impossible de trouver l'objet de cette macro`)
|
||||
}
|
||||
// Trigger the item roll
|
||||
if (item.data.data.category === "equipment" && item.data.data.subtype === "weapon") {
|
||||
if (item.system.category === "equipment" && item.system.subtype === "weapon") {
|
||||
return BoLRoll.weaponCheckWithWeapon( actor, item)
|
||||
}
|
||||
if (item.data.data.category === "spell") {
|
||||
if (item.system.category === "spell") {
|
||||
return BoLRoll.spellCheckWithSpell( actor, item)
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -14,11 +14,9 @@
|
||||
],
|
||||
"url": "https://www.uberwald.me/gitea/public/bol",
|
||||
"license": "LICENSE.txt",
|
||||
"version": "10.0.3",
|
||||
"version": "10.2.1",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "10.279",
|
||||
"maximum": "10"
|
||||
"minimum": "10"
|
||||
},
|
||||
"esmodules": [
|
||||
"module/bol.js"
|
||||
@ -194,7 +192,7 @@
|
||||
],
|
||||
"socket": true,
|
||||
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
||||
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.0.3.zip",
|
||||
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.2.1.zip",
|
||||
"background": "systems/images/map_lemurie.webp",
|
||||
"gridDistance": 1.5,
|
||||
"gridUnits": "m",
|
||||
|
@ -6,23 +6,23 @@
|
||||
<input class="charname flex6" name="name" type="text" value="{{actor.name}}" placeholder="Name"/>
|
||||
</div>
|
||||
|
||||
{{#if (eq data.type "player")}}
|
||||
{{#if (eq charType "player")}}
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">{{localize "BOL.ui.xp"}}</label><br/>
|
||||
<div class="header-field-group flex3">
|
||||
<label class="header-field-label flex1" style="font-size: 1.5em; color:#606060;">{{localize "BOL.ui.xpspent"}}</label><br/>
|
||||
<input class="header-field-value flex1" type="text" name="data.xp.spent" value="{{numberFormat data.xp.spent decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
<input class="header-field-value flex1" type="text" name="system.xp.spent" value="{{numberFormat xp.spent decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
</div>
|
||||
<div class="header-field-group flex3">
|
||||
<label class="header-field-label flex1" style="font-size: 1.5em; color:#606060;"> {{localize "BOL.ui.xptotal"}}</label><br/>
|
||||
<input class="header-field-value flex1" type="text" name="data.xp.total" value="{{numberFormat data.xp.total decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
<input class="header-field-value flex1" type="text" name="system.xp.total" value="{{numberFormat xp.total decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">Type : </label><br/>
|
||||
<select class="field-value" name="data.type" data-dtype="String">
|
||||
{{#select data.type}}
|
||||
<select class="field-value" name="system.chartype" data-dtype="String">
|
||||
{{#select charType}}
|
||||
<option value="creature">Créature</option>
|
||||
<option value="base">Piétaille</option>
|
||||
<option value="tough">Coriace</option>
|
||||
|
@ -40,7 +40,7 @@
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
{{editor details.biography target="system.details.biography" button=true owner=owner
|
||||
{{editor biography target="system.details.biography" button=true owner=owner
|
||||
editable=editable}}
|
||||
|
||||
<ol class="items-list">
|
||||
@ -49,4 +49,4 @@ editable=editable}}
|
||||
<div class="item-field flex1 right"></div>
|
||||
</li>
|
||||
</ol>
|
||||
{{editor details.notes target="system.details.notes" button=true owner=owner editable=editable}}
|
||||
{{editor notes target="system.details.notes" button=true owner=owner editable=editable}}
|
19
templates/chat/chat-info-range.hbs
Normal file
19
templates/chat/chat-info-range.hbs
Normal file
@ -0,0 +1,19 @@
|
||||
<div>
|
||||
<img class="chat-icon" src="{{weapon.img}}" alt="{{weapon.name}}"/>
|
||||
<h2 class="bad"><strong>{{localize "BOL.chat.rangetitle"}}</strong></h2>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
|
||||
{{localize "BOL.chat.rangeinfo" attackerName=attackerName defenderName=defenderName}}
|
||||
{{#if visible}}
|
||||
<br>{{localize "BOL.chat.rangevisible"}}
|
||||
{{else}}
|
||||
<br>{{localize "BOL.chat.rangenotvisible"}}
|
||||
{{/if}}
|
||||
<br>{{localize "BOL.chat.rangeweaponinfo" weaponName=weapon.name weaponRange=weaponRange}} m.
|
||||
<br>{{localize "BOL.chat.rangeprefix"}} {{distance}} m.
|
||||
<br>{{localize rangeMsg}}
|
||||
|
||||
</div>
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
<button class="chat-damage-roll" data-damage-mode="normal-damage" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage"}}</button>
|
||||
<button class="chat-damage-roll bol-margin-tb-2" data-damage-mode="normal-damage" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage"}}</button>
|
||||
|
||||
{{#if isCritical}}
|
||||
<button class="chat-damage-roll" data-damage-mode="damage-plus-6" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage6"}}</button>
|
||||
<button class="chat-damage-roll" data-damage-mode="damage-plus-12" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage12"}}</button>
|
||||
<button class="chat-damage-roll bol-margin-tb-2 " data-damage-mode="damage-plus-6" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage6"}}</button>
|
||||
<button class="chat-damage-roll bol-margin-tb-2" data-damage-mode="damage-plus-12" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage12"}}</button>
|
||||
{{/if}}
|
||||
|
@ -24,6 +24,10 @@
|
||||
<h3><strong>{{description}}</strong></h3>
|
||||
|
||||
<div class="actions-section">
|
||||
{{#if isFumble}}
|
||||
{{localize "BOL.chat.fumblemessage"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if fightOption}}
|
||||
<div>
|
||||
{{localize "BOL.chat.fightoption"}} : {{fightOption.name}}
|
||||
@ -31,6 +35,13 @@
|
||||
{{/if}}
|
||||
|
||||
<div id="{{optionsId}}">
|
||||
|
||||
{{#if isRealCritical}}
|
||||
<div class="bol-margin-tb-2">
|
||||
<a class="content-link" draggable="true" data-uuid="Compendium.bol.aides-de-jeu.Yl1RKQb0BjVUtilk" data-id="Yl1RKQb0BjVUtilk" data-type="JournalEntry" data-pack="bol.aides-de-jeu" data-tooltip="un journal"><i class="fas fa-book-open"></i>Succès Héroïque</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (and isSuccess weapon)}}
|
||||
{{> "systems/bol/templates/chat/rolls/attack-damage-card.hbs"}}
|
||||
{{/if}}
|
||||
@ -42,16 +53,18 @@
|
||||
{{/if}}
|
||||
|
||||
{{#if reroll}}
|
||||
<button class="chat-button button hero-reroll" 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-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.reroll"}}</button>
|
||||
{{/if}}
|
||||
{{#if (and isSuccess (not isCritical))}}
|
||||
<button class="chat-button button transform-heroic-roll" 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-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.toheroic"}}</button>
|
||||
{{/if}}
|
||||
|
||||
{{#if isRealCritical}}
|
||||
<button class="chat-button button transform-legendary-roll" 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-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.tolegend"}}</button>
|
||||
{{/if}}
|
||||
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div class="flexrow box-roll">
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" >
|
||||
<label for="attr">{{localize 'BOL.ui.attribute'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -1,6 +1,6 @@
|
||||
{{#if (count boons)}}
|
||||
<div class="flexrow roll-box" >
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" data-tooltip-direction="LEFT" data-tooltip="Click-gauche pour sélectionner, CTRL+Click gauche pour déselectionner">
|
||||
<label for="mod">{{localize 'BOL.ui.boons'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -1,6 +1,6 @@
|
||||
{{#if careers}}
|
||||
<div class="flexrow roll-box">
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" data-tooltip-direction="LEFT" data-tooltip="Click-gauche pour selectionner, CTRL+Click gauche pour déselectionner">
|
||||
<label for="mod">{{localize 'BOL.ui.careers'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -1,6 +1,6 @@
|
||||
{{#if (count flaws)}}
|
||||
<div class="flexrow roll-box">
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" data-tooltip-direction="LEFT" data-tooltip="Click-gauche pour selectionner, CTRL+Click gauche pour déselectionner">
|
||||
<label for="mod">{{localize 'BOL.ui.flaws'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -8,7 +8,7 @@
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{#if weapon.data.data.properties.onlymodifier}}
|
||||
{{#if weapon.system.properties.onlymodifier}}
|
||||
{{else}}
|
||||
{{> "systems/bol/templates/dialogs/attribute-roll-part.hbs"}}
|
||||
{{> "systems/bol/templates/dialogs/aptitude-roll-part.hbs"}}
|
||||
|
@ -20,7 +20,7 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{editor item.system.description target="system.description" button=true owner=owner editable=editable}}
|
||||
{{editor description target="system.description" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
<div class="tab properties" data-group="primary" data-tab="properties">
|
||||
{{#if (eq item.type "item")}}
|
||||
|
Reference in New Issue
Block a user