Compare commits

...

3 Commits

Author SHA1 Message Date
c51877f945 Fix table import 2024-06-09 17:08:53 +02:00
4ebaad012b Merg scripts properly 2024-06-07 07:09:07 +02:00
8a5c62fafd Fix v12 warnings 2024-06-06 22:46:40 +02:00
21 changed files with 127 additions and 114 deletions

View File

@ -8,7 +8,7 @@
} }
], ],
"url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr", "url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr",
"version": "7.2.0", "version": "7.2.2",
"esmodules": [ "esmodules": [
"modules/babele-register.js", "modules/babele-register.js",
"modules/addon-register.js", "modules/addon-register.js",
@ -117,7 +117,7 @@
} }
], ],
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json", "manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-7.2.0.zip", "download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-7.2.2.zip",
"id": "wh4-fr-translation", "id": "wh4-fr-translation",
"compatibility": { "compatibility": {
"minimum": "11", "minimum": "11",

View File

@ -300,7 +300,7 @@ Hooks.once('init', () => {
} }
} }
if (results[0].documentCollection) { if (results[0].documentCollection) {
return game.babele.instance.converters.tableResults(results) return game.babele.converters.tableResults(results)
} }
return results return results
}, },

File diff suppressed because one or more lines are too long

View File

@ -17,5 +17,5 @@ let scriptLoader = `export default function()
}` }`
fs.writeFileSync(".modules/loadScripts.js", scriptLoader) fs.writeFileSync("./modules/loadScripts.js", scriptLoader)
console.log(`Packed ${count} scripts`); console.log(`Packed ${count} scripts`);

View File

@ -73,7 +73,7 @@ for (let c of choice)
{ {
item = item.toObject() item = item.toObject()
equip(item); equip(item);
items.push(mergeObject(item, (c.diff || {}))) items.push(foundry.utils.mergeObject(item, (c.diff || {})))
} }
else else
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})

View File

@ -13,7 +13,7 @@ let choices = await ItemDialog.create(ItemDialog.objectToArray(symptoms), roll.t
if (choices.length) if (choices.length)
{ {
let symptomEffects = duplicate(game.wfrp4e.config.symptomEffects) let symptomEffects = foundry.utils.duplicate(game.wfrp4e.config.symptomEffects)
let added = [] let added = []
for(let choice of choices) for(let choice of choices)
{ {

View File

@ -1,7 +1,7 @@
let chatData = { whisper: ChatMessage.getWhisperRecipients("GM") } let chatData = { whisper: ChatMessage.getWhisperRecipients("GM") }
let message = "" let message = ""
let wounds = duplicate(this.actor.status.wounds) let wounds = foundry.utils.duplicate(this.actor.status.wounds)
let regenRoll = await new Roll("1d10").roll(); let regenRoll = await new Roll("1d10").roll();
let regen = regenRoll.total; let regen = regenRoll.total;

View File

@ -2,7 +2,7 @@ fromUuid(this.effect.origin).then(caster => {
if (caster) { if (caster) {
if (actor.items.find(it => it.name == game.i18n.localize("Bestial"))) { if (actor.items.find(it => it.name == game.i18n.localize("Bestial"))) {
let healed = caster.characteristics.wp.bonus let healed = caster.characteristics.wp.bonus
let wounds = duplicate(args.actor.status.wounds) let wounds = foundry.utils.duplicate(args.actor.status.wounds)
wounds.value += healed wounds.value += healed
if (wounds.value > wounds.max) if (wounds.value > wounds.max)

View File

@ -30,7 +30,7 @@ else if (roll = 10)
message = `Résultat de ${roll}, gagnez ${item.name}, ${modifier} en Force` message = `Résultat de ${roll}, gagnez ${item.name}, ${modifier} en Force`
dice.toMessage(this.script.getChatData()) dice.toMessage(this.script.getChatData())
let changes = duplicate(this.effect.changes) let changes = foundry.utils.duplicate(this.effect.changes)
changes[0].value = modifier changes[0].value = modifier
this.effect.updateSource({changes}) this.effect.updateSource({changes})

View File

@ -1,4 +1,4 @@
let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: "Goes Prone" }}) let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effect.name}`, context: { failure: "A Terre" }})
await test.roll(); await test.roll();
if (test.failed) if (test.failed)
{ {

View File

@ -109,7 +109,7 @@ for (let c of choice) {
if (item) { if (item) {
item = item.toObject() item = item.toObject()
equip(item); equip(item);
items.push(mergeObject(item, (c.diff || {}))) items.push(foundry.utils.mergeObject(item, (c.diff || {})))
} }
else else
ui.notifications.warn(`Impossible de trouver ${c.name}`, { permanent: true }) ui.notifications.warn(`Impossible de trouver ${c.name}`, { permanent: true })

View File

@ -112,7 +112,7 @@ for (let c of choice)
{ {
item = item.toObject() item = item.toObject()
equip(item); equip(item);
items.push(mergeObject(item, (c.diff || {}))) items.push(foundry.utils.mergeObject(item, (c.diff || {})))
} }
else else
ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${c.name}`, {permanent : true})

View File

@ -1,7 +1,7 @@
let chatData = { whisper: ChatMessage.getWhisperRecipients("GM") } let chatData = { whisper: ChatMessage.getWhisperRecipients("GM") }
let message = "" let message = ""
let wounds = duplicate(this.actor.status.wounds) let wounds = foundry.utils.duplicate(this.actor.status.wounds)
let regenRoll = await new Roll("1d10").roll(); let regenRoll = await new Roll("1d10").roll();
let regen = regenRoll.total; let regen = regenRoll.total;

View File

@ -4,39 +4,32 @@ let targetedItem = this.actor.items.get(this.effect.flags.wfrp4e.itemTargets[0])
let qualities = foundry.utils.deepClone(game.wfrp4e.config.itemQualities); let qualities = foundry.utils.deepClone(game.wfrp4e.config.itemQualities);
let flaws = foundry.utils.deepClone(game.wfrp4e.config.itemFlaws); let flaws = foundry.utils.deepClone(game.wfrp4e.config.itemFlaws);
if (targetedItem.type == "weapon") if (targetedItem.type == "weapon") {
{ foundry.utils.mergeObject(qualities, game.wfrp4e.config.weaponQualities)
mergeObject(qualities, game.wfrp4e.config.weaponQualities) foundry.utils.mergeObject(flaws, game.wfrp4e.config.weaponFlaws)
mergeObject(flaws, game.wfrp4e.config.weaponFlaws)
} }
else if (targetedItem.type == "armour") else if (targetedItem.type == "armour") {
{ foundry.utils.mergeObject(qualities, game.wfrp4e.config.armorQualities)
mergeObject(qualities, game.wfrp4e.config.armorQualities) foundry.utils.mergeObject(flaws, game.wfrp4e.config.armorFlaws)
mergeObject(flaws, game.wfrp4e.config.armorFlaws)
} }
for(let q in qualities) for (let q in qualities) {
{ // If the weapon already has a flaw, don't put it in the dialog
// If the weapon already has a flaw, don't put it in the dialog if (targetedItem.system.properties.qualities[q]) {
if (targetedItem.system.properties.qualities[q]) delete qualities[q]
{ }
delete qualities[q]
}
} }
for(let f in flaws) for (let f in flaws) {
{ // If a weapon doesn't have a flaw, don't put it in the dialog
// If a weapon doesn't have a flaw, don't put it in the dialog if (!targetedItem.system.properties.flaws[f]) {
if (!targetedItem.system.properties.flaws[f]) delete flaws[f]
{ }
delete flaws[f]
}
} }
let added = await ItemDialog.create(ItemDialog.objectToArray(qualities), "unlimited", "Choisissez la Qualité à ajouter"); let added = await ItemDialog.create(ItemDialog.objectToArray(qualities), "unlimited", "Choisissez la Qualité à ajouter");
let removed = [] let removed = []
if (!foundry.utils.isEmpty(flaws)) if (!foundry.utils.isEmpty(flaws)) {
{ removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), "unlimited", "Choisissez le Défaut à enlever");
removed = await ItemDialog.create(ItemDialog.objectToArray(flaws), "unlimited", "Choisissez le Défaut à enlever");
} }
this.effect.updateSource({"flags.wfrp4e.propertiesChanged" : {added : added.map(i => i.id), removed : removed.map(i => i.id)}}) this.effect.updateSource({ "flags.wfrp4e.propertiesChanged": { added: added.map(i => i.id), removed: removed.map(i => i.id) } })

View File

@ -1,11 +1,13 @@
let injury = this.effect.itemTargets[0] let injury = this.effect.itemTargets[0]
if (injury && this.effect.sourceTest.result.outcome == "success") { if (injury && this.effect.sourceTest.result.outcome == "success") {
let days = new Roll(injury.system.duration.value).roll( {async: false} ).total let roll1 = new Roll(injury.system.duration.value)
let num = 1 + Number(this.effect.sourceTest.result.SL); await roll1.roll()
let roll = await new Roll(num+'d10').roll({async: false}) let days = roll1.total
await roll.toMessage(this.script.getChatData()) let num = 1 + Number(this.effect.sourceTest.result.SL);
let newDays = Math.max(days - roll.total, 1) let roll = await new Roll(num + 'd10').roll()
this.actor.updateEmbeddedDocuments("Item", [{_id: injury.id, 'system.duration.value': newDays} ]) await roll.toMessage(this.script.getChatData())
let message = "Blessures réduites à "+newDays+" (-" + roll.total + ") au lieu de "+days let newDays = Math.max(days - roll.total, 1)
this.script.scriptMessage(message) this.actor.updateEmbeddedDocuments("Item", [{ _id: injury.id, 'system.duration.value': newDays }])
let message = "Blessures réduites à " + newDays + " (-" + roll.total + ") au lieu de " + days
this.script.scriptMessage(message)
} }

View File

@ -2,7 +2,7 @@ let aoeDamage = this.effect.sourceTest.result.damage - 5 // Easily handle magic
this.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})) this.script.scriptMessage(await this.actor.applyBasicDamage(aoeDamage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true}))
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Dodge"), {skipTargets: true, appendTitle : ` - Ablaze`}) let test = await this.actor.setupSkill(game.i18n.localize("NAME.Dodge"), {skipTargets: true, appendTitle : ` - En Flammes`})
await test.roll(); await test.roll();

View File

@ -69,7 +69,7 @@ for (let c of choice)
{ {
item = item.toObject() item = item.toObject()
equip(item); equip(item);
items.push(mergeObject(item, (c.diff || {}))) items.push(foundry.utils.mergeObject(item, (c.diff || {})))
} }
else else
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})

View File

@ -94,7 +94,7 @@ for (let c of choice)
{ {
item = item.toObject() item = item.toObject()
equip(item); equip(item);
items.push(mergeObject(item, (c.diff || {}))) items.push(foundry.utils.mergeObject(item, (c.diff || {})))
} }
else else
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})

View File

@ -25,7 +25,7 @@ if (test.failed)
` `
this.script.scriptMessage(msg); this.script.scriptMessage(msg);
let characteristics = duplicate(this.actor.system.characteristics) let characteristics = foundry.utils.duplicate(this.actor.system.characteristics)
characteristics.ws.initial -= ws characteristics.ws.initial -= ws
characteristics.bs.initial -= bs characteristics.bs.initial -= bs

View File

@ -1,30 +1,30 @@
let choice1 = [ let choice1 = [
{ {
type : "skill", type: "skill",
name : "Projectiles (Arc)", name: "Projectiles (Arc)",
diff : { diff: {
system : { system: {
advances : { advances: {
value : 10 value: 10
}
}
} }
}, }
{
type : "weapon",
name : "Arc long",
},
{
type : "ammunition",
name : "Flèche",
} }
},
{
type: "weapon",
name: "Arc long",
},
{
type: "ammunition",
name: "Flèche",
}
] ]
let choice2 = [ let choice2 = [
] ]
let choice = await Dialog.wait({ let choice = await Dialog.wait({
title : "Option", title: "Option",
content : content:
`<p> `<p>
Ajouter l'ption? Ajouter l'ption?
</p> </p>
@ -32,59 +32,53 @@ let choice = await Dialog.wait({
<li>Ranged (Bow) +10 and a Longbow with 12 Arrows</li> <li>Ranged (Bow) +10 and a Longbow with 12 Arrows</li>
</ol> </ol>
`, `,
buttons : { buttons: {
1 : { 1: {
label : "Oui", label: "Oui",
callback : () => { callback: () => {
return choice1; return choice1;
} }
}, },
2 : { 2: {
label : "Non", label: "Non",
callback : () => { callback: () => {
return choice2; return choice2;
} }
}
} }
}
}) })
let updateObj = this.actor.toObject(); let updateObj = this.actor.toObject();
let items = [] let items = []
for (let c of choice) for (let c of choice) {
{ let existing
let existing if (c.type == "skill") {
if (c.type == "skill") existing = updateObj.items.find(i => i.name == c.name && i.type == c.type)
{ if (existing && c.diff?.system?.advances?.value) {
existing = updateObj.items.find(i => i.name == c.name && i.type == c.type) existing.system.advances.value += c.diff.system.advances.value
if (existing && c.diff?.system?.advances?.value)
{
existing.system.advances.value += c.diff.system.advances.value
}
} }
}
if (!existing) if (!existing) {
{ let item = await game.wfrp4e.utility.find(c.name, c.type)
let item = await game.wfrp4e.utility.find(c.name, c.type) if (item) {
if (item) item = item.toObject()
{ equip(item);
item = item.toObject() items.push(foundry.utils.mergeObject(item, (c.diff || {})))
equip(item);
items.push(mergeObject(item, (c.diff || {})))
}
else
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
} }
else
ui.notifications.warn(`Impossible de trouver ${talent}`, { permanent: true })
}
} }
await this.actor.update(updateObj) await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items); this.actor.createEmbeddedDocuments("Item", items);
function equip(item) function equip(item) {
{ if (item.type == "armour")
if (item.type == "armour") item.system.worn.value = true
item.system.worn.value = true else if (item.type == "weapon")
else if (item.type == "weapon") item.system.equipped = true
item.system.equipped = true else if (item.type == "trapping" && item.system.trappingType.value == "clothingAccessories")
else if (item.type == "trapping" && item.system.trappingType.value == "clothingAccessories") item.system.worn = true
item.system.worn = true
} }

View File

@ -0,0 +1,24 @@
local lfs = require"lfs"
local src = "../reference_scripts/"
local dst = "../scripts/"
for file in lfs.dir(src) do
if file == '.' or file == '..' then
else
local fp1 = io.open(dst..file, "r+")
local fp2 = io.open(src..file, "r+")
if fp1 and fp2 then
-- Compare files
local content1 = fp1:read("*all")
local content2 = fp2:read("*all")
if content1 == content2 then
print("Identical files: "..file)
end
fp1:close()
fp2:close()
else
print("Error: Could not open file: "..file)
end
end
end