6 Commits

Author SHA1 Message Date
uberwald f5a5c25533 Fix wrong sheets 2025-10-26 14:44:06 +01:00
uberwald a39d214f1b Ame/Ame max 2025-10-26 13:47:59 +01:00
uberwald 2fac292459 Ame/Ame max 2025-10-26 13:18:03 +01:00
uberwald 3c776f85fd Ame/Ame max 2025-10-26 12:29:34 +01:00
uberwald 40e11aca1b Ame/Ame max 2025-10-26 11:41:18 +01:00
uberwald 2dc7665a25 Ame/Ame max 2025-10-26 08:49:38 +01:00
210 changed files with 1119 additions and 1663 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

-6
View File
@@ -2,11 +2,9 @@
"TYPES": { "TYPES": {
"Actor": { "Actor": {
"personnage": "Personnage", "personnage": "Personnage",
"cellule": "Cellule",
"creature": "Créature" "creature": "Créature"
}, },
"Item": { "Item": {
"artefact": "Artefact",
"arme": "Arme", "arme": "Arme",
"talent": "Talent", "talent": "Talent",
"historique": "Historique", "historique": "Historique",
@@ -16,8 +14,6 @@
"monnaie": "Monnaie", "monnaie": "Monnaie",
"equipement": "Equipement", "equipement": "Equipement",
"ressource": "Ressource", "ressource": "Ressource",
"contact": "Contact",
"mutation": "Mutation",
"don": "Don", "don": "Don",
"pacte": "Pacte", "pacte": "Pacte",
"rune": "Rune", "rune": "Rune",
@@ -29,8 +25,6 @@
}, },
"MOURNBLADE": { "MOURNBLADE": {
"ui": { "ui": {
"editContact": "Modifier le contact",
"deleteContact": "Supprimer le contact",
"editTrait": "Modifier le trait", "editTrait": "Modifier le trait",
"deleteTrait": "Supprimer le trait" "deleteTrait": "Supprimer le trait"
} }
+116
View File
@@ -0,0 +1,116 @@
/**
* Macro pour remplacer les chemins d'images dans les compendiums
* Remplace "fvtt-hawkmoon-cyd" par "fvtt-mournblade-cyd2" dans tous les champs 'img'
*/
(async () => {
// Confirmation avant de procéder
let confirm = await Dialog.confirm({
title: "Remplacement des chemins d'images",
content: `<p>Cette macro va :</p>
<ul>
<li>Déverrouiller tous les compendiums</li>
<li>Remplacer "fvtt-hawkmoon-cyd" par "fvtt-mournblade-cyd2" dans tous les champs 'img'</li>
<li>Reverrouiller les compendiums</li>
</ul>
<p><strong>Voulez-vous continuer ?</strong></p>`,
defaultYes: false
});
if (!confirm) {
ui.notifications.info("Opération annulée");
return;
}
ui.notifications.info("Début du traitement des compendiums...");
let totalUpdated = 0;
let compendiumsProcessed = 0;
// Parcourir tous les compendiums
for (let pack of game.packs) {
// Filtrer uniquement les compendiums du système mournblade
if (!pack.metadata.packageName.includes("mournblade")) continue;
console.log(`Traitement du compendium: ${pack.metadata.label}`);
compendiumsProcessed++;
try {
// Unlock le compendium
await pack.configure({ locked: false });
// Récupérer tous les documents du compendium
let documents = await pack.getDocuments();
let updatedInPack = 0;
for (let doc of documents) {
let needsUpdate = false;
let updateData = {};
// Vérifier le champ img principal
if (doc.img && doc.img.includes("fvtt-hawkmoon-cyd")) {
updateData.img = doc.img.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd2");
needsUpdate = true;
}
// Pour les acteurs, vérifier aussi prototypeToken.texture.src
if (doc.documentName === "Actor" && doc.prototypeToken?.texture?.src) {
if (doc.prototypeToken.texture.src.includes("fvtt-hawkmoon-cyd")) {
updateData["prototypeToken.texture.src"] = doc.prototypeToken.texture.src.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd2");
needsUpdate = true;
}
}
// Pour les items contenus dans les acteurs
if (doc.documentName === "Actor" && doc.items) {
for (let item of doc.items) {
if (item.img && item.img.includes("fvtt-hawkmoon-cyd")) {
// Note: Les items embarqués nécessitent une approche différente
needsUpdate = true;
}
}
}
// Pour les scènes, vérifier background.src et les tokens
if (doc.documentName === "Scene") {
if (doc.background?.src && doc.background.src.includes("fvtt-hawkmoon-cyd")) {
updateData["background.src"] = doc.background.src.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd2");
needsUpdate = true;
}
}
// Effectuer la mise à jour si nécessaire
if (needsUpdate) {
await doc.update(updateData);
updatedInPack++;
console.log(` - Mise à jour: ${doc.name}`);
}
}
// Lock le compendium
await pack.configure({ locked: true });
if (updatedInPack > 0) {
ui.notifications.info(`${pack.metadata.label}: ${updatedInPack} document(s) mis à jour`);
totalUpdated += updatedInPack;
}
} catch (error) {
console.error(`Erreur lors du traitement de ${pack.metadata.label}:`, error);
ui.notifications.error(`Erreur sur ${pack.metadata.label}: ${error.message}`);
// Tenter de reverrouiller en cas d'erreur
try {
await pack.configure({ locked: true });
} catch (lockError) {
console.error(`Impossible de reverrouiller ${pack.metadata.label}:`, lockError);
}
}
}
ui.notifications.info(`Traitement terminé ! ${totalUpdated} document(s) mis à jour dans ${compendiumsProcessed} compendium(s).`);
console.log(`=== Résumé ===`);
console.log(`Compendiums traités: ${compendiumsProcessed}`);
console.log(`Total de documents mis à jour: ${totalUpdated}`);
})();
+4 -17
View File
@@ -44,7 +44,6 @@ export class MournbladeCYD2ActorSheet extends foundry.appv1.sheets.ActorSheet {
protections: foundry.utils.duplicate(this.actor.getArmors()), protections: foundry.utils.duplicate(this.actor.getArmors()),
historiques: foundry.utils.duplicate(this.actor.getHistoriques() || []), historiques: foundry.utils.duplicate(this.actor.getHistoriques() || []),
talents: foundry.utils.duplicate(this.actor.getTalents() || []), talents: foundry.utils.duplicate(this.actor.getTalents() || []),
mutations: foundry.utils.duplicate(this.actor.getMutations() || []),
dons: foundry.utils.duplicate(this.actor.getDons() || []), dons: foundry.utils.duplicate(this.actor.getDons() || []),
pactes: foundry.utils.duplicate(this.actor.getPactes() || []), pactes: foundry.utils.duplicate(this.actor.getPactes() || []),
tendances: foundry.utils.duplicate(this.actor.getTendances() || []), tendances: foundry.utils.duplicate(this.actor.getTendances() || []),
@@ -53,16 +52,18 @@ export class MournbladeCYD2ActorSheet extends foundry.appv1.sheets.ActorSheet {
traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces() || []), traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces() || []),
aspect: this.actor.getAspect(), aspect: this.actor.getAspect(),
marge: this.actor.getMarge(), marge: this.actor.getMarge(),
talentsCell: this.getCelluleTalents(),
profils: foundry.utils.duplicate(this.actor.getProfils() || []), profils: foundry.utils.duplicate(this.actor.getProfils() || []),
combat: this.actor.getCombatValues(), combat: this.actor.getCombatValues(),
equipements: foundry.utils.duplicate(this.actor.getEquipments()), equipements: foundry.utils.duplicate(this.actor.getEquipments()),
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
richesse: this.actor.computeRichesse(), richesse: this.actor.computeRichesse(),
coupDevastateur: this.actor.items.find(it => it.type == "talent" && it.name.toLowerCase() == "coup devastateur" && !it.system.used), coupDevastateur: this.actor.items.find(it => it.type == "talent" && it.name.toLowerCase() == "coup devastateur" && !it.system.used),
valeurEquipement: this.actor.computeValeurEquipement(), valeurEquipement: this.actor.computeValeurEquipement(),
nbCombativite: this.actor.system.sante.nbcombativite, nbCombativite: this.actor.system.sante.nbcombativite,
combativiteList: MournbladeCYD2Utility.getCombativiteList(this.actor.system.sante.nbcombativite), combativiteList: MournbladeCYD2Utility.getCombativiteList(this.actor.system.sante.nbcombativite),
nbAme: this.actor.system.ame.nbame,
ameMax: this.actor.getAmeMax(),
ameList: MournbladeCYD2Utility.getAmeList(this.actor.system.ame.nbame, this.actor.getAmeMax()),
ameMaxList: MournbladeCYD2Utility.getAmeMaxList(this.actor.system.ame.nbame),
initiative: this.actor.getFlag("world", "last-initiative") || -1, initiative: this.actor.getFlag("world", "last-initiative") || -1,
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, { async: true }), description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, { async: true }),
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, { async: true }), habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, { async: true }),
@@ -78,20 +79,6 @@ export class MournbladeCYD2ActorSheet extends foundry.appv1.sheets.ActorSheet {
return formData; return formData;
} }
/* -------------------------------------------- */
getCelluleTalents() {
let talents = []
for (let cellule of game.actors) {
if (cellule.type == "cellule") {
let found = cellule.system.members.find(it => it.id == this.actor.id)
if (found) {
talents = talents.concat(cellule.getTalents())
}
}
}
return talents
}
/* -------------------------------------------- */ /* -------------------------------------------- */
/** @override */ /** @override */
activateListeners(html) { activateListeners(html) {
+92 -27
View File
@@ -38,6 +38,7 @@ export class MournbladeCYD2Actor extends Actor {
} }
if (data.type == 'personnage') { if (data.type == 'personnage') {
console.log("Loading skills for personnage")
const skills = await MournbladeCYD2Utility.loadCompendium("fvtt-mournblade-cyd2.skills") const skills = await MournbladeCYD2Utility.loadCompendium("fvtt-mournblade-cyd2.skills")
data.items = skills.map(i => i.toObject()) data.items = skills.map(i => i.toObject())
} }
@@ -67,10 +68,6 @@ export class MournbladeCYD2Actor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
prepareArme(arme) { prepareArme(arme) {
if (this.type == "cellule") {
return arme
}
arme = foundry.utils.duplicate(arme) arme = foundry.utils.duplicate(arme)
let combat = this.getCombatValues() let combat = this.getCombatValues()
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") { if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
@@ -121,9 +118,6 @@ export class MournbladeCYD2Actor extends Actor {
getEquipments() { getEquipments() {
return this.getItemSorted(["equipement"]) return this.getItemSorted(["equipement"])
} }
getArtefacts() {
return this.getItemSorted(["artefact"])
}
getArmors() { getArmors() {
return this.getItemSorted(["protection"]) return this.getItemSorted(["protection"])
} }
@@ -139,12 +133,6 @@ export class MournbladeCYD2Actor extends Actor {
getRessources() { getRessources() {
return this.getItemSorted(["ressource"]) return this.getItemSorted(["ressource"])
} }
getContacts() {
return this.getItemSorted(["contact"])
}
getMutations() {
return this.getItemSorted(["mutation"])
}
getDons() { getDons() {
return this.getItemSorted(["don"]) return this.getItemSorted(["don"])
} }
@@ -235,20 +223,6 @@ export class MournbladeCYD2Actor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getCombatValues() { getCombatValues() {
if (this.type == "cellule") {
return {
initBase: 0,
initTotal: 0,
bonusDegats: 0,
bonusDegatsTotal: 0,
vitesseBase: 0,
vitesseTotal: 0,
defenseBase: 0,
protection: 0,
defenseTotal: 0
}
}
let combat = { let combat = {
initBase: this.system.attributs.adr.value, initBase: this.system.attributs.adr.value,
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus, initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
@@ -281,6 +255,12 @@ export class MournbladeCYD2Actor extends Actor {
if (vigueur != this.system.sante.vigueur) { if (vigueur != this.system.sante.vigueur) {
this.update({ 'system.sante.vigueur': vigueur }) this.update({ 'system.sante.vigueur': vigueur })
} }
let seuilPouvoirBonus = this.getSeuilPouvoirBonus()
let seuilPouvoir = Math.floor((this.system.attributs.tre.value + this.system.attributs.cla.value) / 2) + seuilPouvoirBonus + this.system.ame.seuilpouvoirmodifier
if (seuilPouvoir != this.system.ame.seuilpouvoir) {
this.update({ 'system.ame.seuilpouvoir': seuilPouvoir })
}
} }
super.prepareDerivedData() super.prepareDerivedData()
} }
@@ -292,6 +272,26 @@ export class MournbladeCYD2Actor extends Actor {
this.processCombativite(changed.system.sante) this.processCombativite(changed.system.sante)
}, 800) }, 800)
} }
if (changed?.system?.ame?.etat && changed?.system?.ame?.etat != this.system.ame.etat) {
// L'état d'Âme ne peut pas être inférieur au minimum (max dans le système)
let minAme = this.system.ame.max !== undefined ? this.system.ame.max : 0
if (changed.system.ame.etat < minAme) {
changed.system.ame.etat = minAme
}
// L'état d'Âme ne peut pas dépasser nbame (Brisé)
if (changed.system.ame.etat > this.system.ame.nbame) {
changed.system.ame.etat = this.system.ame.nbame
}
setTimeout(() => {
this.processAme(changed.system.ame)
}, 800)
}
// Si le max d'Âme change, ajuster l'état actuel si nécessaire
if (changed?.system?.ame?.max !== undefined && changed.system.ame.max != this.system.ame.max) {
if (this.system.ame.etat < changed.system.ame.max) {
changed.system.ame.etat = changed.system.ame.max
}
}
super._preUpdate(changed, options, user); super._preUpdate(changed, options, user);
} }
@@ -392,6 +392,31 @@ export class MournbladeCYD2Actor extends Actor {
return bonus return bonus
} }
/* -------------------------------------------- */
getSeuilPouvoir() {
return this.system.ame.seuilpouvoir
}
/* -------------------------------------------- */
getSeuilPouvoirBonus() {
let talents = this.items.filter(item => item.type == "talent" && item.system.isautomated)
let bonus = 0
for (let talent of talents) {
for (let auto of talent.system.automations) {
if (auto.eventtype == "bonus-permanent" && auto.bonusname == "seuilpouvoir") {
bonus += Number(auto.bonus || 0)
}
}
}
return bonus
}
/* -------------------------------------------- */
getAmeMax() {
// Utiliser une vérification stricte car 0 (Serein) est une valeur valide
return this.system.ame.max !== undefined ? this.system.ame.max : this.system.ame.nbame
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getBonneAventure() { getBonneAventure() {
return this.system.bonneaventure.actuelle return this.system.bonneaventure.actuelle
@@ -456,6 +481,24 @@ export class MournbladeCYD2Actor extends Actor {
// Duplicated ! this.processCombativite(sante) // Duplicated ! this.processCombativite(sante)
} }
/* -------------------------------------------- */
changeEtatAme(value) {
if (value === "brise") {
value = 200
}
let ame = foundry.utils.duplicate(this.system.ame)
ame.etat += Number(value)
// L'état ne peut pas être inférieur au minimum (max dans le système)
let minAme = this.system.ame.max !== undefined ? this.system.ame.max : 0
ame.etat = Math.max(ame.etat, minAme)
// L'état ne peut pas dépasser nbame (Brisé)
ame.etat = Math.min(ame.etat, this.system.ame.nbame)
this.update({ 'system.ame': ame })
if (ame.etat >= this.system.ame.nbame) {
ChatMessage.create({ content: `<strong>${this.name} est brisé !</strong>` })
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
processCombativite(sante) { processCombativite(sante) {
sante = sante || foundry.utils.duplicate(this.system.sante) sante = sante || foundry.utils.duplicate(this.system.sante)
@@ -472,6 +515,28 @@ export class MournbladeCYD2Actor extends Actor {
} }
} }
/* -------------------------------------------- */
processAme(ame) {
ame = ame || foundry.utils.duplicate(this.system.ame)
let traumatiseValue = this.system.ame.nbame - 2
let tresTraumatiseValue = this.system.ame.nbame - 1
let briseValue = this.system.ame.nbame
// Gestion des états Traumatisé, Très Traumatisé et Brisé
if (ame.etat == traumatiseValue) {
ChatMessage.create({ content: `<strong>${this.name} est Traumatisé et subit 1 adversité bleue et 1 adversité noire !</strong>` })
this.incDecAdversite("bleue", 1)
this.incDecAdversite("noire", 1)
} else if (ame.etat == tresTraumatiseValue) {
ChatMessage.create({ content: `<strong>${this.name} est Très Traumatisé et subit 1 adversité bleue et 1 adversité noire !</strong>` })
this.incDecAdversite("bleue", 1)
this.incDecAdversite("noire", 1)
} else if (ame.etat >= briseValue) {
ChatMessage.create({ content: `<strong>${this.name} est Brisé et subit 1 adversité noire !</strong>` })
this.incDecAdversite("noire", 1)
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async equipGear(equipmentId) { async equipGear(equipmentId) {
let item = this.items.find(item => item.id == equipmentId); let item = this.items.find(item => item.id == equipmentId);
-173
View File
@@ -1,173 +0,0 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
import { MournbladeCYD2Automation } from "./mournblade-cyd2-automation.js";
/* -------------------------------------------- */
const __ALLOWED_ITEM_CELLULE = { "talent": 1, "ressource": 1, "contact": 1, "equipement": 1, "protection": 1, "artefact": 1, "arme": 1, "monnaie": 1 }
/* -------------------------------------------- */
export class MournbladeCYD2CelluleSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-mournblade-cyd2", "sheet", "actor"],
template: "systems/fvtt-mournblade-cyd2/templates/cellule-sheet.html",
width: 640,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "talents" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: false
});
}
/* -------------------------------------------- */
async getData() {
const objectData = foundry.utils.duplicate(this.object)
let formData = {
title: this.title,
id: objectData.id,
type: objectData.type,
img: objectData.img,
name: objectData.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
system: objectData.system,
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
limited: this.object.limited,
talents: foundry.utils.duplicate(this.actor.getTalents() || {}),
ressources: foundry.utils.duplicate(this.actor.getRessources()),
contacts: foundry.utils.duplicate(this.actor.getContacts()),
members: this.getMembers(),
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
armes: foundry.utils.duplicate(this.actor.getWeapons()),
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
protections: foundry.utils.duplicate(this.actor.getArmors()),
richesse: this.actor.computeRichesse(),
valeurEquipement: this.actor.computeValeurEquipement(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
isGM: game.user.isGM,
config: game.system.mournbladecyd2.config
}
this.formData = formData;
console.log("CELLULE : ", formData, this.object);
return formData;
}
/* -------------------------------------------- */
getMembers( ) {
let membersFull = []
for(let def of this.actor.system.members) {
let actor = game.actors.get(def.id)
membersFull.push( { name: actor.name, id: actor.id, img: actor.img } )
}
return membersFull
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
// Update Inventory Item
html.find('.actor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let actorId = li.data("actor-id")
const actor = game.actors.get(actorId)
actor.sheet.render(true)
})
html.find('.actor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let actorId = li.data("actor-id")
this.actor.removeMember(actorId)
})
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
const item = this.actor.items.get(itemId)
item.sheet.render(true)
})
// Delete Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
MournbladeCYD2Utility.confirmDelete(this, li);
})
html.find('.edit-item-data').change(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
let itemType = li.data("item-type")
let itemField = $(ev.currentTarget).data("item-field")
let dataType = $(ev.currentTarget).data("dtype")
let value = ev.currentTarget.value
this.actor.editItemField(itemId, itemType, itemField, dataType, value)
})
html.find('.quantity-modify').click(event => {
const li = $(event.currentTarget).parents(".item")
const value = Number($(event.currentTarget).data("quantite-value"))
this.actor.incDecQuantity( li.data("item-id"), value );
})
html.find('.item-add').click((event) => {
const itemType = $(event.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
})
html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore;
this.render(true);
});
}
/* -------------------------------------------- */
async _onDropActor(event, dragData) {
const actor = fromUuidSync(dragData.uuid)
if (actor) {
this.actor.addMember(actor.id)
} else {
ui.notifications.warn("Cet acteur n'a pas été trouvé.")
}
super._onDropActor(event)
}
/* -------------------------------------------- */
async _onDropItem(event, dragData) {
let data = event.dataTransfer.getData('text/plain')
let dataItem = JSON.parse(data)
let item = fromUuidSync(dataItem.uuid)
if (item.pack) {
item = await MournbladeCYD2Utility.searchItem(item)
}
if ( __ALLOWED_ITEM_CELLULE[item.type]) {
super._onDropItem(event, dragData)
return
}
ui.notification.info("Ce type d'item n'est pas autorisé sur une Cellule.")
}
/* -------------------------------------------- */
/** @override */
setPosition(options = {}) {
const position = super.setPosition(options);
const sheetBody = this.element.find(".sheet-body");
const bodyHeight = position.height - 192;
sheetBody.css("height", bodyHeight);
return position;
}
}
+32 -46
View File
@@ -1,4 +1,19 @@
export const MOURNBLADECYD2_CONFIG = { export const MOURNBLADECYD2_CONFIG = {
allegeanceOptions: {
tous: 'Tous',
chaos: 'Chaos',
loi: 'Loi',
betes: 'Seigneurs des Bêtes',
elementaires: 'Seigneurs des Eléments'
},
lancementRuneOptions: {
prononcer: 'Prononcer',
inscrire: 'Tracer'
},
effetRuneOptions: {
prononcee: 'Prononcée',
inscrite: 'Inscrite'
},
optionsDifficulte: [ optionsDifficulte: [
{ key: "0", label: "Aucune/Inconnue" }, { key: "0", label: "Aucune/Inconnue" },
@@ -85,59 +100,30 @@ export const MOURNBLADECYD2_CONFIG = {
{ key: "insurge", label: "Insurgé" } { key: "insurge", label: "Insurgé" }
], ],
optionsTypeArme: [ optionsTypeArme: [
{key: "contact", label: "Arme de contact"}, { key: "contact", label: "Arme de contact" },
{key: "contactjet", label: "Arme de contact et de Jet"}, { key: "contactjet", label: "Arme de contact et de Jet" },
{key: "jet", label: "Arme de Jet"}, { key: "jet", label: "Arme de Jet" },
{key: "tir", label: "Arme de Tir"} { key: "tir", label: "Arme de Tir" }
],
optionsArtefactBranche: [
{key: "alchimie", label: "Alchimie"},
{key: "biologie", label: "Biologie"},
{key: "electricite", label: "Electricité"},
{key: "mecanique", label: "Mécanique"},
{key: "scienceesprit", label: "Science de l'Esprit"}
],
optionsArtefactBranche2: [
{key: "none", label: "Aucune"},
{key: "alchimie", label: "Alchimie"},
{key: "biologie", label: "Biologie"},
{key: "electricite", label: "Electricité"},
{key: "mecanique", label: "Mécanique"},
{key: "scienceesprit", label: "Science de l'Esprit"}
],
optionsTypeContact: [
{key: "contact", label: "Contact"},
{key: "allie", label: "Allié"}
],
optionsTypeMutation: [
{key: "tares_communes", label: "Tares et Malformations communes"},
{key: "evolutions_communes", label: "Evolutions communes"},
{key: "tares_rares", label: "Tares et Malformations rares"},
{key: "evolutions_rares", label: "Evolutions rares"},
{key: "tares_majeures", label: "Tares et Maformations majeures"},
{key: "evolutions_majeures", label: "Evolutions majeures"},
{key: "tares_except", label: "Tares et Malformations exceptionnelles"},
{key: "evolutions_except", label: "Evolutions exceptionnelles"}
], ],
optionsTypeTalent: [ optionsTypeTalent: [
{key: "personnage", label: "Personnage"}, { key: "personnage", label: "Personnage" },
{key: "cellule", label: "Cellule"}, { key: "traitespece", label: "Trait d'espèce" }
{key: "traitespece", label: "Trait d'espèce"}
], ],
optionsUseTalent: [ optionsUseTalent: [
{key: "permanent", label: "Permanent"}, { key: "permanent", label: "Permanent" },
{key: "sceance", label: "Une fois par scéance"}, { key: "sceance", label: "Une fois par scéance" },
{key: "scenario", label: "Une fois par scénario"}, { key: "scenario", label: "Une fois par scénario" },
{key: "jour", label: "Une fois par jour"}, { key: "jour", label: "Une fois par jour" },
{key: "unique", label: "Unique"} { key: "unique", label: "Unique" }
], ],
optionsAutomationEvent: [ optionsAutomationEvent: [
{key: "on-drop", label: "Drop sur l'acteur"}, { key: "on-drop", label: "Drop sur l'acteur" },
{key: "prepare-roll", label: "Préparation d'un jet"}, { key: "prepare-roll", label: "Préparation d'un jet" },
{key: "bonus-permanent", label: "Bonus permanent"} { key: "bonus-permanent", label: "Bonus permanent" }
], ],
optionsBonusPermanent: [ optionsBonusPermanent: [
{key: "vigueur", label: "Vigueur"}, { key: "vigueur", label: "Vigueur" },
{key: "bonus-defensif", label: "Bonus au Seuil de Défense"} { key: "seuilpouvoir", label: "Seuil de Pouvoir" },
{ key: "bonus-defensif", label: "Bonus au Seuil de Défense" }
] ]
} }
+2 -2
View File
@@ -62,14 +62,14 @@ export class MournbladeCYD2ItemSheet extends foundry.appv1.sheets.ItemSheet {
limited: this.object.limited, limited: this.object.limited,
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}), description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, {async: true}),
mr: (this.object.type == 'specialisation'), mr: (this.object.type == 'specialisation'),
isGM: game.user.isGM, isGM: game.user.isGM,
config: game.system.mournbladecyd2.config config: game.system.mournbladecyd2.config
} }
if ( objectData.type == "don") { if ( objectData.type == "don") {
formData.sacrifice = await TextEditor.enrichHTML(this.object.system.sacrifice, {async: true}) formData.sacrifice = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.sacrifice, {async: true})
} }
//this.options.editable = !(this.object.origin == "embeddedItem"); //this.options.editable = !(this.object.origin == "embeddedItem");
console.log("ITEM DATA", formData, this); console.log("ITEM DATA", formData, this);
+6 -3
View File
@@ -10,10 +10,13 @@ export const defaultItemImg = {
talent: "systems/fvtt-mournblade-cyd2/assets/icons/talent.webp", talent: "systems/fvtt-mournblade-cyd2/assets/icons/talent.webp",
historique: "systems/fvtt-mournblade-cyd2/assets/icons/historique.webp", historique: "systems/fvtt-mournblade-cyd2/assets/icons/historique.webp",
profil: "systems/fvtt-mournblade-cyd2/assets/icons/profil.webp", profil: "systems/fvtt-mournblade-cyd2/assets/icons/profil.webp",
artefact: "systems/fvtt-mournblade-cyd2/assets/icons/artefact.webp",
contact: "systems/fvtt-mournblade-cyd2/assets/icons/contacts.webp",
ressource: "systems/fvtt-mournblade-cyd2/assets/icons/ressources.webp", ressource: "systems/fvtt-mournblade-cyd2/assets/icons/ressources.webp",
mutation: "systems/fvtt-mournblade-cyd2/assets/icons/mutation.webp", traitchaotique: "systems/fvtt-mournblade-cyd2/assets/icons/traitchaotique.webp",
traitespece: "systems/fvtt-mournblade-cyd2/assets/icons/traitespece.webp",
don: "systems/fvtt-mournblade-cyd2/assets/icons/don.webp",
pacte: "systems/fvtt-mournblade-cyd2/assets/icons/pacte.webp",
rune: "systems/fvtt-mournblade-cyd2/assets/icons/rune.webp",
tendance: "systems/fvtt-mournblade-cyd2/assets/icons/tendance.webp",
} }
/** /**
+2 -4
View File
@@ -12,7 +12,6 @@ import { MournbladeCYD2Actor } from "./mournblade-cyd2-actor.js";
import { MournbladeCYD2ItemSheet } from "./mournblade-cyd2-item-sheet.js"; import { MournbladeCYD2ItemSheet } from "./mournblade-cyd2-item-sheet.js";
import { MournbladeCYD2ActorSheet } from "./mournblade-cyd2-actor-sheet.js"; import { MournbladeCYD2ActorSheet } from "./mournblade-cyd2-actor-sheet.js";
import { MournbladeCYD2CreatureSheet } from "./mournblade-cyd2-creature-sheet.js"; import { MournbladeCYD2CreatureSheet } from "./mournblade-cyd2-creature-sheet.js";
import { MournbladeCYD2CelluleSheet } from "./mournblade-cyd2-cellule-sheet.js";
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js"; import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
import { MournbladeCYD2Combat } from "./mournblade-cyd2-combat.js"; import { MournbladeCYD2Combat } from "./mournblade-cyd2-combat.js";
import { MournbladeCYD2Item } from "./mournblade-cyd2-item.js"; import { MournbladeCYD2Item } from "./mournblade-cyd2-item.js";
@@ -60,7 +59,6 @@ Hooks.once("init", async function () {
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet); foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2ActorSheet, { types: ["personnage"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2ActorSheet, { types: ["personnage"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2CreatureSheet, { types: ["creature"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2CreatureSheet, { types: ["creature"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2CelluleSheet, { types: ["cellule"], makeDefault: true });
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet); foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2ItemSheet, { makeDefault: true }) foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2ItemSheet, { makeDefault: true })
@@ -77,8 +75,8 @@ function welcomeMessage() {
user: game.user.id, user: game.user.id,
whisper: [game.user.id], whisper: [game.user.id],
content: `<div id="welcome-message-MournbladeCYD2"><span class="rdd-roll-part"> content: `<div id="welcome-message-MournbladeCYD2"><span class="rdd-roll-part">
<strong>Bienvenue dans MournbladeCYD2 et le troisième Millénaire !</strong> <strong>Bienvenue dans Mournblade CYD 2.0 !</strong>
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p> <p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr ainsi que le supplément de conversion de règle pour le CYD 2.0</p>
<p>Mournblade est un jeu de rôle publié par Titam France/Sombres projets, tous les droits leur appartiennent.</p> <p>Mournblade est un jeu de rôle publié par Titam France/Sombres projets, tous les droits leur appartiennent.</p>
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p> <p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
` }); ` });
+66 -24
View File
@@ -56,13 +56,7 @@ export class MournbladeCYD2Utility {
type: String, type: String,
choices: { // If choices are defined, the resulting setting will be a select menu choices: { // If choices are defined, the resulting setting will be a select menu
"mournblade_logo_chaos": "Mournblade (Chaos)", "mournblade_logo_chaos": "Mournblade (Chaos)",
"mournblade_logo_texte": "Mournblade (Texte)", "mournblade_logo_texte": "Mournblade (Texte)"
"mournblade-cyd2_logo": "MournbladeCYD2 (Texte)",
"logo_pause_resistance": "Résistance",
"logo_pause_mournblade-cyd2_stone": "MournbladeCYD2 (Pierre)",
"logo_pause_mournblade-cyd2_violet": "MournbladeCYD2 (Violet)",
"logo_pause_mournblade-cyd2_beige": "MournbladeCYD2 (Beige)",
"logo_pause_mournblade-cyd2_rouge": "MournbladeCYD2 (Rouge)"
}, },
}) })
@@ -118,7 +112,6 @@ export class MournbladeCYD2Utility {
game.system.mournbladecyd2.config.listeNiveauSkill = this.createDirectOptionList(0, 10) game.system.mournbladecyd2.config.listeNiveauSkill = this.createDirectOptionList(0, 10)
game.system.mournbladecyd2.config.listeNiveauCreature = this.createDirectOptionList(0, 35) game.system.mournbladecyd2.config.listeNiveauCreature = this.createDirectOptionList(0, 35)
game.system.mournbladecyd2.config.listeNiveauContact = this.createDirectOptionList(1, 3)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -534,6 +527,71 @@ export class MournbladeCYD2Utility {
return list return list
} }
/* -------------------------------------------- */
static getAmeList(nbAme, ameMin = null) {
// ameMin représente le meilleur état accessible (le minimum où l'âme peut remonter)
// Si ameMin = 3 (Stressé 3), la liste commence à Stressé 3 et va jusqu'à Brisé
// Si ameMin = 0 (Serein), tous les états sont disponibles
let minEffectif = ameMin !== null && ameMin !== undefined ? Math.min(ameMin, nbAme) : 0
let list = []
// Ajouter Serein seulement si ameMin <= 0
if (minEffectif <= 0) {
list.push({ value: String(0), label: "Serein" })
}
// Génération des états Stressé
let nbStresseTotal = Math.max(0, nbAme - 3)
for (let i = 1; i <= nbStresseTotal; i++) {
if (i >= minEffectif) {
list.push({ value: String(i), label: "Stressé " + i })
}
}
// Ajout des états finaux
let traumatiseValue = nbAme - 2
let tresTraumatiseValue = nbAme - 1
let briseValue = nbAme
if (traumatiseValue >= minEffectif) {
list.push({ value: String(traumatiseValue), label: "Traumatisé" })
}
if (tresTraumatiseValue >= minEffectif) {
list.push({ value: String(tresTraumatiseValue), label: "Très Traumatisé" })
}
if (briseValue >= minEffectif) {
list.push({ value: String(briseValue), label: "Brisé" })
}
return list
}
/* -------------------------------------------- */
static getAmeMaxList(nbAme) {
// Génère la liste complète des états d'âme pour le dropdown "Max"
let list = [{ value: String(0), label: "Serein" }]
// Génération des états Stressé (de 1 à nbAme-3)
let nbStresse = Math.max(0, nbAme - 3)
for (let i = 1; i <= nbStresse; i++) {
list.push({ value: String(i), label: "Stressé " + i })
}
// Ajout des états finaux
if (nbAme >= 3) {
list.push({ value: String(nbAme - 2), label: "Traumatisé" })
}
if (nbAme >= 2) {
list.push({ value: String(nbAme - 1), label: "Très Traumatisé" })
}
if (nbAme >= 1) {
list.push({ value: String(nbAme), label: "Brisé" })
}
return list
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async bonusRollMournbladeCYD2(rollData) { static async bonusRollMournbladeCYD2(rollData) {
rollData.bonusFormula = rollData.addedBonus rollData.bonusFormula = rollData.addedBonus
@@ -817,20 +875,4 @@ export class MournbladeCYD2Utility {
d.render(true); d.render(true);
} }
/************************************************************************************/
static async __create_talents_table() {
let compName = "fvtt-mournblade-cyd2.talents-cellule"
const compData = await MournbladeCYD2Utility.loadCompendium(compName)
let talents = compData.map(i => i.toObject())
let htmlTab = "<table border='1'><tbody>";
for (let entryData of talents) {
console.log(entryData)
htmlTab += `<tr><td>@UUID[Compendium.${compName}.${entryData._id}]{${entryData.name}}</td>`
htmlTab += `<td>${entryData.system.description}</td>`;
htmlTab += "</tr>\n";
}
htmlTab += "</table>";
await JournalEntry.create({ name: 'Liste des Talents de Cellule', content: htmlTab });
}
} }
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000333 MANIFEST-000372
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:43:48.182974 7fe806ffd6c0 Recovering log #331 2025/10/26-14:17:34.089807 7f058c9f96c0 Recovering log #370
2025/10/26-00:43:48.193649 7fe806ffd6c0 Delete type=3 #329 2025/10/26-14:17:34.150991 7f058c9f96c0 Delete type=3 #368
2025/10/26-00:43:48.193720 7fe806ffd6c0 Delete type=0 #331 2025/10/26-14:17:34.151050 7f058c9f96c0 Delete type=0 #370
2025/10/26-00:50:38.091073 7fe804ff96c0 Level-0 table #336: started 2025/10/26-14:43:50.641754 7f0586bff6c0 Level-0 table #375: started
2025/10/26-00:50:38.091107 7fe804ff96c0 Level-0 table #336: 0 bytes OK 2025/10/26-14:43:50.641778 7f0586bff6c0 Level-0 table #375: 0 bytes OK
2025/10/26-00:50:38.097587 7fe804ff96c0 Delete type=0 #334 2025/10/26-14:43:50.648553 7f0586bff6c0 Delete type=0 #373
2025/10/26-00:50:38.104125 7fe804ff96c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.648712 7f0586bff6c0 Manual compaction at level-0 from '!journal!gVybbv17TFY8o3Y4' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
2025/10/26-00:50:38.114236 7fe804ff96c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.648735 7f0586bff6c0 Manual compaction at level-1 from '!journal!gVybbv17TFY8o3Y4' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:42:01.224869 7fe8057fa6c0 Recovering log #327 2025/10/26-14:10:00.107133 7f058d1fa6c0 Recovering log #367
2025/10/26-00:42:01.234442 7fe8057fa6c0 Delete type=3 #325 2025/10/26-14:10:00.170337 7f058d1fa6c0 Delete type=0 #367
2025/10/26-00:42:01.234506 7fe8057fa6c0 Delete type=0 #327 2025/10/26-14:10:00.170407 7f058d1fa6c0 Delete type=3 #366
2025/10/26-00:42:19.753512 7fe804ff96c0 Level-0 table #332: started 2025/10/26-14:11:11.035066 7f0586bff6c0 Level-0 table #371: started
2025/10/26-00:42:19.753550 7fe804ff96c0 Level-0 table #332: 0 bytes OK 2025/10/26-14:11:11.035107 7f0586bff6c0 Level-0 table #371: 0 bytes OK
2025/10/26-00:42:19.760315 7fe804ff96c0 Delete type=0 #330 2025/10/26-14:11:11.041259 7f0586bff6c0 Delete type=0 #369
2025/10/26-00:42:19.777223 7fe804ff96c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end) 2025/10/26-14:11:11.052382 7f0586bff6c0 Manual compaction at level-0 from '!journal!gVybbv17TFY8o3Y4' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
2025/10/26-00:42:19.777252 7fe804ff96c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end) 2025/10/26-14:11:11.058628 7f0586bff6c0 Manual compaction at level-1 from '!journal!gVybbv17TFY8o3Y4' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000332 MANIFEST-000252
+11 -8
View File
@@ -1,8 +1,11 @@
2025/10/26-00:43:48.082340 7fe8057fa6c0 Recovering log #330 2025/10/26-14:17:33.329160 7f0587fff6c0 Recovering log #250
2025/10/26-00:43:48.092212 7fe8057fa6c0 Delete type=3 #328 2025/10/26-14:17:33.329199 7f0587fff6c0 Recovering log #369
2025/10/26-00:43:48.092287 7fe8057fa6c0 Delete type=0 #330 2025/10/26-14:17:33.500980 7f0587fff6c0 Delete type=2 #352
2025/10/26-00:50:38.029897 7fe804ff96c0 Level-0 table #335: started 2025/10/26-14:17:33.501082 7f0587fff6c0 Delete type=0 #369
2025/10/26-00:50:38.029919 7fe804ff96c0 Level-0 table #335: 0 bytes OK 2025/10/26-14:17:33.501136 7f0587fff6c0 Delete type=3 #248
2025/10/26-00:50:38.035762 7fe804ff96c0 Delete type=0 #333 2025/10/26-14:17:33.501178 7f0587fff6c0 Delete type=0 #250
2025/10/26-00:50:38.048544 7fe804ff96c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.551774 7f0586bff6c0 Level-0 table #372: started
2025/10/26-00:50:38.048596 7fe804ff96c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.551804 7f0586bff6c0 Level-0 table #372: 0 bytes OK
2025/10/26-14:43:50.557801 7f0586bff6c0 Delete type=0 #370
2025/10/26-14:43:50.570810 7f0586bff6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2025/10/26-14:43:50.570851 7f0586bff6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:42:01.123924 7fe805ffb6c0 Recovering log #326 2025/10/26-11:41:45.111518 7fe806ffd6c0 Recovering log #246
2025/10/26-00:42:01.133650 7fe805ffb6c0 Delete type=3 #324 2025/10/26-11:41:45.121406 7fe806ffd6c0 Delete type=3 #244
2025/10/26-00:42:01.133709 7fe805ffb6c0 Delete type=0 #326 2025/10/26-11:41:45.121474 7fe806ffd6c0 Delete type=0 #246
2025/10/26-00:42:19.691980 7fe804ff96c0 Level-0 table #331: started 2025/10/26-11:42:27.673791 7fe804ff96c0 Level-0 table #251: started
2025/10/26-00:42:19.692007 7fe804ff96c0 Level-0 table #331: 0 bytes OK 2025/10/26-11:42:27.673818 7fe804ff96c0 Level-0 table #251: 0 bytes OK
2025/10/26-00:42:19.698438 7fe804ff96c0 Delete type=0 #329 2025/10/26-11:42:27.702748 7fe804ff96c0 Delete type=0 #249
2025/10/26-00:42:19.718523 7fe804ff96c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end) 2025/10/26-11:42:27.787796 7fe804ff96c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2025/10/26-00:42:19.718569 7fe804ff96c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end) 2025/10/26-11:42:27.787822 7fe804ff96c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
MANIFEST-000332
-8
View File
@@ -1,8 +0,0 @@
2025/10/26-00:43:48.058803 7fe806ffd6c0 Recovering log #330
2025/10/26-00:43:48.068066 7fe806ffd6c0 Delete type=3 #328
2025/10/26-00:43:48.068110 7fe806ffd6c0 Delete type=0 #330
2025/10/26-00:50:38.004403 7fe804ff96c0 Level-0 table #335: started
2025/10/26-00:50:38.004426 7fe804ff96c0 Level-0 table #335: 0 bytes OK
2025/10/26-00:50:38.010395 7fe804ff96c0 Delete type=0 #333
2025/10/26-00:50:38.023828 7fe804ff96c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
2025/10/26-00:50:38.023869 7fe804ff96c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
-8
View File
@@ -1,8 +0,0 @@
2025/10/26-00:42:01.099626 7fe8067fc6c0 Recovering log #326
2025/10/26-00:42:01.109138 7fe8067fc6c0 Delete type=3 #324
2025/10/26-00:42:01.109197 7fe8067fc6c0 Delete type=0 #326
2025/10/26-00:42:19.665084 7fe804ff96c0 Level-0 table #331: started
2025/10/26-00:42:19.665120 7fe804ff96c0 Level-0 table #331: 0 bytes OK
2025/10/26-00:42:19.671278 7fe804ff96c0 Delete type=0 #329
2025/10/26-00:42:19.691809 7fe804ff96c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
2025/10/26-00:42:19.691862 7fe804ff96c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
MANIFEST-000332
-8
View File
@@ -1,8 +0,0 @@
2025/10/26-00:43:48.027879 7fe805ffb6c0 Recovering log #330
2025/10/26-00:43:48.037843 7fe805ffb6c0 Delete type=3 #328
2025/10/26-00:43:48.037907 7fe805ffb6c0 Delete type=0 #330
2025/10/26-00:50:37.998468 7fe804ff96c0 Level-0 table #335: started
2025/10/26-00:50:37.998510 7fe804ff96c0 Level-0 table #335: 0 bytes OK
2025/10/26-00:50:38.004321 7fe804ff96c0 Delete type=0 #333
2025/10/26-00:50:38.023815 7fe804ff96c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
2025/10/26-00:50:38.023850 7fe804ff96c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
-8
View File
@@ -1,8 +0,0 @@
2025/10/26-00:42:01.075184 7fe806ffd6c0 Recovering log #326
2025/10/26-00:42:01.085655 7fe806ffd6c0 Delete type=3 #324
2025/10/26-00:42:01.085723 7fe806ffd6c0 Delete type=0 #326
2025/10/26-00:42:19.678484 7fe804ff96c0 Level-0 table #331: started
2025/10/26-00:42:19.678508 7fe804ff96c0 Level-0 table #331: 0 bytes OK
2025/10/26-00:42:19.685177 7fe804ff96c0 Delete type=0 #329
2025/10/26-00:42:19.691839 7fe804ff96c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
2025/10/26-00:42:19.691890 7fe804ff96c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
MANIFEST-000251
+8
View File
@@ -0,0 +1,8 @@
2025/10/26-14:17:33.616386 7f05877fe6c0 Recovering log #249
2025/10/26-14:17:33.676039 7f05877fe6c0 Delete type=3 #247
2025/10/26-14:17:33.676103 7f05877fe6c0 Delete type=0 #249
2025/10/26-14:43:50.589531 7f0586bff6c0 Level-0 table #254: started
2025/10/26-14:43:50.589558 7f0586bff6c0 Level-0 table #254: 0 bytes OK
2025/10/26-14:43:50.595890 7f0586bff6c0 Delete type=0 #252
2025/10/26-14:43:50.596069 7f0586bff6c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
2025/10/26-14:43:50.596098 7f0586bff6c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
+8
View File
@@ -0,0 +1,8 @@
2025/10/26-11:41:45.148682 7fe8057fa6c0 Recovering log #245
2025/10/26-11:41:45.159005 7fe8057fa6c0 Delete type=3 #243
2025/10/26-11:41:45.159071 7fe8057fa6c0 Delete type=0 #245
2025/10/26-11:42:27.892214 7fe804ff96c0 Level-0 table #250: started
2025/10/26-11:42:27.892241 7fe804ff96c0 Level-0 table #250: 0 bytes OK
2025/10/26-11:42:27.929964 7fe804ff96c0 Delete type=0 #248
2025/10/26-11:42:27.930136 7fe804ff96c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
2025/10/26-11:42:27.930151 7fe804ff96c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000332 MANIFEST-000251
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:43:48.106637 7fe8067fc6c0 Recovering log #330 2025/10/26-14:17:33.560253 7f058d1fa6c0 Recovering log #249
2025/10/26-00:43:48.116372 7fe8067fc6c0 Delete type=3 #328 2025/10/26-14:17:33.613553 7f058d1fa6c0 Delete type=3 #247
2025/10/26-00:43:48.116424 7fe8067fc6c0 Delete type=0 #330 2025/10/26-14:17:33.613627 7f058d1fa6c0 Delete type=0 #249
2025/10/26-00:50:38.035832 7fe804ff96c0 Level-0 table #335: started 2025/10/26-14:43:50.577372 7f0586bff6c0 Level-0 table #254: started
2025/10/26-00:50:38.035856 7fe804ff96c0 Level-0 table #335: 0 bytes OK 2025/10/26-14:43:50.577440 7f0586bff6c0 Level-0 table #254: 0 bytes OK
2025/10/26-00:50:38.042472 7fe804ff96c0 Delete type=0 #333 2025/10/26-14:43:50.583481 7f0586bff6c0 Delete type=0 #252
2025/10/26-00:50:38.048554 7fe804ff96c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.596035 7f0586bff6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
2025/10/26-00:50:38.048588 7fe804ff96c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.596079 7f0586bff6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:42:01.147545 7fe8057fa6c0 Recovering log #326 2025/10/26-11:41:45.136283 7fe805ffb6c0 Recovering log #245
2025/10/26-00:42:01.157629 7fe8057fa6c0 Delete type=3 #324 2025/10/26-11:41:45.146508 7fe805ffb6c0 Delete type=3 #243
2025/10/26-00:42:01.157685 7fe8057fa6c0 Delete type=0 #326 2025/10/26-11:41:45.146568 7fe805ffb6c0 Delete type=0 #245
2025/10/26-00:42:19.705024 7fe804ff96c0 Level-0 table #331: started 2025/10/26-11:42:27.825311 7fe804ff96c0 Level-0 table #250: started
2025/10/26-00:42:19.705042 7fe804ff96c0 Level-0 table #331: 0 bytes OK 2025/10/26-11:42:27.825331 7fe804ff96c0 Level-0 table #250: 0 bytes OK
2025/10/26-00:42:19.712239 7fe804ff96c0 Delete type=0 #329 2025/10/26-11:42:27.861104 7fe804ff96c0 Delete type=0 #248
2025/10/26-00:42:19.718551 7fe804ff96c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end) 2025/10/26-11:42:27.930116 7fe804ff96c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
2025/10/26-00:42:19.718589 7fe804ff96c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end) 2025/10/26-11:42:27.930158 7fe804ff96c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000332 MANIFEST-000371
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:43:48.070161 7fe805ffb6c0 Recovering log #330 2025/10/26-14:17:33.238795 7f058d1fa6c0 Recovering log #369
2025/10/26-00:43:48.080094 7fe805ffb6c0 Delete type=3 #328 2025/10/26-14:17:33.326213 7f058d1fa6c0 Delete type=3 #367
2025/10/26-00:43:48.080181 7fe805ffb6c0 Delete type=0 #330 2025/10/26-14:17:33.326289 7f058d1fa6c0 Delete type=0 #369
2025/10/26-00:50:38.017018 7fe804ff96c0 Level-0 table #335: started 2025/10/26-14:43:50.557940 7f0586bff6c0 Level-0 table #374: started
2025/10/26-00:50:38.017045 7fe804ff96c0 Level-0 table #335: 0 bytes OK 2025/10/26-14:43:50.557971 7f0586bff6c0 Level-0 table #374: 0 bytes OK
2025/10/26-00:50:38.023650 7fe804ff96c0 Delete type=0 #333 2025/10/26-14:43:50.563944 7f0586bff6c0 Delete type=0 #372
2025/10/26-00:50:38.023844 7fe804ff96c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.570822 7f0586bff6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
2025/10/26-00:50:38.023863 7fe804ff96c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end) 2025/10/26-14:43:50.570858 7f0586bff6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
+8 -8
View File
@@ -1,8 +1,8 @@
2025/10/26-00:42:01.111131 7fe806ffd6c0 Recovering log #326 2025/10/26-14:09:59.645634 7f058d1fa6c0 Recovering log #366
2025/10/26-00:42:01.121591 7fe806ffd6c0 Delete type=3 #324 2025/10/26-14:09:59.687622 7f058d1fa6c0 Delete type=0 #366
2025/10/26-00:42:01.121652 7fe806ffd6c0 Delete type=0 #326 2025/10/26-14:09:59.687683 7f058d1fa6c0 Delete type=3 #365
2025/10/26-00:42:19.685302 7fe804ff96c0 Level-0 table #331: started 2025/10/26-14:11:10.984117 7f0586bff6c0 Level-0 table #370: started
2025/10/26-00:42:19.685333 7fe804ff96c0 Level-0 table #331: 0 bytes OK 2025/10/26-14:11:10.984141 7f0586bff6c0 Level-0 table #370: 0 bytes OK
2025/10/26-00:42:19.691666 7fe804ff96c0 Delete type=0 #329 2025/10/26-14:11:10.990094 7f0586bff6c0 Delete type=0 #368
2025/10/26-00:42:19.691852 7fe804ff96c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end) 2025/10/26-14:11:10.990225 7f0586bff6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
2025/10/26-00:42:19.691880 7fe804ff96c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end) 2025/10/26-14:11:10.990246 7f0586bff6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

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