Compare commits

...

6 Commits

Author SHA1 Message Date
f5a5c25533 Fix wrong sheets 2025-10-26 14:44:06 +01:00
a39d214f1b Ame/Ame max 2025-10-26 13:47:59 +01:00
2fac292459 Ame/Ame max 2025-10-26 13:18:03 +01:00
3c776f85fd Ame/Ame max 2025-10-26 12:29:34 +01:00
40e11aca1b Ame/Ame max 2025-10-26 11:41:18 +01:00
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

BIN
assets/icons/capacite.webp Normal file

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

BIN
assets/icons/don.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
assets/icons/eclat.webp Normal file

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

BIN
assets/icons/origine.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
assets/icons/pacte.webp Normal file

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

BIN
assets/icons/rune.webp Normal file

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

BIN
assets/icons/tendance.webp Normal file

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

View File

@@ -2,11 +2,9 @@
"TYPES": {
"Actor": {
"personnage": "Personnage",
"cellule": "Cellule",
"creature": "Créature"
},
"Item": {
"artefact": "Artefact",
"arme": "Arme",
"talent": "Talent",
"historique": "Historique",
@@ -16,8 +14,6 @@
"monnaie": "Monnaie",
"equipement": "Equipement",
"ressource": "Ressource",
"contact": "Contact",
"mutation": "Mutation",
"don": "Don",
"pacte": "Pacte",
"rune": "Rune",
@@ -29,8 +25,6 @@
},
"MOURNBLADE": {
"ui": {
"editContact": "Modifier le contact",
"deleteContact": "Supprimer le contact",
"editTrait": "Modifier le trait",
"deleteTrait": "Supprimer le trait"
}

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}`);
})();

View File

@@ -44,7 +44,6 @@ export class MournbladeCYD2ActorSheet extends foundry.appv1.sheets.ActorSheet {
protections: foundry.utils.duplicate(this.actor.getArmors()),
historiques: foundry.utils.duplicate(this.actor.getHistoriques() || []),
talents: foundry.utils.duplicate(this.actor.getTalents() || []),
mutations: foundry.utils.duplicate(this.actor.getMutations() || []),
dons: foundry.utils.duplicate(this.actor.getDons() || []),
pactes: foundry.utils.duplicate(this.actor.getPactes() || []),
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() || []),
aspect: this.actor.getAspect(),
marge: this.actor.getMarge(),
talentsCell: this.getCelluleTalents(),
profils: foundry.utils.duplicate(this.actor.getProfils() || []),
combat: this.actor.getCombatValues(),
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
richesse: this.actor.computeRichesse(),
coupDevastateur: this.actor.items.find(it => it.type == "talent" && it.name.toLowerCase() == "coup devastateur" && !it.system.used),
valeurEquipement: this.actor.computeValeurEquipement(),
nbCombativite: 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,
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 }),
@@ -78,20 +79,6 @@ export class MournbladeCYD2ActorSheet extends foundry.appv1.sheets.ActorSheet {
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 */
activateListeners(html) {

View File

@@ -38,6 +38,7 @@ export class MournbladeCYD2Actor extends Actor {
}
if (data.type == 'personnage') {
console.log("Loading skills for personnage")
const skills = await MournbladeCYD2Utility.loadCompendium("fvtt-mournblade-cyd2.skills")
data.items = skills.map(i => i.toObject())
}
@@ -67,10 +68,6 @@ export class MournbladeCYD2Actor extends Actor {
/* -------------------------------------------- */
prepareArme(arme) {
if (this.type == "cellule") {
return arme
}
arme = foundry.utils.duplicate(arme)
let combat = this.getCombatValues()
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
@@ -121,9 +118,6 @@ export class MournbladeCYD2Actor extends Actor {
getEquipments() {
return this.getItemSorted(["equipement"])
}
getArtefacts() {
return this.getItemSorted(["artefact"])
}
getArmors() {
return this.getItemSorted(["protection"])
}
@@ -139,12 +133,6 @@ export class MournbladeCYD2Actor extends Actor {
getRessources() {
return this.getItemSorted(["ressource"])
}
getContacts() {
return this.getItemSorted(["contact"])
}
getMutations() {
return this.getItemSorted(["mutation"])
}
getDons() {
return this.getItemSorted(["don"])
}
@@ -235,20 +223,6 @@ export class MournbladeCYD2Actor extends Actor {
/* -------------------------------------------- */
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 = {
initBase: this.system.attributs.adr.value,
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) {
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()
}
@@ -292,6 +272,26 @@ export class MournbladeCYD2Actor extends Actor {
this.processCombativite(changed.system.sante)
}, 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);
}
@@ -392,6 +392,31 @@ export class MournbladeCYD2Actor extends Actor {
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() {
return this.system.bonneaventure.actuelle
@@ -456,6 +481,24 @@ export class MournbladeCYD2Actor extends Actor {
// 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) {
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) {
let item = this.items.find(item => item.id == equipmentId);

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;
}
}

View File

@@ -1,4 +1,19 @@
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: [
{ key: "0", label: "Aucune/Inconnue" },
@@ -85,59 +100,30 @@ export const MOURNBLADECYD2_CONFIG = {
{ key: "insurge", label: "Insurgé" }
],
optionsTypeArme: [
{key: "contact", label: "Arme de contact"},
{key: "contactjet", label: "Arme de contact et de Jet"},
{key: "jet", label: "Arme de Jet"},
{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"}
{ key: "contact", label: "Arme de contact" },
{ key: "contactjet", label: "Arme de contact et de Jet" },
{ key: "jet", label: "Arme de Jet" },
{ key: "tir", label: "Arme de Tir" }
],
optionsTypeTalent: [
{key: "personnage", label: "Personnage"},
{key: "cellule", label: "Cellule"},
{key: "traitespece", label: "Trait d'espèce"}
{ key: "personnage", label: "Personnage" },
{ key: "traitespece", label: "Trait d'espèce" }
],
optionsUseTalent: [
{key: "permanent", label: "Permanent"},
{key: "sceance", label: "Une fois par scéance"},
{key: "scenario", label: "Une fois par scénario"},
{key: "jour", label: "Une fois par jour"},
{key: "unique", label: "Unique"}
{ key: "permanent", label: "Permanent" },
{ key: "sceance", label: "Une fois par scéance" },
{ key: "scenario", label: "Une fois par scénario" },
{ key: "jour", label: "Une fois par jour" },
{ key: "unique", label: "Unique" }
],
optionsAutomationEvent: [
{key: "on-drop", label: "Drop sur l'acteur"},
{key: "prepare-roll", label: "Préparation d'un jet"},
{key: "bonus-permanent", label: "Bonus permanent"}
{ key: "on-drop", label: "Drop sur l'acteur" },
{ key: "prepare-roll", label: "Préparation d'un jet" },
{ key: "bonus-permanent", label: "Bonus permanent" }
],
optionsBonusPermanent: [
{key: "vigueur", label: "Vigueur"},
{key: "bonus-defensif", label: "Bonus au Seuil de Défense"}
{ key: "vigueur", label: "Vigueur" },
{ key: "seuilpouvoir", label: "Seuil de Pouvoir" },
{ key: "bonus-defensif", label: "Bonus au Seuil de Défense" }
]
}

View File

@@ -62,14 +62,14 @@ export class MournbladeCYD2ItemSheet extends foundry.appv1.sheets.ItemSheet {
limited: this.object.limited,
options: this.options,
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'),
isGM: game.user.isGM,
config: game.system.mournbladecyd2.config
}
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");
console.log("ITEM DATA", formData, this);

View File

@@ -1,19 +1,22 @@
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
export const defaultItemImg = {
competence: "systems/fvtt-mournblade-cyd2/assets/icons/competence.webp",
arme: "systems/fvtt-mournblade-cyd2/assets/icons/melee.webp",
equipement: "systems/fvtt-mournblade-cyd2/assets/icons/equipement.webp",
monnaie: "systems/fvtt-mournblade-cyd2/assets/icons/monnaie.webp",
predilection: "systems/fvtt-mournblade-cyd2/assets/icons/predilection.webp",
protection: "systems/fvtt-mournblade-cyd2/assets/icons/protection.webp",
talent: "systems/fvtt-mournblade-cyd2/assets/icons/talent.webp",
historique: "systems/fvtt-mournblade-cyd2/assets/icons/historique.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",
mutation: "systems/fvtt-mournblade-cyd2/assets/icons/mutation.webp",
competence: "systems/fvtt-mournblade-cyd2/assets/icons/competence.webp",
arme: "systems/fvtt-mournblade-cyd2/assets/icons/melee.webp",
equipement: "systems/fvtt-mournblade-cyd2/assets/icons/equipement.webp",
monnaie: "systems/fvtt-mournblade-cyd2/assets/icons/monnaie.webp",
predilection: "systems/fvtt-mournblade-cyd2/assets/icons/predilection.webp",
protection: "systems/fvtt-mournblade-cyd2/assets/icons/protection.webp",
talent: "systems/fvtt-mournblade-cyd2/assets/icons/talent.webp",
historique: "systems/fvtt-mournblade-cyd2/assets/icons/historique.webp",
profil: "systems/fvtt-mournblade-cyd2/assets/icons/profil.webp",
ressource: "systems/fvtt-mournblade-cyd2/assets/icons/ressources.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",
}
/**

View File

@@ -12,7 +12,6 @@ import { MournbladeCYD2Actor } from "./mournblade-cyd2-actor.js";
import { MournbladeCYD2ItemSheet } from "./mournblade-cyd2-item-sheet.js";
import { MournbladeCYD2ActorSheet } from "./mournblade-cyd2-actor-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 { MournbladeCYD2Combat } from "./mournblade-cyd2-combat.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.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", MournbladeCYD2CelluleSheet, { types: ["cellule"], makeDefault: true });
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
foundry.documents.collections.Items.registerSheet("fvtt-mournblade-cyd2", MournbladeCYD2ItemSheet, { makeDefault: true })
@@ -77,8 +75,8 @@ function welcomeMessage() {
user: game.user.id,
whisper: [game.user.id],
content: `<div id="welcome-message-MournbladeCYD2"><span class="rdd-roll-part">
<strong>Bienvenue dans MournbladeCYD2 et le troisième Millénaire !</strong>
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p>
<strong>Bienvenue dans Mournblade CYD 2.0 !</strong>
<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>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
` });

View File

@@ -56,13 +56,7 @@ export class MournbladeCYD2Utility {
type: String,
choices: { // If choices are defined, the resulting setting will be a select menu
"mournblade_logo_chaos": "Mournblade (Chaos)",
"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)"
"mournblade_logo_texte": "Mournblade (Texte)"
},
})
@@ -118,7 +112,6 @@ export class MournbladeCYD2Utility {
game.system.mournbladecyd2.config.listeNiveauSkill = this.createDirectOptionList(0, 10)
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
}
/* -------------------------------------------- */
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) {
rollData.bonusFormula = rollData.addedBonus
@@ -817,20 +875,4 @@ export class MournbladeCYD2Utility {
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.

View File

@@ -1 +1 @@
MANIFEST-000333
MANIFEST-000372

View File

@@ -1,8 +1,8 @@
2025/10/26-00:43:48.182974 7fe806ffd6c0 Recovering log #331
2025/10/26-00:43:48.193649 7fe806ffd6c0 Delete type=3 #329
2025/10/26-00:43:48.193720 7fe806ffd6c0 Delete type=0 #331
2025/10/26-00:50:38.091073 7fe804ff96c0 Level-0 table #336: started
2025/10/26-00:50:38.091107 7fe804ff96c0 Level-0 table #336: 0 bytes OK
2025/10/26-00:50:38.097587 7fe804ff96c0 Delete type=0 #334
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-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:17:34.089807 7f058c9f96c0 Recovering log #370
2025/10/26-14:17:34.150991 7f058c9f96c0 Delete type=3 #368
2025/10/26-14:17:34.151050 7f058c9f96c0 Delete type=0 #370
2025/10/26-14:43:50.641754 7f0586bff6c0 Level-0 table #375: started
2025/10/26-14:43:50.641778 7f0586bff6c0 Level-0 table #375: 0 bytes OK
2025/10/26-14:43:50.648553 7f0586bff6c0 Delete type=0 #373
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-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)

View File

@@ -1,8 +1,8 @@
2025/10/26-00:42:01.224869 7fe8057fa6c0 Recovering log #327
2025/10/26-00:42:01.234442 7fe8057fa6c0 Delete type=3 #325
2025/10/26-00:42:01.234506 7fe8057fa6c0 Delete type=0 #327
2025/10/26-00:42:19.753512 7fe804ff96c0 Level-0 table #332: started
2025/10/26-00:42:19.753550 7fe804ff96c0 Level-0 table #332: 0 bytes OK
2025/10/26-00:42:19.760315 7fe804ff96c0 Delete type=0 #330
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-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:10:00.107133 7f058d1fa6c0 Recovering log #367
2025/10/26-14:10:00.170337 7f058d1fa6c0 Delete type=0 #367
2025/10/26-14:10:00.170407 7f058d1fa6c0 Delete type=3 #366
2025/10/26-14:11:11.035066 7f0586bff6c0 Level-0 table #371: started
2025/10/26-14:11:11.035107 7f0586bff6c0 Level-0 table #371: 0 bytes OK
2025/10/26-14:11:11.041259 7f0586bff6c0 Delete type=0 #369
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-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.

BIN
packs/armes/000235.ldb Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000332
MANIFEST-000252

View File

@@ -1,8 +1,11 @@
2025/10/26-00:43:48.082340 7fe8057fa6c0 Recovering log #330
2025/10/26-00:43:48.092212 7fe8057fa6c0 Delete type=3 #328
2025/10/26-00:43:48.092287 7fe8057fa6c0 Delete type=0 #330
2025/10/26-00:50:38.029897 7fe804ff96c0 Level-0 table #335: started
2025/10/26-00:50:38.029919 7fe804ff96c0 Level-0 table #335: 0 bytes OK
2025/10/26-00:50:38.035762 7fe804ff96c0 Delete type=0 #333
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-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:17:33.329160 7f0587fff6c0 Recovering log #250
2025/10/26-14:17:33.329199 7f0587fff6c0 Recovering log #369
2025/10/26-14:17:33.500980 7f0587fff6c0 Delete type=2 #352
2025/10/26-14:17:33.501082 7f0587fff6c0 Delete type=0 #369
2025/10/26-14:17:33.501136 7f0587fff6c0 Delete type=3 #248
2025/10/26-14:17:33.501178 7f0587fff6c0 Delete type=0 #250
2025/10/26-14:43:50.551774 7f0586bff6c0 Level-0 table #372: started
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)

View File

@@ -1,8 +1,8 @@
2025/10/26-00:42:01.123924 7fe805ffb6c0 Recovering log #326
2025/10/26-00:42:01.133650 7fe805ffb6c0 Delete type=3 #324
2025/10/26-00:42:01.133709 7fe805ffb6c0 Delete type=0 #326
2025/10/26-00:42:19.691980 7fe804ff96c0 Level-0 table #331: started
2025/10/26-00:42:19.692007 7fe804ff96c0 Level-0 table #331: 0 bytes OK
2025/10/26-00:42:19.698438 7fe804ff96c0 Delete type=0 #329
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-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:41:45.111518 7fe806ffd6c0 Recovering log #246
2025/10/26-11:41:45.121406 7fe806ffd6c0 Delete type=3 #244
2025/10/26-11:41:45.121474 7fe806ffd6c0 Delete type=0 #246
2025/10/26-11:42:27.673791 7fe804ff96c0 Level-0 table #251: started
2025/10/26-11:42:27.673818 7fe804ff96c0 Level-0 table #251: 0 bytes OK
2025/10/26-11:42:27.702748 7fe804ff96c0 Delete type=0 #249
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-11:42:27.787822 7fe804ff96c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)

BIN
packs/armes/MANIFEST-000252 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/armes/MANIFEST-000367 Normal file

Binary file not shown.

View File

@@ -1 +0,0 @@
MANIFEST-000332

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)

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.

View File

@@ -1 +0,0 @@
MANIFEST-000332

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)

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.

BIN
packs/dons/000234.ldb Normal file

Binary file not shown.

1
packs/dons/CURRENT Normal file
View File

@@ -0,0 +1 @@
MANIFEST-000251

8
packs/dons/LOG Normal file
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
packs/dons/LOG.old Normal file
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)

BIN
packs/dons/MANIFEST-000251 Normal file

Binary file not shown.

BIN
packs/equipement/000234.ldb Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000332
MANIFEST-000251

View File

@@ -1,8 +1,8 @@
2025/10/26-00:43:48.106637 7fe8067fc6c0 Recovering log #330
2025/10/26-00:43:48.116372 7fe8067fc6c0 Delete type=3 #328
2025/10/26-00:43:48.116424 7fe8067fc6c0 Delete type=0 #330
2025/10/26-00:50:38.035832 7fe804ff96c0 Level-0 table #335: started
2025/10/26-00:50:38.035856 7fe804ff96c0 Level-0 table #335: 0 bytes OK
2025/10/26-00:50:38.042472 7fe804ff96c0 Delete type=0 #333
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-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:17:33.560253 7f058d1fa6c0 Recovering log #249
2025/10/26-14:17:33.613553 7f058d1fa6c0 Delete type=3 #247
2025/10/26-14:17:33.613627 7f058d1fa6c0 Delete type=0 #249
2025/10/26-14:43:50.577372 7f0586bff6c0 Level-0 table #254: started
2025/10/26-14:43:50.577440 7f0586bff6c0 Level-0 table #254: 0 bytes OK
2025/10/26-14:43:50.583481 7f0586bff6c0 Delete type=0 #252
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-14:43:50.596079 7f0586bff6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/10/26-00:42:01.147545 7fe8057fa6c0 Recovering log #326
2025/10/26-00:42:01.157629 7fe8057fa6c0 Delete type=3 #324
2025/10/26-00:42:01.157685 7fe8057fa6c0 Delete type=0 #326
2025/10/26-00:42:19.705024 7fe804ff96c0 Level-0 table #331: started
2025/10/26-00:42:19.705042 7fe804ff96c0 Level-0 table #331: 0 bytes OK
2025/10/26-00:42:19.712239 7fe804ff96c0 Delete type=0 #329
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-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:41:45.136283 7fe805ffb6c0 Recovering log #245
2025/10/26-11:41:45.146508 7fe805ffb6c0 Delete type=3 #243
2025/10/26-11:41:45.146568 7fe805ffb6c0 Delete type=0 #245
2025/10/26-11:42:27.825311 7fe804ff96c0 Level-0 table #250: started
2025/10/26-11:42:27.825331 7fe804ff96c0 Level-0 table #250: 0 bytes OK
2025/10/26-11:42:27.861104 7fe804ff96c0 Delete type=0 #248
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-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.

View File

@@ -1 +1 @@
MANIFEST-000332
MANIFEST-000371

View File

@@ -1,8 +1,8 @@
2025/10/26-00:43:48.070161 7fe805ffb6c0 Recovering log #330
2025/10/26-00:43:48.080094 7fe805ffb6c0 Delete type=3 #328
2025/10/26-00:43:48.080181 7fe805ffb6c0 Delete type=0 #330
2025/10/26-00:50:38.017018 7fe804ff96c0 Level-0 table #335: started
2025/10/26-00:50:38.017045 7fe804ff96c0 Level-0 table #335: 0 bytes OK
2025/10/26-00:50:38.023650 7fe804ff96c0 Delete type=0 #333
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-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:17:33.238795 7f058d1fa6c0 Recovering log #369
2025/10/26-14:17:33.326213 7f058d1fa6c0 Delete type=3 #367
2025/10/26-14:17:33.326289 7f058d1fa6c0 Delete type=0 #369
2025/10/26-14:43:50.557940 7f0586bff6c0 Level-0 table #374: started
2025/10/26-14:43:50.557971 7f0586bff6c0 Level-0 table #374: 0 bytes OK
2025/10/26-14:43:50.563944 7f0586bff6c0 Delete type=0 #372
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-14:43:50.570858 7f0586bff6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2025/10/26-00:42:01.111131 7fe806ffd6c0 Recovering log #326
2025/10/26-00:42:01.121591 7fe806ffd6c0 Delete type=3 #324
2025/10/26-00:42:01.121652 7fe806ffd6c0 Delete type=0 #326
2025/10/26-00:42:19.685302 7fe804ff96c0 Level-0 table #331: started
2025/10/26-00:42:19.685333 7fe804ff96c0 Level-0 table #331: 0 bytes OK
2025/10/26-00:42:19.691666 7fe804ff96c0 Delete type=0 #329
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-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:09:59.645634 7f058d1fa6c0 Recovering log #366
2025/10/26-14:09:59.687622 7f058d1fa6c0 Delete type=0 #366
2025/10/26-14:09:59.687683 7f058d1fa6c0 Delete type=3 #365
2025/10/26-14:11:10.984117 7f0586bff6c0 Level-0 table #370: started
2025/10/26-14:11:10.984141 7f0586bff6c0 Level-0 table #370: 0 bytes OK
2025/10/26-14:11:10.990094 7f0586bff6c0 Delete type=0 #368
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-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.

BIN
packs/mutations/000262.ldb Normal file

Binary file not shown.

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