Compare commits

...

2 Commits

Author SHA1 Message Date
a27e3894a0 Fix Import entités de cauchemar&créatures
- utiliser les carac liées au type d'entités
- fix: +dom&protection 0 ou négatifs
- fix compétences (qui peuvent ne pas avoir d'init)
2024-12-02 22:21:43 +01:00
ce8616c34e Merge compétences créatures/entités
Les deux compendiums n'avaient pas de raison d'être séparés
2024-12-02 22:21:43 +01:00
23 changed files with 127 additions and 343 deletions

View File

@ -4,6 +4,7 @@ import { SystemCompendiums } from "../settings/system-compendiums.js";
import { RdDBaseActorReve } from "../actor/base-actor-reve.js";
import { Grammar } from "../grammar.js";
import { Misc } from "../misc.js";
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
/************************************************************************************/
// Some internal test strings
@ -291,17 +292,13 @@ export class RdDStatBlockParser {
// Remove all leading and trailing spaces
statString = statString.trim();
let actorType = "personnage";
// TODO: check for entite
let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu'))
if (perception?.value) {
actorType = "creature";
}
let actorType = RdDStatBlockParser.parseActorType(statString);
// Now start carac
let actorData = foundry.utils.deepClone(game.model.Actor[actorType]);
for (let key in game.model.Actor.personnage.carac) {
let caracDef = game.model.Actor.personnage.carac[key];
for (let key in actorData.carac) {
let caracDef = actorData.carac[key];
// Parse the stat string for each caracteristic
let carac = XRegExp.exec(statString, XRegExp(caracDef.label + "\\s+(?<value>\\d+)", 'giu'));
if (carac?.value) {
@ -310,29 +307,13 @@ export class RdDStatBlockParser {
}
// If creature we need to setup additionnal fields
if (actorType == "creature") {
let plusDom = XRegExp.exec(statString, XRegExp("\\+dom\\s+(?<value>\\+\\d+)", 'giu'));
if (plusDom?.values) {
actorData.attributs.plusdom.value = Number(plusDom.value);
}
let protection = XRegExp.exec(statString, XRegExp("protection\\s+(?<value>\\d+)", 'giu'));
if (protection?.value) {
actorData.attributs.protection.value = Number(protection.value);
}
let endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)", 'giu'));
if (endurance?.value) {
actorData.sante.endurance.value = Number(endurance.value);
actorData.sante.endurance.max = Number(endurance.value);
}
let vie = XRegExp.exec(statString, XRegExp("vie\\s+(?<value>\\d+)", 'giu'));
if (vie.value) {
actorData.sante.vie.value = Number(vie.value);
actorData.sante.vie.max = Number(vie.value);
}
let vitesse = XRegExp.exec(statString, XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'giu'));
if (vitesse?.value) {
actorData.attributs.vitesse.value = vitesse.value;
}
switch (actorType) {
case "creature":
RdDStatBlockParser.parseCreature(statString, actorData)
break
case "entite":
RdDStatBlockParser.parseEntite(statString, actorData)
break
}
let items = [];
@ -353,11 +334,8 @@ export class RdDStatBlockParser {
}
}
}
if (actorType == "creature" && skill.init) {
items.push(comp); // Only selective push
}
if (actorType == "personnage") {
items.push(comp); // Always push
if (actorType == "personnage" || skill!= undefined){
items.push(comp)
}
}
@ -418,10 +396,10 @@ export class RdDStatBlockParser {
items.push(sort);
}
});
if (hautRevant) {
if (hautRevant) {
let tetes = await SystemCompendiums.getWorldOrCompendiumItems("tete", "tetes-de-dragon-pour-tous-personnages")
let donHR = tetes.find(t => Grammar.equalsInsensitive(t.name, "Don de Haut-Rêve"))
if (donHR) {
if (donHR) {
items.push(donHR.toObject());
}
}
@ -474,6 +452,63 @@ export class RdDStatBlockParser {
console.log(actorData);
}
static parseCreature(statString, actorData) {
let plusDom = XRegExp.exec(statString, XRegExp("\\+dom\\s+(?<value>[\\+\\-]?\\d+)", 'giu'));
if (plusDom?.values) {
actorData.attributs.plusdom.value = Number(plusDom.value);
}
let protection = XRegExp.exec(statString, XRegExp("protection\\s+(?<value>[\\-]?\\d+)", 'giu'));
if (protection?.value) {
actorData.attributs.protection.value = Number(protection.value);
}
let endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)", 'giu'));
if (endurance?.value) {
actorData.sante.endurance.value = Number(endurance.value);
actorData.sante.endurance.max = Number(endurance.value);
}
let vie = XRegExp.exec(statString, XRegExp("vie\\s+(?<value>\\d+)", 'giu'));
if (vie.value) {
actorData.sante.vie.value = Number(vie.value);
actorData.sante.vie.max = Number(vie.value);
}
let vitesse = XRegExp.exec(statString, XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'giu'));
if (vitesse?.value) {
actorData.attributs.vitesse.value = vitesse.value;
}
}
static parseEntite(statString, actorData) {
let plusDom = XRegExp.exec(statString, XRegExp("\\+dom\\s+(?<value>[\\+\\-]?\\d+)", 'giu'));
if (plusDom?.values) {
actorData.attributs.plusdom.value = Number(plusDom.value);
}
actorData.definition.categorieentite = 'cauchemar'
actorData.definition.typeentite = ENTITE_NONINCARNE
let endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)", 'giu'));
if (endurance?.value) {
actorData.sante.endurance.value = Number(endurance.value);
actorData.sante.endurance.max = Number(endurance.value);
actorData.definition.typeentite = ENTITE_INCARNE
}
let vitesse = XRegExp.exec(statString, XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'giu'));
if (vitesse?.value) {
actorData.attributs.vitesse.value = vitesse.value;
}
}
static parseActorType(statString) {
let niveau = XRegExp.exec(statString, XRegExp("Niveau\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu'))
if (perception?.value) {
return "creature"
}
if (niveau?.value) {
return "entite"
}
return "personnage"
}
static extractName(actorType, statString) {
switch (actorType) {
case "personnage": return RdDStatBlockParser.extractNamePersonnage(statString);

View File

@ -32,7 +32,7 @@ export class SystemCompendiums extends FormApplication {
compendium: compendium,
default: SystemCompendiums._getDefaultCompendium(compendium),
setting: SystemCompendiums._getSettingCompendium(compendium)
});
})
game.settings.register(SYSTEM_RDD, definition.setting, {
name: definition.label,
@ -40,8 +40,8 @@ export class SystemCompendiums extends FormApplication {
scope: "world",
config: false,
type: String
});
});
})
})
game.settings.registerMenu(SYSTEM_RDD, "compendium-settings", {
name: "Choisir les compendiums système",
@ -71,16 +71,18 @@ export class SystemCompendiums extends FormApplication {
static async getCompetences(actorType) {
switch (actorType ?? 'personnage') {
case 'personnage': return await SystemCompendiums.getWorldOrCompendiumItems('competence', 'competences');
case 'creature': return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-creatures');
case 'entite': return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-entites');
case 'personnage':
return await SystemCompendiums.getWorldOrCompendiumItems('competence', 'competences')
case 'entite':
case 'creature':
return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-creatures')
case 'vehicule': return [];
}
}
/* -------------------------------------------- */
static async getWorldOrCompendiumItems(itemType, compendium) {
let items = game.items.filter(it => it.type == itemType);
let items = game.items.filter(it => it.type == itemType)
if (compendium) {
const ids = items.map(it => it.id);
const names = items.map(it => it.name.toLowerCase());
@ -284,7 +286,7 @@ export class CompendiumTableHelpers {
}
/* -------------------------------------------- */
static async tableRowToChatMessage(row, type, options = {showSource: true}) {
static async tableRowToChatMessage(row, type, options = { showSource: true }) {
if (!row) {
return;
}

View File

@ -6,17 +6,16 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: generale
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: false
dommages: 0
mortalite: mortel
carac-value: null
isparade: false
ownership:
default: 0

View File

@ -6,17 +6,16 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: boucliers
iscombat: true
isnaturelle: true
ispossession: false
dommages: 0
mortalite: mortel
carac-value: null
isparade: true
ownership:
default: 0

View File

@ -1,22 +1,21 @@
_id: WsYnwR8GcOxfuCI0
name: Bras-Galet
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/competence_course.webp
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-pierretenue.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: false
dommages: 1
mortalite: mortel
carac-value: null
isparade: false
ownership:
default: 0

View File

@ -6,10 +6,10 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: sans-armes
iscombat: true
isnaturelle: true

View File

@ -6,17 +6,16 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: false
dommages: 1
mortalite: mortel
carac-value: null
isparade: false
ownership:
default: 0

View File

@ -6,9 +6,9 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: dagues
iscombat: true

View File

@ -6,17 +6,16 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: epees-lourdes
iscombat: true
isnaturelle: true
isnaturelle: false
ispossession: false
dommages: 4
mortalite: mortel
carac-value: null
isparade: true
ownership:
default: 0

View File

@ -6,8 +6,8 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
carac_value: 10
niveau: 1
default_diffLibre: 0
categorie: generale
categorie_parade: ''

View File

@ -6,17 +6,16 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: ''
iscombat: false
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: boucliers
iscombat: true
isnaturelle: true
ispossession: false
dommages: 0
mortalite: mortel
carac-value: null
isparade: false
ownership:
default: 0

View File

@ -7,7 +7,7 @@ system:
descriptionmj: ''
carac_value: 14
niveau: 2
default_diffLibre: 0
default_diffLibre: -4
categorie: draconic
categorie_parade: ''
iscombat: true

View File

@ -1,29 +0,0 @@
name: Possession
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp
effects: []
system:
description: <p>L'entit&eacute; tente de prendre possession du corps de sa victime.</p>
descriptionmj: ''
carac_value: 14
niveau: 2
default_diffLibre: 0
categorie: draconic
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: true
dommages: 0
mortalite: mortel
isparade: false
_id: duVgxI3Cdko0KzAj
folder: null
sort: 0
ownership:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!duVgxI3Cdko0KzAj'

View File

@ -6,10 +6,10 @@ effects: []
system:
description: <p>Attaque ou parade avec un tentacule.</p>
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: boucliers
iscombat: true
isnaturelle: true

View File

@ -6,9 +6,9 @@ effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
carac_value: 10
niveau: 1
default_diffLibre: -2
categorie: melee
categorie_parade: ''
iscombat: true

View File

@ -1,29 +0,0 @@
_id: d5SZ09sFaG3cL2Rg
name: Bec
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-beak.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: false
dommages: 0
mortalite: mortel
isparade: false
ownership:
default: 0
folder: null
sort: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!d5SZ09sFaG3cL2Rg'

View File

@ -1,29 +0,0 @@
_id: 0Ms9iKxqigNNpZEx
name: Esquive
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: ''
iscombat: false
isnaturelle: true
ispossession: false
dommages: 0
mortalite: mortel
isparade: false
ownership:
default: 0
folder: null
sort: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!0Ms9iKxqigNNpZEx'

View File

@ -1,29 +0,0 @@
_id: lDZ3qUPKN35ob5TH
name: Grande morsure
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-morsure.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: false
dommages: 2
mortalite: mortel
isparade: false
ownership:
default: 0
folder: null
sort: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!lDZ3qUPKN35ob5TH'

View File

@ -1,29 +0,0 @@
_id: 6eWCVDYLXXO1Z48D
name: Grandes griffes
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-griffes.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: sans-armes
iscombat: true
isnaturelle: true
ispossession: false
dommages: 2
mortalite: mortel
isparade: false
ownership:
default: 0
folder: null
sort: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!6eWCVDYLXXO1Z48D'

View File

@ -1,30 +0,0 @@
_id: 9Y83OsQgeyR5oCdH
name: Griffes
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-griffes.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: sans-armes
iscombat: true
isnaturelle: true
ispossession: false
dommages: 1
mortalite: mortel
carac-value: null
isparade: false
ownership:
default: 0
folder: null
sort: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!9Y83OsQgeyR5oCdH'

View File

@ -1,29 +0,0 @@
_id: j1xHCzfIeYKgXxoH
name: Morsure
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-morsure.webp
effects: []
system:
description: ''
descriptionmj: ''
carac_value: 0
niveau: 0
default_diffLibre: 0
categorie: ''
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: false
dommages: 1
mortalite: mortel
isparade: false
ownership:
default: 0
folder: null
sort: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!j1xHCzfIeYKgXxoH'

View File

@ -1,29 +0,0 @@
name: Possession
type: competencecreature
img: systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp
effects: []
system:
description: <p>L'entit&eacute; tente de prendre possession du corps de sa victime.</p>
descriptionmj: ''
carac_value: 14
niveau: 2
default_diffLibre: -4
categorie: melee
categorie_parade: ''
iscombat: true
isnaturelle: true
ispossession: true
dommages: 0
mortalite: mortel
isparade: false
ownership:
default: 0
folder: null
sort: 0
_id: wDHR5UHWq568lfGa
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
_key: '!items!wDHR5UHWq568lfGa'

View File

@ -115,19 +115,6 @@
},
"flags": {}
},
{
"name": "competences-entites",
"label": "Compétences des Entités",
"system": "foundryvtt-reve-de-dragon",
"path": "packs/competences-entites",
"banner": "systems/foundryvtt-reve-de-dragon/styles/img/ui/compendium_banner.webp",
"type": "Item",
"ownership": {
"PLAYER": "NONE",
"ASSISTANT": "OWNER"
},
"flags": {}
},
{
"name": "sorts-oniros",
"label": "Sorts d'Oniros",
@ -541,7 +528,6 @@
"entites",
"faune-flore-mineraux",
"competences-creatures",
"competences-entites",
"maladies-et-poisons"
]
},