forked from public/bol
Compare commits
3 Commits
bol-v11.0.
...
v10
Author | SHA1 | Date | |
---|---|---|---|
8a87f6deab | |||
759b099bdf | |||
ade88fb54b |
@ -1,7 +1,6 @@
|
|||||||
/* ----------------------------------------- */
|
/* ----------------------------------------- */
|
||||||
/* LOCAL FONTS */
|
/* LOCAL FONTS */
|
||||||
/* ----------------------------------------- */
|
/* ----------------------------------------- */
|
||||||
@import "../node_modules/rpg-awesome/css/rpg-awesome.min.css";
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Contrail One';
|
font-family: 'Contrail One';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
|
25
lang/fr.json
25
lang/fr.json
@ -1,12 +1,17 @@
|
|||||||
{
|
{
|
||||||
"ACTOR.TypeCharacter": "Personnage",
|
"TYPES": {
|
||||||
"ACTOR.TypeEncounter": "Rencontre",
|
"Actor": {
|
||||||
"ACTOR.TypeVehicle": "Véhicule",
|
"character": "Personnage",
|
||||||
"ITEM.TypeItem": "Objet",
|
"npc": "PNJ",
|
||||||
"ITEM.TypeFeature": "Trait",
|
"vehicle": "Véhicule"
|
||||||
"ITEM.TypeWeapon": "Arme",
|
},
|
||||||
"ITEM.TypeArmor": "Armure",
|
"Item": {
|
||||||
|
"item": "Objet",
|
||||||
|
"feature": "Trait",
|
||||||
|
"weapon": "Arme",
|
||||||
|
"armure": "Armure"
|
||||||
|
}
|
||||||
|
},
|
||||||
"BOL.attributes.vigor": "Vigueur",
|
"BOL.attributes.vigor": "Vigueur",
|
||||||
"BOL.attributes.halfvigor": "Demi-vigueur",
|
"BOL.attributes.halfvigor": "Demi-vigueur",
|
||||||
"BOL.attributes.agility": "Agilité",
|
"BOL.attributes.agility": "Agilité",
|
||||||
@ -478,7 +483,7 @@
|
|||||||
"BOL.chat.applydamagetotarget": "Appliquer les dommages à la cible",
|
"BOL.chat.applydamagetotarget": "Appliquer les dommages à la cible",
|
||||||
"BOL.chat.fightoption": "Option de combat",
|
"BOL.chat.fightoption": "Option de combat",
|
||||||
"BOL.chat.reroll": "Relancer (1 P. Heroisme)",
|
"BOL.chat.reroll": "Relancer (1 P. Heroisme)",
|
||||||
"BOL.chat.heroicreminder": "En plus des actions indiquées sur les boutons ci-dessous, vous pouvez : <ul><li>Carnage : Attaquer une seconde fois le même adversaire</li><li>Coup précis : Un dé de malus à votre adversaire sur une localisation choisie</li><li>Désarmement</li><li>Massacrer la piétaille</li><li>Renversement : Renversez votre adversaire (1 taille de plus max)</li></ul>Si vous dépensez un Point dh'Eheoisme en plus, tout ces effets peuvent être doublés",
|
"BOL.chat.heroicreminder": "En plus des actions indiquées sur les boutons ci-dessous, vous pouvez : <ul><li>Carnage : Attaquer une seconde fois le même adversaire</li><li>Coup précis : Un dé de malus à votre adversaire sur une localisation choisie</li><li>Désarmement</li><li>Massacrer la piétaille</li><li>Renversement : Renversez votre adversaire (1 taille de plus max)</li></ul>Si vous dépensez un Point d'Héroisme en plus, tout ces effets peuvent être doublés",
|
||||||
"BOL.chat.toheroic": "Transformer en succés Héroïque (1 P. Héroisme/Vilainie)",
|
"BOL.chat.toheroic": "Transformer en succés Héroïque (1 P. Héroisme/Vilainie)",
|
||||||
"BOL.chat.tolegend": "Transformer en succes Légendaire (1 P. Heroisme/Vilainie)",
|
"BOL.chat.tolegend": "Transformer en succes Légendaire (1 P. Heroisme/Vilainie)",
|
||||||
"BOL.chat.hurttitle": "{name} va encaisser {damageTotal} dégats !",
|
"BOL.chat.hurttitle": "{name} va encaisser {damageTotal} dégats !",
|
||||||
@ -539,7 +544,7 @@
|
|||||||
"BOL.chat.criticalinfo": "C'est un succès Héroïque ou Légendaire ! Choisissez vos options et effets !",
|
"BOL.chat.criticalinfo": "C'est un succès Héroïque ou Légendaire ! Choisissez vos options et effets !",
|
||||||
"BOL.chat.criticalbuttonjournal": "Succès Héroïque/Légendaire",
|
"BOL.chat.criticalbuttonjournal": "Succès Héroïque/Légendaire",
|
||||||
|
|
||||||
"BOL.chat.losshp": "{{name}} a perdu {lossHP} points de Vitalité. Si il se repose quelques minutes, il peut récupérer {recupHP} points de Vitalité.",
|
"BOL.chat.losshp": "{name} a perdu {lossHP} points de Vitalité. Si il se repose quelques minutes, il peut récupérer {recupHP} points de Vitalité.",
|
||||||
"BOL.chat.applyrecup": "Récupérer pendant quelques minutes (+{recupHP} Vitalité)",
|
"BOL.chat.applyrecup": "Récupérer pendant quelques minutes (+{recupHP} Vitalité)",
|
||||||
"BOL.chat.inforecup": "{name} vient de récupérer {recupHP} points de Vitalité après quelques minutes de repos.",
|
"BOL.chat.inforecup": "{name} vient de récupérer {recupHP} points de Vitalité après quelques minutes de repos.",
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getInitiativeMalus() {
|
getInitiativeMalus() {
|
||||||
if ( this.type === 'encounter' && (this.chartype == "adversary" || this.chartype == "tough")) {
|
if (this.type === 'encounter' && (this.chartype == "adversary" || this.chartype == "tough")) {
|
||||||
return this.system.aptitudes.init.value
|
return this.system.aptitudes.init.value
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
@ -103,12 +103,12 @@ export class BoLActor extends Actor {
|
|||||||
let newVitality = 10 + this.system.attributes.vigor.value + this.system.resources.hp.bonus
|
let newVitality = 10 + this.system.attributes.vigor.value + this.system.resources.hp.bonus
|
||||||
if (this.system.resources.hp.max != newVitality) {
|
if (this.system.resources.hp.max != newVitality) {
|
||||||
let actor = this
|
let actor = this
|
||||||
setTimeout( function() { actor.update({ 'system.resources.hp.max': newVitality }) }, 800 )
|
setTimeout(function () { actor.update({ 'system.resources.hp.max': newVitality }) }, 800)
|
||||||
}
|
}
|
||||||
let newPower = 10 + this.system.attributes.mind.value + this.system.resources.power.bonus
|
let newPower = 10 + this.system.attributes.mind.value + this.system.resources.power.bonus
|
||||||
if (this.system.resources.power.max != newPower) {
|
if (this.system.resources.power.max != newPower) {
|
||||||
let actor = this
|
let actor = this
|
||||||
setTimeout( function() { actor.update({ 'system.resources.power.max': newPower }) }, 800 )
|
setTimeout(function () { actor.update({ 'system.resources.power.max': newPower }) }, 800)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,16 +130,16 @@ export class BoLActor extends Actor {
|
|||||||
get details() {
|
get details() {
|
||||||
return this.system.details
|
return this.system.details
|
||||||
}
|
}
|
||||||
addEffectModifiers( myList, dataPath) {
|
addEffectModifiers(myList, dataPath) {
|
||||||
for (let attr of myList) {
|
for (let attr of myList) {
|
||||||
attr.numModifier = 0
|
attr.numModifier = 0
|
||||||
attr.diceModifier = ""
|
attr.diceModifier = ""
|
||||||
let effects = this.items.filter( i => i.type === "feature" && i.system.subtype === "boleffect" && i.system.properties.identifier == dataPath+attr.key)
|
let effects = this.items.filter(i => i.type === "feature" && i.system.subtype === "boleffect" && i.system.properties.identifier == dataPath + attr.key)
|
||||||
for (let effect of effects) {
|
for (let effect of effects) {
|
||||||
if ( Number(effect.system.properties.modifier)) {
|
if (Number(effect.system.properties.modifier)) {
|
||||||
attr.numModifier += Number(effect.system.properties.modifier)
|
attr.numModifier += Number(effect.system.properties.modifier)
|
||||||
} else {
|
} else {
|
||||||
attr.diceModifier += "+"+effect.system.properties.modifier
|
attr.diceModifier += "+" + effect.system.properties.modifier
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -523,7 +523,7 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
if (rollData.horoscopeType == "major") {
|
if (rollData.horoscopeType == "major") {
|
||||||
let actorHoroscope = this
|
let actorHoroscope = this
|
||||||
if(rollData.targetId) {
|
if (rollData.targetId) {
|
||||||
let token = game.scenes.current.tokens.get(rollData.targetId)
|
let token = game.scenes.current.tokens.get(rollData.targetId)
|
||||||
actorHoroscope = token.actor
|
actorHoroscope = token.actor
|
||||||
}
|
}
|
||||||
@ -607,16 +607,18 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
heroReroll() {
|
heroReroll() {
|
||||||
if (this.type == 'character') {
|
if (this.type == 'character' || this.system.villainy == 'adversary') {
|
||||||
return this.system.resources.hero.value > 0;
|
return this.system.resources.hero.value > 0;
|
||||||
} else {
|
|
||||||
if (this.system.villainy == 'adversary') {
|
|
||||||
return this.system.resources.hero.value > 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
/*-------------------------------------------- */
|
||||||
|
getHeroPoints() {
|
||||||
|
if (this.type == 'character' || this.system.villainy == 'adversary') {
|
||||||
|
return this.system.resources.hero.value
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
getResourcesFromType() {
|
getResourcesFromType() {
|
||||||
let resources = {};
|
let resources = {};
|
||||||
@ -842,7 +844,7 @@ export class BoLActor extends Actor {
|
|||||||
let msg = await ChatMessage.create({
|
let msg = await ChatMessage.create({
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
||||||
content: game.i18n.format( "BOL.chat.inforecup", {name: this.name, recupHP: recupHP} )
|
content: game.i18n.format("BOL.chat.inforecup", { name: this.name, recupHP: recupHP })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -860,12 +862,12 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
checkNumeric(myObject) {
|
checkNumeric(myObject) {
|
||||||
if ( myObject) {
|
if (myObject) {
|
||||||
for (let key in myObject) {
|
for (let key in myObject) {
|
||||||
if ( myObject[key].value === null ) {
|
if (myObject[key].value === null) {
|
||||||
myObject[key].value = 0
|
myObject[key].value = 0
|
||||||
}
|
}
|
||||||
if ( myObject[key].value === NaN ) {
|
if (myObject[key].value === NaN) {
|
||||||
myObject[key].value = 0
|
myObject[key].value = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -893,7 +895,7 @@ export class BoLActor extends Actor {
|
|||||||
fvttInit = 5
|
fvttInit = 5
|
||||||
if (!rollData) {
|
if (!rollData) {
|
||||||
if (isCombat) {
|
if (isCombat) {
|
||||||
if (game.user.isGM ) {
|
if (game.user.isGM) {
|
||||||
if (this.hasPlayerOwner) {
|
if (this.hasPlayerOwner) {
|
||||||
game.socket.emit("system.bol", { name: "msg_request_init_roll", data: { actorId: this.id, combatData } })
|
game.socket.emit("system.bol", { name: "msg_request_init_roll", data: { actorId: this.id, combatData } })
|
||||||
} else {
|
} else {
|
||||||
|
@ -491,6 +491,7 @@ export class BoLRoll {
|
|||||||
if (defender) { // If target is selected
|
if (defender) { // If target is selected
|
||||||
rollData.defence = defender.defenseValue
|
rollData.defence = defender.defenseValue
|
||||||
rollData.armorMalus = defender.armorMalusValue
|
rollData.armorMalus = defender.armorMalusValue
|
||||||
|
rollData.defenderHeroPoints = defender.getHeroPoints()
|
||||||
rollData.shieldBlock = 'none'
|
rollData.shieldBlock = 'none'
|
||||||
let shields = defender.shields
|
let shields = defender.shields
|
||||||
//console.log("Defender stats", defender)
|
//console.log("Defender stats", defender)
|
||||||
@ -578,7 +579,7 @@ export class BoLRoll {
|
|||||||
const isMalus = (rollData.bmDice < 0)
|
const isMalus = (rollData.bmDice < 0)
|
||||||
|
|
||||||
let rollbase = rollData.attrValue + rollData.aptValue
|
let rollbase = rollData.attrValue + rollData.aptValue
|
||||||
if (rollData.weapon && rollData.weapon.system.properties.onlymodifier) {
|
if (rollData.weapon?.system.properties.onlymodifier) {
|
||||||
rollbase = 0
|
rollbase = 0
|
||||||
}
|
}
|
||||||
let diceData = BoLUtility.getDiceData()
|
let diceData = BoLUtility.getDiceData()
|
||||||
|
@ -611,6 +611,7 @@ export class BoLUtility {
|
|||||||
attackId: rollData.id,
|
attackId: rollData.id,
|
||||||
attacker: rollData.attacker,
|
attacker: rollData.attacker,
|
||||||
defender: defender,
|
defender: defender,
|
||||||
|
defenderHeroPoints:defender.getHeroPoints(),
|
||||||
defenderWeapons: defenderWeapons,
|
defenderWeapons: defenderWeapons,
|
||||||
damageTotal: rollData.damageTotal,
|
damageTotal: rollData.damageTotal,
|
||||||
damagesIgnoresArmor: rollData.damagesIgnoresArmor,
|
damagesIgnoresArmor: rollData.damagesIgnoresArmor,
|
||||||
|
@ -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": "11.0.13",
|
"version": "11.0.14",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "10",
|
||||||
"verified": "11"
|
"verified": "11"
|
||||||
@ -202,7 +202,7 @@
|
|||||||
],
|
],
|
||||||
"socket": true,
|
"socket": true,
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
||||||
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v11.0.13.zip",
|
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v11.0.14.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",
|
||||||
|
@ -8,14 +8,12 @@
|
|||||||
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
||||||
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack--id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack--id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
||||||
|
|
||||||
{{#if isHeroAdversary}}
|
{{#if (gt defenderHeroPoints 0)}}
|
||||||
{{#if (gt defender.system.resources.hero.value 0)}}
|
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
||||||
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
|
||||||
|
|
||||||
{{#each defenderWeapons as |weapon idx|}}
|
{{#each defenderWeapons as |weapon idx|}}
|
||||||
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
|
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<button class="damage-handling" data-defense-mode="damage-not-applied" data-attack-id="{{attackId}}">{{localize "BOL.chat.nodamage"}}</button>
|
<button class="damage-handling" data-defense-mode="damage-not-applied" data-attack-id="{{attackId}}">{{localize "BOL.chat.nodamage"}}</button>
|
||||||
|
Reference in New Issue
Block a user