Files
wfrp-4e-de/scripts/h766UvswLCsxcMow.js
alzer a7f30267fd Sync 621 missing item-effect scripts from FR and translate to German
scripts/ was missing 621 of FR's 2114 effect scripts (referenced via
game.wfrp4e.config.effectScripts by Foundry item id). Copied them all
over so the registry is complete, then translated the 129 that still
contained French user-facing text: skill/talent/trapping name arrays
in NPC-statblock-building scripts, chat/notification messages, and
dialog prompts. Skill/talent/trait names were cross-checked against
the already-translated core compendium rather than translated ad hoc,
since Foundry looks these up by exact document name.

Also fixed real bugs found along the way (present in FR's originals
too, just inherited via the copy):
- Two "let x / let x" duplicate-declaration scripts (SyntaxError)
- A "0rgs.actor" typo (ReferenceError) for "args.actor"
- Two "effet.update(...)" typos for "effect.update(...)"
- A corrupted ui.notifications.warn(...) template literal in 3 of the
  NPC-statblock scripts, mangled into stray leftover code text
- 19 scripts across the whole scripts/ folder (not just the 621) using
  the wrong game.i18n.localize() key (NAME.Résistance/Démoniaque/
  Mort-vivant instead of the actual English key names NAME.Endurance/
  Daemonic/Undead), which silently failed to resolve in any language

Rebuilt modules/loadScripts.js via `npm run build` (2114 scripts).

Known follow-up (out of scope here, pre-existing in the scripts DE
already had before this sync): 7 scripts elsewhere in scripts/ have
unrelated syntax bugs, and one has a lingering French accent.
2026-07-20 23:43:47 +02:00

133 lines
3.2 KiB
JavaScript

let characteristics = {
"ws" : 5,
"bs" : 0,
"s" : -15,
"t" : 0,
"i" : 20,
"ag" : 0,
"dex" : 0,
"int" : 5,
"wp" : 10,
"fel" : 10
}
let skills = ["Charm", "Intimidate", "Melee (Basic)"]
let skillAdvancements = [7, 60, 7]
let talents = ["Menacing", "Shadow"]
let traits = ["Distracting"]
let trappings = []
let items = [];
let spells = [];
let updateObj = this.actor.toObject();
for (let ch in characteristics)
{
updateObj.system.characteristics[ch].modifier += characteristics[ch];
}
for (let index = 0; index < skills.length; index++)
{
let skill = skills[index]
let skillItem;
skillItem = updateObj.items.find(i => i.name == skill && i.type == "skill")
if (skillItem)
skillItem.system.advances.value += skillAdvancements[index]
else
{
skillItem = await game.wfrp4e.utility.findSkill(skill)
skillItem = skillItem.toObject();
skillItem.system.advances.value = skillAdvancements[index];
items.push(skillItem);
}
}
for (let talent of talents)
{
let talentItem = await game.wfrp4e.utility.findTalent(talent)
if (talentItem)
{
items.push(talentItem.toObject());
}
else
{
ui.notifications.warn(`${talent} nicht gefunden`, {permanent : true})
}
}
const traitRegex = /(?:,?(.+?)(\+?\d{1,2}\+?)?\s*?(?:\((.+?)\)\s*(\+?\d{1,2})?|,|$))/gm
for (let trait of traits)
{
let traitMatches = trait.matchAll(traitRegex).next().value
let traitName = traitMatches[1]
let traitVal = traitMatches[2] || traitMatches[4] // could be match 2 or 4 depending on if there's a specialization
let traitSpec = traitMatches[3]
let traitItem;
try {
traitItem = await WFRP_Utility.findItem(traitName, "trait")
}
catch { }
if (!traitItem) {
ui.notifications.warn(`${trait} nicht gefunden`, {permanent : true})
}
traitItem = traitItem.toObject()
if (Number.isNumeric(traitVal))
{
traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;
traitItem.name = (traitItem.name + ` ${traitSpec ? "("+ traitSpec + ")" : ""}`).trim()
}
else
traitItem.system.specification.value = traitSpec
items.push(traitItem)
}
for (let trapping of trappings)
{
let trappingItem = await game.wfrp4e.utility.findItem(trapping)
if (trappingItem)
{
trappingItem = trappingItem.toObject()
equip(trappingItem)
items.push(trappingItem);
}
else
{
ui.notifications.warn(`${trapping} nicht gefunden`, {permanent : true})
}
}
for (let spell of spells)
{
let spellItem = await game.wfrp4e.utility.findItem(spell)
if (spellItem)
{
spellItem = spellItem.toObject()
items.push(spellItem);
}
else
{
ui.notifications.warn(`${spell} nicht gefunden`, {permanent : true})
}
}
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);
function equip(item)
{
if (item.type == "armour")
item.worn = true
else if (item.type == "weapon")
item.equipped = true
else if (item.type == "trapping" && item.trappingType?.value == "clothingAccessories")
item.worn = true
}