16 Commits

Author SHA1 Message Date
3693d68c24 Correction sur les compétences de base
All checks were successful
Release Creation / build (release) Successful in 1m0s
2025-06-04 15:29:32 +02:00
16ccd2f3e1 Foundry v13 migration 2025-05-09 10:28:22 +02:00
631eb280ca Foundry v13 migration
All checks were successful
Release Creation / build (release) Successful in 55s
2025-05-09 10:26:29 +02:00
88ca98945f Fix #3 2025-04-20 09:25:48 +02:00
edfb2105d3 Various enhancements + fixes
All checks were successful
Release Creation / build (release) Successful in 56s
2025-04-12 00:18:45 +02:00
84cc59c57d Fix and enhancements
All checks were successful
Release Creation / build (release) Successful in 2m23s
2025-04-05 23:15:46 +02:00
e9c0fbd818 Fix URL scheme
All checks were successful
Release Creation / build (release) Successful in 1m30s
2025-03-19 13:55:30 +01:00
aaabb7ed75 Correction sur XP, echec critique et tir réussi
All checks were successful
Release Creation / build (release) Successful in 53s
2025-03-18 20:38:30 +01:00
fee7a3a9fb Gestion opposition en combat melee 2025-03-11 20:16:26 +01:00
31517030f6 Gestion opposition en combat melee
All checks were successful
Release Creation / build (release) Successful in 39s
2025-03-11 20:10:06 +01:00
c5cbf2a6d1 Gestion du genre dans la creation de perso 2025-03-11 13:45:04 +01:00
a30f813d94 Fix genre 2025-03-10 16:56:25 +01:00
090f6be601 Fix genre 2025-03-10 16:56:10 +01:00
60db1f65e4 Prit fix sur equipement et armes d'hast 2025-03-10 15:52:37 +01:00
d532765d2b Correction sur creation PNJ
All checks were successful
Release Creation / build (release) Successful in 2m0s
2025-03-01 22:01:01 +01:00
b6016742ae Enable PNJ 2025-03-01 19:42:15 +01:00
158 changed files with 517 additions and 342 deletions

View File

@ -27,7 +27,7 @@ jobs:
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/${{gitea.repository}}
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/system.json
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/latest/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-te-deum-${{github.event.release.tag_name}}.zip
# Create a zip file with all files required by the module to add to the release

View File

@ -1,7 +1,29 @@
# 13.0.0
- Support de Foundry v13
# 12.0.23
- Correction sur les jets réussie en tir
- Correction sur le dés négatif pour les échecs critiques
- Correction sur l'XP et édition de l'XP en mode MJ
# 12.0.22
- Correction pour les armes d'hast
- Correction sur la zone libre d'équipement
- Bouton + pour créer un équipement à nouveau opérationnel
- Modification de la gestion des jets en combat, avec gestion opposition ou degats immédiats
- Gestion du genre dans la création de personnage
# 12.0.21
- Creation de PNJ OK
# 12.0.20
- Corrections sur la création de perso
- Corrections sur la création de perso
# 12.0.19
- Initial release !

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -6,7 +6,7 @@
import { TeDeumUtility } from "../common/tedeum-utility.js";
/* -------------------------------------------- */
export class TeDeumActorPJSheet extends ActorSheet {
export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */
static get defaultOptions() {
@ -42,6 +42,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
providence: this.actor.prepareProvidence(),
arbreCompetences: this.actor.prepareArbreCompetences(),
equipements: this.actor.getEquipements(),
simples: this.actor.getSimples(),
armures: this.actor.getArmures(),
graces: this.actor.getGraces(),
blessures: this.actor.getBlessures(),
@ -55,9 +56,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(),
santeModifier: this.actor.getSanteModifier(),
educations: this.actor.getEducations(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
histoire: await TextEditor.enrichHTML(this.object.system.histoire, { async: true }),
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
equipmentfree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { async: true }),
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
histoire: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.histoire, { async: true }),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
@ -77,10 +79,10 @@ export class TeDeumActorPJSheet extends ActorSheet {
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
if (e.keyCode === 13) return false;
});
});
// Update Inventory Item
html.find('.item-edit').click(ev => {
@ -96,16 +98,21 @@ export class TeDeumActorPJSheet extends ActorSheet {
})
html.find('.item-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true })
})
html.find('.competence-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
let caracKey = $(ev.currentTarget).data("carac-key")
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: {caracteristique: caracKey} }], { renderSheet: true })
})
html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
let actor = game.actors.get( actorId );
actor.sheet.render(true);
});
html.find('.subactor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
@ -123,7 +130,7 @@ export class TeDeumActorPJSheet extends ActorSheet {
html.find('.roll-competence').click((event) => {
let compId = $(event.currentTarget).data("comp-id")
this.actor.rollCompetence(compId)
});
});
html.find('.roll-arme').click((event) => {
const armeId = $(event.currentTarget).data("arme-id")
this.actor.rollArme(armeId)
@ -132,24 +139,24 @@ export class TeDeumActorPJSheet extends ActorSheet {
const armeId = $(event.currentTarget).data("arme-id")
this.actor.rollDegatsArme(armeId)
});
html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore;
this.render(true);
});
});
html.find('.item-equip').click(ev => {
const li = $(ev.currentTarget).parents(".item");
this.actor.equipItem( li.data("item-id") );
this.render(true);
this.render(true);
});
html.find('.update-field').change(ev => {
const fieldName = $(ev.currentTarget).data("field-name");
let value = Number(ev.currentTarget.value);
this.actor.update( { [`${fieldName}`]: value } );
});
});
}
/* -------------------------------------------- */
/** @override */
setPosition(options = {}) {

View File

@ -14,8 +14,8 @@ export class TeDeumActor extends Actor {
/**
* Override the create() function to provide additional SoS functionality.
*
* This overrided create() function adds initial items
* Namely: Basic skills, money,
* This overrided create() function adds initial items
* Namely: Basic skills, money,
*
* @param {Object} data Barebones actor data which this function adds onto.
* @param {Object} options (Unused) Additional options which customize the creation workflow.
@ -34,7 +34,7 @@ export class TeDeumActor extends Actor {
return actor;
}
if (data.type == 'pj') {
if (data.type == 'pj' || data.type == 'pnj') {
const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
data.items = data.items || []
for (let skill of skills) {
@ -64,7 +64,7 @@ export class TeDeumActor extends Actor {
super._preUpdate(changed, options, user);
}
getCompetenceScore(compName) {
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
if (competence) {
@ -127,8 +127,10 @@ export class TeDeumActor extends Actor {
if (updates.length > 0) {
this.updateEmbeddedDocuments('Item', updates)
}
super._onUpdate(changed, options, userId);
}
/* -------------------------------------------- */
async _preCreate(data, options, user) {
await super._preCreate(data, options, user);
@ -198,6 +200,11 @@ export class TeDeumActor extends Actor {
TeDeumUtility.sortArrayObjectsByName(comp)
return comp;
}
getSimples() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'simple') || [])
TeDeumUtility.sortArrayObjectsByName(comp)
return comp;
}
getArmures() {
let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || [])
TeDeumUtility.sortArrayObjectsByName(comp)
@ -275,7 +282,7 @@ export class TeDeumActor extends Actor {
for (let bId in game.system.tedeum.config.blessures) {
let blessure = game.system.tedeum.config.blessures[bId]
if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) {
// Create a new blessure object
// Create a new blessure object
let blessureObj = {
name: blessure.label,
type: "blessure",
@ -303,7 +310,11 @@ export class TeDeumActor extends Actor {
c.key = key
c.name = game.system.tedeum.config.caracteristiques[key].label
c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite
c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key]
if (this.system.genre.toLowerCase() == "homme") {
c.qualite = game.system.tedeum.config.descriptionValeur[c.value][key]
} else {
c.qualite = game.system.tedeum.config.descriptionValeurFemme[c.value][key]
}
c.dice = game.system.tedeum.config.descriptionValeur[c.value].dice
c.negativeDice = game.system.tedeum.config.descriptionValeur[c.value].negativeDice
}
@ -322,7 +333,11 @@ export class TeDeumActor extends Actor {
prepareProvidence() {
let providence = foundry.utils.deepClone(this.system.providence)
providence.name = "Providence"
providence.qualite = game.system.tedeum.config.providence[providence.value].labelM
if (this.system.genre.toLowerCase() == "homme") {
providence.qualite = game.system.tedeum.config.providence[providence.value].labelH
} else {
providence.qualite = game.system.tedeum.config.providence[providence.value].labelF
}
providence.dice = game.system.tedeum.config.providence[providence.value].diceValue
providence.description = "La Providence représente la Volonté Divine à l'œuvre pour guider ou sauver un être humain. Les PJ montent dans léchelle de la Providence en menant à bien leurs missions et en se montrant vertueux. Les points de Providence peuvent servir à augmenter temporairement une caractéris- tique, à modifier la gravité d'une blessure, et à résister au vieillissement. Chaque person- nage commence avec un score initial de 1 en Providence (au niveau Pauvre pécheur)."
return providence
@ -360,11 +375,13 @@ export class TeDeumActor extends Actor {
providence.value = Math.min(Math.max(providence.value + value, 0), 6)
this.update({ "system.providence": providence })
}
/* -------------------------------------------- */
modifyXP(key, value) {
async modifyXP(key, value) {
let xp = this.system.caracteristiques[key].experience
xp = Math.max(xp + value, 0)
this.update({ [`system.caracteristiques.${key}.experience`]: xp })
await this.update({ [`system.caracteristiques.${key}.experience`]: xp })
this.sheet?.render(true)
}
/* -------------------------------------------- */
@ -578,6 +595,7 @@ export class TeDeumActor extends Actor {
let rollData = this.getCommonCompetence(compId)
rollData.mode = "competence"
rollData.title = rollData.competence.name
rollData.compScore = rollData.competence.system.isBase ? this.system.caracteristiques[rollData.competence.system.caracteristique].value : rollData.competence.system.score
this.startRoll(rollData).catch("Error on startRoll")
}
@ -630,7 +648,8 @@ export class TeDeumActor extends Actor {
// Setup competence + carac
if (!compName) {
compName = weapon.system.competence
let compIdx = weapon.system.competence
compName = game.system.tedeum.config.armeCompetences[compIdx]?.label
}
let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase())
if (competence) {

View File

@ -69,7 +69,7 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/
async askStageName(context) {
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-stage-name.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-stage-name.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },
classes: ["fvtt-te-deum"],
@ -127,7 +127,7 @@ export class TeDeumCharacterCreator {
context.competences = {}
context.responseKey = "reponse1" // By default
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-questions.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-questions.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },
classes: ["fvtt-te-deum"],
@ -156,7 +156,7 @@ export class TeDeumCharacterCreator {
// Get the responseKey data
let responseKey = $(event.target).data("response-key")
let compName = event.target.value
console.log("Questionnaire Change", responseKey, compName)
console.log("Questionnaire Change", responseKey, compName)
context.competences[responseKey] = compName.toLowerCase()
})
}
@ -192,7 +192,7 @@ export class TeDeumCharacterCreator {
}
}
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },
classes: ["fvtt-te-deum"],
@ -236,7 +236,7 @@ export class TeDeumCharacterCreator {
}
}
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-competences.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },
classes: ["fvtt-te-deum"],
@ -283,7 +283,7 @@ export class TeDeumCharacterCreator {
context.caracList.push(game.system.tedeum.config.caracteristiques[carac.caracId])
}
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-carac.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-select-carac.hbs", context)
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },
classes: ["fvtt-te-deum"],
@ -325,7 +325,7 @@ export class TeDeumCharacterCreator {
origineChoice: game.system.tedeum.config.origineSociale
}
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-origine.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-origine.hbs", context)
const label = "Valider le choix de l'Origine Sociale"
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },
@ -374,6 +374,7 @@ export class TeDeumCharacterCreator {
title: "Création de personnage - La Pouponnière",
subtitle: "Choix de la Pouponnière",
label: "Valider le choix de la Pouponnière",
hasGenre: false,
choices: pouponniereItems,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
@ -403,11 +404,12 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/
async renderPetitsGrimauds(stage) {
// Filter available pouponniere from origineSociale
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible)
let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
let context = {
title: "Les Petits Grimauds",
label: "Valider le choix des Petits Grimauds",
hasGenre: true,
choices: grimaudsItems,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
@ -437,12 +439,13 @@ export class TeDeumCharacterCreator {
/*--------------------------------------------*/
async renderRosesDeLaVie(stage) {
// Filter available pouponniere from origineSociale
let rosesItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible)
let rosesItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))
let context = {
title: "Création de personnage - Les Roses de la Vie",
label: "Valider le choix des Roses de la Vie",
choices: rosesItems,
hasGenre: true,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
@ -488,6 +491,7 @@ export class TeDeumCharacterCreator {
title: "Création de personnage - L'Age Viril",
label: "Valider le choix de l'Age Viril",
choices: ageVirilItems,
hasGenre: false,
caracBonus: this.caracBonus,
competenceBonus: this.competenceBonus
}
@ -541,7 +545,7 @@ export class TeDeumCharacterCreator {
let actor = await TeDeumActor.create({name: "Nouveau personnage", type: "pj"})
let updates = {}
for (let key in this.caracBonus) {
updates[`system.caracteristiques.${key}.value`] = Number(this.caracBonus[key].value)+1
updates[`system.caracteristiques.${key}.value`] = Number(this.caracBonus[key].value)+1
}
updates['system.genre'] = this.sexe
updates['system.religion'] = TeDeumUtility.upperFirst(this.religion)
@ -549,7 +553,7 @@ export class TeDeumCharacterCreator {
updates['system.equipmentfree'] = this.ageViril.system.trousseau
actor.update( updates);
// Process competences : increase know skills
// Process competences : increase know skills
let updateComp = []
let toAdd = []
for (let compName in this.competenceBonus) {
@ -558,13 +562,13 @@ export class TeDeumCharacterCreator {
updateComp.push({ _id: comp._id, "system.score": this.competenceBonus[compName].value })
} else {
toAdd.push( compName)
}
}
}
actor.updateEmbeddedDocuments("Item", updateComp)
// Process adding skills
// Process adding skills
let compendiumSkill = TeDeumUtility.getCompetences()
let compToAdd = [ this.pouponniere, this.grimauds, this.roses, this.ageViril ]
let compToAdd = [ this.pouponniere, this.grimauds, this.roses, this.ageViril ]
for (let compName of toAdd) {
let comp = compendiumSkill.find( i => i.name.toLowerCase() === compName.toLowerCase())
comp.system.score = this.competenceBonus[compName].value
@ -578,13 +582,13 @@ export class TeDeumCharacterCreator {
let histoire = ""
for (let reponse of this.suiviReponses) {
histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>`
histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>`
}
await actor.update({ "system.histoire": histoire})
actor.render(true)
context.pointsCompetence = {
"savoir": { score: actor.getCompetenceScore("Mémoriser"), label: "Savoir" },
"savoir": { score: actor.getCompetenceScore("Mémoriser"), label: "Savoir" },
"sensibilite": { score: actor.getCompetenceScore("Perception"), label: "Sensibilité" },
"entregent": { score: actor.getCompetenceScore("Charme"), label: "Entregent" },
"puissance": { score: actor.getCompetenceScore("Effort"), label: "Puissance" },
@ -592,7 +596,7 @@ export class TeDeumCharacterCreator {
"adresse": { score: actor.getCompetenceScore("Initiative"), label: "Adresse" },
}
const content = await renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-te-deum/templates/dialogs/character-creator-finished.hbs", context)
const label = "Terminer"
const choiceResult = await foundry.applications.api.DialogV2.wait({
window: { title: context.title },

View File

@ -57,7 +57,7 @@ export const TEDEUM_CONFIG = {
descriptionValeurOdd: {
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Frustre", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Fruste", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
5: { valeur: 5, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
@ -71,12 +71,20 @@ export const TEDEUM_CONFIG = {
},
descriptionValeur: {
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sot", sensibilite: "Obtus", entregent: "Rustaud", puissance: "Menu", complexion: "Anémique", adresse: "Empesé" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Frustre", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limité", sensibilite: "Etriqué", entregent: "Fruste", puissance: "Délicat", complexion: "Languide", adresse: "Gauche" },
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlé", sensibilite: "Ouvert", entregent: "Badin", puissance: "Membru", complexion: "Dispos", adresse: "Ingambe" },
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettré", sensibilite: "Fin", entregent: "Disert", puissance: "Vigoureux", complexion: "Gaillard", adresse: "Leste" },
5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" },
6: { valeur: 6, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituel", entregent: "Sémillant", puissance: "Hercule", complexion: "Aguerri", adresse: "Alerte" },
},
descriptionValeurFemme: {
1: { valeur: 1, qualite: "Mauvais", dice: "d4", negativeDice: "d20", savoir: "Sotte", sensibilite: "Obtuse", entregent: "Rustaude", puissance: "Menue", complexion: "Anémique", adresse: "Empesée" },
2: { valeur: 2, qualite: "Médiocre", dice: "d6", negativeDice: "d12", savoir: "Limitée", sensibilite: "Etriquée", entregent: "Fruste", puissance: "Délicate", complexion: "Languide", adresse: "Gauche" },
3: { valeur: 3, qualite: "Correct", dice: "d8", negativeDice: "d10", savoir: "Mêlée", sensibilite: "Ouverte", entregent: "Badine", puissance: "Membrue", complexion: "Dispose", adresse: "Ingambe" },
4: { valeur: 4, qualite: "Bon", dice: "d10", negativeDice: "d8", savoir: "Lettrée", sensibilite: "Fine", entregent: "Diserte", puissance: "Vigoureuse", complexion: "Gaillarde", adresse: "Leste" },
5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtile", entregent: "Galante", puissance: "Musculeuse", complexion: "Sanguine", adresse: "Preste" },
6: { valeur: 6, qualite: "Admirable", dice: "d20", negativeDice: "d4", savoir: "Humaniste", sensibilite: "Spirituelle", entregent: "Sémillante", puissance: "Hercule", complexion: "Aguerrie", adresse: "Alerte" },
},
diceValeur: ["d4", "d6", "d8", "d10", "d12", "d20"],
degatsArmure: {
sansarmure: { label: "Sans armure" },
@ -117,6 +125,11 @@ export const TEDEUM_CONFIG = {
melee: { label: "Mêlée", value: "melee" },
tir: { label: "Tir", value: "tir" }
},
genreEducation: {
"homme": { label: "Homme", value: "Homme" },
"femme": { label: "Femme", value: "Femme" },
"mixte": { label: "Mixte", value: "Mixte" }
},
armeAllonges: {
courte: { label: "Courte", value: "courte" },
moyenne: { label: "Moyenne", value: "moyenne" },
@ -152,11 +165,16 @@ export const TEDEUM_CONFIG = {
sol: { label: "Sols", id: "sol", value: 10 },
livre: { label: "Livres", id: "livre", value: 100 }
},
monnaieUnit: {
"1": { label: "Deniers", id: "denier", value: 1 },
"10": { label: "Sols", id: "sol", value: 10 },
"100": { label: "Livres", id: "livre", value: 100 }
},
etapesEducation: {
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, hasQuestionnaire: true, hasDebouches: false, hasMultiplier: false, canCompetencesOpt: false },
petitsgrimauds: { label: "La classe des Petits Grimauds", value: "petitsgrimauds", agemin: 7, agemax: 12, nbCompetences: 10, nbCaracteristiques: 3, hasDebouches: false, hasQuestionnaire: true, hasMultiplier: false, canCompetencesOpt: false },
rosevie: { label: "Les Roses de la Vie", value: "rosevie", agemin: 13, agemax: 16, nbCompetences: 2, nbCaracteristiques: 3, hasQuestionnaire: true, hasDebouches: true, hasMultiplier: false, canCompetencesOpt: false },
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
pouponniere: { label: "La Pouponnière", value: "pouponniere", agemin: 0, agemax: 6, nbCompetences: 2, nbCaracteristiques: 3, hasGenre: false, hasQuestionnaire: true, hasDebouches: false, hasMultiplier: false, canCompetencesOpt: false },
petitsgrimauds: { label: "La classe des Petits Grimauds", value: "petitsgrimauds", agemin: 7, agemax: 12, nbCompetences: 10, hasGenre: true, nbCaracteristiques: 3, hasDebouches: false, hasQuestionnaire: true, hasMultiplier: false, canCompetencesOpt: false },
rosevie: { label: "Les Roses de la Vie", value: "rosevie", agemin: 13, agemax: 16, nbCompetences: 2, nbCaracteristiques: 3, hasGenre: true, hasQuestionnaire: true, hasDebouches: true, hasMultiplier: false, canCompetencesOpt: false },
ageviril: { label: "L'Age Viril", value: "ageviril", agemin: 17, agemax: 17, nbCompetences: 9, nbCaracteristiques: 2, hasGenre: false, hasQuestionnaire: false, hasDebouches: false, hasMultiplier: true, canCompetencesOpt: true },
},
origineSociale: {
noblesseepee: { label: "Noblesse d'épée", id: "noblesseepee", caracteristiques: { entregent: 1, puissance: 1 }, cagnotte: 10, cagnotteUnit: "livres", value: 1 },

View File

@ -24,7 +24,7 @@ export class TeDeumUtility {
let cr = new game.system.tedeum.TeDeumCharacterCreator();
cr.init()
})
html.find('.header-actions').after(button)
$(html).find('.header-actions').after(button)
}
})
//Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options));
@ -92,6 +92,13 @@ export class TeDeumUtility {
Handlebars.registerHelper('isGM', function () {
return game.user.isGM
})
Handlebars.registerHelper('monnaie', function (value) {
let monnaie = game.system.tedeum.config.monnaieUnit[String(value)]
if (monnaie) {
return monnaie.label
}
return value
})
// Load compendium data
const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences")
@ -160,6 +167,7 @@ export class TeDeumUtility {
formData.hasMultiplier = etape.hasMultiplier;
formData.hasDebouches = etape.hasDebouches;
formData.canCompetencesOpt = etape.canCompetencesOpt;
formData.hasGenre = etape.hasGenre;
}
/*-------------------------------------------- */
@ -200,11 +208,13 @@ export class TeDeumUtility {
ui.notifications.info("Opposition démarrée avec " + rollData.alias);
} else {
// Perform the opposition
let isAttackWinner = true
let rWinner = this.currentOpposition
let rLooser = rollData
if (rWinner.total < rLooser.total) {
rWinner = rollData
rLooser = this.currentOpposition
isAttackWinner = false
}
this.currentOpposition = undefined // Reset opposition
let oppositionData = {
@ -212,17 +222,35 @@ export class TeDeumUtility {
looser: rLooser
}
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData)
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-opposition-result.hbs`, oppositionData)
})
await msg.setFlag("world", "te-deum-rolldata", rollData)
// Si le gagnant est l'attaquant, appliquer les dégats sur la victime
if ( isAttackWinner && rWinner.isSuccess && rWinner.mode == "arme" && rWinner.arme?.system.typeArme == "melee" && rWinner.defenderTokenId) {
this.appliquerDegats(rWinner)
}
console.log("Rolldata result", rollData)
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async appliquerDegats(rollData) {
await this.processAttaqueMelee(rollData)
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
if (defenderToken) {
let actor = defenderToken.actor
await actor.appliquerDegats(rollData)
} else {
ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué")
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async chatListeners(html) {
html.on("click", '.chat-command-button', event => {
$(html).on("click", '.chat-command-opposition', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata")
@ -230,6 +258,14 @@ export class TeDeumUtility {
TeDeumUtility.manageOpposition(rollData, messageId)
}
})
$(html).on("click", '.chat-command-appliquer-degats', event => {
let messageId = TeDeumUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "te-deum-rolldata")
if (rollData) {
TeDeumUtility.appliquerDegats(rollData, messageId)
}
})
}
/* -------------------------------------------- */
@ -241,7 +277,7 @@ export class TeDeumUtility {
'systems/fvtt-te-deum/templates/items/partial-item-description.hbs',
'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs'
]
return loadTemplates(templatePaths);
return foundry.applications.handlebars.loadTemplates(templatePaths);
}
/* -------------------------------------------- */
@ -318,7 +354,7 @@ export class TeDeumUtility {
let rollData = msg.data.rollData
if (game.user.isGM) {
let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", {
content: await renderTemplate(msg.data.template, rollData),
content: await foundry.applications.handlebars.renderTemplate(msg.data.template, rollData),
whisper: game.user.id
})
chatMsg.setFlag("world", "tedeum-rolldata", rollData)
@ -408,10 +444,11 @@ export class TeDeumUtility {
}
}
if (rollData.diceSum == 1) {
let critiqueRoll = await new Roll(rollData.carac.negativeDice).roll()
let critiqueRoll = await new Roll(rollData.carac.negativeDice)
await critiqueRoll.evaluate()
await this.showDiceSoNice(critiqueRoll, game.settings.get("core", "rollMode"))
rollData.critiqueRoll = foundry.utils.duplicate(critiqueRoll)
if (critiqueRoll.total > rollData.competence.score) {
if (critiqueRoll.total > rollData.competence.system.score) {
rollData.isEchecCritique = true
}
}
@ -441,7 +478,7 @@ export class TeDeumUtility {
}
let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier)
if (!diceBase) return;
diceFormula = diceBase + "x + " + rollData.competence.system.score
diceFormula = diceBase + "x + " + rollData.compScore
}
if (rollData.enableProvidence) {
diceFormula += " + " + rollData.providence.dice
@ -465,18 +502,13 @@ export class TeDeumUtility {
/* -------------------------------------------- */
static async processAttaqueMelee(rollData) {
if (rollData.arme?.system.typeArme != "melee") {
return
}
if (rollData.isSuccess) {
await this.getLocalisation(rollData)
let actor = game.actors.get(rollData.actorId)
let bDegats = actor.getBonusDegats()
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll()
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total
}
await this.getLocalisation(rollData)
let actor = game.actors.get(rollData.actorId)
let bDegats = actor.getBonusDegats()
let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll()
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total
}
/* -------------------------------------------- */
@ -489,7 +521,7 @@ export class TeDeumUtility {
await this.getLocalisation(rollData)
// Now the degats
let degatsRoll = await new Roll(rollData.arme.system.degats).roll()
await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode"))
await this.showDiceSoNice(rollData.locRoll, game.settings.get("core", "rollMode"))
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.degats = degatsRoll.total
}
@ -504,6 +536,14 @@ export class TeDeumUtility {
rollData.difficulty = "pardefaut"
}
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
// Compute the real competence score
if ( rollData.competence ) {
if ( rollData.competence.system.isBase) {
rollData.compScore = actor.system.caracteristiques[rollData.competence.system.caracteristique].value
} else {
rollData.compScore = rollData.competence.system.score
}
}
let diceFormula = this.computeRollFormula(rollData, actor)
if (!diceFormula) return;
console.log("RollData", rollData, diceFormula)
@ -519,10 +559,9 @@ export class TeDeumUtility {
await this.computeResults(rollData)
await this.processAttaqueDistance(rollData)
await this.processAttaqueMelee(rollData)
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-generic-result.hbs`, rollData)
})
await msg.setFlag("world", "te-deum-rolldata", rollData)
console.log("Rolldata result", rollData)
@ -531,19 +570,10 @@ export class TeDeumUtility {
if (rollData.enableProvidence) {
actor.modifyProvidence(-1)
}
// Manage XP
// Manage XP
if (rollData.isReussiteCritique || rollData.isEchecCritique) {
actor.modifyXP(rollData.carac.key, 1)
}
// gestion degats automatique
if (rollData.arme && rollData.defenderTokenId) {
let defenderToken = canvas.tokens.placeables.find(t => t.id == rollData.defenderTokenId)
if (defenderToken) {
let actor = defenderToken.actor
await actor.appliquerDegats(rollData)
}
}
}
/* -------------------------------------------- */

View File

@ -15,6 +15,8 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel {
}, {})
);
schema.genre = new fields.StringField({required: true, initial: "Homme", choices: ["masculin", "mixte", "Homme", "Femme", "Mixte"]});
schema.nbChoixCarac = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
schema.caracteristiques = new fields.SchemaField(Array.fromRange(3, 1).reduce((caracs, i) => {
caracs[`carac${i}`] = new fields.SchemaField({

View File

@ -13,4 +13,10 @@ export class TeDeumEquipementSchema extends foundry.abstract.TypeDataModel {
return schema;
}
get monnaieLabel() {
console.log("monnaieLabel", this.monnaie,game.system.tedeum.config.monnaieUnit)
return game.system.tedeum.config.monnaieUnit[String(this.monnaie)]?.label;
}
}

View File

@ -9,7 +9,8 @@ export class TeDeumMaladieSchema extends foundry.abstract.TypeDataModel {
schema.virulence = new fields.StringField({required: true, choices: ["fatigue", "epuisement", "souffrance", "agonie"], initial: "fatigue"});
schema.fievre = new fields.StringField({required: true, choices: ["aucune", "legere", "forte", "grave"], initial: "aucune"});
schema.symptomes = new fields.HTMLField({ required: true, blank: true });
schema.appliquee = new fields.BooleanField({initial: false}),
schema.complications = new fields.HTMLField({ required: true, blank: true });
schema.appliquee = new fields.BooleanField({initial: false});
schema.description = new fields.HTMLField({ required: true, blank: true });

View File

@ -26,33 +26,35 @@ export class TeDeumPJSchema extends foundry.abstract.TypeDataModel {
obj[loc.id] = new fields.SchemaField({
armure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 20 }),
touche: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 20 }),
blessures: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 20 })
blessures: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 20 })
});
return obj;
}, {})
);
schema.fortune = new fields.SchemaField({
"ecus": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
"ecus": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
"livres": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) ,
"sous": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) ,
"deniers": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
"deniers": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
});
schema.description = new fields.HTMLField({required: true, blank: true});
schema.notes = new fields.HTMLField({required: true, blank: true});
schema.connaissances = new fields.HTMLField({required: true, blank: true});
schema.histoire = new fields.HTMLField({required: true, blank: true});
schema.vetements = new fields.HTMLField({required: true, blank: true});
schema.equipmentfree = new fields.HTMLField({required: true, blank: true});
schema.genre = new fields.StringField({required: true, choices: game.system.tedeum.config.genre, initial: "Femme"});
schema.age = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.charges = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.religion = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: undefined });
schema.age = new fields.StringField({ required: false, blank: true, initial: "" });
schema.datenaissance = new fields.StringField({ required: false, blank: true, initial: "" });
schema.statutocial = new fields.StringField({ required: false, blank: true, initial: "" });
schema.chargestitre = new fields.StringField({ required: false, blank: true, initial: "" });
schema.charges = new fields.StringField({ required: false, blank: true, initial: "" });
schema.religion = new fields.StringField({ required: false, blank: true, initial: "" });
schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: "" });
return schema;
}
}

View File

@ -4,7 +4,7 @@ import { TeDeumUtility } from "../common/tedeum-utility.js";
* Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet}
*/
export class TeDeumItemSheet extends ItemSheet {
export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet {
/** @override */
static get defaultOptions() {
@ -49,11 +49,11 @@ export class TeDeumItemSheet extends ItemSheet {
limited: this.object.limited,
options: this.options,
owner: this.document.isOwner,
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }),
isGM: game.user.isGM
}
if (this.object.type == "education") {
TeDeumUtility.prepareEducationContent(formData);
}
@ -103,7 +103,7 @@ export class TeDeumItemSheet extends ItemSheet {
let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index"))
let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index"))
let featureId = $(ev.currentTarget).parents(".item").data("feature-id")
let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId]
if (itemData.name != 'None') {

View File

@ -51,7 +51,7 @@ Hooks.once("init", async function () {
// preload handlebars templates
TeDeumUtility.preloadHandlebarsTemplates();
// Set an initiative formula for the system
// Set an initiative formula for the system
CONFIG.Combat.initiative = {
formula: "1d6",
decimals: 1
@ -79,17 +79,17 @@ Hooks.once("init", async function () {
blessure: TeDeumBlessureSchema,
maladie: TeDeumMaladieSchema,
};
console.log("TeDeum RPG | Ready");
Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true });
foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true });
TeDeumUtility.init()
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
foundry.documents.collections.Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { makeDefault: true });
TeDeumUtility.init()
});
@ -106,7 +106,7 @@ Hooks.once("ready", function () {
user: game.user._id
});
}
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
console.log("ClassCounter loaded", moduleCounter)
moduleCounter.ClassCounter.registerUsageCount()
@ -134,4 +134,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
}
return true;
});

Binary file not shown.

BIN
packs/aides/000103.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000031
MANIFEST-000108

View File

@ -1,8 +1,7 @@
2025/02/25-21:31:20.523300 7fcd227fc6c0 Recovering log #29
2025/02/25-21:31:20.533410 7fcd227fc6c0 Delete type=3 #27
2025/02/25-21:31:20.533498 7fcd227fc6c0 Delete type=0 #29
2025/02/25-21:35:34.575677 7fcd20bff6c0 Level-0 table #34: started
2025/02/25-21:35:34.575713 7fcd20bff6c0 Level-0 table #34: 0 bytes OK
2025/02/25-21:35:34.581867 7fcd20bff6c0 Delete type=0 #32
2025/02/25-21:35:34.595379 7fcd20bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/02/25-21:35:34.595417 7fcd20bff6c0 Manual compaction at level-1 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/06/04-15:05:47.545416 7ff25bfff6c0 Recovering log #106
2025/06/04-15:05:47.556041 7ff25bfff6c0 Delete type=3 #104
2025/06/04-15:05:47.556120 7ff25bfff6c0 Delete type=0 #106
2025/06/04-15:26:45.555523 7ff25a3ff6c0 Level-0 table #111: started
2025/06/04-15:26:45.555566 7ff25a3ff6c0 Level-0 table #111: 0 bytes OK
2025/06/04-15:26:45.562169 7ff25a3ff6c0 Delete type=0 #109
2025/06/04-15:26:45.562425 7ff25a3ff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,7 @@
2025/02/25-20:49:36.885720 7fcd22ffd6c0 Recovering log #25
2025/02/25-20:49:36.980833 7fcd22ffd6c0 Delete type=3 #23
2025/02/25-20:49:36.980955 7fcd22ffd6c0 Delete type=0 #25
2025/02/25-21:29:18.220253 7fcd20bff6c0 Level-0 table #30: started
2025/02/25-21:29:18.220310 7fcd20bff6c0 Level-0 table #30: 0 bytes OK
2025/02/25-21:29:18.251218 7fcd20bff6c0 Delete type=0 #28
2025/02/25-21:29:18.384283 7fcd20bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/02/25-21:29:18.384413 7fcd20bff6c0 Manual compaction at level-1 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)
2025/05/18-22:00:33.531561 7f8905ffb6c0 Recovering log #101
2025/05/18-22:00:33.592770 7f8905ffb6c0 Delete type=3 #99
2025/05/18-22:00:33.592842 7f8905ffb6c0 Delete type=0 #101
2025/05/18-22:05:29.127669 7f8667fff6c0 Level-0 table #107: started
2025/05/18-22:05:29.127710 7f8667fff6c0 Level-0 table #107: 0 bytes OK
2025/05/18-22:05:29.134205 7f8667fff6c0 Delete type=0 #105
2025/05/18-22:05:29.134321 7f8667fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/aides/MANIFEST-000108 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/armes/000206.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000133
MANIFEST-000211

View File

@ -1,7 +1,7 @@
2025/02/25-21:31:20.430273 7fcd22ffd6c0 Recovering log #131
2025/02/25-21:31:20.440203 7fcd22ffd6c0 Delete type=3 #129
2025/02/25-21:31:20.440252 7fcd22ffd6c0 Delete type=0 #131
2025/02/25-21:35:34.532301 7fcd20bff6c0 Level-0 table #136: started
2025/02/25-21:35:34.532327 7fcd20bff6c0 Level-0 table #136: 0 bytes OK
2025/02/25-21:35:34.538182 7fcd20bff6c0 Delete type=0 #134
2025/02/25-21:35:34.551679 7fcd20bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
2025/06/04-15:05:47.429143 7ff25affd6c0 Recovering log #209
2025/06/04-15:05:47.441082 7ff25affd6c0 Delete type=3 #207
2025/06/04-15:05:47.441344 7ff25affd6c0 Delete type=0 #209
2025/06/04-15:26:45.478679 7ff25a3ff6c0 Level-0 table #214: started
2025/06/04-15:26:45.478793 7ff25a3ff6c0 Level-0 table #214: 0 bytes OK
2025/06/04-15:26:45.485108 7ff25a3ff6c0 Delete type=0 #212
2025/06/04-15:26:45.505317 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2025/02/25-20:49:36.106601 7fcd21ffb6c0 Recovering log #127
2025/02/25-20:49:36.195396 7fcd21ffb6c0 Delete type=3 #125
2025/02/25-20:49:36.195529 7fcd21ffb6c0 Delete type=0 #127
2025/02/25-21:29:17.947467 7fcd20bff6c0 Level-0 table #132: started
2025/02/25-21:29:17.947511 7fcd20bff6c0 Level-0 table #132: 0 bytes OK
2025/02/25-21:29:17.987072 7fcd20bff6c0 Delete type=0 #130
2025/02/25-21:29:17.987251 7fcd20bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)
2025/05/18-22:00:33.073973 7f8904ff96c0 Recovering log #204
2025/05/18-22:00:33.125273 7f8904ff96c0 Delete type=3 #202
2025/05/18-22:00:33.125334 7f8904ff96c0 Delete type=0 #204
2025/05/18-22:05:29.052408 7f8667fff6c0 Level-0 table #210: started
2025/05/18-22:05:29.052435 7f8667fff6c0 Level-0 table #210: 0 bytes OK
2025/05/18-22:05:29.058826 7f8667fff6c0 Delete type=0 #208
2025/05/18-22:05:29.071831 7f8667fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/armes/MANIFEST-000211 Normal file

Binary file not shown.

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/armures/000205.ldb Normal file

Binary file not shown.

0
packs/armures/000212.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000133
MANIFEST-000210

View File

@ -1,7 +1,7 @@
2025/02/25-21:31:20.442940 7fcd227fc6c0 Recovering log #131
2025/02/25-21:31:20.453064 7fcd227fc6c0 Delete type=3 #129
2025/02/25-21:31:20.453114 7fcd227fc6c0 Delete type=0 #131
2025/02/25-21:35:34.538283 7fcd20bff6c0 Level-0 table #136: started
2025/02/25-21:35:34.538304 7fcd20bff6c0 Level-0 table #136: 0 bytes OK
2025/02/25-21:35:34.544358 7fcd20bff6c0 Delete type=0 #134
2025/02/25-21:35:34.551687 7fcd20bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
2025/06/04-15:05:47.446612 7ff2609fa6c0 Recovering log #208
2025/06/04-15:05:47.457941 7ff2609fa6c0 Delete type=3 #206
2025/06/04-15:05:47.458200 7ff2609fa6c0 Delete type=0 #208
2025/06/04-15:26:45.491864 7ff25a3ff6c0 Level-0 table #213: started
2025/06/04-15:26:45.491924 7ff25a3ff6c0 Level-0 table #213: 0 bytes OK
2025/06/04-15:26:45.498683 7ff25a3ff6c0 Delete type=0 #211
2025/06/04-15:26:45.505345 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2025/02/25-20:49:36.212555 7fcd22ffd6c0 Recovering log #127
2025/02/25-20:49:36.305645 7fcd22ffd6c0 Delete type=3 #125
2025/02/25-20:49:36.305755 7fcd22ffd6c0 Delete type=0 #127
2025/02/25-21:29:17.834303 7fcd20bff6c0 Level-0 table #132: started
2025/02/25-21:29:17.834368 7fcd20bff6c0 Level-0 table #132: 0 bytes OK
2025/02/25-21:29:17.871779 7fcd20bff6c0 Delete type=0 #130
2025/02/25-21:29:17.987222 7fcd20bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)
2025/05/18-22:00:33.135764 7f89067fc6c0 Recovering log #203
2025/05/18-22:00:33.191351 7f89067fc6c0 Delete type=3 #201
2025/05/18-22:00:33.191454 7f89067fc6c0 Delete type=0 #203
2025/05/18-22:05:29.065248 7f8667fff6c0 Level-0 table #209: started
2025/05/18-22:05:29.065277 7f8667fff6c0 Level-0 table #209: 0 bytes OK
2025/05/18-22:05:29.071683 7f8667fff6c0 Delete type=0 #207
2025/05/18-22:05:29.071852 7f8667fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000130
MANIFEST-000207

View File

@ -1,7 +1,7 @@
2025/02/25-21:31:20.416892 7fcd21ffb6c0 Recovering log #128
2025/02/25-21:31:20.427488 7fcd21ffb6c0 Delete type=3 #126
2025/02/25-21:31:20.427535 7fcd21ffb6c0 Delete type=0 #128
2025/02/25-21:35:34.525613 7fcd20bff6c0 Level-0 table #133: started
2025/02/25-21:35:34.525647 7fcd20bff6c0 Level-0 table #133: 0 bytes OK
2025/02/25-21:35:34.532166 7fcd20bff6c0 Delete type=0 #131
2025/02/25-21:35:34.551667 7fcd20bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
2025/06/04-15:05:47.413144 7ff25bfff6c0 Recovering log #205
2025/06/04-15:05:47.423163 7ff25bfff6c0 Delete type=3 #203
2025/06/04-15:05:47.423245 7ff25bfff6c0 Delete type=0 #205
2025/06/04-15:26:45.485291 7ff25a3ff6c0 Level-0 table #210: started
2025/06/04-15:26:45.485326 7ff25a3ff6c0 Level-0 table #210: 0 bytes OK
2025/06/04-15:26:45.491655 7ff25a3ff6c0 Delete type=0 #208
2025/06/04-15:26:45.505333 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2025/02/25-20:49:35.983838 7fcd227fc6c0 Recovering log #124
2025/02/25-20:49:36.086131 7fcd227fc6c0 Delete type=3 #122
2025/02/25-20:49:36.086317 7fcd227fc6c0 Delete type=0 #124
2025/02/25-21:29:17.912757 7fcd20bff6c0 Level-0 table #129: started
2025/02/25-21:29:17.912821 7fcd20bff6c0 Level-0 table #129: 0 bytes OK
2025/02/25-21:29:17.947301 7fcd20bff6c0 Delete type=0 #127
2025/02/25-21:29:17.987243 7fcd20bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)
2025/05/18-22:00:32.966617 7f8905ffb6c0 Recovering log #200
2025/05/18-22:00:33.058932 7f8905ffb6c0 Delete type=3 #198
2025/05/18-22:00:33.058991 7f8905ffb6c0 Delete type=0 #200
2025/05/18-22:05:29.044847 7f8667fff6c0 Level-0 table #206: started
2025/05/18-22:05:29.044904 7f8667fff6c0 Level-0 table #206: 0 bytes OK
2025/05/18-22:05:29.052189 7f8667fff6c0 Delete type=0 #204
2025/05/18-22:05:29.071818 7f8667fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

View File

@ -1 +1 @@
MANIFEST-000139
MANIFEST-000219

View File

@ -1,14 +1,7 @@
2025/02/25-21:31:20.455668 7fcd217fa6c0 Recovering log #136
2025/02/25-21:31:20.467004 7fcd217fa6c0 Delete type=3 #134
2025/02/25-21:31:20.467103 7fcd217fa6c0 Delete type=0 #136
2025/02/25-21:35:34.551837 7fcd20bff6c0 Level-0 table #142: started
2025/02/25-21:35:34.555923 7fcd20bff6c0 Level-0 table #142: 45263 bytes OK
2025/02/25-21:35:34.561930 7fcd20bff6c0 Delete type=0 #140
2025/02/25-21:35:34.582002 7fcd20bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!yBfCr85GXSpzhRkF' @ 339 : 1
2025/02/25-21:35:34.582009 7fcd20bff6c0 Compacting 1@0 + 1@1 files
2025/02/25-21:35:34.588279 7fcd20bff6c0 Generated table #143@0: 71 keys, 246138 bytes
2025/02/25-21:35:34.588301 7fcd20bff6c0 Compacted 1@0 + 1@1 files => 246138 bytes
2025/02/25-21:35:34.594753 7fcd20bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/02/25-21:35:34.594924 7fcd20bff6c0 Delete type=2 #138
2025/02/25-21:35:34.595213 7fcd20bff6c0 Delete type=2 #142
2025/02/25-21:35:34.595401 7fcd20bff6c0 Manual compaction at level-0 from '!items!yBfCr85GXSpzhRkF' @ 339 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
2025/06/04-15:05:47.464179 7ff25b7fe6c0 Recovering log #217
2025/06/04-15:05:47.474973 7ff25b7fe6c0 Delete type=3 #215
2025/06/04-15:05:47.475215 7ff25b7fe6c0 Delete type=0 #217
2025/06/04-15:26:45.511713 7ff25a3ff6c0 Level-0 table #222: started
2025/06/04-15:26:45.511749 7ff25a3ff6c0 Level-0 table #222: 0 bytes OK
2025/06/04-15:26:45.518781 7ff25a3ff6c0 Delete type=0 #220
2025/06/04-15:26:45.531871 7ff25a3ff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

View File

@ -1,14 +1,7 @@
2025/02/25-20:49:36.314175 7fcd217fa6c0 Recovering log #132
2025/02/25-20:49:36.403485 7fcd217fa6c0 Delete type=3 #130
2025/02/25-20:49:36.403607 7fcd217fa6c0 Delete type=0 #132
2025/02/25-21:29:17.987386 7fcd20bff6c0 Level-0 table #137: started
2025/02/25-21:29:18.006349 7fcd20bff6c0 Level-0 table #137: 5726 bytes OK
2025/02/25-21:29:18.041844 7fcd20bff6c0 Delete type=0 #135
2025/02/25-21:29:18.159515 7fcd20bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at '!items!v4mzjKOYibOsJ9Wn' @ 334 : 1
2025/02/25-21:29:18.159529 7fcd20bff6c0 Compacting 1@0 + 1@1 files
2025/02/25-21:29:18.179100 7fcd20bff6c0 Generated table #138@0: 71 keys, 245910 bytes
2025/02/25-21:29:18.179146 7fcd20bff6c0 Compacted 1@0 + 1@1 files => 245910 bytes
2025/02/25-21:29:18.219660 7fcd20bff6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2025/02/25-21:29:18.219809 7fcd20bff6c0 Delete type=2 #55
2025/02/25-21:29:18.220047 7fcd20bff6c0 Delete type=2 #137
2025/02/25-21:29:18.220167 7fcd20bff6c0 Manual compaction at level-0 from '!items!v4mzjKOYibOsJ9Wn' @ 334 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)
2025/05/18-22:00:33.199430 7f89057fa6c0 Recovering log #212
2025/05/18-22:00:33.264639 7f89057fa6c0 Delete type=3 #210
2025/05/18-22:00:33.264698 7f89057fa6c0 Delete type=0 #212
2025/05/18-22:05:29.078828 7f8667fff6c0 Level-0 table #218: started
2025/05/18-22:05:29.078861 7f8667fff6c0 Level-0 table #218: 0 bytes OK
2025/05/18-22:05:29.085105 7f8667fff6c0 Delete type=0 #216
2025/05/18-22:05:29.098638 7f8667fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/graces/000205.ldb Normal file

Binary file not shown.

0
packs/graces/000212.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000132
MANIFEST-000210

View File

@ -1,7 +1,7 @@
2025/02/25-21:31:20.470397 7fcd21ffb6c0 Recovering log #130
2025/02/25-21:31:20.480598 7fcd21ffb6c0 Delete type=3 #128
2025/02/25-21:31:20.480650 7fcd21ffb6c0 Delete type=0 #130
2025/02/25-21:35:34.544557 7fcd20bff6c0 Level-0 table #135: started
2025/02/25-21:35:34.544604 7fcd20bff6c0 Level-0 table #135: 0 bytes OK
2025/02/25-21:35:34.551403 7fcd20bff6c0 Delete type=0 #133
2025/02/25-21:35:34.551694 7fcd20bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
2025/06/04-15:05:47.481354 7ff25affd6c0 Recovering log #208
2025/06/04-15:05:47.492415 7ff25affd6c0 Delete type=3 #206
2025/06/04-15:05:47.492508 7ff25affd6c0 Delete type=0 #208
2025/06/04-15:26:45.499004 7ff25a3ff6c0 Level-0 table #213: started
2025/06/04-15:26:45.499054 7ff25a3ff6c0 Level-0 table #213: 0 bytes OK
2025/06/04-15:26:45.505185 7ff25a3ff6c0 Delete type=0 #211
2025/06/04-15:26:45.505355 7ff25a3ff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2025/02/25-20:49:36.429598 7fcd227fc6c0 Recovering log #126
2025/02/25-20:49:36.532213 7fcd227fc6c0 Delete type=3 #124
2025/02/25-20:49:36.532372 7fcd227fc6c0 Delete type=0 #126
2025/02/25-21:29:17.871948 7fcd20bff6c0 Level-0 table #131: started
2025/02/25-21:29:17.871992 7fcd20bff6c0 Level-0 table #131: 0 bytes OK
2025/02/25-21:29:17.912532 7fcd20bff6c0 Delete type=0 #129
2025/02/25-21:29:17.987234 7fcd20bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)
2025/05/18-22:00:33.273056 7f8904ff96c0 Recovering log #203
2025/05/18-22:00:33.327855 7f8904ff96c0 Delete type=3 #201
2025/05/18-22:00:33.327981 7f8904ff96c0 Delete type=0 #203
2025/05/18-22:05:29.058954 7f8667fff6c0 Level-0 table #209: started
2025/05/18-22:05:29.058982 7f8667fff6c0 Level-0 table #209: 0 bytes OK
2025/05/18-22:05:29.065089 7f8667fff6c0 Delete type=0 #207
2025/05/18-22:05:29.071842 7f8667fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

View File

View File

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