forked from public/bol
Fix options de combat
This commit is contained in:
parent
e7f3851daa
commit
5b91041a3f
@ -22,6 +22,17 @@ export class BoLActor extends Actor {
|
|||||||
super.prepareData()
|
super.prepareData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
isHeroAdversary() {
|
||||||
|
if (this.type === 'character') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if (this.type === 'encounter' && this.chartype == "adversary") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getCharType() {
|
getCharType() {
|
||||||
if (this.type === 'character') {
|
if (this.type === 'character') {
|
||||||
@ -32,10 +43,10 @@ export class BoLActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getVillainy() {
|
getVillainy() {
|
||||||
if (this.type === 'character') {
|
if (this.type === 'encounter' && this.chartype == "adversary") {
|
||||||
return false
|
return true
|
||||||
}
|
}
|
||||||
return true
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -734,7 +745,7 @@ export class BoLActor extends Actor {
|
|||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
alias: this.name,
|
alias: this.name,
|
||||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
||||||
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value })
|
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value, isHeroAdversary: this.isHeroAdversary() })
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (prone) {
|
if (prone) {
|
||||||
|
@ -523,6 +523,7 @@ export class BoLRoll {
|
|||||||
rollData.nbBoons = 0
|
rollData.nbBoons = 0
|
||||||
rollData.nbFlaws = 0
|
rollData.nbFlaws = 0
|
||||||
rollData.nbDice = 0
|
rollData.nbDice = 0
|
||||||
|
rollData.isHeroAdversary = actor.isHeroAdversary()
|
||||||
if (rollData.shieldBlock == 'blockall') {
|
if (rollData.shieldBlock == 'blockall') {
|
||||||
rollData.shieldMalus = rollData.shieldAttackMalus;
|
rollData.shieldMalus = rollData.shieldAttackMalus;
|
||||||
} else {
|
} else {
|
||||||
|
@ -191,29 +191,6 @@ export class BoLUtility {
|
|||||||
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
|
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static templateData(it) {
|
|
||||||
return BoLUtility.data(it)?.data ?? {}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static data(it) {
|
|
||||||
if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
|
|
||||||
return it.data;
|
|
||||||
}
|
|
||||||
return it;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static storeRoll(roll) {
|
|
||||||
this.rollTab[roll.id] = roll
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static getRoll(rollId) {
|
|
||||||
return this.rollTab[roll.id]
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static createDirectOptionList(min, max) {
|
static createDirectOptionList(min, max) {
|
||||||
let options = {};
|
let options = {};
|
||||||
@ -258,7 +235,7 @@ export class BoLUtility {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getUsers(filter) {
|
static getUsers(filter) {
|
||||||
return game.users.filter(filter).map(user => user.data._id);
|
return game.users.filter(filter).map(user => user.id);
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getWhisperRecipients(rollMode, name) {
|
static getWhisperRecipients(rollMode, name) {
|
||||||
@ -522,7 +499,7 @@ export class BoLUtility {
|
|||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static isRangedWeapon(weapon) {
|
static isRangedWeapon(weapon) {
|
||||||
return weapon.data.type == 'ranged' || weapon.data.thrown;
|
return weapon.system.type == 'ranged' || weapon.system.thrown;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -604,15 +581,15 @@ export class BoLUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeSpellCost(spell, nbOptCond = 0) {
|
static computeSpellCost(spell, nbOptCond = 0) {
|
||||||
let pp = spell.data.properties.ppcost
|
let pp = spell.system.properties.ppcost
|
||||||
let minpp = __circle2minpp[spell.data.properties.circle]
|
let minpp = __circle2minpp[spell.system.properties.circle]
|
||||||
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
||||||
return pp
|
return pp
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getDamageFormula(weaponData, fightOption) {
|
static getDamageFormula(weaponData, fightOption) {
|
||||||
let upgradeDamage = (fightOption && fightOption.data.properties.fightoptiontype == "twoweaponsatt")
|
let upgradeDamage = (fightOption && fightOption.system.properties.fightoptiontype == "twoweaponsatt")
|
||||||
let damageString = weaponData.properties.damage
|
let damageString = weaponData.properties.damage
|
||||||
let modifier = weaponData.properties.damageModifiers ?? 0
|
let modifier = weaponData.properties.damageModifiers ?? 0
|
||||||
let multiplier = weaponData.properties.damageMultiplier ?? 1
|
let multiplier = weaponData.properties.damageMultiplier ?? 1
|
||||||
|
@ -118,7 +118,7 @@ export const registerHandlebarsHelpers = function () {
|
|||||||
})
|
})
|
||||||
Handlebars.registerHelper('includesKey', function (items, type, key) {
|
Handlebars.registerHelper('includesKey', function (items, type, key) {
|
||||||
// console.log(items);
|
// console.log(items);
|
||||||
return items.filter(i => i.type === type).map(i => i.data.key).includes(key);
|
return items.filter(i => i.type === type).map(i => i.system.key).includes(key);
|
||||||
})
|
})
|
||||||
Handlebars.registerHelper('includes', function (array, val) {
|
Handlebars.registerHelper('includes', function (array, val) {
|
||||||
return array.includes(val);
|
return array.includes(val);
|
||||||
|
@ -49,7 +49,7 @@ export default function registerHooks() {
|
|||||||
let macro = game.macros.entities.find(m => (m.name === actor.name) && (m.command === command));
|
let macro = game.macros.entities.find(m => (m.name === actor.name) && (m.command === command));
|
||||||
if (!macro) {
|
if (!macro) {
|
||||||
macro = await Macro.create({
|
macro = await Macro.create({
|
||||||
name: actor.data.name,
|
name: actor.name,
|
||||||
type: "script",
|
type: "script",
|
||||||
img: "icons/svg/dice-target.svg",
|
img: "icons/svg/dice-target.svg",
|
||||||
command: command
|
command: command
|
||||||
@ -65,9 +65,9 @@ export default function registerHooks() {
|
|||||||
let macro = game.macros.entities.find(m => (m.name === journal.name) && (m.command === command));
|
let macro = game.macros.entities.find(m => (m.name === journal.name) && (m.command === command));
|
||||||
if (!macro) {
|
if (!macro) {
|
||||||
macro = await Macro.create({
|
macro = await Macro.create({
|
||||||
name: journal.data.name,
|
name: journal.name,
|
||||||
type: "script",
|
type: "script",
|
||||||
img: (journal.data.img) ? journal.data.img : "icons/svg/book.svg",
|
img: (journal.img) ? journal.img : "icons/svg/book.svg",
|
||||||
command: command
|
command: command
|
||||||
}, {displaySheet: false})
|
}, {displaySheet: false})
|
||||||
game.user.assignHotbarMacro(macro, slot);
|
game.user.assignHotbarMacro(macro, slot);
|
||||||
|
@ -37,13 +37,13 @@ export class Macros {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if(rollType === "attribute") {
|
if(rollType === "attribute") {
|
||||||
let attribute = eval(`actor.data.data.attributes.${key}`);
|
let attribute = eval(`actor.system.attributes.${key}`);
|
||||||
let rollLabel = (attribute.label) ? game.i18n.localize(attribute.label) : null;
|
let rollLabel = (attribute.label) ? game.i18n.localize(attribute.label) : null;
|
||||||
let description = actor.name + " - " + game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) ;
|
let description = actor.name + " - " + game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) ;
|
||||||
BoLRoll.attributeRollDialog(actor, actorData, attribute, rollLabel, description, adv, mod);
|
BoLRoll.attributeRollDialog(actor, actorData, attribute, rollLabel, description, adv, mod);
|
||||||
}
|
}
|
||||||
else if(rollType === "aptitude") {
|
else if(rollType === "aptitude") {
|
||||||
let aptitude = eval(`actor.data.data.aptitudes.${key}`);
|
let aptitude = eval(`actor.system.aptitudes.${key}`);
|
||||||
let rollLabel = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
let rollLabel = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
||||||
let description = actor.name + " - " + game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label) ;
|
let description = actor.name + " - " + game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label) ;
|
||||||
BoLRoll.aptitudeRollDialog(actor, actorData, aptitude, rollLabel, description, adv, mod);
|
BoLRoll.aptitudeRollDialog(actor, actorData, aptitude, rollLabel, description, adv, mod);
|
||||||
|
@ -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.5.12",
|
"version": "10.5.13",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "10",
|
||||||
"verified": "10"
|
"verified": "10"
|
||||||
@ -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-v10.5.12.zip",
|
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.5.13.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",
|
||||||
|
@ -4,20 +4,25 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
|
|
||||||
{{#if (eq hp 0)}}
|
|
||||||
{{localize "BOL.chat.vitalityzero" name=name hp=hp}}
|
|
||||||
<br>{{localize "BOL.chat.vitalityheroism"}}
|
|
||||||
<br>{{localize "BOL.chat.vitalityheroismhint"}}
|
|
||||||
{{else}}
|
|
||||||
{{localize "BOL.chat.vitalitydying" name=name hp=hp}}
|
|
||||||
<br>{{localize "BOL.chat.vitalitydyingheroism"}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{#if (lt hp -5)}}
|
{{#if isHeroAdversary}}
|
||||||
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
{{#if (eq hp 0)}}
|
||||||
<br>{{localize "BOL.chat.epitaph"}}
|
{{localize "BOL.chat.vitalityzero" name=name hp=hp}}
|
||||||
{{/if}}
|
<br>{{localize "BOL.chat.vitalityheroism"}}
|
||||||
|
<br>{{localize "BOL.chat.vitalityheroismhint"}}
|
||||||
|
{{else}}
|
||||||
|
{{localize "BOL.chat.vitalitydying" name=name hp=hp}}
|
||||||
|
<br>{{localize "BOL.chat.vitalitydyingheroism"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (lt hp -5)}}
|
||||||
|
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
||||||
|
<br>{{localize "BOL.chat.epitaph"}}
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
||||||
|
<br>{{localize "BOL.chat.epitaph"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -8,13 +8,15 @@
|
|||||||
<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 defender.system.resources.hero.value}}
|
{{#if isHeroAdversary}}
|
||||||
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
{{#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>
|
||||||
|
|
||||||
{{#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}}
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
{{/if}}
|
|
Loading…
Reference in New Issue
Block a user