Compare commits

...

12 Commits

Author SHA1 Message Date
5c13cde07a rework ID 2022-09-02 16:08:56 +02:00
51c1e205e9 rework ID 2022-09-01 22:40:29 +02:00
90a83f4571 rework ID 2022-09-01 22:23:58 +02:00
3311bc091a rework ID 2022-09-01 21:26:10 +02:00
fa8f9869a6 v10 sync 2022-08-31 23:00:41 +02:00
36b905134e v10 sync 2022-08-31 22:46:19 +02:00
eeb0a906e7 v10 sync 2022-08-31 22:24:56 +02:00
c552411d61 Allow configurable logo 2022-07-17 18:24:29 +02:00
d3ae59f70d Allow configurable logo 2022-07-17 18:20:05 +02:00
cf7d76fdba Fix d6BB combat roll 2022-07-16 11:06:34 +02:00
89ec404ca8 v10 branch - Update manifest 2022-07-16 11:05:15 +02:00
8f60aa95ee Fix d6BB combat roll 2022-07-16 11:03:33 +02:00
14 changed files with 171 additions and 93 deletions

View File

@ -769,7 +769,7 @@ body.system-bol img#logo {
min-height: 700px;
height: 700px;
}
.bol.sheet.actor .window-content form {
.bol.sheet.actor .window-content .bol-actor-form {
background-image: url("/systems/bol/ui/logo.webp");
background-repeat: no-repeat;
background-size: 190px 115px;
@ -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;
}

4
images/.directory Normal file
View File

@ -0,0 +1,4 @@
[Dolphin]
Timestamp=2022,7,17,14,58,4.757
Version=4
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails

View File

@ -391,6 +391,7 @@
"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.dialog.soeasy": "Inmanquable (+4)",
"BOL.dialog.veryeasy": "Trés Facile (+2)",

View File

@ -25,6 +25,13 @@ export class BoLActorSheet extends ActorSheet {
activateListeners(html) {
super.activateListeners(html);
function onLoad() {
let logoSheet = BoLUtility.getLogoActorSheet()
$(".bol-actor-form").css("backgroundImage",`url(${logoSheet})`)
}
// Setup everything onload
$(function () { onLoad(); });
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
@ -118,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
@ -132,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

View File

@ -26,7 +26,7 @@ export class BoLActor extends Actor {
if (this.type === 'character') {
return 'player'
}
return 'tough'
return this.system.chartype
}
/* -------------------------------------------- */
getVillainy() {
@ -347,7 +347,7 @@ export class BoLActor extends Actor {
spendPowerPoint(ppCost) {
let newPP = this.system.resources.power.value - ppCost
newPP = (newPP < 0) ? 0 : newPP
this.update({ 'data.resources.power.value': newPP })
this.update({ 'system.resources.power.value': newPP })
return newPP
}
@ -355,7 +355,7 @@ export class BoLActor extends Actor {
resetAlchemyStatus(alchemyId) {
let alchemy = this.items.get(alchemyId)
if (alchemy) {
this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': 0 }])
this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'system.properties.pccurrent': 0 }])
}
}
@ -369,7 +369,7 @@ export class BoLActor extends Actor {
newPC = (newPC < 0) ? 0 : newPC
this.update({ 'data.resources.alchemypoints.value': newPC })
newPC = alchemy.system.properties.pccurrent + pcCost
await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': newPC }])
await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'system.properties.pccurrent': newPC }])
} else {
ui.notifications.warn("Plus assez de Points de Création !")
}
@ -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() {

View File

@ -90,6 +90,9 @@ function registerUsageCount( registerKey ) {
}
// Simple API counter
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
//$.ajaxSetup({
//headers: { 'Access-Control-Allow-Origin': '*' }
//})
$.ajax(regURL)
}
}
@ -110,8 +113,10 @@ function welcomeMessage() {
/* -------------------------------------------- */
Hooks.once('ready', async function () {
BoLUtility.ready()
registerUsageCount('bol')
welcomeMessage()
})

View File

@ -127,7 +127,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 +488,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) {
@ -564,6 +567,7 @@ export class BoLDefaultRoll {
speaker: ChatMessage.getSpeaker({ actor: actor }),
flags: { msgType: "default" }
})
this.rollData.actor = undefined // Cleanup
msg.setFlag("world", "bol-roll-data", this.rollData)
})
}

View File

@ -18,7 +18,7 @@ export class BoLUtility {
default: true,
type: Boolean,
onChange: lang => window.location.reload()
});
})
game.settings.register("bol", "useBougette", {
name: "Utiliser la Bougette (règle fan-made)",
hint: "Utilise un indicateur de Bougette, comme décrit dans l'aide de jeu Gold&Glory du RatierBretonnien (https://www.lahiette.com/leratierbretonnien/)",
@ -27,14 +27,32 @@ export class BoLUtility {
default: false,
type: Boolean,
onChange: lang => window.location.reload()
});
})
game.settings.register("bol", "logoActorSheet", {
name: "Chemin du logo des fiches de perso",
hint: "Vous pouvez changer le logo BoL des fiches de perso, pour jouer dans un autre univers (idéalement 346 x 200, défaut : /systems/bol/ui/logo.webp)",
scope: "world",
config: true,
default: "/systems/bol/ui/logo.webp",
type: String,
onChange: lang => window.location.reload()
})
game.settings.register("bol", "logoTopLeft", {
name: "Chemin du logo haut gauche",
hint: "Vous pouvez changer le logo BoL en haut à gauche de chaque écran (idéalement 718 x 416, défaut : /systems/bol/ui/logo2.webp)",
scope: "world",
config: true,
default: "/systems/bol/ui/logo2.webp",
type: String,
onChange: lang => window.location.reload()
})
this.rollArmor = game.settings.get("bol", "rollArmor") // Roll armor or not
this.useBougette = game.settings.get("bol", "useBougette") // Use optionnal bougette rules
this.actorSheetLogo = game.settings.get("bol", "logoActorSheet") || "/systems/bol/ui/logo.webp"
this.logoTopLeft = game.settings.get("bol", "logoTopLeft") || "/systems/bol/ui/logo2.webp"
}
/* -------------------------------------------- */
static getRollArmor() {
return this.rollArmor
@ -43,9 +61,19 @@ export class BoLUtility {
static getUseBougette() {
return this.useBougette
}
/* -------------------------------------------- */
static getLogoActorSheet() {
return this.actorSheetLogo
}
/* -------------------------------------------- */
static getLogoTopLeft() {
return this.logoTopLeft
}
/* -------------------------------------------- */
static async ready() {
//$("#logo").attr("src", this.getLogoTopLeft() )
$("#logo").css("content",`url(${this.getLogoTopLeft()})`)
}
/* -------------------------------------------- */
@ -131,7 +159,7 @@ export class BoLUtility {
let users = []
for (let user of game.users) {
if (!user.isGM && user.name != name) {
users.push(user.data._id)
users.push(user.id)
}
}
return users
@ -484,11 +512,21 @@ export class BoLUtility {
nbDice++
modIndex = 4
}
if (res[3] == 'MM') {
postForm = 'kl' + nbDice
nbDice += 2
modIndex = 4
}
if (res[3] == 'B') {
postForm = 'kh' + nbDice
nbDice++
modIndex = 4
}
if (res[3] == 'BB') {
postForm = 'kh' + nbDice
nbDice += 2
modIndex = 4
}
}
formula = "(" + nbDice + "d" + res[2] + reroll + postForm + "+" + modifier + ") *" + multiplier
}

File diff suppressed because one or more lines are too long

View File

@ -2,23 +2,24 @@
"id": "bol",
"title": "Barbarians of Lemuria",
"description": "The Barbarians of Lemuria system for FoundryVTT!",
"author": "LeRatierBretonnien,Zigmund",
"authors": [
{
"name": "LeRatierBretonnien"
"name": "LeRatierBretonnien",
"flags": {}
},
{
"name": "Zigmund"
"name": "Zigmund",
"flags": {}
}
],
"url": "https://www.uberwald.me/gitea/public/bol",
"license": "LICENSE.txt",
"flags": {},
"version": "10.0.1",
"version": "10.0.7",
"compatibility": {
"minimum": 10
"minimum": "10",
"verified": "10.284",
"maximum": "10"
},
"scripts": [],
"esmodules": [
"module/bol.js"
],
@ -29,17 +30,20 @@
{
"lang": "en",
"name": "English",
"path": "lang/en.json"
"path": "lang/en.json",
"flags": {}
},
{
"lang": "fr",
"name": "Français",
"path": "lang/fr.json"
"path": "lang/fr.json",
"flags": {}
},
{
"lang": "de",
"name": "Deutsch",
"path": "lang/de.json"
"path": "lang/de.json",
"flags": {}
}
],
"packs": [
@ -47,64 +51,64 @@
"name": "boons",
"label": "Avantages",
"system": "bol",
"path": "./packs/boons.db",
"tag": "boon",
"path": "packs/boons.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"name": "boonsflawscreatures",
"label": "Avantages/Désavantages de Créatures",
"system": "bol",
"path": "./packs/boonsflawscreatures.db",
"tag": "boon",
"path": "packs/boonsflawscreatures.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"name": "flaws",
"label": "Désavantages",
"system": "bol",
"path": "./packs/flaws.db",
"tag": "flaw",
"path": "packs/flaws.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"name": "careers",
"label": "Carrières héroïques",
"system": "bol",
"path": "./packs/careers.db",
"tag": "career",
"path": "packs/careers.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"name": "origins",
"label": "Origines",
"system": "bol",
"path": "./packs/origins.db",
"tag": "origin",
"path": "packs/origins.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"name": "races",
"label": "Races",
"system": "bol",
"path": "./packs/races.db",
"tag": "race",
"path": "packs/races.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"name": "equipment",
"label": "Equipement",
"system": "bol",
"path": "./packs/equipment.db",
"tag": "item",
"path": "packs/equipment.db",
"type": "Item",
"private": false
"private": false,
"flags": {}
},
{
"label": "Aides de Jeu",
@ -112,7 +116,8 @@
"name": "aides-de-jeu",
"path": "packs/aides-de-jeu.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Cartes",
@ -120,7 +125,8 @@
"name": "cartes",
"path": "packs/cartes.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Langues",
@ -128,7 +134,8 @@
"name": "languages",
"path": "packs/languages.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Sorts",
@ -136,7 +143,8 @@
"name": "spells",
"path": "packs/spells.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Dieux",
@ -144,7 +152,8 @@
"name": "godsfaith",
"path": "packs/godsfaith.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Options de Combat",
@ -152,7 +161,8 @@
"name": "fightoptions",
"path": "packs/fightoptions.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Alchimie - Potions",
@ -160,7 +170,8 @@
"name": "potions-alchimie",
"path": "packs/potions-alchimie.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Alchimie - Objets",
@ -168,7 +179,8 @@
"name": "objets-alchimie",
"path": "packs/objets-alchimie.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
},
{
"label": "Créatures",
@ -176,17 +188,16 @@
"name": "creatures",
"path": "packs/creatures.db",
"system": "bol",
"private": false
"private": false,
"flags": {}
}
],
"relationships": { },
"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.1.zip",
"protected": false,
"background": "images/map_lemurie.webp",
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.0.7.zip",
"background": "systems/images/map_lemurie.webp",
"gridDistance": 1.5,
"gridUnits": "m",
"primaryTokenAttribute": "resources.hp",
"secondaryTokenAttribute": "resources.hero"
}
}

View File

@ -1,8 +1,10 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
<form class="{{cssClass}} flexcol bol-actor-form" autocomplete="off">
<!--<img class="system-img" src="/systems/bol/ui/logo.webp" height="115" width="190"/> -->
<div class="wrap flexrow">
{{!-- Sidebar --}}
<div class="sidebar flex0">
<div class="sidebar flex0 bol-actor-sidebar">
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"
style="border:1px outset lightgray; box-shadow: 5px 5px 5px gray" />
</div>

View File

@ -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;">&nbsp;{{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>

View File

@ -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}}

View File

@ -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>