Compare commits

..

1 Commits

Author SHA1 Message Date
b58995014c Update README.md 2022-01-09 08:48:38 +00:00
196 changed files with 844 additions and 1468 deletions

View File

@ -17,7 +17,7 @@ test:
build:
stage: build
script:
- zip fvtt-yggdrasill.zip -r *.js *.json *.md fonts images packs module styles templates -x ".*"
- zip fvtt-yggdrasill.zip -r *.js *.json *.md module styles templates -x ".*"
artifacts:
name: fvtt-yggdrasill
when: on_success

View File

@ -1,11 +1,8 @@
# Yggdrasill (7ième Cercle) pour FoundryVTT
# Système Yggdrasill pour FoundryVTT
Ce système non-officiel est le portage du JdR Yggdrasill (7ième Cercle) pour le système FoundryVTT.
https://www.7emecercle.com/7C_site/jeux-de-roles/yggdrasill/
Ce système est l'implémentation du jeu de rôle Yggdrasill (7ième Cercle) pour FoundryVTT.
Le livre de base d'Yggdrasill, disponible sur le site de 7ième cercle est nécessaire pour jouer.
Yggdrasill le jeu de rôle est la propriété de 7ième Cercle.
The Vinque font used in this system is properly licensed for Web usage. The proof of the license agreement can be provided thru mail from here or on the French Discord (user @Thelvyn).
Ce système n'est pas officiel, et nécessite le livre de base pour jouer.
Yggdrasill le JDR est la propriété de 7ième Cercle.

View File

@ -11,11 +11,11 @@ export class YggdrasillActorSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
return mergeObject(super.defaultOptions, {
classes: ["yggdrasill", "sheet", "actor"],
template: "systems/fvtt-yggdrasill/templates/actor-sheet.html",
width: 680,
height: 740,
width: 640,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: false
@ -23,8 +23,8 @@ export class YggdrasillActorSheet extends ActorSheet {
}
/* -------------------------------------------- */
async getData() {
const objectData = foundry.utils.duplicate(this.object)
getData() {
const objectData = YggdrasillUtility.data(this.object);
let formData = {
title: this.title,
@ -34,7 +34,7 @@ export class YggdrasillActorSheet extends ActorSheet {
name: objectData.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
data: foundry.utils.deepClone(objectData.system),
data: foundry.utils.deepClone(YggdrasillUtility.templateData(this.object)),
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
limited: this.object.limited,
isEpuise: this.actor.isEpuise(),
@ -48,31 +48,23 @@ export class YggdrasillActorSheet extends ActorSheet {
blessures: this.actor.getBlessures(),
armes: this.actor.getArmes(),
armures: this.actor.getArmures(),
boucliers: this.actor.getBoucliers(),
prouessesMartiales: this.actor.getProuessesMartiales(),
equipements: this.actor.getToutEquipements(),
effetsmagiques: this.actor.getEffetsMagiques(),
effetsRunes: this.actor.getEffetsDeRunes(),
encTotal: this.actor.getEncTotal(),
protectionTotal: this.actor.getProtectionTotal(),
dpBouclier: this.actor.getDpBouclier(),
monnaies: this.actor.getMonnaies(),
sortsSejdr:this.actor.getSortsSejdr(),
sortsGaldr:this.actor.getSortsGaldr(),
runes: this.actor.getRunes(),
optionsCarac: YggdrasillUtility.createDirectOptionList(0, 20),
optionsDMDP: YggdrasillUtility.createDirectSortedOptionList(-10, +10),
optionsBase: YggdrasillUtility.createDirectOptionList(0, 20),
optionsFuror: YggdrasillUtility.createDirectOptionList(0, 15),
tiragerunes: await TextEditor.enrichHTML(this.object.system.tiragesrunes, {async: true}),
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
notes: await TextEditor.enrichHTML(this.object.system.notes, {async: true}),
gmnotes: await TextEditor.enrichHTML(this.object.system.biodata.gmnotes, {async: true}),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
isGM: game.user.isGM,
config: game.system.config
isGM: game.user.isGM
}
// Dynamic update some fields
this.updateDM(formData.data);
@ -91,7 +83,7 @@ export class YggdrasillActorSheet extends ActorSheet {
updateDP( data ) {
let dp = data.caracsecondaire.defensephy;
dp.total = dp.max + Number(dp.bonusmalus);
dp.total += this.actor.getDpBouclier();
dp.total += (dp.bouclierequipe) ? 3 : 0;
}
/* -------------------------------------------- */
@ -105,7 +97,7 @@ updateDP( data ) {
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
const item = this.actor.items.get(li.data("item-id"));
const item = this.actor.getOwnedItem(li.data("item-id"));
item.sheet.render(true);
});
// Delete Inventory Item
@ -120,12 +112,12 @@ updateDP( data ) {
html.find('.munition-moins').click(event => {
const li = $(event.currentTarget).parents(".item");
const item = this.actor.items.get(li.data("item-id"));
const item = this.actor.getOwnedItem(li.data("item-id"));
this.actor.decrementeMunition( item );
} );
html.find('.munition-plus').click(event => {
const li = $(event.currentTarget).parents(".item");
const item = this.actor.items.get(li.data("item-id"));
const item = this.actor.getOwnedItem(li.data("item-id"));
this.actor.incrementeMunition( item );
} );
html.find('.equipement-moins').click(event => {
@ -184,7 +176,7 @@ updateDP( data ) {
});
html.find('.weapon-damage').click((event) => {
const li = $(event.currentTarget).parents(".item");
const weapon = this.actor.items.get(li.data("item-id"));
const weapon = this.actor.getOwnedItem(li.data("item-id"));
this.actor.rollDamage(weapon, 'damage');
});
html.find('.competence-base').change((event) => {
@ -198,7 +190,7 @@ updateDP( data ) {
});
html.find('.item-link a').click((event) => {
const itemId = $(event.currentTarget).data("item-id");
const item = this.actor.items.get(itemId);
const item = this.actor.getOwnedItem(itemId);
item.sheet.render(true);
});
html.find('.item-equip').click(ev => {

View File

@ -175,15 +175,15 @@ export class YggdrasillActor extends Actor {
async prepareData() {
if ( this.type == "personnage") {
this.computeCaracSecondaire();
if (this.system.furor.value == 0)
if (this.data.data.furor.value == 0)
await this.setEpuise();
else
await this.cleanEpuise();
if ( this.system.caracsecondaire.pv.value < (this.system.caracsecondaire.pv.max/4) )
if ( this.data.data.caracsecondaire.pv.value < (this.data.data.caracsecondaire.pv.max/4) )
await this.setMeurtri();
else
await this.cleanMeurtri();
if ( this.system.caracsecondaire.pv.value < (this.system.caracsecondaire.pv.max/2) )
if ( this.data.data.caracsecondaire.pv.value < (this.data.data.caracsecondaire.pv.max/2) )
await this.setBlesse();
else
await this.cleanBlesse();
@ -193,24 +193,23 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
_preUpdate(changed, options, user) {
if ( changed.system?.caracsecondaire?.pv?.value ) {
if ( changed.system.caracsecondaire.pv.value < 0 )
changed.system.caracsecondaire.pv.value = 0;
if ( changed.system.caracsecondaire.pv.value > this.system.caracsecondaire.pv.max )
changed.system.caracsecondaire.pv.value = this.system.caracsecondaire.pv.max;
if ( changed.data?.caracsecondaire?.pv?.value ) {
if ( changed.data.caracsecondaire.pv.value < 0 )
changed.data.caracsecondaire.pv.value = 0;
if ( changed.data.caracsecondaire.pv.value > this.data.data.caracsecondaire.pv.max )
changed.data.caracsecondaire.pv.value = this.data.data.caracsecondaire.pv.max;
}
if ( changed.system?.furor?.value ) {
if ( changed.system.furor.value < 0 )
changed.system.furor.value = 0;
if ( changed.system.furor.value > this.system.furor.max )
changed.system.furor.value = this.system.furor.max;
if ( changed.data?.furor?.value ) {
if ( changed.data.furor.value < 0 )
changed.data.furor.value = 0;
if ( changed.data.furor.value > this.data.data.furor.max )
changed.data.furor.value = this.data.data.furor.max;
}
super._preUpdate(changed, options, user);
}
/* -------------------------------------------- */
getCompetences() {
let comp = this.items.filter( item => item.type == 'competence');
let comp = this.data.items.filter( item => item.type == 'competence');
return comp;
}
/* -------------------------------------------- */
@ -225,97 +224,87 @@ export class YggdrasillActor extends Actor {
}
/* -------------------------------------------- */
getInitiativeScore() {
if ( this.type == 'personnage') {
return this.system.caracsecondaire.reaction.max;
} else {
return this.system.attributs.physique.values.defaut.value;
return this.data.data.caracsecondaire.reaction.max;
}
}
/* -------------------------------------------- */
getCompetencesGenerales() {
let comp = this.items.filter( item => item.type == 'competence' && item.system.categorie == 'generale');
let comp = this.data.items.filter( item => item.type == 'competence' && item.data.data.categorie == 'generale');
return comp.sort( this.compareName );
}
/* -------------------------------------------- */
getCompetencesMartiales() {
let comp = this.items.filter( item => item.type == 'competence' && item.system.categorie == 'martiale');
let comp = this.data.items.filter( item => item.type == 'competence' && item.data.data.categorie == 'martiale');
return comp.sort( this.compareName );
}
/* -------------------------------------------- */
getCompetencesMagiques() {
let comp = this.items.filter( item => item.type == 'competence' && item.system.categorie == 'magique');
let comp = this.data.items.filter( item => item.type == 'competence' && item.data.data.categorie == 'magique');
return comp.sort( this.compareName );
}
/* -------------------------------------------- */
getDons( ) {
let dons = this.items.filter( item => item.type == 'don');
let dons = this.data.items.filter( item => item.type == 'don');
return dons.sort( this.compareName );
}
/* -------------------------------------------- */
getEffetsMagiques( ) {
let effets = this.items.filter( item => item.type == 'effetmagique');
let effets = this.data.items.filter( item => item.type == 'effetmagique');
return effets.sort( this.compareName );
}
/* -------------------------------------------- */
getEffetsDeRunes( ) {
let effets = this.items.filter( item => item.type == 'effetderune');
let effets = this.data.items.filter( item => item.type == 'effetderune');
return effets.sort( this.compareName );
}
/* -------------------------------------------- */
getMonnaies( ) {
let monnaies = this.items.filter( item => item.type == 'monnaie');
let monnaies = this.data.items.filter( item => item.type == 'monnaie');
return monnaies.sort( this.compareName );
}
/* -------------------------------------------- */
getFaiblesses( ) {
let faib = this.items.filter( item => item.type == 'faiblesse');
let faib = this.data.items.filter( item => item.type == 'faiblesse');
return faib.sort( this.compareName );
}
/* -------------------------------------------- */
getBlessures( ) {
return this.items.filter( item => item.type == 'blessure');
return this.data.items.filter( item => item.type == 'blessure');
}
/* -------------------------------------------- */
getToutEquipements() {
return this.items.filter( item => item.type == 'equipement' || item.type == 'armure' || item.type == 'armecc' || item.type == 'armedist' || item.type == 'bouclier');
return this.data.items.filter( item => item.type == 'equipement' || item.type == 'armure' || item.type == 'armecc' || item.type == 'armedist');
}
/* -------------------------------------------- */
getArmes() {
return this.items.filter( item => (item.type == 'armecc' || item.type == 'armedist') && item.system.equipe );
return this.data.items.filter( item => (item.type == 'armecc' || item.type == 'armedist') && item.data.data.equipe );
}
/* -------------------------------------------- */
getArmures() {
return this.items.filter( item => item.type == 'armure' && item.system.equipe );
}
getBoucliers() {
return this.items.filter( item => item.type == 'bouclier' && item.system.equipe );
return this.data.items.filter( item => item.type == 'armure' && item.data.data.equipe );
}
getProuessesMartiales() {
let prouesse = this.items.filter( item => item.type == 'prouesse' );
let prouesse = this.data.items.filter( item => item.type == 'prouesse' );
return prouesse.sort( this.compareName );
}
getSortsSejdr() {
let sort = this.items.filter( item => item.type == 'sortsejdr' );
let sort = this.data.items.filter( item => item.type == 'sortsejdr' );
return sort.sort( this.compareName );
}
getSortsGaldr() {
let sort = this.items.filter( item => item.type == 'sortgaldr' );
let sort = this.data.items.filter( item => item.type == 'sortgaldr' );
return sort.sort( this.compareName );
}
getRunes() {
let sort = this.items.filter( item => item.type == 'rune' );
let sort = this.data.items.filter( item => item.type == 'rune' );
return sort.sort( this.compareName );
}
/* -------------------------------------------- */
async setEpuise( ) {
if (!this.system.status.epuise) {
await this.update({ 'system.status.epuise': true});
this.system.status.epuise = true;
}
await this.update({ 'data.status.epuise': true});
this.data.data.status.epuise = true;
/*let effect = this.getEffectByLabel('Epuisé');
if ( !effect ) {
let effect = statusEffects.find( ef => ef.id == 'epuise');
@ -324,10 +313,8 @@ export class YggdrasillActor extends Actor {
}
/* -------------------------------------------- */
async cleanEpuise() {
if (this.system.status.epuise) {
await this.update({ 'system.status.epuise': false});
this.system.status.epuise = false;
}
await this.update({ 'data.status.epuise': false});
this.data.data.status.epuise = false;
/*let effect = this.getEffectByLabel('Epuisé');
if ( effect ) {
await this.deleteEmbeddedDocuments("ActiveEffect", [ effect.id ]);
@ -335,7 +322,7 @@ export class YggdrasillActor extends Actor {
}
/* -------------------------------------------- */
async toggleEpuise( ) {
if ( this.system.status.epuise ) {
if ( this.data.data.status.epuise ) {
await this.cleanEpuise();
} else {
await this.setEpuise();
@ -343,15 +330,14 @@ export class YggdrasillActor extends Actor {
}
/* -------------------------------------------- */
isEpuise() {
return this.system.status.epuise;
return this.data.data.status.epuise;
}
/* -------------------------------------------- */
async setBlesse( ) {
if (!this.system.status.blesse) {
await this.update({ 'system.status.blesse': true} );
this.system.status.blesse = true;
}
await this.update({ 'data.status.blesse': true} );
this.data.data.status.blesse = true;
console.log("BLESSSE !!!!");
/*let effect = this.getEffectByLabel('Blessé');
if ( !effect ) {
let effect = statusEffects.find( ef => ef.id == 'blesse');
@ -360,10 +346,8 @@ export class YggdrasillActor extends Actor {
}
/* -------------------------------------------- */
async cleanBlesse() {
if (this.system.status.blesse) {
await this.update({ 'system.status.blesse': false} );
this.system.status.blesse = false;
}
await this.update({ 'data.status.blesse': false} );
this.data.data.status.blesse = false;
/*let effect = this.getEffectByLabel('Blessé');
if ( effect ) {
await this.deleteEmbeddedDocuments("ActiveEffect", [ effect.id ]);
@ -372,46 +356,43 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
isBlesse() {
return this.system.status.blesse;
return this.data.data.status.blesse;
//return this.getEffectByLabel('Blessé');
}
/* -------------------------------------------- */
async setMeurtri( ) {
await this.setBlesse();
if (!this.system.status.meurtri) {
await this.update({ 'system.status.meurtri': true});
this.system.status.meurtri = true;
}
await this.update({ 'data.status.meurtri': true});
this.data.data.status.meurtri = true;
}
/* -------------------------------------------- */
async cleanMeurtri() {
if (this.system.status.meurtri) {
await this.update({ 'system.status.meurtri': false});
this.system.status.meurtri = false;
}
await this.update({ 'data.status.meurtri': false});
this.data.data.status.meurtri = false;
}
/* -------------------------------------------- */
isMeurtri() {
return this.system.status.meurtri;
return this.data.data.status.meurtri;
}
/* -------------------------------------------- */
async decrementFuror( nbFuror) {
await this.update( { 'system.furor.value': this.system.furor.value - nbFuror } );
await this.update( { 'data.furor.value': this.data.data.furor.value - nbFuror } );
}
/* -------------------------------------------- */
getCurrentFuror() {
return this.system.furor.value;
return this.data.data.furor.value;
}
/* -------------------------------------------- */
getActiveEffects(matching = it => true) {
let array = Array.from(this.getEmbeddedCollection("ActiveEffect").values());
return Array.from(this.getEmbeddedCollection("ActiveEffect").values()).filter(it => matching(it));
}
/* -------------------------------------------- */
getEffectByLabel(label) {
return this.getActiveEffects().find(it => it.label == label);
return this.getActiveEffects().find(it => it.data.label == label);
}
/* -------------------------------------------- */
getEffectById(id) {
@ -420,11 +401,11 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
getCarac( caracName ) {
for( let key in this.system.carac) {
let categ = this.system.carac[key];
for( let key in this.data.data.carac) {
let categ = this.data.data.carac[key];
for( let carac in categ.carac) {
if (carac.toLowerCase() == caracName.toLowerCase() ) {
return foundry.utils.deepClone(categ.carac[carac]);
return deepClone(categ.carac[carac]);
}
}
}
@ -433,72 +414,50 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
computeCaracSecondaire( ) {
if ( this.type == "personnage") {
let basecorps = this.system.carac.corps.carac;
let basecorps = this.data.data.carac.corps.carac;
let sumcorps = basecorps.puissance.value + basecorps.agilite.value + basecorps.vigueur.value
let baseesprit = this.system.carac.esprit.carac;
let baseesprit = this.data.data.carac.esprit.carac;
let sumesprit = baseesprit.intellect.value + baseesprit.perception.value + baseesprit.tenacite.value
let baseame = this.system.carac.ame.carac;
let baseame = this.data.data.carac.ame.carac;
let sumame = baseame.charisme.value + baseame.communication.value + baseame.instinct.value
let newPV = (sumcorps*3) + (sumesprit *2) + sumame;
if ( newPV != this.system.caracsecondaire.pv.max) {
this.system.caracsecondaire.pv.max = newPV;
this.update( { 'system.caracsecondaire.pv.max': newPV });
if ( newPV != this.data.data.caracsecondaire.pv.max) {
this.data.data.caracsecondaire.pv.max = newPV;
this.update( { 'data.caracsecondaire.pv.max': newPV });
}
this.system.caracsecondaire.reaction.value = baseesprit.intellect.value + baseesprit.perception.value + baseame.instinct.value;
let newReac = baseesprit.intellect.value + baseesprit.perception.value + baseame.instinct.value;
if ( newReac != this.system.caracsecondaire.reaction.max) {
this.system.caracsecondaire.reaction.max = newReac
this.update( { 'system.caracsecondaire.reaction.max': newReac });
}
this.data.data.caracsecondaire.reaction.value = baseesprit.intellect.value + baseesprit.perception.value + baseame.instinct.value;
this.data.data.caracsecondaire.reaction.max = baseesprit.intellect.value + baseesprit.perception.value + baseame.instinct.value;
this.system.caracsecondaire.defensephy.value = basecorps.agilite.value + basecorps.vigueur.value + baseame.instinct.value;
let newDef = basecorps.agilite.value + basecorps.vigueur.value + baseame.instinct.value;
if ( newDef != this.system.caracsecondaire.defensephy.max) {
this.system.caracsecondaire.defensephy.max = newDef
this.update( { 'system.caracsecondaire.defensephy.max': newDef });
}
this.data.data.caracsecondaire.defensephy.value = basecorps.agilite.value + basecorps.vigueur.value + baseame.instinct.value;
this.data.data.caracsecondaire.defensephy.max = basecorps.agilite.value + basecorps.vigueur.value + baseame.instinct.value;
this.system.caracsecondaire.defensemen.value = baseesprit.tenacite.value + baseame.instinct.value + baseesprit.intellect.value;
newDef = baseesprit.tenacite.value + baseame.instinct.value + baseesprit.intellect.value;
if ( newDef != this.system.caracsecondaire.defensemen.max) {
this.system.caracsecondaire.defensemen.max = newDef
this.update( { 'system.caracsecondaire.defensemen.max': newDef });
}
this.data.data.caracsecondaire.defensemen.value = baseesprit.tenacite.value + baseame.instinct.value + baseesprit.intellect.value;
this.data.data.caracsecondaire.defensemen.max = baseesprit.tenacite.value + baseame.instinct.value + baseesprit.intellect.value;
this.system.caracsecondaire.deplacement.value = basecorps.agilite.value + basecorps.vigueur.value;
let depl = basecorps.agilite.value + basecorps.vigueur.value;
if ( depl != this.system.caracsecondaire.deplacement.max) {
this.system.caracsecondaire.deplacement.max = depl
this.update( { 'system.caracsecondaire.deplacement.max': depl });
}
this.data.data.caracsecondaire.deplacement.value = basecorps.agilite.value + basecorps.vigueur.value;
this.data.data.caracsecondaire.deplacement.max = basecorps.agilite.value + basecorps.vigueur.value;
this.system.caracsecondaire.capaenc.value = (basecorps.puissance.value * 2) + basecorps.vigueur.value;
let enc = (basecorps.puissance.value * 2) + basecorps.vigueur.value;
if ( enc != this.system.caracsecondaire.capaenc.max ) {
this.system.caracsecondaire.capaenc.max = enc
this.update( { 'system.caracsecondaire.capaenc.max': enc });
}
//console.log("CARAC SEC", this.system.caracsecondaire)
this.data.data.caracsecondaire.capaenc.value = (basecorps.puissance.value * 2) + basecorps.vigueur.value;
this.data.data.caracsecondaire.capaenc.max = (basecorps.puissance.value * 2) + basecorps.vigueur.value;
}
}
/* -------------------------------------------- */
async equiperObject( equipementId ) {
let item = this.items.find( item => item.id == equipementId );
if (item && item.system) {
let update = { _id: item.id, "system.equipe": !item.system.equipe };
let item = this.data.items.find( item => item.id == equipementId );
if (item && item.data.data) {
let update = { _id: item.id, "data.equipe": !item.data.data.equipe };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
}
/* -------------------------------------------- */
async updateCompetence( compId, niveau) {
let comp = this.items.find( item => item.type == 'competence' && item.id == compId);
let comp = this.data.items.find( item => item.type == 'competence' && item.id == compId);
console.log("Comp updated!!!!", compId, niveau);
if (comp) {
const update = { _id: comp.id, 'system.niveau': niveau };
const update = { _id: comp.id, 'data.niveau': niveau };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
} else {
ui.notifications.warn("Compétence inconnue", compId)
@ -512,9 +471,9 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
async rollAttribute( attrkey, subAttrKey = 'defaut') {
let attr = foundry.utils.duplicate(this.system.attributs[attrkey]);
console.log("ATTR : ", attr, attrkey, subAttrKey);
let subAttr = foundry.utils.duplicate(this.system.attributs[attrkey].values[subAttrKey] );
let attr = duplicate(this.data.data.attributs[attrkey]);
let subAttr = duplicate(this.data.data.attributs[attrkey].values[subAttrKey] );
console.log("ATTR : ", attr, subAttr);
if ( attr ) {
subAttr.label = subAttr.label || "";
let title = `Attribut : ${attr.label} ${subAttr.label} : ${subAttr.value}`;
@ -524,13 +483,16 @@ export class YggdrasillActor extends Actor {
actorImg: this.img,
actorId: this.id,
attr: attr,
valuePhysique: this.system.attributs["physique"].values["defaut"].value,
valuePhysique: this.data.data.attributs["physique"].values["defaut"].value,
subAttr: subAttr,
rollMode: game.settings.get("core", "rollMode"),
title: title,
isBlesse: this.system.etat.etat == "blesse",
isBlesse: this.data.data.etat.etat == "blesse",
optionsBonusMalus: YggdrasillUtility.buildListOptions(-6, +6),
bonusMalus: 0,
optionsSR: YggdrasillUtility.buildSROptions( ),
sr: 0
}
this.addDefaultRoll(rollData)
let rollDialog = await YggdrasillRoll.create( this, rollData);
console.log(rollDialog);
rollDialog.render( true );
@ -538,23 +500,11 @@ export class YggdrasillActor extends Actor {
ui.notifications.warn("Attribut non trouvée");
}
}
/* -------------------------------------------- */
addDefaultRoll(rollData) {
rollData.optionsBonusMalus= YggdrasillUtility.createOptions(-15, 15)
rollData.bonusMalus= "0"
rollData.optionsFuror= YggdrasillUtility.createOptions(0, this.getCurrentFuror())
rollData.furorUsage= "0"
rollData.optionsBD= YggdrasillUtility.createOptions(0, +15)
rollData.sr= "0"
rollData.puissanceRune = 1
rollData.optionsPuissanceRune= YggdrasillUtility.createOptions(1, +15)
rollData.supportRune= "peau"
rollData.config= game.system.config
}
/* -------------------------------------------- */
async rollCarac( categName, caracName) {
let carac = foundry.utils.duplicate(this.system.carac[categName].carac[caracName]);
let carac = duplicate(this.data.data.carac[categName].carac[caracName]);
console.log("CARAC : ", carac, this.data.data.carac);
if ( carac) {
let rollData = {
mode: "carac",
@ -568,9 +518,13 @@ export class YggdrasillActor extends Actor {
isEpuise: this.isEpuise(),
isBlesse: this.isBlesse(),
isMeurtri: this.isMeurtri(),
optionsBonusMalus: YggdrasillUtility.buildListOptions(-6, +6),
bonusMalus: 0,
optionsFuror: YggdrasillUtility.buildListOptions(0, this.getCurrentFuror() ),
furorUsage: 0,
optionsSR: YggdrasillUtility.buildSROptions( ),
sr: 0
}
this.addDefaultRoll(rollData)
console.log("CARAC : ", rollData, this.system.carac);
let rollDialog = await YggdrasillRoll.create( this, rollData);
console.log(rollDialog);
rollDialog.render( true );
@ -582,7 +536,7 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
async rollCompetence( competenceId ) {
let competence = this.items.find( item => item.type == 'competence' && item.id == competenceId);
let competence = this.data.items.find( item => item.type == 'competence' && item.id == competenceId);
if ( competence) {
let rollData = {
mode: "competence",
@ -591,13 +545,18 @@ export class YggdrasillActor extends Actor {
actorId: this.id,
img: competence.img,
rollMode: game.settings.get("core", "rollMode"),
title: `Compétence ${competence.name} : ${competence.system.niveau}`,
competence: foundry.utils.duplicate(competence),
title: `Compétence ${competence.name} : ${competence.data.data.niveau}`,
competence: duplicate(competence),
isEpuise: this.isEpuise(),
isBlesse: this.isBlesse(),
isMeurtri: this.isMeurtri(),
optionsBonusMalus: YggdrasillUtility.buildListOptions(-6, +6),
bonusMalus: 0,
optionsFuror: YggdrasillUtility.buildListOptions(0, this.getCurrentFuror() ),
furorUsage: 0,
optionsSR: YggdrasillUtility.buildSROptions( ),
sr: 0
}
this.addDefaultRoll(rollData)
let rollDialog = await YggdrasillRoll.create( this, rollData);
console.log(rollDialog);
rollDialog.render( true );
@ -608,21 +567,21 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
getAttaqueData( mode ) {
let attackData = foundry.utils.duplicate(attackMode[mode]);
let attackData = duplicate(attackMode[mode]);
if ( attackData){
attackData.mode = mode;
attackData.carac = foundry.utils.duplicate(this.system.carac[attackData.categName].carac[attackData.caracName]);
attackData.carac = duplicate(this.data.data.carac[attackData.categName].carac[attackData.caracName]);
if ( attackData.malus != 0) {
let malusTab = attackData.malus.split(';');
attackData.malus = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.malus = this.data.data.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
}
if ( attackData.protection != 0) {
let malusTab = attackData.protection.split(';');
attackData.protection = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.protection = this.data.data.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
}
if ( attackData.bonusdegats != 0) {
let malusTab = attackData.bonusdegats.split(';');
attackData.bonusdegats = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.bonusdegats = this.data.data.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
}
}
return attackData;
@ -630,21 +589,21 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
getTirData( mode) {
let attackData = foundry.utils.duplicate( tirMode[mode] );
let attackData = duplicate( tirMode[mode] );
if ( attackData){
attackData.mode = mode;
attackData.carac = foundry.utils.duplicate(this.system.carac[attackData.categName].carac[attackData.caracName]);
attackData.carac = duplicate(this.data.data.carac[attackData.categName].carac[attackData.caracName]);
if ( attackData.malus != 0) {
let malusTab = attackData.malus.split(';');
attackData.malus = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.malus = this.data.data.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
}
if ( attackData.protection != 0) {
let malusTab = attackData.protection.split(';');
attackData.protection = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.protection = this.data.data.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
}
if ( attackData.bonusdegats != 0) {
let malusTab = attackData.bonusdegats.split(';');
attackData.bonusdegats = this.system.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
attackData.bonusdegats = this.data.data.carac[attackData.categName].carac[malusTab[0]].value * Number(malusTab[1])
}
}
return attackData;
@ -652,24 +611,23 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
async rollSort( sortId, magie) {
let sort = this.items.find( item => item.id == sortId);
let competence = this.items.find( item => item.type == 'competence' && item.name.toLowerCase().includes(magie));
let sort = this.data.items.find( item => item.id == sortId);
let competence = this.data.items.find( item => item.type == 'competence' && item.name.toLowerCase().includes(magie));
console.log("SORT :", sortId, sort, competence );
let carac;
if ( magie == "sejdr") {
carac = foundry.utils.duplicate(this.system.carac.ame.carac.instinct);
carac = duplicate(this.data.data.carac.ame.carac.instinct);
} else if ( magie == "rune") {
carac = foundry.utils.duplicate(this.system.carac.ame.carac.communication);
carac = duplicate(this.data.data.carac.ame.carac.communication);
} else {
carac = foundry.utils.duplicate(this.system.carac.ame.carac.charisme);
carac = duplicate(this.data.data.carac.ame.carac.charisme);
}
if ( sort && competence) {
let rollData = {
mode: magie,
isMagie: true,
alias: this.name,
actorImg: this.img,
actorId: this.id,
@ -677,10 +635,10 @@ export class YggdrasillActor extends Actor {
rollMode: game.settings.get("core", "rollMode"),
title: magie + " - " + sort.name,
selectedCarac: carac,
agiliteCarac: foundry.utils.duplicate(this.system.carac.corps.carac.agilite),
instinctCarac: foundry.utils.duplicate(this.system.carac.ame.carac.instinct),
sort: foundry.utils.duplicate(sort),
competence: foundry.utils.duplicate(competence),
agiliteCarac: duplicate(this.data.data.carac.corps.carac.agilite),
instinctCarac: duplicate(this.data.data.carac.ame.carac.instinct),
sort: duplicate(sort),
competence: duplicate(competence),
dureeGaldr: "1d5a",
nbCibles: "1",
zoneGaldr: "INS10cm3",
@ -688,9 +646,17 @@ export class YggdrasillActor extends Actor {
isEpuise: this.isEpuise(),
isBlesse: this.isBlesse(),
isMeurtri: this.isMeurtri(),
optionsBonusMalus: YggdrasillUtility.buildListOptions(-6, +6),
optionsBD: YggdrasillUtility.buildListOptions(0, +6),
bonusMalus: 0,
optionsFuror: YggdrasillUtility.buildListOptions(0, this.getCurrentFuror() ),
furorUsage: 0,
optionsSR: YggdrasillUtility.buildSROptions( ),
sr: 14,
puissanceRune: 1,
optionsPuissanceRune: YggdrasillUtility.buildListOptions(1, 15),
supportRune: "peau",
}
this.addDefaultRoll(rollData)
rollData.sr = 14
let rollDialog = await YggdrasillRoll.create( this, rollData);
console.log(rollDialog);
rollDialog.render( true );
@ -701,9 +667,9 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
async rollArme( armeId ) {
let arme = this.items.find( item => item.id == armeId);
let compName = armeCategorieToCompetence[arme.system.categorie];
let competence = this.items.find( item => item.type == 'competence' && item.name == compName);
let arme = this.data.items.find( item => item.id == armeId);
let compName = armeCategorieToCompetence[arme.data.data.categorie];
let competence = this.data.items.find( item => item.type == 'competence' && item.name == compName);
console.log("ARME :", armeId, arme, competence );
if ( arme && competence) {
@ -724,16 +690,21 @@ export class YggdrasillActor extends Actor {
img: competence.img,
rollMode: game.settings.get("core", "rollMode"),
title: "Attaque !",
selectedCarac: foundry.utils.duplicate(this.system.carac.corps.carac.agilite),
arme: foundry.utils.duplicate(arme),
competence: foundry.utils.duplicate(competence),
selectedCarac: duplicate(this.data.data.carac.corps.carac.agilite),
arme: duplicate(arme),
competence: duplicate(competence),
bonusdefense: 0,
isEpuise: this.isEpuise(),
isBlesse: this.isBlesse(),
isMeurtri: this.isMeurtri()
isMeurtri: this.isMeurtri(),
optionsBonusMalus: YggdrasillUtility.buildListOptions(-6, +6),
optionsBD: YggdrasillUtility.buildListOptions(0, +6),
bonusMalus: 0,
optionsFuror: YggdrasillUtility.buildListOptions(0, this.getCurrentFuror() ),
furorUsage: 0,
optionsSR: YggdrasillUtility.buildSROptions( ),
sr: 14
}
this.addDefaultRoll(rollData)
rollData.sr = 14
let rollDialog = await YggdrasillRoll.create( this, rollData);
console.log(rollDialog);
rollDialog.render( true );
@ -745,16 +716,10 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
getEncTotal( ) {
let encTotal = 0;
for( let item of this.items) {
for( let item of this.data.items) {
if (item.type == "equipement" || item.type == "armecc"
|| item.type == "armedist" || item.type == "armure" || item.type == "monnaie" || item.type == "bouclier") {
encTotal += (item.system.enc * item.system.quantite);
}
}
for( let item of this.items) {
if (item.type == "bouclier" && item.system.equipe) {
encTotal -= (item.system.enc * item.system.quantite);
encTotal += (item.system.enccomb * item.system.quantite);
|| item.type == "armedist" || item.type == "armure" || item.type == "monnaie") {
encTotal += item.data.data.enc;
}
}
return encTotal;
@ -763,40 +728,30 @@ export class YggdrasillActor extends Actor {
/* -------------------------------------------- */
getProtectionTotal( ) {
let protectionTotal = 0;
for( let item of this.items) {
if (item.type == "armure" && item.system.equipe) {
protectionTotal += Number(item.system.protection);
for( let item of this.data.items) {
if (item.type == "armure" && item.data.data.equipe) {
protectionTotal += Number(item.data.data.protection);
}
}
return protectionTotal;
}
/* -------------------------------------------- */
getDpBouclier( ) {
let dpBouclier = 0;
for( let item of this.items) {
if (item.type == "bouclier" && item.system.equipe) {
dpBouclier += Number(item.system.defensebonus);
}
}
return dpBouclier;
}
/* -------------------------------------------- */
async incrementeQuantite( objetId ) {
let objetQ = this.items.find( item => item.id == objetId );
let objetQ = this.data.items.find( item => item.id == objetId );
if (objetQ) {
let newQ = objetQ.system.quantite + 1;
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
let newQ = objetQ.data.data.quantite + 1;
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.quantite': newQ }]); // pdates one EmbeddedEntity
}
}
/* -------------------------------------------- */
async decrementeQuantite( objetId ) {
let objetQ = this.items.find( item => item.id == objetId );
let objetQ = this.data.items.find( item => item.id == objetId );
if (objetQ) {
let newQ = objetQ.system.quantite - 1;
let newQ = objetQ.data.data.quantite - 1;
newQ = (newQ <= 0) ? 0 : newQ;
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.quantite': newQ }]); // pdates one EmbeddedEntity
}
}

View File

@ -22,7 +22,7 @@ export class YggdrasillCombat extends Combat {
// Send a chat message
let rollMode = messageOptions.rollMode || game.settings.get("core", "rollMode");
let messageData = foundry.utils.mergeObject(
let messageData = mergeObject(
{
speaker: {
scene: canvas.scene._id,

View File

@ -1,111 +0,0 @@
export const YGGDRASILL_CONFIG = {
optionsEtat: [
{ key: "fringant", label: "Fringant" },
{ key: "blesse", label: "Blessé" },
{ key: "mort", label: "Mort" }
],
optionsArme: [
{ key: "lutte", label: "Lutte" },
{ key: "improvisee", label: "Improvisée" },
{ key: "courte", label: "Courte" },
{ key: "longue", label: "Longue" },
{ key: "deuxmains", label: "A Deux Mains" },
{ key: "hast", label: "Hast" }
],
optionsArmeTir: [
{ key: "jet", label: "Jet" },
{ key: "tir", label: "Tir" }
],
optionsArmure: [
{ key: "armure", label: "Armure" },
{ key: "piecearmure", label: "Pièce d'Armure" }
],
optionsBouclier: [
{ key: "bouclier", label: "Bouclier" }
],
optionsCompetence: [
{ key: "generale", label: "Générale" },
{ key: "magique", label: "Magique" },
{ key: "martiale", label: "Martiale" }
],
optionsMaladie: [
{ key: "mineure", label: "Mineure" },
{ key: "moderee", label: "Modérée" },
{ key: "majeure", label: "Majeure" }
],
optionsProuesse: [
{ key: "attaque", label: "Attaque" },
{ key: "defensive", label: "Défensive" },
{ key: "utilitaire", label: "Utilitaire" }
]
,
optionsGaldr: [
{ key:"malediction", label:"Malédictions" },
{ key:"illusion", label:"Illusions" },
{ key:"charme", label:"Charme" }
],
optionsAttaque: [
{ key:"classique", label:"Attaque classique" },
{ key:"force", label:"Attaque en force" },
{ key:"devastatrice", label:"Attaque dévastatrice" },
{ key:"precise", label:"Attaque Précise" },
{ key:"visee", label:"Attaque Visée" }
],
optionsSR : [
{key: "0", label: "Aucun"},
{key: "5", label: "Très Simple (5)"},
{key: "7", label: "Simple (7)"},
{key: "10", label: "Aisé (10)"},
{key: "14", label: "Moyen (14)"},
{key: "19", label: "Difficile (19)"},
{key: "25", label: "Très Difficile (25)"},
{key: "32", label: "Exceptionnel (32)"},
{key: "40", label: "Légendaire (40)"},
{key: "49", label: "Divin (49)"}
],
optionsCarac: [
{ key: "puissance", label: "Puissance" },
{ key: "vigueur", label: "Vigueur" },
{ key: "agilite", label: "Agilité" },
{ key: "intellect", label: "Intellect" },
{ key: "perception", label: "Perception" },
{ key: "tenacite", label: "Tenacité" },
{ key: "charisme", label: "Charisme" },
{ key: "communication", label: "Communication" },
{ key: "instinct", label: "Instinct" }
],
optionsDureeGaldr: [
{ key:"1d5a", label:"1d5 Actions" },
{ key:"1d10t", label:"1d10 Tours" },
{ key:"1d10m", label:"1d10 Minutes" },
{ key:"1d10h", label:"1d10 Heures" },
{ key:"1d5j", label:"1d5 journées" }
],
optionsZoneGaldr: [
{ key:"INS10cm3", label:"INS x 10 cm3 (chat, balle, épée, ...)" },
{ key:"INS50cm3", label:"INS x 50 cm3 (tabouret, enfant, ...)" },
{ key:"INS1m3", label:"INS x 1 m3 (homme, 2 enfants, ...)" },
{ key:"INS5m3", label:"INS x 5 m3 (charrette, 2 cavaliers, ...)" },
{ key:"INS10m3", label:"INS x 10 m3 (maison, kraken, bateau, ...)" }
],
optionsNbCibles: [
{ key: "1", label: "1" },
{ key: "2_4", label: "2 à 4" },
{ key: "5_9", label: "5 à 9" },
{ key: "10_49", label: "10 à 49" },
{ key: "50plus", label: "50 et +" }
],
optionsSupportRunes: [
{ key: "peau", label: "Peau" },
{ key: "tissu", label: "Tissu" },
{ key: "cuir", label: "Cuir" },
{ key: "bois", label: "Bois" },
{ key: "pierremetal", label: "Pierre, Métal" }
]
}

View File

@ -11,7 +11,7 @@ export class YggdrasillFigurantSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
return mergeObject(super.defaultOptions, {
classes: ["yggdrasill", "sheet", "actor"],
template: "systems/fvtt-yggdrasill/templates/figurant-sheet.html",
width: 640,
@ -23,8 +23,8 @@ export class YggdrasillFigurantSheet extends ActorSheet {
}
/* -------------------------------------------- */
async getData() {
const objectData = foundry.utils.duplicate(this.object)
getData() {
const objectData = YggdrasillUtility.data(this.object);
let formData = {
title: this.title,
@ -34,21 +34,18 @@ export class YggdrasillFigurantSheet extends ActorSheet {
name: objectData.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
data: foundry.utils.deepClone(this.object.system),
data: foundry.utils.deepClone(YggdrasillUtility.templateData(this.object)),
limited: this.object.limited,
equipements: this.actor.getToutEquipements(),
effetsmagiques: this.actor.getEffetsMagiques(),
encTotal: this.actor.getEncTotal(),
monnaies: this.actor.getMonnaies(),
optionsAttr: Array.fromRange(41, 1),
optionsAttr: new Array(21).fill('option'),
optionsBase: YggdrasillUtility.createDirectOptionList(0, 20),
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
notes: await TextEditor.enrichHTML(this.object.system.notes, {async: true}),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
isGM: game.user.isGM,
config: game.system.config
isGM: game.user.isGM
}
console.log("FIGURANT : ", formData);
@ -66,7 +63,7 @@ export class YggdrasillFigurantSheet extends ActorSheet {
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
const item = this.actor.items.get(li.data("item-id"));
const item = this.actor.getOwnedItem(li.data("item-id"));
item.sheet.render(true);
});
// Delete Inventory Item
@ -96,7 +93,7 @@ export class YggdrasillFigurantSheet extends ActorSheet {
});
html.find('.item-link a').click((event) => {
const itemId = $(event.currentTarget).data("item-id");
const item = this.actor.items.get(itemId);
const item = this.actor.getOwnedItem(itemId);
item.sheet.render(true);
});
html.find('.item-equip').click(ev => {

View File

@ -8,7 +8,7 @@ export class YggdrasillItemSheet extends ItemSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
return mergeObject(super.defaultOptions, {
classes: ["fvtt-yggdrasill", "sheet", "item"],
template: "systems/fvtt-yggdrasill/templates/item-sheet.html",
width: 550,
@ -43,7 +43,7 @@ export class YggdrasillItemSheet extends ItemSheet {
/* -------------------------------------------- */
async getData() {
const objectData = foundry.utils.duplicate(this.object);
const objectData = YggdrasillUtility.data(this.object);
let formData = {
title: this.title,
@ -53,15 +53,13 @@ export class YggdrasillItemSheet extends ItemSheet {
name: objectData.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
data: foundry.utils.deepClone(this.object.system),
data: foundry.utils.deepClone(YggdrasillUtility.templateData(this.object)),
optionsBase: YggdrasillUtility.createDirectOptionList(0, 20),
optionsNiveaux4: Array.fromRange(5, 1),
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
optionsNiveaux4: YggdrasillUtility.buildListOptions(1, 5),
limited: this.object.limited,
options: this.options,
owner: this.document.isOwner,
isGM: game.user.isGM,
config: game.system.config
isGM: game.user.isGM
}
return formData;
}
@ -77,13 +75,13 @@ export class YggdrasillItemSheet extends ItemSheet {
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
const item = this.object.options.actor.items.get(li.data("item-id"));
const item = this.object.options.actor.getOwnedItem(li.data("item-id"));
item.sheet.render(true);
});
// Update Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
this.object.options.actor.deleteEmbeddedDocuments( "Item", [li.data("item-id") ] ).then( this.render(true));
this.object.options.actor.deleteOwnedItem( li.data("item-id") ).then( this.render(true));
});
}

View File

@ -14,8 +14,6 @@ import { YggdrasillActorSheet } from "./yggdrasill-actor-sheet.js";
import { YggdrasillFigurantSheet } from "./yggdrasill-figurant-sheet.js";
import { YggdrasillUtility } from "./yggdrasill-utility.js";
import { YggdrasillCombat } from "./yggdrasill-combat.js";
import { YGGDRASILL_CONFIG } from "./yggdrasill-config.js";
import { ClassCounter} from "https://www.uberwald.me/fvtt_appcount/count-class-ready.js"
/* -------------------------------------------- */
/* Foundry VTT Initialization */
@ -36,8 +34,6 @@ Hooks.once("init", async function () {
decimals: 0
};
game.system.config = YGGDRASILL_CONFIG
/* -------------------------------------------- */
game.socket.on("system.fvtt-yggdrasill", data => {
YggdrasillUtility.onSocketMesssage(data);
@ -71,10 +67,7 @@ function welcomeMessage() {
ChatMessage.create({
user: game.user.id,
whisper: [game.user.id],
content: `<div id="welcome-message-yggdrasill"><span class="rdd-roll-part"><strong>Bienvenue à Yggdrasill !</strong>
<p>Yggdrasill est un Jeu de Rôle publié par 7ième Cercle : https://www.7emecercle.com/7C_site/jeux-de-roles/yggdrasill/</p>
<br>Yggdrasill est une propriété de 7ième Cercle.
</div>
content: `<div id="welcome-message-yggdrasill"><span class="rdd-roll-part">Bienvenue !</div>
` });
}
@ -91,9 +84,7 @@ Hooks.once("ready", function () {
user: game.user._id
});
}
ClassCounter.registerUsageCount()
welcomeMessage()
welcomeMessage();
});
/* -------------------------------------------- */

View File

@ -73,12 +73,12 @@ export class YggdrasillRoll extends Dialog {
updateGaldrSR( ) {
let sdDuree = Number(dureeGaldrSD[this.rollData.dureeGaldr]);
let sdVar = 0;
if ( this.rollData.sort.system.voie == "illusion") {
if ( this.rollData.sort.data.voie == "illusion") {
sdVar = Number(zonesciblesGaldrSD[this.rollData.zoneGaldr]);
} else {
sdVar = Number(ciblesGaldrSD[this.rollData.nbCibles]);
}
let SR = Number(this.rollData.sort.system.sd) + sdDuree + sdVar;
let SR = Number(this.rollData.sort.data.sd) + sdDuree + sdVar;
$("#srTotal").text(SR);
this.rollData.sr = SR;
}
@ -91,32 +91,27 @@ export class YggdrasillRoll extends Dialog {
if ( this.rollData.supportRune == "peau") {
support = 3;
this.rollData.echelleDuree = "Actions";
this.rollData.echelleDureeVie = "Heures"
}
if ( this.rollData.supportRune == "tissu") {
support = 6;
this.rollData.echelleDuree = "Tours";
this.rollData.echelleDureeVie = "Jours"
}
if ( this.rollData.supportRune == "cuir") {
support = 9;
this.rollData.echelleDuree = "Minutes";
this.rollData.echelleDureeVie = "Semaines"
}
if ( this.rollData.supportRune == "bois") {
support = 12;
this.rollData.echelleDuree = "Heures";
this.rollData.echelleDureeVie = "Mois"
}
if ( this.rollData.supportRune == "pierremetal") {
support = 15;
this.rollData.echelleDuree = "Jours";
this.rollData.echelleDureeVie = "Années"
}
let SR = this.rollData.puissanceRune + (Number(this.rollData.sort.system.niveau)*3) + support;
let SR = this.rollData.puissanceRune + (Number(this.rollData.sort.data.niveau)*3) + support;
$("#srTotal").text(SR);
$("#runeDuree").text( this.rollData.dureeRune + " " + this.rollData.echelleDuree);
$("#runeDureeVie").text( this.rollData.competence.system.niveau + " " + this.rollData.echelleDureeVie);
$("#runeDureeVie").text( this.rollData.puissanceRune + " " + this.rollData.echelleDuree);
this.rollData.sr = SR;
}
@ -124,7 +119,7 @@ export class YggdrasillRoll extends Dialog {
activateListeners(html) {
super.activateListeners(html);
let dialog = this;
var dialog = this;
function onLoad() {
if (dialog.rollData.mode == "competence") {
let carac = dialog.actor.getCarac( "Puissance" );

View File

@ -1,4 +1,5 @@
/* -------------------------------------------- */
//import { YggdrasillCombat } from "./yggdrasill-combat.js";
/* -------------------------------------------- */
const dureeGaldrText = { "1d5a": "Actions", "1d10t": "Tours", "1d10m": "Minutes", "1d10h": "Heures", "1d5j": "Jours"};
@ -12,11 +13,26 @@ export class YggdrasillUtility {
const templatePaths = [
'systems/fvtt-yggdrasill/templates/actor-sheet.html',
'systems/fvtt-yggdrasill/templates/editor-notes-gm.html'
'systems/fvtt-yggdrasill/templates/editor-notes-gm.html',
'systems/fvtt-yggdrasill/templates/hud-actor-attaque.html',
'systems/fvtt-yggdrasill/templates/hud-actor-sort.html'
]
return loadTemplates(templatePaths);
}
/* -------------------------------------------- */
static templateData(it) {
return YggdrasillUtility.data(it)?.data ?? {}
}
/* -------------------------------------------- */
static data(it) {
if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
return it.data;
}
return it;
}
/* -------------------------------------------- */
static createDirectSortedOptionList( min, max) {
let options = [];
@ -25,14 +41,7 @@ export class YggdrasillUtility {
}
return options;
}
/* -------------------------------------------- */
static createOptions( min, max) {
let options = [];
for(let i=min; i<=max; i++) {
options.push( {key:i, label: `${i}` } );
}
return options;
}
/* -------------------------------------------- */
static createDirectOptionList( min, max) {
let options = {};
@ -50,13 +59,22 @@ export class YggdrasillUtility {
}
return options;
}
/* -------------------------------------------- */
static buildListOptions(min, max) {
static buildSROptions( ) {
let options = ""
for (let i = min; i <= max; i++) {
options += `<option value="${i}">${i}</option>`
}
options += `<option value="0">Aucun</option>`
options += `<option value="5">Très Simple (5)</option>`
options += `<option value="7">Simple (7)</option>`
options += `<option value="10">Aisé (10)</option>`
options += `<option value="14">Moyen (14)</option>`
options += `<option value="19">Difficile (19)</option>`
options += `<option value="25">Trés Difficile (25)</option>`
options += `<option value="32">Exceptionnel (32)</option>`
options += `<option value="40">Légendaire (40)</option>`
options += `<option value="49">Divin (49)</option>`
return options;
}
/* -------------------------------------------- */
@ -80,34 +98,6 @@ export class YggdrasillUtility {
return compendiumData.filter(filter);
}
/* -------------------------------------------- */
static async specificYggRoll( nbDice, isFurorUsage = false) {
let rawDices = []
let rolls = []
let maxTab = []
let maxTabMaxIndex = isFurorUsage ? nbDice : 2;
for (let i=0; i<nbDice; i++) {
rolls[i] = await new Roll("1d10x10").roll( ) //+sumDice+"+"+rollData.furorUsage+"d10+"+niveauCompetence+"+"+rollData.finalBM).roll( { async: false} );
if ( i == nbDice-1 ) {
await this.showDiceSoNice(rolls[i], game.settings.get("core", "rollMode") );
} else {
this.showDiceSoNice(rolls[i], game.settings.get("core", "rollMode") );
}
rawDices.push({ 'result': rolls[i].total});
}
rolls.sort((a,b) => a.total-b.total);
rolls.reverse();
for (let i=0; i<maxTabMaxIndex; i++) {
maxTab[i] = {idx: 0, value: 0};
if (rolls[i].total != undefined) maxTab[i].value = rolls[i].total;
}
return { rawDices: rawDices, maxTab: maxTab, rolls: rolls }
}
/* -------------------------------------------- */
static async rollAttribute( rollData ) {
// Init stuff
@ -118,39 +108,30 @@ export class YggdrasillUtility {
let niveau = rollData.subAttr.value;
// Bonus/Malus total
rollData.finalBM = Number(rollData.bonusMalus);
rollData.finalBM = rollData.bonusMalus;
// Gestion cas blessé (malus de -3)
if ( rollData.isBlesse) { // Cas blesse : malus de -3
rollData.finalBM -= 3;
}
let results = await this.specificYggRoll( 2 )
rollData.rawDices = results.rawDices
rollData.maxTab = results.maxTab
rollData.rolls = results.rolls
rollData.bonus = niveau + Number(rollData.finalBM)
rollData.finalTotal = Number(rollData.maxTab[0].value) + Number(rollData.maxTab[1].value);
rollData.finalTotal += Number(rollData.bonus)
let myRoll = new Roll("2d10+"+niveau+"+"+rollData.finalBM).roll( { async: false} );
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode") );
// Compute total SR
rollData.srFinal = Number(rollData.sr);
if ( rollData.bonusdefense ) {
rollData.srFinal += Number(rollData.bonusdefense);
}
rollData.srFinal = rollData.sr;
if ( rollData.srFinal > 0 ) {
isCritical = rollData.finalTotal >= rollData.srFinal*2;
isSuccess = rollData.finalTotal >= rollData.srFinal;
marge = rollData.finalTotal - rollData.srFinal;
isCritical = myRoll.total >= rollData.srFinal*2;
isSuccess = myRoll.total >= rollData.srFinal;
marge = myRoll.total - rollData.srFinal;
}
if (rollData.rolls[0].dice[0].results[0].result == 1 && rollData.rolls[1].dice[0].results[0].result == 1) {
if (myRoll.dice[0].results[0].result == 1 && myRoll.dice[0].results[1].result == 1) {
isFailure = true;
}
// Dégats
if ( isSuccess && rollData.subAttr.degats ) {
rollData.degatsExplain = `Marge(${marge}) + Physique(${rollData.valuePhysique}) + 1d10`;
rollData.rollDegats = await new Roll("1d10+"+marge+"+"+rollData.valuePhysique).roll( );
rollData.rollDegats = new Roll("1d10+"+marge+"+"+rollData.valuePhysique).roll( { async: false} );
await this.showDiceSoNice(rollData.rollDegats, game.settings.get("core", "rollMode") );
rollData.degats = rollData.rollDegats.total;
}
@ -160,17 +141,19 @@ export class YggdrasillUtility {
rollData.isSuccess = isSuccess;
rollData.isCritical = isCritical;
rollData.marge = marge;
rollData.roll = myRoll
console.log("ROLLLL ATTR!!!!", rollData);
this.createChatWithRollMode( rollData.alias, {
content: await renderTemplate(`systems/fvtt-yggdrasill/templates/chat-generic-result.html`, rollData)
});
//myRoll.toMessage();
}
/* -------------------------------------------- */
static async rollYggdrasill( rollData ) {
let sumDice = ( rollData.isEpuise | rollData.isMeurtri) ? 1 : 2;
let sumDice = ( rollData.isEpuise | rollData.isMeurtri | rollData.isBlesse) ? 1 : 2;
// Init stuff
let isCritical = false;
@ -182,18 +165,18 @@ export class YggdrasillUtility {
// Select niveau de competence/arme/carac
if ( rollData.mode != "carac" ) {
niveauCompetence = rollData.competence.system.niveau;
niveauCompetence = rollData.competence.data.niveau;
} else {
niveauCompetence = rollData.selectedCarac.value;
}
// Bonus/Malus total
rollData.finalBM = Number(rollData.bonusMalus);
rollData.finalBM = rollData.bonusMalus;
if ( rollData.attackDef) {
rollData.finalBM -= rollData.attackDef.malus;
}
if ( rollData.sort && rollData.sort.system.malus ) {
rollData.finalBM += rollData.sort.system.malus;
if ( rollData.sort && rollData.sort.data.malus ) {
rollData.finalBM += rollData.sort.data.malus;
}
// Gestion cas blessé (malus de -3)
if ( rollData.isBlesse) { // Cas blesse : malus de -3
@ -201,60 +184,40 @@ export class YggdrasillUtility {
}
if (sumDice > nbDice) sumDice = nbDice;
let results = await this.specificYggRoll( nbDice )
rollData.rawDices = results.rawDices
rollData.maxTab = results.maxTab
rollData.rolls = results.rolls
console.log("RES", results, nbDice, sumDice)
if ( rollData.furorUsage > 0 ) {
results = await this.specificYggRoll( rollData.furorUsage, true )
rollData.furorRawDices = results.rawDices
rollData.furorMaxTab = results.maxTab
rollData.furorRolls = results.rolls
let actor = game.actors.get(rollData.actorId);
actor.decrementFuror( rollData.furorUsage);
}
rollData.bonusTotal = niveauCompetence + rollData.finalBM
rollData.finalTotal = (sumDice ==1) ? rollData.maxTab[0].value : rollData.maxTab[0].value + rollData.maxTab[1].value;
rollData.furorResult = 0
for (let i=0; i<rollData.furorUsage; i++) {
rollData.furorResult += rollData.furorMaxTab[i].value
}
rollData.finalTotal += Number(rollData.furorResult) + Number(rollData.bonusTotal);
rollData.niveauCompetence = niveauCompetence
let myRoll = new Roll(nbDice+"d10x10kh"+sumDice+"+"+rollData.furorUsage+"d10+"+niveauCompetence+"+"+rollData.finalBM).roll( { async: false} );
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode") );
// Compute total SR
rollData.srFinal = rollData.sr;
if ( rollData.bonusdefense ) {
rollData.srFinal += rollData.bonusdefense;
}
if ( rollData.srFinal > 0 ) {
isCritical = rollData.finalTotal >= rollData.srFinal*2;
isSuccess = rollData.finalTotal >= rollData.srFinal;
marge = rollData.finalTotal - rollData.srFinal;
isCritical = myRoll.total >= rollData.srFinal*2;
isSuccess = myRoll.total >= rollData.srFinal;
marge = myRoll.total - rollData.srFinal;
}
if (nbDice == 1 && rollData.rolls[0].dice[0].results[0].result == 1) {
rollData.rawDices = duplicate(myRoll.dice[0].results);
if (nbDice == 1 && myRoll.dice[0].results[0].result == 1) {
isFailure = true;
}
if (nbDice == 2 && rollData.rolls[0].dice[0].results[0].result == 1 && rollData.rolls[1].dice[0].results[0].result == 1) {
if (nbDice == 2 && myRoll.dice[0].results[0].result == 1 && myRoll.dice[0].results[1].result == 1) {
isFailure = true;
}
if (nbDice >= 3 ) {
let nbOnes = 0
for (let roll of rollData.rolls) {
if (roll.dice[0].results[0].result == 1 ) nbOnes++;
let nbOnes = myRoll.dice[0].results.filter( dice => dice.result == 1);
isFailure = nbOnes.length >= 3;
}
isFailure = nbOnes >= 3;
if ( rollData.furorUsage > 0 ) {
let actor = game.actors.get(rollData.actorId);
actor.decrementFuror( rollData.furorUsage);
}
// Dégats
if ( isSuccess && (rollData.mode == "armecc" || rollData.mode == "armedist") ) {
rollData.degatsExplain = `Marge(${marge}) + Degats Arme(${rollData.arme.system.degat}) + Bonus Attaque(${rollData.attackDef.bonusdegats})`;
rollData.degats = marge + rollData.arme.system.degat + rollData.attackDef.bonusdegats;
rollData.degatsExplain = `Marge(${marge}) + Degats Arme(${rollData.arme.data.degat}) + Bonus Attaque(${rollData.attackDef.bonusdegats})`;
rollData.degats = marge + rollData.arme.data.degat + rollData.attackDef.bonusdegats;
}
// Stockage resultats
@ -263,13 +226,14 @@ export class YggdrasillUtility {
rollData.isSuccess = isSuccess;
rollData.isCritical = isCritical;
rollData.marge = marge;
rollData.roll = myRoll
// Specific GALDR
if ( rollData.sort?.type == "sortgaldr" && rollData.isSuccess) {
let galdrRoll = await new Roll( rollData.dureeGaldr.substring(0, rollData.dureeGaldr.length - 1) ).roll( );
let galdrRoll = new Roll( rollData.dureeGaldr.substring(0, rollData.dureeGaldr.length - 1) ).roll( { async: false} );
await this.showDiceSoNice(galdrRoll, game.settings.get("core", "rollMode") );
rollData.dureeGaldrText = galdrRoll.total + " " + dureeGaldrText[rollData.dureeGaldr];
if ( rollData.sort.system.voie == "illusion") {
if ( rollData.sort.data.voie == "illusion") {
let volume = rollData.zoneGaldr.substring(3, rollData.zoneGaldr.length);
rollData.zoneGaldrText = rollData.instinctCarac.value + " x " + volume;
} else {
@ -282,11 +246,12 @@ export class YggdrasillUtility {
this.createChatWithRollMode( rollData.alias, {
content: await renderTemplate(`systems/fvtt-yggdrasill/templates/chat-generic-result.html`, rollData)
});
//myRoll.toMessage();
}
/* -------------------------------------------- */
static getUsers(filter) {
return game.users.filter(filter).map(user => user.system._id);
return game.users.filter(filter).map(user => user.data._id);
}
/* -------------------------------------------- */
static getWhisperRecipients(rollMode, name) {
@ -306,7 +271,7 @@ export class YggdrasillUtility {
/* -------------------------------------------- */
static blindMessageToGM(chatOptions) {
let chatGM = foundry.utils.duplicate(chatOptions);
let chatGM = duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM);
chatGM.content = "Message aveugle de " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM);

View File

@ -1,7 +1,7 @@
[Dolphin]
HeaderColumnWidths=544,73,106,72
SortOrder=1
SortRole=modificationtime
Timestamp=2022,2,5,12,44,17.076
Timestamp=2021,9,21,17,43,45.19
Version=4
ViewMode=1
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails

View File

@ -1,15 +1,21 @@
{"name":"Lance cc","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"hast","equipe":false,"degat":10,"solidite":11,"enc":2,"valeur":4,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xMRAVbweHG0aMBNR":3},"flags":{"core":{"sourceId":"Item.KPPt0lyDyEac7SPi"}},"_id":"3VBHojfjdD504ibv"}
{"name":"Casque","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":3,"enc":2,"valeur":2,"description":"<p>Le mod&egrave;le le plus fr&eacute;quent comporte un nasal et des &laquo; lunettes &raquo; qui prot&egrave;gent les yeux. Sur une base de bol en m&eacute;tal, des lamelles de renforts sont rivet&eacute;es afin d&rsquo;assurer la rigidit&eacute; de l&rsquo;ensemble. L&rsquo;int&eacute;rieur est doubl&eacute; de cuir et de tissu afin d&rsquo;amortir les chocs.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"8MoqC7EIc3SXtdsN"}
{"_id":"8aaaIqx6uT1sJ0RO","name":"Lance","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"jet","equipe":false,"degat":8,"solidite":11,"enc":4,"portee":"5/10/15/30","valeur":4,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Cuir lamellé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":6,"enc":3,"valeur":2,"description":"<p>Des lamelles de cuir plus rigides sont coll&eacute;es et cousues sur la version pr&eacute;c&eacute;dente. La poitrine, le ventre, les omoplates et les coudes sont particuli&egrave;rement renforc&eacute;s. Des pi&egrave;ces semi-rigides, bomb&eacute;es, enserrent parfois les &eacute;paules.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"B2yc8LDKTRl0Hjxt"}
{"name":"Hache de guerre","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"longue","equipe":false,"degat":9,"solidite":10,"enc":2,"valeur":1,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"BwmkCCiJWME4CpB0"}
{"name":"Poignard cc","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"courte","equipe":false,"degat":3,"solidite":9,"enc":0,"valeur":0.5,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xMRAVbweHG0aMBNR":3},"flags":{"core":{"sourceId":"Item.jLtQv1SAt8pkMGqa"}},"_id":"CwrTGdva6vQVz0aQ"}
{"name":"Epaullières de fourrure","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":2,"enc":1,"valeur":0.6,"description":"<p>Il s&rsquo;agit d&rsquo;un grand morceau de peau encerclant les &eacute;paules et le cou. En g&eacute;n&eacute;ral, cette fourrure est fix&eacute;e sur une cape. En plus de la protection qu&rsquo;elle apporte, sa nature (loup, ours, vison, etc.. ) donne une indication sur le statut du guerrier.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"C2mzwxiCPJWoY8kc"}
{"name":"Epée courte","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"longue","equipe":false,"degat":5,"solidite":11,"enc":0,"valeur":2,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"FGIja8vhUOeGNC4x"}
{"name":"Longue hache","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"deuxmains","equipe":false,"degat":14,"solidite":12,"enc":3,"valeur":3,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"GqAbMhROpATanmH3"}
{"name":"Hache de jet","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"jet","equipe":false,"degat":4,"solidite":8,"enc":0,"portee":"3/6/9/15","valeur":0.3,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"IZRpi8jq9erpiyoy"}
{"_id":"MkEW9Ma5m9nlE0nr","name":"Poignard","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"jet","equipe":false,"degat":3,"solidite":9,"enc":0,"portee":"3/6/9/12","valeur":0.5,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"_id":"MkEW9Ma5m9nlE0nr","name":"Poignard","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"jet","equipe":false,"degat":3,"solidite":9,"enc":2,"portee":"3/6/9/12","valeur":0.4,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":4,"enc":1,"valeur":1,"description":"<p>La veste devient plus &eacute;paisse et doubl&eacute;e de tissu. Des pi&egrave;ces de m&eacute;tal, des rivets plats en cuivre, en bronze ou en fer apportent une protection suppl&eacute;mentaire aux zones les plus expos&eacute;es. Le col monte parfois jusque sous le menton.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"P6dSkefY97UqdDj9"}
{"name":"Arc de chasse","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"tir","equipe":false,"degat":6,"solidite":8,"enc":2,"portee":"10/20/40/80","valeur":1,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"PsqO2GFVTFIeyCmQ"}
{"name":"Bracelets de cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":1,"enc":0,"valeur":0.3,"description":"<p>Ils prot&egrave;gent l&rsquo;avant-bras, du dessus de la main jusqu&rsquo;au coude. Souvent grav&eacute;s de motifs d&eacute;coratifs, ils se composent de lamelles de cuir rigidifi&eacute;es et nou&eacute;es &agrave; l&rsquo;aide de gros lacets.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"RgYAFOOAh7GGzBaF"}
{"name":"Jambières de cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":2,"enc":1,"valeur":0.4,"description":"<p>Nou&eacute;es autour des cuisses ou des mollets, elles prot&egrave;gent le combattant des coups visant ses jambes. Ici aussi, les artisans essaient souvent d&rsquo;orner ces pi&egrave;ces d&rsquo;armure de d&eacute;corations cisel&eacute;es dans la mati&egrave;re.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"SpTt7wfW9qBKJDxX"}
{"name":"Veste de cuir","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":2,"enc":0,"valeur":0.3,"description":"<p>Il s&rsquo;agit autant d&rsquo;un v&ecirc;tement courant que d&rsquo;une armure. La veste recouvre le torse, le ventre et les hanches. Certaines poss&egrave;dent des manches, courtes ou longues. Le cuir souple et fin ne restreint gu&egrave;re la libert&eacute; de mouvement.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"WrJ7Q4e556LDolbu"}
{"name":"Hachette","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"courte","equipe":false,"degat":4,"solidite":8,"enc":0,"valeur":0.3,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"fjIHt6jNRAM25L9q"}
{"name":"Arc de guerre","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"tir","equipe":false,"degat":7,"solidite":10,"enc":2,"portee":"10/30/50/100","valeur":2,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"jSrZnzjI0QVWuXw8"}
{"name":"Javeline","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"jet","equipe":false,"degat":6,"solidite":7,"enc":2,"portee":"5/10/20/40","valeur":0.4,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"m6PjnSO3ACnzU0ie"}
{"name":"Cotte de mailles","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":9,"enc":5,"valeur":8,"description":"<p>Compos&eacute;e de centaines d&rsquo;anneaux de fer rivet&eacute;s, la cotte de mailles prot&egrave;ge les m&ecirc;mes parties du corps qu&rsquo;une veste. Elle ne descend jamais sur les jambes car cela restreint trop la mobilit&eacute; des combattants. Ceux-ci enfilent dessous une chemise molletonn&eacute;e ou une fine veste de cuir.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"n9eKutLHJZoBYFAD"}
{"name":"Epée à deux mains","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"deuxmains","equipe":false,"degat":12,"solidite":14,"enc":3,"valeur":5,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"ptcBNQhYLwWkBkc0"}
{"name":"Epée longue","type":"armecc","img":"icons/svg/item-bag.svg","data":{"categorie":"longue","equipe":false,"degat":7,"solidite":11,"enc":1,"valeur":4,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"rpY7aUxJelvsozvh"}
{"name":"Fronde","type":"armedist","img":"icons/svg/item-bag.svg","data":{"categorie":"tir","equipe":false,"degat":4,"solidite":12,"enc":0,"portee":"10/20/30/40","valeur":0.1,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"x3aMYeKa73GxJ1Ge"}

Binary file not shown.

View File

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.852464 7f844c2006c0 Recovering log #30
2024/05/02-09:20:30.862615 7f844c2006c0 Delete type=3 #28
2024/05/02-09:20:30.862709 7f844c2006c0 Delete type=0 #30
2024/05/02-09:24:00.910769 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.910814 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.917379 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.931103 7f844ae006c0 Manual compaction at level-0 from '!items!3VBHojfjdD504ibv' @ 72057594037927935 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.931173 7f844ae006c0 Manual compaction at level-1 from '!items!3VBHojfjdD504ibv' @ 72057594037927935 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.701535 7fdae60006c0 Recovering log #26
2024/04/30-23:29:38.712717 7fdae60006c0 Delete type=3 #24
2024/04/30-23:29:38.712835 7fdae60006c0 Delete type=0 #26
2024/05/01-09:07:55.263638 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.263695 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.270095 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.278160 7fdadfe006c0 Manual compaction at level-0 from '!items!3VBHojfjdD504ibv' @ 72057594037927935 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.278217 7fdadfe006c0 Manual compaction at level-1 from '!items!3VBHojfjdD504ibv' @ 72057594037927935 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1,8 +1,8 @@
{"_id":"4YGPuZ813BWQaNbq","name":"Bracelets de cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"piecearmure","equipe":false,"protection":1,"enc":0,"valeur":0.3,"description":"<p>Ils prot&egrave;gent l&rsquo;avant-bras, du dessus de la main jusqu&rsquo;au coude. Souvent grav&eacute;s de motifs d&eacute;coratifs, ils se composent de lamelles de cuir rigidifi&eacute;es et nou&eacute;es &agrave; l&rsquo;aide de gros lacets.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Bracelets de cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":1,"enc":0,"valeur":0.3,"description":"<p>Ils prot&egrave;gent l&rsquo;avant-bras, du dessus de la main jusqu&rsquo;au coude. Souvent grav&eacute;s de motifs d&eacute;coratifs, ils se composent de lamelles de cuir rigidifi&eacute;es et nou&eacute;es &agrave; l&rsquo;aide de gros lacets.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"4YGPuZ813BWQaNbq"}
{"name":"Cuir lamellé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":6,"enc":3,"valeur":2,"description":"<p>Des lamelles de cuir plus rigides sont coll&eacute;es et cousues sur la version pr&eacute;c&eacute;dente. La poitrine, le ventre, les omoplates et les coudes sont particuli&egrave;rement renforc&eacute;s. Des pi&egrave;ces semi-rigides, bomb&eacute;es, enserrent parfois les &eacute;paules.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"9WReqm0CdcCGnsNc"}
{"name":"Veste de cuir","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":2,"enc":0,"valeur":0.3,"description":"<p>Il s&rsquo;agit autant d&rsquo;un v&ecirc;tement courant que d&rsquo;une armure. La veste recouvre le torse, le ventre et les hanches. Certaines poss&egrave;dent des manches, courtes ou longues. Le cuir souple et fin ne restreint gu&egrave;re la libert&eacute; de mouvement.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"JP6OeUflKfg4WiyJ"}
{"name":"Cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":4,"enc":1,"valeur":1,"description":"<p>La veste devient plus &eacute;paisse et doubl&eacute;e de tissu. Des pi&egrave;ces de m&eacute;tal, des rivets plats en cuivre, en bronze ou en fer apportent une protection suppl&eacute;mentaire aux zones les plus expos&eacute;es. Le col monte parfois jusque sous le menton.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"MFH09YNp4uGL8eCE"}
{"_id":"NK7IF0Cr4oOPCZVq","name":"Epaulières de fourrure","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"piecearmure","equipe":false,"protection":2,"enc":1,"valeur":0.6,"description":"<p>Il s&rsquo;agit d&rsquo;un grand morceau de peau encerclant les &eacute;paules et le cou. En g&eacute;n&eacute;ral, cette fourrure est fix&eacute;e sur une cape. En plus de la protection qu&rsquo;elle apporte, sa nature (loup, ours, vison, etc.. ) donne une indication sur le statut du guerrier.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"_id":"WergjG9QE8SxlAGr","name":"Jambières de cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"piecearmure","equipe":false,"protection":2,"enc":1,"valeur":0.4,"description":"<p>Nou&eacute;es autour des cuisses ou des mollets, elles prot&egrave;gent le combattant des coups visant ses jambes. Ici aussi, les artisans essaient souvent d&rsquo;orner ces pi&egrave;ces d&rsquo;armure de d&eacute;corations cisel&eacute;es dans la mati&egrave;re.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"_id":"ozRBKdYJtbnk87gO","name":"Casque","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"piecearmure","equipe":false,"protection":3,"enc":2,"valeur":2,"description":"<p>Le mod&egrave;le le plus fr&eacute;quent comporte un nasal et des &laquo; lunettes &raquo; qui prot&egrave;gent les yeux. Sur une base de bol en m&eacute;tal, des lamelles de renforts sont rivet&eacute;es afin d&rsquo;assurer la rigidit&eacute; de l&rsquo;ensemble. L&rsquo;int&eacute;rieur est doubl&eacute; de cuir et de tissu afin d&rsquo;amortir les chocs.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Epaullières de fourrure","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":2,"enc":1,"valeur":0.6,"description":"<p>Il s&rsquo;agit d&rsquo;un grand morceau de peau encerclant les &eacute;paules et le cou. En g&eacute;n&eacute;ral, cette fourrure est fix&eacute;e sur une cape. En plus de la protection qu&rsquo;elle apporte, sa nature (loup, ours, vison, etc.. ) donne une indication sur le statut du guerrier.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"NK7IF0Cr4oOPCZVq"}
{"name":"Jambières de cuir renforcé","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":2,"enc":1,"valeur":0.4,"description":"<p>Nou&eacute;es autour des cuisses ou des mollets, elles prot&egrave;gent le combattant des coups visant ses jambes. Ici aussi, les artisans essaient souvent d&rsquo;orner ces pi&egrave;ces d&rsquo;armure de d&eacute;corations cisel&eacute;es dans la mati&egrave;re.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"WergjG9QE8SxlAGr"}
{"name":"Casque","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":3,"enc":2,"valeur":2,"description":"<p>Le mod&egrave;le le plus fr&eacute;quent comporte un nasal et des &laquo; lunettes &raquo; qui prot&egrave;gent les yeux. Sur une base de bol en m&eacute;tal, des lamelles de renforts sont rivet&eacute;es afin d&rsquo;assurer la rigidit&eacute; de l&rsquo;ensemble. L&rsquo;int&eacute;rieur est doubl&eacute; de cuir et de tissu afin d&rsquo;amortir les chocs.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"ozRBKdYJtbnk87gO"}
{"name":"Cotte de mailles","type":"armure","img":"icons/svg/item-bag.svg","data":{"categorie":"armure","equipe":false,"protection":9,"enc":5,"valeur":8,"description":"<p>Compos&eacute;e de centaines d&rsquo;anneaux de fer rivet&eacute;s, la cotte de mailles prot&egrave;ge les m&ecirc;mes parties du corps qu&rsquo;une veste. Elle ne descend jamais sur les jambes car cela restreint trop la mobilit&eacute; des combattants. Ceux-ci enfilent dessous une chemise molletonn&eacute;e ou une fine veste de cuir.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"qUXBrstsh5Oo8FEx"}

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.867038 7f844cc006c0 Recovering log #30
2024/05/02-09:20:30.878552 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:30.878665 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.917585 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.917644 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.924086 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.931117 7f844ae006c0 Manual compaction at level-0 from '!items!4YGPuZ813BWQaNbq' @ 72057594037927935 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.931187 7f844ae006c0 Manual compaction at level-1 from '!items!4YGPuZ813BWQaNbq' @ 72057594037927935 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.716559 7fdae56006c0 Recovering log #26
2024/04/30-23:29:38.727495 7fdae56006c0 Delete type=3 #24
2024/04/30-23:29:38.727612 7fdae56006c0 Delete type=0 #26
2024/05/01-09:07:55.278461 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.278543 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.285552 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.307237 7fdadfe006c0 Manual compaction at level-0 from '!items!4YGPuZ813BWQaNbq' @ 72057594037927935 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.307315 7fdadfe006c0 Manual compaction at level-1 from '!items!4YGPuZ813BWQaNbq' @ 72057594037927935 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.837163 7f844cc006c0 Recovering log #30
2024/05/02-09:20:30.848664 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:30.848767 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.903725 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.903795 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.910581 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.931083 7f844ae006c0 Manual compaction at level-0 from '!items!4rM9IvDuijsjbAhI' @ 72057594037927935 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.931143 7f844ae006c0 Manual compaction at level-1 from '!items!4rM9IvDuijsjbAhI' @ 72057594037927935 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.686138 7fdae74006c0 Recovering log #26
2024/04/30-23:29:38.697631 7fdae74006c0 Delete type=3 #24
2024/04/30-23:29:38.697720 7fdae74006c0 Delete type=0 #26
2024/05/01-09:07:55.248868 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.248948 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.256720 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.278118 7fdadfe006c0 Manual compaction at level-0 from '!items!4rM9IvDuijsjbAhI' @ 72057594037927935 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.278189 7fdadfe006c0 Manual compaction at level-1 from '!items!4rM9IvDuijsjbAhI' @ 72057594037927935 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1,7 +1,7 @@
{"name":"Superstition","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Le monde regorge de signes divins, de d&eacute;tails naturels qui refl&egrave;tent le sens cach&eacute; des choses. Le personnage sait rep&eacute;rer et interpr&eacute;ter ces &eacute;l&eacute;ments. Il s&rsquo;agit en g&eacute;n&eacute;ral d&rsquo;y voir des conditions favorables ou d&eacute;favorables pour le moment pr&eacute;sent, mais aussi des messages d&rsquo;avertissement envoy&eacute;s par les dieux. Les habitants de la Scandia sont des gens tr&egrave;s superstitieux et ils tendent &agrave; voir partout des pr&eacute;sages significatifs. Le Meneur de Jeu pourra en profiter pour glisser quelques indices obscurs sur la situation actuelle des h&eacute;ros qui, dans l&rsquo;id&eacute;al, r&eacute;v&egrave;leront leur plein sens une fois qu&rsquo;il sera trop tard.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"26CQEICWZs8Gw4Xi"}
{"name":"Intimidation","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Par l&rsquo;interm&eacute;diaire de la menace verbale ou physique, le personnage peut contraindre quelqu&rsquo;un &agrave; lui ob&eacute;ir. Une tentative d&rsquo;Intimidation n&eacute;cessite un test en opposition. La cible tente de r&eacute;sister gr&acirc;ce &agrave; sa T&eacute;nacit&eacute; et &agrave; sa D&eacute;fense mentale.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"3vspCnDuVMqQDuPe"}
{"name":"Négociation","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Il s&rsquo;agit de la capacit&eacute; &agrave; mener une discussion vers un compromis acceptable par les deux parties. N&eacute;gociation est une comp&eacute;tence utile aux diplomates de la Scandia, mais aussi aux marchands qui peuvent mener &agrave; bien leur marchandage lors de l&rsquo;achat et de la vente de leurs produits.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"4k4NLNlEG7jZEPK6"}
{"_id":"6OMBvnSFqVHqd36u","name":"Jeux","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>le personnage conna&icirc;t les r&egrave;gles et sait pratiquer la plupart des jeux pris&eacute;s par les habitants de la Scandia, comme les jeux de d&eacute;s ou le <em>hnefatafl</em>. Cette comp&eacute;tence s&rsquo;utilise g&eacute;n&eacute;ralement avec des tests en opposition mettant en concurrence les niveaux de ma&icirc;trise respectifs des joueurs. Mais elle permet &eacute;galement de tricher. Dans ce cas, les autres participants peuvent tenter un test en opposition de Perception + Vigilance. Si le tricheur est d&eacute;masqu&eacute;, attendezvous &agrave; des cons&eacute;quences&hellip; muscl&eacute;es.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Jeu","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>le personnage conna&icirc;t les r&egrave;gles et sait pratiquer la plupart des jeux pris&eacute;s par les habitants de la Scandia, comme les jeux de d&eacute;s ou le <em>hnefatafl</em>. Cette comp&eacute;tence s&rsquo;utilise g&eacute;n&eacute;ralement avec des tests en opposition mettant en concurrence les niveaux de ma&icirc;trise respectifs des joueurs. Mais elle permet &eacute;galement de tricher. Dans ce cas, les autres participants peuvent tenter un test en opposition de Perception + Vigilance. Si le tricheur est d&eacute;masqu&eacute;, attendezvous &agrave; des cons&eacute;quences&hellip; muscl&eacute;es.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"6OMBvnSFqVHqd36u"}
{"name":"Artisanat","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":true,"categorie":"generale","specialisation":"","description":"<p>Cette comp&eacute;tence regroupe l&rsquo;ensemble des activit&eacute;s manuelles permettant de confectionner les objets du quotidien. La plupart des habitants de la Scandia pratiquent plus ou moins ces techniques et se r&eacute;v&egrave;lent autonomes lorsqu&rsquo;il s&rsquo;agit de fabriquer ou de r&eacute;parer des ustensiles basiques. Un niveau Confirm&eacute; permet d&rsquo;exercer son artisanat en professionnel et de gagner sa vie avec cette activit&eacute;. Les meilleurs artisans b&eacute;n&eacute;ficient d&rsquo;une renomm&eacute;e et d&rsquo;une consid&eacute;ration importantes. L&rsquo;utilisation de cette comp&eacute;tence correspond en g&eacute;n&eacute;ral &agrave; un test &eacute;tendu. Sp&eacute;cialisations possibles : cordonnerie, ferronnerie, chaudronnerie, charpenterie, tissage, tannerie, corderie, taille de pierre, poterie, sellerie, etc&hellip;</p>\n<p>Il existe cependant deux sp&eacute;cialisations qui m&eacute;ritent que l&rsquo;on s&rsquo;y attarde, tant elles occupent une place importante dans la soci&eacute;t&eacute; des Terres du Nord.</p>\n<p><strong>Construction navale : </strong>cette sp&eacute;cialisation permet de mener &agrave; bien la construction des diff&eacute;rents types de navires sillonnant les flots de la Scandia. Le personnage ma&icirc;trise aussi bien les secrets de l&rsquo;architecture navale que les techniques de la charpenterie de marine, mais il sait tout autant diriger les artisans qui vont r&eacute;aliser le bateau selon ses instructions. Les meilleurs dans ce domaine sont tr&egrave;s recherch&eacute;s par tous les jarls et souverains des Royaumes Nordiques.</p>\n<p><strong>Forge : </strong>l&rsquo;art de la forge n&eacute;cessite des connaissances sp&eacute;cifiques dont certaines confinent au secret transmis uniquement d&rsquo;un ma&icirc;tre &agrave; son disciple. Un personnage Novice sait fabriquer des objets usuels, simples, utiles au quotidien (clous, t&ecirc;tes d&rsquo;outils, anneaux&hellip;) Une fois atteint le niveau Confirm&eacute;, il peut commencer &agrave; forger des pi&egrave;ces plus complexes (fer pour les chevaux, serrures, ferrures d&rsquo;ornements, etc&hellip;) ainsi que des armes et des armures. Si certains exercent leur profession de mani&egrave;re itin&eacute;rante, un forgeron doit tout de m&ecirc;me disposer d&rsquo;un atelier et d&rsquo;outils appropri&eacute;s afin de pouvoir mettre en oeuvre sa comp&eacute;tence. Un forgeron pratique l&rsquo;un des m&eacute;tiers les plus respect&eacute;s parmi les artisans.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"947IgofSqazA1CoD"}
{"name":"Survie","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Le personnage se sent &agrave; l&rsquo;aise dans les milieux naturels et sait comment y vivre en harmonie avec la nature. Cette comp&eacute;tence permet de trouver de quoi se nourrir et s&rsquo;abreuver, un endroit pour s&rsquo;abriter, de faire du feu et de se prot&eacute;ger des conditions climatiques extr&ecirc;mes comme le froid d&rsquo;une nuit d&rsquo;hiver. La Survie recouvre &eacute;galement la chasse et le pistage, mais aussi le sens de l&rsquo;orientation et les premiers soins.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"9AHUm9FLajXTkEZJ"}
{"name":"Traditions","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Gr&acirc;ce &agrave; cette comp&eacute;tence, le personnage se souvient des r&egrave;gles, des coutumes et des lois qui ont cours dans la r&eacute;gion, voire la cit&eacute;, o&ugrave; il se trouve. Si le syst&egrave;me juridique reste assez semblable dans toute la Scandia, il existe souvent quelques variations locales dans l&rsquo;application des peines encourues pour un m&ecirc;me crime. De m&ecirc;me, les us et coutumes de certains endroits changent subtilement par rapport aux habitudes des h&eacute;ros et peuvent provoquer des situations des plus embarrassantes. Un personnage Expert dans cette comp&eacute;tence peut endosser le r&ocirc;le de crieur des lois lors d&rsquo;un thing.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"CIfheBgF5plSgqYT"}
@ -9,10 +9,10 @@
{"name":"Esquive","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Le personnage anticipe les attaques port&eacute;es contre lui et se met hors de port&eacute;e des coups ou des projectiles qui le visent. Bien qu&rsquo;elle s&rsquo;av&egrave;re surtout utile en combat, cette comp&eacute;tence sert &eacute;galement &agrave; &eacute;viter une collision qui menace le h&eacute;ros, comme un attelage lanc&eacute; au galop vers lui, ou un &eacute;boulement de gros rochers. Que l&rsquo;esquive soit r&eacute;ussie ou pas, le personnage se retrouve toujours &agrave; terre, &agrave; quelques pas de sa position initiale (le joueur choisit la direction).</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"MLCAKgi8wRLwlINc"}
{"name":"Commerce","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Il s&rsquo;agit de la connaissance des lois de l&rsquo;offre et de la demande. Le n&eacute;gociant sait &eacute;valuer les choses lors d&rsquo;un troc, ou d&rsquo;une transaction s&rsquo;il utilise de la monnaie. Il conna&icirc;t &eacute;galement les points d&rsquo;approvisionnement pour les diff&eacute;rentes marchandises produites dans la Scandia, et les endroits o&ugrave; il a le plus de chance d&rsquo;en tirer le meilleur profit. Les dates et les lieux o&ugrave; se d&eacute;roulent les foires annuelles n&rsquo;ont pas de secret pour lui. Enfin, cette comp&eacute;tence g&egrave;re tout l&rsquo;aspect intendance de cette activit&eacute;.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"OlELPb9hGkbQNnff"}
{"name":"Chercher","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Cette comp&eacute;tence entre en jeu lorsque le personnage fouille un endroit particulier. Elle permet de r&eacute;v&eacute;ler les &eacute;l&eacute;ments cach&eacute;s dans le d&eacute;cor ou les indices dissimul&eacute;s. Contrairement &agrave; la comp&eacute;tence Vigilance, Chercher n&eacute;cessite une d&eacute;marche active de la part du h&eacute;ros.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"QysZVyRFax7P0mko"}
{"_id":"SEeAKWRSKO0HWt6Q","name":"Médecine*","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Cette comp&eacute;tence correspond &agrave; la connaissance de l&rsquo;ensemble des pratiques m&eacute;dicales de la Scandia. Elle permet d&rsquo;&eacute;tablir un diagnostic, de soigner les maladies les plus courantes, de traiter les blessures, de r&eacute;duire une fracture, d&rsquo;accompagner un accouchement, mais aussi de d&eacute;terminer les causes probables d&rsquo;une mort inexpliqu&eacute;e. Les premiers soins sont quant &agrave; eux couverts par la comp&eacute;tence Survie, mais un personnage plus comp&eacute;tent en M&eacute;decine peut dans ce cas substituer cette discipline &agrave; un test de Survie.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Médecine","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Cette comp&eacute;tence correspond &agrave; la connaissance de l&rsquo;ensemble des pratiques m&eacute;dicales de la Scandia. Elle permet d&rsquo;&eacute;tablir un diagnostic, de soigner les maladies les plus courantes, de traiter les blessures, de r&eacute;duire une fracture, d&rsquo;accompagner un accouchement, mais aussi de d&eacute;terminer les causes probables d&rsquo;une mort inexpliqu&eacute;e. Les premiers soins sont quant &agrave; eux couverts par la comp&eacute;tence Survie, mais un personnage plus comp&eacute;tent en M&eacute;decine peut dans ce cas substituer cette discipline &agrave; un test de Survie.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"SEeAKWRSKO0HWt6Q"}
{"name":"Herboristerie","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Il s&rsquo;agit de la connaissance des plantes, des herbes et des produits naturels permettant de concocter des rem&egrave;des, mais aussi des teintures ou encore des poisons de toutes sortes. Un personnage vers&eacute; dans cette discipline sait &eacute;galement reconna&icirc;tre les plantes rencontr&eacute;es en pleine nature, ainsi que d&eacute;terminer l&rsquo;endroit o&ugrave; il a le plus de chance de trouver une esp&egrave;ce sp&eacute;cifique.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"SHnTbcIm0JZN7UqU"}
{"name":"Natation","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Cette comp&eacute;tence repr&eacute;sente l&rsquo;aptitude &agrave; se mouvoir &agrave; la surface de l&rsquo;eau et &agrave; y demeurer en cas de chute depuis un navire. Le Meneur de Jeu peut appliquer un malus au test de Natation &eacute;gal &agrave; la valeur de protection de l&rsquo;armure port&eacute;e par l&rsquo;infortun&eacute;. Le nageur peut &eacute;galement se d&eacute;placer sous l&rsquo;eau ou plonger depuis les hauteurs vertigineuses des falaises avec de bonnes chances de r&eacute;ussite.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"VcfHyyT169aId8Td"}
{"_id":"ZhIYWUKuDV5hyuUA","name":"Langues*","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":true,"categorie":"generale","specialisation":"","description":"<p>Tous les personnages parlent couramment le norrois (<em>dansk tunga</em>), la langue commune aux diff&eacute;rents royaumes de la Scandia. Chaque sp&eacute;cialisation dans cette comp&eacute;tence correspond &agrave; une langue particuli&egrave;re et &eacute;trang&egrave;re, ou &agrave; un patois local issu d&rsquo;une autre racine linguistique comme le finnois parl&eacute; par les tribus sames. Il est toujours possible de comprendre un dialecte tir&eacute; du norrois en r&eacute;ussissant, g&eacute;n&eacute;ralement, un test d&rsquo;Intellect contre un Seuil de R&eacute;ussite Moyen (14). Exemples de sp&eacute;cialisation : saxon, finnois, balte, germain&hellip;</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Langues","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":true,"categorie":"generale","specialisation":"","description":"<p>Tous les personnages parlent couramment le norrois (<em>dansk tunga</em>), la langue commune aux diff&eacute;rents royaumes de la Scandia. Chaque sp&eacute;cialisation dans cette comp&eacute;tence correspond &agrave; une langue particuli&egrave;re et &eacute;trang&egrave;re, ou &agrave; un patois local issu d&rsquo;une autre racine linguistique comme le finnois parl&eacute; par les tribus sames. Il est toujours possible de comprendre un dialecte tir&eacute; du norrois en r&eacute;ussissant, g&eacute;n&eacute;ralement, un test d&rsquo;Intellect contre un Seuil de R&eacute;ussite Moyen (14). Exemples de sp&eacute;cialisation : saxon, finnois, balte, germain&hellip;</p>","niveau":0,"niveauunrequis":true},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"ZhIYWUKuDV5hyuUA"}
{"name":"Discrétion","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Le personnage sait se d&eacute;placer en silence, tout en profitant du moindre couvert afin de passer inaper&ccedil;u. Cette comp&eacute;tence permet &eacute;galement de se cacher efficacement ou de camoufler un objet sur soi ou dans le d&eacute;cor environnant.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"cKowAJGvHnY0GSOZ"}
{"name":"Art","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":true,"categorie":"generale","specialisation":"","description":"<p>Choisissez le domaine de pr&eacute;dilection du personnage. Il peut s&rsquo;agir d&rsquo;un simple don naturel, d&rsquo;une activit&eacute; professionnelle (pour un scalde), d&rsquo;un loisir&hellip; Cette comp&eacute;tence permet de cr&eacute;er une oeuvre d&rsquo;art originale ou d&rsquo;en reproduire une existante. Sp&eacute;cialisations possibles : orf&egrave;vrerie, chant, musique, danse, gravure, po&eacute;sie d&eacute;clam&eacute;e, flatterie, peinture, etc&hellip;</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"fcTMIpIMVc1cQASZ"}
{"name":"Larcins","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"generale","specialisation":"","description":"<p>Cette comp&eacute;tence recouvre les activit&eacute;s des filous des terres du Nord. Elle permet de crocheter une serrure, mais aussi de couper une bourse ou de subtiliser discr&egrave;tement des clefs. Dans ce deuxi&egrave;me cas, Larcins s&rsquo;emploie dans un test en opposition contre la Perception et la Vigilance de la cible.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"ggoWPfYoTx7QG5ae"}

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.743214 7f844cc006c0 Recovering log #30
2024/05/02-09:20:30.753988 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:30.754165 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.851545 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.851582 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.858223 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.864778 7f844ae006c0 Manual compaction at level-0 from '!items!26CQEICWZs8Gw4Xi' @ 72057594037927935 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.874940 7f844ae006c0 Manual compaction at level-1 from '!items!26CQEICWZs8Gw4Xi' @ 72057594037927935 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.598445 7fdae56006c0 Recovering log #26
2024/04/30-23:29:38.609001 7fdae56006c0 Delete type=3 #24
2024/04/30-23:29:38.609105 7fdae56006c0 Delete type=0 #26
2024/05/01-09:07:55.221157 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.221263 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.228186 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.248533 7fdadfe006c0 Manual compaction at level-0 from '!items!26CQEICWZs8Gw4Xi' @ 72057594037927935 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.248650 7fdadfe006c0 Manual compaction at level-1 from '!items!26CQEICWZs8Gw4Xi' @ 72057594037927935 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at (end)

View File

@ -1,3 +1,3 @@
{"_id":"RAhkadJOfEnVBLpy","name":"Galdr*","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"magique","specialisation":"","description":"<p>Le <em>galdr</em> utilise la puissance divine de la voix pour la magie. Tout pratiquant de la magie peut l&rsquo;utiliser. Il n&rsquo;est pas besoin d&rsquo;avoir une belle voix ou de chanter juste, mais de lancer des incantations.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"_id":"UoWkSxLdXhZQinnc","name":"Runes*","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"magique","specialisation":"","description":"<p>Cette comp&eacute;tence permet de lire et de conna&icirc;tre le sens de chacune des vingt-quatre runes. Mais surtout elles donnent des indications occultes sur la r&eacute;alit&eacute; du monde et permettent de lancer des sorts de protection, mal&eacute;diction et gu&eacute;rison, &agrave; ceux qui savent s&rsquo;en servir.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"_id":"mIBiTKqfqiiepeyz","name":"Sejdr*","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"magique","specialisation":"","description":"<p>Il s&rsquo;agit l&agrave; de l&rsquo;antique art magique enseign&eacute; &agrave; Odhinn m&ecirc;me, par Freyja, la sorcellerie. Les femmes sont plus nombreuses &agrave; en pratiquer certains sorts car ils sont li&eacute;s &agrave; des travaux consid&eacute;r&eacute;s comme purement f&eacute;minins (filer de la laine, mettre des v&ecirc;tements de c&eacute;r&eacute;monie pour les visions, chevaucher un autre personnage). Certains hommes pratiquent le Sejdr sans s&rsquo;en soucier, d&rsquo;autres s&eacute;lectionnent les sorts les moins compromettants et les compl&egrave;tent avec les Runes ou le Galdr.</p>","niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{}}
{"name":"Galdr","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"magique","specialisation":"","description":"<p>Le <em>galdr</em> utilise la puissance divine de la voix pour la magie. Tout pratiquant de la magie peut l&rsquo;utiliser. Il n&rsquo;est pas besoin d&rsquo;avoir une belle voix ou de chanter juste, mais de lancer des incantations.</p>","niveau":0,"niveauunrequis":true},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"RAhkadJOfEnVBLpy"}
{"name":"Runes","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"magique","specialisation":"","description":"<p>Cette comp&eacute;tence permet de lire et de conna&icirc;tre le sens de chacune des vingt-quatre runes. Mais surtout elles donnent des indications occultes sur la r&eacute;alit&eacute; du monde et permettent de lancer des sorts de protection, mal&eacute;diction et gu&eacute;rison, &agrave; ceux qui savent s&rsquo;en servir.</p>","niveau":0,"niveauunrequis":true},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"UoWkSxLdXhZQinnc"}
{"name":"Sejdr","type":"competence","img":"systems/fvtt-yggdrasill/images/icons/icon_skill.png","data":{"isspecialisation":false,"categorie":"magique","specialisation":"","description":"<p>Il s&rsquo;agit l&agrave; de l&rsquo;antique art magique enseign&eacute; &agrave; Odhinn m&ecirc;me, par Freyja, la sorcellerie. Les femmes sont plus nombreuses &agrave; en pratiquer certains sorts car ils sont li&eacute;s &agrave; des travaux consid&eacute;r&eacute;s comme purement f&eacute;minins (filer de la laine, mettre des v&ecirc;tements de c&eacute;r&eacute;monie pour les visions, chevaucher un autre personnage). Certains hommes pratiquent le Sejdr sans s&rsquo;en soucier, d&rsquo;autres s&eacute;lectionnent les sorts les moins compromettants et les compl&egrave;tent avec les Runes ou le Galdr.</p>","niveau":0,"niveauunrequis":true},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"feLeZcbqgHkVzfJP":3},"flags":{},"_id":"mIBiTKqfqiiepeyz"}

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.774893 7f844cc006c0 Recovering log #30
2024/05/02-09:20:30.785238 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:30.785346 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.874955 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.875023 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.882281 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.896915 7f844ae006c0 Manual compaction at level-0 from '!items!RAhkadJOfEnVBLpy' @ 72057594037927935 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.903558 7f844ae006c0 Manual compaction at level-1 from '!items!RAhkadJOfEnVBLpy' @ 72057594037927935 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.628864 7fdae74006c0 Recovering log #26
2024/04/30-23:29:38.639377 7fdae74006c0 Delete type=3 #24
2024/04/30-23:29:38.639485 7fdae74006c0 Delete type=0 #26
2024/05/01-09:07:55.235111 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.235152 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.241587 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.248582 7fdadfe006c0 Manual compaction at level-0 from '!items!RAhkadJOfEnVBLpy' @ 72057594037927935 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.248633 7fdadfe006c0 Manual compaction at level-1 from '!items!RAhkadJOfEnVBLpy' @ 72057594037927935 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at (end)

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.758816 7f844c2006c0 Recovering log #30
2024/05/02-09:20:30.770889 7f844c2006c0 Delete type=3 #28
2024/05/02-09:20:30.770994 7f844c2006c0 Delete type=0 #30
2024/05/02-09:24:00.858366 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.858395 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.864599 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.864804 7f844ae006c0 Manual compaction at level-0 from '!items!6IqVsJsYPrbxUJZX' @ 72057594037927935 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.874924 7f844ae006c0 Manual compaction at level-1 from '!items!6IqVsJsYPrbxUJZX' @ 72057594037927935 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.613651 7fdae6a006c0 Recovering log #26
2024/04/30-23:29:38.625184 7fdae6a006c0 Delete type=3 #24
2024/04/30-23:29:38.625373 7fdae6a006c0 Delete type=0 #26
2024/05/01-09:07:55.228367 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.228409 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.234932 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.248560 7fdadfe006c0 Manual compaction at level-0 from '!items!6IqVsJsYPrbxUJZX' @ 72057594037927935 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.248618 7fdadfe006c0 Manual compaction at level-1 from '!items!6IqVsJsYPrbxUJZX' @ 72057594037927935 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.806675 7f844cc006c0 Recovering log #30
2024/05/02-09:20:30.817229 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:30.817342 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.889174 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.889211 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.896752 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.903544 7f844ae006c0 Manual compaction at level-0 from '!items!1EVz9C1fDUBafPHj' @ 72057594037927935 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.903586 7f844ae006c0 Manual compaction at level-1 from '!items!1EVz9C1fDUBafPHj' @ 72057594037927935 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.658423 7fdae56006c0 Recovering log #26
2024/04/30-23:29:38.669272 7fdae56006c0 Delete type=3 #24
2024/04/30-23:29:38.669388 7fdae56006c0 Delete type=0 #26
2024/05/01-09:07:55.270287 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.270340 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.277858 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.278175 7fdadfe006c0 Manual compaction at level-0 from '!items!1EVz9C1fDUBafPHj' @ 72057594037927935 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.278230 7fdadfe006c0 Manual compaction at level-1 from '!items!1EVz9C1fDUBafPHj' @ 72057594037927935 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -72,7 +72,7 @@
{"name":"#[CF_tempEntity]","type":"competence","img":"icons/svg/item-bag.svg","data":{"isspecialisation":false,"categorie":"","specialisation":"","description":0,"niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_3mky1xz4s5a","folderPath":[],"color":"#000000","fontColor":"#FFFFFF","name":"Matériel de voyage","children":[],"icon":""}},"_id":"YkBXKz3eMPwnZzdy"}
{"_id":"Yzp6xG4TvdqekMbS","name":"Tabouret","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_5sjuseujvx","color":"#000000"}}}
{"_id":"aTXpAI60TC9iPNW2","name":"Noix (x12)","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_gnm0v0yf2u6","color":"#000000"}}}
{"_id":"b7KxnGQYSch0R3LR","name":"Oie, la pièce","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_gnm0v0yf2u6","color":"#000000"}}}
{"_id":"b7KxnGQYSch0R3LR","name":"Oie, la pièce (Copy)","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_gnm0v0yf2u6","color":"#000000"}}}
{"_id":"bBYQWKsP2obNVY3g","name":"Toque de luxe","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":30,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_adwio7cb4q5","color":"#000000"}}}
{"_id":"bVyPX9mly7ZKGmpi","name":"Lanterne","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":12,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_3mky1xz4s5a","color":"#000000"}}}
{"name":"#[CF_tempEntity]","type":"competence","img":"icons/svg/item-bag.svg","data":{"isspecialisation":false,"categorie":"","specialisation":"","description":0,"niveau":0,"niveauunrequis":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_xbkwrebbs7","folderPath":[],"color":"#000000","fontColor":"#FFFFFF","name":"Animaux","children":[],"icon":""}},"_id":"bc4G5zHvyo85bTY4"}
@ -122,7 +122,7 @@
{"_id":"tj5GitQXME3twMZA","name":"Ferme","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":100,"quantite":0,"description":"<p>Valeur: 100 &agrave; 500 onces d'argent</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_4l2xub2vumf","color":"#000000"}}}
{"_id":"u6x3iKoK1dFVSkmR","name":"Assiettes en terre cuite (x6)","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.kq81bAOPnRmqKfcz"},"cf":{"id":"temp_w8bf2nzl2s8","color":"#000000"}}}
{"_id":"uhn3xaweehPUZ50g","name":"Lait de vache, le litre","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_oahtnyiva7l","color":"#000000"}}}
{"_id":"unHM416bSKzKQnEz","name":"Maison longue","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":500,"quantite":0,"description":"<p>Valeur: 500 &agrave; 10 000 onces d'argent</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_4l2xub2vumf","color":"#000000"}}}
{"_id":"unHM416bSKzKQnEz","name":"Maison longue","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":50,"quantite":0,"description":"<p>Valeur: 50 &agrave; 10 000 onces d'argent</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_4l2xub2vumf","color":"#000000"}}}
{"_id":"v2yQffSyG2Hv3PaX","name":"Poulet (x2)","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_xbkwrebbs7","color":"#000000"}}}
{"_id":"vLedwJH0DQKCaXfx","name":"Pantalon de cuir de luxe","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":70,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_adwio7cb4q5","color":"#000000"}}}
{"_id":"vdDSkS9Y3VEkoMtd","name":"Grand sac","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":6,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_3mky1xz4s5a","color":"#000000"}}}
@ -131,7 +131,7 @@
{"_id":"wGNKXkawnjjKSMhL","name":"Chemise ordinaire","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":8,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_adwio7cb4q5","color":"#000000"}}}
{"_id":"wIPiowsoKpN6O2i4","name":"Pièce de chanvre (5 mètres)","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":2,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.K7VwQEbx4MfPwHnD"},"cf":{"id":"temp_t9iszt166h","color":"#000000"}}}
{"_id":"wWj2mtvC00EEqw0T","name":"Pièce de laine (5 mètres)","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":5,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_t9iszt166h","color":"#000000"}}}
{"_id":"xId7XdABXbPFlMZu","name":"Mouton, au kilo","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_gnm0v0yf2u6","color":"#000000"}}}
{"_id":"xId7XdABXbPFlMZu","name":"Mouton, au kilo","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":3,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_gnm0v0yf2u6","color":"#000000"}}}
{"_id":"xSuvtLVKnW7JX9pe","name":"Corde, 10m","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":1,"quantite":0,"description":null},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_3mky1xz4s5a","color":"#000000"}}}
{"_id":"xqd7mgmosQP917Ie","name":"Ceinture de mauvaise qualité","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":5,"quantite":0,"description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"cf":{"id":"temp_adwio7cb4q5","color":"#000000"}}}
{"_id":"xru0AoOx7lNrv85V","name":"Anneau","type":"equipement","img":"icons/svg/item-bag.svg","data":{"equipe":false,"enc":0,"valeur":5,"quantite":0,"description":"<p>Valeur 5 &agrave; 100</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rbua2TFRS5ZZzTJp":3},"flags":{"core":{"sourceId":"Item.BDhealihoWBT314b"},"cf":{"id":"temp_2dc832wxenw","color":"#000000"}}}

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:31.057575 7f844c2006c0 Recovering log #30
2024/05/02-09:20:31.068276 7f844c2006c0 Delete type=3 #28
2024/05/02-09:20:31.068367 7f844c2006c0 Delete type=0 #30
2024/05/02-09:24:00.993561 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.993597 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:01.000558 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:01.000809 7f844ae006c0 Manual compaction at level-0 from '!items!0tELaPFZgkeTUeVn' @ 72057594037927935 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at (end)
2024/05/02-09:24:01.000836 7f844ae006c0 Manual compaction at level-1 from '!items!0tELaPFZgkeTUeVn' @ 72057594037927935 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.878752 7fdae60006c0 Recovering log #26
2024/04/30-23:29:38.890171 7fdae60006c0 Delete type=3 #24
2024/04/30-23:29:38.890274 7fdae60006c0 Delete type=0 #26
2024/05/01-09:07:55.343882 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.343919 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.350824 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.365593 7fdadfe006c0 Manual compaction at level-0 from '!items!0tELaPFZgkeTUeVn' @ 72057594037927935 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.365651 7fdadfe006c0 Manual compaction at level-1 from '!items!0tELaPFZgkeTUeVn' @ 72057594037927935 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:30.821401 7f844c2006c0 Recovering log #30
2024/05/02-09:20:30.832886 7f844c2006c0 Delete type=3 #28
2024/05/02-09:20:30.832985 7f844c2006c0 Delete type=0 #30
2024/05/02-09:24:00.896933 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.896967 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.903398 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.903573 7f844ae006c0 Manual compaction at level-0 from '!items!0EoL2kcGdYiYS8lY' @ 72057594037927935 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.903612 7f844ae006c0 Manual compaction at level-1 from '!items!0EoL2kcGdYiYS8lY' @ 72057594037927935 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.672610 7fdae6a006c0 Recovering log #26
2024/04/30-23:29:38.683005 7fdae6a006c0 Delete type=3 #24
2024/04/30-23:29:38.683098 7fdae6a006c0 Delete type=0 #26
2024/05/01-09:07:55.256906 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.256961 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.263446 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.278143 7fdadfe006c0 Manual compaction at level-0 from '!items!0EoL2kcGdYiYS8lY' @ 72057594037927935 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.278203 7fdadfe006c0 Manual compaction at level-1 from '!items!0EoL2kcGdYiYS8lY' @ 72057594037927935 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:31.042811 7f844cc006c0 Recovering log #30
2024/05/02-09:20:31.054523 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:31.054615 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.986638 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.986739 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.993409 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:01.000786 7f844ae006c0 Manual compaction at level-0 from '!items!7VeQIQHxvw233Jzt' @ 72057594037927935 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at (end)
2024/05/02-09:24:01.000868 7f844ae006c0 Manual compaction at level-1 from '!items!7VeQIQHxvw233Jzt' @ 72057594037927935 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.864329 7fdae74006c0 Recovering log #26
2024/04/30-23:29:38.875039 7fdae74006c0 Delete type=3 #24
2024/04/30-23:29:38.875162 7fdae74006c0 Delete type=0 #26
2024/05/01-09:07:55.358841 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.358889 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.365401 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.365623 7fdadfe006c0 Manual compaction at level-0 from '!items!7VeQIQHxvw233Jzt' @ 72057594037927935 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.365664 7fdadfe006c0 Manual compaction at level-1 from '!items!7VeQIQHxvw233Jzt' @ 72057594037927935 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:31.028964 7f844c2006c0 Recovering log #30
2024/05/02-09:20:31.039429 7f844c2006c0 Delete type=3 #28
2024/05/02-09:20:31.039533 7f844c2006c0 Delete type=0 #30
2024/05/02-09:24:00.979204 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.979236 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.986242 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.986432 7f844ae006c0 Manual compaction at level-0 from '!items!89NwqZV3Qn9xWeO0' @ 72057594037927935 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.986497 7f844ae006c0 Manual compaction at level-1 from '!items!89NwqZV3Qn9xWeO0' @ 72057594037927935 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.848909 7fdae6a006c0 Recovering log #26
2024/04/30-23:29:38.860284 7fdae6a006c0 Delete type=3 #24
2024/04/30-23:29:38.860378 7fdae6a006c0 Delete type=0 #26
2024/05/01-09:07:55.337174 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.337262 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.343707 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.365572 7fdadfe006c0 Manual compaction at level-0 from '!items!89NwqZV3Qn9xWeO0' @ 72057594037927935 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.365637 7fdadfe006c0 Manual compaction at level-1 from '!items!89NwqZV3Qn9xWeO0' @ 72057594037927935 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000032

View File

@ -1,8 +0,0 @@
2024/05/02-09:20:31.014753 7f844cc006c0 Recovering log #30
2024/05/02-09:20:31.025539 7f844cc006c0 Delete type=3 #28
2024/05/02-09:20:31.025663 7f844cc006c0 Delete type=0 #30
2024/05/02-09:24:00.972587 7f844ae006c0 Level-0 table #35: started
2024/05/02-09:24:00.972622 7f844ae006c0 Level-0 table #35: 0 bytes OK
2024/05/02-09:24:00.979047 7f844ae006c0 Delete type=0 #33
2024/05/02-09:24:00.986419 7f844ae006c0 Manual compaction at level-0 from '!items!1smXvw2EcuTkytDv' @ 72057594037927935 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at (end)
2024/05/02-09:24:00.986455 7f844ae006c0 Manual compaction at level-1 from '!items!1smXvw2EcuTkytDv' @ 72057594037927935 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2024/04/30-23:29:38.834359 7fdae56006c0 Recovering log #26
2024/04/30-23:29:38.845525 7fdae56006c0 Delete type=3 #24
2024/04/30-23:29:38.845680 7fdae56006c0 Delete type=0 #26
2024/05/01-09:07:55.351078 7fdadfe006c0 Level-0 table #31: started
2024/05/01-09:07:55.351137 7fdadfe006c0 Level-0 table #31: 0 bytes OK
2024/05/01-09:07:55.358613 7fdadfe006c0 Delete type=0 #29
2024/05/01-09:07:55.365609 7fdadfe006c0 Manual compaction at level-0 from '!items!1smXvw2EcuTkytDv' @ 72057594037927935 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at (end)
2024/05/01-09:07:55.365681 7fdadfe006c0 Manual compaction at level-1 from '!items!1smXvw2EcuTkytDv' @ 72057594037927935 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at (end)

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