diff --git a/addon-register.js b/addon-register.js index a61be3c..0fad825 100644 --- a/addon-register.js +++ b/addon-register.js @@ -174,7 +174,7 @@ const _manage_inn_roll = async (content, msg) => { let command = content.split(" ").map(function(item) { return item.trim(); }) - console.log(WFRP_Tables["talents"]); + console.log(game.wfrp4e.tables["talents"]); if (command[0] == "/auberge" && command[1] ) { @@ -307,7 +307,7 @@ const __check_fix_wrong_modules = ( chatFlag, patchFinished ) => { } } }); - WFRP4E.speciesSkills["gnome"] = [ + game.wfrp4e.config.speciesSkills["gnome"] = [ "Focalisation (Ulgu)", "Charme", "Résistance à l'alcool", @@ -321,7 +321,7 @@ const __check_fix_wrong_modules = ( chatFlag, patchFinished ) => { "Survie en extérieur", "Discrétion (Au choix)" ]; - WFRP4E.speciesTalents["gnome"] = [ + game.wfrp4e.config.speciesTalents["gnome"] = [ "Insignifiant, Imprégné avec Uglu", "Chance, Imitation", "Vision Nocturne", @@ -421,6 +421,9 @@ Hooks.once('ready', () => { if ( name == "wfrp4e-content" && module.active) { compmod = "wfrp4e-content"; } + if ( name == "wfrp4e-core" && module.active) { + compmod = "wfrp4e-core"; + } } ); __auto_patch_translation_journal_compendium( compmod ) /* Uncomment this to auto-create the translation tables diff --git a/babele-register-orig.js b/babele-register-orig.js new file mode 100644 index 0000000..b99a3bd --- /dev/null +++ b/babele-register-orig.js @@ -0,0 +1,155 @@ +/************************************************************************************/ +/* Override some methods of the WFRP4 actor class, mainly to compute spells/weapons */ +class ActorWfrp4e_fr extends ActorWfrp4e { + + /** + * Calculates a weapon's range or damage formula. + * + * Takes a weapon formula for Damage or Range (SB + 4 or SBx3) and converts to a numeric value. + * + * @param {String} formula formula to be processed (SBx3 => 9). + * + * @return {Number} Numeric formula evaluation + */ + calculateRangeOrDamage(formula) + { + //console.log("FR function calculateRangeOrDamage !", formula); + let actorData = this.data + try + { + formula = formula.toLowerCase(); + // Iterate through characteristics + for(let ch in actorData.data.characteristics) + { + // Determine if the formula includes the characteristic's abbreviation + B (SB, WPB, etc.) + if (formula.includes(ch.concat('b'))) + { + // Replace that abbreviation with the Bonus value + formula = formula.replace(ch.concat('b'), actorData.data.characteristics[ch].bonus.toString()); + } + } + if (formula.includes("yard") ) + formula = formula.replace('yard', "mètre" ); + if (formula.includes("yds") ) + formula = formula.replace('yds', "m." ); + // To evaluate multiplication, replace x with * + formula = formula.replace('x', '*'); + + return eval(formula); + } + catch + { + return formula + } + } + +/** + * Turns a formula into a processed string for display + * + * Processes damage formula based - same as calculateSpellAttributes, but with additional + * consideration to whether its a magic missile or not + * + * @param {String} formula Formula to process - "Willpower Bonus + 4" + * @param {boolean} isMagicMissile Whether or not it's a magic missile - used in calculating additional damage + * @returns {String} Processed formula + */ + calculateSpellDamage(formula, isMagicMissile) + { + let actorData = this.data + formula = formula.toLowerCase(); + + if (isMagicMissile) // If it's a magic missile, damage includes willpower bonus + { + formula += "+ " + actorData.data.characteristics["wp"].bonus + } + + // Specific case, to avoid wrong matching with "Force" + if (formula.includes("force mentale")) + { + // Determine if it's looking for the bonus or the value + if (formula.includes('bonus')) { + formula = formula.replace( "bonus de force mentale", actorData.data.characteristics["wp"].bonus); + formula = formula.replace( "force mentale bonus", actorData.data.characteristics["wp"].bonus); + } else + formula = formula.replace("force mentale", actorData.data.characteristics["wp"].value); + } + + // Iterate through characteristics + for(let ch in actorData.data.characteristics) + { + // If formula includes characteristic name + while (formula.includes(actorData.data.characteristics[ch].label.toLowerCase())) + { + // Determine if it's looking for the bonus or the value + if (formula.includes('bonus')) { + formula = formula.replace("bonus de " + WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].bonus); + formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase() + " bonus", actorData.data.characteristics[ch].bonus); + } + else + formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].value); + } + } + + //console.log("calculateSpellDamage -> " + formula ); + return eval(formula); + } + + /** + * Turns a formula into a processed string for display + * + * Turns a spell attribute such as "Willpower Bonus Rounds" into a more user friendly, processed value + * such as "4 Rounds". If the aoe is checked, it wraps the result in AoE (Result). + * + * @param {String} formula Formula to process - "Willpower Bonus Rounds" + * @param {boolean} aoe Whether or not it's calculating AoE (changes string return) + * @returns {String} formula processed formula + */ + calculateSpellAttributes(formula, aoe=false) + { + let actorData = this.data + formula = formula.toLowerCase(); + + // Do not process these special values + if (formula != game.i18n.localize("Vous").toLowerCase() && formula != game.i18n.localize("Special").toLowerCase() && formula != game.i18n.localize("Instantané").toLowerCase()) + { + // Specific case, to avoid wrong matching with "Force" + if (formula.includes("force mentale")) + { + // Determine if it's looking for the bonus or the value + if (formula.includes('bonus')) { + formula = formula.replace( "bonus de force mentale", actorData.data.characteristics["wp"].bonus); + formula = formula.replace( "force mentale bonus", actorData.data.characteristics["wp"].bonus); + } + else + formula = formula.replace("force mentale", actorData.data.characteristics["wp"].value); + } + if (formula.includes("yard") ) + formula = formula.replace('yard', "mètre" ); + if (formula.includes("yds") ) + formula = formula.replace('yds', "m." ); + // Iterate through remaining characteristics + for(let ch in actorData.data.characteristics) + { + // If formula includes characteristic name + //console.log("Testing :", ch, WFRP4E.characteristics[ch].toLowerCase()); + if (formula.includes(WFRP4E.characteristics[ch].toLowerCase())) + { + // Determine if it's looking for the bonus or the value + if (formula.includes('bonus')) { + formula = formula.replace("bonus de " + WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].bonus); + formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase() + " bonus", actorData.data.characteristics[ch].bonus); + } + else + formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].value); + } + } + } + + // If AoE - wrap with AoE ( ) + if (aoe) + formula = "AoE (" + formula.capitalize() + ")"; + + //console.log("calculateSpellAttributes -> " + formula ); + return formula.capitalize(); + } +} diff --git a/babele-register.js b/babele-register.js index 87e2d3d..50da20d 100644 --- a/babele-register.js +++ b/babele-register.js @@ -1,3 +1,6 @@ +/************************************************************************************/ +import ActorWfrp4e from "/systems/wfrp4e//modules/actor/actor-wfrp4e.js"; + /************************************************************************************/ /* Override some methods of the WFRP4 actor class, mainly to compute spells/weapons */ class ActorWfrp4e_fr extends ActorWfrp4e { @@ -83,10 +86,10 @@ class ActorWfrp4e_fr extends ActorWfrp4e { // Determine if it's looking for the bonus or the value if (formula.includes('bonus')) { formula = formula.replace("bonus de " + WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].bonus); - formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase() + " bonus", actorData.data.characteristics[ch].bonus); + formula = formula.replace(game.wfrp4e.config.characteristics[ch].toLowerCase() + " bonus", actorData.data.characteristics[ch].bonus); } else - formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].value); + formula = formula.replace(game.wfrp4e.config.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].value); } } @@ -132,15 +135,15 @@ class ActorWfrp4e_fr extends ActorWfrp4e { { // If formula includes characteristic name //console.log("Testing :", ch, WFRP4E.characteristics[ch].toLowerCase()); - if (formula.includes(WFRP4E.characteristics[ch].toLowerCase())) + if (formula.includes(game.wfrp4e.config.characteristics[ch].toLowerCase())) { // Determine if it's looking for the bonus or the value if (formula.includes('bonus')) { - formula = formula.replace("bonus de " + WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].bonus); - formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase() + " bonus", actorData.data.characteristics[ch].bonus); + formula = formula.replace("bonus de " + game.wfrp4e.config.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].bonus); + formula = formula.replace(game.wfrp4e.config.characteristics[ch].toLowerCase() + " bonus", actorData.data.characteristics[ch].bonus); } else - formula = formula.replace(WFRP4E.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].value); + formula = formula.replace(game.wfrp4e.config.characteristics[ch].toLowerCase(), actorData.data.characteristics[ch].value); } } } @@ -168,6 +171,9 @@ Hooks.once('init', () => { if ( name == "wfrp4e-content" && module.active) { compmod = "wfrp4e-content"; } + if ( name == "wfrp4e-core" && module.active) { + compmod = "wfrp4e-core"; + } } ); // Babele stuff