forked from public/bol
Compare commits
17 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 |
@ -40,4 +40,4 @@ Maps : Emmanuel Roudier.
|
|||||||
|
|
||||||
# Developmement
|
# Developmement
|
||||||
|
|
||||||
Zigmund, LeRatierBretonnien
|
LeRatierBretonnien, Zigmund (historical)
|
||||||
|
10
css/bol.css
10
css/bol.css
@ -389,16 +389,16 @@ ul.no-bullets {
|
|||||||
background-color: lightgray;
|
background-color: lightgray;
|
||||||
}
|
}
|
||||||
.bol h1.form-header {
|
.bol h1.form-header {
|
||||||
font-size: 2.5em;
|
font-size: 2.2em;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
.bol h2.form-header {
|
.bol h2.form-header {
|
||||||
font-size: 2em;
|
font-size: 1.8em;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
border-bottom: 1px groove #eeede0;
|
border-bottom: 1px groove #eeede0;
|
||||||
}
|
}
|
||||||
.bol h3.form-header {
|
.bol h3.form-header {
|
||||||
font-size: 1.5em;
|
font-size: 1.2em;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
border-bottom: 1px groove #eeede0;
|
border-bottom: 1px groove #eeede0;
|
||||||
}
|
}
|
||||||
@ -1051,3 +1051,7 @@ body.system-bol img#logo {
|
|||||||
.bol-hud-menu label {
|
.bol-hud-menu label {
|
||||||
font-size: 0.75rem;
|
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.spellremaining": "Points de Pouvoir restants",
|
||||||
"BOL.chat.nodamagesummary": "Aucun dégats n'a été subi ....",
|
"BOL.chat.nodamagesummary": "Aucun dégats n'a été subi ....",
|
||||||
"BOL.chat.damageresume": "{name} a subi des blessures ...",
|
"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.soeasy": "Inmanquable (+4)",
|
||||||
"BOL.dialog.veryeasy": "Trés Facile (+2)",
|
"BOL.dialog.veryeasy": "Trés Facile (+2)",
|
||||||
|
@ -12,7 +12,7 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
return mergeObject(super.defaultOptions, {
|
return mergeObject(super.defaultOptions, {
|
||||||
classes: ["bol", "sheet", "actor"],
|
classes: ["bol", "sheet", "actor"],
|
||||||
template: "systems/bol/templates/actor/actor-sheet.hbs",
|
template: "systems/bol/templates/actor/actor-sheet.hbs",
|
||||||
width: 600,
|
width: 860,
|
||||||
height: 600,
|
height: 600,
|
||||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }]
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }]
|
||||||
@ -114,7 +114,7 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
getData(options) {
|
async getData(options) {
|
||||||
const data = super.getData(options)
|
const data = super.getData(options)
|
||||||
const actorData = duplicate(data)
|
const actorData = duplicate(data)
|
||||||
let formData = duplicate(data)
|
let formData = duplicate(data)
|
||||||
@ -125,6 +125,7 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
formData.attributes = this.actor.attributes
|
formData.attributes = this.actor.attributes
|
||||||
formData.aptitudes = this.actor.aptitudes
|
formData.aptitudes = this.actor.aptitudes
|
||||||
formData.resources = this.actor.getResourcesFromType()
|
formData.resources = this.actor.getResourcesFromType()
|
||||||
|
formData.xp = this.actor.system.xp
|
||||||
formData.equipment = this.actor.equipment
|
formData.equipment = this.actor.equipment
|
||||||
formData.equipmentCreature = this.actor.equipmentCreature
|
formData.equipmentCreature = this.actor.equipmentCreature
|
||||||
formData.weapons = this.actor.weapons
|
formData.weapons = this.actor.weapons
|
||||||
@ -139,7 +140,7 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
formData.ammos = this.actor.ammos
|
formData.ammos = this.actor.ammos
|
||||||
formData.misc = this.actor.misc
|
formData.misc = this.actor.misc
|
||||||
formData.combat = this.actor.buildCombat()
|
formData.combat = this.actor.buildCombat()
|
||||||
formData.combatCreature = this.actor.buildCombatCreature()
|
//formData.combatCreature = this.actor.buildCombatCreature()
|
||||||
formData.features = this.actor.buildFeatures()
|
formData.features = this.actor.buildFeatures()
|
||||||
formData.isGM = game.user.isGM
|
formData.isGM = game.user.isGM
|
||||||
formData.options = this.options
|
formData.options = this.options
|
||||||
@ -147,8 +148,9 @@ export class BoLActorSheet extends ActorSheet {
|
|||||||
formData.editScore = this.options.editScore
|
formData.editScore = this.options.editScore
|
||||||
formData.useBougette = BoLUtility.getUseBougette()
|
formData.useBougette = BoLUtility.getUseBougette()
|
||||||
formData.charType = this.actor.getCharType()
|
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.isSorcerer = this.actor.isSorcerer()
|
||||||
formData.isAlchemist = this.actor.isAlchemist()
|
formData.isAlchemist = this.actor.isAlchemist()
|
||||||
formData.isPriest = this.actor.isPriest()
|
formData.isPriest = this.actor.isPriest()
|
||||||
|
@ -479,6 +479,15 @@ export class BoLActor extends Actor {
|
|||||||
"options": false,
|
"options": false,
|
||||||
"items": this.melee
|
"items": this.melee
|
||||||
},
|
},
|
||||||
|
"natural": {
|
||||||
|
"label": "BOL.combatCategory.natural",
|
||||||
|
"weapon": true,
|
||||||
|
"protection": false,
|
||||||
|
"blocking": false,
|
||||||
|
"ranged": false,
|
||||||
|
"options": false,
|
||||||
|
"items": this.natural
|
||||||
|
},
|
||||||
"ranged": {
|
"ranged": {
|
||||||
"label": "BOL.combatCategory.ranged",
|
"label": "BOL.combatCategory.ranged",
|
||||||
"weapon": true,
|
"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() {
|
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) {
|
static weaponCheckWithWeapon(actor, weapon) {
|
||||||
|
|
||||||
@ -76,6 +114,9 @@ export class BoLRoll {
|
|||||||
let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`)
|
let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`)
|
||||||
let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`)
|
let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`)
|
||||||
|
|
||||||
|
// Compute distance
|
||||||
|
this.detectDistance( weapon, target)
|
||||||
|
|
||||||
// Manage specific case
|
// Manage specific case
|
||||||
let fightOption = actor.getActiveFightOption()
|
let fightOption = actor.getActiveFightOption()
|
||||||
if (fightOption && fightOption.system.fightoptiontype == "fulldefense") {
|
if (fightOption && fightOption.system.fightoptiontype == "fulldefense") {
|
||||||
@ -127,7 +168,7 @@ export class BoLRoll {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
alchemy = duplicate(alchemy)
|
alchemy = duplicate(alchemy)
|
||||||
let alchemyData = alchemy.data
|
let alchemyData = alchemy.system
|
||||||
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
||||||
ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !")
|
ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !")
|
||||||
return
|
return
|
||||||
@ -488,6 +529,9 @@ export class BoLDefaultRoll {
|
|||||||
this.rollData.isLegendary = false
|
this.rollData.isLegendary = false
|
||||||
this.rollData.isFumble = (diceTotal === 2)
|
this.rollData.isFumble = (diceTotal === 2)
|
||||||
this.rollData.isFailure = !this.rollData.isSuccess
|
this.rollData.isFailure = !this.rollData.isSuccess
|
||||||
|
|
||||||
|
//this.rollData.isRealCritical = true
|
||||||
|
//this.rollData.isFumble = true
|
||||||
|
|
||||||
let actor = game.actors.get( this.rollData.actorId)
|
let actor = game.actors.get( this.rollData.actorId)
|
||||||
if (this.rollData.reroll == undefined) {
|
if (this.rollData.reroll == undefined) {
|
||||||
|
@ -19,7 +19,7 @@ export class BoLItemSheet extends ItemSheet {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** @override */
|
/** @override */
|
||||||
getData(options) {
|
async getData(options) {
|
||||||
const data = super.getData(options)
|
const data = super.getData(options)
|
||||||
let itemData = duplicate(data.document)
|
let itemData = duplicate(data.document)
|
||||||
data.config = game.bol.config
|
data.config = game.bol.config
|
||||||
@ -27,6 +27,7 @@ export class BoLItemSheet extends ItemSheet {
|
|||||||
data.category = itemData.system.category
|
data.category = itemData.system.category
|
||||||
data.isGM = game.user.isGM;
|
data.isGM = game.user.isGM;
|
||||||
data.itemProperties = this.item.itemProperties;
|
data.itemProperties = this.item.itemProperties;
|
||||||
|
data.description = await TextEditor.enrichHTML(this.object.system.description, {async: true})
|
||||||
|
|
||||||
// Dynamic default data fix/adapt
|
// Dynamic default data fix/adapt
|
||||||
if (itemData.type == "item") {
|
if (itemData.type == "item") {
|
||||||
|
@ -15,7 +15,7 @@ export class BoLCombatManager extends Combat {
|
|||||||
|
|
||||||
/************************************************************************************/
|
/************************************************************************************/
|
||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
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
|
// Structure input data
|
||||||
ids = typeof ids === "string" ? [ids] : ids;
|
ids = typeof ids === "string" ? [ids] : ids;
|
||||||
const currentId = this.combatant._id;
|
const currentId = this.combatant._id;
|
||||||
@ -24,6 +24,7 @@ export class BoLCombatManager extends Combat {
|
|||||||
for (let cId = 0; cId < ids.length; cId++) {
|
for (let cId = 0; cId < ids.length; cId++) {
|
||||||
const combatant = this.combatants.get(ids[cId]);
|
const combatant = this.combatants.get(ids[cId]);
|
||||||
let fvttInit = 5
|
let fvttInit = 5
|
||||||
|
//console.log("TYPE", combatant.actor.type)
|
||||||
if (combatant.actor.type == 'character') {
|
if (combatant.actor.type == 'character') {
|
||||||
let initData = combatant.actor.getLastInitData()
|
let initData = combatant.actor.getLastInitData()
|
||||||
console.log("Init data !!!", initData)
|
console.log("Init data !!!", initData)
|
||||||
@ -37,11 +38,12 @@ export class BoLCombatManager extends Combat {
|
|||||||
fvttInit = 3
|
fvttInit = 3
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fvttInit = 4 // Pietaille par defaut
|
fvttInit = 4 // Pietaille par defautco
|
||||||
if ( combatant.actor.getSubtype == 'adversary') {
|
//console.log("ACTOR", combatant.actor.getCharType())
|
||||||
|
if ( combatant.actor.getCharType() == 'adversary') {
|
||||||
fvttInit = 7
|
fvttInit = 7
|
||||||
}
|
}
|
||||||
if ( combatant.actor.getSubtype == 'tough') {
|
if ( combatant.actor.getCharType() == 'tough') {
|
||||||
fvttInit = 6
|
fvttInit = 6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,21 @@ import { BoLRoll } from "../controllers/bol-rolls.js";
|
|||||||
|
|
||||||
export class BoLHotbar {
|
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
|
* Create a macro when dropping an entity on the hotbar
|
||||||
* Item - open roll dialog for item
|
* Item - open roll dialog for item
|
||||||
@ -10,55 +25,20 @@ export class BoLHotbar {
|
|||||||
*/
|
*/
|
||||||
static init( ) {
|
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
|
// Create item macro if rollable item - weapon, spell, prayer, trait, or skill
|
||||||
if (documentData.type == "Item") {
|
if (documentData.type == "Item") {
|
||||||
console.log("Drop done !!!", bar, documentData, slot)
|
let item = fromUuidSync(documentData.uuid)
|
||||||
let item = documentData.data
|
if (item == undefined) {
|
||||||
let command = `game.bol.BoLHotbar.rollMacro("${item.name}", "${item.type}");`
|
item = this.actor.items.get(documentData.uuid)
|
||||||
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 })
|
|
||||||
}
|
}
|
||||||
game.user.assignHotbarMacro(macro, slot);
|
if (item && (item.system.subtype === "weapon" || item.system.category === "spell")) {
|
||||||
}
|
this.assignToHotBar( item, slot )
|
||||||
// Create a macro to open the actor sheet of the actor dropped on the hotbar
|
return false
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Create a macro to open the journal sheet of the journal dropped on the hotbar
|
return true
|
||||||
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;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Roll macro */
|
/** Roll macro */
|
||||||
@ -76,10 +56,10 @@ export class BoLHotbar {
|
|||||||
return ui.notifications.warn(`Impossible de trouver l'objet de cette macro`)
|
return ui.notifications.warn(`Impossible de trouver l'objet de cette macro`)
|
||||||
}
|
}
|
||||||
// Trigger the item roll
|
// 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)
|
return BoLRoll.weaponCheckWithWeapon( actor, item)
|
||||||
}
|
}
|
||||||
if (item.data.data.category === "spell") {
|
if (item.system.category === "spell") {
|
||||||
return BoLRoll.spellCheckWithSpell( actor, item)
|
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",
|
"url": "https://www.uberwald.me/gitea/public/bol",
|
||||||
"license": "LICENSE.txt",
|
"license": "LICENSE.txt",
|
||||||
"version": "10.0.4",
|
"version": "10.2.1",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "10"
|
||||||
"verified": "10.279",
|
|
||||||
"maximum": "10"
|
|
||||||
},
|
},
|
||||||
"esmodules": [
|
"esmodules": [
|
||||||
"module/bol.js"
|
"module/bol.js"
|
||||||
@ -194,7 +192,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.0.4.zip",
|
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.2.1.zip",
|
||||||
"background": "systems/images/map_lemurie.webp",
|
"background": "systems/images/map_lemurie.webp",
|
||||||
"gridDistance": 1.5,
|
"gridDistance": 1.5,
|
||||||
"gridUnits": "m",
|
"gridUnits": "m",
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
<label class="header-field-label flex2">{{localize "BOL.ui.xp"}}</label><br/>
|
<label class="header-field-label flex2">{{localize "BOL.ui.xp"}}</label><br/>
|
||||||
<div class="header-field-group flex3">
|
<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/>
|
<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>
|
||||||
<div class="header-field-group flex3">
|
<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/>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
{{editor details.biography target="system.details.biography" button=true owner=owner
|
{{editor biography target="system.details.biography" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
|
|
||||||
<ol class="items-list">
|
<ol class="items-list">
|
||||||
@ -49,4 +49,4 @@ editable=editable}}
|
|||||||
<div class="item-field flex1 right"></div>
|
<div class="item-field flex1 right"></div>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</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}}
|
{{#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 bol-margin-tb-2 " 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-12" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage12"}}</button>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -24,6 +24,10 @@
|
|||||||
<h3><strong>{{description}}</strong></h3>
|
<h3><strong>{{description}}</strong></h3>
|
||||||
|
|
||||||
<div class="actions-section">
|
<div class="actions-section">
|
||||||
|
{{#if isFumble}}
|
||||||
|
{{localize "BOL.chat.fumblemessage"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if fightOption}}
|
{{#if fightOption}}
|
||||||
<div>
|
<div>
|
||||||
{{localize "BOL.chat.fightoption"}} : {{fightOption.name}}
|
{{localize "BOL.chat.fightoption"}} : {{fightOption.name}}
|
||||||
@ -31,6 +35,13 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<div id="{{optionsId}}">
|
<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)}}
|
{{#if (and isSuccess weapon)}}
|
||||||
{{> "systems/bol/templates/chat/rolls/attack-damage-card.hbs"}}
|
{{> "systems/bol/templates/chat/rolls/attack-damage-card.hbs"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -42,16 +53,18 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if reroll}}
|
{{#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}}
|
||||||
{{#if (and isSuccess (not isCritical))}}
|
{{#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}}
|
||||||
|
|
||||||
{{#if isRealCritical}}
|
{{#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}}
|
{{/if}}
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<div class="flexrow box-roll">
|
<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>
|
<label for="attr">{{localize 'BOL.ui.attribute'}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex1 center cell">
|
<div class="flex1 center cell">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{{#if (count boons)}}
|
{{#if (count boons)}}
|
||||||
<div class="flexrow roll-box" >
|
<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>
|
<label for="mod">{{localize 'BOL.ui.boons'}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex1 center cell">
|
<div class="flex1 center cell">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{{#if careers}}
|
{{#if careers}}
|
||||||
<div class="flexrow roll-box">
|
<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>
|
<label for="mod">{{localize 'BOL.ui.careers'}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex1 center cell">
|
<div class="flex1 center cell">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{{#if (count flaws)}}
|
{{#if (count flaws)}}
|
||||||
<div class="flexrow roll-box">
|
<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>
|
<label for="mod">{{localize 'BOL.ui.flaws'}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex1 center cell">
|
<div class="flex1 center cell">
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{{#if weapon.data.data.properties.onlymodifier}}
|
{{#if weapon.system.properties.onlymodifier}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{> "systems/bol/templates/dialogs/attribute-roll-part.hbs"}}
|
{{> "systems/bol/templates/dialogs/attribute-roll-part.hbs"}}
|
||||||
{{> "systems/bol/templates/dialogs/aptitude-roll-part.hbs"}}
|
{{> "systems/bol/templates/dialogs/aptitude-roll-part.hbs"}}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/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>
|
||||||
<div class="tab properties" data-group="primary" data-tab="properties">
|
<div class="tab properties" data-group="primary" data-tab="properties">
|
||||||
{{#if (eq item.type "item")}}
|
{{#if (eq item.type "item")}}
|
||||||
|
Reference in New Issue
Block a user