Astrologie !

This commit is contained in:
LeRatierBretonnien 2022-12-25 18:00:42 +01:00
parent bcb377db7a
commit 1bbefd3499
18 changed files with 336 additions and 68 deletions

View File

@ -163,6 +163,10 @@
"BOL.ui.minor": "Mineur", "BOL.ui.minor": "Mineur",
"BOL.ui.major": "Majeur", "BOL.ui.major": "Majeur",
"BOL.ui.majorgroup": "Majeur de Groupe", "BOL.ui.majorgroup": "Majeur de Groupe",
"BOL.ui.horoscopeGroup": "Horoscopes de Groupe",
"BOL.ui.horoscopeDiceRemaining": "Dés restants",
"BOL.ui.horoscopeDiceMax": "Dés Max",
"BOL.ui.astrologyNoPoints": "Vous n'avez pas assez de Points d'Astrologie!",
"BOL.ui.advance": "Avancement", "BOL.ui.advance": "Avancement",
"BOL.ui.isbonusdice": "Fourni un dé bonus?", "BOL.ui.isbonusdice": "Fourni un dé bonus?",

View File

@ -160,6 +160,7 @@ export class BoLActorSheet extends ActorSheet {
formData.isAstrologer = this.actor.isAstrologer() formData.isAstrologer = this.actor.isAstrologer()
formData.isMysteries = formData.isSorcerer || formData.isAlchemist || formData.isAstrologer formData.isMysteries = formData.isSorcerer || formData.isAlchemist || formData.isAstrologer
formData.isPriest = this.actor.isPriest() formData.isPriest = this.actor.isPriest()
formData.horoscopeGroupList = game.settings.get("bol", "horoscope-group")
formData.isGM = game.user.isGM formData.isGM = game.user.isGM

View File

@ -481,15 +481,21 @@ export class BoLActor extends Actor {
let rID = randomID(16) let rID = randomID(16)
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group")) let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
horoscopes[rID] = { horoscopes[rID] = {
id: rID,
name: game.i18n.localize("BOL.ui.groupHoroscope") + this.name, name: game.i18n.localize("BOL.ui.groupHoroscope") + this.name,
maxDice: rollData.careerBonus, maxDice: rollData.careerBonus,
availableDice: rollData.careerBonus, availableDice: rollData.careerBonus,
type: (rollData.isSuccess) ? "bonus": "malus" type: (rollData.isSuccess) ? "bonus": "malus"
} }
game.settings.set("bol", "horoscope-group", horoscopes)
} }
} }
/*-------------------------------------------- */
getAstrologyPoints() {
return this.system.resources.astrologypoints.value
}
/*-------------------------------------------- */ /*-------------------------------------------- */
removeHoroscopeMinor( rollData) { removeHoroscopeMinor( rollData) {
let toDel = [] let toDel = []
@ -619,11 +625,6 @@ export class BoLActor extends Actor {
"label": "BOL.featureSubtypes.effects", "label": "BOL.featureSubtypes.effects",
"ranked": false, "ranked": false,
"items": this.boleffects "items": this.boleffects
},
"horoscopes": {
"label": "BOL.featureSubtypes.horoscope",
"ranked": false,
"items": this.horoscopes
} }
} }
} }

View File

@ -30,6 +30,19 @@ export class BoLRoll {
return appEffects return appEffects
} }
/* -------------------------------------------- */
static buildHoroscopeGroupList() {
let horoscopes = game.settings.get("bol", "horoscope-group")
let horoList = [ { id: -1, name: "Aucun", type: "malus", nbDice: 0 }]
for (let id in horoscopes) {
let horo = horoscopes[id]
for (let i=0; i<horo.availableDice; i++) {
horoList.push( { id: id, name: horo.name, type: horo.type, nbDice: i+1})
}
}
return horoList
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static getCommonRollData(actor, mode, attribute, aptitude = undefined) { static getCommonRollData(actor, mode, attribute, aptitude = undefined) {
@ -53,7 +66,8 @@ export class BoLRoll {
mod: 0, mod: 0,
modRanged: 0, modRanged: 0,
aptValue: 0, aptValue: 0,
bolEffects: actor.boleffects bolEffects: actor.boleffects,
horoscopeGroupList: this.buildHoroscopeGroupList()
} }
if (aptitude) { if (aptitude) {
rollData.aptitude = aptitude rollData.aptitude = aptitude
@ -94,7 +108,7 @@ export class BoLRoll {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async detectDistance(weapon, target) { static async detectDistance(weapon, target) {
let visible, dist let visible, dist
if (weapon.system.properties.ranged || weapon.system.properties.throwing) { if (target && (weapon.system.properties.ranged || weapon.system.properties.throwing)) {
console.log("target", target, weapon) console.log("target", target, weapon)
visible = canvas.effects.visibility.testVisibility(target.center, { object: _token }) 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) dist = Number(canvas.grid.measureDistances([{ ray: new Ray(_token.center, target.center) }], { gridSpaces: false })).toFixed(2)
@ -205,12 +219,17 @@ export class BoLRoll {
/* -------------------------------------------- */ /* -------------------------------------------- */
static horoscopeCheck(actor, event, horoscopeType) { static horoscopeCheck(actor, event, horoscopeType) {
let cost = (horoscopeType == "minor") ? 1 : 2
if (cost > actor.getAstrologyPoints() ) {
ui.notifications.warn(game.i18n.localize("BOL.ui.astrologyNoPoints"))
return
}
let rollData = this.getCommonRollData(actor, "horoscope", actor.system.attributes.mind) let rollData = this.getCommonRollData(actor, "horoscope", actor.system.attributes.mind)
rollData.careerBonus = actor.getAstrologerBonus() rollData.careerBonus = actor.getAstrologerBonus()
rollData.horoscopeType = horoscopeType rollData.horoscopeType = horoscopeType
rollData.horoscopeTypeLabel = "BOL.ui."+horoscopeType rollData.horoscopeTypeLabel = "BOL.ui."+horoscopeType
rollData.astrologyPointsCost = (horoscopeType == "minor") ? 1 : 2 rollData.astrologyPointsCost = cost
rollData.label = game.i18n.localize('BOL.ui.makeHoroscope') rollData.label = game.i18n.localize('BOL.ui.makeHoroscope')
rollData.description = game.i18n.localize('BOL.ui.makeHoroscope') + " " + game.i18n.localize(rollData.horoscopeTypeLabel) rollData.description = game.i18n.localize('BOL.ui.makeHoroscope') + " " + game.i18n.localize(rollData.horoscopeTypeLabel)
@ -276,7 +295,10 @@ export class BoLRoll {
} }
this.rollData.bmDice += this.rollData.horoscopeBonus this.rollData.bmDice += this.rollData.horoscopeBonus
this.rollData.bmDice -= this.rollData.horoscopeMalus this.rollData.bmDice -= this.rollData.horoscopeMalus
if ( this.rollData.selectedGroupHoroscopeIndex && this.rollData.selectedGroupHoroscopeIndex > 0) {
let horo = this.rollData.horoscopeGroupList[this.rollData.selectedGroupHoroscopeIndex]
this.rollData.bmDice += (horo.type == "malus") ? -horo.nbDice : horo.nbDice;
}
// Keep track of the final effect modifier // Keep track of the final effect modifier
this.rollData.effectModifier = effectModifier this.rollData.effectModifier = effectModifier
@ -425,21 +447,29 @@ export class BoLRoll {
this.updateTotalDice() this.updateTotalDice()
}) })
html.find('#horoscope-bonus-applied').change((event) => { html.find('#horoscope-bonus-applied').change((event) => {
if (event.currentTarget.value != undefined) { this.rollData.selectedHoroscope = []
this.rollData.selectedHoroscope.push( duplicate(this.rollData.horoscopeBonusList[Number(event.currentTarget.value)]) ) for (let option of event.currentTarget.selectedOptions) {
this.rollData.selectedHoroscope.push( duplicate(this.rollData.horoscopeBonusList[Number(option.index)]) )
} }
let horoscopes = $('#horoscope-bonus-applied').val() let horoscopes = $('#horoscope-bonus-applied').val()
this.rollData.horoscopeBonus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length this.rollData.horoscopeBonus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length
this.updateTotalDice() this.updateTotalDice()
}) })
html.find('#horoscope-malus-applied').change((event) => { html.find('#horoscope-malus-applied').change((event) => {
if (event.currentTarget.value != undefined) { this.rollData.selectedHoroscope = []
this.rollData.selectedHoroscope.push( duplicate(this.rollData.horoscopeMalusList[Number(event.currentTarget.value)]) ) for (let option of event.currentTarget.selectedOptions) {
this.rollData.selectedHoroscope.push( duplicate(this.rollData.horoscopeBonusList[Number(option.index)]) )
} }
let horoscopes = $('#horoscope-malus-applied').val() let horoscopes = $('#horoscope-malus-applied').val()
this.rollData.horoscopeMalus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length this.rollData.horoscopeMalus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length
this.updateTotalDice() this.updateTotalDice()
}) })
html.find('#horoscope-group-applied').change((event) => {
this.rollData.selectedGroupHoroscopeIndex = event.currentTarget.value
this.updateTotalDice()
})
} }
@ -608,7 +638,6 @@ export class BoLDefaultRoll {
if (this.rollData.reroll == undefined) { if (this.rollData.reroll == undefined) {
this.rollData.reroll = actor.heroReroll() this.rollData.reroll = actor.heroReroll()
} }
if (this.rollData.registerInit) { if (this.rollData.registerInit) {
actor.registerInit(this.rollData) actor.registerInit(this.rollData)
this.rollData.initiativeRank = actor.getInitiativeRank(this.rollData) this.rollData.initiativeRank = actor.getInitiativeRank(this.rollData)
@ -616,20 +645,25 @@ export class BoLDefaultRoll {
if (this.rollData.isSuccess && this.rollData.mode == "spell") { // PP cost management if (this.rollData.isSuccess && this.rollData.mode == "spell") { // PP cost management
this.rollData.remainingPP = actor.spendPowerPoint(this.rollData.ppCost + this.rollData.ppCostArmor) this.rollData.remainingPP = actor.spendPowerPoint(this.rollData.ppCost + this.rollData.ppCostArmor)
} }
if (this.rollData.mode == "alchemy") { // PP cost management if (this.rollData.mode == "alchemy") { // PP cost management
actor.resetAlchemyStatus(this.rollData.alchemy._id) actor.resetAlchemyStatus(this.rollData.alchemy._id)
} }
if (this.rollData.mode == "bougette" && this.rollData.isFailure) { if (this.rollData.mode == "bougette" && this.rollData.isFailure) {
actor.decBougette() actor.decBougette()
} }
await this.sendChatMessage()
if (this.rollData.mode == "horoscope") { // PP cost management if (this.rollData.mode == "horoscope") { // PP cost management
actor.manageHoroscope(this.rollData) actor.manageHoroscope(this.rollData)
} }
if (this.rollData.selectedHoroscope.length > 0) { // PP cost management if (this.rollData.selectedHoroscope.length > 0) { // PP cost management
actor.removeHoroscopeMinor(this.rollData) actor.removeHoroscopeMinor(this.rollData)
} }
if (this.rollData.selectedGroupHoroscopeIndex && this.rollData.selectedGroupHoroscopeIndex > 0) { // PP cost management
await this.sendChatMessage() BoLUtility.removeGroupHoroscope(this.rollData)
}
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -9,6 +9,12 @@ export class BoLCharacterSummary extends Application {
static displayPCSummary(){ static displayPCSummary(){
game.bol.charSummary.render(true) game.bol.charSummary.render(true)
} }
/* -------------------------------------------- */
updatePCSummary(){
if ( this.rendered) {
this.render(true)
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static createSummaryPos() { static createSummaryPos() {
@ -60,6 +66,7 @@ export class BoLCharacterSummary extends Application {
} }
} }
formData.config = game.bol.config formData.config = game.bol.config
formData.horoscopeGroupList = game.settings.get("bol", "horoscope-group")
if ( toUpdate ) { if ( toUpdate ) {
this.settings.npcList = newList this.settings.npcList = newList
@ -123,6 +130,33 @@ export class BoLCharacterSummary extends Application {
game.bol.charSummary.updateNPC() game.bol.charSummary.updateNPC()
}) })
} html.find('#horoscope-group-edit-available').change(event => {
const horoId = $(event.currentTarget).data("horo-id")
let newValue = event.currentTarget.value
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
if ( horoId && horoscopes[horoId]) {
horoscopes[horoId].availableDice = Number(newValue)
if (newValue <= 0) {
horoscopes[horoId] = undefined
}
game.settings.set("bol", "horoscope-group", horoscopes)
setTimeout(function() { BoLUtility.updateSheets()}, 800 )
}
})
html.find('#horoscope-group-edit-max').change(event => {
const horoId = $(event.currentTarget).data("horo-id")
let newValue = event.currentTarget.value
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
if ( horoId && horoscopes[horoId]) {
horoscopes[horoId].maxDice = Number(newValue)
if (newValue <= 0) {
horoscopes[horoId] = undefined
}
game.settings.set("bol", "horoscope-group", horoscopes)
setTimeout(function() { BoLUtility.updateSheets()}, 800 )
}
})
}
} }

View File

@ -32,7 +32,7 @@ export class BoLUtility {
name: "character-summary-data", name: "character-summary-data",
scope: "world", scope: "world",
config: false, config: false,
default: { npcList : [], x: 200, y: 200}, default: { npcList: [], x: 200, y: 200 },
type: Object type: Object
}) })
game.settings.register("bol", "logoActorSheet", { game.settings.register("bol", "logoActorSheet", {
@ -84,8 +84,8 @@ export class BoLUtility {
return this.logoTopLeft return this.logoTopLeft
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static getActorFromRollData(rollData) { static getActorFromRollData(rollData) {
let actor = game.actors.get( rollData.actorId) let actor = game.actors.get(rollData.actorId)
if (rollData.tokenId) { if (rollData.tokenId) {
let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId) let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId)
if (token) { if (token) {
@ -185,7 +185,7 @@ export class BoLUtility {
static getOtherWhisperRecipients(name) { static getOtherWhisperRecipients(name) {
let users = [] let users = []
for (let user of game.users) { for (let user of game.users) {
if ( !user.isGM && user.name != name) { if (!user.isGM && user.name != name) {
users.push(user.id) users.push(user.id)
} }
} }
@ -585,5 +585,29 @@ export class BoLUtility {
return item return item
} }
/* -------------------------------------------- */
static updateSheets() {
// Then force opened actor refresh if needed
for (let actor of game.actors) {
if (actor.sheet.rendered) {
actor.sheet.render()
}
}
game.bol.charSummary.updatePCSummary() // Refresh if needed
}
/* -------------------------------------------- */
static removeGroupHoroscope(rollData) {
let horo = rollData.horoscopeGroupList[rollData.selectedGroupHoroscopeIndex]
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
let toChange = duplicate(horoscopes[horo.id])
toChange.availableDice -= horo.nbDice // Remove the dice
if (toChange.availableDice <= 0) {
horoscopes[horo.id] = undefined
} else {
horoscopes[horo.id] = toChange
}
game.settings.set("bol", "horoscope-group", horoscopes)
this.updateSheets()
}
} }

View File

@ -76,6 +76,10 @@ export const registerHandlebarsHelpers = function () {
Handlebars.registerHelper('count', function (list) { Handlebars.registerHelper('count', function (list) {
return list.length; return list.length;
}) })
Handlebars.registerHelper('countKeys', function (obj) {
return Object.keys(obj).length;
})
Handlebars.registerHelper('isEnabled', function (configKey) { Handlebars.registerHelper('isEnabled', function (configKey) {
return game.settings.get("bol", configKey); return game.settings.get("bol", configKey);
}) })
@ -129,7 +133,14 @@ export const registerHandlebarsHelpers = function () {
} }
return false return false
}) })
Handlebars.registerHelper('upperFirst', function (text) {
if (typeof text !== 'string') return text
return text.charAt(0).toUpperCase() + text.slice(1)
})
Handlebars.registerHelper('upperFirstOnly', function (text) {
if (typeof text !== 'string') return text
return text.charAt(0).toUpperCase()
})
} }

View File

@ -16,6 +16,7 @@ export const preloadHandlebarsTemplates = async function () {
"systems/bol/templates/actor/parts/tabs/actor-equipment.hbs", "systems/bol/templates/actor/parts/tabs/actor-equipment.hbs",
"systems/bol/templates/actor/parts/tabs/actor-spellalchemy.hbs", "systems/bol/templates/actor/parts/tabs/actor-spellalchemy.hbs",
"systems/bol/templates/actor/parts/tabs/actor-biodata.hbs", "systems/bol/templates/actor/parts/tabs/actor-biodata.hbs",
"systems/bol/templates/actor/parts/tabs/actor-horoscope-group.hbs",
"systems/bol/templates/actor/parts/tabs/creature-stats.hbs", "systems/bol/templates/actor/parts/tabs/creature-stats.hbs",
"systems/bol/templates/actor/parts/tabs/creature-actions.hbs", "systems/bol/templates/actor/parts/tabs/creature-actions.hbs",
"systems/bol/templates/actor/parts/tabs/vehicle-stats.hbs", "systems/bol/templates/actor/parts/tabs/vehicle-stats.hbs",

View File

@ -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.4.15", "version": "10.5.0",
"compatibility": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "10", "verified": "10",
@ -203,7 +203,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.4.15.zip", "download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.5.0.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",

View File

@ -1,52 +1,124 @@
<ol class="items-list"> <ol class='items-list'>
{{#if (ne charType "creature")}} {{#if (ne charType 'creature')}}
<li class="item flexrow item-header"> <li class='item flexrow item-header'>
<div class="item-name left">{{localize "BOL.ui.biosize"}}</div> <div class='item-name left'>
<div class="item-field flex2 left"><input type="text" name="system.details.height" value="{{details.height}}"></div> {{localize 'BOL.ui.biosize'}}
<div class="item-name right">{{localize "BOL.ui.bioweight"}}</div> </div>
<div class="item-field flex2 "><input type="text" name="system.details.weight" value="{{details.weight}}"></div> <div class='item-field flex2 left'>
<div class="item-name right">{{localize "BOL.ui.bioage"}} </div> <input
<div class="item-field flex2 "><input type="text" name="system.details.age" value="{{details.age}}"></div> type='text'
name='system.details.height'
value="{{details.height}}"
/>
</div>
<div class='item-name right'>
{{localize 'BOL.ui.bioweight'}}
</div>
<div class='item-field flex2'>
<input
type='text'
name='system.details.weight'
value="{{details.weight}}"
/>
</div>
<div class='item-name right'>
{{localize 'BOL.ui.bioage'}}
</div>
<div class='item-field flex2'>
<input type='text' name='system.details.age' value="{{details.age}}" />
</div>
</li> </li>
<li class="item flexrow item-header"> <li class='item flexrow item-header'>
<div class="item-name left">{{localize "BOL.ui.biohair"}} </div> <div class='item-name left'>
<div class="item-field flex2 left"><input type="text" name="system.details.hait" value="{{details.hait}}"></div> {{localize 'BOL.ui.biohair'}}
<div class="item-name right">{{localize "BOL.ui.bioeyes"}} </div> </div>
<div class="item-field flex2 "><input type="text" name="system.details.eyes" value="{{details.eyes}}"></div> <div class='item-field flex2 left'>
<input
type='text'
name='system.details.hait'
value="{{details.hait}}"
/>
</div>
<div class='item-name right'>
{{localize 'BOL.ui.bioeyes'}}
</div>
<div class='item-field flex2'>
<input
type='text'
name='system.details.eyes'
value="{{details.eyes}}"
/>
</div>
</li> </li>
<li class="item flexrow item-header"> <li class='item flexrow item-header'>
<div class="item-name left">{{localize "BOL.ui.biosigns"}} </div> <div class='item-name left'>
<div class="item-field flex2 left"><input type="text" name="system.details.signs" value="{{details.signs}}"></div> {{localize 'BOL.ui.biosigns'}}
</div>
<div class='item-field flex2 left'>
<input
type='text'
name='system.details.signs'
value="{{details.signs}}"
/>
</div>
</li> </li>
{{else}} {{else}}
<li class="item flexrow item-header"> <li class='item flexrow item-header'>
<div class="item-name left">Taille </div> <div class='item-name left'>
<div class="form-fields center"> Taille
<select class="field-value size" name="system.details.size" data-dtype="String"> </div>
{{#select details.size}} <div class='form-fields center'>
{{#each config.creatureSize as |value id|}} <select
<option value="{{id}}">{{localize value}}</option> class='field-value size'
{{/each}} name='system.details.size'
{{/select}} data-dtype='String'
>
{{#select details.size}}
{{#each config.creatureSize as |value id|}}
<option value="{{id}}">
{{localize value}}
</option>
{{/each}}
{{/select}}
</select> </select>
</div> </div>
</li> </li>
{{/if}} {{/if}}
</ol> </ol>
<ol class="items-list">
<li class="item flexrow item-header"> {{#if (and (not isAstrologer) (countKeys horoscopeGroupList))}}
<div class="item-name flex4 left">{{localize "BOL.ui.biodescription"}}</div> {{> "systems/bol/templates/actor/parts/tabs/actor-horoscope-group.hbs"}}
<div class="item-field flex1 right"></div> {{/if}}
<ol class='items-list'>
<li class='item flexrow item-header'>
<div class='item-name flex4 left'>
{{localize 'BOL.ui.biodescription'}}
</div>
<div class='item-field flex1 right'></div>
</li> </li>
</ol> </ol>
{{editor biography target="system.details.biography" button=true owner=owner {{editor
editable=editable}} biography
target='system.details.biography'
button=true
owner=owner
editable=editable
}}
<ol class="items-list"> <ol class='items-list'>
<li class="item flexrow item-header"> <li class='item flexrow item-header'>
<div class="item-name flex4 left">{{localize "BOL.ui.bionotes"}}</div> <div class='item-name flex4 left'>
<div class="item-field flex1 right"></div> {{localize 'BOL.ui.bionotes'}}
</div>
<div class='item-field flex1 right'></div>
</li> </li>
</ol> </ol>
{{editor notes target="system.details.notes" button=true owner=owner editable=editable}} {{editor
notes
target='system.details.notes'
button=true
owner=owner
editable=editable
}}

View File

@ -0,0 +1,26 @@
<ol class="items-list">
<li class="item flexrow item-header">
<div class="item-name flex4 left">{{localize "BOL.ui.horoscopeGroup"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.type"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.horoscopeDiceRemaining"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.horoscopeDiceMax"}}</div>
<div class="item-field flex1 right"></div>
</li>
{{#each horoscopeGroupList as |horo id|}}
<li class="item flexrow" data-item-id="{{horo.id}}">
<h4 class="item-name flex4 left">
<div class="item-image"><img src="icons/magic/perception/eye-ringed-glow-angry-large-red.webp" /></div>{{horo.name}}
</h4>
<div class="item-field flex2 center">
<span class="item-field">{{upperFirst horo.type}}</span>
</div>
<div class="item-field flex2 center">
<span class="item-field">{{horo.availableDice}}</span>
</div>
<div class="item-field flex2 center">
<span class="item-field">{{horo.maxDice}}</span>
</div>
<div class="item-field flex1 right"></div>
</li>
{{/each}}
</ol>

View File

@ -105,7 +105,7 @@
<div class="item-field flex2 center">{{localize "BOL.ui.answer"}}</div> <div class="item-field flex2 center">{{localize "BOL.ui.answer"}}</div>
<div class="item-field flex1 right"></div> <div class="item-field flex1 right"></div>
</li> </li>
{{#each horoscopes as |item id|}} {{#each horoscopes as |item id|}}
<li class="item flexrow" data-item-id="{{item._id}}"> <li class="item flexrow" data-item-id="{{item._id}}">
<h4 class="item-name flex4 left"> <h4 class="item-name flex4 left">
<div class="item-image"><img src="{{item.img}}" title="{{item.name}}"/></div>{{item.name}} <div class="item-image"><img src="{{item.img}}" title="{{item.name}}"/></div>{{item.name}}
@ -128,4 +128,7 @@
</li> </li>
{{/each}} {{/each}}
</ol> </ol>
{{> "systems/bol/templates/actor/parts/tabs/actor-horoscope-group.hbs"}}
{{/if}} {{/if}}

View File

@ -80,6 +80,33 @@
</li> </li>
{{/each}} {{/each}}
{{#if (countKeys horoscopeGroupList)}}
<li class="item flexrow item-header">
<div class="item-name flex4 left">{{localize "BOL.ui.horoscopeGroup"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.type"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.horoscopeDiceRemaining"}}</div>
<div class="item-field flex2 center">{{localize "BOL.ui.horoscopeDiceMax"}}</div>
<div class="item-field flex1 right"></div>
</li>
{{#each horoscopeGroupList as |horo id|}}
<li class="item flexrow" data-item-id="{{horo.id}}">
<h4 class="item-name flex4 left">
<div class="item-image"><img src="icons/magic/perception/eye-ringed-glow-angry-large-red.webp" /></div>{{horo.name}}
</h4>
<div class="item-field flex2 center">
<span class="item-field">{{upperFirst horo.type}}</span>
</div>
<div class="item-field flex2 center">
<input class="field-value" type="text" id="horoscope-group-edit-available" value="{{horo.availableDice}}" data-horo-id="{{id}}" data-type="Number">
</div>
<div class="item-field flex2 center">
<input class="field-value" type="text" id="horoscope-group-edit-max" value="{{horo.maxDice}}" data-horo-id="{{id}}" data-type="Number">
</div>
<div class="item-field flex1 right"></div>
</li>
{{/each}}
{{/if}}
</ol> </ol>
</form> </form>

View File

@ -37,6 +37,8 @@
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/horoscope-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}

View File

@ -16,10 +16,10 @@
{{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/horoscope-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/horoscope-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}

View File

@ -47,3 +47,27 @@
</div> </div>
</div> </div>
{{/if}} {{/if}}
{{#if (countKeys horoscopeGroupList)}}
<div class='flexrow roll-box'>
<div class='flex1 center bg-darkred'>
<label for='mod'>
{{localize 'BOL.ui.horoscopeGroup'}}
</label>
</div>
<div class='flex1 center cell'>
<select
class='flex1'
name='horoscope-group-applied'
id='horoscope-group-applied'
data-type='String'
>
{{#each horoscopeGroupList as |horoscope index|}}
<option value="{{index}}">
{{horoscope.nbDice}}d{{upperFirstOnly horoscope.type}} - {{horoscope.name}}
</option>
{{/each}}
</select>
</div>
</div>
{{/if}}

View File

@ -65,6 +65,8 @@
{{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/horoscope-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}

View File

@ -58,6 +58,8 @@
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/horoscope-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}