Compare commits
	
		
			12 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e794611bf3 | |||
| 529a62045e | |||
| d462d22a0a | |||
| 710ee54531 | |||
| 7994aa7db4 | |||
| 5176b4ce87 | |||
| 3d6f195fc2 | |||
| 3693d68c24 | |||
| 16ccd2f3e1 | |||
| 631eb280ca | |||
| 88ca98945f | |||
| edfb2105d3 | 
							
								
								
									
										12
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								changelog.md
									
									
									
									
									
								
							| @@ -1,9 +1,13 @@ | |||||||
|  | # 13.0.0 | ||||||
|  |  | ||||||
|  | - Support de Foundry v13 | ||||||
|  |  | ||||||
| # 12.0.23 | # 12.0.23 | ||||||
|  |  | ||||||
| - Correction sur les jets réussie en tir | - Correction sur les jets réussie en tir | ||||||
| - Correction sur le dés négatif pour les échecs critiques | - Correction sur le dés négatif pour les échecs critiques | ||||||
| - Correction sur l'XP et édition de l'XP en mode MJ | - Correction sur l'XP et édition de l'XP en mode MJ | ||||||
|    |  | ||||||
| # 12.0.22 | # 12.0.22 | ||||||
|  |  | ||||||
| - Correction pour les armes d'hast | - Correction pour les armes d'hast | ||||||
| @@ -14,12 +18,12 @@ | |||||||
|  |  | ||||||
| # 12.0.21 | # 12.0.21 | ||||||
|  |  | ||||||
| - Creation de PNJ OK  | - Creation de PNJ OK | ||||||
|  |  | ||||||
| # 12.0.20 | # 12.0.20 | ||||||
|  |  | ||||||
| - Corrections sur la création de perso  | - Corrections sur la création de perso | ||||||
|    |  | ||||||
| # 12.0.19 | # 12.0.19 | ||||||
|  |  | ||||||
| - Initial release ! | - Initial release ! | ||||||
							
								
								
									
										
											BIN
										
									
								
								images/icons/xpplus1.webp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								images/icons/xpplus1.webp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 8.1 KiB | 
| @@ -6,7 +6,7 @@ | |||||||
| import { TeDeumUtility } from "../common/tedeum-utility.js"; | import { TeDeumUtility } from "../common/tedeum-utility.js"; | ||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| export class TeDeumActorPJSheet extends ActorSheet { | export class TeDeumActorPJSheet extends foundry.appv1.sheets.ActorSheet { | ||||||
|  |  | ||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
| @@ -15,7 +15,7 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|       classes: ["fvtt-te-deum", "sheet", "actor"], |       classes: ["fvtt-te-deum", "sheet", "actor"], | ||||||
|       template: "systems/fvtt-te-deum/templates/actors/actor-sheet.hbs", |       template: "systems/fvtt-te-deum/templates/actors/actor-sheet.hbs", | ||||||
|       width: 860, |       width: 860, | ||||||
|       height:680, |       height: 680, | ||||||
|       tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }], |       tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }], | ||||||
|       dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }], |       dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }], | ||||||
|       editScore: true |       editScore: true | ||||||
| @@ -42,6 +42,7 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|       providence: this.actor.prepareProvidence(), |       providence: this.actor.prepareProvidence(), | ||||||
|       arbreCompetences: this.actor.prepareArbreCompetences(), |       arbreCompetences: this.actor.prepareArbreCompetences(), | ||||||
|       equipements: this.actor.getEquipements(), |       equipements: this.actor.getEquipements(), | ||||||
|  |       simples: this.actor.getSimples(), | ||||||
|       armures: this.actor.getArmures(), |       armures: this.actor.getArmures(), | ||||||
|       graces: this.actor.getGraces(), |       graces: this.actor.getGraces(), | ||||||
|       blessures: this.actor.getBlessures(), |       blessures: this.actor.getBlessures(), | ||||||
| @@ -55,10 +56,10 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|       nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(), |       nbArmuresLourdes: this.actor.getNbArmuresLourdesActuel(), | ||||||
|       santeModifier: this.actor.getSanteModifier(), |       santeModifier: this.actor.getSanteModifier(), | ||||||
|       educations: this.actor.getEducations(), |       educations: this.actor.getEducations(), | ||||||
|       description: await TextEditor.enrichHTML(this.object.system.description, { async: true }), |       description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }), | ||||||
|       equipmentfree: await TextEditor.enrichHTML(this.object.system.equipmentfree, { async: true }), |       equipmentfree: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.equipmentfree, { async: true }), | ||||||
|       notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }), |       notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }), | ||||||
|       histoire: await TextEditor.enrichHTML(this.object.system.histoire, { async: true }), |       histoire: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.histoire, { async: true }), | ||||||
|       options: this.options, |       options: this.options, | ||||||
|       owner: this.document.isOwner, |       owner: this.document.isOwner, | ||||||
|       editScore: this.options.editScore, |       editScore: this.options.editScore, | ||||||
| @@ -66,7 +67,6 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|     } |     } | ||||||
|     this.formData = formData; |     this.formData = formData; | ||||||
|  |  | ||||||
|     console.log("PC : ", formData, this.object); |  | ||||||
|     return formData; |     return formData; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -78,16 +78,16 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|  |  | ||||||
|     // Everything below here is only needed if the sheet is editable |     // Everything below here is only needed if the sheet is editable | ||||||
|     if (!this.options.editable) return; |     if (!this.options.editable) return; | ||||||
|      |  | ||||||
|     html.bind("keydown", function(e) { // Ignore Enter in actores sheet |     html.bind("keydown", function (e) { // Ignore Enter in actores sheet | ||||||
|       if (e.keyCode === 13) return false; |       if (e.keyCode === 13) return false; | ||||||
|     });   |     }); | ||||||
|  |  | ||||||
|     // Update Inventory Item |     // Update Inventory Item | ||||||
|     html.find('.item-edit').click(ev => { |     html.find('.item-edit').click(ev => { | ||||||
|       const li = $(ev.currentTarget).parents(".item-id") |       const li = $(ev.currentTarget).parents(".item-id") | ||||||
|       let itemId = li.data("item-id") |       let itemId = li.data("item-id") | ||||||
|       const item = this.actor.items.get( itemId ); |       const item = this.actor.items.get(itemId); | ||||||
|       item.sheet.render(true); |       item.sheet.render(true); | ||||||
|     }); |     }); | ||||||
|     // Delete Inventory Item |     // Delete Inventory Item | ||||||
| @@ -99,19 +99,23 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|       let dataType = $(ev.currentTarget).data("type") |       let dataType = $(ev.currentTarget).data("type") | ||||||
|       this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true }) |       this.actor.createEmbeddedDocuments('Item', [{ name: "Nouveau " + dataType, type: dataType }], { renderSheet: true }) | ||||||
|     }) |     }) | ||||||
|  |     html.find('.blessure-add').click(ev => { | ||||||
|  |       let dataType = $(ev.currentTarget).data("type") | ||||||
|  |       this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { typeBlessure: "estafilade", localisation: "corps", value: 0, appliquee: true, description: "" } }], { renderSheet: true }) | ||||||
|  |     }) | ||||||
|     html.find('.competence-add').click(ev => { |     html.find('.competence-add').click(ev => { | ||||||
|       let dataType = $(ev.currentTarget).data("type") |       let dataType = $(ev.currentTarget).data("type") | ||||||
|       let caracKey = $(ev.currentTarget).data("carac-key") |       let caracKey = $(ev.currentTarget).data("carac-key") | ||||||
|       this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: {caracteristique: caracKey} }], { renderSheet: true }) |       this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvelle " + dataType, type: dataType, system: { caracteristique: caracKey } }], { renderSheet: true }) | ||||||
|     }) |     }) | ||||||
|          |  | ||||||
|     html.find('.subactor-edit').click(ev => { |     html.find('.subactor-edit').click(ev => { | ||||||
|       const li = $(ev.currentTarget).parents(".item"); |       const li = $(ev.currentTarget).parents(".item"); | ||||||
|       let actorId = li.data("actor-id"); |       let actorId = li.data("actor-id"); | ||||||
|       let actor = game.actors.get( actorId ); |       let actor = game.actors.get(actorId); | ||||||
|       actor.sheet.render(true); |       actor.sheet.render(true); | ||||||
|     }); |     }); | ||||||
|      |  | ||||||
|     html.find('.subactor-delete').click(ev => { |     html.find('.subactor-delete').click(ev => { | ||||||
|       const li = $(ev.currentTarget).parents(".item"); |       const li = $(ev.currentTarget).parents(".item"); | ||||||
|       let actorId = li.data("actor-id"); |       let actorId = li.data("actor-id"); | ||||||
| @@ -119,17 +123,17 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|     }); |     }); | ||||||
|     html.find('.quantity-minus').click(event => { |     html.find('.quantity-minus').click(event => { | ||||||
|       const li = $(event.currentTarget).parents(".item"); |       const li = $(event.currentTarget).parents(".item"); | ||||||
|       this.actor.incDecQuantity( li.data("item-id"), -1 ); |       this.actor.incDecQuantity(li.data("item-id"), -1); | ||||||
|     } ); |     }); | ||||||
|     html.find('.quantity-plus').click(event => { |     html.find('.quantity-plus').click(event => { | ||||||
|       const li = $(event.currentTarget).parents(".item"); |       const li = $(event.currentTarget).parents(".item"); | ||||||
|       this.actor.incDecQuantity( li.data("item-id"), +1 ); |       this.actor.incDecQuantity(li.data("item-id"), +1); | ||||||
|     } ); |     }); | ||||||
|  |  | ||||||
|     html.find('.roll-competence').click((event) => { |     html.find('.roll-competence').click((event) => { | ||||||
|       let compId = $(event.currentTarget).data("comp-id") |       let compId = $(event.currentTarget).data("comp-id") | ||||||
|       this.actor.rollCompetence(compId) |       this.actor.rollCompetence(compId) | ||||||
|     });     |     }); | ||||||
|     html.find('.roll-arme').click((event) => { |     html.find('.roll-arme').click((event) => { | ||||||
|       const armeId = $(event.currentTarget).data("arme-id") |       const armeId = $(event.currentTarget).data("arme-id") | ||||||
|       this.actor.rollArme(armeId) |       this.actor.rollArme(armeId) | ||||||
| @@ -138,24 +142,24 @@ export class TeDeumActorPJSheet extends ActorSheet { | |||||||
|       const armeId = $(event.currentTarget).data("arme-id") |       const armeId = $(event.currentTarget).data("arme-id") | ||||||
|       this.actor.rollDegatsArme(armeId) |       this.actor.rollDegatsArme(armeId) | ||||||
|     }); |     }); | ||||||
|      |  | ||||||
|      |  | ||||||
|     html.find('.lock-unlock-sheet').click((event) => { |     html.find('.lock-unlock-sheet').click((event) => { | ||||||
|       this.options.editScore = !this.options.editScore; |       this.options.editScore = !this.options.editScore; | ||||||
|       this.render(true); |       this.render(true); | ||||||
|     });     |     }); | ||||||
|     html.find('.item-equip').click(ev => { |     html.find('.item-equip').click(ev => { | ||||||
|       const li = $(ev.currentTarget).parents(".item"); |       const li = $(ev.currentTarget).parents(".item"); | ||||||
|       this.actor.equipItem( li.data("item-id") ); |       this.actor.equipItem(li.data("item-id")); | ||||||
|       this.render(true);       |       this.render(true); | ||||||
|     }); |     }); | ||||||
|     html.find('.update-field').change(ev => { |     html.find('.update-field').change(ev => { | ||||||
|       const fieldName = $(ev.currentTarget).data("field-name"); |       const fieldName = $(ev.currentTarget).data("field-name"); | ||||||
|       let value = Number(ev.currentTarget.value); |       let value = Number(ev.currentTarget.value); | ||||||
|       this.actor.update( { [`${fieldName}`]: value } ); |       this.actor.update({ [`${fieldName}`]: value }); | ||||||
|     });     |     }); | ||||||
|   } |   } | ||||||
|    |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   /** @override */ |   /** @override */ | ||||||
|   setPosition(options = {}) { |   setPosition(options = {}) { | ||||||
|   | |||||||
| @@ -14,8 +14,8 @@ export class TeDeumActor extends Actor { | |||||||
|   /** |   /** | ||||||
|    * Override the create() function to provide additional SoS functionality. |    * Override the create() function to provide additional SoS functionality. | ||||||
|    * |    * | ||||||
|    * This overrided create() function adds initial items  |    * This overrided create() function adds initial items | ||||||
|    * Namely: Basic skills, money,  |    * Namely: Basic skills, money, | ||||||
|    * |    * | ||||||
|    * @param {Object} data        Barebones actor data which this function adds onto. |    * @param {Object} data        Barebones actor data which this function adds onto. | ||||||
|    * @param {Object} options     (Unused) Additional options which customize the creation workflow. |    * @param {Object} options     (Unused) Additional options which customize the creation workflow. | ||||||
| @@ -34,7 +34,7 @@ export class TeDeumActor extends Actor { | |||||||
|       return actor; |       return actor; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (data.type == 'pj' ||  data.type == 'pnj') { |     if (data.type == 'pj' || data.type == 'pnj') { | ||||||
|       const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences") |       const skills = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences") | ||||||
|       data.items = data.items || [] |       data.items = data.items || [] | ||||||
|       for (let skill of skills) { |       for (let skill of skills) { | ||||||
| @@ -64,15 +64,44 @@ export class TeDeumActor extends Actor { | |||||||
|  |  | ||||||
|     super._preUpdate(changed, options, user); |     super._preUpdate(changed, options, user); | ||||||
|   } |   } | ||||||
|    |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   getCompetenceScore(compName) { |   getCompetenceScore(compName) { | ||||||
|     let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase()) |     let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase()) | ||||||
|     if (competence) { |     if (competence) { | ||||||
|  |       if (competence.system.isBase) { | ||||||
|  |         return this.system.caracteristiques[competence.system.caracteristique].value | ||||||
|  |       } | ||||||
|       return competence.system.score |       return competence.system.score | ||||||
|     } |     } | ||||||
|     return 0 |     return 0 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   getMeilleureCompetenceMainGauche(comp) { | ||||||
|  |     let compScore = this.getCompetenceScore(comp.name) | ||||||
|  |     let mainGaucheScore = this.getCompetenceScore("main gauche") | ||||||
|  |     if (mainGaucheScore < compScore) { | ||||||
|  |       ui.notifications.info(`${actor.name} : Utilisation de la compétence Main Gauche au lieu de ${comp.name}`) | ||||||
|  |       let mainGaucheComp = this.itms.find(item => item.type == "competence" && item.name.toLowerCase() == "main gauche") | ||||||
|  |       if (!mainGaucheComp) { | ||||||
|  |         // Create a fake competence object | ||||||
|  |         mainGaucheComp = foundry.utils.duplicate(comp) | ||||||
|  |         mainGaucheComp.name = "Main Gauche" | ||||||
|  |         mainGaucheComp.system.isBase = false | ||||||
|  |         mainGaucheComp.system.score = 0 | ||||||
|  |         mainGaucheComp.system.caracteristique = "adresse" | ||||||
|  |         mainGaucheComp.system.description = "Compétence Main Gauche (automatique)" | ||||||
|  |         mainGaucheComp.system.isMainGauche = true | ||||||
|  |         return mainGaucheComp | ||||||
|  |       } else { | ||||||
|  |         return mainGaucheComp | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       return comp | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   _onUpdate(changed, options, userId) { |   _onUpdate(changed, options, userId) { | ||||||
|     let updates = [] |     let updates = [] | ||||||
| @@ -112,12 +141,6 @@ export class TeDeumActor extends Actor { | |||||||
|       updates.push({ _id: initiative.id, "system.score": Number(newScore) }) |       updates.push({ _id: initiative.id, "system.score": Number(newScore) }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     let actionsTour = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "actions/tour") |  | ||||||
|     newScore = this.getCommonBaseValue(this.system.caracteristiques.adresse.value) |  | ||||||
|     if (actionsTour && actionsTour?.system.score != newScore) { |  | ||||||
|       updates.push({ _id: actionsTour.id, "system.score": Number(newScore) }) |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort") |     let effort = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "effort") | ||||||
|     newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value) |     newScore = this.getCommonBaseValue(this.system.caracteristiques.puissance.value) | ||||||
|     if (effort && effort?.system.score != newScore) { |     if (effort && effort?.system.score != newScore) { | ||||||
| @@ -127,10 +150,10 @@ export class TeDeumActor extends Actor { | |||||||
|     if (updates.length > 0) { |     if (updates.length > 0) { | ||||||
|       this.updateEmbeddedDocuments('Item', updates) |       this.updateEmbeddedDocuments('Item', updates) | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     super._onUpdate(changed, options, userId); |     super._onUpdate(changed, options, userId); | ||||||
|   } |   } | ||||||
|    |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async _preCreate(data, options, user) { |   async _preCreate(data, options, user) { | ||||||
|     await super._preCreate(data, options, user); |     await super._preCreate(data, options, user); | ||||||
| @@ -147,7 +170,7 @@ export class TeDeumActor extends Actor { | |||||||
|   getCommonBaseValue(value) { |   getCommonBaseValue(value) { | ||||||
|     return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0 |     return game.system.tedeum.config.COMMON_VALUE[value]?.value || 0 | ||||||
|   } |   } | ||||||
|   getInitiative() { |   getInitiativeValue() { | ||||||
|     return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0 |     return game.system.tedeum.config.COMMON_VALUE[this.system.caracteristiques.adresse.value]?.value || 0 | ||||||
|   } |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -155,6 +178,24 @@ export class TeDeumActor extends Actor { | |||||||
|     return game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value] |     return game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value] | ||||||
|   } |   } | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|  |   getAttaqueBonusDegats(rollData = undefined) { | ||||||
|  |     let base = game.system.tedeum.config.BONUS_DEGATS[this.system.caracteristiques.puissance.value].value | ||||||
|  |     let additionalBonus = 0 | ||||||
|  |     if (rollData) { | ||||||
|  |       // Spécificité armes naturelle avec gantelet | ||||||
|  |       if (rollData?.arme?.system.specificites?.poing?.hasSpec && this.items.find(item => item.type == "armure" && item.name.toLowerCase() == "gantelet" && item.system.equipe)) { | ||||||
|  |         additionalBonus += 1 | ||||||
|  |         rollData.gantelet = true | ||||||
|  |       } | ||||||
|  |       if (rollData.isChargeAPied) { | ||||||
|  |         additionalBonus += this.getCompetenceScore("course") | ||||||
|  |       } else if (rollData.isChargeACheval) { | ||||||
|  |         additionalBonus += this.getCompetenceScore("equitation") | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     return base + additionalBonus | ||||||
|  |   } | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|   getNbArmures() { |   getNbArmures() { | ||||||
|     return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value] |     return game.system.tedeum.config.MAX_ARMURES_LOURDES[this.system.caracteristiques.puissance.value] | ||||||
|   } |   } | ||||||
| @@ -200,6 +241,11 @@ export class TeDeumActor extends Actor { | |||||||
|     TeDeumUtility.sortArrayObjectsByName(comp) |     TeDeumUtility.sortArrayObjectsByName(comp) | ||||||
|     return comp; |     return comp; | ||||||
|   } |   } | ||||||
|  |   getSimples() { | ||||||
|  |     let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'simple') || []) | ||||||
|  |     TeDeumUtility.sortArrayObjectsByName(comp) | ||||||
|  |     return comp; | ||||||
|  |   } | ||||||
|   getArmures() { |   getArmures() { | ||||||
|     let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || []) |     let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armure') || []) | ||||||
|     TeDeumUtility.sortArrayObjectsByName(comp) |     TeDeumUtility.sortArrayObjectsByName(comp) | ||||||
| @@ -261,41 +307,105 @@ export class TeDeumActor extends Actor { | |||||||
|       modTotal += blessDef.modifier |       modTotal += blessDef.modifier | ||||||
|     } |     } | ||||||
|     // Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire |     // Si le nombre de blessures est supérieur au score d'endurance, alors malus supplémentaire | ||||||
|     let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance") |     let enduranceScore = this.getCompetenceScore("endurance") | ||||||
|     if (blessures.length > endurance.system.score) { |     if (blessures.length > enduranceScore) { | ||||||
|       modTotal += -1 |       modTotal += -1 | ||||||
|     } |     } | ||||||
|     return modTotal |     return modTotal | ||||||
|   } |   } | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   async appliquerBlessure(blessureId, locId, comment = "") { | ||||||
|  |     let blessure = game.system.tedeum.config.blessures[blessureId] | ||||||
|  |     if (!blessure) { | ||||||
|  |       ui.notifications.warn("Type de blessure inconnu : " + blessureId) | ||||||
|  |       console.error("Type de blessure inconnu : " + blessureId) | ||||||
|  |       return | ||||||
|  |     } | ||||||
|  |     // Create a new blessure object | ||||||
|  |     let blessureObj = { | ||||||
|  |       name: blessure.label, | ||||||
|  |       type: "blessure", | ||||||
|  |       system: { | ||||||
|  |         typeBlessure: blessureId, | ||||||
|  |         localisation: locId || "maindroite", | ||||||
|  |         value: blessure.value, | ||||||
|  |         appliquee: true, | ||||||
|  |         description: comment, | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     this.createEmbeddedDocuments('Item', [blessureObj]); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   getArmorDegatsModifier(rollData, combat) { | ||||||
|  |     let loc = combat[rollData.loc.id] | ||||||
|  |     // Sans armure | ||||||
|  |     if (loc.armures.length == 0) { | ||||||
|  |       return rollData.arme.system.degatsArmure.sansarmure | ||||||
|  |     } | ||||||
|  |     // Avec armure de cuir | ||||||
|  |     if (loc.armures.find(a => a.system.typeArmure == "cuir")) { | ||||||
|  |       return rollData.arme.system.degatsArmure.cuir | ||||||
|  |     } | ||||||
|  |     // Avec armure de maille | ||||||
|  |     if (loc.armures.find(a => a.system.typeArmure == "maille")) { | ||||||
|  |       return rollData.arme.system.degatsArmure.mailles | ||||||
|  |     } | ||||||
|  |     // Avec armure de plate | ||||||
|  |     if (loc.armures.find(a => a.system.typeArmure == "plate")) { | ||||||
|  |       return rollData.arme.system.degatsArmure.plates | ||||||
|  |     } | ||||||
|  |     return 0 | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async appliquerDegats(rollData) { |   async appliquerDegats(rollData) { | ||||||
|     let combat = this.prepareCombat() |     let combat = this.prepareCombat() | ||||||
|     rollData.defenderName = this.name |     rollData.defenderName = this.name | ||||||
|     let touche = combat[rollData.loc.id].touche |     let touche = combat[rollData.loc.id].touche | ||||||
|  |     let armorDegatModifier = this.getArmorDegatsModifier(rollData, combat) | ||||||
|  |     rollData.degats += armorDegatModifier | ||||||
|  |     rollData.armorDegatModifier = armorDegatModifier | ||||||
|  |  | ||||||
|  |     let blessureId = "indemne" | ||||||
|     if (rollData.degats > 0 && rollData.degats > touche) { |     if (rollData.degats > 0 && rollData.degats > touche) { | ||||||
|       let diff = rollData.degats - touche |       let diff = rollData.degats - touche | ||||||
|       for (let bId in game.system.tedeum.config.blessures) { |       for (let bId in game.system.tedeum.config.blessures) { | ||||||
|         let blessure = game.system.tedeum.config.blessures[bId] |         let blessure = game.system.tedeum.config.blessures[bId] | ||||||
|         if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) { |         if (diff >= blessure.degatsMin && diff <= blessure.degatsMax) { | ||||||
|           // Create a new blessure object  |           if (rollData.isReussiteCritique) { | ||||||
|           let blessureObj = { |             bId = game.system.tedeum.config.blessuresOrder[blessure.value + 1] | ||||||
|             name: blessure.label, |  | ||||||
|             type: "blessure", |  | ||||||
|             system: { |  | ||||||
|               typeBlessure: bId, |  | ||||||
|               localisation: rollData.loc.id, |  | ||||||
|               appliquee: true, |  | ||||||
|               description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias, |  | ||||||
|             } |  | ||||||
|           } |           } | ||||||
|           rollData.blessure = blessureObj |           blessureId = bId | ||||||
|           this.createEmbeddedDocuments('Item', [blessureObj]); |           break | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     if (rollData.isReussiteCritique && blessureId == "indemne") { // Critical success without degats => lightest blessure | ||||||
|  |       blessureId = "estafilade" | ||||||
|  |     } | ||||||
|  |     console.log("Appliquer dégats", rollData, combat, blessureId) | ||||||
|  |     if (blessureId != "indemne") { | ||||||
|  |       let blessure = game.system.tedeum.config.blessures[blessureId] | ||||||
|  |       // Create a new blessure object | ||||||
|  |       let blessureObj = { | ||||||
|  |         name: blessure.label, | ||||||
|  |         type: "blessure", | ||||||
|  |         system: { | ||||||
|  |           typeBlessure: blessureId, | ||||||
|  |           localisation: rollData.loc.id, | ||||||
|  |           value: blessure.value, | ||||||
|  |           appliquee: true, | ||||||
|  |           description: "Blessure infligée par un coup de " + rollData.arme.name + " de " + rollData.alias, | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       rollData.blessure = blessureObj | ||||||
|  |       rollData.touche = touche | ||||||
|  |       this.createEmbeddedDocuments('Item', [blessureObj]); | ||||||
|  |     } | ||||||
|     // Display the relevant chat message |     // Display the relevant chat message | ||||||
|     let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, { |     let msg = await TeDeumUtility.createChatWithRollMode(rollData.alias, { | ||||||
|       content: await renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-blessure-result.hbs`, rollData) |       content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-te-deum/templates/chat/chat-blessure-result.hbs`, rollData) | ||||||
|     }) |     }) | ||||||
|     await msg.setFlag("world", "te-deum-rolldata", rollData) |     await msg.setFlag("world", "te-deum-rolldata", rollData) | ||||||
|   } |   } | ||||||
| @@ -305,7 +415,11 @@ export class TeDeumActor extends Actor { | |||||||
|     c.key = key |     c.key = key | ||||||
|     c.name = game.system.tedeum.config.caracteristiques[key].label |     c.name = game.system.tedeum.config.caracteristiques[key].label | ||||||
|     c.generalqualite = game.system.tedeum.config.descriptionValeur[c.value].qualite |     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.dice = game.system.tedeum.config.descriptionValeur[c.value].dice | ||||||
|     c.negativeDice = game.system.tedeum.config.descriptionValeur[c.value].negativeDice |     c.negativeDice = game.system.tedeum.config.descriptionValeur[c.value].negativeDice | ||||||
|   } |   } | ||||||
| @@ -324,7 +438,11 @@ export class TeDeumActor extends Actor { | |||||||
|   prepareProvidence() { |   prepareProvidence() { | ||||||
|     let providence = foundry.utils.deepClone(this.system.providence) |     let providence = foundry.utils.deepClone(this.system.providence) | ||||||
|     providence.name = "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].labelM | ||||||
|  |     } else { | ||||||
|  |       providence.qualite = game.system.tedeum.config.providence[providence.value].labelF | ||||||
|  |     } | ||||||
|     providence.dice = game.system.tedeum.config.providence[providence.value].diceValue |     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)." |     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 |     return providence | ||||||
| @@ -369,6 +487,7 @@ export class TeDeumActor extends Actor { | |||||||
|     xp = Math.max(xp + value, 0) |     xp = Math.max(xp + value, 0) | ||||||
|     await this.update({ [`system.caracteristiques.${key}.experience`]: xp }) |     await this.update({ [`system.caracteristiques.${key}.experience`]: xp }) | ||||||
|     this.sheet?.render(true) |     this.sheet?.render(true) | ||||||
|  |     ui.notifications.info(`+${value} XP en ${game.system.tedeum.config.caracteristiques[key].label}`) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -441,7 +560,7 @@ export class TeDeumActor extends Actor { | |||||||
|               flag = armure.system.superposableCuir |               flag = armure.system.superposableCuir | ||||||
|             } |             } | ||||||
|             if (item.system.typeArmure == "maille") { |             if (item.system.typeArmure == "maille") { | ||||||
|               flag =  armure.system.superposableMaille |               flag = armure.system.superposableMaille | ||||||
|             } |             } | ||||||
|             if (item.system.typeArmure == "plate") { |             if (item.system.typeArmure == "plate") { | ||||||
|               flag = armure.system.superposablePlate |               flag = armure.system.superposablePlate | ||||||
| @@ -516,12 +635,16 @@ export class TeDeumActor extends Actor { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   getInitiativeScore() { |   getInitiativeScore() { | ||||||
|     let initiative = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == "initiative") |     let initiative = this.getInitiativeValue() | ||||||
|     if (initiative) { |     // Vérifie les armes avec bonus d'initiative | ||||||
|       return initiative.system.score |     let armes = this.getArmes() | ||||||
|  |     for (let arme of armes) { | ||||||
|  |       if (arme.system.equipe && Number(arme.system.initiativeBonus) && Number(arme.system.initiativeBonus) != 0) { | ||||||
|  |         ui.notifications.info("L'arme " + arme.name + " vous confère un bonus d'initiative de " + arme.system.initiativeBonus) | ||||||
|  |         initiative += arme.system.initiativeBonus | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|     ui.notifications.warn("Impossible de trouver la compétence Initiative pour l'acteur " + this.name) |     return initiative | ||||||
|     return -1; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -582,6 +705,7 @@ export class TeDeumActor extends Actor { | |||||||
|     let rollData = this.getCommonCompetence(compId) |     let rollData = this.getCommonCompetence(compId) | ||||||
|     rollData.mode = "competence" |     rollData.mode = "competence" | ||||||
|     rollData.title = rollData.competence.name |     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") |     this.startRoll(rollData).catch("Error on startRoll") | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -590,12 +714,12 @@ export class TeDeumActor extends Actor { | |||||||
|     let weapon = this.items.get(armeId) |     let weapon = this.items.get(armeId) | ||||||
|     if (weapon) { |     if (weapon) { | ||||||
|       let bDegats = 0 |       let bDegats = 0 | ||||||
|       if ( weapon.system.typeArme == "melee" ) { |       if (weapon.system.typeArme == "melee") { | ||||||
|         bDegats = this.getBonusDegats() |         bDegats = this.getBonusDegats() | ||||||
|       } |       } | ||||||
|       let formula = weapon.system.degats + "+" + bDegats.value |       let formula = weapon.system.degats + "+" + bDegats.value | ||||||
|       let degatsRoll = await new Roll(formula).roll() |       let degatsRoll = await new Roll(formula).roll() | ||||||
|       await TeDeumUtility.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode") ) |       await TeDeumUtility.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode")) | ||||||
|       let rollData = this.getCommonRollData() |       let rollData = this.getCommonRollData() | ||||||
|       rollData.mode = "degats" |       rollData.mode = "degats" | ||||||
|       rollData.formula = formula |       rollData.formula = formula | ||||||
| @@ -640,9 +764,14 @@ export class TeDeumActor extends Actor { | |||||||
|       let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase()) |       let competence = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == compName.toLowerCase()) | ||||||
|       if (competence) { |       if (competence) { | ||||||
|         rollData.competence = competence |         rollData.competence = competence | ||||||
|  |         rollData.compScore = rollData.competence.system.isBase ? this.system.caracteristiques[rollData.competence.system.caracteristique].value : rollData.competence.system.score | ||||||
|         let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique]) |         let c = foundry.utils.duplicate(this.system.caracteristiques[competence.system.caracteristique]) | ||||||
|         this.updateCarac(c, competence.system.caracteristique) |         this.updateCarac(c, competence.system.caracteristique) | ||||||
|         rollData.carac = c |         rollData.carac = c | ||||||
|  |         rollData.allongeLabel = game.system.tedeum.config.armeAllonges[weapon.system.allonge].label | ||||||
|  |         rollData.allongeId = "courte" | ||||||
|  |         rollData.allonges = foundry.utils.duplicate(game.system.tedeum.config.allonges[weapon.system.allonge]) | ||||||
|  |  | ||||||
|       } else { |       } else { | ||||||
|         ui.notifications.warn("Impossible de trouver la compétence " + compName) |         ui.notifications.warn("Impossible de trouver la compétence " + compName) | ||||||
|         return |         return | ||||||
|   | |||||||
| @@ -6,13 +6,14 @@ export class TeDeumCharacterCreator { | |||||||
|   async init() { |   async init() { | ||||||
|     this.stages = {} |     this.stages = {} | ||||||
|     this.currentStage = "origineSociale" |     this.currentStage = "origineSociale" | ||||||
|     this.sex = undefined |     this.sexe = undefined | ||||||
|     this.origineSociale = undefined |     this.origineSociale = undefined | ||||||
|     this.religion = undefined |     this.religion = undefined | ||||||
|     this.caracBonus = {} |     this.caracBonus = {} | ||||||
|     this.competenceBonus = {} |     this.competenceBonus = {} | ||||||
|     this.suiviReponses = [] |     this.suiviReponses = [] | ||||||
|     this.competences = TeDeumUtility.getCompetencesForDropDown() |     this.competences = TeDeumUtility.getCompetencesForDropDown() | ||||||
|  |     this.choiceSummary = {} | ||||||
|  |  | ||||||
|     for (let k in game.system.tedeum.config.caracteristiques) { |     for (let k in game.system.tedeum.config.caracteristiques) { | ||||||
|       this.caracBonus[k] = { value: 0 } |       this.caracBonus[k] = { value: 0 } | ||||||
| @@ -39,6 +40,7 @@ export class TeDeumCharacterCreator { | |||||||
|     } else { |     } else { | ||||||
|       this.competenceBonus[compName].value += 1 |       this.competenceBonus[compName].value += 1 | ||||||
|     } |     } | ||||||
|  |     this.choiceSummary[this.currentStage].competences[compName] = 1 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /*--------------------------------------------*/ |   /*--------------------------------------------*/ | ||||||
| @@ -69,7 +71,7 @@ export class TeDeumCharacterCreator { | |||||||
|  |  | ||||||
|   /*--------------------------------------------*/ |   /*--------------------------------------------*/ | ||||||
|   async askStageName(context) { |   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({ |     const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|       window: { title: context.title }, |       window: { title: context.title }, | ||||||
|       classes: ["fvtt-te-deum"], |       classes: ["fvtt-te-deum"], | ||||||
| @@ -116,6 +118,7 @@ export class TeDeumCharacterCreator { | |||||||
|   /*--------------------------------------------*/ |   /*--------------------------------------------*/ | ||||||
|   async askQuestionnaire(stage, context) { |   async askQuestionnaire(stage, context) { | ||||||
|     context.subtitle = "Questionnaire" |     context.subtitle = "Questionnaire" | ||||||
|  |     this.choiceSummary[this.currentStage].questionnaire = {} | ||||||
|  |  | ||||||
|     for (let key in stage.system.questionnaire) { |     for (let key in stage.system.questionnaire) { | ||||||
|       let question = stage.system.questionnaire[key] |       let question = stage.system.questionnaire[key] | ||||||
| @@ -127,7 +130,7 @@ export class TeDeumCharacterCreator { | |||||||
|       context.competences = {} |       context.competences = {} | ||||||
|       context.responseKey = "reponse1" // By default |       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({ |       const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|         window: { title: context.title }, |         window: { title: context.title }, | ||||||
|         classes: ["fvtt-te-deum"], |         classes: ["fvtt-te-deum"], | ||||||
| @@ -156,7 +159,7 @@ export class TeDeumCharacterCreator { | |||||||
|             // Get the responseKey data |             // Get the responseKey data | ||||||
|             let responseKey = $(event.target).data("response-key") |             let responseKey = $(event.target).data("response-key") | ||||||
|             let compName = event.target.value |             let compName = event.target.value | ||||||
|             console.log("Questionnaire Change", responseKey, compName)   |             console.log("Questionnaire Change", responseKey, compName) | ||||||
|             context.competences[responseKey] = compName.toLowerCase() |             context.competences[responseKey] = compName.toLowerCase() | ||||||
|           }) |           }) | ||||||
|         } |         } | ||||||
| @@ -170,13 +173,14 @@ export class TeDeumCharacterCreator { | |||||||
|       let compName = context.competences[context.responseKey] || selectedResponse.compName |       let compName = context.competences[context.responseKey] || selectedResponse.compName | ||||||
|       this.increaseCompetence(compName) |       this.increaseCompetence(compName) | ||||||
|  |  | ||||||
|       this.suiviReponses.push({ etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName }) |       this.suiviReponses.push({ key: this.currentStage, etape: stage.name, question: question.question, reponse: selectedResponse.reponse, compName: compName }) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /*------------- -------------------------------*/ |   /*------------- -------------------------------*/ | ||||||
|   async askCompetences(stage, context) { |   async askCompetences(stage, context) { | ||||||
|     context.subtitle = "Choix des Compétences" |     context.subtitle = "Choix des Compétences" | ||||||
|  |     this.choiceSummary[this.currentStage].competences = {} | ||||||
|  |  | ||||||
|     context.fixedCompetences = {} |     context.fixedCompetences = {} | ||||||
|     context.selectCompetences = {} |     context.selectCompetences = {} | ||||||
| @@ -192,7 +196,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({ |     const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|       window: { title: context.title }, |       window: { title: context.title }, | ||||||
|       classes: ["fvtt-te-deum"], |       classes: ["fvtt-te-deum"], | ||||||
| @@ -236,7 +240,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({ |         const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|           window: { title: context.title }, |           window: { title: context.title }, | ||||||
|           classes: ["fvtt-te-deum"], |           classes: ["fvtt-te-deum"], | ||||||
| @@ -273,6 +277,10 @@ export class TeDeumCharacterCreator { | |||||||
|   /*------------- -------------------------------*/ |   /*------------- -------------------------------*/ | ||||||
|   async askCarac(stage, context) { |   async askCarac(stage, context) { | ||||||
|     context.subtitle = "Choix des Caractéristiques" |     context.subtitle = "Choix des Caractéristiques" | ||||||
|  |     this.choiceSummary[this.currentStage] = { | ||||||
|  |       caracBonus : {}, | ||||||
|  |       competences : {} | ||||||
|  |     } | ||||||
|  |  | ||||||
|     let selected = [] |     let selected = [] | ||||||
|     for (let i = 0; i < stage.system.nbChoixCarac; i++) { |     for (let i = 0; i < stage.system.nbChoixCarac; i++) { | ||||||
| @@ -283,7 +291,7 @@ export class TeDeumCharacterCreator { | |||||||
|         context.caracList.push(game.system.tedeum.config.caracteristiques[carac.caracId]) |         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({ |       const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|         window: { title: context.title }, |         window: { title: context.title }, | ||||||
|         classes: ["fvtt-te-deum"], |         classes: ["fvtt-te-deum"], | ||||||
| @@ -312,6 +320,7 @@ export class TeDeumCharacterCreator { | |||||||
|       } |       } | ||||||
|       this.caracBonus[choiceResult.carac].value += 1 |       this.caracBonus[choiceResult.carac].value += 1 | ||||||
|       selected.push(choiceResult.carac) |       selected.push(choiceResult.carac) | ||||||
|  |       this.choiceSummary[this.currentStage].caracBonus[choiceResult.carac] = 1 | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -325,7 +334,7 @@ export class TeDeumCharacterCreator { | |||||||
|       origineChoice: game.system.tedeum.config.origineSociale |       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 label = "Valider le choix de l'Origine Sociale" | ||||||
|     const choiceResult = await foundry.applications.api.DialogV2.wait({ |     const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|       window: { title: context.title }, |       window: { title: context.title }, | ||||||
| @@ -360,6 +369,12 @@ export class TeDeumCharacterCreator { | |||||||
|     for (let key in this.origineSociale.caracteristiques) { |     for (let key in this.origineSociale.caracteristiques) { | ||||||
|       this.caracBonus[key].value += this.origineSociale.caracteristiques[key] |       this.caracBonus[key].value += this.origineSociale.caracteristiques[key] | ||||||
|     } |     } | ||||||
|  |     this.choiceSummary['origineSociale'] = { | ||||||
|  |       sexe: this.sexe, | ||||||
|  |       religion: this.religion, | ||||||
|  |       origineSociale: this.origineSociale.label, | ||||||
|  |       caracBonus: this.caracBonus, | ||||||
|  |     } | ||||||
|     this.currentStage = "pouponniere" |     this.currentStage = "pouponniere" | ||||||
|  |  | ||||||
|   } |   } | ||||||
| @@ -388,6 +403,7 @@ export class TeDeumCharacterCreator { | |||||||
|     this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem)) |     this.pouponniere = foundry.utils.duplicate(stage.items.find(item => item.id === choiceResult.selectedItem)) | ||||||
|     context.title = `La Pouponnière - ${this.pouponniere.name}` |     context.title = `La Pouponnière - ${this.pouponniere.name}` | ||||||
|     TeDeumUtility.prepareEducationContent(this.pouponniere); |     TeDeumUtility.prepareEducationContent(this.pouponniere); | ||||||
|  |     this.choiceSummary['pouponniere'] = {} | ||||||
|  |  | ||||||
|     context.label = "Valider l'augmentation de caracteristique" |     context.label = "Valider l'augmentation de caracteristique" | ||||||
|     await this.askCarac(this.pouponniere, context) |     await this.askCarac(this.pouponniere, context) | ||||||
| @@ -404,7 +420,7 @@ export class TeDeumCharacterCreator { | |||||||
|   /*--------------------------------------------*/ |   /*--------------------------------------------*/ | ||||||
|   async renderPetitsGrimauds(stage) { |   async renderPetitsGrimauds(stage) { | ||||||
|     // Filter available pouponniere from origineSociale |     // Filter available pouponniere from origineSociale | ||||||
|     let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte"))  |     let grimaudsItems = stage.items.filter(item => item.system.accessible[this.origineSociale.id].isaccessible && (item.system.genre === this.sexe || item.system.genre === "Mixte")) | ||||||
|  |  | ||||||
|     let context = { |     let context = { | ||||||
|       title: "Les Petits Grimauds", |       title: "Les Petits Grimauds", | ||||||
| @@ -545,7 +561,7 @@ export class TeDeumCharacterCreator { | |||||||
|     let actor = await TeDeumActor.create({name: "Nouveau personnage", type: "pj"}) |     let actor = await TeDeumActor.create({name: "Nouveau personnage", type: "pj"}) | ||||||
|     let updates = {} |     let updates = {} | ||||||
|     for (let key in this.caracBonus) { |     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.genre'] = this.sexe | ||||||
|     updates['system.religion'] = TeDeumUtility.upperFirst(this.religion) |     updates['system.religion'] = TeDeumUtility.upperFirst(this.religion) | ||||||
| @@ -553,7 +569,7 @@ export class TeDeumCharacterCreator { | |||||||
|     updates['system.equipmentfree'] = this.ageViril.system.trousseau |     updates['system.equipmentfree'] = this.ageViril.system.trousseau | ||||||
|     actor.update( updates); |     actor.update( updates); | ||||||
|  |  | ||||||
|     // Process competences : increase know skills  |     // Process competences : increase know skills | ||||||
|     let updateComp = [] |     let updateComp = [] | ||||||
|     let toAdd = [] |     let toAdd = [] | ||||||
|     for (let compName in this.competenceBonus) { |     for (let compName in this.competenceBonus) { | ||||||
| @@ -562,13 +578,13 @@ export class TeDeumCharacterCreator { | |||||||
|         updateComp.push({ _id: comp._id, "system.score": this.competenceBonus[compName].value }) |         updateComp.push({ _id: comp._id, "system.score": this.competenceBonus[compName].value }) | ||||||
|       } else { |       } else { | ||||||
|         toAdd.push( compName) |         toAdd.push( compName) | ||||||
|       }       |       } | ||||||
|     } |     } | ||||||
|     actor.updateEmbeddedDocuments("Item", updateComp) |     actor.updateEmbeddedDocuments("Item", updateComp) | ||||||
|      |  | ||||||
|     // Process adding skills  |     // Process adding skills | ||||||
|     let compendiumSkill = TeDeumUtility.getCompetences() |     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) { |     for (let compName of toAdd) { | ||||||
|       let comp = compendiumSkill.find( i => i.name.toLowerCase() === compName.toLowerCase()) |       let comp = compendiumSkill.find( i => i.name.toLowerCase() === compName.toLowerCase()) | ||||||
|       comp.system.score = this.competenceBonus[compName].value |       comp.system.score = this.competenceBonus[compName].value | ||||||
| @@ -581,14 +597,42 @@ export class TeDeumCharacterCreator { | |||||||
|     await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent}) |     await actor.update({ [`system.fortune.${this.origineSociale.cagnotteUnit}`]: newArgent}) | ||||||
|  |  | ||||||
|     let histoire = "" |     let histoire = "" | ||||||
|     for (let reponse of this.suiviReponses) { |     for ( let key in this.choiceSummary) { | ||||||
|       histoire += `<p>${reponse.question}<br>${reponse.reponse} (${reponse.compName})</p>`       |       let stageSummary = this.choiceSummary[key] | ||||||
|  |       if (stageSummary.sexe) { | ||||||
|  |         histoire += `<h3>Origine Sociale</h3>` | ||||||
|  |         histoire += `<p>${stageSummary.sexe} - ${stageSummary.religion} - ${stageSummary.origineSociale}</p>` | ||||||
|  |       } else { | ||||||
|  |         histoire += `<h3>${game.system.tedeum.config.etapesEducation[key].label}</h3>` | ||||||
|  |       } | ||||||
|  |       if (stageSummary.caracBonus) { | ||||||
|  |         histoire += `<p><strong>Caractéristiques : </strong><ul>` | ||||||
|  |         for (let caracKey in stageSummary.caracBonus) { | ||||||
|  |           histoire += `<li>${TeDeumUtility.upperFirst(caracKey)} +1</li>` | ||||||
|  |         } | ||||||
|  |         histoire += `</ul></p>` | ||||||
|  |       } | ||||||
|  |       if (stageSummary.competences) { | ||||||
|  |         histoire += `<p><strong>Compétences : </strong><ul>` | ||||||
|  |         for (let compName in stageSummary.competences) { | ||||||
|  |           histoire += `<li>${TeDeumUtility.upperFirst(compName)} +1</li>` | ||||||
|  |         } | ||||||
|  |         histoire += `</ul></p>` | ||||||
|  |       } | ||||||
|  |       let questions = this.suiviReponses.filter( r => r.key === key) | ||||||
|  |       if (questions.length > 0) { | ||||||
|  |         histoire += `<p><strong>Réponses au questionnaire : </strong><ul>` | ||||||
|  |         for (let question of questions) { | ||||||
|  |           histoire += `<li>${question.question} : <i>${question.reponse}</i> (${TeDeumUtility.upperFirst(question.compName)}+1)</li>` | ||||||
|  |         } | ||||||
|  |         histoire += `</ul></p>` | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|     await actor.update({ "system.histoire": histoire}) |     await actor.update({ "system.histoire": histoire}) | ||||||
|     actor.render(true) |     actor.render(true) | ||||||
|  |  | ||||||
|     context.pointsCompetence = { |     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é" }, |       "sensibilite": { score: actor.getCompetenceScore("Perception"), label: "Sensibilité" }, | ||||||
|       "entregent": { score: actor.getCompetenceScore("Charme"), label: "Entregent" }, |       "entregent": { score: actor.getCompetenceScore("Charme"), label: "Entregent" }, | ||||||
|       "puissance": { score: actor.getCompetenceScore("Effort"), label: "Puissance" }, |       "puissance": { score: actor.getCompetenceScore("Effort"), label: "Puissance" }, | ||||||
| @@ -596,7 +640,7 @@ export class TeDeumCharacterCreator { | |||||||
|       "adresse": { score: actor.getCompetenceScore("Initiative"),   label: "Adresse" }, |       "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 label = "Terminer" | ||||||
|     const choiceResult = await foundry.applications.api.DialogV2.wait({ |     const choiceResult = await foundry.applications.api.DialogV2.wait({ | ||||||
|       window: { title: context.title }, |       window: { title: context.title }, | ||||||
|   | |||||||
| @@ -2,20 +2,39 @@ import { TeDeumUtility } from "../common/tedeum-utility.js"; | |||||||
|  |  | ||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| export class TeDeumCombat extends Combat { | export class TeDeumCombat extends Combat { | ||||||
|    |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async rollInitiative(ids, formula = undefined, messageOptions = {} ) { |   async rollInitiative(ids, formula = undefined, messageOptions = {}) { | ||||||
|     //console.log("Roll INIT !") |     //console.log("Roll INIT !") | ||||||
|     ids = typeof ids === "string" ? [ids] : ids; |     ids = typeof ids === "string" ? [ids] : ids; | ||||||
|     for (let cId of ids) { |     for (let cId of ids) { | ||||||
|       const c = this.combatants.get(cId); |       const c = this.combatants.get(cId); | ||||||
|       let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, cId ) : -1; |       let initBonus = c.actor ? c.actor.getInitiativeScore(this.id, cId) : -1; | ||||||
|       await this.updateEmbeddedDocuments("Combatant", [ { _id: cId, initiative: initBonus } ]); |       await this.updateEmbeddedDocuments("Combatant", [{ _id: cId, initiative: initBonus }]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return this; |     return this; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   async modifyAction(combatantId, delta, isMainGauche = false) { | ||||||
|  |     let combatant = this.combatants.get(combatantId) | ||||||
|  |     if (!combatant) return; | ||||||
|  |     let ca = combatant.getFlag("world", "available-actions") | ||||||
|  |     if (!ca) { | ||||||
|  |       ca = { nbActions: 1, nbActionsMainGauche: 0 } | ||||||
|  |     } | ||||||
|  |     if (isMainGauche) { | ||||||
|  |       ca.nbActionsMainGauche += delta | ||||||
|  |     } else { | ||||||
|  |       ca.nbActions += delta | ||||||
|  |     } | ||||||
|  |     if (ca.nbActionsMainGauche < 0) ca.nbActionsMainGauche = 0 | ||||||
|  |     if (ca.nbActions < 0) ca.nbActions = 0 | ||||||
|  |     await combatant.setFlag("world", "available-actions", ca) | ||||||
|  |     await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` }) | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async checkTurnPosition() { |   static async checkTurnPosition() { | ||||||
|     while (game.combat.turn > 0) { |     while (game.combat.turn > 0) { | ||||||
|   | |||||||
| @@ -4,30 +4,46 @@ export const SYSTEM_ID = "fvtt-te-deum"; | |||||||
| export const TEDEUM_CONFIG = { | export const TEDEUM_CONFIG = { | ||||||
|  |  | ||||||
|   BONUS_DEGATS: [{}, { label: "1d4", value: -2 }, { label: "1d6", value: -1 }, { label: "1d8", value: 0 }, |   BONUS_DEGATS: [{}, { label: "1d4", value: -2 }, { label: "1d6", value: -1 }, { label: "1d8", value: 0 }, | ||||||
|     { label: "1d10", value: 1 }, { label: "1d12", value: 2 }, { label: "1d20", value: 3 }], |   { label: "1d10", value: 1 }, { label: "1d12", value: 2 }, { label: "1d20", value: 3 }], | ||||||
|   MAX_ARMURES_LOURDES: [{}, { value: 1 }, { value: 3 }, { value: 5 }, |   MAX_ARMURES_LOURDES: [{}, { value: 1 }, { value: 3 }, { value: 5 }, | ||||||
|     { value: 7 }, { value: 9 }, { value: 11 }], |   { value: 7 }, { value: 9 }, { value: 11 }], | ||||||
|   ACTIONS_PAR_TOUR: [{}, { value: 1 }, { value: 2 }, { value: 2 }, |   ACTIONS_PAR_TOUR: [{}, { value: 1 }, { value: 2 }, { value: 2 }, | ||||||
|     { value: 3 }, { value: 3 }, { value: 4 }], |   { value: 3 }, { value: 3 }, { value: 4 }], | ||||||
|   COMMON_VALUE: [{}, { value: 1 }, { value: 2 }, { value: 3 }, |   COMMON_VALUE: [{}, { value: 1 }, { value: 2 }, { value: 3 }, | ||||||
|     { value: 4 }, { value: 5 }, { value: 6 }], |   { value: 4 }, { value: 5 }, { value: 6 }], | ||||||
|   COUT_XP: [{}, { value: 10 }, { value: 10 }, { value: 10 }, |   COUT_XP: [{}, { value: 10 }, { value: 10 }, { value: 10 }, | ||||||
|     { value: 10 }, { value: 30 }, { value: 50 }], |   { value: 10 }, { value: 30 }, { value: 50 }], | ||||||
|  |  | ||||||
|   LOCALISATION: { |   LOCALISATION: { | ||||||
|     "pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", nbArmure: 1, score: { min: 1, max: 1 }, coord: { top: 500, left: 0 } }, |     "pieddroit": { label: "Pied Droit", value: 1, locMod: 0, id: "pieddroit", categorie: "pied", nbArmure: 1, score: { min: 1, max: 1 }, coord: { top: 500, left: 0 } }, | ||||||
|     "jambedroite": { label: "Jambe Droite", value: 1, locMod: -1, id: "jambedroite", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } }, |     "jambedroite": { label: "Jambe Droite", value: 1, locMod: -1, id: "jambedroite", categorie: "jambe", nbArmure: 1, score: { min: 3, max: 4 }, coord: { top: 400, left: 100 } }, | ||||||
|     "jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", nbArmure: 1, score: { min: 5, max: 6 }, coord: { top: 400, left: 300 } }, |     "jambegauche": { label: "Jambe Gauche", value: 1, locMod: -1, id: "jambegauche", categorie: "jambe", nbArmure: 1, score: { min: 5, max: 6 }, coord: { top: 400, left: 300 } }, | ||||||
|     "piedgauche": { label: "Pied Gauche", value: 1, locMod: 0, id: "piedgauche", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } }, |     "piedgauche": { label: "Pied Gauche", value: 1, locMod: 0, id: "piedgauche", categorie: "pied", nbArmure: 1, score: { min: 2, max: 2 }, coord: { top: 500, left: 400 } }, | ||||||
|     "maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", nbArmure: 1, score: { min: 7, max: 7 }, coord: { top: 0, left: 0 } }, |     "maindroite": { label: "Main Droite", value: 1, locMod: 0, id: "maindroite", categorie: "main", nbArmure: 1, score: { min: 7, max: 7 }, coord: { top: 0, left: 0 } }, | ||||||
|     "maingauche": { label: "Main Gauche", value: 1, locMod: 0, id: "maingauche", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } }, |     "maingauche": { label: "Main Gauche", value: 1, locMod: 0, id: "maingauche", categorie: "main", nbArmure: 1, score: { min: 8, max: 8 }, coord: { top: 0, left: 400 } }, | ||||||
|     "brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", nbArmure: 2, score: { min: 9, max: 10 }, coord: { top: 200, left: 0 } }, |     "brasdroit": { label: "Bras Droit", value: 1, locMod: -1, id: "brasdroit", categorie: "bras", nbArmure: 2, score: { min: 9, max: 10 }, coord: { top: 200, left: 0 } }, | ||||||
|     "brasgauche": { label: "Bras Gauche", value: 1, locMod: -1, id: "brasgauche", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } }, |     "brasgauche": { label: "Bras Gauche", value: 1, locMod: -1, id: "brasgauche", categorie: "bras", nbArmure: 2, score: { min: 11, max: 12 }, coord: { top: 200, left: 400 } }, | ||||||
|     "corps": { label: "Corps", value: 1, id: "corps", locMod: -2, nbArmure: 2, score: { min: 13, max: 17 }, coord: { top: 200, left: 200 } }, |     "corps": { label: "Corps", value: 1, id: "corps", categorie: "corps", locMod: -2, nbArmure: 2, score: { min: 13, max: 17 }, coord: { top: 200, left: 200 } }, | ||||||
|     "tete": { label: "Tête", value: 1, id: "tete", locMod: -2, nbArmure: 2, score: { min: 18, max: 20 }, coord: { top: 0, left: 200 } }, |     "tete": { label: "Tête", value: 1, id: "tete", categorie: "tete", locMod: -2, nbArmure: 2, score: { min: 18, max: 20 }, coord: { top: 0, left: 200 } }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   ATTAQUE_CIBLEES: { | ||||||
|  |     "aucune": { label: "Aucune", id: "aucune", locMod: 0, description: "Attaque non ciblée" }, | ||||||
|  |     "pieddroit": { label: "Pied Droit", id: "pieddroit", locMod: 0, description: "Attaque ciblée sur le pied droit" }, | ||||||
|  |     "jambedroite": { label: "Jambe Droite", id: "jambedroite", locMod: -1, description: "Attaque ciblée sur la jambe droite" }, | ||||||
|  |     "jambegauche": { label: "Jambe Gauche", id: "jambegauche", locMod: -1, description: "Attaque ciblée sur la jambe gauche" }, | ||||||
|  |     "piedgauche": { label: "Pied Gauche", id: "piedgauche", locMod: 0, description: "Attaque ciblée sur le pied gauche" }, | ||||||
|  |     "maindroite": { label: "Main Droite", id: "maindroite", locMod: 0, description: "Attaque ciblée sur la main droite" }, | ||||||
|  |     "maingauche": { label: "Main Gauche", id: "maingauche", locMod: 0, description: "Attaque ciblée sur la main gauche" }, | ||||||
|  |     "brasdroit": { label: "Bras Droit", id: "brasdroit", locMod: -1, description: "Attaque ciblée sur le bras droit" }, | ||||||
|  |     "brasgauche": { label: "Bras Gauche", id: "brasgauche", locMod: -1, description: "Attaque ciblée sur le bras gauche" }, | ||||||
|  |     "corps": { label: "Corps", id: "corps", locMod: -2, description: "Attaque ciblée sur le corps" }, | ||||||
|  |     "tete": { label: "Tête", id: "tete", locMod: -2, description: "Attaque ciblée sur la tête" }, | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   ARME_SPECIFICITE: { |   ARME_SPECIFICITE: { | ||||||
|  |     "poing": { label: "Poings", id: "poing", melee: true, tir: false }, | ||||||
|  |     "pied": { label: "Pieds", id: "pied", melee: true, tir: false }, | ||||||
|     "encombrante": { label: "Encombrante", id: "encombrante", melee: true, tir: true }, |     "encombrante": { label: "Encombrante", id: "encombrante", melee: true, tir: true }, | ||||||
|     "maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false }, |     "maintiendistance": { label: "Maintien à distance", id: "maintiendistance", melee: true, tir: false }, | ||||||
|     "coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false }, |     "coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false }, | ||||||
| @@ -77,6 +93,14 @@ export const TEDEUM_CONFIG = { | |||||||
|     5: { valeur: 5, qualite: "Excellent", dice: "d12", negativeDice: "d6", savoir: "Docte", sensibilite: "Subtil", entregent: "Galant", puissance: "Musculeux", complexion: "Sanguin", adresse: "Preste" }, |     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" }, |     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"], |   diceValeur: ["d4", "d6", "d8", "d10", "d12", "d20"], | ||||||
|   degatsArmure: { |   degatsArmure: { | ||||||
|     sansarmure: { label: "Sans armure" }, |     sansarmure: { label: "Sans armure" }, | ||||||
| @@ -86,7 +110,7 @@ export const TEDEUM_CONFIG = { | |||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   caracteristiques: { |   caracteristiques: { | ||||||
|     savoir: { id: "savoir", value: "savoir", label: "Savoir", description:"Cette caractéristique correspond à la capacité d'abstraction intellectuelle ainsi qu'à la culture générale du personnage. Elle permet d'évaluer la compétence de base Mémoriser." }, |     savoir: { id: "savoir", value: "savoir", label: "Savoir", description: "Cette caractéristique correspond à la capacité d'abstraction intellectuelle ainsi qu'à la culture générale du personnage. Elle permet d'évaluer la compétence de base Mémoriser." }, | ||||||
|     sensibilite: { id: "sensibilite", value: "sensibilite", label: "Sensibilité", description: "Cette caractéristique correspond à l'ouverture du personnage sur le monde. Elle englobe l'altruisme, la spiritualité et la créativité du personnage. Elle permet d'évaluer la compétence de base Perception." }, |     sensibilite: { id: "sensibilite", value: "sensibilite", label: "Sensibilité", description: "Cette caractéristique correspond à l'ouverture du personnage sur le monde. Elle englobe l'altruisme, la spiritualité et la créativité du personnage. Elle permet d'évaluer la compétence de base Perception." }, | ||||||
|     entregent: { id: "entregent", value: "entregent", label: "Entregent", description: "Cette caractéristique correspond à l'ensemble des prédispositions sociales du personnage. Elle englobe le charisme et le respect des usages. Elle permet d'évaluer la compétence de base Charme." }, |     entregent: { id: "entregent", value: "entregent", label: "Entregent", description: "Cette caractéristique correspond à l'ensemble des prédispositions sociales du personnage. Elle englobe le charisme et le respect des usages. Elle permet d'évaluer la compétence de base Charme." }, | ||||||
|     complexion: { id: "complexion", value: "complexion", label: "Complexion", description: "Cette caractéristique permet d'évaluer la santé et la résistance physique du per- sonnage. Elle permet de calculer la com- pétence de base Endurance, capitale dans la résolution des blessures, la résistance à la douleur, au poison et aux maladies." }, |     complexion: { id: "complexion", value: "complexion", label: "Complexion", description: "Cette caractéristique permet d'évaluer la santé et la résistance physique du per- sonnage. Elle permet de calculer la com- pétence de base Endurance, capitale dans la résolution des blessures, la résistance à la douleur, au poison et aux maladies." }, | ||||||
| @@ -94,10 +118,10 @@ export const TEDEUM_CONFIG = { | |||||||
|     adresse: { id: "adresse", value: "adresse", label: "Adresse", description: "Cette caractéristique correspond à la rapidité et la dextérité du personnage. Elle livre le nombre d'actions qu'un personnage peut accomplir en un tour de combat et permet d'évaluer les compétences de base Initiative & Course." }, |     adresse: { id: "adresse", value: "adresse", label: "Adresse", description: "Cette caractéristique correspond à la rapidité et la dextérité du personnage. Elle livre le nombre d'actions qu'un personnage peut accomplir en un tour de combat et permet d'évaluer les compétences de base Initiative & Course." }, | ||||||
|   }, |   }, | ||||||
|   allonges: { |   allonges: { | ||||||
|     courte: { courte: { malus: 0 }, moyenne: { malus: -1 }, longue: { malus: -2 }, treslongue: { malus: 0, esquive: 2 } }, |     courte: { courte: { label: "Courte (0)", malus: 0 }, moyenne: { label: "Moyenne (-1)", malus: -1 }, longue: { label: "Longue (-2)", malus: -2 }, treslongue: { label: "Très longue (0, 2 Esquives)", malus: 0, esquive: 2 } }, | ||||||
|     moyenne: { courte: { malus: 0 }, moyenne: { malus: 0 }, longue: { malus: -1 }, treslongue: { malus: 0, esquive: 2 } }, |     moyenne: { courte: { label: "Courte (0)", malus: 0 }, moyenne: { label: "Moyenne (0)", malus: 0 }, longue: { label: "Longue (-1)", malus: -1 }, treslongue: { label: "Très longue (0, 2 Esquives)", malus: 0, esquive: 2 } }, | ||||||
|     longue: { courte: { malus: -2 }, moyenne: { malus: -1 }, longue: { malus: 0 }, treslongue: { malus: -1, esquive: 1 } }, |     longue: { courte: { label: "Courte (-2)", malus: -2 }, moyenne: { label: "Moyenne (-1)", malus: -1 }, longue: { label: "Longue (0)", malus: 0 }, treslongue: { label: "Très longue (-1, 2 Esquives)", malus: -1, esquive: 1 } }, | ||||||
|     treslongue: { courte: { malus: 0, esquive: 2 }, moyenne: { malus: 0, esquive: 2 }, longue: { malus: 0, esquive: 1 }, treslongue: { malus: 0 } }, |     treslongue: { courte: { label: "Courte (0, 2 Esquives)", malus: 0, esquive: 2 }, moyenne: { label: "Moyenne (0, 2 Esquives)", malus: 0, esquive: 2 }, longue: { label: "Longue (0, 1 Esquive)", malus: 0, esquive: 1 }, treslongue: { label: "Très longue (0)", malus: 0 } }, | ||||||
|   }, |   }, | ||||||
|   providence: [ |   providence: [ | ||||||
|     { labelM: "Brebis égarée", labelF: "Brebis égarée", value: 0, diceValue: "0" }, |     { labelM: "Brebis égarée", labelF: "Brebis égarée", value: 0, diceValue: "0" }, | ||||||
| @@ -144,19 +168,24 @@ export const TEDEUM_CONFIG = { | |||||||
|   }, |   }, | ||||||
|   difficulte: { |   difficulte: { | ||||||
|     aucune: { label: "Aucune", key: "aucune", value: 0 }, |     aucune: { label: "Aucune", key: "aucune", value: 0 }, | ||||||
|     routine: { label: "Routine", key: "routine", value: 3 }, |     routine: { label: "Routine (3)", key: "routine", value: 3 }, | ||||||
|     facile: { label: "Facile", key: "facile", value: 5 }, |     facile: { label: "Facile (5)", key: "facile", value: 5 }, | ||||||
|     pardefaut: { label: "Par Défaut", key: "pardefaut", value: 7 }, |     pardefaut: { label: "Par Défaut (7)", key: "pardefaut", value: 7 }, | ||||||
|     malaise: { label: "Malaisé", key: "malaise", value: 9 }, |     malaise: { label: "Malaisé (9)", key: "malaise", value: 9 }, | ||||||
|     difficile: { label: "Difficile", key: "difficile", value: 11 }, |     difficile: { label: "Difficile (11)", key: "difficile", value: 11 }, | ||||||
|     perilleux: { label: "Perilleux", key: "perilleux", value: 13 }, |     perilleux: { label: "Perilleux (13)", key: "perilleux", value: 13 }, | ||||||
|     desespere: { label: "Désespéré", key: "desespere", value: 15 } |     desespere: { label: "Désespéré (15)", key: "desespere", value: 15 } | ||||||
|   }, |   }, | ||||||
|   monnaie: { |   monnaie: { | ||||||
|     denier: { label: "Deniers", id: "denier", value: 1 }, |     denier: { label: "Deniers", id: "denier", value: 1 }, | ||||||
|     sol: { label: "Sols", id: "sol", value: 10 }, |     sol: { label: "Sols", id: "sol", value: 10 }, | ||||||
|     livre: { label: "Livres", id: "livre", value: 100 } |     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: { |   etapesEducation: { | ||||||
|     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 }, |     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 }, |     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 }, | ||||||
| @@ -182,13 +211,14 @@ export const TEDEUM_CONFIG = { | |||||||
|     { value: "1", label: "+1 niveau" }, |     { value: "1", label: "+1 niveau" }, | ||||||
|     { value: "2", label: "+2 niveaux" } |     { value: "2", label: "+2 niveaux" } | ||||||
|   ], |   ], | ||||||
|  |   blessuresOrder: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet", "tuenet", "tuenet", "tuenet", "tuenet"], | ||||||
|   blessures: { |   blessures: { | ||||||
|     indemne: { value: 0, label: "Indemne", key: "indemne", degatsMax: -1, count: 0, modifier: 0 }, |     indemne: { value: 0, label: "Indemne", key: "indemne", degatsMax: -1, count: 0, modifier: 0 }, | ||||||
|     estafilade: { value: 1, label: "Estafilade", key: "estafilade", degatsMin: 0, degatsMax: 2, count: 1, modifier: 0 }, |     estafilade: { value: 1, label: "Estafilade", key: "estafilade", degatsMin: 0, degatsMax: 2, count: 1, modifier: 0 }, | ||||||
|     plaie: { value: 2, label: "Plaie", key: "plaie", degatsMin: 3, degatsMax: 4, count: 1, modifier: -1 }, |     plaie: { value: 2, label: "Plaie", key: "plaie", degatsMin: 3, degatsMax: 4, count: 1, modifier: -1 }, | ||||||
|     plaiebeante: { value: 3, label: "Plaie béante", key: "plaiebeante", degatsMin: 5, degatsMax: 6, count: 1, modifier: -2 }, |     plaiebeante: { value: 3, label: "Plaie béante", key: "plaiebeante", degatsMin: 5, degatsMax: 6, count: 1, modifier: -2 }, | ||||||
|     plaieatroce: { value: 4, label: "Plaie atroce", key: "plaieatroce", degatsMin: 7, degatsMax: 8, count: 1, horsCombat: true, modifier: -12 }, |     plaieatroce: { value: 4, label: "Plaie atroce", key: "plaieatroce", degatsMin: 7, degatsMax: 8, count: 1, horsCombat: true, modifier: -12 }, | ||||||
|     tunenet: { value: 5, label: "Tué net", key: "tuenet", degatsMin: 9, degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -12 } |     tuenet: { value: 5, label: "Tué net", key: "tuenet", degatsMin: 9, degatsMax: 100, count: 1, horsCombat: true, mort: true, modifier: -100 } | ||||||
|   }, |   }, | ||||||
|   virulence: { |   virulence: { | ||||||
|     aucune: { label: "Aucune", value: "aucune", modifier: 0 }, |     aucune: { label: "Aucune", value: "aucune", modifier: 0 }, | ||||||
|   | |||||||
| @@ -12,22 +12,63 @@ export class TeDeumUtility { | |||||||
|     CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" |     CONFIG.JournalEntry.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" | ||||||
|     CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" |     CONFIG.Macro.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" | ||||||
|     CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" |     CONFIG.Adventure.compendiumBanner = "systems/fvtt-te-deum/images/ui/compendium_banner.webp" | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static installHooks() { | ||||||
|     Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html)); |     Hooks.on('renderChatLog', (log, html, data) => TeDeumUtility.chatListeners(html)); | ||||||
|  |  | ||||||
|     Hooks.on("renderActorDirectory", (app, html, data) => { |     Hooks.on("renderActorDirectory", (app, html, data) => { | ||||||
|       if (game.user.can('ACTOR_CREATE')) { |       if (game.user.can('ACTOR_CREATE')) { | ||||||
|         const button = document.createElement('button'); |         const button = document.createElement('button'); | ||||||
|         button.style.width = '90%'; |         button.style.width = '60%'; | ||||||
|  |         button.classList.add('tedeum-create-character'); | ||||||
|         button.innerHTML = 'Créer un Personnage' |         button.innerHTML = 'Créer un Personnage' | ||||||
|         button.addEventListener('click', () => { |         button.addEventListener('click', () => { | ||||||
|           let cr = new game.system.tedeum.TeDeumCharacterCreator(); |           let cr = new game.system.tedeum.TeDeumCharacterCreator(); | ||||||
|           cr.init() |           cr.init() | ||||||
|         }) |         }) | ||||||
|         html.find('.header-actions').after(button) |         $(html).find('.header-actions').after(button) | ||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|     //Hooks.on("getChatLogEntryContext", (html, options) => TeDeumUtility.chatMenuManager(html, options)); |  | ||||||
|  |     Hooks.on("combatStart", async (combat, updateData, options) => { | ||||||
|  |       this.resetCombatActions(combat) | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     Hooks.on("combatRound", (combat, updateData, updateOptions) => { | ||||||
|  |       // List all actors related to combatant | ||||||
|  |       if (game.user.isGM) { | ||||||
|  |         this.resetCombatActions(combat) | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     Hooks.on("getCombatTrackerContextOptions", (html, options) => { | ||||||
|  |       console.log("Get Combat Tracker Context", html, options) | ||||||
|  |       this.pushCombatOptions(html, options); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   static pushCombatOptions(html, options) { | ||||||
|  |     options.push({ name: "Actions +1", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), 1); } }) | ||||||
|  |     options.push({ name: "Actions -1", condition: true, icon: '<i class="fas fa-minus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), -1); } }) | ||||||
|  |     options.push({ name: "Actions MG +1", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), 1, true); } }) | ||||||
|  |     options.push({ name: "Actions MG -1", condition: true, icon: '<i class="fas fa-minus"></i>', callback: target => { game.combat.modifyAction($(target).data('combatant-id'), -1, true); } }) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   static async resetCombatActions(combat) { | ||||||
|  |     for (let c of combat.combatants) { | ||||||
|  |       let actor = game.actors.get(c.actorId) | ||||||
|  |       if (actor) { | ||||||
|  |         let nbActions = actor.getNbActions()?.value || 0 | ||||||
|  |         let isMainGauche = (actor.getCompetenceScore("Main gauche") > 0) | ||||||
|  |         let nbActionsMainGauche = isMainGauche ? nbActions : 0 | ||||||
|  |         await c.setFlag("world", "available-actions", { nbActions, nbActionsMainGauche }) | ||||||
|  |         await c.update({ name: `${c.token.name} (${nbActions} / ${nbActionsMainGauche})` }) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -92,6 +133,13 @@ export class TeDeumUtility { | |||||||
|     Handlebars.registerHelper('isGM', function () { |     Handlebars.registerHelper('isGM', function () { | ||||||
|       return game.user.isGM |       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 |     // Load compendium data | ||||||
|     const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences") |     const competences = await TeDeumUtility.loadCompendium("fvtt-te-deum.competences") | ||||||
| @@ -193,7 +241,7 @@ export class TeDeumUtility { | |||||||
|     return actor |     return actor | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */  /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async manageOpposition(rollData) { |   static async manageOpposition(rollData) { | ||||||
|     if (!this.currentOpposition) { |     if (!this.currentOpposition) { | ||||||
|       // Store rollData as current GM opposition |       // Store rollData as current GM opposition | ||||||
| @@ -202,29 +250,47 @@ export class TeDeumUtility { | |||||||
|     } else { |     } else { | ||||||
|       // Perform the opposition |       // Perform the opposition | ||||||
|       let isAttackWinner = true |       let isAttackWinner = true | ||||||
|       let rWinner = this.currentOpposition       |       let rWinner, rLooser | ||||||
|       let rLooser = rollData |       if (this.currentOpposition.total <= rollData.total) { | ||||||
|       if (rWinner.total < rLooser.total) { |         rWinner = foundry.utils.duplicate(rollData) | ||||||
|         rWinner = rollData |         rLooser = foundry.utils.duplicate(this.currentOpposition) | ||||||
|         rLooser = this.currentOpposition |  | ||||||
|         isAttackWinner = false |         isAttackWinner = false | ||||||
|  |       } else { | ||||||
|  |         rWinner = foundry.utils.duplicate(this.currentOpposition) | ||||||
|  |         rLooser = foundry.utils.duplicate(rollData) | ||||||
|  |         isAttackWinner = true | ||||||
|       } |       } | ||||||
|       this.currentOpposition = undefined // Reset opposition |       this.currentOpposition = undefined // Reset opposition | ||||||
|       let oppositionData = { |       let oppositionData = { | ||||||
|         winner: rWinner, |         winner: rWinner, | ||||||
|         looser: rLooser |         looser: rLooser | ||||||
|       } |       } | ||||||
|  |       // Update difficulty | ||||||
|  |       rWinner.difficulty = rLooser.total | ||||||
|  |       rLooser.difficulty = rWinner.total | ||||||
|  |       await this.computeResults(rWinner) | ||||||
|  |       await this.computeResults(rLooser) | ||||||
|  |       // Auto XP management when opposed | ||||||
|  |       if (rWinner.isReussiteCritique) { | ||||||
|  |         let actor = this.getActorFromRollData(rWinner) | ||||||
|  |         actor.modifyXP(rWinner.carac.key, 1) | ||||||
|  |       } | ||||||
|  |       if (rLooser.isEchecCritique) { | ||||||
|  |         let actor = this.getActorFromRollData(rLooser) | ||||||
|  |         actor.modifyXP(rLooser.carac.key, 1) | ||||||
|  |       } | ||||||
|  |  | ||||||
|       let msg = await this.createChatWithRollMode(rollData.alias, { |       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) |       await msg.setFlag("world", "te-deum-rolldata", rollData) | ||||||
|        |  | ||||||
|       // Si le gagnant est l'attaquant, appliquer les dégats sur la victime |       // 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) { |       if (isAttackWinner && rWinner.isSuccess && rWinner.mode == "arme" && rWinner.arme?.system.typeArme == "melee" && rWinner.defenderTokenId) { | ||||||
|         this.appliquerDegats(rWinner) |         await this.appliquerDegats(rWinner) | ||||||
|       } |       } | ||||||
|        |  | ||||||
|       console.log("Rolldata result", rollData) |       console.log("Opposition result", rollData, isAttackWinner, oppositionData) | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -235,6 +301,12 @@ export class TeDeumUtility { | |||||||
|     if (defenderToken) { |     if (defenderToken) { | ||||||
|       let actor = defenderToken.actor |       let actor = defenderToken.actor | ||||||
|       await actor.appliquerDegats(rollData) |       await actor.appliquerDegats(rollData) | ||||||
|  |       // Attaque naturelle avec dégats inférieur à -2 | ||||||
|  |       if ((rollData?.arme?.system.specificites?.poing?.hasSpec || rollData?.arme?.system.specificites?.pied?.hasSpec) && rollData.degats < -2) { | ||||||
|  |         let attacker = this.getActorFromRollData(rollData) | ||||||
|  |         attacker.appliquerBlessure("estafilade", "maindroite", "Contusion suite à une attaque naturelle") | ||||||
|  |         ui.notifications.info(`${attacker.name} subit 1 contusion en infligeant ${rollData.degats} dégâts à mains nues`) | ||||||
|  |       } | ||||||
|     } else { |     } else { | ||||||
|       ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué") |       ui.notifications.error("Impossible de trouver la cible de l'attaque, aucun degats appliqué") | ||||||
|     } |     } | ||||||
| @@ -243,7 +315,7 @@ export class TeDeumUtility { | |||||||
|   /* -------------------------------------------- */  /* -------------------------------------------- */ |   /* -------------------------------------------- */  /* -------------------------------------------- */ | ||||||
|   static async chatListeners(html) { |   static async chatListeners(html) { | ||||||
|  |  | ||||||
|     html.on("click", '.chat-command-opposition', event => { |     $(html).on("click", '.chat-command-opposition', event => { | ||||||
|       let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) |       let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) | ||||||
|       let message = game.messages.get(messageId) |       let message = game.messages.get(messageId) | ||||||
|       let rollData = message.getFlag("world", "te-deum-rolldata") |       let rollData = message.getFlag("world", "te-deum-rolldata") | ||||||
| @@ -251,7 +323,7 @@ export class TeDeumUtility { | |||||||
|         TeDeumUtility.manageOpposition(rollData, messageId) |         TeDeumUtility.manageOpposition(rollData, messageId) | ||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|     html.on("click", '.chat-command-appliquer-degats', event => { |     $(html).on("click", '.chat-command-appliquer-degats', event => { | ||||||
|       let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) |       let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) | ||||||
|       let message = game.messages.get(messageId) |       let message = game.messages.get(messageId) | ||||||
|       let rollData = message.getFlag("world", "te-deum-rolldata") |       let rollData = message.getFlag("world", "te-deum-rolldata") | ||||||
| @@ -259,6 +331,17 @@ export class TeDeumUtility { | |||||||
|         TeDeumUtility.appliquerDegats(rollData, messageId) |         TeDeumUtility.appliquerDegats(rollData, messageId) | ||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|  |     $(html).on("click", '.chat-command-gain-xp', event => { | ||||||
|  |       let messageId = TeDeumUtility.findChatMessageId(event.currentTarget) | ||||||
|  |       let message = game.messages.get(messageId) | ||||||
|  |       let rollData = message.getFlag("world", "te-deum-rolldata") | ||||||
|  |       if (rollData) { | ||||||
|  |         let actor = TeDeumUtility.getActorFromRollData(rollData) | ||||||
|  |         actor.modifyXP(rollData.carac.key, 1) | ||||||
|  |         // Hide this button | ||||||
|  |         event.currentTarget.style.display = 'none'; | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -270,7 +353,7 @@ export class TeDeumUtility { | |||||||
|       'systems/fvtt-te-deum/templates/items/partial-item-description.hbs', |       'systems/fvtt-te-deum/templates/items/partial-item-description.hbs', | ||||||
|       'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs' |       'systems/fvtt-te-deum/templates/dialogs/partial-creator-status.hbs' | ||||||
|     ] |     ] | ||||||
|     return loadTemplates(templatePaths); |     return foundry.applications.handlebars.loadTemplates(templatePaths); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
| @@ -347,7 +430,7 @@ export class TeDeumUtility { | |||||||
|       let rollData = msg.data.rollData |       let rollData = msg.data.rollData | ||||||
|       if (game.user.isGM) { |       if (game.user.isGM) { | ||||||
|         let chatMsg = await this.createChatMessage(rollData.alias, "blindroll", { |         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 |           whisper: game.user.id | ||||||
|         }) |         }) | ||||||
|         chatMsg.setFlag("world", "tedeum-rolldata", rollData) |         chatMsg.setFlag("world", "tedeum-rolldata", rollData) | ||||||
| @@ -469,9 +552,18 @@ export class TeDeumUtility { | |||||||
|       if (rollData.isMouvement) { |       if (rollData.isMouvement) { | ||||||
|         localModifier -= 1 |         localModifier -= 1 | ||||||
|       } |       } | ||||||
|  |       if (rollData.arme && rollData.allongeId) { | ||||||
|  |         localModifier += rollData.allonges[rollData.allongeId].malus | ||||||
|  |         rollData.allongeMalus = rollData.allonges[rollData.allongeId].malus | ||||||
|  |         rollData.nbEsquives = rollData.allonges[rollData.allongeId]?.esquive || 0 | ||||||
|  |       } | ||||||
|  |       if (rollData.attaqueCiblee && rollData.attaqueCiblee != "aucune") { | ||||||
|  |         localModifier -= 1 | ||||||
|  |         rollData.loc = foundry.utils.duplicate(game.system.tedeum.config.LOCALISATION[rollData.attaqueCiblee]) | ||||||
|  |       } | ||||||
|       let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier) |       let diceBase = this.modifyDice(rollData.carac.dice, localModifier + Number(rollData.bonusMalus) + rollData.santeModifier) | ||||||
|       if (!diceBase) return; |       if (!diceBase) return; | ||||||
|       diceFormula = diceBase + "x + " + rollData.competence.system.score |       diceFormula = diceBase + "x + " + rollData.compScore | ||||||
|     } |     } | ||||||
|     if (rollData.enableProvidence) { |     if (rollData.enableProvidence) { | ||||||
|       diceFormula += " + " + rollData.providence.dice |       diceFormula += " + " + rollData.providence.dice | ||||||
| @@ -481,24 +573,30 @@ export class TeDeumUtility { | |||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async getLocalisation(rollData) { |   static async getLocalisation(rollData) { | ||||||
|     let locRoll = await new Roll("1d20").roll() |     let locRoll | ||||||
|     await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode")) |     if (rollData.loc) { | ||||||
|     rollData.locRoll = foundry.utils.duplicate(locRoll) |       locRoll = await new Roll(String(rollData.loc.score.min)).roll() | ||||||
|     for (let key in game.system.tedeum.config.LOCALISATION) { |     } else { | ||||||
|       let loc = game.system.tedeum.config.LOCALISATION[key] |       locRoll = await new Roll("1d20").roll() | ||||||
|       if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) { |       await this.showDiceSoNice(locRoll, game.settings.get("core", "rollMode")) | ||||||
|         rollData.loc = foundry.utils.duplicate(loc) |       for (let key in game.system.tedeum.config.LOCALISATION) { | ||||||
|         break |         let loc = game.system.tedeum.config.LOCALISATION[key] | ||||||
|  |         if (locRoll.total >= loc.score.min && locRoll.total <= loc.score.max) { | ||||||
|  |           rollData.loc = foundry.utils.duplicate(loc) | ||||||
|  |           break | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     rollData.locRoll = foundry.utils.duplicate(locRoll) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async processAttaqueMelee(rollData) { |   static async processAttaqueMelee(rollData) { | ||||||
|     await this.getLocalisation(rollData) |     await this.getLocalisation(rollData) | ||||||
|     let actor = game.actors.get(rollData.actorId) |     let actor = game.actors.get(rollData.actorId) | ||||||
|     let bDegats = actor.getBonusDegats() |     let bDegats = actor.getAttaqueBonusDegats(rollData) | ||||||
|     let degatsRoll = await new Roll(rollData.arme.system.degats + "+" + bDegats.value).roll() |     rollData.degatsFormula = rollData.arme.system.degats + "+" + bDegats | ||||||
|  |     let degatsRoll = await new Roll(rollData.degatsFormula).roll() | ||||||
|     await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode")) |     await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode")) | ||||||
|     rollData.degatsRoll = foundry.utils.duplicate(degatsRoll) |     rollData.degatsRoll = foundry.utils.duplicate(degatsRoll) | ||||||
|     rollData.degats = degatsRoll.total |     rollData.degats = degatsRoll.total | ||||||
| @@ -514,12 +612,40 @@ export class TeDeumUtility { | |||||||
|       await this.getLocalisation(rollData) |       await this.getLocalisation(rollData) | ||||||
|       // Now the degats |       // Now the degats | ||||||
|       let degatsRoll = await new Roll(rollData.arme.system.degats).roll() |       let degatsRoll = await new Roll(rollData.arme.system.degats).roll() | ||||||
|       await this.showDiceSoNice(rollData.locRoll, game.settings.get("core", "rollMode")) |       await this.showDiceSoNice(rollData.degatsRoll, game.settings.get("core", "rollMode")) | ||||||
|       rollData.degatsRoll = foundry.utils.duplicate(degatsRoll) |       rollData.degatsRoll = foundry.utils.duplicate(degatsRoll) | ||||||
|       rollData.degats = degatsRoll.total |       rollData.degats = degatsRoll.total | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   static async manageCombatActions(actor, rollData) { | ||||||
|  |     let combat = game.combats.active | ||||||
|  |     if (!combat) return; | ||||||
|  |     let combatant = combat.getCombatantByActor(actor) | ||||||
|  |     if (!combatant) return; | ||||||
|  |     let ca = combatant.getFlag("world", "available-actions") | ||||||
|  |     if (!ca) return; | ||||||
|  |     if (rollData.mode == "arme" && rollData.isMainGauche) { | ||||||
|  |       if (ca.nbActionsMainGauche > 0) { | ||||||
|  |         ca.nbActionsMainGauche -= 1 | ||||||
|  |         ca.nbActions = Math.max(ca.nbActions - 1, 0) | ||||||
|  |       } else { | ||||||
|  |         ui.notifications.error(`${actor.name} n'a plus d'actions disponibles à la main gauche`) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (ca.nbActions > 0) { | ||||||
|  |       ca.nbActions -= 1 | ||||||
|  |     } else { | ||||||
|  |       ui.notifications.error(`${actor.name} n'a plus d'actions disponibles`) | ||||||
|  |     } | ||||||
|  |     await combatant.setFlag("world", "available-actions", ca) | ||||||
|  |     await combatant.update({ name: `${combatant.token.name} (${ca.nbActions} / ${ca.nbActionsMainGauche})` }) | ||||||
|  |     rollData.hasActions = true | ||||||
|  |     rollData.remainingActions = ca.nbActions | ||||||
|  |     rollData.remainingActionsMainGauche = ca.nbActionsMainGauche | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static async rollTeDeum(rollData) { |   static async rollTeDeum(rollData) { | ||||||
|  |  | ||||||
| @@ -529,6 +655,18 @@ export class TeDeumUtility { | |||||||
|       rollData.difficulty = "pardefaut" |       rollData.difficulty = "pardefaut" | ||||||
|     } |     } | ||||||
|     rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value |     rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value | ||||||
|  |  | ||||||
|  |     // Compute the real competence score | ||||||
|  |     if (rollData.competence) { | ||||||
|  |       if (rollData.isMainGauche) { | ||||||
|  |         rollData.competence = actor.getMeilleureCompetenceMainGauche(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) |     let diceFormula = this.computeRollFormula(rollData, actor) | ||||||
|     if (!diceFormula) return; |     if (!diceFormula) return; | ||||||
|     console.log("RollData", rollData, diceFormula) |     console.log("RollData", rollData, diceFormula) | ||||||
| @@ -545,8 +683,10 @@ export class TeDeumUtility { | |||||||
|  |  | ||||||
|     await this.processAttaqueDistance(rollData) |     await this.processAttaqueDistance(rollData) | ||||||
|  |  | ||||||
|  |     await this.manageCombatActions(actor, rollData) | ||||||
|  |  | ||||||
|     let msg = await this.createChatWithRollMode(rollData.alias, { |     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) |     await msg.setFlag("world", "te-deum-rolldata", rollData) | ||||||
|     console.log("Rolldata result", rollData) |     console.log("Rolldata result", rollData) | ||||||
| @@ -555,10 +695,6 @@ export class TeDeumUtility { | |||||||
|     if (rollData.enableProvidence) { |     if (rollData.enableProvidence) { | ||||||
|       actor.modifyProvidence(-1) |       actor.modifyProvidence(-1) | ||||||
|     } |     } | ||||||
|     // Manage XP  |  | ||||||
|     if (rollData.isReussiteCritique || rollData.isEchecCritique) { |  | ||||||
|       actor.modifyXP(rollData.carac.key, 1) |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   | |||||||
| @@ -1,17 +1,17 @@ | |||||||
| export  class TeDeumArmeSchema extends foundry.abstract.TypeDataModel { | export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel { | ||||||
|   static defineSchema() { |   static defineSchema() { | ||||||
|     const fields = foundry.data.fields; |     const fields = foundry.data.fields; | ||||||
|     const requiredInteger = { required: true, nullable: false, integer: true }; |     const requiredInteger = { required: true, nullable: false, integer: true }; | ||||||
|     const requiredDouble = { required: true, nullable: false, integer: false }; |     const requiredDouble = { required: true, nullable: false, integer: false }; | ||||||
|     const schema = {}; |     const schema = {}; | ||||||
|  |  | ||||||
|     schema.typeArme = new fields.StringField({required: true, choices: ["melee", "tir"], initial: "melee"}); |     schema.typeArme = new fields.StringField({ required: true, choices: ["melee", "tir"], initial: "melee" }); | ||||||
|     schema.allonge = new fields.StringField({required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte"}); |     schema.allonge = new fields.StringField({ required: true, choices: ["courte", "moyenne", "longue", "treslongue"], initial: "courte" }); | ||||||
|  |  | ||||||
|     schema.specificites = new fields.SchemaField( |     schema.specificites = new fields.SchemaField( | ||||||
|       Object.values((game.system.tedeum.config.ARME_SPECIFICITE)).reduce((obj, spec) => { |       Object.values((game.system.tedeum.config.ARME_SPECIFICITE)).reduce((obj, spec) => { | ||||||
|         obj[spec.id] = new fields.SchemaField({ |         obj[spec.id] = new fields.SchemaField({ | ||||||
|           hasSpec: new fields.BooleanField({initial: false}), |           hasSpec: new fields.BooleanField({ initial: false }), | ||||||
|         }); |         }); | ||||||
|         return obj; |         return obj; | ||||||
|       }, {}) |       }, {}) | ||||||
| @@ -26,35 +26,35 @@ export  class TeDeumArmeSchema extends foundry.abstract.TypeDataModel { | |||||||
|       }, {}) |       }, {}) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     schema.degatsArmure = new fields.SchemaField( { |     schema.degatsArmure = new fields.SchemaField({ | ||||||
|       sansarmure : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       sansarmure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       cuir : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       cuir: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       plates : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       plates: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       mailles : new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       mailles: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|     }); |     }); | ||||||
|      |  | ||||||
|     schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }); |     schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }); | ||||||
|     schema.competenceRecharge = new fields.StringField({ required: false, choices:["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true }); |     schema.competenceRecharge = new fields.StringField({ required: false, choices: ["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true }); | ||||||
|     schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }); |     schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }); | ||||||
|  |  | ||||||
|     schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }); |     schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0 }); | ||||||
|  |  | ||||||
|     schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" }); |     schema.degats = new fields.StringField({ required: false, blank: true, initial: "0" }); | ||||||
|     schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" }); |     schema.degatscrosse = new fields.StringField({ required: false, blank: true, initial: "0" }); | ||||||
|      |  | ||||||
|     let comp = [] |     let comp = [] | ||||||
|     for (let key of Object.keys(game.system.tedeum.config.armeCompetences)) { |     for (let key of Object.keys(game.system.tedeum.config.armeCompetences)) { | ||||||
|       comp.push(key); |       comp.push(key); | ||||||
|     } |     } | ||||||
|     schema.competence = new fields.StringField({ required: true, choices:comp, initial: "bagarre" }); |     schema.competence = new fields.StringField({ required: true, choices: comp, initial: "bagarre" }); | ||||||
|     schema.competence2 = new fields.StringField({ required: false, choices:comp, initial: "", blank: true }); |     schema.competence2 = new fields.StringField({ required: false, choices: comp, initial: "", blank: true }); | ||||||
|  |  | ||||||
|     schema.prix = new fields.NumberField({ ...requiredDouble, initial: 0, min: 0 }); |     schema.prix = new fields.NumberField({ ...requiredDouble, initial: 0, min: 0 }); | ||||||
|     schema.monnaie = new fields.StringField({ required: true, blank: false, initial: "denier" }); |     schema.monnaie = new fields.StringField({ required: true, blank: false, initial: "denier" }); | ||||||
|      |  | ||||||
|     schema.equipe = new fields.BooleanField({initial: false}), |     schema.equipe = new fields.BooleanField({ initial: false }), | ||||||
|      |  | ||||||
|     schema.description = new fields.HTMLField({ required: true, blank: true }); |       schema.description = new fields.HTMLField({ required: true, blank: true }); | ||||||
|  |  | ||||||
|     return schema; |     return schema; | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -4,8 +4,9 @@ export class TeDeumBlessureSchema extends foundry.abstract.TypeDataModel { | |||||||
|     const requiredInteger = { required: true, nullable: false, integer: true }; |     const requiredInteger = { required: true, nullable: false, integer: true }; | ||||||
|     const schema = {}; |     const schema = {}; | ||||||
|  |  | ||||||
|     schema.typeBlessure = new fields.StringField({required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade"}); |     schema.typeBlessure = new fields.StringField({ required: true, choices: ["indemne", "estafilade", "plaie", "plaiebeante", "plaieatroce", "tuenet"], initial: "estafilade" }); | ||||||
|     schema.localisation = new fields.StringField({required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps"}); |     schema.value = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||||
|  |     schema.localisation = new fields.StringField({ required: true, choices: ["piedgauche", "pieddroit", "jambegauche", "jambedroite", "maingauche", "maindroite", "brasgauche", "brasdroit", "tete", "corps"], initial: "corps" }); | ||||||
|  |  | ||||||
|     schema.description = new fields.HTMLField({ required: true, blank: true }); |     schema.description = new fields.HTMLField({ required: true, blank: true }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel { | |||||||
|         return obj; |         return obj; | ||||||
|       }, {}) |       }, {}) | ||||||
|     ); |     ); | ||||||
|      |  | ||||||
|     schema.genre = new fields.StringField({required: true, initial: "Homme", choices: ["masculin", "mixte", "Homme", "Femme", "Mixte"]}); |     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.nbChoixCarac = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }); | ||||||
| @@ -32,7 +32,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel { | |||||||
|       }); |       }); | ||||||
|       return comps; |       return comps; | ||||||
|     }, {})); |     }, {})); | ||||||
|      |  | ||||||
|     schema.hasCompetencesOpt = new fields.BooleanField({initial: false}) |     schema.hasCompetencesOpt = new fields.BooleanField({initial: false}) | ||||||
|     schema.competencesOptNumber = new fields.NumberField({ ...requiredInteger, initial: 1, min:0 }) |     schema.competencesOptNumber = new fields.NumberField({ ...requiredInteger, initial: 1, min:0 }) | ||||||
|     schema.competencesOpt = new fields.SchemaField(Array.fromRange(14, 1).reduce((comps, i) => { |     schema.competencesOpt = new fields.SchemaField(Array.fromRange(14, 1).reduce((comps, i) => { | ||||||
| @@ -51,7 +51,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel { | |||||||
|             reponse: new fields.StringField({ required: true, blank: true, initial: "" }), |             reponse: new fields.StringField({ required: true, blank: true, initial: "" }), | ||||||
|             compName: new fields.StringField({ required: true, blank: true, initial: "" }), |             compName: new fields.StringField({ required: true, blank: true, initial: "" }), | ||||||
|             toSelect: new fields.BooleanField({ initial: false }), |             toSelect: new fields.BooleanField({ initial: false }), | ||||||
|             compList: new fields.SchemaField(Array.fromRange(10, 1).reduce((comps, i) => { |             compList: new fields.SchemaField(Array.fromRange(16, 1).reduce((comps, i) => { | ||||||
|               comps[`comp${i}`] = new fields.SchemaField({ |               comps[`comp${i}`] = new fields.SchemaField({ | ||||||
|                 compName: new fields.StringField({ required: true, blank: true, initial: "" }), |                 compName: new fields.StringField({ required: true, blank: true, initial: "" }), | ||||||
|               }); |               }); | ||||||
| @@ -63,7 +63,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel { | |||||||
|       }); |       }); | ||||||
|       return questions; |       return questions; | ||||||
|     }, {})); |     }, {})); | ||||||
|      |  | ||||||
|     schema.debouches = new fields.SchemaField(Array.fromRange(24, 1).reduce((debouches, i) => { |     schema.debouches = new fields.SchemaField(Array.fromRange(24, 1).reduce((debouches, i) => { | ||||||
|       debouches[`debouche${i}`] = new fields.SchemaField({ |       debouches[`debouche${i}`] = new fields.SchemaField({ | ||||||
|         debouche: new fields.StringField({ required: true, blank: true, initial: "" }) |         debouche: new fields.StringField({ required: true, blank: true, initial: "" }) | ||||||
| @@ -73,7 +73,7 @@ export class TeDeumEducationSchema extends foundry.abstract.TypeDataModel { | |||||||
|  |  | ||||||
|     schema.cagnotteMultiplier = new fields.NumberField({ ...requiredDouble, initial: 1.0, min: 0 }); |     schema.cagnotteMultiplier = new fields.NumberField({ ...requiredDouble, initial: 1.0, min: 0 }); | ||||||
|     schema.cagnotteDivider = new fields.NumberField({ ...requiredDouble, initial: 1.0, min: 0 }); |     schema.cagnotteDivider = new fields.NumberField({ ...requiredDouble, initial: 1.0, min: 0 }); | ||||||
|   |  | ||||||
|     schema.description = new fields.HTMLField({ required: true, blank: true }); |     schema.description = new fields.HTMLField({ required: true, blank: true }); | ||||||
|     schema.trousseau = new fields.StringField({ required: true, blank: true, initial: "" }); |     schema.trousseau = new fields.StringField({ required: true, blank: true, initial: "" }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,4 +13,10 @@ export class TeDeumEquipementSchema extends foundry.abstract.TypeDataModel { | |||||||
|  |  | ||||||
|     return schema; |     return schema; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   get monnaieLabel() { | ||||||
|  |     console.log("monnaieLabel", this.monnaie,game.system.tedeum.config.monnaieUnit) | ||||||
|  |     return game.system.tedeum.config.monnaieUnit[String(this.monnaie)]?.label; | ||||||
|  |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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.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.fievre = new fields.StringField({required: true, choices: ["aucune", "legere", "forte", "grave"], initial: "aucune"}); | ||||||
|     schema.symptomes = new fields.HTMLField({ required: true, blank: true }); |     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 }); |     schema.description = new fields.HTMLField({ required: true, blank: true }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -26,17 +26,17 @@ export class TeDeumPJSchema extends foundry.abstract.TypeDataModel { | |||||||
|         obj[loc.id] = new fields.SchemaField({ |         obj[loc.id] = new fields.SchemaField({ | ||||||
|           armure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 20 }), |           armure: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 20 }), | ||||||
|           touche:  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; |         return obj; | ||||||
|       }, {}) |       }, {}) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     schema.fortune = new fields.SchemaField({ |     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 }) , |       "livres": new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) , | ||||||
|       "sous": 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.description = new fields.HTMLField({required: true, blank: true}); | ||||||
| @@ -54,7 +54,7 @@ export class TeDeumPJSchema extends foundry.abstract.TypeDataModel { | |||||||
|     schema.charges = 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.religion = new fields.StringField({ required: false, blank: true, initial: "" }); | ||||||
|     schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: "" }); |     schema.lieunaissance = new fields.StringField({ required: false, blank: true, initial: "" }); | ||||||
|      |  | ||||||
|     return schema; |     return schema; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -60,9 +60,18 @@ export class TeDeumRollDialog extends Dialog { | |||||||
|     html.find('#bonusMalusPerso').change((event) => { |     html.find('#bonusMalusPerso').change((event) => { | ||||||
|       this.rollData.bonusMalusPerso = Number(event.currentTarget.value) |       this.rollData.bonusMalusPerso = Number(event.currentTarget.value) | ||||||
|     }) |     }) | ||||||
|  |     html.find('#roll-allonge').change((event) => { | ||||||
|  |       this.rollData.allongeId = event.currentTarget.value | ||||||
|  |     }) | ||||||
|  |     html.find('#roll-main-gauche').change((event) => { | ||||||
|  |       this.rollData.isMainGauche = event.currentTarget.checked | ||||||
|  |     }) | ||||||
|     html.find('#roll-difficulty').change((event) => { |     html.find('#roll-difficulty').change((event) => { | ||||||
|       this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut" |       this.rollData.difficulty = String(event.currentTarget.value) || "pardefaut" | ||||||
|     }) |     }) | ||||||
|  |     html.find('#roll-attaque-ciblee').change((event) => { | ||||||
|  |       this.rollData.attaqueCiblee = event.currentTarget.value || "0" | ||||||
|  |     }) | ||||||
|     html.find('#roll-bonus-malus').change((event) => { |     html.find('#roll-bonus-malus').change((event) => { | ||||||
|       this.rollData.bonusMalus = event.currentTarget.value || "0" |       this.rollData.bonusMalus = event.currentTarget.value || "0" | ||||||
|     }) |     }) | ||||||
| @@ -80,8 +89,14 @@ export class TeDeumRollDialog extends Dialog { | |||||||
|     html.find('#roll-tir-mouvement').change((event) => { |     html.find('#roll-tir-mouvement').change((event) => { | ||||||
|       this.rollData.isMouvement = event.currentTarget.checked |       this.rollData.isMouvement = event.currentTarget.checked | ||||||
|     }) |     }) | ||||||
|      |     html.find('#roll-charge-a-pied').change((event) => { | ||||||
|      |       this.rollData.isChargeAPied = event.currentTarget.checked | ||||||
|      |     }) | ||||||
|  |     html.find('#roll-charge-a-cheval').change((event) => { | ||||||
|  |       this.rollData.isChargeACheval = event.currentTarget.checked | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -4,7 +4,7 @@ import { TeDeumUtility } from "../common/tedeum-utility.js"; | |||||||
|  * Extend the basic ItemSheet with some very simple modifications |  * Extend the basic ItemSheet with some very simple modifications | ||||||
|  * @extends {ItemSheet} |  * @extends {ItemSheet} | ||||||
|  */ |  */ | ||||||
| export class TeDeumItemSheet extends ItemSheet { | export class TeDeumItemSheet extends foundry.appv1.sheets.ItemSheet { | ||||||
|  |  | ||||||
|   /** @override */ |   /** @override */ | ||||||
|   static get defaultOptions() { |   static get defaultOptions() { | ||||||
| @@ -49,17 +49,16 @@ export class TeDeumItemSheet extends ItemSheet { | |||||||
|       limited: this.object.limited, |       limited: this.object.limited, | ||||||
|       options: this.options, |       options: this.options, | ||||||
|       owner: this.document.isOwner, |       owner: this.document.isOwner, | ||||||
|       description: await TextEditor.enrichHTML(this.object.system.description, { async: true }), |       description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }), | ||||||
|       notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }), |       notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.notes, { async: true }), | ||||||
|       isGM: game.user.isGM |       isGM: game.user.isGM | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     if (this.object.type == "education") { |     if (this.object.type == "education") { | ||||||
|       TeDeumUtility.prepareEducationContent(formData); |       TeDeumUtility.prepareEducationContent(formData); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     this.options.editable = !(this.object.origin == "embeddedItem"); |     this.options.editable = !(this.object.origin == "embeddedItem"); | ||||||
|     console.log("ITEM DATA", formData, this); |  | ||||||
|     return formData; |     return formData; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -103,7 +102,7 @@ export class TeDeumItemSheet extends ItemSheet { | |||||||
|     let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index")) |     let levelIndex = Number($(ev.currentTarget).parents(".item").data("level-index")) | ||||||
|     let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index")) |     let choiceIndex = Number($(ev.currentTarget).parents(".item").data("choice-index")) | ||||||
|     let featureId = $(ev.currentTarget).parents(".item").data("feature-id") |     let featureId = $(ev.currentTarget).parents(".item").data("feature-id") | ||||||
|      |  | ||||||
|     let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId] |     let itemData = this.object.system.levels[levelIndex].choices[choiceIndex].features[featureId] | ||||||
|  |  | ||||||
|     if (itemData.name != 'None') { |     if (itemData.name != 'None') { | ||||||
| @@ -157,7 +156,7 @@ export class TeDeumItemSheet extends ItemSheet { | |||||||
|       let itemType = li.data("item-type"); |       let itemType = li.data("item-type"); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   get template() { |   get template() { | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ Hooks.once("init", async function () { | |||||||
|   // preload handlebars templates |   // preload handlebars templates | ||||||
|   TeDeumUtility.preloadHandlebarsTemplates(); |   TeDeumUtility.preloadHandlebarsTemplates(); | ||||||
|  |  | ||||||
|   // Set an initiative formula for the system  |   // Set an initiative formula for the system | ||||||
|   CONFIG.Combat.initiative = { |   CONFIG.Combat.initiative = { | ||||||
|     formula: "1d6", |     formula: "1d6", | ||||||
|     decimals: 1 |     decimals: 1 | ||||||
| @@ -79,17 +79,19 @@ Hooks.once("init", async function () { | |||||||
|     blessure: TeDeumBlessureSchema, |     blessure: TeDeumBlessureSchema, | ||||||
|     maladie: TeDeumMaladieSchema, |     maladie: TeDeumMaladieSchema, | ||||||
|   }; |   }; | ||||||
|    |  | ||||||
|   console.log("TeDeum RPG | Ready"); |   console.log("TeDeum RPG | Ready"); | ||||||
|  |  | ||||||
|   Actors.unregisterSheet("core", ActorSheet); |   foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet); | ||||||
|   Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true }); |   foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pj"], makeDefault: true }); | ||||||
|   Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true }); |   foundry.documents.collections.Actors.registerSheet("fvtt-te-deum", TeDeumActorPJSheet, { types: ["pnj"], makeDefault: true }); | ||||||
|    |  | ||||||
|   Items.unregisterSheet("core", ItemSheet); |  | ||||||
|   Items.registerSheet("fvtt-te-deum", TeDeumItemSheet, { 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() | ||||||
|  |  | ||||||
|  |   TeDeumUtility.installHooks() | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -98,6 +100,7 @@ Hooks.once("init", async function () { | |||||||
| /* -------------------------------------------- */ | /* -------------------------------------------- */ | ||||||
| Hooks.once("ready", function () { | Hooks.once("ready", function () { | ||||||
|  |  | ||||||
|  |  | ||||||
|   // User warning |   // User warning | ||||||
|   if (!game.user.isGM && game.user.character == undefined) { |   if (!game.user.isGM && game.user.character == undefined) { | ||||||
|     ui.notifications.info("Attention ! Aucun personnage relié au joueur !"); |     ui.notifications.info("Attention ! Aucun personnage relié au joueur !"); | ||||||
| @@ -106,11 +109,11 @@ Hooks.once("ready", function () { | |||||||
|       user: game.user._id |       user: game.user._id | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|    |  | ||||||
|   import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{ |   import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => { | ||||||
|     console.log("ClassCounter loaded", moduleCounter) |     console.log("ClassCounter loaded", moduleCounter) | ||||||
|     moduleCounter.ClassCounter.registerUsageCount() |     moduleCounter.ClassCounter.registerUsageCount() | ||||||
|   }).catch(err=> |   }).catch(err => | ||||||
|     console.log("No stats available, giving up.") |     console.log("No stats available, giving up.") | ||||||
|   ) |   ) | ||||||
|   TeDeumUtility.ready(); |   TeDeumUtility.ready(); | ||||||
| @@ -134,4 +137,3 @@ Hooks.on("chatMessage", (html, content, msg) => { | |||||||
|   } |   } | ||||||
|   return true; |   return true; | ||||||
| }); | }); | ||||||
|  |  | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/aides/000136.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/aides/000136.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000087 | MANIFEST-000157 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:49.037668 7f9c6affd6c0 Recovering log #86 | 2025/09/24-15:09:29.187023 7f7d00dfa6c0 Recovering log #155 | ||||||
| 2025/04/05-23:14:49.047402 7f9c6affd6c0 Delete type=0 #86 | 2025/09/24-15:09:29.197297 7f7d00dfa6c0 Delete type=3 #153 | ||||||
| 2025/04/05-23:14:49.047473 7f9c6affd6c0 Delete type=3 #85 | 2025/09/24-15:09:29.197358 7f7d00dfa6c0 Delete type=0 #155 | ||||||
| 2025/04/05-23:15:15.842682 7f9c69bff6c0 Level-0 table #90: started | 2025/09/24-15:11:47.439451 7f7cf9fff6c0 Level-0 table #160: started | ||||||
| 2025/04/05-23:15:15.842744 7f9c69bff6c0 Level-0 table #90: 0 bytes OK | 2025/09/24-15:11:47.439482 7f7cf9fff6c0 Level-0 table #160: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.848975 7f9c69bff6c0 Delete type=0 #88 | 2025/09/24-15:11:47.446526 7f7cf9fff6c0 Delete type=0 #158 | ||||||
| 2025/04/05-23:15:15.860649 7f9c69bff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.446682 7f7cf9fff6c0 Manual compaction at level-0 from '!journal!uNwJgi4kXBCiZmAH' @ 72057594037927935 : 1 .. '!journal.pages!uNwJgi4kXBCiZmAH.onhNU0mXhOpdNZJF' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:55.040362 7fa86b7fe6c0 Recovering log #83 | 2025/09/24-14:48:23.305998 7f7cfb7fe6c0 Recovering log #151 | ||||||
| 2025/04/05-18:56:55.054999 7fa86b7fe6c0 Delete type=3 #81 | 2025/09/24-14:48:23.315978 7f7cfb7fe6c0 Delete type=3 #149 | ||||||
| 2025/04/05-18:56:55.055109 7fa86b7fe6c0 Delete type=0 #83 | 2025/09/24-14:48:23.316051 7f7cfb7fe6c0 Delete type=0 #151 | ||||||
|  | 2025/09/24-15:08:26.608194 7f7cf9fff6c0 Level-0 table #156: started | ||||||
|  | 2025/09/24-15:08:26.608240 7f7cf9fff6c0 Level-0 table #156: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.663875 7f7cf9fff6c0 Delete type=0 #154 | ||||||
|  | 2025/09/24-15:08:26.664085 7f7cf9fff6c0 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-000157
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/aides/MANIFEST-000157
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/armes/000239.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/armes/000239.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000189 | MANIFEST-000260 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:48.938481 7f9c6a7fc6c0 Recovering log #188 | 2025/09/24-15:09:29.097777 7f7cfbfff6c0 Recovering log #258 | ||||||
| 2025/04/05-23:14:48.948878 7f9c6a7fc6c0 Delete type=0 #188 | 2025/09/24-15:09:29.108008 7f7cfbfff6c0 Delete type=3 #256 | ||||||
| 2025/04/05-23:14:48.948933 7f9c6a7fc6c0 Delete type=3 #187 | 2025/09/24-15:09:29.108079 7f7cfbfff6c0 Delete type=0 #258 | ||||||
| 2025/04/05-23:15:15.775044 7f9c69bff6c0 Level-0 table #192: started | 2025/09/24-15:11:47.381009 7f7cf9fff6c0 Level-0 table #263: started | ||||||
| 2025/04/05-23:15:15.775079 7f9c69bff6c0 Level-0 table #192: 0 bytes OK | 2025/09/24-15:11:47.381035 7f7cf9fff6c0 Level-0 table #263: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.780958 7f9c69bff6c0 Delete type=0 #190 | 2025/09/24-15:11:47.387083 7f7cf9fff6c0 Delete type=0 #261 | ||||||
| 2025/04/05-23:15:15.800666 7f9c69bff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.393292 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!InCQeTRdT5jXMX82' @ 72057594037927935 : 1 .. '!items!wxIHkrq98eQ3cOvp' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:54.933660 7fa86affd6c0 Recovering log #185 | 2025/09/24-14:48:23.211234 7f7cfaffd6c0 Recovering log #254 | ||||||
| 2025/04/05-18:56:54.943911 7fa86affd6c0 Delete type=3 #183 | 2025/09/24-14:48:23.220782 7f7cfaffd6c0 Delete type=3 #252 | ||||||
| 2025/04/05-18:56:54.943971 7fa86affd6c0 Delete type=0 #185 | 2025/09/24-14:48:23.220848 7f7cfaffd6c0 Delete type=0 #254 | ||||||
|  | 2025/09/24-15:08:26.052999 7f7cf9fff6c0 Level-0 table #259: started | ||||||
|  | 2025/09/24-15:08:26.053039 7f7cf9fff6c0 Level-0 table #259: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.114659 7f7cf9fff6c0 Delete type=0 #257 | ||||||
|  | 2025/09/24-15:08:26.173656 7f7cf9fff6c0 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-000260
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/armes/MANIFEST-000260
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/armures/000238.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/armures/000238.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000189 | MANIFEST-000259 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:48.952138 7f9c6affd6c0 Recovering log #188 | 2025/09/24-15:09:29.111050 7f7cfaffd6c0 Recovering log #257 | ||||||
| 2025/04/05-23:14:48.962116 7f9c6affd6c0 Delete type=0 #188 | 2025/09/24-15:09:29.121636 7f7cfaffd6c0 Delete type=3 #255 | ||||||
| 2025/04/05-23:14:48.962182 7f9c6affd6c0 Delete type=3 #187 | 2025/09/24-15:09:29.121696 7f7cfaffd6c0 Delete type=0 #257 | ||||||
| 2025/04/05-23:15:15.788075 7f9c69bff6c0 Level-0 table #192: started | 2025/09/24-15:11:47.374855 7f7cf9fff6c0 Level-0 table #262: started | ||||||
| 2025/04/05-23:15:15.788095 7f9c69bff6c0 Level-0 table #192: 0 bytes OK | 2025/09/24-15:11:47.374881 7f7cf9fff6c0 Level-0 table #262: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.794438 7f9c69bff6c0 Delete type=0 #190 | 2025/09/24-15:11:47.380908 7f7cf9fff6c0 Delete type=0 #260 | ||||||
| 2025/04/05-23:15:15.800687 7f9c69bff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.393280 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:54.946918 7fa86b7fe6c0 Recovering log #185 | 2025/09/24-14:48:23.223575 7f7d00dfa6c0 Recovering log #253 | ||||||
| 2025/04/05-18:56:54.957003 7fa86b7fe6c0 Delete type=3 #183 | 2025/09/24-14:48:23.234727 7f7d00dfa6c0 Delete type=3 #251 | ||||||
| 2025/04/05-18:56:54.957057 7fa86b7fe6c0 Delete type=0 #185 | 2025/09/24-14:48:23.234789 7f7d00dfa6c0 Delete type=0 #253 | ||||||
|  | 2025/09/24-15:08:26.173817 7f7cf9fff6c0 Level-0 table #258: started | ||||||
|  | 2025/09/24-15:08:26.173861 7f7cf9fff6c0 Level-0 table #258: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.233062 7f7cf9fff6c0 Delete type=0 #256 | ||||||
|  | 2025/09/24-15:08:26.424194 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!2wTJBj3dicRKzNOE' @ 72057594037927935 : 1 .. '!items!ufvhWG5V8pX0qrtR' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/armures/MANIFEST-000259
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/armures/MANIFEST-000259
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/competences/000237.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/competences/000237.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000186 | MANIFEST-000258 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:48.923788 7f9c6bfff6c0 Recovering log #185 | 2025/09/24-15:09:29.084820 7f7d00dfa6c0 Recovering log #256 | ||||||
| 2025/04/05-23:14:48.933992 7f9c6bfff6c0 Delete type=0 #185 | 2025/09/24-15:09:29.094841 7f7d00dfa6c0 Delete type=3 #254 | ||||||
| 2025/04/05-23:14:48.934095 7f9c6bfff6c0 Delete type=3 #184 | 2025/09/24-15:09:29.094891 7f7d00dfa6c0 Delete type=0 #256 | ||||||
| 2025/04/05-23:15:15.781052 7f9c69bff6c0 Level-0 table #189: started | 2025/09/24-15:11:47.367611 7f7cf9fff6c0 Level-0 table #261: started | ||||||
| 2025/04/05-23:15:15.781077 7f9c69bff6c0 Level-0 table #189: 0 bytes OK | 2025/09/24-15:11:47.367694 7f7cf9fff6c0 Level-0 table #261: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.787996 7f9c69bff6c0 Delete type=0 #187 | 2025/09/24-15:11:47.374747 7f7cf9fff6c0 Delete type=0 #259 | ||||||
| 2025/04/05-23:15:15.800677 7f9c69bff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.393269 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:54.918444 7fa870bfa6c0 Recovering log #182 | 2025/09/24-14:48:23.198206 7f7cfb7fe6c0 Recovering log #252 | ||||||
| 2025/04/05-18:56:54.929675 7fa870bfa6c0 Delete type=3 #180 | 2025/09/24-14:48:23.208784 7f7cfb7fe6c0 Delete type=3 #250 | ||||||
| 2025/04/05-18:56:54.929721 7fa870bfa6c0 Delete type=0 #182 | 2025/09/24-14:48:23.208841 7f7cfb7fe6c0 Delete type=0 #252 | ||||||
|  | 2025/09/24-15:08:25.940494 7f7cf9fff6c0 Level-0 table #257: started | ||||||
|  | 2025/09/24-15:08:25.940624 7f7cf9fff6c0 Level-0 table #257: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:25.991041 7f7cf9fff6c0 Delete type=0 #255 | ||||||
|  | 2025/09/24-15:08:26.173621 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!yx4k7lQHGcom99mk' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/competences/MANIFEST-000258
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/competences/MANIFEST-000258
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000197 | MANIFEST-000269 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:48.965558 7f9c6b7fe6c0 Recovering log #196 | 2025/09/24-15:09:29.123386 7f7cfb7fe6c0 Recovering log #267 | ||||||
| 2025/04/05-23:14:48.975684 7f9c6b7fe6c0 Delete type=0 #196 | 2025/09/24-15:09:29.133578 7f7cfb7fe6c0 Delete type=3 #265 | ||||||
| 2025/04/05-23:14:48.975771 7f9c6b7fe6c0 Delete type=3 #195 | 2025/09/24-15:09:29.133633 7f7cfb7fe6c0 Delete type=0 #267 | ||||||
| 2025/04/05-23:15:15.794548 7f9c69bff6c0 Level-0 table #200: started | 2025/09/24-15:11:47.387224 7f7cf9fff6c0 Level-0 table #272: started | ||||||
| 2025/04/05-23:15:15.794568 7f9c69bff6c0 Level-0 table #200: 0 bytes OK | 2025/09/24-15:11:47.387262 7f7cf9fff6c0 Level-0 table #272: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.800586 7f9c69bff6c0 Delete type=0 #198 | 2025/09/24-15:11:47.393170 7f7cf9fff6c0 Delete type=0 #270 | ||||||
| 2025/04/05-23:15:15.800695 7f9c69bff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.393301 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:54.959243 7fa86bfff6c0 Recovering log #193 | 2025/09/24-14:48:23.237291 7f7cfb7fe6c0 Recovering log #263 | ||||||
| 2025/04/05-18:56:54.969916 7fa86bfff6c0 Delete type=3 #191 | 2025/09/24-14:48:23.248109 7f7cfb7fe6c0 Delete type=3 #261 | ||||||
| 2025/04/05-18:56:54.970132 7fa86bfff6c0 Delete type=0 #193 | 2025/09/24-14:48:23.248198 7f7cfb7fe6c0 Delete type=0 #263 | ||||||
|  | 2025/09/24-15:08:25.991148 7f7cf9fff6c0 Level-0 table #268: started | ||||||
|  | 2025/09/24-15:08:25.998446 7f7cf9fff6c0 Level-0 table #268: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.052852 7f7cf9fff6c0 Delete type=0 #266 | ||||||
|  | 2025/09/24-15:08:26.173642 7f7cf9fff6c0 Manual compaction at level-0 from '!folders!9PQi3Lv54rpcxavo' @ 72057594037927935 : 1 .. '!items!zGlRtP7zSnkjuuue' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/education/MANIFEST-000269
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/education/MANIFEST-000269
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/education/lost/000242.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/education/lost/000242.log
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/graces/000238.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/graces/000238.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/graces/000261.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/graces/000261.log
									
									
									
									
									
										Normal file
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000188 | MANIFEST-000259 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:48.980636 7f9c6bfff6c0 Recovering log #187 | 2025/09/24-15:09:29.137046 7f7d00dfa6c0 Recovering log #257 | ||||||
| 2025/04/05-23:14:48.991406 7f9c6bfff6c0 Delete type=0 #187 | 2025/09/24-15:09:29.146636 7f7d00dfa6c0 Delete type=3 #255 | ||||||
| 2025/04/05-23:14:48.991533 7f9c6bfff6c0 Delete type=3 #186 | 2025/09/24-15:09:29.146695 7f7d00dfa6c0 Delete type=0 #257 | ||||||
| 2025/04/05-23:15:15.806897 7f9c69bff6c0 Level-0 table #191: started | 2025/09/24-15:11:47.393485 7f7cf9fff6c0 Level-0 table #262: started | ||||||
| 2025/04/05-23:15:15.806941 7f9c69bff6c0 Level-0 table #191: 0 bytes OK | 2025/09/24-15:11:47.393516 7f7cf9fff6c0 Level-0 table #262: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.814152 7f9c69bff6c0 Delete type=0 #189 | 2025/09/24-15:11:47.400467 7f7cf9fff6c0 Delete type=0 #260 | ||||||
| 2025/04/05-23:15:15.826768 7f9c69bff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.419258 7f7cf9fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:54.978266 7fa870bfa6c0 Recovering log #184 | 2025/09/24-14:48:23.254619 7f7cfb7fe6c0 Recovering log #253 | ||||||
| 2025/04/05-18:56:54.988217 7fa870bfa6c0 Delete type=3 #182 | 2025/09/24-14:48:23.264677 7f7cfb7fe6c0 Delete type=3 #251 | ||||||
| 2025/04/05-18:56:54.988347 7fa870bfa6c0 Delete type=0 #184 | 2025/09/24-14:48:23.264757 7f7cfb7fe6c0 Delete type=0 #253 | ||||||
|  | 2025/09/24-15:08:26.114804 7f7cf9fff6c0 Level-0 table #258: started | ||||||
|  | 2025/09/24-15:08:26.114845 7f7cf9fff6c0 Level-0 table #258: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.173413 7f7cf9fff6c0 Delete type=0 #256 | ||||||
|  | 2025/09/24-15:08:26.173668 7f7cf9fff6c0 Manual compaction at level-0 from '!items!17mjvwS8R3B6LloG' @ 72057594037927935 : 1 .. '!items!zUYIVOuFpRur9aAR' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/graces/MANIFEST-000259
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/graces/MANIFEST-000259
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/graces/lost/000232.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/graces/lost/000232.log
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/maladies/000238.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/maladies/000238.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/maladies/000261.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/maladies/000261.log
									
									
									
									
									
										Normal file
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000188 | MANIFEST-000259 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:48.995168 7f9c6a7fc6c0 Recovering log #187 | 2025/09/24-15:09:29.148975 7f7cfbfff6c0 Recovering log #257 | ||||||
| 2025/04/05-23:14:49.005707 7f9c6a7fc6c0 Delete type=0 #187 | 2025/09/24-15:09:29.158794 7f7cfbfff6c0 Delete type=3 #255 | ||||||
| 2025/04/05-23:14:49.005879 7f9c6a7fc6c0 Delete type=3 #186 | 2025/09/24-15:09:29.158847 7f7cfbfff6c0 Delete type=0 #257 | ||||||
| 2025/04/05-23:15:15.800840 7f9c69bff6c0 Level-0 table #191: started | 2025/09/24-15:11:47.406687 7f7cf9fff6c0 Level-0 table #262: started | ||||||
| 2025/04/05-23:15:15.800872 7f9c69bff6c0 Level-0 table #191: 0 bytes OK | 2025/09/24-15:11:47.406719 7f7cf9fff6c0 Level-0 table #262: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.806702 7f9c69bff6c0 Delete type=0 #189 | 2025/09/24-15:11:47.412667 7f7cf9fff6c0 Delete type=0 #260 | ||||||
| 2025/04/05-23:15:15.826756 7f9c69bff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.419288 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:54.993562 7fa86affd6c0 Recovering log #184 | 2025/09/24-14:48:23.266851 7f7cfaffd6c0 Recovering log #253 | ||||||
| 2025/04/05-18:56:55.005280 7fa86affd6c0 Delete type=3 #182 | 2025/09/24-14:48:23.277277 7f7cfaffd6c0 Delete type=3 #251 | ||||||
| 2025/04/05-18:56:55.005390 7fa86affd6c0 Delete type=0 #184 | 2025/09/24-14:48:23.277357 7f7cfaffd6c0 Delete type=0 #253 | ||||||
|  | 2025/09/24-15:08:26.356120 7f7cf9fff6c0 Level-0 table #258: started | ||||||
|  | 2025/09/24-15:08:26.356174 7f7cf9fff6c0 Level-0 table #258: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.424036 7f7cf9fff6c0 Delete type=0 #256 | ||||||
|  | 2025/09/24-15:08:26.424252 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1icaxIywAwDXQcMz' @ 72057594037927935 : 1 .. '!items!ysGehYm1VkMWrI22' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/maladies/MANIFEST-000259
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/maladies/MANIFEST-000259
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/maladies/lost/000232.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/maladies/lost/000232.log
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/scenes/000198.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/scenes/000198.log
									
									
									
									
									
										Normal file
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000126 | MANIFEST-000196 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:49.022817 7f9c6b7fe6c0 Recovering log #125 | 2025/09/24-15:09:29.173945 7f7cfb7fe6c0 Recovering log #194 | ||||||
| 2025/04/05-23:14:49.033064 7f9c6b7fe6c0 Delete type=0 #125 | 2025/09/24-15:09:29.183658 7f7cfb7fe6c0 Delete type=3 #192 | ||||||
| 2025/04/05-23:14:49.033117 7f9c6b7fe6c0 Delete type=3 #124 | 2025/09/24-15:09:29.183716 7f7cfb7fe6c0 Delete type=0 #194 | ||||||
| 2025/04/05-23:15:15.820812 7f9c69bff6c0 Level-0 table #129: started | 2025/09/24-15:11:47.412789 7f7cf9fff6c0 Level-0 table #199: started | ||||||
| 2025/04/05-23:15:15.820832 7f9c69bff6c0 Level-0 table #129: 0 bytes OK | 2025/09/24-15:11:47.412823 7f7cf9fff6c0 Level-0 table #199: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.826647 7f9c69bff6c0 Delete type=0 #127 | 2025/09/24-15:11:47.419140 7f7cf9fff6c0 Delete type=0 #197 | ||||||
| 2025/04/05-23:15:15.826788 7f9c69bff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.419299 7f7cf9fff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:55.022532 7fa86bfff6c0 Recovering log #122 | 2025/09/24-14:48:23.292184 7f7d00dfa6c0 Recovering log #190 | ||||||
| 2025/04/05-18:56:55.035510 7fa86bfff6c0 Delete type=3 #120 | 2025/09/24-14:48:23.302049 7f7d00dfa6c0 Delete type=3 #188 | ||||||
| 2025/04/05-18:56:55.035608 7fa86bfff6c0 Delete type=0 #122 | 2025/09/24-14:48:23.302138 7f7d00dfa6c0 Delete type=0 #190 | ||||||
|  | 2025/09/24-15:08:26.233213 7f7cf9fff6c0 Level-0 table #195: started | ||||||
|  | 2025/09/24-15:08:26.233253 7f7cf9fff6c0 Level-0 table #195: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.291256 7f7cf9fff6c0 Delete type=0 #193 | ||||||
|  | 2025/09/24-15:08:26.424217 7f7cf9fff6c0 Manual compaction at level-0 from '!scenes!FJXugdbkBpEJEdR6' @ 72057594037927935 : 1 .. '!scenes!FJXugdbkBpEJEdR6' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/scenes/MANIFEST-000196
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/scenes/MANIFEST-000196
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/scenes/lost/000169.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/scenes/lost/000169.log
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/simples/000239.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/simples/000239.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/simples/000262.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/simples/000262.log
									
									
									
									
									
										Normal file
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000188 | MANIFEST-000260 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/04/05-23:14:49.009401 7f9c6affd6c0 Recovering log #187 | 2025/09/24-15:09:29.160816 7f7cfaffd6c0 Recovering log #258 | ||||||
| 2025/04/05-23:14:49.019412 7f9c6affd6c0 Delete type=0 #187 | 2025/09/24-15:09:29.171382 7f7cfaffd6c0 Delete type=3 #256 | ||||||
| 2025/04/05-23:14:49.019467 7f9c6affd6c0 Delete type=3 #186 | 2025/09/24-15:09:29.171436 7f7cfaffd6c0 Delete type=0 #258 | ||||||
| 2025/04/05-23:15:15.814317 7f9c69bff6c0 Level-0 table #191: started | 2025/09/24-15:11:47.400600 7f7cf9fff6c0 Level-0 table #263: started | ||||||
| 2025/04/05-23:15:15.814353 7f9c69bff6c0 Level-0 table #191: 0 bytes OK | 2025/09/24-15:11:47.400625 7f7cf9fff6c0 Level-0 table #263: 0 bytes OK | ||||||
| 2025/04/05-23:15:15.820737 7f9c69bff6c0 Delete type=0 #189 | 2025/09/24-15:11:47.406556 7f7cf9fff6c0 Delete type=0 #261 | ||||||
| 2025/04/05-23:15:15.826778 7f9c69bff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end) | 2025/09/24-15:11:47.419275 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
| 2025/04/05-18:56:55.008325 7fa86b7fe6c0 Recovering log #184 | 2025/09/24-14:48:23.279296 7f7cfbfff6c0 Recovering log #254 | ||||||
| 2025/04/05-18:56:55.018646 7fa86b7fe6c0 Delete type=3 #182 | 2025/09/24-14:48:23.289583 7f7cfbfff6c0 Delete type=3 #252 | ||||||
| 2025/04/05-18:56:55.018796 7fa86b7fe6c0 Delete type=0 #184 | 2025/09/24-14:48:23.289682 7f7cfbfff6c0 Delete type=0 #254 | ||||||
|  | 2025/09/24-15:08:26.291500 7f7cf9fff6c0 Level-0 table #259: started | ||||||
|  | 2025/09/24-15:08:26.291565 7f7cf9fff6c0 Level-0 table #259: 0 bytes OK | ||||||
|  | 2025/09/24-15:08:26.355943 7f7cf9fff6c0 Delete type=0 #257 | ||||||
|  | 2025/09/24-15:08:26.424235 7f7cf9fff6c0 Manual compaction at level-0 from '!items!1bAL2MQVpVBd0c5Z' @ 72057594037927935 : 1 .. '!items!zs67k4sxCid6oTK3' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs/simples/MANIFEST-000260
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs/simples/MANIFEST-000260
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs/simples/lost/000233.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs/simples/lost/000233.log
									
									
									
									
									
										Normal file
									
								
							| @@ -886,16 +886,12 @@ ul, li { | |||||||
| 	border-radius: 0; | 	border-radius: 0; | ||||||
| 	background: rgba(30, 25, 20, 1); | 	background: rgba(30, 25, 20, 1); | ||||||
| 	background-origin: padding-box; | 	background-origin: padding-box; | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| } | } | ||||||
| #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { | #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { | ||||||
| 	background: rgba(72, 46, 28, 1); | 	background: rgba(72, 46, 28, 1); | ||||||
| 	background-origin: padding-box; | 	background-origin: padding-box; | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| 	box-shadow: 0 0 3px #ff6400; | 	box-shadow: 0 0 3px #ff6400; | ||||||
| @@ -907,7 +903,6 @@ ul, li { | |||||||
| 			box-shadow: 2px 2px 5px #000000; | 			box-shadow: 2px 2px 5px #000000; | ||||||
| 		} | 		} | ||||||
| 		.macro { | 		.macro { | ||||||
| 			-o-border-image: url(img/ui/bg_control.jpg) 21 repeat; |  | ||||||
| 			border-image: url(img/ui/bg_control.jpg) 21 repeat; | 			border-image: url(img/ui/bg_control.jpg) 21 repeat; | ||||||
| 			border-image-slice: 6 6 6 6 fill; | 			border-image-slice: 6 6 6 6 fill; | ||||||
| 			border-image-width: 6px 6px 6px 6px; | 			border-image-width: 6px 6px 6px 6px; | ||||||
| @@ -921,8 +916,6 @@ ul, li { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| #players { | #players { | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| 	background: rgba(30, 25, 20, 1); | 	background: rgba(30, 25, 20, 1); | ||||||
| @@ -933,8 +926,6 @@ ul, li { | |||||||
| 			&.nav-item { | 			&.nav-item { | ||||||
| 				background: rgba(30, 25, 20, 1); | 				background: rgba(30, 25, 20, 1); | ||||||
| 				background-origin: padding-box; | 				background-origin: padding-box; | ||||||
| 				-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 				border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 				border-image-width: 4px; | 				border-image-width: 4px; | ||||||
| 				border-image-outset: 0px; | 				border-image-outset: 0px; | ||||||
| 				&.active { | 				&.active { | ||||||
| @@ -946,8 +937,6 @@ ul, li { | |||||||
| 	#nav-toggle { | 	#nav-toggle { | ||||||
| 		background: rgba(30, 25, 20, 1); | 		background: rgba(30, 25, 20, 1); | ||||||
| 		background-origin: padding-box; | 		background-origin: padding-box; | ||||||
| 		-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 		border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 		border-image-width: 4px; | 		border-image-width: 4px; | ||||||
| 		border-image-outset: 0px; | 		border-image-outset: 0px; | ||||||
| 	} | 	} | ||||||
| @@ -955,8 +944,6 @@ ul, li { | |||||||
| #navigation #scene-list .scene.view, #navigation #scene-list .scene.context { | #navigation #scene-list .scene.view, #navigation #scene-list .scene.context { | ||||||
| 	background: rgba(72, 46, 28, 1); | 	background: rgba(72, 46, 28, 1); | ||||||
| 	background-origin: padding-box; | 	background-origin: padding-box; | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| 	box-shadow: 0 0 3px #ff6400; | 	box-shadow: 0 0 3px #ff6400; | ||||||
| @@ -1105,6 +1092,11 @@ ul, li { | |||||||
| .item-field { | .item-field { | ||||||
| 	margin-top: 4px; | 	margin-top: 4px; | ||||||
| } | } | ||||||
|  | .item-field-xp { | ||||||
|  | 	margin-top: 4px; | ||||||
|  |   min-width: 8rem; | ||||||
|  |   max-width: 8rem; | ||||||
|  | } | ||||||
| .item-field-label-short { | .item-field-label-short { | ||||||
| 	flex-grow: 1; | 	flex-grow: 1; | ||||||
| 	max-width: 4rem; | 	max-width: 4rem; | ||||||
| @@ -1245,27 +1237,27 @@ ul, li { | |||||||
|  |  | ||||||
| .chat-message .message { | .chat-message .message { | ||||||
|   font-family: "GreatPrimer"; |   font-family: "GreatPrimer"; | ||||||
|   font-size: 0.9rem;  |   font-size: 0.9rem; | ||||||
| } | } | ||||||
|  |  | ||||||
| .skill-roll-dialog { | .skill-roll-dialog { | ||||||
|   font-family: "GreatPrimer"; |   font-family: "GreatPrimer"; | ||||||
|   font-size: 0.9rem;  |   font-size: 0.9rem; | ||||||
| } | } | ||||||
|  |  | ||||||
| .fvtt-te-deum-character-creator { | .fvtt-te-deum-character-creator { | ||||||
|   background: rgba(226, 226, 222, 0.95); |   /*background: rgba(226, 226, 222, 0.95);*/ | ||||||
|   font-family: "GreatPrimer"; |   font-family: "GreatPrimer"; | ||||||
|   font-size: 0.9rem;  |   font-size: 0.9rem; | ||||||
|   .field-title { |   .field-title { | ||||||
|     font-weight: bold; |     font-weight: bold; | ||||||
|   } |   } | ||||||
|   .status-section { |   .status-section { | ||||||
|     display: block;  |     display: block; | ||||||
|     max-width: 34rem; |     max-width: 34rem; | ||||||
|   } |   } | ||||||
|   .creator-finished-section { |   .creator-finished-section { | ||||||
|     display: block;  |     display: block; | ||||||
|     max-width: 34rem; |     max-width: 34rem; | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     margin-bottom: 1rem; |     margin-bottom: 1rem; | ||||||
| @@ -1301,4 +1293,7 @@ ul, li { | |||||||
|   padding: 1px 0.5rem 0 0.25rem; |   padding: 1px 0.5rem 0 0.25rem; | ||||||
|   border-radius: 0 3px 0 0; |   border-radius: 0 3px 0 0; | ||||||
|   background: rgba(0, 0, 0, 0.1); |   background: rgba(0, 0, 0, 0.1); | ||||||
|  | } | ||||||
|  | .tedeum-create-character { | ||||||
|  |   align-self: anchor-center; | ||||||
| } | } | ||||||
| @@ -834,16 +834,12 @@ ul, li { | |||||||
| 	border-radius: 0; | 	border-radius: 0; | ||||||
| 	background: rgba(30, 25, 20, 1); | 	background: rgba(30, 25, 20, 1); | ||||||
| 	background-origin: padding-box; | 	background-origin: padding-box; | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| } | } | ||||||
| #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { | #controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { | ||||||
| 	background: rgba(72, 46, 28, 1); | 	background: rgba(72, 46, 28, 1); | ||||||
| 	background-origin: padding-box; | 	background-origin: padding-box; | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| 	box-shadow: 0 0 3px #ff6400; | 	box-shadow: 0 0 3px #ff6400; | ||||||
| @@ -854,7 +850,7 @@ ul, li { | |||||||
| 		} | 		} | ||||||
| #hotbar #action-bar .macro { | #hotbar #action-bar .macro { | ||||||
| 			-o-border-image: url(img/ui/bg_control.jpg) 21 repeat; | 			-o-border-image: url(img/ui/bg_control.jpg) 21 repeat; | ||||||
| 			border-image: url(img/ui/bg_control.jpg) 21 repeat; | 			   border-image: url(img/ui/bg_control.jpg) 21 repeat; | ||||||
| 			border-image-slice: 6 6 6 6 fill; | 			border-image-slice: 6 6 6 6 fill; | ||||||
| 			border-image-width: 6px 6px 6px 6px; | 			border-image-width: 6px 6px 6px 6px; | ||||||
| 			border-image-outset: 0px 0px 0px 0px; | 			border-image-outset: 0px 0px 0px 0px; | ||||||
| @@ -865,8 +861,6 @@ ul, li { | |||||||
| 		border: 1px solid rgba(72, 46, 28, 1); | 		border: 1px solid rgba(72, 46, 28, 1); | ||||||
| 	} | 	} | ||||||
| #players { | #players { | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| 	background: rgba(30, 25, 20, 1); | 	background: rgba(30, 25, 20, 1); | ||||||
| @@ -874,8 +868,6 @@ ul, li { | |||||||
| #navigation #scene-list .scene.nav-item { | #navigation #scene-list .scene.nav-item { | ||||||
| 				background: rgba(30, 25, 20, 1); | 				background: rgba(30, 25, 20, 1); | ||||||
| 				background-origin: padding-box; | 				background-origin: padding-box; | ||||||
| 				-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 				border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 				border-image-width: 4px; | 				border-image-width: 4px; | ||||||
| 				border-image-outset: 0px | 				border-image-outset: 0px | ||||||
| 			} | 			} | ||||||
| @@ -885,16 +877,12 @@ ul, li { | |||||||
| #navigation #nav-toggle { | #navigation #nav-toggle { | ||||||
| 		background: rgba(30, 25, 20, 1); | 		background: rgba(30, 25, 20, 1); | ||||||
| 		background-origin: padding-box; | 		background-origin: padding-box; | ||||||
| 		-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 		border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 		border-image-width: 4px; | 		border-image-width: 4px; | ||||||
| 		border-image-outset: 0px; | 		border-image-outset: 0px; | ||||||
| 	} | 	} | ||||||
| #navigation #scene-list .scene.view, #navigation #scene-list .scene.context { | #navigation #scene-list .scene.view, #navigation #scene-list .scene.context { | ||||||
| 	background: rgba(72, 46, 28, 1); | 	background: rgba(72, 46, 28, 1); | ||||||
| 	background-origin: padding-box; | 	background-origin: padding-box; | ||||||
| 	-o-border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image: url(img/ui/footer-button.png) 10 repeat; |  | ||||||
| 	border-image-width: 4px; | 	border-image-width: 4px; | ||||||
| 	border-image-outset: 0px; | 	border-image-outset: 0px; | ||||||
| 	box-shadow: 0 0 3px #ff6400; | 	box-shadow: 0 0 3px #ff6400; | ||||||
| @@ -1045,6 +1033,11 @@ ul, li { | |||||||
| .item-field { | .item-field { | ||||||
| 	margin-top: 4px; | 	margin-top: 4px; | ||||||
| } | } | ||||||
|  | .item-field-xp { | ||||||
|  | 	margin-top: 4px; | ||||||
|  |   min-width: 8rem; | ||||||
|  |   max-width: 8rem; | ||||||
|  | } | ||||||
| .item-field-label-short { | .item-field-label-short { | ||||||
| 	flex-grow: 1; | 	flex-grow: 1; | ||||||
| 	max-width: 4rem; | 	max-width: 4rem; | ||||||
| @@ -1182,16 +1175,16 @@ ul, li { | |||||||
|  |  | ||||||
| .chat-message .message { | .chat-message .message { | ||||||
|   font-family: "GreatPrimer"; |   font-family: "GreatPrimer"; | ||||||
|   font-size: 0.9rem;  |   font-size: 0.9rem; | ||||||
| } | } | ||||||
|  |  | ||||||
| .skill-roll-dialog { | .skill-roll-dialog { | ||||||
|   font-family: "GreatPrimer"; |   font-family: "GreatPrimer"; | ||||||
|   font-size: 0.9rem;  |   font-size: 0.9rem; | ||||||
| } | } | ||||||
|  |  | ||||||
| .fvtt-te-deum-character-creator { | .fvtt-te-deum-character-creator { | ||||||
|   background: rgba(226, 226, 222, 0.95); |   /*background: rgba(226, 226, 222, 0.95);*/ | ||||||
|   font-family: "GreatPrimer"; |   font-family: "GreatPrimer"; | ||||||
|   font-size: 0.9rem; |   font-size: 0.9rem; | ||||||
| } | } | ||||||
| @@ -1201,12 +1194,12 @@ ul, li { | |||||||
|   } |   } | ||||||
|  |  | ||||||
| .fvtt-te-deum-character-creator .status-section { | .fvtt-te-deum-character-creator .status-section { | ||||||
|     display: block;  |     display: block; | ||||||
|     max-width: 34rem; |     max-width: 34rem; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| .fvtt-te-deum-character-creator .creator-finished-section { | .fvtt-te-deum-character-creator .creator-finished-section { | ||||||
|     display: block;  |     display: block; | ||||||
|     max-width: 34rem; |     max-width: 34rem; | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     margin-bottom: 1rem; |     margin-bottom: 1rem; | ||||||
| @@ -1242,4 +1235,7 @@ ul, li { | |||||||
|   padding: 1px 0.5rem 0 0.25rem; |   padding: 1px 0.5rem 0 0.25rem; | ||||||
|   border-radius: 0 3px 0 0; |   border-radius: 0 3px 0 0; | ||||||
|   background: rgba(0, 0, 0, 0.1); |   background: rgba(0, 0, 0, 0.1); | ||||||
|  | } | ||||||
|  | .tedeum-create-character { | ||||||
|  |   align-self: anchor-center; | ||||||
| } | } | ||||||
							
								
								
									
										18
									
								
								system.json
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								system.json
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ | |||||||
|   "esmodules": [ |   "esmodules": [ | ||||||
|     "modules/tedeum-main.js" |     "modules/tedeum-main.js" | ||||||
|   ], |   ], | ||||||
|   "grid": {  |   "grid": { | ||||||
|     "distance": 2, |     "distance": 2, | ||||||
|     "units": "m" |     "units": "m" | ||||||
|   }, |   }, | ||||||
| @@ -134,22 +134,22 @@ | |||||||
|   "license": "LICENSE.txt", |   "license": "LICENSE.txt", | ||||||
|   "manifest": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json", |   "manifest": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/latest/system.json", | ||||||
|   "compatibility": { |   "compatibility": { | ||||||
|     "minimum": "12", |     "minimum": "13", | ||||||
|     "verified": "12" |     "verified": "13" | ||||||
|   }, |   }, | ||||||
|   "id": "fvtt-te-deum", |   "id": "fvtt-te-deum", | ||||||
|   "primaryTokenAttribute": "secondary.health", |   "primaryTokenAttribute": "secondary.health", | ||||||
|   "secondaryTokenAttribute": "secondary.delirium", |   "secondaryTokenAttribute": "secondary.delirium", | ||||||
|   "socket": true, |   "socket": true, | ||||||
|   "styles": [ |   "styles": [ | ||||||
|     "styles/tedeum.css" |     { | ||||||
|  |       "src": "styles/tedeum.css" | ||||||
|  |     } | ||||||
|   ], |   ], | ||||||
|   "relationships": { |  | ||||||
|   }, |  | ||||||
|   "title": "Te Deum pour Un Massacre, le Jeu de Rôles (Officiel)", |   "title": "Te Deum pour Un Massacre, le Jeu de Rôles (Officiel)", | ||||||
|   "url": "https://www.uberwald.me/gitea/public/fvtt-te-deum", |   "url": "https://www.uberwald.me/gitea/public/fvtt-te-deum", | ||||||
|   "version": "12.0.17", |   "version": "13.0.1", | ||||||
|   "download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/archive/fvtt-te-deum-v12.0.17.zip", |   "download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/releases/download/13.0.1/fvtt-te-deum-13.0.1.zip", | ||||||
|   "background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp", |   "background": "systems/fvtt-te-deum/images/ui/tdeum_welcome_page_01.webp", | ||||||
|   "flags": { |   "flags": { | ||||||
|     "hotReload": { |     "hotReload": { | ||||||
| @@ -166,4 +166,4 @@ | |||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -40,30 +40,35 @@ | |||||||
|       <div class="grid grid-2col"> |       <div class="grid grid-2col"> | ||||||
|  |  | ||||||
|         <div> |         <div> | ||||||
|         <ul class="item-list alternate-list"> |           <ul class="item-list alternate-list"> | ||||||
|           {{#each caracList as |char key|}} |             {{#each caracList as |char key|}} | ||||||
|           <li class="item flexrow list-item carac-box"> |             <li class="item flexrow list-item carac-box"> | ||||||
|             <img class="sheet-competence-img" src="/systems/fvtt-te-deum/images/icons/{{key}}.webp" /> |               <img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" /> | ||||||
|             <label class="item-left-pad item-field item-field-label-medium" data-tooltip="{{char.description}}">{{char.name}}</label> |               <label class="item-left-pad item-field item-field-label-medium" | ||||||
|             <select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value" |                 data-tooltip="{{char.description}}">{{char.name}}</label> | ||||||
|               data-dtype="Number" /> |               <select type="text" class="input-numeric-short" name="system.caracteristiques.{{key}}.value" | ||||||
|             {{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}} |                 data-dtype="Number" /> | ||||||
|             </select> |               {{selectOptions @root.config.descriptionValeur selected=char.value labelAttr="valeur"}} | ||||||
|             <label class="item-field item-field-label-medium">{{char.qualite}}</label> |               </select> | ||||||
|             <label class="item-field item-field-label-medium">{{char.dice}} ({{char.negativeDice}})</label> |               <label class="item-field item-field-label-medium">{{char.qualite}}</label> | ||||||
|           </li> |               <label class="item-field item-field-label-medium">{{char.dice}} ({{char.negativeDice}})</label> | ||||||
|           {{/each}} |             </li> | ||||||
|         </ul> |             {{/each}} | ||||||
|          |           </ul> | ||||||
|         <div> |  | ||||||
|           <h4>Malus de santé : {{santeModifier}} niveaux</h4> |  | ||||||
|         </div> |  | ||||||
|  |  | ||||||
|         <ul class="item-list alternate-list"> |           <div> | ||||||
|  |             <h4>Malus de santé : {{santeModifier}} niveaux</h4> | ||||||
|  |           </div> | ||||||
|  |  | ||||||
|  |           <ul class="item-list alternate-list"> | ||||||
|             <li class="item flexrow list-item items-title-bg"> |             <li class="item flexrow list-item items-title-bg"> | ||||||
|               <span class="item-field-title-long"> |               <span class="item-field-title-long"> | ||||||
|                 <h3><label class="item-field-label-long">Blessures</label></h3> |                 <h3><label class="item-field-label-long">Blessures</label></h3> | ||||||
|               </span> |               </span> | ||||||
|  |               <div class="item-controls item-controls-fixed"> | ||||||
|  |                 <a class="item-control blessure-add" data-type="blessure" title="Ajouter une Blessure"><i class="fas fa-plus"></i></a> | ||||||
|  |               </div> | ||||||
|  |  | ||||||
|             </li> |             </li> | ||||||
|             {{#each blessures as |blessure key|}} |             {{#each blessures as |blessure key|}} | ||||||
|             <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}"> |             <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{blessure._id}}"> | ||||||
| @@ -91,7 +96,7 @@ | |||||||
|           </ul> |           </ul> | ||||||
|  |  | ||||||
|           {{#if (or (count maladies) (count poisons))}} |           {{#if (or (count maladies) (count poisons))}} | ||||||
|           <ul class="item-list alternate-list">  |           <ul class="item-list alternate-list"> | ||||||
|             <li class="item flexrow list-item items-title-bg"> |             <li class="item flexrow list-item items-title-bg"> | ||||||
|               <span class="item-field-title-long"> |               <span class="item-field-title-long"> | ||||||
|                 <h3><label class="item-field-label-long">Maladies & Poisons</label></h3> |                 <h3><label class="item-field-label-long">Maladies & Poisons</label></h3> | ||||||
| @@ -140,7 +145,8 @@ | |||||||
|         <div> |         <div> | ||||||
|           <ul class="item-list alternate-list"> |           <ul class="item-list alternate-list"> | ||||||
|             <li class="item flexrow list-item carac-box"> |             <li class="item flexrow list-item carac-box"> | ||||||
|               <label class="item-left-pad  item-field item-field-label-medium" data-tooltip="{{providence.description}}">Providence</label> |               <label class="item-left-pad  item-field item-field-label-medium" | ||||||
|  |                 data-tooltip="{{providence.description}}">Providence</label> | ||||||
|               <select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" /> |               <select type="text" class="input-numeric-short" name="system.providence.value" data-dtype="Number" /> | ||||||
|               {{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value" |               {{selectOptions @root.config.providence selected=providence.value nameAttr="value" valueAttr="value" | ||||||
|               labelAttr="value"}} |               labelAttr="value"}} | ||||||
| @@ -149,16 +155,21 @@ | |||||||
|               <label class="item-field item-field-label-short">{{providence.dice}}</label> |               <label class="item-field item-field-label-short">{{providence.dice}}</label> | ||||||
|             </li> |             </li> | ||||||
|             <li class="item flexrow list-item carac-box"> |             <li class="item flexrow list-item carac-box"> | ||||||
|               <label class="item-left-pad item-field item-field-label-medium" data-tooltip=" La Bienveillance n’est pas à proprement parler une compétence : il s’agit de l’évaluation chiffrée de l'atta- chement que l'ange gardien du personnage éprouve pour son protégé. Cet attachement peut se détériorer si le personnage se montre indigne ou mauvais, et s'érode avec l’âge. La Bienveillance a un score initial de 10 pour un nouveau PJ ayant moins de 30 ans."> |               <label class="item-left-pad item-field item-field-label-medium" | ||||||
|  |                 data-tooltip=" La Bienveillance n’est pas à proprement parler une compétence : il s’agit de l’évaluation chiffrée de l'atta- chement que l'ange gardien du personnage éprouve pour son protégé. Cet attachement peut se détériorer si le personnage se montre indigne ou mauvais, et s'érode avec l’âge. La Bienveillance a un score initial de 10 pour un nouveau PJ ayant moins de 30 ans."> | ||||||
|                 Bienveillance</label> |                 Bienveillance</label> | ||||||
|               <input class="input-numeric-short" type="text" name="system.bienveillance.value" value="{{system.bienveillance.value}}" data-dtype="Number" /> |               <input class="input-numeric-short" type="text" name="system.bienveillance.value" | ||||||
|  |                 value="{{system.bienveillance.value}}" data-dtype="Number" /> | ||||||
|               <label class="item-left-pad item-field item-field-label-medium">Bonus dégats</label> |               <label class="item-left-pad item-field item-field-label-medium">Bonus dégats</label> | ||||||
|               <input class="input-numeric-short" type="text" value="{{bonusDegats.label}}" disabled data-dtype="Number" /> |               <input class="input-numeric-short" type="text" value="{{bonusDegats.value}}" disabled | ||||||
|  |                 data-dtype="Number" /> | ||||||
|             </li> |             </li> | ||||||
|             <li class="item flexrow list-item carac-box"> |             <li class="item flexrow list-item carac-box"> | ||||||
|               <label class="item-left-pad item-field item-field-label-medium">Armures Lourdes</label> |               <label class="item-left-pad item-field item-field-label-medium">Armures Lourdes</label> | ||||||
|               <input class="input-numeric-short" type="text" value="{{nbArmuresLourdes}}" disabled data-dtype="Number" /> /   |               <input class="input-numeric-short" type="text" value="{{nbArmuresLourdes}}" disabled | ||||||
|               <input class="input-numeric-short" type="text" value="{{pointsArmuresLourdes.value}}" disabled data-dtype="Number" /> |                 data-dtype="Number" /> /  | ||||||
|  |               <input class="input-numeric-short" type="text" value="{{pointsArmuresLourdes.value}}" disabled | ||||||
|  |                 data-dtype="Number" /> | ||||||
|               <label class="item-left-pad item-field item-field-label-medium">Actions/Tour</label> |               <label class="item-left-pad item-field item-field-label-medium">Actions/Tour</label> | ||||||
|               <input class="input-numeric-short" type="text" value="{{nbActions.value}}" disabled data-dtype="Number" /> |               <input class="input-numeric-short" type="text" value="{{nbActions.value}}" disabled data-dtype="Number" /> | ||||||
|             </li> |             </li> | ||||||
| @@ -172,8 +183,8 @@ | |||||||
|               <div class="item-filler"> </div> |               <div class="item-filler"> </div> | ||||||
|               <div class="item-controls item-controls-fixed"> |               <div class="item-controls item-controls-fixed"> | ||||||
|                 <a class="item-control item-add" data-type="grace" title="Créer une Grâce"><i |                 <a class="item-control item-add" data-type="grace" title="Créer une Grâce"><i | ||||||
|                   class="fas fa-plus"></i></a> |                     class="fas fa-plus"></i></a> | ||||||
|               </div>               |               </div> | ||||||
|             </li> |             </li> | ||||||
|             {{#each graces as |grace key|}} |             {{#each graces as |grace key|}} | ||||||
|             <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{grace._id}}"> |             <li class="item flexrow list-item list-item-shadow item-id" data-item-id="{{grace._id}}"> | ||||||
| @@ -201,22 +212,23 @@ | |||||||
|       {{#each arbreCompetences as |carac key|}} |       {{#each arbreCompetences as |carac key|}} | ||||||
|       <ul> |       <ul> | ||||||
|         <li class="flexrow"> |         <li class="flexrow"> | ||||||
|           <img class="sheet-competence-img" src="/systems/fvtt-te-deum/images/icons/{{key}}.webp" /> |           <img class="sheet-competence-img" src="systems/fvtt-te-deum/images/icons/{{key}}.webp" /> | ||||||
|           <h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3> |           <h3 class="item-field-label-long14" data-tooltip="Caracteristique">{{carac.name}} : {{carac.qualite}}</h3> | ||||||
|           <label class="item-field item-field-label-short">{{carac.value}}</label> |           <label class="item-field item-field-label-short">{{carac.value}}</label> | ||||||
|           <label class="item-field ">{{carac.dice}} (xp :  |           <label class="item-field-xp ">{{carac.dice}} (xp : | ||||||
|             {{#if @root.isGM}} |             {{#if @root.isGM}} | ||||||
|             <input class="input-numeric-short" type="text" name="system.caracteristiques.{{key}}.experience" value="{{carac.experience}}" data-dtype="Number" /> |             <input class="input-numeric-short" type="text" name="system.caracteristiques.{{key}}.experience" | ||||||
|  |               value="{{carac.experience}}" data-dtype="Number" /> | ||||||
|             {{else}} |             {{else}} | ||||||
|             {{carac.experience}}) |             {{carac.experience}}) | ||||||
|             {{/if}} |             {{/if}} | ||||||
|             ) |             ) | ||||||
|           </label> |           </label> | ||||||
|           <div class="item-filler"> </div> |           <div class="item-filler"> </div> | ||||||
|             <div class="item-controls item-controls-fixed"> |           <div class="item-controls item-controls-fixed"> | ||||||
|               <a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}" title="Ajouter une Compétence"><i |             <a class="item-control competence-add" data-type="competence" data-carac-key="{{key}}" | ||||||
|                 class="fas fa-plus"></i></a> |               title="Ajouter une Compétence"><i class="fas fa-plus"></i></a> | ||||||
|             </div>               |           </div> | ||||||
|         </li> |         </li> | ||||||
|         <ul class="ul-level1 flexrow item-list"> |         <ul class="ul-level1 flexrow item-list"> | ||||||
|           {{#each carac.competences as |comp skillkey|}} |           {{#each carac.competences as |comp skillkey|}} | ||||||
| @@ -267,11 +279,13 @@ | |||||||
|           </span> |           </span> | ||||||
|           <span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span> |           <span class="item-field-label-medium">{{upperFirst arme.system.typeArme}}</span> | ||||||
|           <span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span> |           <span class="item-field-label-medium">{{upperFirst arme.system.competence}}</span> | ||||||
|           <span class="item-field-label-medium"><a class="roll-degats" data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span> |           <span class="item-field-label-medium"><a class="roll-degats" | ||||||
|  |               data-arme-id="{{arme._id}}">{{arme.system.degats}}</a></span> | ||||||
|  |  | ||||||
|           <div class="item-filler"> </div> |           <div class="item-filler"> </div> | ||||||
|           <div class="item-controls item-controls-fixed-full"> |           <div class="item-controls item-controls-fixed-full"> | ||||||
|             <a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"{{/unless}}> |             <a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;" | ||||||
|  |               {{/unless}}> | ||||||
|               <i class="fas fa-shield-alt"></i> |               <i class="fas fa-shield-alt"></i> | ||||||
|             </a> |             </a> | ||||||
|             <a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> |             <a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a> | ||||||
| @@ -297,7 +311,8 @@ | |||||||
|  |  | ||||||
|           <div class="item-filler"> </div> |           <div class="item-filler"> </div> | ||||||
|           <div class="item-controls item-controls-fixed-full"> |           <div class="item-controls item-controls-fixed-full"> | ||||||
|             <a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"{{/unless}}> |             <a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;" | ||||||
|  |               {{/unless}}> | ||||||
|               <i class="fas fa-shield-alt"></i> |               <i class="fas fa-shield-alt"></i> | ||||||
|             </a> |             </a> | ||||||
|             <a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a> |             <a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a> | ||||||
| @@ -309,22 +324,22 @@ | |||||||
|  |  | ||||||
|       <div class="center-content"> |       <div class="center-content"> | ||||||
|         <div class="corps-combat-block flexrow"> |         <div class="corps-combat-block flexrow"> | ||||||
|           <img src="/systems/fvtt-te-deum/images/ui/femme_gauche.webp" class="silhouette-combat-picture" /> |           <img src="systems/fvtt-te-deum/images/ui/femme_gauche.webp" class="silhouette-combat-picture" /> | ||||||
|           <div class="silhouette-combat-space"></div> |           <div class="silhouette-combat-space"></div> | ||||||
|           <img src="/systems/fvtt-te-deum/images/ui/homme_droit.webp" class="silhouette-combat-picture" /> |           <img src="systems/fvtt-te-deum/images/ui/homme_droit.webp" class="silhouette-combat-picture" /> | ||||||
|  |  | ||||||
|           {{#each combat as |loc key|}} |           {{#each combat as |loc key|}} | ||||||
|           <div class="silhouette-combat-block" style="top:{{loc.coord.top}}px;left:{{loc.coord.left}}px;"> |           <div class="silhouette-combat-block" style="top:{{loc.coord.top}}px;left:{{loc.coord.left}}px;"> | ||||||
|             <h4 class="center">{{loc.score.min}}-{{loc.score.max}}. {{loc.label}}</h4> |             <h4 class="center">{{loc.score.min}}-{{loc.score.max}}. {{loc.label}}</h4> | ||||||
|             <div class="flexcol"> |             <div class="flexcol"> | ||||||
|               {{#each loc.armures as |armure idx| }} |               {{#each loc.armures as |armure idx| }} | ||||||
|                 <span>{{armure.name}} ({{armure.system.protection}})</span> |               <span>{{armure.name}} ({{armure.system.protection}})</span> | ||||||
|               {{/each}} |               {{/each}} | ||||||
|               <span>Touché : {{touche}}</span> |               <span>Touché : {{touche}}</span> | ||||||
|               <span>Blessures : </span> |               <span>Blessures : </span> | ||||||
|               {{#each loc.blessures as |blessure idx| }} |               {{#each loc.blessures as |blessure idx| }} | ||||||
|                 <span>{{blessure.name}} ({{blessure.malus}})</span> |               <span>{{blessure.name}} ({{blessure.malus}})</span> | ||||||
|               {{/each}}   |               {{/each}} | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|           {{/each}} |           {{/each}} | ||||||
| @@ -345,7 +360,7 @@ | |||||||
|           <input type="text" class="input-numeric-short" name="system.fortune.{{key}}" value="{{fortune}}" |           <input type="text" class="input-numeric-short" name="system.fortune.{{key}}" value="{{fortune}}" | ||||||
|             data-dtype="Number" /> |             data-dtype="Number" /> | ||||||
|         </div> |         </div> | ||||||
|         {{/each}}       |         {{/each}} | ||||||
|       </div> |       </div> | ||||||
|  |  | ||||||
|       <span class="item-name-label-header items-title-bg"> |       <span class="item-name-label-header items-title-bg"> | ||||||
| @@ -375,7 +390,7 @@ | |||||||
|           <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" |           <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" | ||||||
|               src="{{equip.img}}" /></a> |               src="{{equip.img}}" /></a> | ||||||
|           <span class="item-name-label">{{equip.name}}</span> |           <span class="item-name-label">{{equip.name}}</span> | ||||||
|           <span class="item-field-label-medium">{{equip.system.prix}} {{equip.system.monnaie}}</span> |           <span class="item-field-label-medium">{{equip.system.prix}} {{monnaie equip.system.monnaie}}</span> | ||||||
|  |  | ||||||
|           <div class="item-filler"> </div> |           <div class="item-filler"> </div> | ||||||
|           <div class="item-controls item-controls-fixed"> |           <div class="item-controls item-controls-fixed"> | ||||||
| @@ -384,7 +399,38 @@ | |||||||
|           </div> |           </div> | ||||||
|         </li> |         </li> | ||||||
|         {{/each}} |         {{/each}} | ||||||
|  |  | ||||||
|       </ul> |       </ul> | ||||||
|  |  | ||||||
|  |       <ul class="item-list alternate-list"> | ||||||
|  |         <li class="item flexrow list-item items-title-bg"> | ||||||
|  |           <span class="item-field-label-long"> | ||||||
|  |             <h3><label class="item-field-label-long">Simples</label></h3> | ||||||
|  |           </span> | ||||||
|  |           <span class="item-field-label-medium"> | ||||||
|  |             <label class="item-field-label-medium">Prix</label> | ||||||
|  |           </span> | ||||||
|  |           <div class="item-filler"> </div> | ||||||
|  |           <div class="item-controls item-controls-fixed"> | ||||||
|  |             <a class="item-control item-add" data-type="simple" title="Créer une simple"><i class="fas fa-plus"></i></a> | ||||||
|  |           </div> | ||||||
|  |         </li> | ||||||
|  |         {{#each simples as |simple key|}} | ||||||
|  |         <li class="item list-item flexrow list-item-shadow item-id" data-item-id="{{simple._id}}"> | ||||||
|  |           <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" | ||||||
|  |               src="{{simple.img}}" /></a> | ||||||
|  |           <span class="item-name-label">{{simple.name}}</span> | ||||||
|  |           <span class="item-field-label-medium">{{simple.system.prix}} {{monnaie simple.system.monnaie}}</span> | ||||||
|  |  | ||||||
|  |           <div class="item-filler"> </div> | ||||||
|  |           <div class="item-controls item-controls-fixed"> | ||||||
|  |             <a class="item-control item-edit" title="Editer une simple"><i class="fas fa-edit"></i></a> | ||||||
|  |             <a class="item-control item-delete" title="Supprimer une simple"><i class="fas fa-trash"></i></a> | ||||||
|  |           </div> | ||||||
|  |         </li> | ||||||
|  |         {{/each}} | ||||||
|  |       </ul> | ||||||
|  |  | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|     {{!-- Biography Tab --}} |     {{!-- Biography Tab --}} | ||||||
| @@ -396,7 +442,7 @@ | |||||||
|             <li class="item flexrow"> |             <li class="item flexrow"> | ||||||
|               <label class="item-name-label-medium">Genre</label> |               <label class="item-name-label-medium">Genre</label> | ||||||
|               <select type="text" class="" name="system.genre" value="{{system.genre}}" data-dtype="String" /> |               <select type="text" class="" name="system.genre" value="{{system.genre}}" data-dtype="String" /> | ||||||
|                 {{selectOptions @root.config.genre selected=system.genre}} |               {{selectOptions @root.config.genre selected=system.genre}} | ||||||
|               </select> |               </select> | ||||||
|             </li> |             </li> | ||||||
|             <li class="item flexrow"> |             <li class="item flexrow"> | ||||||
| @@ -406,8 +452,7 @@ | |||||||
|             </li> |             </li> | ||||||
|             <li class="item flexrow"> |             <li class="item flexrow"> | ||||||
|               <label class="item-name-label-medium">Age</label> |               <label class="item-name-label-medium">Age</label> | ||||||
|               <input type="text" class="" name="system.age" value="{{system.age}}" |               <input type="text" class="" name="system.age" value="{{system.age}}" data-dtype="String" /> | ||||||
|                 data-dtype="String" /> |  | ||||||
|             </li> |             </li> | ||||||
|             <li class="item flexrow"> |             <li class="item flexrow"> | ||||||
|               <label class="item-name-label-medium">Date de Naissance</label> |               <label class="item-name-label-medium">Date de Naissance</label> | ||||||
| @@ -430,8 +475,7 @@ | |||||||
|             </li> |             </li> | ||||||
|             <li class="item flexrow"> |             <li class="item flexrow"> | ||||||
|               <label class="item-name-label-medium">Religion</label> |               <label class="item-name-label-medium">Religion</label> | ||||||
|               <input type="text" class="" name="system.religion" value="{{system.religion}}" |               <input type="text" class="" name="system.religion" value="{{system.religion}}" data-dtype="String" /> | ||||||
|                 data-dtype="String" /> |  | ||||||
|             </li> |             </li> | ||||||
|           </ul> |           </ul> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user