Compare commits

...

25 Commits

Author SHA1 Message Date
fdf28c4978 Fix v12 Wasteland 2025-03-14 14:09:51 +01:00
e0eac58bc9 Fix v12 Wasteland 2025-03-14 14:08:17 +01:00
b463323fbe Add v12 support 2024-05-23 11:38:37 +02:00
bddf772c99 Add v12 support 2024-05-23 11:36:03 +02:00
a716a3b3d1 Enhance stats 2024-02-08 12:57:36 +01:00
5814ef41df First official release 2024-01-08 07:59:19 +01:00
c0fcbe278f First official release 2024-01-08 07:58:04 +01:00
94f7ef8f90 First official release 2024-01-08 07:56:51 +01:00
19409dd547 Import massif des compendiums 2024-01-06 14:05:47 +01:00
217df7ee10 Import massif des compendiums 2024-01-06 14:00:59 +01:00
9990545568 Update fiche creature 2023-12-06 10:14:26 +01:00
d2da332411 Add new translations 2023-12-05 11:12:36 +01:00
028e8bddac Add mutations + update compendiusm 2023-12-04 18:32:55 +01:00
5c889a5153 Fiche de creature 2023-12-02 09:03:58 +01:00
68689add33 Ajout pouvoirs et jets associés 2023-12-01 14:03:04 +01:00
4ed2bcd2ee Ajout pouvoirs et jets associés 2023-12-01 09:50:45 +01:00
0edf336d28 Ajout pouvoirs et jets associés 2023-11-30 22:17:31 +01:00
046cdf4fb2 Ajout pouvoirs et jets associés 2023-11-30 21:27:57 +01:00
cc0faec25e Ajout pouvoirs et jets associés 2023-11-30 18:50:32 +01:00
3419ddf8d6 Add charmes/tours management 2023-11-29 22:21:48 +01:00
5aa117b569 Add charmes/tours management 2023-11-29 22:21:29 +01:00
4b2dd20d49 Add charmes/tours management 2023-11-29 22:14:22 +01:00
3e394734ce Add charmes/tours management 2023-11-29 22:04:17 +01:00
06d0d9b24d Compendiums : Armes et protections 2023-11-28 22:27:34 +01:00
a3c5a9bfec Compendiums : Armes et protections 2023-11-28 22:27:31 +01:00
169 changed files with 1842 additions and 857 deletions

View File

@ -1,11 +1,14 @@
# Système Foundry pour Wasteland (French RPG, Titam France/Sombres Projets)
Système Foundry pour Wasteland (French RPG, Titam France/Sombres Projets)
## EN ## EN
Unofficial system for Wasteland (French version from Titam France). Unofficial system for Wasteland (French RPG from Titam France).
Books are mandatory to play and are available at : http://www.titam-france.fr Books are mandatory to play and are available at : http://www.titam-france.fr
`![alt text](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2024/01/screenshot-wasteland-01.webp "Wasteland")`
## FR ## FR
Système non-officiel pour le JDR Wasteland (Titam France). Système non-officiel pour le JDR Wasteland (Titam France).
@ -16,8 +19,9 @@ Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http:/
# Credits # Credits
Wasteland, le jeu de rôle de Sword & Sorcery, is a property of Titam France/Sombres Projets. Wasteland is a property of Titam France/Sombres Projets.
# Developmement # Developmement
LeRatierBretonnien Code, CSS and automations : LeRatierBretonnien
Compendiums : Pretre, LeRatierBretonnien

BIN
assets/icons/don.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
assets/icons/hubris.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

8
changelog.md Normal file
View File

@ -0,0 +1,8 @@
# 12.0.1
- Fix v12 version
# 11.0.22
- Version initiale
-

View File

@ -1,24 +1,25 @@
{ {
"ACTOR": { "TYPES": {
"TypePersonnage": "Personnage", "Item": {
"TypePNJ": "PNJ" "arme": "Arme",
}, "competence": "Compétence",
"protection": "Protection",
"ITEM": { "monnaie": "Monnaie",
"TypeArme": "Arme", "equipement": "Equipement",
"TypeCompetence": "Compétence", "capacite": "Capacité",
"TypeProtection": "Protection", "origine": "Origine",
"TypeMonnaie": "Monnaie", "heritage": "Héritage",
"TypeEquipement": "Equipement", "metier": "Métier",
"TypeCapacite": "Capacité", "bouclier": "Bouclier",
"TypeOrigine": "Origine", "pouvoir": "Pouvoir",
"TypeHeritage": "Héritage", "artifex": "Artifex",
"TypeMetier": "Métier", "mutation": "Mutation",
"TypeBouclier": "Bouclier", "charme": "Charme",
"TypePouvoir": "Pouvoir", "peuple": "Peuple"
"TypeArtifex": "Artifex", },
"TypeMutation": "Mutation", "Actor": {
"TypeCharme": "Charme", "personnage": "Personnage",
"TypePeuple": "Peuple" "pnj": "PNJ"
}
} }
} }

View File

@ -12,7 +12,7 @@ export class WastelandActorSheet extends ActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return mergeObject(super.defaultOptions, { return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-wasteland", "sheet", "actor"], classes: ["fvtt-wasteland", "sheet", "actor"],
template: "systems/fvtt-wasteland/templates/actor-sheet.html", template: "systems/fvtt-wasteland/templates/actor-sheet.html",
width: 640, width: 640,
@ -25,7 +25,7 @@ export class WastelandActorSheet extends ActorSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
const objectData = duplicate(this.object) const objectData = foundry.utils.duplicate(this.object)
let actorData = objectData let actorData = objectData
let formData = { let formData = {
@ -40,21 +40,32 @@ export class WastelandActorSheet extends ActorSheet {
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)), effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
limited: this.object.limited, limited: this.object.limited,
skills: this.actor.getSkills(), skills: this.actor.getSkills(),
armes: duplicate(this.actor.getWeapons()), armes: foundry.utils.duplicate(this.actor.getWeapons()),
protections: duplicate(this.actor.getArmors()), protections: foundry.utils.duplicate(this.actor.getArmors()),
pouvoirs:duplicate(this.actor.getPouvoirs()), pouvoirs:foundry.utils.duplicate(this.actor.getPouvoirs()),
origine: duplicate(this.actor.getOrigine() || {}), dons: foundry.utils.duplicate(this.actor.getDons()),
heritage: duplicate(this.actor.getHeritage() || {}), hubrises: foundry.utils.duplicate(this.actor.getHubris()),
metier: duplicate(this.actor.getMetier() || {}), tours:foundry.utils.duplicate(this.actor.getTours()),
artifex: foundry.utils.duplicate(this.actor.getArtifex()),
charmes:foundry.utils.duplicate(this.actor.getCharmes()),
peuple: foundry.utils.duplicate(this.actor.getPeuple() || {}),
origine: foundry.utils.duplicate(this.actor.getOrigine() || {}),
heritage: foundry.utils.duplicate(this.actor.getHeritage() || {}),
metier: foundry.utils.duplicate(this.actor.getMetier() || {}),
combat: this.actor.getCombatValues(), combat: this.actor.getCombatValues(),
config: duplicate(game.system.wasteland.config), config: foundry.utils.duplicate(game.system.wasteland.config),
equipements: duplicate(this.actor.getEquipments()), capacites: foundry.utils.duplicate(this.actor.getCapacites()),
monnaies: duplicate(this.actor.getMonnaies()), equipements: foundry.utils.duplicate(this.actor.getEquipments()),
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
mutations: foundry.utils.duplicate(this.actor.getMutations()),
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}), description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
comportement: await TextEditor.enrichHTML(this.object.system.biodata.comportement, {async: true}),
habitat: await TextEditor.enrichHTML(this.object.system.biodata.habitat, {async: true}),
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
editScore: this.options.editScore, editScore: this.options.editScore,
isGM: game.user.isGM isGM: game.user.isGM,
config: game.system.wasteland.config
} }
this.formData = formData; this.formData = formData;
@ -113,6 +124,12 @@ export class WastelandActorSheet extends ActorSheet {
let compId = li.data("item-id") let compId = li.data("item-id")
this.actor.rollCompetence(attrKey, compId) this.actor.rollCompetence(attrKey, compId)
}) })
html.find('.roll-charme').click((event) => {
const li = $(event.currentTarget).parents(".item")
let charmeId = li.data("item-id")
this.actor.rollCharme(charmeId)
})
html.find('.roll-pouvoir').click((event) => { html.find('.roll-pouvoir').click((event) => {
const li = $(event.currentTarget).parents(".item") const li = $(event.currentTarget).parents(".item")
let pouvoirId = li.data("item-id") let pouvoirId = li.data("item-id")

View File

@ -37,11 +37,12 @@ export class WastelandActor extends Actor {
return actor; return actor;
} }
const skills = await WastelandUtility.loadCompendium("fvtt-wasteland.skills")
if (data.type == 'personnage') { if (data.type == 'personnage') {
const skills = await WastelandUtility.loadCompendium("fvtt-wasteland.skills")
data.items = skills.map(i => i.toObject()) data.items = skills.map(i => i.toObject())
} }
if (data.type == 'pnj') { if (data.type == 'creature') {
data.items = skills.filter(i=>i.name.toLowerCase().includes("mêlée")).map(i => i.toObject())
} }
return super.create(data, options); return super.create(data, options);
@ -49,10 +50,10 @@ export class WastelandActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
prepareArme(arme) { prepareArme(arme) {
arme = duplicate(arme) arme = foundry.utils.duplicate(arme)
let combat = this.getCombatValues() let combat = this.getCombatValues()
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") { if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée")) arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
arme.system.attrKey = "pui" arme.system.attrKey = "pui"
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
@ -61,7 +62,7 @@ export class WastelandActor extends Actor {
} }
} }
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") { if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance")) arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
arme.system.attrKey = "adr" arme.system.attrKey = "adr"
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalDegats = arme.system.degats arme.system.totalDegats = arme.system.degats
@ -73,9 +74,9 @@ export class WastelandActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
prepareBouclier(bouclier) { prepareBouclier(bouclier) {
bouclier = duplicate(bouclier) bouclier = foundry.utils.duplicate(bouclier)
let combat = this.getCombatValues() let combat = this.getCombatValues()
bouclier.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée")) bouclier.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
bouclier.system.attrKey = "pui" bouclier.system.attrKey = "pui"
bouclier.system.totalDegats = bouclier.system.degats + "+" + combat.bonusDegatsTotal bouclier.system.totalDegats = bouclier.system.degats + "+" + combat.bonusDegatsTotal
bouclier.system.totalOffensif = this.system.attributs.pui.value + bouclier.system.competence.system.niveau bouclier.system.totalOffensif = this.system.attributs.pui.value + bouclier.system.competence.system.niveau
@ -106,18 +107,46 @@ export class WastelandActor extends Actor {
WastelandUtility.sortArrayObjectsByName(items) WastelandUtility.sortArrayObjectsByName(items)
return items return items
} }
getCharmes() {
let items = this.items.filter(item => item.type=="charme" && item.system?.charmetype == "charme") || []
WastelandUtility.sortArrayObjectsByName(items)
return items
}
getTours() {
let items = this.items.filter(item => item.type=="charme" && item.system?.charmetype == "tour") || []
WastelandUtility.sortArrayObjectsByName(items)
return items
}
getArtifex() {
return this.getItemSorted(["artifex"])
}
getCapacites() {
return this.getItemSorted(["capacite"])
}
getPouvoirs() { getPouvoirs() {
return this.getItemSorted(["pouvoir"]) return this.getItemSorted(["pouvoir"])
} }
getDons() {
return this.getItemSorted(["don"])
}
getHubris() {
return this.getItemSorted(["hubris"])
}
getEquipments() { getEquipments() {
return this.getItemSorted(["equipement"]) return this.getItemSorted(["equipement"])
} }
getMonnaies() { getMonnaies() {
return this.getItemSorted(["monnaie"]) return this.getItemSorted(["monnaie"])
} }
getMutations() {
return this.getItemSorted(["mutation"])
}
getArmors() { getArmors() {
return this.getItemSorted(["protection"]) return this.getItemSorted(["protection"])
} }
getPeuple() {
return this.items.find(item => item.type == "peuple")
}
getOrigine() { getOrigine() {
return this.items.find(item => item.type == "origine") return this.items.find(item => item.type == "origine")
} }
@ -131,7 +160,7 @@ export class WastelandActor extends Actor {
getSkills() { getSkills() {
let comp = [] let comp = []
for (let item of this.items) { for (let item of this.items) {
item = duplicate(item) item = foundry.utils.duplicate(item)
if (item.type == "competence") { if (item.type == "competence") {
item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0) item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0)
item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0) item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0)
@ -193,7 +222,7 @@ export class WastelandActor extends Actor {
if (this.system.sante.base != newSante) { if (this.system.sante.base != newSante) {
this.update({ 'system.sante.base': newSante }) this.update({ 'system.sante.base': newSante })
} }
let newPsyche = (this.system.attributs.cla.value + this.system.attributs.tre.value) * this.system.biodata.psychemultiplier + 5 let newPsyche = ((this.system.attributs.cla.value + this.system.attributs.tre.value) * 2) + 5
if (this.system.psyche.fullmax != newPsyche) { if (this.system.psyche.fullmax != newPsyche) {
this.update({ 'system.psyche.fullmax': newPsyche }) this.update({ 'system.psyche.fullmax': newPsyche })
} }
@ -207,12 +236,17 @@ export class WastelandActor extends Actor {
super._preUpdate(changed, options, user); super._preUpdate(changed, options, user);
} }
/* -------------------------------------------- */
incDecSante(value) {
let sante = foundry.utils.duplicate(this.system.sante)
sante.letaux += value
this.update({ 'system.sante': sante })
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getItemById(id) { getItemById(id) {
let item = this.items.find(item => item.id == id); let item = this.items.find(item => item.id == id);
if (item) { if (item) {
item = duplicate(item) item = foundry.utils.duplicate(item)
} }
return item; return item;
} }
@ -267,7 +301,7 @@ export class WastelandActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
subPointsPsyche(value) { subPointsPsyche(value) {
let psyche = duplicate(this.system.psyche) let psyche = foundry.utils.duplicate(this.system.psyche)
psyche.currentmax -= value psyche.currentmax -= value
this.update( {'system.psyche': psyche}) this.update( {'system.psyche': psyche})
} }
@ -306,13 +340,13 @@ export class WastelandActor extends Actor {
getSubActors() { getSubActors() {
let subActors = []; let subActors = [];
for (let id of this.system.subactors) { for (let id of this.system.subactors) {
subActors.push(duplicate(game.actors.get(id))); subActors.push(foundry.utils.duplicate(game.actors.get(id)));
} }
return subActors; return subActors;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async addSubActor(subActorId) { async addSubActor(subActorId) {
let subActors = duplicate(this.system.subactors); let subActors = foundry.utils.duplicate(this.system.subactors);
subActors.push(subActorId); subActors.push(subActorId);
await this.update({ 'system.subactors': subActors }); await this.update({ 'system.subactors': subActors });
} }
@ -343,7 +377,7 @@ export class WastelandActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async setPredilectionUsed(compId, predIdx) { async setPredilectionUsed(compId, predIdx) {
let comp = this.items.get(compId) let comp = this.items.get(compId)
let pred = duplicate(comp.system.predilections) let pred = foundry.utils.duplicate(comp.system.predilections)
pred[predIdx].used = true pred[predIdx].used = true
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }]) await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
} }
@ -366,7 +400,7 @@ export class WastelandActor extends Actor {
} }
if ( arme.system.totalDefensif > maxDef) { if ( arme.system.totalDefensif > maxDef) {
maxDef = arme.system.totalDefensif maxDef = arme.system.totalDefensif
bestArme = duplicate(arme) bestArme = foundry.utils.duplicate(arme)
} }
} }
return bestArme return bestArme
@ -383,57 +417,66 @@ export class WastelandActor extends Actor {
rollData.canEclatDoubleD20 = true // Always true in Wastelan rollData.canEclatDoubleD20 = true // Always true in Wastelan
rollData.doubleD20 = false rollData.doubleD20 = false
rollData.attributs = WastelandUtility.getAttributs() rollData.attributs = WastelandUtility.getAttributs()
rollData.config = foundry.utils.duplicate(game.system.wasteland.config)
if (attrKey) { if (attrKey) {
rollData.attrKey = attrKey rollData.attrKey = attrKey
if (attrKey != "tochoose") { if (attrKey != "tochoose") {
rollData.actionImg = "systems/fvtt-wasteland/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp" rollData.actionImg = "systems/fvtt-wasteland/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
rollData.attr = duplicate(this.system.attributs[attrKey]) rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
} }
} }
if (compId) { if (compId) {
rollData.competence = duplicate(this.items.get(compId) || {}) rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
rollData.actionImg = rollData.competence?.img rollData.actionImg = rollData.competence?.img
} }
if (compName) { if (compName) {
rollData.competence = duplicate(this.items.find( item => item.name.toLowerCase() == compName.toLowerCase()) || {}) rollData.competence = foundry.utils.duplicate(this.items.find( item => item.name.toLowerCase() == compName.toLowerCase()) || {})
rollData.actionImg = rollData.competence?.img rollData.actionImg = rollData.competence?.img
} }
return rollData return rollData
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollAttribut(attrKey) { async launchRoll(rollData) {
let rollData = this.getCommonRollData(attrKey) console.log("RollData", rollData)
let rollDialog = await WastelandRollDialog.create(this, rollData) let rollDialog = await WastelandRollDialog.create(this, rollData)
rollDialog.render(true) rollDialog.render(true)
} }
/* -------------------------------------------- */
rollAttribut(attrKey) {
let rollData = this.getCommonRollData(attrKey)
this.launchRoll(rollData)
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollCompetence(attrKey, compId) { rollCompetence(attrKey, compId) {
let rollData = this.getCommonRollData(attrKey, compId) let rollData = this.getCommonRollData(attrKey, compId)
console.log("RollDatra", rollData) console.log("RollDatra", rollData)
let rollDialog = await WastelandRollDialog.create(this, rollData) this.launchRoll(rollData)
rollDialog.render(true)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollPouvoir(pouvoirId) { async rollCharme(charmeId) {
let comp = this.items.find(comp => comp.type == "competence" && comp.name.toLowerCase() == "savoir : runes") let rollData = this.getCommonRollData("cla")
if ( !comp) { rollData.charme = foundry.utils.duplicate(this.items.get(charmeId) || {})
ui.notifications.warn("La compétence Savoirs : Runes n'a pas été trouvée, abandon.") rollData.charmeDice = "1d4"
return this.launchRoll(rollData)
}
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
rollData.rune = duplicate(this.items.get(runeId) || {})
rollData.difficulte = rollData.rune?.system?.seuil || 0
rollData.runemode = "prononcer"
rollData.runeame = 1
console.log("runeData", rollData)
let rollDialog = await WastelandRollDialog.create(this, rollData)
rollDialog.render(true)
} }
/* -------------------------------------------- */
async rollPouvoir(pouvoirId) {
let pouvoir = foundry.utils.duplicate(this.items.get(pouvoirId) || {})
if (pouvoir?.system) {
let rollData = this.getCommonRollData(pouvoir.system.attribut, undefined, pouvoir.system.competence)
if (!rollData.competence) {
ui.notifications.error("Le pouvoir " + pouvoir.name + " n'a pas de compétence associée. Editez le pouvoir avec la compétence associée.")
return
}
rollData.pouvoir = pouvoir
rollData.difficulte = pouvoir.system.seuil
this.launchRoll(rollData)
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollArmeOffensif(armeId) { async rollArmeOffensif(armeId) {
let arme = this.items.get(armeId) let arme = this.items.get(armeId)
@ -445,9 +488,7 @@ export class WastelandActor extends Actor {
} }
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id) let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
rollData.arme = arme rollData.arme = arme
console.log("ARME!", rollData) this.launchRoll(rollData)
let rollDialog = await WastelandRollDialog.create(this, rollData)
rollDialog.render(true)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -459,7 +500,7 @@ export class WastelandActor extends Actor {
if (arme.type == "bouclier") { if (arme.type == "bouclier") {
arme = this.prepareBouclier(arme) arme = this.prepareBouclier(arme)
} }
let roll = new Roll(arme.system.totalDegats).roll({ async: false }) let roll = await new Roll(arme.system.totalDegats).roll()
await WastelandUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode")); await WastelandUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
let rollData = { let rollData = {
arme: arme, arme: arme,

View File

@ -10,7 +10,7 @@ export class WastelandCombat extends Combat {
const c = this.combatants.get(ids[cId]); const c = this.combatants.get(ids[cId]);
let id = c._id || c.id; let id = c._id || c.id;
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0 let initBonus = c.actor ? c.actor.getInitiativeScore() : 0
let roll = new Roll("1d10 + "+initBonus).roll({ async: false}) let roll = await new Roll("1d10 + "+initBonus).roll()
await WastelandUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode")) await WastelandUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
//console.log("Init bonus", initBonus, roll.total) //console.log("Init bonus", initBonus, roll.total)
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]); await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]);

View File

@ -6,6 +6,52 @@ export const WASTELAND_CONFIG = {
"echo": "Chemin des Échos", "echo": "Chemin des Échos",
"reflet": "Chemin des Reflets", "reflet": "Chemin des Reflets",
"ame": "Chemin des Âmes", "ame": "Chemin des Âmes",
"mort": "Chemin des Morts" "mort": "Chemin des Morts",
"vie": "Chemin de Vie",
"guerre": "Chemin des guerres",
"horizon": "Chemin vers l'horizon",
"voleurinvisible": "Chemin du Voleur invisible",
"nuit": "Chemin des Nuits",
"oiseaux": "Chemin des Oiseaux"
},
hubrisType: {
"mental": "Mental",
"physique": "Physique",
},
charmetype: {
tour: "Tour",
charme: "Charme",
},
dices: {
"1d4": "1d4",
"1d6": "1d6",
"1d8": "1d8",
"1d10": "1d10",
"1d12": "1d12",
"1d20": "1d20",
},
artifexType: {
"vapeur": "Vapeur",
"mecanique": "Mécanique",
"chimie": "Chimie",
"electricite": "Électricité",
"chimerie": "Chimérie",
},
typeArmeOptions: {
contact: "Arme de contact",
contactjet: "Arme de contact et de Jet",
jet: "Arme de Jet",
tir: "Arme de Tir",
special: "Spécial (capacité/don)"
},
difficulteOptions: {
"0": "Aucune/Inconnue",
"5": "Facile (5)",
"10": "Moyenne (10)",
"15": "Ardue (15)",
"20": "Hasardeuse (20)",
"25": "Insensée (25)",
"30": "Pure Folie (30)"
} }
} }

View File

@ -0,0 +1,26 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { WastelandUtility } from "./wasteland-utility.js";
import { WastelandActorSheet } from "./wasteland-actor-sheet.js";
/* -------------------------------------------- */
export class WastelandCreatureSheet extends WastelandActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-wasteland", "sheet", "creature"],
template: "systems/fvtt-wasteland/templates/creature-sheet.html",
width: 640,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: false
});
}
}

View File

@ -9,7 +9,7 @@ export class WastelandItemSheet extends ItemSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return mergeObject(super.defaultOptions, { return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-wasteland", "sheet", "item"], classes: ["fvtt-wasteland", "sheet", "item"],
template: "systems/fvtt-wasteland/templates/item-sheet.html", template: "systems/fvtt-wasteland/templates/item-sheet.html",
dragDrop: [{ dragSelector: null, dropSelector: null }], dragDrop: [{ dragSelector: null, dropSelector: null }],
@ -48,7 +48,7 @@ export class WastelandItemSheet extends ItemSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async getData() { async getData() {
const objectData = duplicate(this.object) const objectData = foundry.utils.duplicate(this.object)
let itemData = objectData let itemData = objectData
let formData = { let formData = {
title: this.title, title: this.title,
@ -59,7 +59,7 @@ export class WastelandItemSheet extends ItemSheet {
editable: this.isEditable, editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked", cssClass: this.isEditable ? "editable" : "locked",
attributs: WastelandUtility.getAttributs(), attributs: WastelandUtility.getAttributs(),
config: duplicate(game.system.wasteland.config), config: foundry.utils.duplicate(game.system.wasteland.config),
data: itemData.system, data: itemData.system,
system: itemData.system, system: itemData.system,
limited: this.object.limited, limited: this.object.limited,
@ -87,7 +87,7 @@ export class WastelandItemSheet extends ItemSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
postItem() { postItem() {
let chatData = duplicate(WastelandUtility.data(this.item)); let chatData = foundry.utils.duplicate(WastelandUtility.data(this.item));
if (this.actor) { if (this.actor) {
chatData.actor = { id: this.actor.id }; chatData.actor = { id: this.actor.id };
} }
@ -130,26 +130,26 @@ export class WastelandItemSheet extends ItemSheet {
html.find('.edit-prediction').change(ev => { html.find('.edit-prediction').change(ev => {
const li = $(ev.currentTarget).parents(".prediction-item") const li = $(ev.currentTarget).parents(".prediction-item")
let index = li.data("prediction-index") let index = li.data("prediction-index")
let pred = duplicate(this.object.system.predilections) let pred = foundry.utils.duplicate(this.object.system.predilections)
pred[index].name = ev.currentTarget.value pred[index].name = ev.currentTarget.value
this.object.update( { 'data.predilections': pred }) this.object.update( { 'data.predilections': pred })
}) })
html.find('.delete-prediction').click(ev => { html.find('.delete-prediction').click(ev => {
const li = $(ev.currentTarget).parents(".prediction-item") const li = $(ev.currentTarget).parents(".prediction-item")
let index = li.data("prediction-index") let index = li.data("prediction-index")
let pred = duplicate(this.object.system.predilections) let pred = foundry.utils.duplicate(this.object.system.predilections)
pred.splice(index,1) pred.splice(index,1)
this.object.update( { 'data.predilections': pred }) this.object.update( { 'data.predilections': pred })
}) })
html.find('.use-prediction').change(ev => { html.find('.use-prediction').change(ev => {
const li = $(ev.currentTarget).parents(".prediction-item") const li = $(ev.currentTarget).parents(".prediction-item")
let index = li.data("prediction-index") let index = li.data("prediction-index")
let pred = duplicate(this.object.system.predilections) let pred = foundry.utils.duplicate(this.object.system.predilections)
pred[index].used = ev.currentTarget.checked pred[index].used = ev.currentTarget.checked
this.object.update( { 'data.predilections': pred }) this.object.update( { 'data.predilections': pred })
}) })
html.find('#add-predilection').click(ev => { html.find('#add-predilection').click(ev => {
let pred = duplicate(this.object.system.predilections) let pred = foundry.utils.duplicate(this.object.system.predilections)
pred.push( { name: "Nouvelle prédilection", used: false }) pred.push( { name: "Nouvelle prédilection", used: false })
this.object.update( { 'data.predilections': pred }) this.object.update( { 'data.predilections': pred })
}) })

View File

@ -16,6 +16,9 @@ export const defaultItemImg = {
artifex: "systems/fvtt-wasteland/assets/icons/artifact.webp", artifex: "systems/fvtt-wasteland/assets/icons/artifact.webp",
heritage: "systems/fvtt-wasteland/assets/icons/legacy.webp", heritage: "systems/fvtt-wasteland/assets/icons/legacy.webp",
charme: "systems/fvtt-wasteland/assets/icons/charm.webp", charme: "systems/fvtt-wasteland/assets/icons/charm.webp",
peuple: "systems/fvtt-wasteland/assets/icons/people.webp",
don: "systems/fvtt-wasteland/assets/icons/don.webp",
hubris: "systems/fvtt-wasteland/assets/icons/hubris.webp",
} }
/** /**

View File

@ -11,7 +11,7 @@
import { WastelandActor } from "./wasteland-actor.js"; import { WastelandActor } from "./wasteland-actor.js";
import { WastelandItemSheet } from "./wasteland-item-sheet.js"; import { WastelandItemSheet } from "./wasteland-item-sheet.js";
import { WastelandActorSheet } from "./wasteland-actor-sheet.js"; import { WastelandActorSheet } from "./wasteland-actor-sheet.js";
//import { WastelandNPCSheet } from "./wasteland-npc-sheet.js"; import { WastelandCreatureSheet } from "./wasteland-creature-sheet.js";
import { WastelandUtility } from "./wasteland-utility.js"; import { WastelandUtility } from "./wasteland-utility.js";
import { WastelandCombat } from "./wasteland-combat.js"; import { WastelandCombat } from "./wasteland-combat.js";
import { WastelandItem } from "./wasteland-item.js"; import { WastelandItem } from "./wasteland-item.js";
@ -28,7 +28,7 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
// preload handlebars templates // preload handlebars templates
WastelandUtility.preloadHandlebarsTemplates(); WastelandUtility.preloadHandlebarsTemplates();
/* -------------------------------------------- */ /* -------------------------------------------- */
// Set an initiative formula for the system // Set an initiative formula for the system
CONFIG.Combat.initiative = { CONFIG.Combat.initiative = {
@ -54,13 +54,13 @@ Hooks.once("init", async function () {
// Register sheet application classes // Register sheet application classes
Actors.unregisterSheet("core", ActorSheet); Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("fvtt-wasteland", WastelandActorSheet, { types: ["personnage"], makeDefault: true }) Actors.registerSheet("fvtt-wasteland", WastelandActorSheet, { types: ["personnage"], makeDefault: true })
//Actors.registerSheet("fvtt-wasteland", WastelandNPCSheet, { types: ["npc"], makeDefault: false }); Actors.registerSheet("fvtt-wasteland", WastelandCreatureSheet, { types: ["creature"], makeDefault: false });
Items.unregisterSheet("core", ItemSheet); Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("fvtt-wasteland", WastelandItemSheet, { makeDefault: true }) Items.registerSheet("fvtt-wasteland", WastelandItemSheet, { makeDefault: true })
WastelandUtility.init(); WastelandUtility.init();
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -69,36 +69,22 @@ function welcomeMessage() {
user: game.user.id, user: game.user.id,
whisper: [game.user.id], whisper: [game.user.id],
content: `<div id="welcome-message-Wasteland"><span class="rdd-roll-part"> content: `<div id="welcome-message-Wasteland"><span class="rdd-roll-part">
<strong>Bienvenue dans les Jeunes Royaumes de Wasteland !</strong> <strong>Bienvenue dans les Wasteland !</strong>
<p>Les livres de Wasteland sont nécessaires pour jouer : https://www.titam-france.fr</p> <p>Les livres de Wasteland sont nécessaires pour jouer : https://www.titam-france.fr</p>
<p>Wasteland est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p> <p>Wasteland est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p> <p>Système développé par LeRatierBretonnien, avec le support de Prêtre. Plus d'infos et aides sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
` }); ` });
} }
/* -------------------------------------------- */
// Register world usage statistics
function registerUsageCount( registerKey ) {
if ( game.user.isGM ) {
game.settings.register(registerKey, "world-key", {
name: "Unique world key",
scope: "world",
config: false,
default: "",
type: String
});
let worldKey = game.settings.get(registerKey, "world-key") /* -------------------------------------------- */
if ( worldKey == undefined || worldKey == "" ) { async function importDefaultScene() {
worldKey = randomID(32) let exists = game.scenes.find(j => j.name == "Accueil");
game.settings.set(registerKey, "world-key", worldKey ) if (!exists) {
} const scenes = await WastelandUtility.loadCompendium("fvtt-wasteland.scenes")
// Simple API counter let newDocuments = scenes.filter(i => i.name == "Accueil");
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"` await game.scenes.documentClass.create(newDocuments);
//$.ajaxSetup({ game.scenes.find(i => i.name == "Accueil").activate();
//headers: { 'Access-Control-Allow-Origin': '*' }
//})
$.ajax(regURL)
} }
} }
@ -108,6 +94,7 @@ function registerUsageCount( registerKey ) {
Hooks.once("ready", function () { Hooks.once("ready", function () {
WastelandUtility.ready(); WastelandUtility.ready();
// User warning // User warning
if (!game.user.isGM && game.user.character == undefined) { if (!game.user.isGM && game.user.character == undefined) {
ui.notifications.info("Attention ! Aucun personnage n'est relié au joueur !"); ui.notifications.info("Attention ! Aucun personnage n'est relié au joueur !");
@ -116,9 +103,24 @@ Hooks.once("ready", function () {
user: game.user._id user: game.user._id
}); });
} }
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
registerUsageCount('fvtt-wasteland') ui.notifications.info("Le token de du joueur n'est pas connecté à l'acteur !");
ChatMessage.create({
content: "<b>ATTENTION</b> Le token du joueur " + game.user.name + " n'est pas connecté à l'acteur !",
user: game.user._id
});
}
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
console.log("ClassCounter loaded", moduleCounter)
moduleCounter.ClassCounter.registerUsageCount()
}).catch(err=>
console.log("No stats available, giving up.")
)
welcomeMessage(); welcomeMessage();
importDefaultScene();
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -3,35 +3,51 @@ import { WastelandUtility } from "./wasteland-utility.js";
export class WastelandRollDialog extends Dialog { export class WastelandRollDialog extends Dialog {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async create(actor, rollData ) { static async create(actor, rollData) {
let options = { classes: ["WastelandDialog"], width: 340, height: 'fit-content', 'z-index': 99999 }; let options = { classes: ["WastelandDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
let html = await renderTemplate('systems/fvtt-wasteland/templates/roll-dialog-generic.html', rollData); let html = await renderTemplate('systems/fvtt-wasteland/templates/roll-dialog-generic.html', rollData);
return new WastelandRollDialog(actor, rollData, html, options ); return new WastelandRollDialog(actor, rollData, html, options);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
constructor(actor, rollData, html, options, close = undefined) { constructor(actor, rollData, html, options, close = undefined) {
let buttons = {
rolld10: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d10",
callback: () => { this.roll("1d10") }
},
rolld20: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d20",
callback: () => { this.roll("1d20") }
},
cancel: {
icon: '<i class="fas fa-times"></i>',
label: "Annuler",
callback: () => { this.close() }
}
}
if (rollData.charme) {
buttons = {
roll: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer",
callback: () => { this.roll() }
},
cancel: {
icon: '<i class="fas fa-times"></i>',
label: "Annuler",
callback: () => { this.close() }
}
}
}
let conf = { let conf = {
title: "Test de Capacité", title: "Test de Capacité",
content: html, content: html,
buttons: { buttons: buttons,
rolld10: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d10",
callback: () => { this.roll("1d10") }
},
rolld20: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d20",
callback: () => { this.roll("1d20") }
},
cancel: {
icon: '<i class="fas fa-times"></i>',
label: "Annuler",
callback: () => { this.close() }
} },
close: close close: close
} }
@ -42,9 +58,9 @@ export class WastelandRollDialog extends Dialog {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
roll ( dice) { roll(dice) {
this.rollData.mainDice = dice this.rollData.mainDice = dice
WastelandUtility.rollWasteland( this.rollData ) WastelandUtility.rollWasteland(this.rollData)
} }
@ -56,24 +72,28 @@ export class WastelandRollDialog extends Dialog {
function onLoad() { function onLoad() {
} }
$(function () { onLoad(); }); $(function () { onLoad(); });
html.find('#modificateur').change(async (event) => { html.find('#modificateur').change(async (event) => {
this.rollData.modificateur = Number(event.currentTarget.value) this.rollData.modificateur = Number(event.currentTarget.value)
}) })
html.find('#difficulte').change(async (event) => { html.find('#difficulte').change(async (event) => {
this.rollData.difficulte = Number(event.currentTarget.value) this.rollData.difficulte = Number(event.currentTarget.value)
}) })
html.find('#attrKey').change(async (event) => { html.find('#attrKey').change(async (event) => {
this.rollData.attrKey = String(event.currentTarget.value) this.rollData.attrKey = String(event.currentTarget.value)
}) })
html.find('#runemode').change(async (event) => { html.find('#runemode').change(async (event) => {
this.rollData.runemode = String(event.currentTarget.value) this.rollData.runemode = String(event.currentTarget.value)
}) })
html.find('#runeame').change(async (event) => { html.find('#runeame').change(async (event) => {
this.rollData.runeame = Number(event.currentTarget.value) this.rollData.runeame = Number(event.currentTarget.value)
}) })
html.find('#doubleD20').change(async (event) => { html.find('#doubleD20').change(async (event) => {
this.rollData.doubleD20 = event.currentTarget.checked this.rollData.doubleD20 = event.currentTarget.checked
}) })
html.find('#charmeDice').change(async (event) => {
this.rollData.charmeDice = String(event.currentTarget.value)
})
} }
} }

View File

@ -2,6 +2,20 @@
import { WastelandCombat } from "./wasteland-combat.js"; import { WastelandCombat } from "./wasteland-combat.js";
import { WastelandCommands } from "./wasteland-commands.js"; import { WastelandCommands } from "./wasteland-commands.js";
/* -------------------------------------------- */
const __contrecouptCharme = {
1 : {name: "Effet chromatique", description: "le corps du kobold prend des teintes aussi étranges que voyantes. L'effet sestompe progressivement et 24 heures plus tard, le kobold retrouve ses couleurs dorigine." },
3 : {name: "Enivrement Kobold", description: "très excité par son premier tour, le kobold doit immédiatement faire un autre tour, pour lequel il emploiera un dé plus gros." },
5 : {name: "Mutisme superstitieux", description: "le kobold ne doit plus parler» pendant les prochaines 24 heures. S'il le fait malgré tout, les effets de son tour sarrêtent." },
7 : {name: "Agité!", description: "le kobold ne tient plus en place. Il ne peut se reposer pendant les prochaines 12 heures. Dès. que 12 heures se sont écoulées, il s'effondre comme une masse et dort 12 heures d'affilée dun sommeil enchanté dont rien ne pourra le réveiller." },
9 : {name: "Somnolence", description: "le kobold devient somnolent. Il narrive pas à se concentrer même sur une tâche simple, bäille sans arrêt, traîne les pieds et nagit plus que de mauvaise grâce. Cela dure jusquà ce qu'il ait dormi au moins 12 heures." },
11 : {name: "Manie incontrôlable", description: "le kobold est pris dune manie incontrôlable. Dès qu'il voit un chapeau rouge, il doit suivre son porteur. Il ne mangera que si son voisin de gauche mange aussi, etc. Cela dure pendant une jour- née puis leffet sinverse pendant une heure : il ne suivra jamais un chapeau rouge, ne mangera jamais si son voi- sin de gauche mange, etc. Le contrecoup prend alors fin." },
13 : {name: "Malédiction des Ternes", description: "le kobold perd cette qualité mystérieuse qui fait que les kobolds sont des kobolds et devient tout. Terne. Il perd 1d20 point(s) de Bonne Aventure (sil doit en perdre plus qu'il nen a, il tombe simplement à 0). Ces points perdus pourront cependant être regagnés normalement." },
15 : {name: "La petite Mort", description: "le kobold s'endort pour 1420 heures. Rien ni personne ne pourra le tirer de ce sommeil enchanté avant que ce contrecoup ne prenne fin." },
17 : {name: "Angoisse cauchemardesque", description: "le kobold a une brève vision de pure horreur. Il perd 1420 points de Psyché {s'il doit en perdre plus qu'il nen a, il tombe à 0)." },
19 : {name: "Anémie Kobold", description: "le kobold se met à saigner du nez, des oreilles et même dautres endroits. Il perd 1420 point(s) de Santé." }
}
/* -------------------------------------------- */ /* -------------------------------------------- */
export class WastelandUtility { export class WastelandUtility {
@ -14,9 +28,6 @@ export class WastelandUtility {
Hooks.on("getCombatTrackerEntryContext", (html, options) => { Hooks.on("getCombatTrackerEntryContext", (html, options) => {
WastelandUtility.pushInitiativeOptions(html, options); WastelandUtility.pushInitiativeOptions(html, options);
}) })
Hooks.on("dropCanvasData", (canvas, data) => {
WastelandUtility.dropItemOnToken(canvas, data)
});
this.rollDataStore = {} this.rollDataStore = {}
this.defenderStore = {} this.defenderStore = {}
@ -100,6 +111,28 @@ export class WastelandUtility {
static async ready() { static async ready() {
const skills = await WastelandUtility.loadCompendium("fvtt-wasteland.skills") const skills = await WastelandUtility.loadCompendium("fvtt-wasteland.skills")
this.skills = skills.map(i => i.toObject()) this.skills = skills.map(i => i.toObject())
game.system.wasteland.config.listeNiveauSkill = WastelandUtility.createDirectOptionList(0, 10)
game.system.wasteland.config.listeNiveauCreature = WastelandUtility.createDirectOptionList(0, 35)
game.system.wasteland.config.modificateurOptions = WastelandUtility.createArrayOptionList(-15, 15)
game.system.wasteland.config.pointsAmeOptions = WastelandUtility.createDirectOptionList(0, 20)
}
/* -------------------------------------------- */
static createDirectOptionList(min, max) {
let options = {};
for (let i = min; i <= max; i++) {
options[`${i}`] = `${i}`;
}
return options;
}
static createArrayOptionList(min, max) {
let options = [];
for (let i = min; i <= max; i++) {
options.push({key:`${i}`, label:`${i}`});
}
return options;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -128,7 +161,7 @@ export class WastelandUtility {
let rollData = message.getFlag("world", "wasteland-roll") let rollData = message.getFlag("world", "wasteland-roll")
let actor = WastelandUtility.getActorFromRollData(rollData) let actor = WastelandUtility.getActorFromRollData(rollData)
await actor.setPredilectionUsed(rollData.competence._id, predIdx) await actor.setPredilectionUsed(rollData.competence._id, predIdx)
rollData.competence = duplicate(actor.getCompetence(rollData.competence._id)) rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
await WastelandUtility.rollWasteland(rollData) await WastelandUtility.rollWasteland(rollData)
}) })
} }
@ -138,8 +171,7 @@ export class WastelandUtility {
const templatePaths = [ const templatePaths = [
'systems/fvtt-wasteland/templates/editor-notes-gm.html', 'systems/fvtt-wasteland/templates/editor-notes-gm.html',
'systems/fvtt-wasteland/templates/partial-item-description.html', 'systems/fvtt-wasteland/templates/partial-item-description.html'
'systems/fvtt-wasteland/templates/partial-list-niveau.html'
] ]
return loadTemplates(templatePaths); return loadTemplates(templatePaths);
} }
@ -173,15 +205,6 @@ export class WastelandUtility {
return undefined; return undefined;
} }
/* -------------------------------------------- */
static createDirectOptionList(min, max) {
let options = {};
for (let i = min; i <= max; i++) {
options[`${i}`] = `${i}`;
}
return options;
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static buildListOptions(min, max) { static buildListOptions(min, max) {
let options = "" let options = ""
@ -206,7 +229,7 @@ export class WastelandUtility {
let id = rollData.rollId; let id = rollData.rollId;
let oldRollData = this.rollDataStore[id] || {}; let oldRollData = this.rollDataStore[id] || {};
let newRollData = mergeObject(oldRollData, rollData); let newRollData = foundry.utils.mergeObject(oldRollData, rollData);
this.rollDataStore[id] = newRollData; this.rollDataStore[id] = newRollData;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -278,26 +301,51 @@ export class WastelandUtility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static computeResult(rollData) { static async computeResult(rollData, actor) {
if (rollData.mainDice == "1d20") { if (rollData.charme) {
let diceValue = rollData.roll.terms[0].results[0].result let resultIndex = false
diceValue *= (rollData.doubleD20) ? 2 : 1 let resTab = foundry.utils.duplicate(rollData.charme.system.resultats)
//console.log("PAIR/IMP", diceValue) for(let id in resTab) {
if (diceValue % 2 == 1) { let res = resTab[id]
//console.log("PAIR/IMP2", diceValue) if (!resultIndex && rollData.finalResult >= res.value) {
rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value resultIndex = id;
if (diceValue == 1 || diceValue == 11) {
rollData.isDramatique = true
rollData.isSuccess = false
} }
} }
} if (resultIndex) {
rollData.charmeDuree = rollData.charme.system.resultats[resultIndex].description
//console.log("Result : ", rollData) }
if (rollData.difficulte > 0 && !rollData.isDramatique) { let effectRoll = await new Roll(rollData.charmeDice).roll()
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte) if (rollData.charme.system.charmetype == "tour") {
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10) rollData.contrecoupResult = effectRoll.total
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10) if (rollData.contrecoupResult % 2 == 1) {
rollData.contrecoup = __contrecouptCharme[rollData.contrecoupResult]
}
}
if (rollData.charme.system.charmetype == "charme") {
rollData.charmeSante = effectRoll.total
actor.incDecSante(rollData.charmeSante)
}
} else {
if (rollData.mainDice == "1d20") {
let diceValue = rollData.roll.terms[0].results[0].result
diceValue *= (rollData.doubleD20) ? 2 : 1
//console.log("PAIR/IMP", diceValue)
if (diceValue % 2 == 1) {
//console.log("PAIR/IMP2", diceValue)
rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value
if (diceValue == 1 || diceValue == 11) {
rollData.isDramatique = true
rollData.isSuccess = false
}
}
}
//console.log("Result : ", rollData)
if (rollData.difficulte > 0 && !rollData.isDramatique) {
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
}
} }
} }
@ -310,55 +358,41 @@ export class WastelandUtility {
} }
if (!rollData.attr) { if (!rollData.attr) {
rollData.actionImg = "systems/fvtt-wasteland/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp" rollData.actionImg = "systems/fvtt-wasteland/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
rollData.attr = duplicate(actor.system.attributs[rollData.attrKey]) rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
} }
rollData.diceFormula = rollData.mainDice if (rollData.charme) {
if (rollData.doubleD20) { // Multiply result ! rollData.diceFormula = rollData.charmeDice
rollData.diceFormula += "*2" } else {
if (!rollData.isReroll) { rollData.diceFormula = rollData.mainDice
actor.changeEclat(-1) if (rollData.doubleD20) { // Multiply result !
} rollData.diceFormula += "*2"
if (!rollData.isReroll) {
actor.changeEclat(-1)
}
}
} }
//console.log("BEFORE COMP", rollData) //console.log("BEFORE COMP", rollData)
if (rollData.competence) { if (rollData.competence) {
rollData.predilections = duplicate(rollData.competence.system.predilections.filter(pred => !pred.used) || []) rollData.predilections = foundry.utils.duplicate(rollData.competence.system.predilections.filter(pred => !pred.used) || [])
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0 let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}` rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}`
} else { } else {
rollData.diceFormula += `+${rollData.attr.value}*2+${rollData.modificateur}` rollData.diceFormula += `+${rollData.attr.value}*2+${rollData.modificateur}`
} }
if (rollData.arme && rollData.arme.type == "arme") { if (rollData.arme && rollData.arme.type == "arme") {
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}` rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
} }
if (rollData.rune) { let myRoll = await new Roll(rollData.diceFormula).roll()
rollData.runeduree = Math.ceil((rollData.runeame + 3) / 3)
if (rollData.runemode == "inscrire") {
rollData.runeduree *= 2
}
if (rollData.runemode == "prononcer") {
rollData.runeduree = 1
}
}
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = duplicate(myRoll) rollData.roll = foundry.utils.duplicate(myRoll)
rollData.diceResult = myRoll.terms[0].results[0].result rollData.diceResult = myRoll.terms[0].results[0].result
console.log(">>>> ", myRoll) console.log(">>>> ", myRoll)
rollData.finalResult = myRoll.total rollData.finalResult = myRoll.total
this.computeResult(rollData) await this.computeResult(rollData, actor)
if (rollData.rune) {
let subAme = rollData.runeame
if (rollData.isEchec && !rollData.isDramatique) {
subAme = Math.ceil((subAme + 1) / 2)
}
actor.subPointsAme(rollData.runemode, subAme)
}
this.createChatWithRollMode(rollData.alias, { this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-wasteland/templates/chat-generic-result.html`, rollData) content: await renderTemplate(`systems/fvtt-wasteland/templates/chat-generic-result.html`, rollData)
@ -370,13 +404,13 @@ export class WastelandUtility {
static async bonusRollWasteland(rollData) { static async bonusRollWasteland(rollData) {
rollData.bonusFormula = rollData.addedBonus rollData.bonusFormula = rollData.addedBonus
let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false }) let bonusRoll = await new Roll(rollData.bonusFormula).roll()
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode")); await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
rollData.bonusRoll = duplicate(bonusRoll) rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
rollData.finalResult += rollData.bonusRoll.total rollData.finalResult += rollData.bonusRoll.total
this.computeResult(rollData) await this.computeResult(rollData)
this.createChatWithRollMode(rollData.alias, { this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-wasteland/templates/chat-generic-result.html`, rollData) content: await renderTemplate(`systems/fvtt-wasteland/templates/chat-generic-result.html`, rollData)
@ -406,7 +440,7 @@ export class WastelandUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static blindMessageToGM(chatOptions) { static blindMessageToGM(chatOptions) {
let chatGM = duplicate(chatOptions); let chatGM = foundry.utils.duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM); chatGM.whisper = this.getUsers(user => user.isGM);
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content; chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM); console.log("blindMessageToGM", chatGM);
@ -468,7 +502,7 @@ export class WastelandUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static getBasicRollData() { static getBasicRollData() {
let rollData = { let rollData = {
rollId: randomID(16), rollId: foundry.utils.randomID(16),
rollMode: game.settings.get("core", "rollMode"), rollMode: game.settings.get("core", "rollMode"),
modificateursOptions: this.getModificateurOptions(), modificateursOptions: this.getModificateurOptions(),
pointAmeOptions: this.getPointAmeOptions(), pointAmeOptions: this.getPointAmeOptions(),

Binary file not shown.

BIN
packs/armes/000170.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000010 MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/11/28-21:10:45.936814 7fef577fe6c0 Recovering log #8 2024/10/23-20:49:34.562318 7fee7b4006c0 Recovering log #197
2023/11/28-21:10:45.999576 7fef577fe6c0 Delete type=3 #6 2024/10/23-20:49:34.572510 7fee7b4006c0 Delete type=3 #195
2023/11/28-21:10:45.999713 7fef577fe6c0 Delete type=0 #8 2024/10/23-20:49:34.572580 7fee7b4006c0 Delete type=0 #197
2023/11/28-21:42:12.890060 7fef56ffd6c0 Level-0 table #13: started 2024/10/23-20:50:51.301785 7fee796006c0 Level-0 table #202: started
2023/11/28-21:42:12.890138 7fef56ffd6c0 Level-0 table #13: 0 bytes OK 2024/10/23-20:50:51.301810 7fee796006c0 Level-0 table #202: 0 bytes OK
2023/11/28-21:42:12.896649 7fef56ffd6c0 Delete type=0 #11 2024/10/23-20:50:51.308254 7fee796006c0 Delete type=0 #200
2023/11/28-21:42:12.896958 7fef56ffd6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.321194 7fee796006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2023/11/28-21:42:12.896986 7fef56ffd6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.321237 7fee796006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/11/28-21:00:12.498801 7fef57fff6c0 Recovering log #4 2024/06/08-21:15:33.864288 7fadb8c006c0 Recovering log #193
2023/11/28-21:00:12.509763 7fef57fff6c0 Delete type=3 #2 2024/06/08-21:15:33.874053 7fadb8c006c0 Delete type=3 #191
2023/11/28-21:00:12.509888 7fef57fff6c0 Delete type=0 #4 2024/06/08-21:15:33.874106 7fadb8c006c0 Delete type=0 #193
2023/11/28-21:10:40.936880 7fef56ffd6c0 Level-0 table #9: started 2024/06/08-21:15:57.231395 7fadb1a006c0 Level-0 table #198: started
2023/11/28-21:10:40.936944 7fef56ffd6c0 Level-0 table #9: 0 bytes OK 2024/06/08-21:15:57.231418 7fadb1a006c0 Level-0 table #198: 0 bytes OK
2023/11/28-21:10:40.985508 7fef56ffd6c0 Delete type=0 #7 2024/06/08-21:15:57.238165 7fadb1a006c0 Delete type=0 #196
2023/11/28-21:10:41.022162 7fef56ffd6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.238384 7fadb1a006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2023/11/28-21:10:41.022261 7fef56ffd6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.238414 7fadb1a006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/armes/MANIFEST-000199 Normal file

Binary file not shown.

BIN
packs/artifex/000031.ldb Normal file

Binary file not shown.

1
packs/artifex/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000060

8
packs/artifex/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/10/23-20:49:34.600131 7fee80e006c0 Recovering log #58
2024/10/23-20:49:34.610075 7fee80e006c0 Delete type=3 #56
2024/10/23-20:49:34.610136 7fee80e006c0 Delete type=0 #58
2024/10/23-20:50:51.295734 7fee796006c0 Level-0 table #63: started
2024/10/23-20:50:51.295761 7fee796006c0 Level-0 table #63: 0 bytes OK
2024/10/23-20:50:51.301677 7fee796006c0 Delete type=0 #61
2024/10/23-20:50:51.321172 7fee796006c0 Manual compaction at level-0 from '!items!PqP7BWEkK7aK65yH' @ 72057594037927935 : 1 .. '!items!irEA0eyE731viEYl' @ 0 : 0; will stop at (end)
2024/10/23-20:50:51.321229 7fee796006c0 Manual compaction at level-1 from '!items!PqP7BWEkK7aK65yH' @ 72057594037927935 : 1 .. '!items!irEA0eyE731viEYl' @ 0 : 0; will stop at (end)

8
packs/artifex/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/06/08-21:15:33.902106 7fadb2a006c0 Recovering log #54
2024/06/08-21:15:33.912559 7fadb2a006c0 Delete type=3 #52
2024/06/08-21:15:33.912651 7fadb2a006c0 Delete type=0 #54
2024/06/08-21:15:57.217278 7fadb1a006c0 Level-0 table #59: started
2024/06/08-21:15:57.217331 7fadb1a006c0 Level-0 table #59: 0 bytes OK
2024/06/08-21:15:57.224892 7fadb1a006c0 Delete type=0 #57
2024/06/08-21:15:57.238359 7fadb1a006c0 Manual compaction at level-0 from '!items!PqP7BWEkK7aK65yH' @ 72057594037927935 : 1 .. '!items!irEA0eyE731viEYl' @ 0 : 0; will stop at (end)
2024/06/08-21:15:57.238399 7fadb1a006c0 Manual compaction at level-1 from '!items!PqP7BWEkK7aK65yH' @ 72057594037927935 : 1 .. '!items!irEA0eyE731viEYl' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/bestiaire/000043.ldb Normal file

Binary file not shown.

1
packs/bestiaire/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000072

8
packs/bestiaire/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/10/23-20:49:34.456483 7fee7b4006c0 Recovering log #70
2024/10/23-20:49:34.466636 7fee7b4006c0 Delete type=3 #68
2024/10/23-20:49:34.466698 7fee7b4006c0 Delete type=0 #70
2024/10/23-20:50:51.249627 7fee796006c0 Level-0 table #75: started
2024/10/23-20:50:51.249668 7fee796006c0 Level-0 table #75: 0 bytes OK
2024/10/23-20:50:51.255757 7fee796006c0 Delete type=0 #73
2024/10/23-20:50:51.269192 7fee796006c0 Manual compaction at level-0 from '!actors!S7FhBajQ5KKhIpj6' @ 72057594037927935 : 1 .. '!folders!BHMWTRHF2lNlAK8u' @ 0 : 0; will stop at (end)
2024/10/23-20:50:51.269229 7fee796006c0 Manual compaction at level-1 from '!actors!S7FhBajQ5KKhIpj6' @ 72057594037927935 : 1 .. '!folders!BHMWTRHF2lNlAK8u' @ 0 : 0; will stop at (end)

8
packs/bestiaire/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/06/08-21:15:33.757474 7fadb8c006c0 Recovering log #66
2024/06/08-21:15:33.767507 7fadb8c006c0 Delete type=3 #64
2024/06/08-21:15:33.767557 7fadb8c006c0 Delete type=0 #66
2024/06/08-21:15:57.168619 7fadb1a006c0 Level-0 table #71: started
2024/06/08-21:15:57.168658 7fadb1a006c0 Level-0 table #71: 0 bytes OK
2024/06/08-21:15:57.176105 7fadb1a006c0 Delete type=0 #69
2024/06/08-21:15:57.182883 7fadb1a006c0 Manual compaction at level-0 from '!actors!S7FhBajQ5KKhIpj6' @ 72057594037927935 : 1 .. '!folders!BHMWTRHF2lNlAK8u' @ 0 : 0; will stop at (end)
2024/06/08-21:15:57.182910 7fadb1a006c0 Manual compaction at level-1 from '!actors!S7FhBajQ5KKhIpj6' @ 72057594037927935 : 1 .. '!folders!BHMWTRHF2lNlAK8u' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000060

8
packs/capacreature/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/10/23-20:49:34.612874 7fee7b4006c0 Recovering log #58
2024/10/23-20:49:34.622528 7fee7b4006c0 Delete type=3 #56
2024/10/23-20:49:34.622591 7fee7b4006c0 Delete type=0 #58
2024/10/23-20:50:51.321403 7fee796006c0 Level-0 table #63: started
2024/10/23-20:50:51.321447 7fee796006c0 Level-0 table #63: 0 bytes OK
2024/10/23-20:50:51.327468 7fee796006c0 Delete type=0 #61
2024/10/23-20:50:51.348060 7fee796006c0 Manual compaction at level-0 from '!items!JzGNaagJD2jLi9tH' @ 72057594037927935 : 1 .. '!items!LaiHuZ30K4iJr6ce' @ 0 : 0; will stop at (end)
2024/10/23-20:50:51.348136 7fee796006c0 Manual compaction at level-1 from '!items!JzGNaagJD2jLi9tH' @ 72057594037927935 : 1 .. '!items!LaiHuZ30K4iJr6ce' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,8 @@
2024/06/08-21:15:33.915184 7fadb8c006c0 Recovering log #54
2024/06/08-21:15:33.925245 7fadb8c006c0 Delete type=3 #52
2024/06/08-21:15:33.925299 7fadb8c006c0 Delete type=0 #54
2024/06/08-21:15:57.258825 7fadb1a006c0 Level-0 table #59: started
2024/06/08-21:15:57.258884 7fadb1a006c0 Level-0 table #59: 0 bytes OK
2024/06/08-21:15:57.265178 7fadb1a006c0 Delete type=0 #57
2024/06/08-21:15:57.265355 7fadb1a006c0 Manual compaction at level-0 from '!items!JzGNaagJD2jLi9tH' @ 72057594037927935 : 1 .. '!items!LaiHuZ30K4iJr6ce' @ 0 : 0; will stop at (end)
2024/06/08-21:15:57.265376 7fadb1a006c0 Manual compaction at level-1 from '!items!JzGNaagJD2jLi9tH' @ 72057594037927935 : 1 .. '!items!LaiHuZ30K4iJr6ce' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1,30 +0,0 @@
{"name":"Protection du Sorcier","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu est prot&eacute;g&eacute; contre les attaques des cr&eacute;atures n&eacute;es ou invoqu&eacute;es par la sorcellerie (un type d&rsquo;&Eacute;l&eacute;mentaire, les D&eacute;mons, les Automata&hellip;). La protection dont il b&eacute;n&eacute;ficie d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s.</p>","allegeance":"chaos","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour 1 point de protection. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour 2 points de protection. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un 3 points de protection. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.WUPne9oDFTcdLtW9"}},"_id":"5dGXNiL3WN4cAk7X"}
{"name":"Conscience extraplanaire","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu a conscience du tissu de la r&eacute;alit&eacute;. Il peut percevoir les passages et les portails menant vers d&rsquo;autres plans dans une zone de 10 m&egrave;tres par point d&rsquo;Aspect chaotique gr&acirc;ce &agrave; un simple test de Clairvoyance + Perception / 15. S&rsquo;il ignore l&rsquo;existence de ce passage et qu&rsquo;il passe devant, le MJ peut faire un test de Clairvoyance + Perception / 25 pour l&rsquo;&Eacute;lu derri&egrave;re son &eacute;cran.</p>","allegeance":"chaos","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<p>1 point d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.1nIGWsNtx1NKxjPn"}},"_id":"5v0Y35LzqfAd0KnX"}
{"name":"Santé renforcée (Loi)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Les points de Sant&eacute; de l&rsquo;&Eacute;lu sont recalcul&eacute;s en ajoutant &agrave; [(Puissance + Trempe) x 2]+ 5 le nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s. Ce Don ne peut &ecirc;tre pris qu&rsquo;une seule fois m&ecirc;me si l&rsquo;&Eacute;lu conclut plusieurs Pactes.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d&rsquo;&Acirc;me par point de Sant&eacute; suppl&eacute;mentaire, pour un maximum &eacute;gal &agrave; l&rsquo;Aspect du personnage.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4ow7N6kdAWXbTApf"}},"_id":"6IS4zstVwJxG2lwy"}
{"name":"Repos de lÂme","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu r&eacute;cup&egrave;re deux fois plus vite ses points d&rsquo;&Acirc;me, soit 2 par heure et 4 en cas de repos.</p>","allegeance":"chaos","prerequis":"6 ou plus en Présence.","sacrifice":"<p>3 points d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KXciI0xwd6gSOLcZ"}},"_id":"8WLUjxBJtd33mZFp"}
{"name":"Trait chaotique","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu gagne un trait du Chaos qu&rsquo;il tire au hasard dans le tableau de la page 185 avec un d20. Il peut prendre ce Don trois fois. S&rsquo;il tire un trait qu&rsquo;il poss&egrave;de d&eacute;j&agrave;, il doit relancer le d20. Ces traits sont permanents et d&eacute;finitifs, &agrave; moins que les Seigneurs du Chaos n&rsquo;en d&eacute;cident autrement, notamment si l&rsquo;&Eacute;lu les dissimule trop &agrave; leur go&ucirc;t alors qu&rsquo;il n&rsquo;y est pas absolument contraint par des imp&eacute;ratifs de survie imm&eacute;diats.</p>","allegeance":"chaos","prerequis":"aucun","sacrifice":"<p>2 points d&rsquo;&Acirc;me par Trait chaotique. L&rsquo;&Eacute;lu ne peut en avoir plus que sa Marge.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.BKzeOjGA13wQgO0S"}},"_id":"BuZM5BnSaPIGEiEq"}
{"name":"Guérison","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu r&eacute;g&eacute;n&egrave;re rapidement. Chaque jour de repos, il regagne un nombre de points de Sant&eacute; &eacute;gal &agrave; sa Trempe /2 + son Aspect.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>3 point d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.yvY0G3PffZWEl92R"}},"_id":"Eme2iVAF670LCeIH"}
{"name":"Aide Élémentaire","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d&rsquo;appeler un &Eacute;l&eacute;mentaire &agrave; son secours une fois par sc&eacute;nario. La Puissance de l&rsquo;&Eacute;l&eacute;mentaire est fi x&eacute;e lors de l&rsquo;octroi du Don. La nature de l&rsquo;&Eacute;l&eacute;mentaire correspond &agrave; celle du Seigneur &Eacute;l&eacute;mentaire avec lequel le Pacte a &eacute;t&eacute; pass&eacute;. Ce Don ne peut &ecirc;tre pris qu&rsquo;une fois par Seigneur &Eacute;l&eacute;mentaire v&eacute;n&eacute;r&eacute;.</p>","allegeance":"elementaires","prerequis":"","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un &Eacute;l&eacute;mentaire mineur disposant de 5 points d&rsquo;&Acirc;me. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>3 points d&rsquo;&Acirc;me pour un &Eacute;l&eacute;mentaire m&eacute;dian disposant de 10 points d&rsquo;&Acirc;me. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>5 points d&rsquo;&Acirc;me pour un &Eacute;l&eacute;mentaire majeur disposant de 15 points d&rsquo;&Acirc;me. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Wo42z8L33wLerUM8"}},"_id":"JAkSopwrh4QmKrPY"}
{"name":"Augmentation du modificateur de dégâts","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Les d&eacute;g&acirc;ts caus&eacute;s par l&rsquo;&Eacute;lu b&eacute;n&eacute;ficient d&rsquo;un bonus pour <em>un type d&rsquo;armes donn&eacute;</em>. Le bonus d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s.</p>","allegeance":"loi","prerequis":"6 ou plus en Puissance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un bonus de + 1. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>3 points d&rsquo;&Acirc;me pour un bonus de + 2. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>5 points d&rsquo;&Acirc;me pour un bonus de + 3. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.bqdkbOf7EsdsCRqu"}},"_id":"K4H2VC0jTCy7pYj7"}
{"name":"Lexemple du Juste","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu est un exemple rayonnant pour ses camarades. Une fois par sc&eacute;nario, si l&rsquo;&Eacute;lu adresse pendant un tour de jeu une pri&egrave;re &agrave; une divinit&eacute; de la Loi, lui et ses camarades (une dizaine tout au plus) seront b&eacute;nis et recevront jusqu&rsquo;&agrave; la fin de la sc&egrave;ne un bonus &agrave; toutes leurs actions.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un bonus de + 1. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour un bonus de + 2. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un bonus de + 3. Acc&egrave;s r&eacute;serv&eacute; aux Champions.&nbsp;</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.C5ofSFNXoXZFo8ak"}},"_id":"KlfScJjqvlPtkcdZ"}
{"name":"Abstinence","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu peut survivre en se privant d&rsquo;un &eacute;l&eacute;ment vital (nourriture, eau, sommeil, mais pas air) pendant un certain temps. La dur&eacute;e de ce pouvoir d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s.</p>","allegeance":"tous","prerequis":"6 ou plus en Trempe","sacrifice":"<ul>\n<li>2 points d&rsquo;&Acirc;me pour un jour. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>6 points d&rsquo;&Acirc;me pour une semaine. Acc&egrave;s r&eacute;serv&eacute; aux Che\u0002valiers et aux H&eacute;rauts.</li>\n<li>10 points d&rsquo;&Acirc;me pour un mois. Acc&egrave;s r&eacute;serv&eacute; aux Cham\u0002pions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Q4Sy7vOGgU7Zgi9p"}},"_id":"OJKMNtFsuVgkV3gh"}
{"name":"Rupture Chaotique","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Lorsque l&rsquo;&Eacute;lu manie un certain type d&rsquo;armes, il peut ajouter un bonus &agrave; son initiative ou b&eacute;n&eacute;ficier d&rsquo;un bonus aux d&eacute;g&acirc;ts lors d&rsquo;un combat, une fois par s&eacute;ance de jeu.</p>","allegeance":"chaos","prerequis":"6 ou plus en Puissance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un bonus de + 1 aux d&eacute;g&acirc;ts ou + 5 en initiative. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>3 points d&rsquo;&Acirc;me pour un bonus de + 2 aux d&eacute;g&acirc;ts ou + 7 en initiative. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>5 points d&rsquo;&Acirc;me pour un bonus de + 3 aux d&eacute;g&acirc;ts ou + 10 en initiative. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gMI6F4qY5Fi6okZ7"}},"_id":"Q1xDyjQy59lr5wAG"}
{"name":"Sens du Pur","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu a imm&eacute;diatement conscience de la pr&eacute;sence pass&eacute;e ou actuelle du Chaos (sortil&egrave;ge &agrave; l&rsquo;&oelig;uvre, puissant serviteur&hellip;). Le personnage est tr&egrave;s sensible aux &eacute;manations chaotiques, elles lui soul&egrave;vent le c&oelig;ur. La distance de d&eacute;tection peut aug\u0002menter en sacrifiant davantage de points d&rsquo;&Acirc;me</p>","allegeance":"loi","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour d&eacute;tecter les ennemis dans un rayon de 10 m&egrave;tres. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour d&eacute;tecter les ennemis dans un rayon de 100 m&egrave;tres. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour d&eacute;tecter les ennemis dans un rayon de 1000 m&egrave;tres. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.tp2435vHrj63GeAK"}},"_id":"RYgdBIikcBfN8xAp"}
{"name":"Gardien des Millions de Sphères","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu a conscience du tissu de la r&eacute;alit&eacute;. Il peut sceller, par de longues pri&egrave;res psalmodi&eacute;es, les passages et les portails donnant sur d&rsquo;autres plans du Multivers. Cette action lui co&ucirc;te le sacrifice d&rsquo;un point d&rsquo;&Eacute;clat. Tant que sa concentration reste tourn&eacute;e vers ce passage, le portail demeure scell&eacute;, comme si Donblas lui-m&ecirc;me le gardait. Mais d&egrave;s que le personnage s&rsquo;endort, la porte, bien que ferm&eacute;e, n&rsquo;est plus scell&eacute;e. Certains plans tr&egrave;s importants poss&egrave;dent plusieurs passages menant vers les Jeunes Royaumes.</p>","allegeance":"loi","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<p>5 points d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.tm1fjaETqhMAldqJ"}},"_id":"TKCaHLHccYw7JvFy"}
{"name":"Vivacité","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Lors d&rsquo;un test de Capacit&eacute; Offensive, l&rsquo;&Eacute;lu voit la marge n&eacute;cessaire &agrave; l&rsquo;obtention d&rsquo;une r&eacute;ussite h&eacute;ro&iuml;que diminuer de 1 (9 ou plus), de 2 (8 ou plus) ou de 3 (7 ou plus).&nbsp;</p>","allegeance":"tous","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>3 points d&rsquo;&Acirc;me pour diminuer la marge de 1 (r&eacute;ussite h&eacute;ro&iuml;que sur 9 ou plus). Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>5 points d&rsquo;&Acirc;me pour diminuer la marge de 2 (r&eacute;ussite h&eacute;ro&iuml;que sur 8 ou plus). Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>7 points d&rsquo;&Acirc;me pour diminuer la marge de 3 (r&eacute;ussite h&eacute;ro&iuml;que sur 7 ou plus). Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.GlhqSASDW0XdR243"}},"_id":"XaJAo8otOXmgtjzA"}
{"name":"Augmentation de compétence (Chaos)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d&rsquo;augmenter une comp&eacute;tence importante pour la voie spirituelle choisie. Le bonus octroy&eacute; d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi &eacute;s. Ce Don peut &ecirc;tre choisi plusieurs fois, mais il ne peut s&rsquo;appliquer qu&rsquo;une fois par comp&eacute;tence.&nbsp;</p>","allegeance":"chaos","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un + 1 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour un + 2 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un + 3 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.75OYBq5iGgdXVQcA"}},"_id":"aP4vSk6WOL4wXyyb"}
{"name":"Dur à cuire","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu r&eacute;siste aux effets li&eacute;s &agrave; la fatigue et &agrave; la maladie. Le b&eacute;n&eacute;\u0002fi ciaire de ce Don a droit &agrave; un bonus de + 1 lors de ses tests de Trempe pour r&eacute;sister &agrave; la fatigue et &agrave; la maladie. Ce bonus peut augmenter en sacrifi ant davantage de points d&rsquo;&Acirc;me.</p>","allegeance":"tous","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un bonus de + 2. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour un bonus de + 3. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un bonus de + 4. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.jNeLj9DyylUj7LAl"}},"_id":"gK3glTgKTKRw9ref"}
{"name":"Animal apprivoisé","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Le croyant se voit confier un animal normal (c&rsquo;est-&agrave;-dire non surnaturel). L&rsquo;animal apprivois&eacute; est un membre standard de son esp&egrave;ce et ob&eacute;it &agrave; des ordres simples, mais sans jamais aller contre sa nature. Le co&ucirc;t de ce Don d&eacute;pend de la Puissance de la cr&eacute;ature qui est fix&eacute;e lors de son octroi. Si 1 point d&rsquo;&Acirc;me suppl&eacute;mentaire est investi, la cr&eacute;ature peut communiquer t&eacute;l&eacute;\u0002pathiquement avec son ma&icirc;tre (et uniquement avec lui).</p>","allegeance":"betes","prerequis":"6 ou plus en Présence.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour une cr&eacute;ature d&rsquo;une Puissance de 0 &agrave; 4. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>3 points d&rsquo;&Acirc;me pour une cr&eacute;ature d&rsquo;une Puissance de 5 &agrave; 7. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>5 points d&rsquo;&Acirc;me pour une cr&eacute;ature d&rsquo;une Puissance de 8 &agrave; 10. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.qDUei4wRjpRYi9Ps"}},"_id":"gN7DtvMJPASpPpQl"}
{"name":"Protection du Mage","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu est prot&eacute;g&eacute; contre les attaques des cr&eacute;atures engendr&eacute;es ou invoqu&eacute;es par la Sorcellerie (les &Eacute;l&eacute;mentaires, les D&eacute;mons, les Automata&hellip;). La protection dont il b&eacute;n&eacute;ficie d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour 1 point de protection. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour 2 points de protection. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un 3 points de protection. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.NVIG52HOiWGm6JcW"}},"_id":"j7iTQOFdiJUviTC9"}
{"name":"Sang-Froid","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu peut supporter n&rsquo;importe quel type de souffrance psy\u0002chique. Il ne subit pas les p&eacute;nalit&eacute;s dues &agrave; l&rsquo;&eacute;tat D&eacute;stabilis&eacute; (&ndash; 2) et Choqu&eacute; (&ndash; 5). Il est immunis&eacute; &agrave; la torture mentale.</p>","allegeance":"chaos","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KvdQLDhSpfAd2Iig"}},"_id":"lWXxInM05EiBu6uX"}
{"name":"Dur à cuire (Chaos)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu r&eacute;siste aux effets li&eacute;s &agrave; la fatigue et &agrave; la maladie. Le b&eacute;n&eacute;fi ciaire de ce Don a droit &agrave; un bonus de + 1 lors de ses tests de Trempe pour r&eacute;sister &agrave; la fatigue et &agrave; la maladie. Ce bonus peut augmenter en sacrifi ant davantage de points d&rsquo;&Acirc;me.</p>","allegeance":"chaos","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un bonus de + 1. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour un bonus de + 2. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un bonus de + 3.Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.E0kyJQ5gqCEcm0Aj"}},"_id":"oAKqbsLVd8cX4tjN"}
{"name":"Augmentation de compétence","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d&rsquo;augmenter une comp&eacute;tence relative &agrave; la voie spirituelle choisie. Le bonus octroy&eacute; d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi &eacute;s. Ce Don peut &ecirc;tre choisi plusieurs fois, mais il ne peut s&rsquo;appliquer qu&rsquo;une fois par comp&eacute;tence.&nbsp;</p>","allegeance":"tous","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un + 1 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour un + 2 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un + 3 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.djDFklKJaW1oVTds"}},"_id":"pPNKneH7scfaEmGq"}
{"name":"Augmentation de compétence (Loi)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d&rsquo;augmenter une comp&eacute;tence importante pour la voie spirituelle choisie. Le bonus octroy&eacute; d&eacute;pend du nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s. Ce Don peut &ecirc;tre choisi plusieurs fois mais il ne peut s&rsquo;appliquer qu&rsquo;une fois par comp&eacute;tence.</p>","allegeance":"loi","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour un + 1 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour un + 2 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour un + 3 &agrave; une comp&eacute;tence. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gNL9lD7hofK32H7D"}},"_id":"qhOE8OTe5hNNgDtt"}
{"name":"Santé renforcée","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Les points de Sant&eacute; de l&rsquo;&Eacute;lu sont recalcul&eacute;s en ajoutant &agrave; [(Puissance + Trempe) x 2]+ 5 le nombre de points d&rsquo;&Acirc;me sacrifi&eacute;s. Ce Don ne peut &ecirc;tre pris qu&rsquo;une seule fois m&ecirc;me si l&rsquo;&Eacute;lu conclut plusieurs Pactes.</p>","allegeance":"tous","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d&rsquo;&Acirc;me par point de Sant&eacute; suppl&eacute;mentaire.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dJnYsDcETkidd2s5"}},"_id":"sLgGn6zhkDdbpQlH"}
{"name":"Rectitude","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu peut supporter n&rsquo;importe quel type de souffrance. Il ne subit pas les p&eacute;nalit&eacute;s dues &agrave; l&rsquo;&eacute;tat Bless&eacute; (-2) et Gravement Bless&eacute; (-5). Il est immunis&eacute; contre la torture.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.HpoTP9idEKi1NQGL"}},"_id":"t7Ez0rzqYOf48GfY"}
{"name":"La voie du milieu","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Lors d&rsquo;un combat, l&rsquo;&Eacute;lu ne subit plus les effets d&rsquo;une r&eacute;ussite h&eacute;ro&iuml;que contre lui lors des tests de Capacit&eacute; offensive. Il n&rsquo;en profite plus non plus. &Agrave; un haut niveau, il ne peut plus &ecirc;tre affect&eacute; par les &eacute;checs dramatiques.</p>","allegeance":"loi","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>3 points d&rsquo;&Acirc;me pour ne plus &ecirc;tre affect&eacute; par les r&eacute;ussite h&eacute;ro&iuml;ques.</li>\n<li>7 points d&rsquo;&Acirc;me pour ne plus &ecirc;tre affect&eacute; ni par les r&eacute;us\u0002sites h&eacute;ro&iuml;ques ni par les &eacute;checs dramatiques. Acc&egrave;s r&eacute;ser\u0002v&eacute; aux Champions</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.rOXDZ2020snvhtR2"}},"_id":"taXCPXiPEuOIKaUO"}
{"name":"Perfection","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;un des attributs de l&rsquo;&Eacute;lu est augment&eacute;, gr&acirc;ce &agrave; la bienveil\u0002lance de la divinit&eacute;. Il ne peut d&eacute;passer le maximum impos&eacute; par l&rsquo;esp&egrave;ce. Ce Don peut &ecirc;tre choisi plusieurs fois, mais il ne peut s&rsquo;appliquer qu&rsquo;une fois par attribut.</p>","allegeance":"tous","prerequis":"6 ou plus dans lattribut modifié.","sacrifice":"<ul>\n<li>3 points d&rsquo;&Acirc;me pour un bonus de + 1. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>6 points d&rsquo;&Acirc;me pour un bonus de + 2. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>9 points d&rsquo;&Acirc;me pour un bonus de + 3. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.nSlFw6q7TCqxZ6tH"}},"_id":"vZBNRTeGGU5hsXtT"}
{"name":"Sixième sens","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu sait o&ugrave; se trouvent des ennemis dont il a conscience et qui cherchent &agrave; lui nuire directement dans un rayon de 10 m&egrave;tres. Attention, cette d&eacute;tection ne fonctionnera pas pour deviner que quelqu&rsquo;un est simplement hostile &agrave; l&rsquo;&Eacute;lu ou le hait visc&eacute;ralement. Il s&rsquo;agit d&rsquo;un pouvoir de localisation et de vigilance. La distance de d&eacute;tection peut augmenter en sacrifiant davantage de points d&rsquo;&Acirc;me.</p>","allegeance":"chaos","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>1 point d&rsquo;&Acirc;me pour d&eacute;tecter les ennemis dans un rayon de 10 m&egrave;tres. Acc&egrave;s r&eacute;serv&eacute; aux Novices et aux Adeptes.</li>\n<li>2 points d&rsquo;&Acirc;me pour d&eacute;tecter les ennemis dans un rayon de 100 m&egrave;tres. Acc&egrave;s r&eacute;serv&eacute; aux Chevaliers et aux H&eacute;rauts.</li>\n<li>3 points d&rsquo;&Acirc;me pour d&eacute;tecter les ennemis dans un rayon de 1000 m&egrave;tres. Acc&egrave;s r&eacute;serv&eacute; aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.6CIPAVjSVsOqZBYc"}},"_id":"wsbGuOoFjHO6aQEm"}
{"name":"Endurance","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu peut supporter n&rsquo;importe quel type de souffrance. Il ne subit pas les p&eacute;nalit&eacute;s dues &agrave; l&rsquo;&eacute;tat Bless&eacute; (-2) et Gravement Bless&eacute; (-5). Il est immunis&eacute; &agrave; la torture si elle est infl ig&eacute;e &agrave; partir d&rsquo;un des &eacute;l&eacute;ments tut&eacute;laires du personnage.</p>","allegeance":"elementaires","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>3 points d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.on94N7pylXJ8gtdF"}},"_id":"yJ6K9dYrdNxr5uWj"}
{"name":"Le pilier de la Loi","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Une fois par sc&eacute;nario, l&rsquo;&Eacute;lu peut r&eacute;sister &agrave; une menace ou agres\u0002sion, physique ou mentale, sans jeter les d&eacute;s. Il est toutefois n&eacute;ces\u0002saire que l&rsquo;&Eacute;lu ait conscience du danger. L&rsquo;&Eacute;lu pourra par exemple r&eacute;sister &agrave; la terreur provoqu&eacute;e par une cr&eacute;ature du Chaos parti\u0002culi&egrave;rement abominable ou l&eacute;gendaire, mais ne pourra pas &eacute;viter d&rsquo;&ecirc;tre assomm&eacute; par un habile voleur de Bakshaan qu&rsquo;il n&rsquo;avait pas vu. Cette r&eacute;sistance peut m&ecirc;me &ecirc;tre &laquo; extraordinaire &raquo; si l&rsquo;Aspect de l&rsquo;&Eacute;lu est tr&egrave;s haut.</p>\n<p>S&rsquo;il est un Adepte ou un Novice, l&rsquo;&Eacute;lu peut r&eacute;sister &agrave; l&rsquo;ivresse lors d&rsquo;une nuit de beuverie chez un Prince-Marchand de Bakshaan.</p>\n<p>S&rsquo;il est un Chevalier ou un H&eacute;raut, l&rsquo;&Eacute;lu peut r&eacute;sister &agrave; un coup surpuissant (celui-ci est annul&eacute;) ou &agrave; l&rsquo;apparition gla\u0002&ccedil;ante d&rsquo;un D&eacute;mon. S&rsquo;il est un Champion, il peut par exemple soutenir l&rsquo;arche d&rsquo;un temple qui s&rsquo;&eacute;croule pendant quelques pr&eacute;cieuses secondes afi n de laisser le temps &agrave; ses camarades de se mettre &agrave; l&rsquo;abri (songez &agrave; Maciste, &agrave; Samson, ou tout simplement &agrave; Conan). Bref, n&rsquo;h&eacute;sitez pas &agrave; faire dans l&rsquo;extraordinaire, mais ne bas\u0002culez pas dans le grosbillisme sans limite (ou alors ne nous le dites pas). Il revient au MJ de doser avec justesse ce Don.</p>","allegeance":"loi","prerequis":"7 ou plus en Trempe","sacrifice":"<p>3 points d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.yZ84qzrGeIDfZXr1"}},"_id":"zef3VQat06Ronc5W"}
{"name":"Œil exercé","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L&rsquo;&Eacute;lu re&ccedil;oit de la divinit&eacute; qu&rsquo;il v&eacute;n&egrave;re l&rsquo;&eacute;quivalent d&rsquo;une Pr&eacute;dilection dans la Capacit&eacute; sp&eacute;ciale &OElig;il du sorcier (voir p. 199). Une fois par s&eacute;ance, il peut donc relancer le test de Clairvoyance + Perception.</p>","allegeance":"chaos","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<p>2 points d&rsquo;&Acirc;me.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.9Xrm1cfrCmkRtOBc"}},"_id":"zzz9JrtWjELdoAfK"}

View File

@ -1,55 +0,0 @@
{"name":"Chapeau fatigué","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.D26fUtZxrzcTR07B"}},"_id":"1cZd2hlTV9tykDED"}
{"name":"Bœuf","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.whAhz9pO1NUt8Pjm"}},"_id":"3pvWKiyXhc9mmg70"}
{"name":"Manteau","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":4},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.FZztAyGbF2cL9wyc"}},"_id":"40P9lOUYI16gEGZS"}
{"name":"Poney","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.VKZrNcrCm9Ju7ayv"}},"_id":"7MdI99vLmaytPNKE"}
{"name":"Tenue complète dhomme fortuné","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(pantalons de coton, chemise de drap fi n, pourpoint de velours, chapeau, bottes montantes ou chaussures &agrave; boucles)</p>","rarete":7,"prix":6},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dw6wLsNmwmEW79ei"}},"_id":"82fzHPjxUkGMCVUX"}
{"name":"Laboratoire dAlchimiste","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Permet de mettre au point les objets les plus complexes (difficult&eacute; de 25 et au-del&agrave;)</p>","rarete":10,"prix":2000},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.eq0FJtwQd2jHbdvv"}},"_id":"8GK1Hn6le3JlsT6T"}
{"name":"Vieille carne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Modificateur de Monte -2</p>","rarete":2,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.iikcWs26aEjtXDKo"}},"_id":"8NPElVs0cYrGbmXO"}
{"name":"Nuit dauberge à létable","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.uo464pRDCNIPsUvW"}},"_id":"9dEaZklkBs1GgdD7"}
{"name":"Coursier","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Modificateur de Monte +2</p>","rarete":7,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.t4PPYVE2B6B9tUy1"}},"_id":"AZDTSEUo52dnf37U"}
{"name":"Papier, plume et encre","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":6,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.545S2qajtz6DSzzq"}},"_id":"Bg8jNqGusEdHxV00"}
{"name":"Chariot couvert ou bâché","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.GRhCO7lW7NaHThqU"}},"_id":"FlK49ZIVnceUTy1P"}
{"name":"Tenue complète bourgeoise","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>&nbsp;(chausses, chemise, pourpoint, chapeau, bottes)</p>","rarete":6,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.XZSiLPhbhlj1Wil1"}},"_id":"HdlqqXJ393Pf3GxA"}
{"name":"Nuit dauberge dans une chambre particulière","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.xtlOL4VOsTDvyUvR"}},"_id":"LnKDtuhsacvcet7B"}
{"name":"Louer une petite maison de ville pour un mois","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Se paie g&eacute;n&eacute;ralement d&rsquo;avance&hellip;</p>","rarete":0,"prix":40},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Tfu7ywqXoXzXgP6H"}},"_id":"NZ28hyteLgOxlXC7"}
{"name":"Repas de fête","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":4},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gTCljExvFFpG7K1s"}},"_id":"OyRix5REF10GPbSp"}
{"name":"Cheval dattelage","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":4,"prix":80},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KDfgGmQ4tUj765MN"}},"_id":"QHPoow1iDYEdExgs"}
{"name":"Repas chaud","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ErKXhChAfgugKU1a"}},"_id":"QojR7XS4mGjbMq5w"}
{"name":"Charrette","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4HRLU67Ipd1PFqUV"}},"_id":"RXMBJNKXfy3S3yck"}
{"name":"Onguent de soin","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>10 tours de jeu sont n&eacute;cessaires pour l&rsquo;appliquer. Permet de r&eacute;cup&eacute;rer [[/roll 1D4]] points de Sant&eacute; apr&egrave;s (10 &ndash; Trempe) heures</p>","rarete":5,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.RdqMNJzemUcCYO1H"}},"_id":"RyNJqjQvDbMixok0"}
{"name":"Barge","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":300},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.l7tiShWweGQ8fzDp"}},"_id":"TyeTRm4FxLeRNDTU"}
{"name":"Pommade à frotter pour faire circuler le sang","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Prot&egrave;ge des effets du froid (+ 5 aux tests de Trempe)</p>","rarete":4,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.BbzFc96y1QHi0Old"}},"_id":"VPkZxH3bkTR8WqXQ"}
{"name":"Cape","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.HZkgEeG4apx4I4Tn"}},"_id":"WL0809BYVR9JxaMM"}
{"name":"Poudre blanche","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(&agrave; inhaler pour se sentir en forme)</p>\n<p>S&rsquo;inhale le temps d&rsquo;une action (&agrave; inhaler pour se sentir en forme) simple. Permet de r&eacute;cup&eacute;rer imm&eacute;diatement [[/roll 1D4]] cases de Sant&eacute; (d&eacute;g&acirc;ts non l&eacute;taux). &Agrave; chaque inhalation, lancez un [[/roll 1d20]]. Sur un 1 ou un 11, celui qui vient de priser la poudre s&rsquo;eff ondre et reste inconscient durant (10 &ndash; Trempe) heures.</p>\n<p>&nbsp;</p>","rarete":7,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.axOu6tHgHC7kYnG3"}},"_id":"WntSrr0j00DLntZV"}
{"name":"Lanterne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.OKydo5obAtmOVNup"}},"_id":"Wo0tplt93X9wemlV"}
{"name":"Chien dressé","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5jFTzXfwTgkVvjv7"}},"_id":"Wus5fIYO731eLG0i"}
{"name":"Pain de route (rations pour une semaine)","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.18Hb7BDncVyHgyeM"}},"_id":"X4nIqFrjWy0hCVbZ"}
{"name":"Matériel de survie","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(sac, gourde, couverture, tente)</p>","rarete":2,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.wv6tWbuJjnZ7jiXH"}},"_id":"e8ZbG2WQCzJTRzBK"}
{"name":"Herbes à infuser contre les fièvres légères","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.iL0fjlODZ4JnNpwN"}},"_id":"eH4V6AlAZNEuwlrw"}
{"name":"Barque à rames, canoë","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":60},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.HKxNf2i5EEu5wAN5"}},"_id":"eXP5rck0IJK4Az8c"}
{"name":"Petit atelier et son outillage","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Permet de fabriquer les objets les plus simples (jusqu&rsquo;&agrave; une difficult&eacute; de 20)</p>","rarete":8,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TD0bN2tEIG8VqnbD"}},"_id":"fc2fReiW3mV6jekF"}
{"name":"Antipoison","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Conf&egrave;re un bonus de + 5 au test de Soins pour arr&ecirc;ter les pertes de points de Sant&eacute;. Note : tous les poisons n&rsquo;ont pas d&rsquo;antipoison connu.</p>","rarete":7,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.7NDLIEeS4WVyXDqo"}},"_id":"fkleifA7qbOzRZCy"}
{"name":"Fonderie","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":10,"prix":10000},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Y14CMXm2avlCnqPC"}},"_id":"frS3jj7bs0l9zMGi"}
{"name":"Roulotte","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.X5GxbvOMqQ8aHh49"}},"_id":"g5rDtYzyQ4IxUWXu"}
{"name":"Forge","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":4,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.cma6u26NRsZL1awt"}},"_id":"gJStREuVAaaBuwXR"}
{"name":"Miroir et peigne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.IzlENy0Oxg82cke0"}},"_id":"hRlPFzsoUjbu3Noj"}
{"name":"Tenue complète citadine","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(chausses et chemise de coton, chapeau, chaussures)</p>","rarete":3,"prix":7},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.1ldZnq4lDPHOeVba"}},"_id":"hTLeVLn5yUd2etoS"}
{"name":"Nuit dauberge dans la salle commune","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":3},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.D7HcsRBK8uH6NBi4"}},"_id":"hc4w2PBpYLMQKsXS"}
{"name":"Matériel de cuisine","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.lJafSILU0LtNMONn"}},"_id":"i8BBr1WjfphuLTLI"}
{"name":"Chapeau à la mode","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":6,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.lmlWH96vjfTMN2OO"}},"_id":"kkNZoJdG86Dqci2b"}
{"name":"Herbes à mâcher les lendemains de beuverie","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.STMfa8tVupqJPllD"}},"_id":"muCWd5AKL21AbTg8"}
{"name":"Tenue complète paysanne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(chausses et chemise de jute, grand foulard, sandales)</p>","rarete":0,"prix":4},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4WIrBhrpn4AlSnh3"}},"_id":"nJKLD6BqEHbBHmOY"}
{"name":"Selle et fontes","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.J1HAwhIBjgkBZ3FH"}},"_id":"oIZv9KxLVQUOfi5d"}
{"name":"Destrier","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":8,"prix":800},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.MF74kXfkiwLOwWNS"}},"_id":"oIob9qCttaQw7Aea"}
{"name":"Vêtements rapiécés, nippes","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.rPYf2u8b3qizxxFk"}},"_id":"sLZgByw2rA2PvQms"}
{"name":"Petit voilier","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":6,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.tuAI18GrGFkqVHpQ"}},"_id":"tAFXmBLUXcSUKZRL"}
{"name":"Matériel hivernal","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(piolets, raquettes, manteau et graisses)</p>","rarete":4,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.LpdplcMj4j7dWnZU"}},"_id":"tRSk0np2smLpdixK"}
{"name":"Herbes parfumées contre les mauvaises odeurs","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.y6G9LprDaOAoVn9v"}},"_id":"tXYzLGS6SFolD8k4"}
{"name":"Barque de pêcheur avec voile","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ZXEq8059S3YlFhN0"}},"_id":"vUFnyal2islmmpZF"}
{"name":"Torche","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>&nbsp;(lot de 3)</p>","rarete":1,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.aVBCMdM69vwfrSMW"}},"_id":"vahvt9QGYjnRlY4p"}
{"name":"Verre de vin ou de bière","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5yA9UC3kExUx6CqN"}},"_id":"vmSrygoMxy6G87EO"}
{"name":"Matériel descalade","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(marteau, cordes, pitons)</p>","rarete":3,"prix":8},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TXj9b73MGGI6L9Av"}},"_id":"vtpjGFTYO7fiKXwE"}
{"name":"Longue-vue","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.n1UQvGJ8Zq6dGuEY"}},"_id":"wHU6MvZuBMmN9xfG"}
{"name":"Dose de poison violent","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Voir le chapitre &laquo; Le Combat et la sant&eacute; &raquo; pour conna&icirc;tre les eff ets des principaux poisons</p>","rarete":6,"prix":3},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.EuGLW5D5SIP58uaa"}},"_id":"wQ8cgwazhlIF6WG7"}
{"name":"Louer une grange pour un mois","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Se paie g&eacute;n&eacute;ralement d&rsquo;avance...</p>","rarete":0,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.8utWpkdD1FvHSYfv"}},"_id":"xy356PaIZisHJdUR"}
{"name":"Grande écharpe","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.j5Hei6F2XN5nrh7t"}},"_id":"y47dBO3Mf5Pn7tOd"}

Binary file not shown.

BIN
packs/equipement/000124.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070 MANIFEST-000153

View File

@ -1,8 +1,8 @@
2023/11/28-21:10:46.058402 7ff1ed3ff6c0 Recovering log #68 2024/10/23-20:49:34.587051 7fee7aa006c0 Recovering log #151
2023/11/28-21:10:46.111323 7ff1ed3ff6c0 Delete type=3 #66 2024/10/23-20:49:34.597931 7fee7aa006c0 Delete type=3 #149
2023/11/28-21:10:46.111419 7ff1ed3ff6c0 Delete type=0 #68 2024/10/23-20:49:34.598050 7fee7aa006c0 Delete type=0 #151
2023/11/28-21:42:12.917832 7fef56ffd6c0 Level-0 table #73: started 2024/10/23-20:50:51.314989 7fee796006c0 Level-0 table #156: started
2023/11/28-21:42:12.917864 7fef56ffd6c0 Level-0 table #73: 0 bytes OK 2024/10/23-20:50:51.315013 7fee796006c0 Level-0 table #156: 0 bytes OK
2023/11/28-21:42:12.924966 7fef56ffd6c0 Delete type=0 #71 2024/10/23-20:50:51.320996 7fee796006c0 Delete type=0 #154
2023/11/28-21:42:12.925268 7fef56ffd6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.321220 7fee796006c0 Manual compaction at level-0 from '!folders!JlP90zkPvPcJDq0q' @ 72057594037927935 : 1 .. '!items!zjMDuxKHKJ4vE5UV' @ 0 : 0; will stop at (end)
2023/11/28-21:42:12.925315 7fef56ffd6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.321258 7fee796006c0 Manual compaction at level-1 from '!folders!JlP90zkPvPcJDq0q' @ 72057594037927935 : 1 .. '!items!zjMDuxKHKJ4vE5UV' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/11/28-21:00:12.528084 7ff1ed3ff6c0 Recovering log #64 2024/06/08-21:15:33.889173 7fadb34006c0 Recovering log #147
2023/11/28-21:00:12.538576 7ff1ed3ff6c0 Delete type=3 #62 2024/06/08-21:15:33.898942 7fadb34006c0 Delete type=3 #145
2023/11/28-21:00:12.538671 7ff1ed3ff6c0 Delete type=0 #64 2024/06/08-21:15:33.899016 7fadb34006c0 Delete type=0 #147
2023/11/28-21:10:41.022463 7fef56ffd6c0 Level-0 table #69: started 2024/06/08-21:15:57.225037 7fadb1a006c0 Level-0 table #152: started
2023/11/28-21:10:41.022554 7fef56ffd6c0 Level-0 table #69: 0 bytes OK 2024/06/08-21:15:57.225064 7fadb1a006c0 Level-0 table #152: 0 bytes OK
2023/11/28-21:10:41.067253 7fef56ffd6c0 Delete type=0 #67 2024/06/08-21:15:57.231253 7fadb1a006c0 Delete type=0 #150
2023/11/28-21:10:41.195905 7fef56ffd6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.238374 7fadb1a006c0 Manual compaction at level-0 from '!folders!JlP90zkPvPcJDq0q' @ 72057594037927935 : 1 .. '!items!zjMDuxKHKJ4vE5UV' @ 0 : 0; will stop at (end)
2023/11/28-21:10:41.196008 7fef56ffd6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.238407 7fadb1a006c0 Manual compaction at level-1 from '!folders!JlP90zkPvPcJDq0q' @ 72057594037927935 : 1 .. '!items!zjMDuxKHKJ4vE5UV' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/heritages/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000034 MANIFEST-000223

View File

@ -1,8 +1,8 @@
2023/11/28-21:10:45.818129 7ff1ed3ff6c0 Recovering log #32 2024/10/23-20:49:34.523199 7fee7be006c0 Recovering log #221
2023/11/28-21:10:45.876594 7ff1ed3ff6c0 Delete type=3 #30 2024/10/23-20:49:34.533799 7fee7be006c0 Delete type=3 #219
2023/11/28-21:10:45.876699 7ff1ed3ff6c0 Delete type=0 #32 2024/10/23-20:49:34.533861 7fee7be006c0 Delete type=0 #221
2023/11/28-21:42:12.869213 7fef56ffd6c0 Level-0 table #37: started 2024/10/23-20:50:51.282007 7fee796006c0 Level-0 table #226: started
2023/11/28-21:42:12.869236 7fef56ffd6c0 Level-0 table #37: 0 bytes OK 2024/10/23-20:50:51.282061 7fee796006c0 Level-0 table #226: 0 bytes OK
2023/11/28-21:42:12.875326 7fef56ffd6c0 Delete type=0 #35 2024/10/23-20:50:51.289193 7fee796006c0 Delete type=0 #224
2023/11/28-21:42:12.896758 7fef56ffd6c0 Manual compaction at level-0 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.295521 7fee796006c0 Manual compaction at level-0 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end)
2023/11/28-21:42:12.896965 7fef56ffd6c0 Manual compaction at level-1 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.295559 7fee796006c0 Manual compaction at level-1 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/11/28-21:00:12.469089 7ff1ed3ff6c0 Recovering log #28 2024/06/08-21:15:33.824184 7fadb3e006c0 Recovering log #217
2023/11/28-21:00:12.481019 7ff1ed3ff6c0 Delete type=3 #26 2024/06/08-21:15:33.834055 7fadb3e006c0 Delete type=3 #215
2023/11/28-21:00:12.481137 7ff1ed3ff6c0 Delete type=0 #28 2024/06/08-21:15:33.834168 7fadb3e006c0 Delete type=0 #217
2023/11/28-21:10:40.899330 7fef56ffd6c0 Level-0 table #33: started 2024/06/08-21:15:57.197219 7fadb1a006c0 Level-0 table #222: started
2023/11/28-21:10:40.899404 7fef56ffd6c0 Level-0 table #33: 0 bytes OK 2024/06/08-21:15:57.197247 7fadb1a006c0 Level-0 table #222: 0 bytes OK
2023/11/28-21:10:40.936638 7fef56ffd6c0 Delete type=0 #31 2024/06/08-21:15:57.203355 7fadb1a006c0 Delete type=0 #220
2023/11/28-21:10:41.022137 7fef56ffd6c0 Manual compaction at level-0 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.210523 7fadb1a006c0 Manual compaction at level-0 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end)
2023/11/28-21:10:41.022238 7fef56ffd6c0 Manual compaction at level-1 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.210550 7fadb1a006c0 Manual compaction at level-1 from '!items!276PAK1VR5LK4rbE' @ 72057594037927935 : 1 .. '!items!nYYX7rtSMGFO4xVY' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/heros/000031.ldb Normal file

Binary file not shown.

1
packs/heros/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000060

8
packs/heros/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/10/23-20:49:34.469507 7fee7be006c0 Recovering log #58
2024/10/23-20:49:34.479705 7fee7be006c0 Delete type=3 #56
2024/10/23-20:49:34.479763 7fee7be006c0 Delete type=0 #58
2024/10/23-20:50:51.243493 7fee796006c0 Level-0 table #63: started
2024/10/23-20:50:51.243541 7fee796006c0 Level-0 table #63: 0 bytes OK
2024/10/23-20:50:51.249500 7fee796006c0 Delete type=0 #61
2024/10/23-20:50:51.269174 7fee796006c0 Manual compaction at level-0 from '!actors!2UqntsuFwDpHOKJ6' @ 72057594037927935 : 1 .. '!actors.items!hJb4itLSBq7V4ite.yaFBnMJeBvED0JeP' @ 0 : 0; will stop at (end)
2024/10/23-20:50:51.269221 7fee796006c0 Manual compaction at level-1 from '!actors!2UqntsuFwDpHOKJ6' @ 72057594037927935 : 1 .. '!actors.items!hJb4itLSBq7V4ite.yaFBnMJeBvED0JeP' @ 0 : 0; will stop at (end)

8
packs/heros/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/06/08-21:15:33.770037 7fadb3e006c0 Recovering log #54
2024/06/08-21:15:33.780289 7fadb3e006c0 Delete type=3 #52
2024/06/08-21:15:33.780386 7fadb3e006c0 Delete type=0 #54
2024/06/08-21:15:57.176369 7fadb1a006c0 Level-0 table #59: started
2024/06/08-21:15:57.176423 7fadb1a006c0 Level-0 table #59: 0 bytes OK
2024/06/08-21:15:57.182706 7fadb1a006c0 Delete type=0 #57
2024/06/08-21:15:57.182892 7fadb1a006c0 Manual compaction at level-0 from '!actors!2UqntsuFwDpHOKJ6' @ 72057594037927935 : 1 .. '!actors.items!hJb4itLSBq7V4ite.yaFBnMJeBvED0JeP' @ 0 : 0; will stop at (end)
2024/06/08-21:15:57.182916 7fadb1a006c0 Manual compaction at level-1 from '!actors!2UqntsuFwDpHOKJ6' @ 72057594037927935 : 1 .. '!actors.items!hJb4itLSBq7V4ite.yaFBnMJeBvED0JeP' @ 0 : 0; will stop at (end)

BIN
packs/heros/MANIFEST-000060 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/metiers/000194.ldb Normal file

Binary file not shown.

0
packs/metiers/000225.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000034 MANIFEST-000223

View File

@ -1,8 +1,8 @@
2023/11/28-21:10:45.880299 7ff1ecbfe6c0 Recovering log #32 2024/10/23-20:49:34.536519 7fee7aa006c0 Recovering log #221
2023/11/28-21:10:45.933133 7ff1ecbfe6c0 Delete type=3 #30 2024/10/23-20:49:34.547316 7fee7aa006c0 Delete type=3 #219
2023/11/28-21:10:45.933349 7ff1ecbfe6c0 Delete type=0 #32 2024/10/23-20:49:34.547376 7fee7aa006c0 Delete type=0 #221
2023/11/28-21:42:12.882403 7fef56ffd6c0 Level-0 table #37: started 2024/10/23-20:50:51.269364 7fee796006c0 Level-0 table #226: started
2023/11/28-21:42:12.882485 7fef56ffd6c0 Level-0 table #37: 0 bytes OK 2024/10/23-20:50:51.269409 7fee796006c0 Level-0 table #226: 0 bytes OK
2023/11/28-21:42:12.889833 7fef56ffd6c0 Delete type=0 #35 2024/10/23-20:50:51.275419 7fee796006c0 Delete type=0 #224
2023/11/28-21:42:12.896948 7fef56ffd6c0 Manual compaction at level-0 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.295491 7fee796006c0 Manual compaction at level-0 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end)
2023/11/28-21:42:12.896978 7fef56ffd6c0 Manual compaction at level-1 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.295542 7fee796006c0 Manual compaction at level-1 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/11/28-21:00:12.484287 7ff1ecbfe6c0 Recovering log #28 2024/06/08-21:15:33.837825 7fadb34006c0 Recovering log #217
2023/11/28-21:00:12.494659 7ff1ecbfe6c0 Delete type=3 #26 2024/06/08-21:15:33.847890 7fadb34006c0 Delete type=3 #215
2023/11/28-21:00:12.494799 7ff1ecbfe6c0 Delete type=0 #28 2024/06/08-21:15:33.847931 7fadb34006c0 Delete type=0 #217
2023/11/28-21:10:40.986191 7fef56ffd6c0 Level-0 table #33: started 2024/06/08-21:15:57.183049 7fadb1a006c0 Level-0 table #222: started
2023/11/28-21:10:40.986253 7fef56ffd6c0 Level-0 table #33: 0 bytes OK 2024/06/08-21:15:57.183100 7fadb1a006c0 Level-0 table #222: 0 bytes OK
2023/11/28-21:10:41.021844 7fef56ffd6c0 Delete type=0 #31 2024/06/08-21:15:57.189698 7fadb1a006c0 Delete type=0 #220
2023/11/28-21:10:41.022187 7fef56ffd6c0 Manual compaction at level-0 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.210501 7fadb1a006c0 Manual compaction at level-0 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end)
2023/11/28-21:10:41.022284 7fef56ffd6c0 Manual compaction at level-1 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.210537 7fadb1a006c0 Manual compaction at level-1 from '!items!1zbNJIOmrsThaKFU' @ 72057594037927935 : 1 .. '!items!y0G0VMyygxIj4Y7F' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/mutations/000031.ldb Normal file

Binary file not shown.

View File

1
packs/mutations/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000060

0
packs/mutations/LOCK Normal file
View File

8
packs/mutations/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/10/23-20:49:34.625857 7fee7be006c0 Recovering log #58
2024/10/23-20:49:34.636635 7fee7be006c0 Delete type=3 #56
2024/10/23-20:49:34.636701 7fee7be006c0 Delete type=0 #58
2024/10/23-20:50:51.335363 7fee796006c0 Level-0 table #63: started
2024/10/23-20:50:51.335391 7fee796006c0 Level-0 table #63: 0 bytes OK
2024/10/23-20:50:51.341396 7fee796006c0 Delete type=0 #61
2024/10/23-20:50:51.348101 7fee796006c0 Manual compaction at level-0 from '!items!Vnpf6cKVHyd3ugnY' @ 72057594037927935 : 1 .. '!items!Vnpf6cKVHyd3ugnY' @ 0 : 0; will stop at (end)
2024/10/23-20:50:51.348170 7fee796006c0 Manual compaction at level-1 from '!items!Vnpf6cKVHyd3ugnY' @ 72057594037927935 : 1 .. '!items!Vnpf6cKVHyd3ugnY' @ 0 : 0; will stop at (end)

8
packs/mutations/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/06/08-21:15:33.928707 7fadb3e006c0 Recovering log #54
2024/06/08-21:15:33.938338 7fadb3e006c0 Delete type=3 #52
2024/06/08-21:15:33.938420 7fadb3e006c0 Delete type=0 #54
2024/06/08-21:15:57.251732 7fadb1a006c0 Level-0 table #59: started
2024/06/08-21:15:57.251755 7fadb1a006c0 Level-0 table #59: 0 bytes OK
2024/06/08-21:15:57.258558 7fadb1a006c0 Delete type=0 #57
2024/06/08-21:15:57.265348 7fadb1a006c0 Manual compaction at level-0 from '!items!Vnpf6cKVHyd3ugnY' @ 72057594037927935 : 1 .. '!items!Vnpf6cKVHyd3ugnY' @ 0 : 0; will stop at (end)
2024/06/08-21:15:57.265369 7fadb1a006c0 Manual compaction at level-1 from '!items!Vnpf6cKVHyd3ugnY' @ 72057594037927935 : 1 .. '!items!Vnpf6cKVHyd3ugnY' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/origines/000195.ldb Normal file

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000035 MANIFEST-000224

View File

@ -1,8 +1,8 @@
2023/11/28-21:10:45.758372 7fef57fff6c0 Recovering log #33 2024/10/23-20:49:34.510625 7fee7b4006c0 Recovering log #222
2023/11/28-21:10:45.814699 7fef57fff6c0 Delete type=3 #31 2024/10/23-20:49:34.520968 7fee7b4006c0 Delete type=3 #220
2023/11/28-21:10:45.814832 7fef57fff6c0 Delete type=0 #33 2024/10/23-20:49:34.521080 7fee7b4006c0 Delete type=0 #222
2023/11/28-21:42:12.875434 7fef56ffd6c0 Level-0 table #38: started 2024/10/23-20:50:51.275532 7fee796006c0 Level-0 table #227: started
2023/11/28-21:42:12.875457 7fef56ffd6c0 Level-0 table #38: 0 bytes OK 2024/10/23-20:50:51.275563 7fee796006c0 Level-0 table #227: 0 bytes OK
2023/11/28-21:42:12.882108 7fef56ffd6c0 Delete type=0 #36 2024/10/23-20:50:51.281775 7fee796006c0 Delete type=0 #225
2023/11/28-21:42:12.896938 7fef56ffd6c0 Manual compaction at level-0 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.295508 7fee796006c0 Manual compaction at level-0 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end)
2023/11/28-21:42:12.896971 7fef56ffd6c0 Manual compaction at level-1 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end) 2024/10/23-20:50:51.295550 7fee796006c0 Manual compaction at level-1 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/11/28-21:00:12.454515 7fef577fe6c0 Recovering log #29 2024/06/08-21:15:33.811271 7fadb8c006c0 Recovering log #218
2023/11/28-21:00:12.465532 7fef577fe6c0 Delete type=3 #27 2024/06/08-21:15:33.821947 7fadb8c006c0 Delete type=3 #216
2023/11/28-21:00:12.465668 7fef577fe6c0 Delete type=0 #29 2024/06/08-21:15:33.822019 7fadb8c006c0 Delete type=0 #218
2023/11/28-21:10:40.857528 7fef56ffd6c0 Level-0 table #34: started 2024/06/08-21:15:57.189930 7fadb1a006c0 Level-0 table #223: started
2023/11/28-21:10:40.857593 7fef56ffd6c0 Level-0 table #34: 0 bytes OK 2024/06/08-21:15:57.189969 7fadb1a006c0 Level-0 table #223: 0 bytes OK
2023/11/28-21:10:40.899028 7fef56ffd6c0 Delete type=0 #32 2024/06/08-21:15:57.197078 7fadb1a006c0 Delete type=0 #221
2023/11/28-21:10:41.022100 7fef56ffd6c0 Manual compaction at level-0 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.210512 7fadb1a006c0 Manual compaction at level-0 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end)
2023/11/28-21:10:41.022211 7fef56ffd6c0 Manual compaction at level-1 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end) 2024/06/08-21:15:57.210543 7fadb1a006c0 Manual compaction at level-1 from '!items!0xdQs67JPsVrUyvp' @ 72057594037927935 : 1 .. '!items!xox7R7Uuuz0eGL0p' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/peuples/000031.ldb Normal file

Binary file not shown.

0
packs/peuples/000062.log Normal file
View File

1
packs/peuples/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000060

0
packs/peuples/LOCK Normal file
View File

8
packs/peuples/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/10/23-20:49:34.639062 7fee7aa006c0 Recovering log #58
2024/10/23-20:49:34.649580 7fee7aa006c0 Delete type=3 #56
2024/10/23-20:49:34.649699 7fee7aa006c0 Delete type=0 #58
2024/10/23-20:50:51.327659 7fee796006c0 Level-0 table #63: started
2024/10/23-20:50:51.327700 7fee796006c0 Level-0 table #63: 0 bytes OK
2024/10/23-20:50:51.335218 7fee796006c0 Delete type=0 #61
2024/10/23-20:50:51.348083 7fee796006c0 Manual compaction at level-0 from '!items!5onfuCZmzugZ3PMs' @ 72057594037927935 : 1 .. '!items!qAmsD4MHgywYj6XV' @ 0 : 0; will stop at (end)
2024/10/23-20:50:51.348127 7fee796006c0 Manual compaction at level-1 from '!items!5onfuCZmzugZ3PMs' @ 72057594037927935 : 1 .. '!items!qAmsD4MHgywYj6XV' @ 0 : 0; will stop at (end)

8
packs/peuples/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/06/08-21:15:33.941056 7fadb34006c0 Recovering log #54
2024/06/08-21:15:33.951636 7fadb34006c0 Delete type=3 #52
2024/06/08-21:15:33.951677 7fadb34006c0 Delete type=0 #54
2024/06/08-21:15:57.245014 7fadb1a006c0 Level-0 table #59: started
2024/06/08-21:15:57.245045 7fadb1a006c0 Level-0 table #59: 0 bytes OK
2024/06/08-21:15:57.251599 7fadb1a006c0 Delete type=0 #57
2024/06/08-21:15:57.265338 7fadb1a006c0 Manual compaction at level-0 from '!items!5onfuCZmzugZ3PMs' @ 72057594037927935 : 1 .. '!items!qAmsD4MHgywYj6XV' @ 0 : 0; will stop at (end)
2024/06/08-21:15:57.265383 7fadb1a006c0 Manual compaction at level-1 from '!items!5onfuCZmzugZ3PMs' @ 72057594037927935 : 1 .. '!items!qAmsD4MHgywYj6XV' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/pouvoirs/000112.ldb Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More