From 2598ae34891befee548a673a2eeea507e6f51e6d Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 10 Mar 2023 22:37:21 +0100 Subject: [PATCH] Ajout item Blessure --- icons/sante/blessure-soins.webp | Bin 0 -> 5586 bytes icons/sante/blessure.webp | Bin 0 -> 6782 bytes lang/fr.json | 1 + module/actor/base-actor-sheet.js | 1 + module/item.js | 2 +- module/item/blessure.js | 19 ++++++++++++ module/item/sheet-blessure.js | 16 ++++++++++ module/migrations.js | 46 ++++++++++++++++++++++++++++- module/rdd-main.js | 5 +++- module/rdd-utility.js | 1 + styles/simple.css | 4 +++ template.json | 21 +++++++++++-- templates/actor/blessure.hbs | 22 ++++++++++++++ templates/actor/blessures.html | 5 ++++ templates/item-blessure-sheet.html | 43 +++++++++++++++++++++++++++ 15 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 icons/sante/blessure-soins.webp create mode 100644 icons/sante/blessure.webp create mode 100644 module/item/blessure.js create mode 100644 module/item/sheet-blessure.js create mode 100644 templates/actor/blessure.hbs create mode 100644 templates/item-blessure-sheet.html diff --git a/icons/sante/blessure-soins.webp b/icons/sante/blessure-soins.webp new file mode 100644 index 0000000000000000000000000000000000000000..a8c317d795afc7b8c4d1354e973505abea52b383 GIT binary patch literal 5586 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 K@mLe|@9=*G5&G}| literal 0 HcmV?d00001 diff --git a/icons/sante/blessure.webp b/icons/sante/blessure.webp new file mode 100644 index 0000000000000000000000000000000000000000..f39016085845d261f3cc58f1ffd99607aadc1457 GIT binary patch literal 6782 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 literal 0 HcmV?d00001 diff --git a/lang/fr.json b/lang/fr.json index 435aeb04..a671f680 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -9,6 +9,7 @@ "ITEM": { "TypeArme": "Arme", "TypeArmure": "Armure", + "TypeBlessure": "Blessure", "TypeCasetmr": "TMR spéciale", "TypeChant": "Chant", "TypeCompetence": "Compétence", diff --git a/module/actor/base-actor-sheet.js b/module/actor/base-actor-sheet.js index 9ac21339..11429c01 100644 --- a/module/actor/base-actor-sheet.js +++ b/module/actor/base-actor-sheet.js @@ -78,6 +78,7 @@ export class RdDBaseActorSheet extends ActorSheet { /* -------------------------------------------- */ static filterItemsPerTypeForSheet(formData, itemTypes) { + formData.blessures = Misc.arrayOrEmpty(itemTypes['blessure']); formData.recettescuisine = Misc.arrayOrEmpty(itemTypes['recettecuisine']); formData.recettesAlchimiques = Misc.arrayOrEmpty(itemTypes['recettealchimique']); formData.maladies = Misc.arrayOrEmpty(itemTypes['maladie']); diff --git a/module/item.js b/module/item.js index 74b59594..9195b29f 100644 --- a/module/item.js +++ b/module/item.js @@ -33,7 +33,7 @@ const typesObjetsDraconiques = ["queue", "ombre", "souffle", "tete", "signedraco const typesObjetsConnaissance = ["meditation", "recettealchimique", "sort"] const typesObjetsEffet = ["possession", "poison", "maladie"] const typesObjetsCompetence = ["competence", "competencecreature"] -const typesObjetsTemporels = ["poison", "maladie", "queue", "ombre", "souffle", "signedraconique", "rencontre"] +const typesObjetsTemporels = ["blessure", "poison", "maladie", "queue", "ombre", "souffle", "signedraconique", "rencontre"] const typesEnvironnement = typesInventaireMateriel; const encBrin = 0.00005; // un brin = 1 décigramme = 1/10g = 1/10000kg = 1/20000 enc const encPepin = 0.0007; /* un pépin de gemme = 1/10 cm3 = 1/1000 l = 3.5/1000 kg = 7/2000 kg = 7/1000 enc diff --git a/module/item/blessure.js b/module/item/blessure.js new file mode 100644 index 00000000..7b445bc0 --- /dev/null +++ b/module/item/blessure.js @@ -0,0 +1,19 @@ +import { RdDItem } from "../item.js"; + +export class RdDItemBlessure extends RdDItem { + + static get defaultIcon() { + return "systems/foundryvtt-reve-de-dragon/icons/sante/blessure.webp"; + } + + async calculerFinPeriodeTemporel(debut) { + return await debut.nouveauJour().addJours(this.system.gravite); + } + + async onFinPeriode(oldTimestamp, newTimestamp) { + if (this.system.gravite <= 0) { + await super.onFinPeriode(oldTimestamp, newTimestamp) + } + } + +} \ No newline at end of file diff --git a/module/item/sheet-blessure.js b/module/item/sheet-blessure.js new file mode 100644 index 00000000..3d5e7ebf --- /dev/null +++ b/module/item/sheet-blessure.js @@ -0,0 +1,16 @@ +import { RdDItemSheet } from "../item-sheet.js"; + +export class RdDBlessureItemSheet extends RdDItemSheet { + + static get ITEM_TYPE() { return "blessure" }; + + async getData() { + const formData = await super.getData(); + formData.disabled = formData.options.isGM || formData.options.isOwned ? '' : 'disabled'; + return formData; + } + + activateListeners(html) { + super.activateListeners(html); + } +} diff --git a/module/migrations.js b/module/migrations.js index 8b97047c..b1d3513f 100644 --- a/module/migrations.js +++ b/module/migrations.js @@ -416,6 +416,49 @@ class _10_5_0_UpdatePeriodicite extends Migration { } } +class _10_7_0_MigrationBlessures extends Migration { + get code() { return "migration-blessures"; } + get version() { return "10.7.0"; } + + async migrate() { + const timestamp = game.system.rdd.calendrier.getTimestamp() + await Promise.all(game.actors.filter(it => it.isPersonnage() || it.isCreature()) + .map(async (actor) => { + const legeres = actor.system.blessures?.legeres.liste.filter(it => it.active).map(it => this.creerBlessure(2, 'légère', it, timestamp)) ?? []; + const graves = actor.system.blessures?.graves.liste.filter(it => it.active).map(it => this.creerBlessure(4, 'grave', it, timestamp)) ?? []; + const critiques = actor.system.blessures?.critiques.liste.filter(it => it.active).map(it => this.creerBlessure(6, 'critique', it, timestamp)); + const blessures = legeres.concat(graves).concat(critiques); + if (blessures.length > 0) { + await actor.createEmbeddedDocuments("Item", blessures); + } + await actor.update({ + 'system.blessures.legeres.liste': [], + 'system.blessures.graves.liste': [], + 'system.blessures.critiques.liste': [] + }) + })); + } + creerBlessure(gravite, graviteTexte, blessure, timestamp) { + const dateBlessure = timestamp.addJours(-blessure.jours); + const datePremiereRecup = dateBlessure.addJours(gravite); + return { + name: `Blessure ${graviteTexte}`, + type: 'blessure', + img: `systems/foundryvtt-reve-de-dragon/icons/sante/blessure${blessure.psdone ? '-soins' : ''}.webp`, + system: { + gravite: gravite, + difficulte: -gravite, + debut: { indexDate: dateBlessure.indexDate, indexMinute: 0 }, + fin: { indexDate: datePremiereRecup.indexDate, indexMinute: 0 }, + premierssoins: { done: blessure.psdone, bonus: blessure.premiers_soins }, + soinscomplets: { done: blessure.scdone, bonus: blessure.soins_complets }, + localisation: blessure.localisation, + jours: blessure.jours + } + } + } +} + export class Migrations { static getMigrations() { return [ @@ -431,6 +474,7 @@ export class Migrations { new _10_3_17_Monnaies(), new _10_4_6_ServicesEnCommerces(), new _10_5_0_UpdatePeriodicite(), + new _10_7_0_MigrationBlessures(), ]; } @@ -447,7 +491,7 @@ export class Migrations { migrate() { const currentVersion = game.settings.get(SYSTEM_RDD, "systemMigrationVersion"); if (isNewerVersion(game.system.version, currentVersion)) { - //if (true) { /* comment previous and uncomment here to test before upgrade */ + //if (true) { /* comment previous and uncomment here to test before upgrade */ const migrations = Migrations.getMigrations().filter(m => isNewerVersion(m.version, currentVersion)); if (migrations.length > 0) { migrations.sort((a, b) => this.compareVersions(a, b)); diff --git a/module/rdd-main.js b/module/rdd-main.js index d25d622e..849a7a48 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -36,6 +36,7 @@ import { RdDActorVehiculeSheet } from "./actor-vehicule-sheet.js"; import { RdDActorEntiteSheet } from "./actor-entite-sheet.js"; import { RdDItem } from "./item.js"; +import { RdDItemBlessure } from "./item/blessure.js"; import { RdDItemService } from "./item/service.js"; import { RdDItemMaladie } from "./item/maladie.js"; import { RdDItemPoison } from "./item/poison.js"; @@ -46,6 +47,7 @@ import { RdDItemSouffle } from "./item/souffle.js"; import { RdDRencontre } from "./item/rencontre.js"; import { RdDItemSheet } from "./item-sheet.js"; +import { RdDBlessureItemSheet } from "./item/sheet-blessure.js"; import { RdDServiceItemSheet } from "./item/sheet-service.js"; import { RdDRencontreItemSheet } from "./item/sheet-rencontre.js"; import { RdDHerbeItemSheet } from "./item/sheet-herbe.js"; @@ -74,6 +76,7 @@ export class SystemReveDeDragon { this.RdDUtility = RdDUtility; this.RdDHotbar = RdDHotbar; this.itemClasses = { + blessure: RdDItemBlessure, service: RdDItemService, maladie: RdDItemMaladie, poison: RdDItemPoison, @@ -157,6 +160,7 @@ export class SystemReveDeDragon { RdDItemSheet.register(RdDPlanteItemSheet); RdDItemSheet.register(RdDIngredientItemSheet); RdDItemSheet.register(RdDServiceItemSheet); + RdDItemSheet.register(RdDBlessureItemSheet); Items.registerSheet(SYSTEM_RDD, RdDItemInventaireSheet, { types: [ @@ -276,7 +280,6 @@ export class SystemReveDeDragon { let sidebar = document.getElementById("sidebar"); sidebar.style.width = "min-content"; } - if (Misc.isUniqueConnectedGM()) { game.system.rdd.calendrier = new RdDCalendrier(); new Migrations().migrate(); diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 460b96bb..68f0f232 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -140,6 +140,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/actor/combat.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/blessures.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/blessure.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/blessure.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/possessions.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/taches.html', diff --git a/styles/simple.css b/styles/simple.css index 01c3c55b..c4adf335 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -426,6 +426,7 @@ span.equipement-detail-buttons { justify-content: center; text-align: left; } + .blessure-control { flex-grow: 1; flex-direction: row; @@ -457,14 +458,17 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) { .blessure-inactive { color:rgba(150, 150, 150, 0.4); } +.blessure-active-2, .blessure-active-legere { color:rgba(60, 60, 60, 0.9); text-shadow: 1px 1px 4px rgba(60, 60, 60, 1); } +.blessure-active-4, .blessure-active-grave { color: rgba(218, 126, 21, 0.9); text-shadow: 1px 1px 4px rgba(60, 60, 60, 1); } +.blessure-active-6, .blessure-active-critique { color: rgba(173, 36, 26, 0.9); text-shadow: 1px 1px 4px rgba(60, 60, 60, 1); diff --git a/template.json b/template.json index 52543e5f..a861e523 100644 --- a/template.json +++ b/template.json @@ -567,7 +567,7 @@ "monnaie", "nourritureboisson", "gemme", "service", "meditation", "rencontre", "queue", "ombre", "souffle", "tete", "casetmr", "signedraconique", "sort", "sortreserve", - "nombreastral", "tache", "maladie", "poison", "possession", + "nombreastral", "tache", "blessure", "maladie", "poison", "possession", "tarot", "extraitpoetique" ], "templates": { @@ -636,6 +636,22 @@ "compteur": 0, "date": 0 }, + "blessure": { + "templates": ["temporel"], + "gravite": 0, + "difficulte": 0, + "premierssoins": { + "tache": 0, + "done": false, + "bonus": 0 + }, + "soinscomplets": { + "done": false, + "bonus": 0 + }, + "localisation": "", + "jours": 0 + }, "maladie": { "templates": ["description", "temporel"], "identifie": false, @@ -833,7 +849,8 @@ "points_de_tache_courant": 0, "nb_jet_echec": 0, "nb_jet_succes": 0, - "cacher_points_de_tache": false + "cacher_points_de_tache": false, + "itemId": "" }, "sort": { "templates": ["description"], diff --git a/templates/actor/blessure.hbs b/templates/actor/blessure.hbs new file mode 100644 index 00000000..a2b9666c --- /dev/null +++ b/templates/actor/blessure.hbs @@ -0,0 +1,22 @@ +
  • + + + {{name}} + + + + + + + + + + + + + + + + + +
  • diff --git a/templates/actor/blessures.html b/templates/actor/blessures.html index fa7705c6..88f185f0 100644 --- a/templates/actor/blessures.html +++ b/templates/actor/blessures.html @@ -5,6 +5,8 @@ Soins complets Age (jours) Localisation + Actions + {{#each system.blessures.legeres.liste as |blessure key|}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessure.html" blessure=blessure key=key gravite="legere" title="Légère"}} @@ -15,4 +17,7 @@ {{#each system.blessures.critiques.liste as |blessure key|}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessure.html" blessure=blessure key=key gravite="critique" title="Critique"}} {{/each}} + {{#each blessures as |blessure|}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessure.hbs" blessure}} + {{/each}} diff --git a/templates/item-blessure-sheet.html b/templates/item-blessure-sheet.html new file mode 100644 index 00000000..ea8263bf --- /dev/null +++ b/templates/item-blessure-sheet.html @@ -0,0 +1,43 @@ +
    + {{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}} +
    +
    + + +
    + +
    + + +
    + +
    + + {{#if system.premierssoins.done}} + + {{/if}} +
    + +
    + + {{#if system.soinscomplets.done}} + + {{/if}} +
    + + {{#if options.isOwned}} + {{>"systems/foundryvtt-reve-de-dragon/templates/item/temporel.hbs" this labeldebut="Obtenue" labelfin="Prochain jet"}} + {{/if}} +
    +