Compare commits
1 Commits
main
...
LeRatierBr
Author | SHA1 | Date | |
---|---|---|---|
b58995014c |
@ -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
|
||||
|
11
README.md
11
README.md
@ -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.
|
||||
|
@ -6,16 +6,16 @@
|
||||
import { YggdrasillUtility } from "./yggdrasill-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class YggdrasillActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
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,9 +23,9 @@ export class YggdrasillActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
|
||||
getData() {
|
||||
const objectData = YggdrasillUtility.data(this.object);
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: objectData.id,
|
||||
@ -34,7 +34,7 @@ export class YggdrasillActorSheet extends foundry.appv1.sheets.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 foundry.appv1.sheets.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 foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.tiragesrunes, {async: true}),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, {async: true}),
|
||||
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, {async: true}),
|
||||
gmnotes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.gmnotes, {async: true}),
|
||||
optionsDMDP: YggdrasillUtility.createDirectSortedOptionList(-10, +10),
|
||||
optionsBase: YggdrasillUtility.createDirectOptionList(0, 20),
|
||||
optionsFuror: YggdrasillUtility.createDirectOptionList(0, 15),
|
||||
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);
|
||||
@ -88,10 +80,10 @@ export class YggdrasillActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
dm.total = dm.max + Number(dm.bonusmalus);
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
updateDP( data ) {
|
||||
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
|
||||
@ -113,19 +105,19 @@ updateDP( data ) {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
YggdrasillUtility.confirmDelete(this, li);
|
||||
});
|
||||
|
||||
|
||||
html.find('#isEpuise').click(event => {
|
||||
this.actor.toggleEpuise( );
|
||||
} );
|
||||
|
||||
|
||||
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 => {
|
||||
@ -159,32 +151,32 @@ updateDP( data ) {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const sortId = li.data("item-id");
|
||||
this.actor.rollSort(sortId, "sejdr");
|
||||
});
|
||||
});
|
||||
html.find('.sort-galdr').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const sortId = li.data("item-id");
|
||||
this.actor.rollSort(sortId, "galdr");
|
||||
});
|
||||
});
|
||||
html.find('.sort-rune').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const sortId = li.data("item-id");
|
||||
this.actor.rollSort(sortId, "rune");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
html.find('.arme-label a').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const armeId = li.data("arme-id");
|
||||
this.actor.rollArme(armeId);
|
||||
});
|
||||
});
|
||||
html.find('.carac-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let categ = li.data("carac-categ");
|
||||
let carac = li.data("carac-key");
|
||||
this.actor.rollCarac(categ, carac);
|
||||
});
|
||||
});
|
||||
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) => {
|
||||
@ -195,12 +187,12 @@ updateDP( data ) {
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
this.render(true);
|
||||
});
|
||||
});
|
||||
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 => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equiperObject( li.data("item-id") );
|
||||
|
@ -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,58 +716,42 @@ export class YggdrasillActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
getEncTotal( ) {
|
||||
let encTotal = 0;
|
||||
for( let item of this.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);
|
||||
for( let item of this.data.items) {
|
||||
if (item.type == "equipement" || item.type == "armecc"
|
||||
|| item.type == "armedist" || item.type == "armure" || item.type == "monnaie") {
|
||||
encTotal += item.data.data.enc;
|
||||
}
|
||||
}
|
||||
return encTotal;
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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" }
|
||||
]
|
||||
|
||||
|
||||
}
|
@ -6,12 +6,12 @@
|
||||
import { YggdrasillUtility } from "./yggdrasill-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class YggdrasillFigurantSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
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,9 +23,9 @@ export class YggdrasillFigurantSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
|
||||
getData() {
|
||||
const objectData = YggdrasillUtility.data(this.object);
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: objectData.id,
|
||||
@ -34,21 +34,18 @@ export class YggdrasillFigurantSheet extends foundry.appv1.sheets.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),
|
||||
optionsBase: YggdrasillUtility.createDirectOptionList(0, 20),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, {async: true}),
|
||||
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, {async: true}),
|
||||
optionsAttr: new Array(21).fill('option'),
|
||||
optionsBase: YggdrasillUtility.createDirectOptionList(0, 20),
|
||||
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 foundry.appv1.sheets.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
|
||||
@ -74,7 +71,7 @@ export class YggdrasillFigurantSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
YggdrasillUtility.confirmDelete(this, li);
|
||||
});
|
||||
|
||||
|
||||
html.find('.equipement-moins').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.decrementeQuantite( li.data("item-id") );
|
||||
@ -89,16 +86,16 @@ export class YggdrasillFigurantSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
let attrKey = li.data("attr-key");
|
||||
let attrSubKey = $(event.currentTarget).data("attr-sub-key");
|
||||
this.actor.rollAttribute(attrKey, attrSubKey);
|
||||
});
|
||||
});
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
this.render(true);
|
||||
});
|
||||
});
|
||||
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 => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equiperObject( li.data("item-id") );
|
||||
|
@ -4,11 +4,11 @@ import { YggdrasillUtility } from "./yggdrasill-utility.js";
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class YggdrasillItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
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,
|
||||
@ -26,7 +26,7 @@ export class YggdrasillItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
{
|
||||
class: "post",
|
||||
icon: "fas fa-comment",
|
||||
onclick: ev => {}
|
||||
onclick: ev => {}
|
||||
})
|
||||
return buttons
|
||||
}
|
||||
@ -40,11 +40,11 @@ export class YggdrasillItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
sheetBody.css("height", bodyHeight);
|
||||
return position;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = foundry.utils.duplicate(this.object);
|
||||
|
||||
const objectData = YggdrasillUtility.data(this.object);
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: objectData.id,
|
||||
@ -53,19 +53,17 @@ export class YggdrasillItemSheet extends foundry.appv1.sheets.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 foundry.applications.ux.TextEditor.implementation.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;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
@ -73,21 +71,21 @@ export class YggdrasillItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
|
||||
// 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));
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
get template()
|
||||
{
|
||||
|
@ -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 */
|
||||
@ -30,14 +28,12 @@ Hooks.once("init", async function () {
|
||||
YggdrasillUtility.preloadHandlebarsTemplates();
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Set an initiative formula for the system
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d20",
|
||||
decimals: 0
|
||||
};
|
||||
|
||||
game.system.config = YGGDRASILL_CONFIG
|
||||
|
||||
/* -------------------------------------------- */
|
||||
game.socket.on("system.fvtt-yggdrasill", data => {
|
||||
YggdrasillUtility.onSocketMesssage(data);
|
||||
@ -52,23 +48,26 @@ Hooks.once("init", async function () {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register sheet application classes
|
||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-yggdrasill", YggdrasillActorSheet, { types: ["personnage"], makeDefault: true });
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-yggdrasill", YggdrasillFigurantSheet, { types: ["figurant"], makeDefault: false });
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-yggdrasill", YggdrasillItemSheet, { makeDefault: true });
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-yggdrasill", YggdrasillActorSheet, { types: ["personnage"], makeDefault: true });
|
||||
Actors.registerSheet("fvtt-yggdrasill", YggdrasillFigurantSheet, { types: ["figurant"], makeDefault: false });
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-yggdrasill", YggdrasillItemSheet, { makeDefault: true });
|
||||
|
||||
// Init/registers
|
||||
Hooks.on('renderChatLog', (log, html, data) => {
|
||||
//YggdrasillUtility.registerChatCallbacks(html);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
function welcomeMessage() {
|
||||
//ChatUtility.removeMyChatMessageContaining('<div id="welcome-message-sos">');
|
||||
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>
|
||||
` });
|
||||
}
|
||||
|
||||
@ -85,9 +84,7 @@ Hooks.once("ready", function () {
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
ClassCounter.registerUsageCount()
|
||||
welcomeMessage()
|
||||
welcomeMessage();
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -11,24 +11,24 @@ export class YggdrasillRoll extends Dialog {
|
||||
let html
|
||||
let h = 440;
|
||||
if ( rollData.mode == "competence") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-competence.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-competence.html', rollData);
|
||||
h = 340;
|
||||
} else if (rollData.mode == "carac") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-carac.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-carac.html', rollData);
|
||||
h = 320;
|
||||
} else if (rollData.mode == "attribut") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-attribut.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-attribut.html', rollData);
|
||||
h = 320;
|
||||
} else if (rollData.mode == "armecc") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-armecc.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-armecc.html', rollData);
|
||||
} else if (rollData.mode == "sejdr") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-sejdr.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-sejdr.html', rollData);
|
||||
} else if (rollData.mode == "rune") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-rune.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-rune.html', rollData);
|
||||
} else if (rollData.mode == "galdr") {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-galdr.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-galdr.html', rollData);
|
||||
} else {
|
||||
html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-armetir.html', rollData);
|
||||
html = await renderTemplate('systems/fvtt-yggdrasill/templates/roll-dialog-armetir.html', rollData);
|
||||
}
|
||||
let options = { classes: ["yggdrasilldialog"], width: 600, height: h, 'z-index': 99999 };
|
||||
return new YggdrasillRoll(actor, rollData, html, options );
|
||||
@ -39,11 +39,11 @@ export class YggdrasillRoll extends Dialog {
|
||||
let conf = {
|
||||
title: (rollData.mode == "competence") ? "Compétence" : "Caractéristique",
|
||||
content: html,
|
||||
buttons: {
|
||||
buttons: {
|
||||
roll: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer le Test",
|
||||
callback: () => { this.roll() }
|
||||
callback: () => { this.roll() }
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
@ -68,17 +68,17 @@ export class YggdrasillRoll extends Dialog {
|
||||
YggdrasillUtility.rollYggdrasill( this.rollData )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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;
|
||||
}
|
||||
@ -88,35 +88,30 @@ export class YggdrasillRoll extends Dialog {
|
||||
let support = 0;
|
||||
|
||||
this.rollData.dureeRune = 6 - this.rollData.agiliteCarac.value;
|
||||
if ( this.rollData.supportRune == "peau") {
|
||||
if ( this.rollData.supportRune == "peau") {
|
||||
support = 3;
|
||||
this.rollData.echelleDuree = "Actions";
|
||||
this.rollData.echelleDureeVie = "Heures"
|
||||
}
|
||||
if ( this.rollData.supportRune == "tissu") {
|
||||
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" );
|
||||
@ -156,12 +151,12 @@ export class YggdrasillRoll extends Dialog {
|
||||
$("#caracValue").text(carac.value+"d10");
|
||||
});
|
||||
|
||||
html.find('#typeAttack').change((event) => {
|
||||
html.find('#typeAttack').change((event) => {
|
||||
let attackType = event.currentTarget.value;
|
||||
let attackDef
|
||||
if ( this.rollData.mode == 'armecc')
|
||||
if ( this.rollData.mode == 'armecc')
|
||||
attackDef = this.actor.getAttaqueData( attackType);
|
||||
else
|
||||
else
|
||||
attackDef = this.actor.getTirData( attackType);
|
||||
this.rollData.attackDef = attackDef;
|
||||
this.rollData.selectedCarac = attackDef.carac;
|
||||
@ -192,8 +187,8 @@ export class YggdrasillRoll extends Dialog {
|
||||
this.rollData.zoneGaldr = event.currentTarget.value;
|
||||
this.updateGaldrSR();
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
html.find('#bonusMalus').change((event) => {
|
||||
this.rollData.bonusMalus = Number(event.currentTarget.value);
|
||||
});
|
||||
@ -208,5 +203,5 @@ export class YggdrasillRoll extends Dialog {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,38 +1,47 @@
|
||||
/* -------------------------------------------- */
|
||||
/* -------------------------------------------- */
|
||||
//import { YggdrasillCombat } from "./yggdrasill-combat.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* -------------------------------------------- */
|
||||
const dureeGaldrText = { "1d5a": "Actions", "1d10t": "Tours", "1d10m": "Minutes", "1d10h": "Heures", "1d5j": "Jours"};
|
||||
const ciblesGaldrText = { "1": "1", "2_4": "2 à 4", "5_9": "5 à 9", "10_49": "10 à 49", "50plus": "50 et plus"};
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* -------------------------------------------- */
|
||||
export class YggdrasillUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async preloadHandlebarsTemplates() {
|
||||
|
||||
|
||||
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 foundry.applications.handlebars.loadTemplates(templatePaths);
|
||||
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 = [];
|
||||
for(let i=min; i<=max; i++) {
|
||||
for(let i=min; i<=max; i++) {
|
||||
options.push( {value:i, text: `${i}` } );
|
||||
}
|
||||
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,6 +59,23 @@ export class YggdrasillUtility {
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static buildSROptions( ) {
|
||||
let options = ""
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static onSocketMesssage( msg ) {
|
||||
@ -72,78 +98,41 @@ 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
|
||||
let isCritical = false;
|
||||
let isFailure = false;
|
||||
let isSuccess = false;
|
||||
let marge = 0;
|
||||
let marge = 0;
|
||||
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);
|
||||
}
|
||||
if ( rollData.srFinal > 0 ) {
|
||||
isCritical = rollData.finalTotal >= rollData.srFinal*2;
|
||||
isSuccess = rollData.finalTotal >= rollData.srFinal;
|
||||
marge = rollData.finalTotal - rollData.srFinal;
|
||||
rollData.srFinal = rollData.sr;
|
||||
if ( rollData.srFinal > 0 ) {
|
||||
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( );
|
||||
await this.showDiceSoNice(rollData.rollDegats, game.settings.get("core", "rollMode") );
|
||||
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;
|
||||
}
|
||||
|
||||
@ -152,101 +141,83 @@ 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 foundry.applications.handlebars.renderTemplate(`systems/fvtt-yggdrasill/templates/chat-generic-result.html`, rollData)
|
||||
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;
|
||||
let isFailure = false;
|
||||
let isSuccess = false;
|
||||
let marge = 0;
|
||||
let marge = 0;
|
||||
let nbDice = rollData.selectedCarac.value;
|
||||
let niveauCompetence = 0;
|
||||
|
||||
|
||||
// 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?.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
|
||||
rollData.finalBM -= 3;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
if ( rollData.srFinal > 0 ) {
|
||||
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++;
|
||||
}
|
||||
isFailure = nbOnes >= 3;
|
||||
let nbOnes = myRoll.dice[0].results.filter( dice => dice.result == 1);
|
||||
isFailure = nbOnes.length >= 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
|
||||
@ -255,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 {
|
||||
@ -274,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) {
|
||||
@ -298,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);
|
||||
@ -331,7 +304,7 @@ export class YggdrasillUtility {
|
||||
static createChatWithRollMode(name, chatOptions) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions);
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
@ -360,7 +333,7 @@ export class YggdrasillUtility {
|
||||
d.render(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async showDiceSoNice(roll, rollMode) {
|
||||
if (game.modules.get("dice-so-nice")?.active) {
|
||||
|
@ -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
|
||||
|
@ -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èle le plus fréquent comporte un nasal et des « lunettes » qui protègent les yeux. Sur une base de bol en métal, des lamelles de renforts sont rivetées afin d’assurer la rigidité de l’ensemble. L’intérieur est doublé de cuir et de tissu afin d’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ées et cousues sur la version précédente. La poitrine, le ventre, les omoplates et les coudes sont particulièrement renforcés. Des pièces semi-rigides, bombées, enserrent parfois les é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’agit d’un grand morceau de peau encerclant les épaules et le cou. En général, cette fourrure est fixée sur une cape. En plus de la protection qu’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 épaisse et doublée de tissu. Des pièces de métal, des rivets plats en cuivre, en bronze ou en fer apportent une protection supplémentaire aux zones les plus exposé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ègent l’avant-bras, du dessus de la main jusqu’au coude. Souvent gravés de motifs décoratifs, ils se composent de lamelles de cuir rigidifiées et nouées à l’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ées autour des cuisses ou des mollets, elles protègent le combattant des coups visant ses jambes. Ici aussi, les artisans essaient souvent d’orner ces pièces d’armure de décorations ciselées dans la matiè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’agit autant d’un vêtement courant que d’une armure. La veste recouvre le torse, le ventre et les hanches. Certaines possèdent des manches, courtes ou longues. Le cuir souple et fin ne restreint guère la liberté 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ée de centaines d’anneaux de fer rivetés, la cotte de mailles protège les mêmes parties du corps qu’une veste. Elle ne descend jamais sur les jambes car cela restreint trop la mobilité des combattants. Ceux-ci enfilent dessous une chemise molletonné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.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.648964 7fe00affd6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.659213 7fe00affd6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.659296 7fe00affd6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.649791 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.653017 7fe0093ff6c0 Level-0 table #39: 2327 bytes OK
|
||||
2025/05/02-00:00:01.659302 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.659500 7fe0093ff6c0 Manual compaction at level-0 from '!items!3VBHojfjdD504ibv' @ 72057594037927935 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.690344 7fe0093ff6c0 Manual compaction at level-1 from '!items!3VBHojfjdD504ibv' @ 72057594037927935 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at '!items!x3aMYeKa73GxJ1Ge' @ 45 : 1
|
||||
2025/05/02-00:00:01.690353 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.693550 7fe0093ff6c0 Generated table #40@1: 15 keys, 2327 bytes
|
||||
2025/05/02-00:00:01.693570 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 2327 bytes
|
||||
2025/05/02-00:00:01.700976 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.701159 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.701309 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.701436 7fe0093ff6c0 Manual compaction at level-1 from '!items!x3aMYeKa73GxJ1Ge' @ 45 : 1 .. '!items!x3aMYeKa73GxJ1Ge' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
@ -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ègent l’avant-bras, du dessus de la main jusqu’au coude. Souvent gravés de motifs décoratifs, ils se composent de lamelles de cuir rigidifiées et nouées à l’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ègent l’avant-bras, du dessus de la main jusqu’au coude. Souvent gravés de motifs décoratifs, ils se composent de lamelles de cuir rigidifiées et nouées à l’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ées et cousues sur la version précédente. La poitrine, le ventre, les omoplates et les coudes sont particulièrement renforcés. Des pièces semi-rigides, bombées, enserrent parfois les é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’agit autant d’un vêtement courant que d’une armure. La veste recouvre le torse, le ventre et les hanches. Certaines possèdent des manches, courtes ou longues. Le cuir souple et fin ne restreint guère la liberté 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 épaisse et doublée de tissu. Des pièces de métal, des rivets plats en cuivre, en bronze ou en fer apportent une protection supplémentaire aux zones les plus exposé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’agit d’un grand morceau de peau encerclant les épaules et le cou. En général, cette fourrure est fixée sur une cape. En plus de la protection qu’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ées autour des cuisses ou des mollets, elles protègent le combattant des coups visant ses jambes. Ici aussi, les artisans essaient souvent d’orner ces pièces d’armure de décorations ciselées dans la matiè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èle le plus fréquent comporte un nasal et des « lunettes » qui protègent les yeux. Sur une base de bol en métal, des lamelles de renforts sont rivetées afin d’assurer la rigidité de l’ensemble. L’intérieur est doublé de cuir et de tissu afin d’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’agit d’un grand morceau de peau encerclant les épaules et le cou. En général, cette fourrure est fixée sur une cape. En plus de la protection qu’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ées autour des cuisses ou des mollets, elles protègent le combattant des coups visant ses jambes. Ici aussi, les artisans essaient souvent d’orner ces pièces d’armure de décorations ciselées dans la matiè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èle le plus fréquent comporte un nasal et des « lunettes » qui protègent les yeux. Sur une base de bol en métal, des lamelles de renforts sont rivetées afin d’assurer la rigidité de l’ensemble. L’intérieur est doublé de cuir et de tissu afin d’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ée de centaines d’anneaux de fer rivetés, la cotte de mailles protège les mêmes parties du corps qu’une veste. Elle ne descend jamais sur les jambes car cela restreint trop la mobilité des combattants. Ceux-ci enfilent dessous une chemise molletonné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.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.662878 7fe00a7fc6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.674030 7fe00a7fc6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.674181 7fe00a7fc6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.701554 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.704718 7fe0093ff6c0 Level-0 table #39: 3197 bytes OK
|
||||
2025/05/02-00:00:01.710800 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.741412 7fe0093ff6c0 Manual compaction at level-0 from '!items!4YGPuZ813BWQaNbq' @ 72057594037927935 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.741481 7fe0093ff6c0 Manual compaction at level-1 from '!items!4YGPuZ813BWQaNbq' @ 72057594037927935 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at '!items!qUXBrstsh5Oo8FEx' @ 24 : 1
|
||||
2025/05/02-00:00:01.741491 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.744814 7fe0093ff6c0 Generated table #40@1: 8 keys, 3197 bytes
|
||||
2025/05/02-00:00:01.744839 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 3197 bytes
|
||||
2025/05/02-00:00:01.751538 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.751680 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.751873 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.782461 7fe0093ff6c0 Manual compaction at level-1 from '!items!qUXBrstsh5Oo8FEx' @ 24 : 1 .. '!items!qUXBrstsh5Oo8FEx' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.635609 7fe00b7fe6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.645474 7fe00b7fe6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.645571 7fe00b7fe6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.629647 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.633062 7fe0093ff6c0 Level-0 table #39: 4373 bytes OK
|
||||
2025/05/02-00:00:01.639223 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.659477 7fe0093ff6c0 Manual compaction at level-0 from '!items!4rM9IvDuijsjbAhI' @ 72057594037927935 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.670214 7fe0093ff6c0 Manual compaction at level-1 from '!items!4rM9IvDuijsjbAhI' @ 72057594037927935 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at '!items!swTZ43FJRWkqjR75' @ 45 : 1
|
||||
2025/05/02-00:00:01.670224 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.673584 7fe0093ff6c0 Generated table #40@1: 15 keys, 4373 bytes
|
||||
2025/05/02-00:00:01.673615 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 4373 bytes
|
||||
2025/05/02-00:00:01.679975 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.680089 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.680247 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.701412 7fe0093ff6c0 Manual compaction at level-1 from '!items!swTZ43FJRWkqjR75' @ 45 : 1 .. '!items!swTZ43FJRWkqjR75' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
@ -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étails naturels qui reflètent le sens caché des choses. Le personnage sait repérer et interpréter ces éléments. Il s’agit en général d’y voir des conditions favorables ou défavorables pour le moment présent, mais aussi des messages d’avertissement envoyés par les dieux. Les habitants de la Scandia sont des gens très superstitieux et ils tendent à voir partout des présages significatifs. Le Meneur de Jeu pourra en profiter pour glisser quelques indices obscurs sur la situation actuelle des héros qui, dans l’idéal, révèleront leur plein sens une fois qu’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’intermédiaire de la menace verbale ou physique, le personnage peut contraindre quelqu’un à lui obéir. Une tentative d’Intimidation nécessite un test en opposition. La cible tente de résister grâce à sa Ténacité et à sa Dé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’agit de la capacité à mener une discussion vers un compromis acceptable par les deux parties. Négociation est une compétence utile aux diplomates de la Scandia, mais aussi aux marchands qui peuvent mener à bien leur marchandage lors de l’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ît les règles et sait pratiquer la plupart des jeux prisés par les habitants de la Scandia, comme les jeux de dés ou le <em>hnefatafl</em>. Cette compétence s’utilise généralement avec des tests en opposition mettant en concurrence les niveaux de maîtrise respectifs des joueurs. Mais elle permet également de tricher. Dans ce cas, les autres participants peuvent tenter un test en opposition de Perception + Vigilance. Si le tricheur est démasqué, attendezvous à des conséquences… musclé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ît les règles et sait pratiquer la plupart des jeux prisés par les habitants de la Scandia, comme les jeux de dés ou le <em>hnefatafl</em>. Cette compétence s’utilise généralement avec des tests en opposition mettant en concurrence les niveaux de maîtrise respectifs des joueurs. Mais elle permet également de tricher. Dans ce cas, les autres participants peuvent tenter un test en opposition de Perception + Vigilance. Si le tricheur est démasqué, attendezvous à des conséquences… musclé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étence regroupe l’ensemble des activité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évèlent autonomes lorsqu’il s’agit de fabriquer ou de réparer des ustensiles basiques. Un niveau Confirmé permet d’exercer son artisanat en professionnel et de gagner sa vie avec cette activité. Les meilleurs artisans bénéficient d’une renommée et d’une considération importantes. L’utilisation de cette compétence correspond en général à un test étendu. Spécialisations possibles : cordonnerie, ferronnerie, chaudronnerie, charpenterie, tissage, tannerie, corderie, taille de pierre, poterie, sellerie, etc…</p>\n<p>Il existe cependant deux spécialisations qui méritent que l’on s’y attarde, tant elles occupent une place importante dans la société des Terres du Nord.</p>\n<p><strong>Construction navale : </strong>cette spécialisation permet de mener à bien la construction des différents types de navires sillonnant les flots de la Scandia. Le personnage maîtrise aussi bien les secrets de l’architecture navale que les techniques de la charpenterie de marine, mais il sait tout autant diriger les artisans qui vont réaliser le bateau selon ses instructions. Les meilleurs dans ce domaine sont très recherchés par tous les jarls et souverains des Royaumes Nordiques.</p>\n<p><strong>Forge : </strong>l’art de la forge nécessite des connaissances spécifiques dont certaines confinent au secret transmis uniquement d’un maître à son disciple. Un personnage Novice sait fabriquer des objets usuels, simples, utiles au quotidien (clous, têtes d’outils, anneaux…) Une fois atteint le niveau Confirmé, il peut commencer à forger des pièces plus complexes (fer pour les chevaux, serrures, ferrures d’ornements, etc…) ainsi que des armes et des armures. Si certains exercent leur profession de manière itinérante, un forgeron doit tout de même disposer d’un atelier et d’outils appropriés afin de pouvoir mettre en oeuvre sa compétence. Un forgeron pratique l’un des métiers les plus respecté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 à l’aise dans les milieux naturels et sait comment y vivre en harmonie avec la nature. Cette compétence permet de trouver de quoi se nourrir et s’abreuver, un endroit pour s’abriter, de faire du feu et de se protéger des conditions climatiques extrêmes comme le froid d’une nuit d’hiver. La Survie recouvre également la chasse et le pistage, mais aussi le sens de l’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âce à cette compétence, le personnage se souvient des règles, des coutumes et des lois qui ont cours dans la région, voire la cité, où il se trouve. Si le système juridique reste assez semblable dans toute la Scandia, il existe souvent quelques variations locales dans l’application des peines encourues pour un même crime. De même, les us et coutumes de certains endroits changent subtilement par rapport aux habitudes des héros et peuvent provoquer des situations des plus embarrassantes. Un personnage Expert dans cette compétence peut endosser le rôle de crieur des lois lors d’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ées contre lui et se met hors de portée des coups ou des projectiles qui le visent. Bien qu’elle s’avère surtout utile en combat, cette compétence sert également à éviter une collision qui menace le héros, comme un attelage lancé au galop vers lui, ou un éboulement de gros rochers. Que l’esquive soit réussie ou pas, le personnage se retrouve toujours à terre, à 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’agit de la connaissance des lois de l’offre et de la demande. Le négociant sait évaluer les choses lors d’un troc, ou d’une transaction s’il utilise de la monnaie. Il connaît également les points d’approvisionnement pour les différentes marchandises produites dans la Scandia, et les endroits où il a le plus de chance d’en tirer le meilleur profit. Les dates et les lieux où se déroulent les foires annuelles n’ont pas de secret pour lui. Enfin, cette compétence gère tout l’aspect intendance de cette activité.</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étence entre en jeu lorsque le personnage fouille un endroit particulier. Elle permet de révéler les éléments cachés dans le décor ou les indices dissimulés. Contrairement à la compétence Vigilance, Chercher nécessite une démarche active de la part du hé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étence correspond à la connaissance de l’ensemble des pratiques médicales de la Scandia. Elle permet d’établir un diagnostic, de soigner les maladies les plus courantes, de traiter les blessures, de réduire une fracture, d’accompagner un accouchement, mais aussi de déterminer les causes probables d’une mort inexpliquée. Les premiers soins sont quant à eux couverts par la compétence Survie, mais un personnage plus compétent en Médecine peut dans ce cas substituer cette discipline à 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étence correspond à la connaissance de l’ensemble des pratiques médicales de la Scandia. Elle permet d’établir un diagnostic, de soigner les maladies les plus courantes, de traiter les blessures, de réduire une fracture, d’accompagner un accouchement, mais aussi de déterminer les causes probables d’une mort inexpliquée. Les premiers soins sont quant à eux couverts par la compétence Survie, mais un personnage plus compétent en Médecine peut dans ce cas substituer cette discipline à 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’agit de la connaissance des plantes, des herbes et des produits naturels permettant de concocter des remèdes, mais aussi des teintures ou encore des poisons de toutes sortes. Un personnage versé dans cette discipline sait également reconnaître les plantes rencontrées en pleine nature, ainsi que déterminer l’endroit où il a le plus de chance de trouver une espèce spé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étence représente l’aptitude à se mouvoir à la surface de l’eau et à y demeurer en cas de chute depuis un navire. Le Meneur de Jeu peut appliquer un malus au test de Natation égal à la valeur de protection de l’armure portée par l’infortuné. Le nageur peut également se déplacer sous l’eau ou plonger depuis les hauteurs vertigineuses des falaises avec de bonnes chances de ré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érents royaumes de la Scandia. Chaque spécialisation dans cette compétence correspond à une langue particulière et étrangère, ou à un patois local issu d’une autre racine linguistique comme le finnois parlé par les tribus sames. Il est toujours possible de comprendre un dialecte tiré du norrois en réussissant, généralement, un test d’Intellect contre un Seuil de Réussite Moyen (14). Exemples de spécialisation : saxon, finnois, balte, germain…</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érents royaumes de la Scandia. Chaque spécialisation dans cette compétence correspond à une langue particulière et étrangère, ou à un patois local issu d’une autre racine linguistique comme le finnois parlé par les tribus sames. Il est toujours possible de comprendre un dialecte tiré du norrois en réussissant, généralement, un test d’Intellect contre un Seuil de Réussite Moyen (14). Exemples de spécialisation : saxon, finnois, balte, germain…</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éplacer en silence, tout en profitant du moindre couvert afin de passer inaperçu. Cette compétence permet également de se cacher efficacement ou de camoufler un objet sur soi ou dans le dé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édilection du personnage. Il peut s’agir d’un simple don naturel, d’une activité professionnelle (pour un scalde), d’un loisir… Cette compétence permet de créer une oeuvre d’art originale ou d’en reproduire une existante. Spécialisations possibles : orfèvrerie, chant, musique, danse, gravure, poésie déclamée, flatterie, peinture, etc…</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étence recouvre les activités des filous des terres du Nord. Elle permet de crocheter une serrure, mais aussi de couper une bourse ou de subtiliser discrètement des clefs. Dans ce deuxième cas, Larcins s’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"}
|
||||
|
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.556908 7fe009ffb6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.567507 7fe009ffb6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.567628 7fe009ffb6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.567300 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.570622 7fe0093ff6c0 Level-0 table #39: 18501 bytes OK
|
||||
2025/05/02-00:00:01.576851 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.577006 7fe0093ff6c0 Manual compaction at level-0 from '!items!26CQEICWZs8Gw4Xi' @ 72057594037927935 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.609221 7fe0093ff6c0 Manual compaction at level-1 from '!items!26CQEICWZs8Gw4Xi' @ 72057594037927935 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at '!items!ylqZMDyXujUlSorr' @ 90 : 1
|
||||
2025/05/02-00:00:01.609228 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.612484 7fe0093ff6c0 Generated table #40@1: 30 keys, 18501 bytes
|
||||
2025/05/02-00:00:01.612511 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 18501 bytes
|
||||
2025/05/02-00:00:01.618471 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.618573 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.618669 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.618752 7fe0093ff6c0 Manual compaction at level-1 from '!items!ylqZMDyXujUlSorr' @ 90 : 1 .. '!items!ylqZMDyXujUlSorr' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
@ -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’utiliser. Il n’est pas besoin d’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étence permet de lire et de connaître le sens de chacune des vingt-quatre runes. Mais surtout elles donnent des indications occultes sur la réalité du monde et permettent de lancer des sorts de protection, malédiction et guérison, à ceux qui savent s’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’agit là de l’antique art magique enseigné à Odhinn même, par Freyja, la sorcellerie. Les femmes sont plus nombreuses à en pratiquer certains sorts car ils sont liés à des travaux considérés comme purement féminins (filer de la laine, mettre des vêtements de cérémonie pour les visions, chevaucher un autre personnage). Certains hommes pratiquent le Sejdr sans s’en soucier, d’autres sélectionnent les sorts les moins compromettants et les complè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’utiliser. Il n’est pas besoin d’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étence permet de lire et de connaître le sens de chacune des vingt-quatre runes. Mais surtout elles donnent des indications occultes sur la réalité du monde et permettent de lancer des sorts de protection, malédiction et guérison, à ceux qui savent s’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’agit là de l’antique art magique enseigné à Odhinn même, par Freyja, la sorcellerie. Les femmes sont plus nombreuses à en pratiquer certains sorts car ils sont liés à des travaux considérés comme purement féminins (filer de la laine, mettre des vêtements de cérémonie pour les visions, chevaucher un autre personnage). Certains hommes pratiquent le Sejdr sans s’en soucier, d’autres sélectionnent les sorts les moins compromettants et les complè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"}
|
||||
|
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.583707 7fe00b7fe6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.593612 7fe00b7fe6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.593661 7fe00b7fe6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.557564 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.560815 7fe0093ff6c0 Level-0 table #39: 1604 bytes OK
|
||||
2025/05/02-00:00:01.567160 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.576997 7fe0093ff6c0 Manual compaction at level-0 from '!items!RAhkadJOfEnVBLpy' @ 72057594037927935 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.598577 7fe0093ff6c0 Manual compaction at level-1 from '!items!RAhkadJOfEnVBLpy' @ 72057594037927935 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at '!items!mIBiTKqfqiiepeyz' @ 9 : 1
|
||||
2025/05/02-00:00:01.598591 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.601754 7fe0093ff6c0 Generated table #40@1: 3 keys, 1604 bytes
|
||||
2025/05/02-00:00:01.601786 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 1604 bytes
|
||||
2025/05/02-00:00:01.608938 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.609061 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.609167 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.618745 7fe0093ff6c0 Manual compaction at level-1 from '!items!mIBiTKqfqiiepeyz' @ 9 : 1 .. '!items!mIBiTKqfqiiepeyz' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.570549 7fe00a7fc6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.580330 7fe00a7fc6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.580396 7fe00a7fc6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.547194 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.550461 7fe0093ff6c0 Level-0 table #39: 3895 bytes OK
|
||||
2025/05/02-00:00:01.557446 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.576988 7fe0093ff6c0 Manual compaction at level-0 from '!items!6IqVsJsYPrbxUJZX' @ 72057594037927935 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.577021 7fe0093ff6c0 Manual compaction at level-1 from '!items!6IqVsJsYPrbxUJZX' @ 72057594037927935 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at '!items!mJSWXawEGARKlNja' @ 24 : 1
|
||||
2025/05/02-00:00:01.577027 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.580395 7fe0093ff6c0 Generated table #40@1: 8 keys, 3895 bytes
|
||||
2025/05/02-00:00:01.580431 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 3895 bytes
|
||||
2025/05/02-00:00:01.586914 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.587137 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.587348 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.618727 7fe0093ff6c0 Manual compaction at level-1 from '!items!mJSWXawEGARKlNja' @ 24 : 1 .. '!items!mJSWXawEGARKlNja' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.608867 7fe009ffb6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.619070 7fe009ffb6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.619205 7fe009ffb6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.618869 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.622268 7fe0093ff6c0 Level-0 table #39: 8204 bytes OK
|
||||
2025/05/02-00:00:01.629416 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.659464 7fe0093ff6c0 Manual compaction at level-0 from '!items!1EVz9C1fDUBafPHj' @ 72057594037927935 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.659511 7fe0093ff6c0 Manual compaction at level-1 from '!items!1EVz9C1fDUBafPHj' @ 72057594037927935 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at '!items!wnIXKyfqCWT0r4iT' @ 90 : 1
|
||||
2025/05/02-00:00:01.659517 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.663128 7fe0093ff6c0 Generated table #40@1: 30 keys, 8204 bytes
|
||||
2025/05/02-00:00:01.663159 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 8204 bytes
|
||||
2025/05/02-00:00:01.669772 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.669933 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.670115 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.701398 7fe0093ff6c0 Manual compaction at level-1 from '!items!wnIXKyfqCWT0r4iT' @ 90 : 1 .. '!items!wnIXKyfqCWT0r4iT' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
@ -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 à 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 à 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 à 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 à 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.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.814767 7fe00a7fc6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.824419 7fe00a7fc6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.824475 7fe00a7fc6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.899378 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.903709 7fe0093ff6c0 Level-0 table #39: 22361 bytes OK
|
||||
2025/05/02-00:00:01.910320 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.910744 7fe0093ff6c0 Manual compaction at level-0 from '!items!0tELaPFZgkeTUeVn' @ 72057594037927935 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.931428 7fe0093ff6c0 Manual compaction at level-1 from '!items!0tELaPFZgkeTUeVn' @ 72057594037927935 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at '!items!zC0kHoqZ9lkQFgI6' @ 423 : 1
|
||||
2025/05/02-00:00:01.931435 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.934954 7fe0093ff6c0 Generated table #40@1: 141 keys, 22361 bytes
|
||||
2025/05/02-00:00:01.934995 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 22361 bytes
|
||||
2025/05/02-00:00:01.942404 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.942634 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.942749 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.952311 7fe0093ff6c0 Manual compaction at level-1 from '!items!zC0kHoqZ9lkQFgI6' @ 423 : 1 .. '!items!zC0kHoqZ9lkQFgI6' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.621680 7fe00a7fc6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.632357 7fe00a7fc6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.632424 7fe00a7fc6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.639368 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.642654 7fe0093ff6c0 Level-0 table #39: 7080 bytes OK
|
||||
2025/05/02-00:00:01.649609 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.659488 7fe0093ff6c0 Manual compaction at level-0 from '!items!0EoL2kcGdYiYS8lY' @ 72057594037927935 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.680340 7fe0093ff6c0 Manual compaction at level-1 from '!items!0EoL2kcGdYiYS8lY' @ 72057594037927935 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at '!items!xf1RAsIzBXQgbLq2' @ 78 : 1
|
||||
2025/05/02-00:00:01.680352 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.683895 7fe0093ff6c0 Generated table #40@1: 26 keys, 7080 bytes
|
||||
2025/05/02-00:00:01.683925 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 7080 bytes
|
||||
2025/05/02-00:00:01.690005 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.690119 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.690251 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.701424 7fe0093ff6c0 Manual compaction at level-1 from '!items!xf1RAsIzBXQgbLq2' @ 78 : 1 .. '!items!xf1RAsIzBXQgbLq2' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.801529 7fe009ffb6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.811167 7fe009ffb6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.811253 7fe009ffb6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.867646 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.872073 7fe0093ff6c0 Level-0 table #39: 1937 bytes OK
|
||||
2025/05/02-00:00:01.879149 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.910677 7fe0093ff6c0 Manual compaction at level-0 from '!items!7VeQIQHxvw233Jzt' @ 72057594037927935 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.910767 7fe0093ff6c0 Manual compaction at level-1 from '!items!7VeQIQHxvw233Jzt' @ 72057594037927935 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at '!items!xw2gPhCxDVpkJnxL' @ 15 : 1
|
||||
2025/05/02-00:00:01.910774 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.914057 7fe0093ff6c0 Generated table #40@1: 5 keys, 1937 bytes
|
||||
2025/05/02-00:00:01.914102 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 1937 bytes
|
||||
2025/05/02-00:00:01.920813 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.920988 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.921112 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.952290 7fe0093ff6c0 Manual compaction at level-1 from '!items!xw2gPhCxDVpkJnxL' @ 15 : 1 .. '!items!xw2gPhCxDVpkJnxL' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.788688 7fe00b7fe6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.798630 7fe00b7fe6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.798720 7fe00b7fe6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.879296 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.882491 7fe0093ff6c0 Level-0 table #39: 3029 bytes OK
|
||||
2025/05/02-00:00:01.889505 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.910707 7fe0093ff6c0 Manual compaction at level-0 from '!items!89NwqZV3Qn9xWeO0' @ 72057594037927935 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.942824 7fe0093ff6c0 Manual compaction at level-1 from '!items!89NwqZV3Qn9xWeO0' @ 72057594037927935 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at '!items!sH7HaKggOEaBVzn3' @ 15 : 1
|
||||
2025/05/02-00:00:01.942831 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.945898 7fe0093ff6c0 Generated table #40@1: 5 keys, 3029 bytes
|
||||
2025/05/02-00:00:01.945923 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 3029 bytes
|
||||
2025/05/02-00:00:01.951946 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.952072 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.952217 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.952318 7fe0093ff6c0 Manual compaction at level-1 from '!items!sH7HaKggOEaBVzn3' @ 15 : 1 .. '!items!sH7HaKggOEaBVzn3' @ 0 : 0; will stop at (end)
|
@ -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)
|
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
MANIFEST-000036
|
@ -1,15 +0,0 @@
|
||||
2025/05/01-23:39:32.775407 7fe00affd6c0 Recovering log #34
|
||||
2025/05/01-23:39:32.785711 7fe00affd6c0 Delete type=0 #34
|
||||
2025/05/01-23:39:32.785835 7fe00affd6c0 Delete type=3 #32
|
||||
2025/05/02-00:00:01.889636 7fe0093ff6c0 Level-0 table #39: started
|
||||
2025/05/02-00:00:01.893029 7fe0093ff6c0 Level-0 table #39: 1953 bytes OK
|
||||
2025/05/02-00:00:01.899195 7fe0093ff6c0 Delete type=0 #37
|
||||
2025/05/02-00:00:01.910727 7fe0093ff6c0 Manual compaction at level-0 from '!items!1smXvw2EcuTkytDv' @ 72057594037927935 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at (end)
|
||||
2025/05/02-00:00:01.921184 7fe0093ff6c0 Manual compaction at level-1 from '!items!1smXvw2EcuTkytDv' @ 72057594037927935 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at '!items!yKLS6KQafucspg3R' @ 15 : 1
|
||||
2025/05/02-00:00:01.921192 7fe0093ff6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/02-00:00:01.925008 7fe0093ff6c0 Generated table #40@1: 5 keys, 1953 bytes
|
||||
2025/05/02-00:00:01.925036 7fe0093ff6c0 Compacted 1@1 + 1@2 files => 1953 bytes
|
||||
2025/05/02-00:00:01.931142 7fe0093ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/02-00:00:01.931249 7fe0093ff6c0 Delete type=2 #5
|
||||
2025/05/02-00:00:01.931354 7fe0093ff6c0 Delete type=2 #39
|
||||
2025/05/02-00:00:01.952302 7fe0093ff6c0 Manual compaction at level-1 from '!items!yKLS6KQafucspg3R' @ 15 : 1 .. '!items!yKLS6KQafucspg3R' @ 0 : 0; will stop at (end)
|
@ -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)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user