forked from public/foundryvtt-wh4-lang-fr-fr
Amelioration du parser de statblock
This commit is contained in:
@ -56,9 +56,9 @@ const name_val = '(?<name>[a-zA-Z\\s\\-,]*)[\\s\\r\\na-zA-Z]*(?<tiers>.*|[\\(\\)
|
||||
let sectionDataFR = [
|
||||
{ name: "trait", toFind: "Traits\\s*:", secondParse: '(?<name>[a-zöàéè\\s]*)[\\s\\+]*(?<value>.*|[\\+0-9]+)', index: -1 },
|
||||
{ name: "skill", toFind: "Compétences\\s*:", secondParse: '(?<name>[a-zàéè\\s\\(\\)]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "talent", toFind: "Talents\\s*:", secondParse: '(?<name>[a-zöàéè\\-\\(\\)\\s\\/\'’]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "talent", toFind: "Talents\\s*:", secondParse: '(?<name>[a-zöàéè\\-\\!\\(\\)\\s\\/\'’]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "mutation", toFind: "Mutations\\s*:", secondParse: '(?<name>[a-zöàéè\\s]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "trapping", toFind: "Equipement\\s*:", secondParse: '(?<name>[a-zöàéè0-9\\s]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "trapping", toFind: "Equipement\\s*:", secondParse: '(?<name>[a-zöàéè0-9\\s(\\)\\-]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "spell", toFind: "Sorts\\s*\\([a-z\\s]*\\)*:", secondParse: '(?<name>[a-zöàéè\\s]*)', index: -1 },
|
||||
{ name: "spellpetty", toFind: "Spells\\s*\\(Magie Mineure\\)*:", secondParse: '(?<name>[a-zö\\-\\s]*)', index: -1 },
|
||||
{ name: "spellarcane", toFind: "Spells\\s*\\(Arcane[a-z\\s]*\\)*:", secondParse: '(?<name>[a-zö\\-\\s]*)', index: -1 },
|
||||
@ -67,13 +67,17 @@ let sectionDataFR = [
|
||||
let sectionDataUS = [
|
||||
{ name: "trait", toFind: "Traits\\s*:", secondParse: '(?<name>[a-z\\s]*)[\\s\\+]*(?<value>.*|[\\+0-9]+)', index: -1 },
|
||||
{ name: "skill", toFind: "Skills\\s*:", secondParse: '(?<name>[a-z\\s\\(\\)]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "talent", toFind: "Talents\\s*:", secondParse: '(?<name>[a-z\\-\\s\\(\\)\\/\'’]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "talent", toFind: "Talents\\s*:", secondParse: '(?<name>[a-z\\-\\s\\!\\(\\)\\/\'’]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "mutation", toFind: "Mutations\\s*:", secondParse: '(?<name>[a-zö\\s]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "trapping", toFind: "Trappings\\s*:", secondParse: '(?<name>[a-zö0-9\\s]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "trapping", toFind: "Trappings\\s*:", secondParse: '(?<name>[a-zö0-9\\s\\(\\)\\-]*)[\\s\\+]*(?<value>.*|[0-9]+)', index: -1 },
|
||||
{ name: "spellpetty", toFind: "Spells\\s*\\(Petty\\s*[a-z\\s]*\\)*:", secondParse: '(?<name>[a-zö\\-\\s]*)', index: -1 },
|
||||
{ name: "spellarcane", toFind: "Spells\\s*\\(Arcane\\s*[a-z\\s]*\\)*:", secondParse: '(?<name>[a-zö\\-\\s]*)', index: -1 },
|
||||
{ name: "spelllore", toFind: "Spells\\s*\\(Lore\\s*of\\s*(?<lore>[a-z\\s]*)\\)*:", secondParse: '(?<name>[a-zö\\-\\s]*)', index: -1 }
|
||||
]
|
||||
let moneyUS = [ {name:" gold crown", key: "gc"}, {name: " gc", key: "gc"},
|
||||
{name:" silver shilling", key:"ss"}, {name:" ss", key: "ss"}, {name:"/-", key: "ss"}, {name:" brass penny", key: "bp"}, {name:" bp", key: "bp"} ]
|
||||
let moneyFR = [ {name:" couronnes d", key: "gc"}, {name: " co", key: "gc"},
|
||||
{name:" pistoles ", key:"ss"}, {name:" pa", key: "ss"}, {name:"/-", key: "ss"}, {name:" sous de cuivre", key: "bp"}, {name:" sc", key: "bp"} ]
|
||||
let regSep = XRegExp('\\s*,\\s*', 'gi'); // Term separator, with auto trim
|
||||
let regLine1 = XRegExp('[\\r\\n\\.]', 'gi'); // Term separator, with auto trim
|
||||
let regName = XRegExp(name_val, 'gi');
|
||||
@ -178,7 +182,7 @@ async function __findSkill(skillName, value = undefined) {
|
||||
|
||||
/************************************************************************************/
|
||||
async function __findTalent(talentName) {
|
||||
let parseStr = '(?<name>[a-z\\s\\/\']*)[\\s\\+]*(?<specialized>[a-z\\s\\(\\)\'’]*)';
|
||||
let parseStr = '(?<name>[a-z\\s\\!\\/\']*)[\\s\\+]*(?<specialized>[a-z\\s\\(\\)\'’]*)';
|
||||
let talentSplit = XRegExp.exec(talentName, XRegExp(parseStr, 'gi'));
|
||||
let toSearch = talentSplit.name.toLowerCase().trim();
|
||||
|
||||
@ -246,16 +250,19 @@ export default async function statParserFR(statString, type = "npc") {
|
||||
|
||||
// Patch wront/strange carac value before processing
|
||||
statString = statString.replace(/ –/g, " 0")
|
||||
let moneys = { gc: 0, ss: 0, bp: 0 }
|
||||
|
||||
let statNameReg = us_carac
|
||||
let sectionData = sectionDataUS
|
||||
let sectionData = duplicate(sectionDataUS)
|
||||
let skillGrouping = __SkillGroupsUS
|
||||
let moneyLang = moneyUS
|
||||
// Detect French stat block
|
||||
if (statString.includes('CC') && statString.includes('CT') && statString.includes('FM')) {
|
||||
//ui.notifications.warn("Le parsing de stablock en Français n'est pas encore prêt")
|
||||
statNameReg = fr_carac
|
||||
sectionData = sectionDataFR
|
||||
sectionData = duplicate(sectionDataFR)
|
||||
skillGrouping = __SkillGroupsFR
|
||||
moneyLang = moneyFR
|
||||
}
|
||||
|
||||
let reg1 = XRegExp(statNameReg, 'gi')
|
||||
@ -405,6 +412,7 @@ export default async function statParserFR(statString, type = "npc") {
|
||||
if (!itemFound) {
|
||||
ui.notifications.error("Talent non trouvé, à ajouter manuellement : " + name, { permanent: true })
|
||||
}
|
||||
|
||||
} else if (def.name == 'trapping') {
|
||||
itemFound = await __findItem(name, "trapping");
|
||||
if (!itemFound) {
|
||||
@ -415,7 +423,7 @@ export default async function statParserFR(statString, type = "npc") {
|
||||
}
|
||||
if (!itemFound && name) {
|
||||
if (name.toLowerCase().includes("armor") || name.toLowerCase().includes("armure") || name.toLowerCase().includes("armour")) {
|
||||
itemFound = new ItemWfrp4e({ img: "systems/wfrp4e/icons/blank.png", name: name, type: "armor", system: game.system.model.Item.armor })
|
||||
itemFound = new ItemWfrp4e({ img: "systems/wfrp4e/icons/blank.png", name: name, type: "armour", system: game.system.model.Item.armor })
|
||||
} else if (name.toLowerCase().includes("weapon") || name.toLowerCase().includes("arme")) {
|
||||
itemFound = new ItemWfrp4e({ img: "systems/wfrp4e/icons/blank.png", name: name, type: "weapon", system: game.system.model.Item.weapon })
|
||||
} else {
|
||||
@ -427,13 +435,22 @@ export default async function statParserFR(statString, type = "npc") {
|
||||
}
|
||||
itemFound = itemFound.toObject()
|
||||
}
|
||||
// Searching money stuff
|
||||
for (let mondeyDef of moneyLang) {
|
||||
if (name.toLowerCase().includes(mondeyDef.name)) {
|
||||
let regMoney = XRegExp("(\\d+)\\s+" + mondeyDef.name.trim(), 'gi')
|
||||
let moneyParsed = XRegExp.exec(name.toLowerCase(), regMoney)
|
||||
console.log("Parsing money", name, moneyParsed)
|
||||
moneys[mondeyDef.key] += (moneyParsed && moneyParsed[1]) ? Number(moneyParsed[1]) : 0
|
||||
}
|
||||
}
|
||||
} else if (def.name.includes('spell')) {
|
||||
console.log("Found spells section!!!!", name, def, def.lore || "NO LORE")
|
||||
// Lore management, firs pass
|
||||
if ( def.lore ) {
|
||||
if (def.lore) {
|
||||
let newName = name + " (" + def.lore + ")"
|
||||
itemFound = await __findItem(newName, "spell");
|
||||
console.log("Trying to find ", newName, itemFound)
|
||||
//console.log("Trying to find ", newName, itemFound)
|
||||
}
|
||||
if (!itemFound) { // If not found with Lore, try without the lore
|
||||
itemFound = await __findItem(name, "spell");
|
||||
@ -455,14 +472,39 @@ export default async function statParserFR(statString, type = "npc") {
|
||||
}
|
||||
let moneyItems = await game.wfrp4e.utility.allMoneyItems() || [];
|
||||
moneyItems = moneyItems.sort((a, b) => (a.system.coinValue.value > b.system.coinValue.value) ? -1 : 1);
|
||||
moneyItems.forEach(m => m.system.quantity.value = 0)
|
||||
for (let m of moneyItems) {
|
||||
m.system.quantity.value = 0
|
||||
if (m.system.coinValue.value == 1) {
|
||||
m.system.quantity.value += moneys.bp
|
||||
}
|
||||
if (m.system.coinValue.value == 240) {
|
||||
m.system.quantity.value += moneys.gc
|
||||
}
|
||||
if (m.system.coinValue.value == 12) {
|
||||
m.system.quantity.value += moneys.ss
|
||||
}
|
||||
}
|
||||
globalItemList = globalItemList.concat(moneyItems);
|
||||
//console.log("My liste :", globalItemList);
|
||||
//DEBUG : console.log("My liste :", moneyItems, moneys);
|
||||
let name = pnjName;
|
||||
|
||||
let effects = globalItemList.reduce((total, globItem) => total.concat(globItem.effects), [])
|
||||
effects = effects.filter(e => !!e)
|
||||
effects = effects.filter(e => e.transfer)
|
||||
for (let e of effects) {
|
||||
for (let c of e.changes) {
|
||||
// Charac management stuff
|
||||
if (c.key?.includes("characteristics")) {
|
||||
let cKey = c.key.split(".")[2]
|
||||
model.characteristics[cKey].initial -= Number(c.value)
|
||||
}
|
||||
// Move management
|
||||
if (c.key?.includes("move")) {
|
||||
model.details.move.value -= Number(c.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
//DEBUG : console.log("EFFECTS", effects)
|
||||
|
||||
return { name, type, data: model, items: globalItemList, effects }
|
||||
}
|
||||
|
Reference in New Issue
Block a user