Change for supporting wfrp 9/ Foundry 13
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
/************************************************************************************/
|
||||
//import WFRP_Tables from "/systems/wfrp4e/modules/system/tables-wfrp4e.js";
|
||||
import { WH4FRPatchConfig } from "./config-patch.js";
|
||||
import {TranslatedCompendium} from "../../babele/script/translated-compendium.js";
|
||||
import { TranslatedCompendium } from "../../babele/script/translated-compendium.js";
|
||||
|
||||
/************************************************************************************/
|
||||
const _patch_eis = () => {
|
||||
if (game.wfrp4e?.config?.symptoms && game.wfrp4e.config.symptoms["delirium"] ) {
|
||||
if (game.wfrp4e?.config?.symptoms?.["delirium"]) {
|
||||
game.wfrp4e.config.symptoms["delirium"] = "Délire";
|
||||
|
||||
game.wfrp4e.config.symptomDescriptions["delirium"] = "Votre sensibilité va et vient, avec des moments de clarté remplaçés subitement Your sensibility comes and goes, with moments of clarity replaced suddenly par des accès de délire, des hallucinations et de la terreur. Faites un <b>Test de Force Mentale Intermédiaire (+0)</b> chaque heure, et consultez la table <b><a class='table-click' data-table='delirium'>Délires</a></b> table.";
|
||||
@@ -28,7 +27,7 @@ const _patch_eis = () => {
|
||||
"script": `
|
||||
if (this.actor.isOwner)
|
||||
args.actor.setupSkill("Résistance", {context : {failure: "1 Point de Corruption reçu", success : "1 Point de Chance gagné"}}).then(setupData => {
|
||||
args.actor.basicTest(setupData).then(test =>
|
||||
args.actor.basicTest(setupData).then(test =>
|
||||
{
|
||||
if (test.result.result == "success" && args.actor.type == "character")
|
||||
{
|
||||
@@ -53,32 +52,32 @@ const _patch_up_in_arms = () => {
|
||||
let batter = game.wfrp4e.config.groupAdvantageActions.find(ga => ga.name == "Batter")
|
||||
if (batter) {
|
||||
batter.name = "Battre"
|
||||
batter.description = "En face d'un adversaire plus expérimenté, quelque fois la force brute peut réussir là où d'autres approches échouent.",
|
||||
batter.effect = "<strong>Action Spéciale</strong>: Pour Battre votre adversaire, vous devez réussir un Test Opposé de Force contre votre adversaire. Celui qui obtient le DR le plus élevé gagne. Si vous gagnez ce Test, votre adversaire reçoit l'état @Condition[A Terre] et vous recevez +1 Avantage. Si vous perdez le Test Opposé, votre opposant gagne +1 Avantage and votre action est terminée. Vous ne gagnez pas d'Avantage due à la victoire d'un test Opposé lorsque vous gagnez ce test (ie 1 seul avantage octroyé au total si le Test Opposé de Force est remporté)."
|
||||
batter.description = "oFQuand vouqs affrontez un opposant plus doué que vous, parfois la force brute peut réussir là où les autres approches ont échoué.",
|
||||
batter.effect = "<strong>Action Spéciale</strong>: pour battre votre adversaire, effectuez un Test opposé de Force contre lui (vous utilisez tout les deux votre Attribut de Force). Si vous remportez le Test, votre adversaire subit l'Etat <i>A Terre</i> et perd -1 Avantage. Si vous perdez le Test, votre adversaire gagne +1 Avantage et votre action se termine. Si vous remportez le Test, vous ne gagnez pas l'Avantage habituel pour avoir remporté un Test Opposé. "
|
||||
}
|
||||
let trick = game.wfrp4e.config.groupAdvantageActions.find(ga => ga.name == "Trick")
|
||||
if (trick) {
|
||||
trick.name = "Duper"
|
||||
trick.description = "Vous prenez un instant pour lancer de la poussière dans les yeux de votre adversaire ou bien lui lancer de l'huile enflammée. Cette manoeuvre est risquée, et peu d'ennemis se font avoir deux fois de la même manière",
|
||||
trick.effect = "<strong>Action Spéciale</strong>: Pour Duper votre adversaire, vous devez réussir un Test Opposé d'Agilité contre lui. Celui qui obtient le plus haut DR gagne le Test. Si vous gagnez le Test, vous recevez +1 Avantage. En fonction des circonstances, le MJ peut vous autoriser à attribuer à votre adversaire l'un des états suivants : @Condition[En Flammes], @Condition[Aveuglé], or @Condition[Empêtré]. Si vous perdez le Test Opposé, votre adversaire gagne +1 Avantage et votre action est terminée. Le MJ peut interdire certains de ces états si vous n'avez d'objet applicables dans votre main, ou bien si vous avez déja infligé un état identique precedemment à cet adversaire. Vous ne gagnez pas d'Avantages due à la victoire d'un test Opposé lorsque vous gagnez ce test (ie 1 seul avantage octroyé au total si le Test Opposé de Force est remporté)."
|
||||
trick.name = "Coup tordu"
|
||||
trick.description = "Vous prenez un instant pour lancer de la terre dans les yeux d'un adversaire ou pour l'enflammer en lui jetant de l'huile en feu dessus. Cette manoeuvre est risquée, et peu d'ennemis tombent deux fois dans le même panneau.",
|
||||
trick.effect = "<strong>Action Spéciale</strong>: Pour duper votre adversaire, effectuez un Test opposé d'Agilité contre lui (vous utilisez tout les deux votre Attribut d'Agilité). Si vous remportez le Test, vous gagnez +1 Avantage. Si le MJ pense que la situation le justifie, vous pouvez aussi forcer votre ennemi à recevoir l'Etat Aveuglé, Empêtré ou En flammes à votre choix.Si vous perdez le Test opposé, votre adversaire gagne +1 Avantage et votre action se termine. Le MJ peut refuser l'utilisation de n'importe lequel de ces Etats si vous n'avez pas d'objet adapté sous la main ou si vous avez déja infligé cet Etat à cet adversaire. Si vous remportez le Test, vous ne gagnez pas l'Avantage habituel pour avoir remporté un Test Opposé."
|
||||
}
|
||||
let addeffort = game.wfrp4e.config.groupAdvantageActions.find(ga => ga.name == "Additional Effort")
|
||||
if (addeffort) {
|
||||
addeffort.name = "Effort Supplémentaire"
|
||||
addeffort.description = "Dans des circonstances désespérées, vous pouvez utiliser l'élan que vous avez acquis pour augmenter vos chances de succès.",
|
||||
addeffort.effect = "<strong>Action Gratuite</strong>: Vous gagnez un bonus de +10% pour n'importe quel test. Vous pouvez dépenser des avantages supplémentaires pour ajouter +10% par Avantage dépensé en plus. Par exemple, vous pouvez dépenser 3 Avantages pour un bonus de +10%, 4 avantages pour un +30%, etc. Le Test qui en découle ne procure jamais d'Avantages pour le personnage qui le réalise."
|
||||
addeffort.name = "Effort supplémentaire"
|
||||
addeffort.description = "Dans une situation désespérée, vous pouvez utiliser l'élan que vous acquis pour augmenter vos chances de succès.",
|
||||
addeffort.effect = "<strong>Bonus à l'action</strong>: vous gagnez un bonus de +10 sur n'importe quel Test avant de l'effectuer. Vous pouvez dépenser des Avantages supplémentaires pour ajouter un bonus de +10 supplémentaire par Avantage dépensé. Par exemple, vous pourriez dépenser 3 Avantages pour obtenir un bonus de +20 ou 4 Avantages pour un bonus de +30. Ce Test ne génère jamais d'Avantage pour la personne qui l'effectue."
|
||||
}
|
||||
let flee = game.wfrp4e.config.groupAdvantageActions.find(ga => ga.name == "Flee from Harm")
|
||||
if (flee) {
|
||||
flee.name = "Fuir le Mal"
|
||||
flee.description = "Vous profitez d'un moment de distraction de votre adversaire pour fuir le combat.",
|
||||
flee.effect = "<strong>Mouvement</strong>: Vous pouvez vous éloignez de votre adversaire sans aucune pénalité. Cela remplace la règle de @UUID[Compendium.wfrp4e-core.journal-entries.NS3YGlJQxwTggjRX.JournalEntryPage.bdfiyhEYtKs7irqc#disengaging]{Désengagement}."
|
||||
flee.name = "Retraite stratégique"
|
||||
flee.description = "Vous profitez d'un temps mort ou d'une diversion pour rompre le combat.",
|
||||
flee.effect = "<strong>Mouvement</strong>: Vous pouvez vous déplaçez pouir vous éloigner de vos adversaires sans pénalité. Cet effet remplace les règles de @UUID[Compendium.wfrp4e-core.journal-entries.NS3YGlJQxwTggjRX.JournalEntryPage.bdfiyhEYtKs7irqc#disengaging]{Désengagement}."
|
||||
}
|
||||
let addaction = game.wfrp4e.config.groupAdvantageActions.find(ga => ga.name == "Additional Action")
|
||||
if (addaction) {
|
||||
addaction.name = "Action Supplémentaire"
|
||||
addaction.description = "Vous profitez d'une opportunité pour accomplir une action remarquable.",
|
||||
addaction.effect = "<strong>Action Gratuite</strong>: Vous réalisez une action supplémentaire. Cette action ne génère jamais d'Avantage pour vous. Vous pouvez réaliser cette dépense d'Avantages seulement une seule fois par Tour."
|
||||
addaction.description = "Vous profitez d'une ouverture pour accomplir quelque chose de remarquable.",
|
||||
addaction.effect = "<strong>Action gratuite</strong>: Vous effectuez une Action supplémentaire. Cette action ne génère jamais d'Avantage pour le personnage qui l'accomplit. Vous ne pouvez dépenser d'Avantages pour effectuer une Action supplémentaire qu'une fois par Tour."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +93,11 @@ const _manage_inn_roll = async (content, msg) => {
|
||||
if (command[0] == "/auberge" && command[1]) {
|
||||
msg["type"] = 0;
|
||||
msg["rollMode"] = "gmroll";
|
||||
var compendium = game.packs.get('wh4-fr-translation.plats-dauberges')
|
||||
const pack = game.packs.get(compendium);
|
||||
let compendium = game.packs.get('wh4-fr-translation.plats-dauberges')
|
||||
game.packs.get(compendium);
|
||||
let rollList = await compendium.getDocuments()
|
||||
//console.log("AUBERGE", rollList)
|
||||
for (var i = 0; i < rollList.length; i++) {
|
||||
var rollTab = rollList[i];
|
||||
for (const element of rollList) {
|
||||
let rollTab = element;
|
||||
console.log("Got compendium...", rollList, rollTab.name);
|
||||
if (rollTab.name.toLowerCase().includes(command[1].toLowerCase())) {
|
||||
let my_rollTable;
|
||||
@@ -123,7 +121,7 @@ let __eis_tables = {
|
||||
"animalmishap": 1, "beasthead": 1, "coincedentalenc": 1, "demonic-mien": 1,
|
||||
"expandedmutatemental": 1, "expandedmutatephys": 1, "fixations": 1,
|
||||
"harmfulenc": 1, "positiveenc": 1, "weather": 1, "mutatephys": 1,
|
||||
"vehiclemishap": 1, "quadruped": 1, "ridingmishap": 1, "weather": 1,
|
||||
"vehiclemishap": 1, "quadruped": 1, "ridingmishap": 1,
|
||||
"delirium": 1
|
||||
}
|
||||
let __dotr_tables = {
|
||||
@@ -195,12 +193,10 @@ const patch_core_tables = (tableList) => {
|
||||
return;
|
||||
}
|
||||
FilePicker.browse("data", "modules/WH4-fr-translation/tables/").then(resp => {
|
||||
for (var file of resp.files) {
|
||||
for (let file of resp.files) {
|
||||
let filename = file.substring(file.lastIndexOf("/") + 1, file.indexOf(".json"))
|
||||
if (tableList[filename] == 1) { // Matching table name -> patch !
|
||||
fetch(file).then(r => r.json()).then(records => {
|
||||
//console.log("Patch !!!", filename, records);
|
||||
//WFRP_Tables[filename] = records;
|
||||
game.wfrp4e.tables[filename] = records;
|
||||
});
|
||||
}
|
||||
@@ -257,26 +253,24 @@ const __check_fix_wrong_modules = (chatFlag, patchFinished) => {
|
||||
});
|
||||
}
|
||||
});
|
||||
if ( !coreFound) {
|
||||
if (!coreFound) {
|
||||
if (game.user.isGM && chatFlag) {
|
||||
ChatMessage.create({
|
||||
content: "<div><strong>Le module Core WFRP4E n'a pas été trouvé ou activé. Veuillez acheter et/ou activer ce module de base avant de continuer.</strong></div>",
|
||||
whisper: ChatMessage.getWhisperRecipients("GM")
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (game.user.isGM && patchFinished) {
|
||||
} else if (game.user.isGM && patchFinished) {
|
||||
ChatMessage.create({
|
||||
content: "<div>Les modules WFRP4E ont été <strong>patchés avec succés</strong>. Vous pouvez y aller et que <strong>Shallya vous garde !</strong></div><div>Derniers changements : Support WFRP4E v8.3.X</div></ul>",
|
||||
user: game.user.id,
|
||||
whisper: ChatMessage.getWhisperRecipients("GM")
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const __history = [
|
||||
"Nouveautés 7.1.6: <ul><li>Traduction des acteurs de EiS et Middenheim grâce à Eltrys et Kyllian !</li></ul>"
|
||||
const __history = [
|
||||
"Nouveautés 9.0.0: <ul><li>Support Foundry v13 et diverses petites corrections !</li></ul>"
|
||||
]
|
||||
|
||||
/************************************************************************************/
|
||||
@@ -307,16 +301,13 @@ const convertColumnToMulti = (table) => {
|
||||
/************************************************************************************/
|
||||
const __patchStyleSheet = () => {
|
||||
for (let styleSheet of document.styleSheets) {
|
||||
if (styleSheet.href && styleSheet.href.includes("wfrp4e.css")) {
|
||||
if (styleSheet?.href.includes("wfrp4e.css")) {
|
||||
let found = 0
|
||||
for (let i = 0; i < styleSheet.cssRules.length; i++) {
|
||||
let rule = styleSheet.cssRules[i]
|
||||
if (rule.selectorText == '.sidebar-popout') {
|
||||
console.log("DELETE RULE", rule)
|
||||
found = i
|
||||
/*rule.cssText = ".sidebar-popout { }"
|
||||
rule.style.width = ""
|
||||
console.log("Found rul2", rule)*/
|
||||
}
|
||||
}
|
||||
styleSheet.deleteRule(found)
|
||||
@@ -328,20 +319,19 @@ const __patchStyleSheet = () => {
|
||||
const __add_actors_translation = () => {
|
||||
const lang = game.settings.get('core', 'language');
|
||||
if (lang == "fr") {
|
||||
let pack_array = [];
|
||||
for (let metadata of game.packs) {
|
||||
if (!game.babele.isTranslated(metadata) &&
|
||||
metadata.collection != "wfrp4e-core.actors" &&
|
||||
metadata.collection != "wfrp4e-core.bestiary" &&
|
||||
metadata.collection != "wfrp4e-ua1.actors" &&
|
||||
metadata.collection != "wfrp4e-altdorf.actors" &&
|
||||
metadata.collection != "wfrp4e-rnhd.actors" &&
|
||||
metadata.collection != "wfrp4e-dotr.actors" &&
|
||||
metadata.collection != "wfrp4e-eis.actors" &&
|
||||
metadata.collection != "wfrp4e-pbtt.actors" &&
|
||||
metadata.collection != "wfrp4e-middenheim.actors" &&
|
||||
metadata.documentName === 'Actor') {
|
||||
//console.log("REPLACE PACK : ", metadata);
|
||||
if (!game.babele.isTranslated(metadata) &&
|
||||
metadata.collection != "wfrp4e-core.actors" &&
|
||||
metadata.collection != "wfrp4e-core.bestiary" &&
|
||||
metadata.collection != "wfrp4e-ua1.actors" &&
|
||||
metadata.collection != "wfrp4e-altdorf.actors" &&
|
||||
metadata.collection != "wfrp4e-rnhd.actors" &&
|
||||
metadata.collection != "wfrp4e-dotr.actors" &&
|
||||
metadata.collection != "wfrp4e-eis.actors" &&
|
||||
metadata.collection != "wfrp4e-pbtt.actors" &&
|
||||
metadata.collection != "wfrp4e-middenheim.actors" &&
|
||||
metadata.collection != "wfrp4e-horned-rat.actors" &&
|
||||
metadata.documentName === 'Actor') {
|
||||
let translations = {
|
||||
"label": metadata.name,
|
||||
"mapping": {
|
||||
@@ -367,7 +357,7 @@ const __add_actors_translation = () => {
|
||||
}
|
||||
}
|
||||
// Close the warning dialog
|
||||
if ( game.wfrp4e.warnDialog) {
|
||||
if (game.wfrp4e.warnDialog) {
|
||||
game.wfrp4e.warnDialog.close();
|
||||
game.wfrp4e.warnDialog = null;
|
||||
}
|
||||
@@ -389,13 +379,13 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
||||
Hooks.on('ready', () => {
|
||||
|
||||
if (game.user.isGM) {
|
||||
game.wfrp4e.warnDialog = new Dialog({
|
||||
game.wfrp4e.warnDialog = new Dialog({
|
||||
title: "Chargement de la traduction FR - Merci d'attendre",
|
||||
content: `<img src="modules/wh4-fr-translation/images/warhammer-v1-logo.webp"><p class="wfrp4-fr-message">Les moines de l'ordre de l'Enclume, associés aux légistes de Talabaheim, préparent la traduction Bretonnienne de ce monde...</h3><p class="wfrp4-fr-message">Merci d'attendre la disparition de ce message pour vaquer dans l'Empire.</p> <p class="wfrp4-fr-message">Si une bénédiction de Shallya apparait dans le tchat, c'est que tout s'est bien passé.</p>`,
|
||||
buttons: {
|
||||
}
|
||||
})
|
||||
game.wfrp4e.warnDialog.render(true, {focus: true, left: 20, top: 20});
|
||||
game.wfrp4e.warnDialog.render(true, { focus: true, left: 20, top: 20 });
|
||||
let chatData = {
|
||||
user: game.user.id,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
@@ -404,10 +394,10 @@ Hooks.on('ready', () => {
|
||||
}
|
||||
ChatMessage.create(chatData);
|
||||
}
|
||||
|
||||
|
||||
// Patch function for effects
|
||||
game.wfrp4e.utility.findKey = warhammer.utility.findKey
|
||||
|
||||
|
||||
/** New modifiers */
|
||||
game.wfrp4e.config.difficultyModifiers = {
|
||||
"veasy": 60,
|
||||
@@ -435,37 +425,10 @@ Hooks.on('ready', () => {
|
||||
"doom": "Maudit (-40)"
|
||||
}
|
||||
|
||||
game.wfrp4e.warnDialog.render(true, {focus: true, left: 20, top: 20});
|
||||
game.wfrp4e.warnDialog.render(true, { focus: true, left: 20, top: 20 });
|
||||
//setTimeout( __check_fix_wrong_modules, 2000, true, false);
|
||||
setTimeout(__check_fix_wrong_modules, 20000, true, true);
|
||||
setTimeout(__add_actors_translation, 21000, false, true);
|
||||
|
||||
//__patchStyleSheet()
|
||||
|
||||
/* ATTEMPT !!
|
||||
loadCompendium("wfrp4e-core.spells").then( comp => {
|
||||
let sorted = {};
|
||||
for (let spell of comp) {
|
||||
if ( !sorted[spell.data.data.lore.value]) {
|
||||
sorted[spell.data.data.lore.value] = [];
|
||||
}
|
||||
sorted[spell.data.data.lore.value].push( foundry.utils.duplicate(spell.data) );
|
||||
}
|
||||
console.log("SORTED", sorted);
|
||||
});*/
|
||||
|
||||
/*
|
||||
let compmod = "wfrp4e";
|
||||
// Check various settings in the installation
|
||||
game.modules.forEach((module, name) => {
|
||||
if ( name == "wfrp4e-core" && module.active) {
|
||||
compmod = "wfrp4e-core";
|
||||
}
|
||||
} );
|
||||
__auto_patch_translation_journal_compendium( compmod )
|
||||
/* Uncomment this to auto-create the translation tables
|
||||
Auto-create translation journal tables
|
||||
__create_translation_tables(compmod);
|
||||
*/
|
||||
|
||||
});
|
||||
|
@@ -3,7 +3,7 @@ import loadScripts from "./loadScripts.js";
|
||||
import statParserFR from "./import-stat-2.js";
|
||||
|
||||
/************************************************************************************/
|
||||
var compmod = "wfrp4e-core";
|
||||
let compmod = "wfrp4e-core";
|
||||
const vo_conditions = {
|
||||
"ablaze": "Ablaze",
|
||||
"bleeding": "Bleeding",
|
||||
@@ -52,7 +52,6 @@ export class WFRP4FrTranslation {
|
||||
}
|
||||
|
||||
static processSpellContent(value) {
|
||||
//console.log("Spell duration/range/damage/target :", value);
|
||||
if (value == "") return ""; // Hop !
|
||||
if (value == "Touch") return "Contact"; // Hop !
|
||||
if (value == "You") return "Vous"; // Hop !
|
||||
@@ -60,7 +59,6 @@ export class WFRP4FrTranslation {
|
||||
let translw = value;
|
||||
let re = /(.*)\s+[Bb]onus\s*(\w*)/i;
|
||||
let res = re.exec(value);
|
||||
//console.log("RES1:", res);
|
||||
let unit = "";
|
||||
if (res) { // Test "<charac> Bonus <unit>" pattern
|
||||
if (res[1]) { // We have char name, then convert it
|
||||
@@ -241,11 +239,9 @@ Hooks.once('init', () => {
|
||||
let translItem = game.babele.translate(compData.metadata.id, { name: skills_list[i], type: "skill" }, true)
|
||||
let transl = translItem?.name || undefined
|
||||
if (!transl) transl = skills_list[i]
|
||||
//console.log("List ...", skills_list[i], compData.metadata.id, translItem);
|
||||
if (transl == skills_list[i]) {
|
||||
let res = re.exec(skills_list[i]);
|
||||
if (res) {
|
||||
//console.log("Matched/split:", res[1], res[2]);
|
||||
let subword = game.i18n.localize(res[2].trim());
|
||||
let s1 = res[1].trim() + " ()";
|
||||
translItem = game.babele.translate(compData.metadata.id, { name: s1, type: "skill" }, true)
|
||||
@@ -308,30 +304,26 @@ Hooks.once('init', () => {
|
||||
if (translated) {
|
||||
for (let data of results) {
|
||||
if (translated[`${data.range[0]}-${data.range[1]}`]) {
|
||||
data.text = translated[`${data.range[0]}-${data.range[1]}`]
|
||||
data.description = translated[`${data.range[0]}-${data.range[1]}`]
|
||||
}
|
||||
}
|
||||
return results
|
||||
}
|
||||
// Auto patch
|
||||
if (results[0].text.includes("wfrp4e-core.career-descriptions")) {
|
||||
if (game.system.version.match("7.")) {
|
||||
results[0].text = "wfrp4e-core.journals"
|
||||
} else {
|
||||
results[0].text = "wfrp4e-core.journal-entries"
|
||||
}
|
||||
if (results[0].description.includes("wfrp4e-core.career-descriptions")) {
|
||||
results[0].description = "wfrp4e-core.journals"
|
||||
}
|
||||
if (results[0].text.includes("wfrp4e-core.journal")) {
|
||||
if (results[0].description.includes("wfrp4e-core.journal")) {
|
||||
for (let data of results) {
|
||||
let career = data.text.match(/{(.*)}/)
|
||||
let career = data.description.match(/{(.*)}/)
|
||||
//console.log(">>>>>", career)
|
||||
if (career?.[1]) {
|
||||
let careerFR = game.babele.converters.career_careergroup(career[1])
|
||||
data.text = data.text.replace(career[1], careerFR)
|
||||
data.description = data.description.replace(career[1], careerFR)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (results[0].documentCollection) {
|
||||
if (results?.[0].documentUuid) {
|
||||
return game.babele.converters.tableResults(results)
|
||||
}
|
||||
return results
|
||||
@@ -364,7 +356,6 @@ Hooks.once('init', () => {
|
||||
if (talents_list[i] === "Inspiring") {
|
||||
translItem = game.babele.translate(compData.metadata.id, { name: "WCXnFSV4WOSmzzc4" }, true);
|
||||
}
|
||||
//console.log("Search talent name:", compData.metadata.id, talents_list[i], translItem);
|
||||
let transl = translItem?.name || undefined
|
||||
if (!transl) transl = talents_list[i]
|
||||
if (transl == talents_list[i]) {
|
||||
@@ -390,7 +381,6 @@ Hooks.once('init', () => {
|
||||
"npc_characteristics": (chars) => { // Auto-convert char names in the sheet
|
||||
for (let key in chars) {
|
||||
let char = chars[key];
|
||||
//console.log("Was here !", key, char );
|
||||
let abrev = char["abrev"];
|
||||
let toTransl = "CHAR." + abrev;
|
||||
if (game.i18n.localize(toTransl) != toTransl) { // Manages unknown language
|
||||
@@ -416,11 +406,10 @@ Hooks.once('init', () => {
|
||||
}
|
||||
//console.log(">>>>>>>> Parsing", trait_en.name)
|
||||
if (trait_en.type == "trait") {
|
||||
//console.log("Trait translation", compmod, trait_en)
|
||||
if (name_en.includes("Tentacles")) { // Process specific Tentacles case
|
||||
let re = /(.d*)x Tentacles/i;
|
||||
let res = re.exec(name_en);
|
||||
if (res && res[1])
|
||||
if (res?.[1])
|
||||
nbt = res[1] + "x ";
|
||||
name_en = "Tentacles";
|
||||
} else if (name_en.includes("(") && name_en.includes(")")) { // Then process specific traits name with (xxxx) inside
|
||||
@@ -454,7 +443,6 @@ Hooks.once('init', () => {
|
||||
for (let compData of validCompendiums) {
|
||||
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
|
||||
if (trait_fr?.system) {
|
||||
//console.log(">>>>> Skill ?", name_en, special, trait_fr.name, trait_fr);
|
||||
trait_fr.name = trait_fr.name || name_en
|
||||
trait_en.name = trait_fr.name + special;
|
||||
trait_en.system.description.value = trait_fr.system.description.value;
|
||||
@@ -466,7 +454,6 @@ Hooks.once('init', () => {
|
||||
for (let compData of validCompendiums) {
|
||||
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
|
||||
if (trait_fr?.system) {
|
||||
//DEBUG : console.log(">>>>> Prayer ?", name_en, special, trait_fr.name );
|
||||
WFRP4FrTranslation.parseSpellContent(trait_en)
|
||||
trait_fr.name = trait_fr.name || name_en
|
||||
trait_en.name = trait_fr.name + special;
|
||||
@@ -481,7 +468,6 @@ Hooks.once('init', () => {
|
||||
for (let compData of validCompendiums) {
|
||||
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
|
||||
if (trait_fr?.system) {
|
||||
//DEBUG : console.log(">>>>> Spell ?", name_en, special, trait_fr);
|
||||
WFRP4FrTranslation.parseSpellContent(trait_en)
|
||||
trait_fr.name = trait_fr.name || name_en
|
||||
trait_en.name = trait_fr.name + special;
|
||||
@@ -546,7 +532,6 @@ Hooks.once('init', () => {
|
||||
for (let compData of validCompendiums) {
|
||||
let trapping_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true);
|
||||
if (trapping_fr?.system) {
|
||||
//console.log(">>>>> Trapping ?", name_en, trapping_fr.name);
|
||||
trait_en.name = trapping_fr.name || trait_en.name
|
||||
if (trapping_fr.system?.description?.value) {
|
||||
trait_en.system.description.value = trapping_fr.system.description.value
|
||||
@@ -571,7 +556,6 @@ Hooks.once('init', () => {
|
||||
"trapping_qualities_flaws": (value) => {
|
||||
if (value) {
|
||||
let newQF = [];
|
||||
//console.log("ATOUTS", value, typeof(value));
|
||||
let list = value
|
||||
if (typeof (value) == "string") {
|
||||
let myList = value.split(",")
|
||||
@@ -651,15 +635,14 @@ Hooks.once('init', () => {
|
||||
if (!translations) return;
|
||||
for (let i = 0; i < effects.length; i++) {
|
||||
let effect = effects[i];
|
||||
//console.log("EFFECT LABEL1:", effect );
|
||||
effect.label = translations['label' + i];
|
||||
}
|
||||
return effects
|
||||
},
|
||||
"diseases_effects": (effects, translations) => {
|
||||
if (!effects) return;
|
||||
for (let i = 0; i < effects.length; i++) {
|
||||
let effect = effects[i];
|
||||
for (const element of effects) {
|
||||
let effect = element;
|
||||
let label = effect.label;
|
||||
let gravity = "";
|
||||
if (label.includes("(") && label.includes(")")) { // Then process specific skills name with (xxxx) inside
|
||||
|
@@ -17,7 +17,6 @@ export class WH4FRPatchConfig {
|
||||
special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword
|
||||
}
|
||||
let compNameFR = game.babele.translate( compendiumName, { name: compName }, true );
|
||||
//console.log(">>>>> Skill ?", compName, special, compNameFR);
|
||||
if (compNameFR.name != compName) { // Translation OK
|
||||
newName = compNameFR.name + special;
|
||||
}
|
||||
@@ -48,7 +47,6 @@ export class WH4FRPatchConfig {
|
||||
special = " (" + game.i18n.localize( res[2].trim() ) + ")"; // And the special keyword
|
||||
}
|
||||
let talentNameFR = game.babele.translate( compendiumName, { name: talentName }, true );
|
||||
//console.log(">>>>> Talent ?", talentName, special, talentNameFR);
|
||||
if (talentNameFR.name != talentName) { // Translation OK
|
||||
newName2 = talentNameFR.name + special;
|
||||
}
|
||||
@@ -67,7 +65,6 @@ export class WH4FRPatchConfig {
|
||||
let subspeciesList = game.wfrp4e.config.subspecies[speciesName];
|
||||
for ( let subspeciesName in subspeciesList) {
|
||||
let subspecies = subspeciesList[subspeciesName];
|
||||
//console.log("Subpecies translate....", subspecies);
|
||||
if ( subspecies.skills) {
|
||||
subspecies.skills = this.translateSkillList(subspecies.skills);
|
||||
}
|
||||
@@ -77,7 +74,7 @@ export class WH4FRPatchConfig {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************************/
|
||||
static patch_species_skills( ) {
|
||||
console.log("Patching species skills....");
|
||||
@@ -92,7 +89,7 @@ export class WH4FRPatchConfig {
|
||||
static patch_species_talents( ) {
|
||||
for (let speciesName in game.wfrp4e.config.speciesTalents) {
|
||||
let speciesTalents = game.wfrp4e.config.speciesTalents[speciesName];
|
||||
game.wfrp4e.config.speciesTalents[speciesName] = this.translateTalentList( speciesTalents);
|
||||
game.wfrp4e.config.speciesTalents[speciesName] = this.translateTalentList( speciesTalents);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +97,7 @@ export class WH4FRPatchConfig {
|
||||
static patch_career() {
|
||||
let compendiumName = 'wfrp4e-core.items'
|
||||
|
||||
if ( game.wfrp4e.tables.career) {
|
||||
if ( game.wfrp4e.tables.career) {
|
||||
for( let row of game.wfrp4e.tables.career.rows) {
|
||||
for ( let key in row) {
|
||||
if (key != "range") {
|
||||
@@ -108,7 +105,6 @@ export class WH4FRPatchConfig {
|
||||
row[key].name = "Tueur Nains";
|
||||
} else if ( row[key].name == 'Duelist' ) {
|
||||
row[key].name = "Duelliste";
|
||||
//console.log(">>>>> Career ?", key, row[key].name, career_fr.name );
|
||||
} else {
|
||||
let career_fr = game.babele.translate( compendiumName, {name: row[key].name}, true );
|
||||
row[key].name = career_fr.name;
|
||||
@@ -121,15 +117,15 @@ export class WH4FRPatchConfig {
|
||||
|
||||
/************************************************************************************/
|
||||
static perform_patch() {
|
||||
|
||||
|
||||
if (game.user.isGM) {
|
||||
let coreC7 = game.modules.find(mod => mod.id == "wfrp4e-core")
|
||||
if (!coreC7 || !coreC7.active) {
|
||||
if (!coreC7?.active) {
|
||||
ui.notifications.warn("Vous n'avez pas activé le module CoreC7 ! La traduction sera donc incomplète et inopérante.")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Detect and patch as necessary
|
||||
if (game.wfrp4e.config?.talentBonuses ) {
|
||||
game.wfrp4e.config.qualityDescriptions["distract"] = game.i18n.localize("WFRP4E.Properties.Distract"); // Patch missing quality
|
||||
@@ -146,7 +142,7 @@ export class WH4FRPatchConfig {
|
||||
"doigts de fée": "dex",
|
||||
"guerrier né": "ws"
|
||||
}
|
||||
|
||||
|
||||
if (game.wfrp4e.config.loreEffects) {
|
||||
game.wfrp4e.config.loreEffects["beasts"].label = "Domaine des Bêtes"
|
||||
game.wfrp4e.config.loreEffects["death"].label = "Domaine de la Mort"
|
||||
@@ -168,8 +164,8 @@ export class WH4FRPatchConfig {
|
||||
game.wfrp4e.config.species["welf"] = "Elfe Sylvain";
|
||||
}
|
||||
|
||||
if (game.wfrp4e.config.charastericticsBonus) {
|
||||
game.wfrp4e.config.charastericticsBonus =
|
||||
if (game.wfrp4e.config.characteristicsBonus) {
|
||||
game.wfrp4e.config.characteristicsBonus =
|
||||
{
|
||||
"ws": "Bonus de Capacité de Combat",
|
||||
"bs": "Bonus de Capacité de Tir",
|
||||
@@ -195,804 +191,6 @@ export class WH4FRPatchConfig {
|
||||
this.patch_subspecies();
|
||||
this.patch_career();
|
||||
|
||||
/*game.wfrp4e.config.conditionScripts = {
|
||||
"ablaze" : async function (actor) {
|
||||
let effect = actor.hasCondition("ablaze")
|
||||
let value = effect.conditionValue;
|
||||
|
||||
let leastProtectedLoc;
|
||||
let leastProtectedValue = 999;
|
||||
for (let loc in actor.status.armour)
|
||||
{
|
||||
if (actor.status.armour[loc].value != undefined && actor.status.armour[loc].value < leastProtectedValue)
|
||||
{
|
||||
leastProtectedLoc = loc;
|
||||
leastProtectedValue = actor.status.armour[loc].value;
|
||||
}
|
||||
}
|
||||
let rollString = `1d10 + ${value - 1}`
|
||||
|
||||
let roll = await new Roll(`${rollString} - ${leastProtectedValue || 0}`).roll();
|
||||
|
||||
let msg = `<h2>${game.i18n.localize("WFRP4E.ConditionName.Ablaze")}</h2><b>${game.i18n.localize("Formula")}</b>: ${rollString}<br><b>${game.i18n.localize("Roll")}</b>: ${roll.terms.map(i => i.total).splice(0, 3).join(" ")}` // Don't show AP in the roll formula
|
||||
|
||||
actor.runEffects("preApplyCondition", {effect, data : {msg, roll, rollString}})
|
||||
value = effect.conditionValue;
|
||||
let damageMsg = (`<br>` + await actor.applyBasicDamage(roll.total, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})).split("")
|
||||
damageMsg.splice(damageMsg.length-1, 1) // Removes the parentheses and adds + AP amount.
|
||||
msg += damageMsg.join("").concat(` + ${leastProtectedValue} ${game.i18n.localize("AP")})`)
|
||||
let messageData = game.wfrp4e.utility.chatDataSetup(msg);
|
||||
messageData.speaker = {alias: actor.data.token.name}
|
||||
actor.runEffects("applyCondition", {effect, data : {messageData}})
|
||||
return messageData
|
||||
},
|
||||
"poisoned": async function (actor) {
|
||||
let effect = actor.hasCondition("poisoned")
|
||||
let msg = `<h2>Empoisonné</h2>`
|
||||
|
||||
actor.runEffects("preApplyCondition", { effect, data: { msg } })
|
||||
let value = effect.conditionValue;
|
||||
msg += await actor.applyBasicDamage(value, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true })
|
||||
let messageData = game.wfrp4e.utility.chatDataSetup(msg);
|
||||
messageData.speaker = { alias: actor.data.token.name }
|
||||
actor.runEffects("applyCondition", { effect, data: { messageData } })
|
||||
return messageData
|
||||
},
|
||||
"bleeding": async function (actor) {
|
||||
let effect = actor.hasCondition("bleeding")
|
||||
let bleedingAmt;
|
||||
let bleedingRoll;
|
||||
let msg = `<h2>Hémorragie</h2>`
|
||||
|
||||
actor.runEffects("preApplyCondition", { effect, data: { msg } })
|
||||
let value = effect.conditionValue;
|
||||
msg += await actor.applyBasicDamage(value, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne: false, suppressMsg: true })
|
||||
|
||||
if (actor.status.wounds.value == 0 && !actor.hasCondition("unconscious")) {
|
||||
await actor.addCondition("unconscious")
|
||||
msg += `<br><b>${actor.data.token.name}</b> tombe inconscient!`
|
||||
}
|
||||
|
||||
if (actor.hasCondition("unconscious")) {
|
||||
bleedingAmt = value;
|
||||
bleedingRoll = new Roll("1d100").roll().total;
|
||||
if (bleedingRoll <= bleedingAmt * 10) {
|
||||
msg += `<br><b>${actor.data.token.name}</b> meurt de la perte de sang! (Lancé ${bleedingRoll})`
|
||||
actor.addCondition("dead")
|
||||
}
|
||||
else if (bleedingRoll % 11 == 0) {
|
||||
msg += `<br><b>${actor.data.token.name}'s</b> cicatrise un peu et élimine 1 Etat Hémorragique (Lancé ${bleedingRoll})`
|
||||
actor.removeCondition("bleeding")
|
||||
}
|
||||
else {
|
||||
msg += `<br>Bleeding Roll: ${bleedingRoll}`
|
||||
}
|
||||
}
|
||||
|
||||
let messageData = game.wfrp4e.utility.chatDataSetup(msg);
|
||||
messageData.speaker = { alias: actor.data.token.name }
|
||||
actor.runEffects("applyCondition", { effect, data: { messageData, bleedingRoll } })
|
||||
return messageData
|
||||
}
|
||||
}*/
|
||||
|
||||
/*game.wfrp4e.config.statusEffects = [
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/bleeding.png",
|
||||
id: "bleeding",
|
||||
label: "Hémorragique",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/poisoned.png",
|
||||
id: "poisoned",
|
||||
label: "Empoisonné",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"effectTrigger": "prefillDialog",
|
||||
"script": "args.prefillModifiers.modifier -= 10 * this.effect.conditionValue",
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/ablaze.png",
|
||||
id: "ablaze",
|
||||
label: "En Flammes",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/deafened.png",
|
||||
id: "deafened",
|
||||
label: "Assourdi",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"effectTrigger": "dialogChoice",
|
||||
"effectData": {
|
||||
"description": "Tests related to hearing",
|
||||
"modifier": "-10 * this.flags.wfrp4e.value"
|
||||
},
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/stunned.png",
|
||||
id: "stunned",
|
||||
label: "Assommé",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"effectTrigger": "prefillDialog",
|
||||
"script": "args.prefillModifiers.modifier -= 10 * this.effect.conditionValue",
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/entangled.png",
|
||||
id: "entangled",
|
||||
label: "Empêtré",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"effectTrigger": "dialogChoice",
|
||||
"effectData": {
|
||||
"description": "Tout les tests relatifs au mouvement",
|
||||
"modifier": "-10 * this.flags.wfrp4e.value"
|
||||
},
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/fatigued.png",
|
||||
id: "fatigued",
|
||||
label: "Extenué",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"script": "args.prefillModifiers.modifier -= 10 * this.effect.conditionValue",
|
||||
"value" : 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/blinded.png",
|
||||
id: "blinded",
|
||||
label: "Aveuglé",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"trigger": "endRound",
|
||||
"effectTrigger": "dialogChoice",
|
||||
"effectData" : {
|
||||
"description" : "Tests related to sight",
|
||||
"modifier" : "-10 * this.flags.wfrp4e.value"
|
||||
},
|
||||
"value": 1,
|
||||
"secondaryEffect" :{
|
||||
"effectTrigger": "targetPrefillDialog",
|
||||
"script": "if (args.item && args.item.attackType=='melee') args.prefillModifiers.modifier += 10 * this.effect.conditionValue",
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/broken.png",
|
||||
id: "broken",
|
||||
label: "Brisé",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"script": "args.prefillModifiers.modifier -= 10 * this.effect.conditionValue",
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/prone.png",
|
||||
id: "prone",
|
||||
label: "A terre",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "dialogChoice",
|
||||
"effectData" : {
|
||||
"description" : "Tests related to movement of any kind",
|
||||
"modifier" : "-20"
|
||||
},
|
||||
"value": null,
|
||||
"secondaryEffect" :{
|
||||
"effectTrigger": "targetPrefillDialog",
|
||||
"script": "if (args.type == 'weapon' && args.item.attackType=='melee') args.prefillModifiers.modifier += 20",
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/fear.png",
|
||||
id: "fear",
|
||||
label: "Peur",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "dialogChoice",
|
||||
"effectData" : {
|
||||
"description" : "Tests to affect",
|
||||
"slBonus" : "-1"
|
||||
},
|
||||
"script" : `
|
||||
if (this.flags.wfrp4e.fearName)
|
||||
this.flags.wfrp4e.effectData.description += " " + this.flags.wfrp4e.fearName
|
||||
else
|
||||
this.flags.wfrp4e.effectData.description += " the source of fear"
|
||||
`,
|
||||
"value": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/surprised.png",
|
||||
id: "surprised",
|
||||
label: "Surpris",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"value": null,
|
||||
"secondaryEffect" :{
|
||||
"effectTrigger": "targetPrefillDialog",
|
||||
"script": "if (args.type == 'weapon' && args.item.attackType=='melee') args.prefillModifiers.modifier += 20",
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/unconscious.png",
|
||||
id: "unconscious",
|
||||
label: "Inconscient",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"value": null
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/conditions/grappling.png",
|
||||
id: "grappling",
|
||||
label: "Empoigné",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"value": null
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
{
|
||||
icon: "systems/wfrp4e/icons/defeated.png",
|
||||
id: "dead",
|
||||
label: "Mort",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"value": null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
]*/
|
||||
|
||||
/*game.wfrp4e.config.systemEffects = {
|
||||
"enc1": {
|
||||
label: "Encombrement 1",
|
||||
icon: "systems/wfrp4e/icons/effects/enc1.png",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prePrepareData",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
args.actor.characteristics.ag.modifier -= 10;
|
||||
args.actor.details.move.value -= 1;
|
||||
if (args.actor.details.move.value < 3)
|
||||
args.actor.details.move.value = 3`
|
||||
}
|
||||
}
|
||||
},
|
||||
"enc2": {
|
||||
label: "Encombrement 2",
|
||||
icon: "systems/wfrp4e/icons/effects/enc2.png",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prePrepareData",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
args.actor.characteristics.ag.modifier -= 20;
|
||||
args.actor.details.move.value -= 2;
|
||||
if (args.actor.details.move.value < 2)
|
||||
args.actor.details.move.value = 2`
|
||||
}
|
||||
}
|
||||
},
|
||||
"enc3": {
|
||||
label: "Encombrement 3",
|
||||
icon: "systems/wfrp4e/icons/effects/enc3.png",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prePrepareData",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
args.actor.details.move.value = 0;`
|
||||
}
|
||||
}
|
||||
},
|
||||
"cold1": {
|
||||
label: "Exposition au Froid 1",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -10 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "",
|
||||
"effectApplication": "actor",
|
||||
"script": ``
|
||||
}
|
||||
}
|
||||
},
|
||||
"cold2": {
|
||||
label: "Exposition au Froid 2",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.s.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.i.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.fel.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.s.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.wp.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "",
|
||||
"effectApplication": "actor",
|
||||
"script": ``
|
||||
}
|
||||
}
|
||||
},
|
||||
"cold3": {
|
||||
label: "Exposition au Froid 3",
|
||||
icon: "",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "oneTime",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
let tb = this.actor.characteristics.t.bonus
|
||||
let damage = new Roll("1d10").roll().total
|
||||
damage -= tb
|
||||
if (damage <= 0) damage = 1
|
||||
if (this.actor.status.wounds.value <= damage)
|
||||
{
|
||||
this.actor.addCondition("unconscious")
|
||||
}
|
||||
this.actor.modifyWounds(-damage)
|
||||
ui.notifications.notify("Encaisse " + damage + " dégats")
|
||||
`
|
||||
}
|
||||
}
|
||||
},
|
||||
"heat1": {
|
||||
label: "Exposition à la chaleur 1",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "",
|
||||
"effectApplication": "actor",
|
||||
"script": ``
|
||||
}
|
||||
}
|
||||
},
|
||||
"heat2": {
|
||||
label: "Exposition à la chaleur 2",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.s.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.i.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.fel.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.s.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.wp.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "",
|
||||
"effectApplication": "actor",
|
||||
"script": ``
|
||||
}
|
||||
}
|
||||
},
|
||||
"heat3": {
|
||||
label: "Exposition à la chaleur 3",
|
||||
icon: "",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "oneTime",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
let tb = this.actor.characteristics.t.bonus
|
||||
let damage = new Roll("1d10").roll().total
|
||||
damage -= tb
|
||||
if (damage <= 0) damage = 1
|
||||
this.actor.modifyWounds(-damage)
|
||||
ui.notifications.notify("Encaisse " + damage + " dégats")
|
||||
`
|
||||
}
|
||||
}
|
||||
},
|
||||
"thirst1": {
|
||||
label: "Assoiffé 1",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.fel.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "",
|
||||
"effectApplication": "actor",
|
||||
"script": ``
|
||||
}
|
||||
}
|
||||
},
|
||||
"thirst2": {
|
||||
label: "Assoiffé 2+",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.s.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.i.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.fel.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.s.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.wp.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "invoke",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
let tb = this.actor.characteristics.t.bonus
|
||||
let damage = new Roll("1d10").roll().total
|
||||
damage -= tb
|
||||
if (damage <= 0) damage = 1
|
||||
this.actor.modifyWounds(-damage)
|
||||
ui.notifications.notify("Encasse " + damage + " dégats")
|
||||
`
|
||||
}
|
||||
}
|
||||
},
|
||||
"starvation1": {
|
||||
label: "Affamé 1",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.s.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.s.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "",
|
||||
"effectApplication": "actor",
|
||||
"script": ``
|
||||
}
|
||||
}
|
||||
},
|
||||
"starvation2": {
|
||||
label: "Affamé 2",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.s.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.i.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.wp.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.fel.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.t.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.s.calculationBonusModifier", mode: 2, value: 1 },
|
||||
{ key: "data.characteristics.wp.calculationBonusModifier", mode: 2, value: 1 },
|
||||
],
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "invoke",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
let tb = this.actor.characteristics.t.bonus
|
||||
let damage = new Roll("1d10").roll().total
|
||||
damage -= tb
|
||||
if (damage <= 0) damage = 1
|
||||
this.actor.modifyWounds(-damage)
|
||||
ui.notifications.notify("Encaisse " + damage + " dégats")
|
||||
`
|
||||
}
|
||||
}
|
||||
},
|
||||
"infighting": {
|
||||
label: "Combat au contact",
|
||||
icon: "modules/wfrp4e-core/icons/talents/in-fighter.png",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prePrepareItem",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
if (args.item.type == "weapon" && args.item.isEquipped)
|
||||
{
|
||||
let weaponLength = args.item.reachNum
|
||||
if (weaponLength > 3)
|
||||
{
|
||||
let improv = duplicate(game.wfrp4e.config.systemItems.improv)
|
||||
improv.system.twohanded.value = args.item.twohanded.value
|
||||
improv.system.offhand.value = args.item.offhand.value
|
||||
args.item.update({"system" : improv.system, name : args.item.name + " (Combat au Contact")})
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
}
|
||||
},
|
||||
"defensive": {
|
||||
label: "Posture Défensive [Compétence]",
|
||||
icon: "",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
let skillName = this.effect.label.substring(this.effect.label.indexOf("[") + 1, this.effect.label.indexOf("]"))
|
||||
if (!this.actor.isOpposing)
|
||||
return
|
||||
if ((args.type == "skill" && args.item.name == skillName) ||
|
||||
(args.type == "weapon" && args.item.skillToUse.name == skillName) ||
|
||||
(args.type == "cast" && skillName == "Langue (Magick)") ||
|
||||
(args.type == "prayer" && skillName == "Prière") ||
|
||||
(args.type == "trait" && args.item.rollable.skill == skillName))
|
||||
args.prefillModifiers.modifier += 20`
|
||||
}
|
||||
}
|
||||
},
|
||||
"dualwielder": {
|
||||
label: "Maniement de 2 armes",
|
||||
icon: "modules/wfrp4e-core/icons/talents/dual-wielder.png",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
if (this.actor.isOpposing)
|
||||
args.prefillModifiers.modifier -= 10`
|
||||
}
|
||||
}
|
||||
},
|
||||
"consumealcohol1": {
|
||||
label: "Résistance à l'alcool 1",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -10 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -10 },
|
||||
]
|
||||
},
|
||||
"consumealcohol2": {
|
||||
label: "Résistance à l'alcool 2",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -20 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -20 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -20 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -20 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -20 },
|
||||
]
|
||||
},
|
||||
"consumealcohol3": {
|
||||
label: "Résistance à l'alcool 3",
|
||||
icon: "",
|
||||
changes: [
|
||||
{ key: "data.characteristics.bs.modifier", mode: 2, value: -30 },
|
||||
{ key: "data.characteristics.ag.modifier", mode: 2, value: -30 },
|
||||
{ key: "data.characteristics.ws.modifier", mode: 2, value: -30 },
|
||||
{ key: "data.characteristics.int.modifier", mode: 2, value: -30 },
|
||||
{ key: "data.characteristics.dex.modifier", mode: 2, value: -30 },
|
||||
]
|
||||
},
|
||||
"stinkingdrunk1": {
|
||||
label: "Courage du Marienbourgeois",
|
||||
icon: "",
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"effectApplication": "actor",
|
||||
"script": `
|
||||
if (args.type=="skill" && args.item.name=="Calme")
|
||||
args.prefillModifiers.modifier += 20`
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
/*game.wfrp4e.config.systemItems = {
|
||||
reload: {
|
||||
type: "extendedTest",
|
||||
name: "",
|
||||
data: {
|
||||
SL: {
|
||||
},
|
||||
test: {
|
||||
value: ""
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
}
|
||||
},
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
reloading: ""
|
||||
}
|
||||
}
|
||||
},
|
||||
improv: {
|
||||
name: "Arme improvisée",
|
||||
type: "weapon",
|
||||
effects: [],
|
||||
data: {
|
||||
damage: { value: "SB + 1" },
|
||||
reach: { value: "personal" },
|
||||
weaponGroup: { value: "basic" },
|
||||
twohanded: { value: false },
|
||||
qualities: { value: "" },
|
||||
flaws: { value: [{ name: "undamaging" }] },
|
||||
special: { value: "" },
|
||||
range: { value: "" },
|
||||
ammunitionGroup: { value: "" },
|
||||
offhand: { value: false },
|
||||
}
|
||||
},
|
||||
stomp: {
|
||||
name: "Piétiner",
|
||||
type: "trait",
|
||||
effects: [],
|
||||
data: {
|
||||
specification: { value: "4" },
|
||||
rollable: { value: true, rollCharacteristic: "ws", bonusCharacteristic: "s", defaultDifficulty: "challenging", damage: true },
|
||||
}
|
||||
},
|
||||
unarmed: {
|
||||
name: "Désarmé",
|
||||
type: "weapon",
|
||||
effects: [],
|
||||
data: {
|
||||
damage: { value: "SB + 0" },
|
||||
reach: { value: "personal" },
|
||||
weaponGroup: { value: "brawling" },
|
||||
twohanded: { value: false },
|
||||
qualities: { value: "" },
|
||||
flaws: { value: [{ name: "undamaging" }] },
|
||||
special: { value: "" },
|
||||
range: { value: "" },
|
||||
ammunitionGroup: { value: "" },
|
||||
offhand: { value: false },
|
||||
}
|
||||
},
|
||||
|
||||
fear: {
|
||||
name: "Peur",
|
||||
type: "extendedTest",
|
||||
data: {
|
||||
completion: { value: 'remove' },
|
||||
description: { type: 'String', label: 'Description', value: '' },
|
||||
failingDecreases: { value: true },
|
||||
gmdescription: { type: 'String', label: 'Description', value: '' },
|
||||
hide: { test: false, progress: false },
|
||||
negativePossible: { value: false },
|
||||
SL: { current: 0, target: 1 },
|
||||
test: { value: 'Calme' }
|
||||
},
|
||||
effects:
|
||||
[{
|
||||
label: "Peur",
|
||||
icon: "systems/wfrp4e/icons/conditions/fear.png",
|
||||
transfer: true,
|
||||
flags: {
|
||||
core: {
|
||||
statusId: "fear"
|
||||
},
|
||||
wfrp4e: {
|
||||
"effectTrigger": "dialogChoice",
|
||||
"effectData": {
|
||||
"description": "Tests affectés",
|
||||
"slBonus": "-1"
|
||||
},
|
||||
"script": `
|
||||
if (this.flags.wfrp4e.fearName)
|
||||
this.flags.wfrp4e.effectData.description += " " + this.flags.wfrp4e.fearName
|
||||
else
|
||||
this.flags.wfrp4e.effectData.description += " the source of fear"
|
||||
`}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
},
|
||||
|
||||
terror: {
|
||||
|
||||
label: "Terreur",
|
||||
icon: "systems/wfrp4e/icons/conditions/terror.png",
|
||||
transfer: true,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
"effectTrigger": "oneTime",
|
||||
"effectApplication": "actor",
|
||||
"terrorValue": 1,
|
||||
"script": `
|
||||
args.actor.setupSkill("Calme").then(setupData =>{
|
||||
args.actor.basicTest(setupData).then(test => {
|
||||
if (test.result.outcome == "failure")
|
||||
{
|
||||
let terror = this.effect.flags.wfrp4e.terrorValue
|
||||
|
||||
if (test.result.SL < 0)
|
||||
terror += Math.abs(test.result.SL)
|
||||
args.actor.addCondition("broken", terror)
|
||||
}
|
||||
args.actor.applyFear(value, name)
|
||||
})
|
||||
})`
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
game.wfrp4e.config.symptomEffects = {
|
||||
"blight": {
|
||||
@@ -1016,7 +214,7 @@ export class WH4FRPatchConfig {
|
||||
if (args.actor.isOwner)
|
||||
{
|
||||
args.actor.setupSkill("Résistance", {absolute: {difficulty}}).then(setupData => {
|
||||
args.actor.basicTest(setupData).then(test =>
|
||||
args.actor.basicTest(setupData).then(test =>
|
||||
{
|
||||
if (test.result.outcome == "failure")
|
||||
args.actor.addCondition("dead")
|
||||
@@ -1067,7 +265,7 @@ export class WH4FRPatchConfig {
|
||||
modifier = -20
|
||||
else
|
||||
modifier = -10
|
||||
|
||||
|
||||
let applicableCharacteristics = ["ws", "bs", "s", "ag", "t", "dex"]
|
||||
if (args.type == "weapon")
|
||||
args.prefillModifiers.modifier += modifier
|
||||
@@ -1095,7 +293,7 @@ export class WH4FRPatchConfig {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"symptom": true,
|
||||
"script": `
|
||||
|
||||
|
||||
let applicableCharacteristics = ["ws", "bs", "s", "fel", "ag", "t", "dex"]
|
||||
|
||||
if (args.type == "weapon")
|
||||
@@ -1226,7 +424,7 @@ export class WH4FRPatchConfig {
|
||||
"effectTrigger": "prefillDialog",
|
||||
"symptom": true,
|
||||
"script": `
|
||||
|
||||
|
||||
if (args.type == "characteristic" && args.item == "fel")
|
||||
args.prefillModifiers.modifier -= 10
|
||||
else if (args.type == "skill")
|
||||
@@ -1251,7 +449,7 @@ export class WH4FRPatchConfig {
|
||||
if (args.actor.isOwner)
|
||||
{
|
||||
args.actor.setupSkill("Résistance", {absolute: {difficulty : "average"}}).then(setupData => {
|
||||
args.actor.basicTest(setupData).then(test =>
|
||||
args.actor.basicTest(setupData).then(test =>
|
||||
{
|
||||
if (test.result.outcome == "failure")
|
||||
fromUuid("Compendium.wfrp4e-core.diseases.kKccDTGzWzSXCBOb").then(disease => {
|
||||
@@ -1340,8 +538,8 @@ export class WH4FRPatchConfig {
|
||||
type: string, 'weapon', 'skill' 'characteristic', etc.
|
||||
item: l'objet du type sus-mentionné
|
||||
options: Autres détails à propos du test (options.rest ou options.mutate par exemple)
|
||||
|
||||
Exemple:
|
||||
|
||||
Exemple:
|
||||
if (args.type == "skill" && args.item.name == "Atléthisme") args.prefillModifiers.modifier += 10`,
|
||||
|
||||
"prePrepareData":
|
||||
@@ -1399,7 +597,7 @@ export class WH4FRPatchConfig {
|
||||
|
||||
actor : l'acteur qui encaisse les dégâts
|
||||
attacker : l'acteur qui porte l'attaque
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
damageType : le type de dégâts sélectionné (ignorer le Bonus d'Endurance, les PA, etc...)
|
||||
`,
|
||||
"applyDamage":
|
||||
@@ -1409,7 +607,7 @@ export class WH4FRPatchConfig {
|
||||
|
||||
actor : l'acteur qui encaisse les dégâts
|
||||
attacker : l'acteur qui porte l'attaque
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
damageType : le type de dégâts sélectionné (ignorer le Bonus d'Endurance, les PA, etc...)
|
||||
totalWoundLoss : les Blessures perdues après calculs
|
||||
AP : les données concernant les PA utilisés
|
||||
@@ -1424,7 +622,7 @@ export class WH4FRPatchConfig {
|
||||
|
||||
actor : l'acteur qui encaisse les dégâts
|
||||
attacker : l'acteur qui porte l'attaque
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
damageType : le type de dégâts sélectionné (ignorer le Bonus d'Endurance, les PA, etc...)
|
||||
`,
|
||||
|
||||
@@ -1435,7 +633,7 @@ export class WH4FRPatchConfig {
|
||||
|
||||
actor : l'acteur qui encaisse les dégâts
|
||||
attacker : l'acteur qui porte l'attaque
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
opposedTest : l'objet qui détaille le Test Opposé
|
||||
damageType : le type de dégâts sélectionné (ignorer le Bonus d'Endurance, les PA, etc...)
|
||||
totalWoundLoss : les Blessures perdues après calculs
|
||||
AP : les données concernant les PA utilisés
|
||||
@@ -1661,8 +859,8 @@ export class WH4FRPatchConfig {
|
||||
type: string, 'weapon', 'skill' 'characteristic', etc.
|
||||
item: l'item du type sus-mentionné
|
||||
options: autres détails à propos du test (options.rest ou options.mutate par exemple)
|
||||
|
||||
Example:
|
||||
|
||||
Example:
|
||||
if (args.type == "skill" && args.item.name == "Atléthisme") args.prefillModifiers.modifier += 10`,
|
||||
|
||||
"endTurn":
|
||||
@@ -1690,8 +888,8 @@ export class WH4FRPatchConfig {
|
||||
|
||||
"this":
|
||||
`
|
||||
|
||||
Tout les effets ont accès à :
|
||||
|
||||
Tout les effets ont accès à :
|
||||
this.actor : l'acteur executant l'effet
|
||||
this.effect : l'effet à executer
|
||||
this.item : l'item qui possède l'effet, si l'effet vient d'un item`
|
||||
|
Reference in New Issue
Block a user