Rollable damages + protection
This commit is contained in:
parent
831b192691
commit
2a83ba027b
@ -108,6 +108,7 @@
|
|||||||
"BOL.ui.duration": "Duration",
|
"BOL.ui.duration": "Duration",
|
||||||
"BOL.ui.spellkeep": "Maintain",
|
"BOL.ui.spellkeep": "Maintain",
|
||||||
"BOL.ui.concentrate": "Concentrate",
|
"BOL.ui.concentrate": "Concentrate",
|
||||||
|
"BOL.ui.registerInit": "Register Init.",
|
||||||
|
|
||||||
"BOL.featureCategory.origins": "Origines",
|
"BOL.featureCategory.origins": "Origines",
|
||||||
"BOL.featureCategory.races": "Races",
|
"BOL.featureCategory.races": "Races",
|
||||||
|
@ -109,6 +109,7 @@
|
|||||||
"BOL.ui.duration": "Durée",
|
"BOL.ui.duration": "Durée",
|
||||||
"BOL.ui.spellkeep": "Prolongation",
|
"BOL.ui.spellkeep": "Prolongation",
|
||||||
"BOL.ui.concentrate": "Concentration",
|
"BOL.ui.concentrate": "Concentration",
|
||||||
|
"BOL.ui.registerInit": "Enregistrer comme Init. de combat",
|
||||||
|
|
||||||
"BOL.featureCategory.origins": "Origines",
|
"BOL.featureCategory.origins": "Origines",
|
||||||
"BOL.featureCategory.races": "Races",
|
"BOL.featureCategory.races": "Races",
|
||||||
|
@ -243,6 +243,16 @@ export class BoLActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------- */
|
||||||
|
registerInit(initScore, isCritical, isFumble) {
|
||||||
|
this.update( { 'data.combat.lastinit': initScore, 'data.combat.iscritical': isCritical, 'data.combat.isfumble': isFumble} )
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------- */
|
||||||
|
getLastInitData() {
|
||||||
|
return this.data.data.combat
|
||||||
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
async subHeroPoints( nb) {
|
async subHeroPoints( nb) {
|
||||||
let newHeroP = this.data.data.resources.hero.value - nb;
|
let newHeroP = this.data.data.resources.hero.value - nb;
|
||||||
|
@ -8,9 +8,9 @@ import { preloadHandlebarsTemplates } from "./system/templates.js";
|
|||||||
import { registerHandlebarsHelpers } from "./system/helpers.js";
|
import { registerHandlebarsHelpers } from "./system/helpers.js";
|
||||||
import { registerSystemSettings } from "./system/settings.js";
|
import { registerSystemSettings } from "./system/settings.js";
|
||||||
import registerHooks from "./system/hooks.js";
|
import registerHooks from "./system/hooks.js";
|
||||||
// import {DataLoader} from "./system/data.js";
|
|
||||||
import { Macros } from "./system/macros.js";
|
import { Macros } from "./system/macros.js";
|
||||||
import { BoLUtility } from "./system/bol-utility.js";
|
import { BoLUtility } from "./system/bol-utility.js";
|
||||||
|
import { BoLCombatManager } from "./system/bol-combat.js";
|
||||||
|
|
||||||
Hooks.once('init', async function () {
|
Hooks.once('init', async function () {
|
||||||
|
|
||||||
@ -33,12 +33,13 @@ Hooks.once('init', async function () {
|
|||||||
*/
|
*/
|
||||||
CONFIG.Combat.initiative = {
|
CONFIG.Combat.initiative = {
|
||||||
formula: "2d6+@attributes.mind.value+@aptitudes.init.value",
|
formula: "2d6+@attributes.mind.value+@aptitudes.init.value",
|
||||||
decimals: 0
|
decimals: 2
|
||||||
};
|
};
|
||||||
0
|
0
|
||||||
// Define custom Entity classes
|
// Define custom Entity classes
|
||||||
CONFIG.Actor.documentClass = BoLActor;
|
CONFIG.Actor.documentClass = BoLActor;
|
||||||
CONFIG.Item.documentClass = BoLItem;
|
CONFIG.Item.documentClass = BoLItem;
|
||||||
|
CONFIG.Combat.documentClass = BoLCombatManager;
|
||||||
|
|
||||||
// Register sheet application classes
|
// Register sheet application classes
|
||||||
Actors.unregisterSheet("core", ActorSheet);
|
Actors.unregisterSheet("core", ActorSheet);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { BoLUtility } from "../system/bol-utility.js";
|
import { BoLUtility } from "../system/bol-utility.js";
|
||||||
|
|
||||||
const __adv2dice = { ["1B"]: 3, ["2B"]: 4, ["2"]: 2, ["1M"]: 3, ["2M"]: 4}
|
const __adv2dice = { ["1B"]: 3, ["2B"]: 4, ["2"]: 2, ["1M"]: 3, ["2M"]: 4}
|
||||||
|
const _apt2attr = {init: "mind", melee: "agility", ranged: "agility", def: "vigor"}
|
||||||
|
|
||||||
export class BoLRoll {
|
export class BoLRoll {
|
||||||
static options() {
|
static options() {
|
||||||
return { classes: ["bol", "dialog"] };
|
return { classes: ["bol", "dialog"] };
|
||||||
@ -10,7 +12,9 @@ export class BoLRoll {
|
|||||||
if (adv == 0) return "2"
|
if (adv == 0) return "2"
|
||||||
return Math.abs(adv) + (adv < 0)?'M':'B';
|
return Math.abs(adv) + (adv < 0)?'M':'B';
|
||||||
}
|
}
|
||||||
|
static getDefaultAttribute( key ) {
|
||||||
|
return _apt2attr[key]
|
||||||
|
}
|
||||||
static attributeCheck(actor, actorData, dataset, event) {
|
static attributeCheck(actor, actorData, dataset, event) {
|
||||||
// const elt = $(event.currentTarget)[0];
|
// const elt = $(event.currentTarget)[0];
|
||||||
// let key = elt.attributes["data-rolling"].value;
|
// let key = elt.attributes["data-rolling"].value;
|
||||||
@ -37,7 +41,11 @@ export class BoLRoll {
|
|||||||
// let key = elt.attributes["data-rolling"].value;
|
// let key = elt.attributes["data-rolling"].value;
|
||||||
const key = dataset.key;
|
const key = dataset.key;
|
||||||
const adv = dataset.adv;
|
const adv = dataset.adv;
|
||||||
|
|
||||||
let aptitude = eval(`actor.data.data.aptitudes.${key}`);
|
let aptitude = eval(`actor.data.data.aptitudes.${key}`);
|
||||||
|
let attrKey = this.getDefaultAttribute(key)
|
||||||
|
let attribute = eval(`actor.data.data.attributes.${attrKey}`);
|
||||||
|
|
||||||
let label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
let label = (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);
|
||||||
return this.displayRollDialog(
|
return this.displayRollDialog(
|
||||||
@ -45,6 +53,7 @@ export class BoLRoll {
|
|||||||
mode: "aptitude",
|
mode: "aptitude",
|
||||||
actor: actor,
|
actor: actor,
|
||||||
actorData: actorData,
|
actorData: actorData,
|
||||||
|
attribute: attribute,
|
||||||
aptitude: aptitude,
|
aptitude: aptitude,
|
||||||
label: label,
|
label: label,
|
||||||
description: description,
|
description: description,
|
||||||
@ -134,6 +143,7 @@ export class BoLRoll {
|
|||||||
rollData.mod = html.find('#mod').val() || 0;
|
rollData.mod = html.find('#mod').val() || 0;
|
||||||
let careers = html.find('#career').val();
|
let careers = html.find('#career').val();
|
||||||
rollData.career = (!careers || careers.length == 0) ? 0 : Math.max(...careers.map(i => parseInt(i)));
|
rollData.career = (!careers || careers.length == 0) ? 0 : Math.max(...careers.map(i => parseInt(i)));
|
||||||
|
rollData.registerInit = (rollData.aptKey == 'init') ? $('#register-init').is(":checked") : false;
|
||||||
|
|
||||||
let shieldMalus = 0;
|
let shieldMalus = 0;
|
||||||
if ( rollData.mode == "weapon") {
|
if ( rollData.mode == "weapon") {
|
||||||
@ -188,6 +198,10 @@ export class BoLDefaultRoll {
|
|||||||
this.rollData.isFailure = !this.rollData.isSuccess
|
this.rollData.isFailure = !this.rollData.isSuccess
|
||||||
this.rollData.reroll = this.rollData.actor.heroReroll()
|
this.rollData.reroll = this.rollData.actor.heroReroll()
|
||||||
|
|
||||||
|
if (this.rollData.registerInit) {
|
||||||
|
this.rollData.actor.registerInit( r.total, this.rollData.isCritical);
|
||||||
|
}
|
||||||
|
|
||||||
this._buildChatMessage(this.rollData).then(msgFlavor => {
|
this._buildChatMessage(this.rollData).then(msgFlavor => {
|
||||||
r.toMessage({
|
r.toMessage({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
|
/*
|
||||||
|
Init order =
|
||||||
|
10 - Legendary
|
||||||
|
9 - Heroic
|
||||||
|
8 - Success
|
||||||
|
7 - Rivals/adversary
|
||||||
|
6 - Coriaces/tough
|
||||||
|
5 - Failure
|
||||||
|
4 - Pietaille
|
||||||
|
3 - Echec critique
|
||||||
|
*/
|
||||||
|
|
||||||
export class RdDCombatManager extends Combat {
|
|
||||||
|
export class BoLCombatManager extends Combat {
|
||||||
|
|
||||||
/************************************************************************************/
|
/************************************************************************************/
|
||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||||
@ -9,13 +21,33 @@ export class RdDCombatManager extends Combat {
|
|||||||
const currentId = this.combatant._id;
|
const currentId = this.combatant._id;
|
||||||
|
|
||||||
// calculate initiative
|
// calculate initiative
|
||||||
if ( game.combat.current.round == 1) {
|
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
|
||||||
// TODO
|
if (combatant.actor.type == 'character') {
|
||||||
console.log("TODO : Compute init for actor");
|
let initData = combatant.actor.getLastInitData();
|
||||||
|
if (initData.isLegendary) {
|
||||||
|
fvttInit = 10
|
||||||
|
} else if (initData.isCritical) {
|
||||||
|
fvttInit = 9
|
||||||
|
} else if (initData.lastinit >= 9) {
|
||||||
|
fvttInit = 8
|
||||||
|
} else if (initData.isFumble) {
|
||||||
|
fvttInit = 3
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fvttInit = 4 // Pietaille par defaut
|
||||||
|
if ( combatant.actor.getSubtype == 'adversary') {
|
||||||
|
fvttInit = 7
|
||||||
|
}
|
||||||
|
if ( combatant.actor.getSubtype == 'tough') {
|
||||||
|
fvttInit = 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
fvttInit += (cId / 10)
|
||||||
|
await this.updateEmbeddedDocuments("Combatant", [{ _id: ids[cId], initiative: fvttInit }]);
|
||||||
}
|
}
|
||||||
|
console.log("TODO : Compute init for actor");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
"url": "https://github.com/ZigmundKreud/bol",
|
"url": "https://github.com/ZigmundKreud/bol",
|
||||||
"license": "LICENSE.txt",
|
"license": "LICENSE.txt",
|
||||||
"flags": {},
|
"flags": {},
|
||||||
"version": "0.8.9.7",
|
"version": "0.8.9.9",
|
||||||
"templateVersion": 14,
|
"templateVersion": 16,
|
||||||
"minimumCoreVersion": "0.8.6",
|
"minimumCoreVersion": "0.8.6",
|
||||||
"compatibleCoreVersion": "9",
|
"compatibleCoreVersion": "9",
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
|
@ -11,6 +11,12 @@
|
|||||||
"notes": "",
|
"notes": "",
|
||||||
"languages": []
|
"languages": []
|
||||||
},
|
},
|
||||||
|
"combat": {
|
||||||
|
"lastinit": 0,
|
||||||
|
"iscritical": false,
|
||||||
|
"isfumble": false,
|
||||||
|
"islegendary": false
|
||||||
|
},
|
||||||
"prot": {
|
"prot": {
|
||||||
"key": "prot",
|
"key": "prot",
|
||||||
"label": "BOL.aptitudes.prot",
|
"label": "BOL.aptitudes.prot",
|
||||||
|
@ -8,8 +8,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
{{> "systems/bol/templates/dialogs/attribute-roll-part.hbs"}}
|
||||||
|
|
||||||
{{> "systems/bol/templates/dialogs/aptitude-roll-part.hbs"}}
|
{{> "systems/bol/templates/dialogs/aptitude-roll-part.hbs"}}
|
||||||
|
|
||||||
|
{{#if (equals aptitude.key "init" )}}
|
||||||
|
<div class="flexrow" style="margin-bottom: 1px;">
|
||||||
|
<div class="flex1 center bg-darkred">
|
||||||
|
<label for="mod">{{localize 'BOL.ui.registerInit'}}</label>
|
||||||
|
</div>
|
||||||
|
<div class="flex1 center cell">
|
||||||
|
<label class="checkbox">
|
||||||
|
<input class="field-value" type="checkbox" name="register-init" id="register-init" checked />
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
|
||||||
{{> "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"}}
|
||||||
|
Loading…
Reference in New Issue
Block a user