Ajout des fonctions de gestion des soins

This commit is contained in:
2026-04-21 10:22:39 +02:00
parent df0a93d715
commit 74f1b581f7
52 changed files with 2697 additions and 650 deletions

View File

@@ -1,6 +1,6 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
<div class="form-group">
<label class="mgt2-checkbox"><input type="checkbox" name="system.config.psionic" data-dtype="Boolean" {{checked system.config.psionic}} />{{ localize 'MGT2.Actor.ShowPsionicTalents' }}</label>
<label class="mgt2-checkbox"><input type="checkbox" name="psionic" data-dtype="Boolean" {{checked system.config.psionic}} />{{ localize 'MGT2.Actor.ShowPsionicTalents' }}</label>
</div>
<fieldset>
<legend>{{ localize 'MGT2.Actor.Initiative' }}</legend>

View File

@@ -272,6 +272,22 @@
<label class="upcase">{{ localize 'MGT2.Actor.Rads' }}</label>
<input class="field" name="system.health.radiations" type="text" value="{{system.health.radiations}}" />
</div>
<!-- HEALING SECTION -->
<div class="header upcase">{{ localize 'MGT2.Healing.Title' }}</div>
<div class="healing-buttons" style="display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 12px;">
<button type="button" data-action="heal" data-heal-type="firstaid" class="button sm" title="{{ localize 'MGT2.Healing.FirstAid' }}">
<i class="fas fa-bandage"></i> {{ localize 'MGT2.Healing.FirstAid' }}
</button>
<button type="button" data-action="heal" data-heal-type="surgery" class="button sm" title="{{ localize 'MGT2.Healing.Surgery' }}">
<i class="fas fa-flask-vial"></i> {{ localize 'MGT2.Healing.Surgery' }}
</button>
<button type="button" data-action="heal" data-heal-type="medical" class="button sm" title="{{ localize 'MGT2.Healing.MedicalCare' }}">
<i class="fas fa-hospital"></i> {{ localize 'MGT2.Healing.MedicalCare' }}
</button>
<button type="button" data-action="heal" data-heal-type="natural" class="button sm" title="{{ localize 'MGT2.Healing.NaturalHealing' }}">
<i class="fas fa-leaf"></i> {{ localize 'MGT2.Healing.NaturalHealing' }}
</button>
</div>
<div class="table-container">
<div class="table-row heading color-1">
<div class="row-item row-item-30 row-item-left upcase">{{ localize 'MGT2.Actor.Wounds' }}</div>
@@ -443,7 +459,7 @@
<div class="row-item row-item-20 row-item-center">{{weapon.system.damage}}</div>
<div class="row-item row-item-2 row-item-right flex-fix">{{weapon.weight}}</div>
<div class="row-item row-item-15 item-controls flex-fix">
<a class="item-control item-equip {{weapon.toggleClass}}" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-equip {{weapon.toggleClass}}" data-action="equipItem" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-storage-in" title="{{ localize 'MGT2.Actor.StoreItem' }}"><i class="fa-solid fa-inbox-in"></i></a>
<a class="item-control item-edit" title="{{ localize 'MGT2.Actor.EditWeapon' }}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="{{ localize 'MGT2.Actor.DeleteWeapon' }}"><i class="fas fa-trash"></i></a>
@@ -468,7 +484,7 @@
<div class="row-item row-item-10 row-item-center">{{armor.system.protection}}</div>
<div class="row-item row-item-2 row-item-right flex-fix">{{armor.weight}}</div>
<div class="row-item row-item-15 item-controls flex-fix">
<a class="item-control item-equip {{armor.toggleClass}}" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-equip {{armor.toggleClass}}" data-action="equipItem" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-storage-in" title="{{ localize 'MGT2.Actor.StoreItem' }}"><i class="fa-solid fa-inbox-in"></i></a>
<a class="item-control item-edit" title="{{ localize 'MGT2.Actor.EditArmor' }}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="{{ localize 'MGT2.Actor.DeleteArmor' }}"><i class="fas fa-trash"></i></a>
@@ -487,7 +503,7 @@
<div class="row-item row-item-30 row-item-left">{{augment.name}}</div>
<div class="row-item row-item-40 row-item-left">{{augment.system.improvement}}</div>
<div class="row-item row-item-15 item-controls flex-fix">
<a class="item-control item-equip {{augment.toggleClass}}" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-equip {{augment.toggleClass}}" data-action="equipItem" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-storage-in" title="{{ localize 'MGT2.Actor.StoreItem' }}"><i class="fa-solid fa-inbox-in"></i></a>
<a class="item-control item-edit" title="{{ localize 'MGT2.Actor.EditAugment' }}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="{{ localize 'MGT2.Actor.DeleteAugment' }}"><i class="fas fa-trash"></i></a>
@@ -512,7 +528,7 @@
</div>
<div class="row-item row-item-2 row-item-right flex-fix">{{computer.weight}}</div>
<div class="row-item row-item-15 item-controls flex-fix">
<a class="item-control item-equip {{computer.toggleClass}}" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-equip {{computer.toggleClass}}" data-action="equipItem" title="Equip"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-storage-in" title="{{ localize 'MGT2.Actor.StoreItem' }}"><i class="fa-solid fa-inbox-in"></i></a>
<a class="item-control item-edit" title="{{ localize 'MGT2.Actor.EditComputer' }}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="{{ localize 'MGT2.Actor.DeleteComputer' }}"><i class="fas fa-trash"></i></a>
@@ -557,7 +573,7 @@
<div class="row-item row-item-2 row-item-center">{{equipment.system.quantity}}</div>
<div class="row-item row-item-2 row-item-right flex-fix">{{equipment.weight}}</div>
<div class="row-item row-item-15 item-controls flex-fix">
<a class="item-control item-equip {{equipment.toggleClass}}" title="{{ localize 'MGT2.Actor.EquipUnequip' }}"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-equip {{equipment.toggleClass}}" data-action="equipItem" title="{{ localize 'MGT2.Actor.EquipUnequip' }}"><i class="fa-solid fa-shield-halved"></i></a>
<a class="item-control item-storage-in" title="{{ localize 'MGT2.Actor.StoreEquipment' }}"><i class="fa-solid fa-inbox-in"></i></a>
<a class="item-control item-edit" title="{{ localize 'MGT2.Actor.EditEquipment' }}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="{{ localize 'MGT2.Actor.DeleteEquipment' }}"><i class="fas fa-trash"></i></a>
@@ -687,8 +703,8 @@
</div>
</div>
<div class="field-group mt-1">
<label class="upcase">{{ localize 'MGT2.Actor.Notes' }}</label>
<textarea name="system.finance.description" rows="3">{{system.finance.description}}</textarea>
<label class="upcase">{{ localize 'MGT2.Actor.Notes' }}</label>
{{formInput systemFields.finance.fields.notes enriched=enrichedFinanceNotes value=system.finance.notes name="system.finance.notes" toggled=true}}
</div>
</div>
</div>
@@ -720,11 +736,11 @@
</div>
<div class="tab w100 h100" data-group="sidebar" data-tab="notes">
<div class="header upcase">{{ localize 'MGT2.Actor.Notes' }}</div>
{{editor system.notes target="system.notes" button=true editable=true}}
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
</div>
<div class="tab w100 h100" data-group="sidebar" data-tab="biography">
<div class="header upcase">{{ localize 'MGT2.Actor.Biography' }}</div>
{{editor system.biography target="system.biography" button=true editable=true}}
{{formInput systemFields.biography enriched=enrichedBiography value=system.biography name="system.biography" toggled=true}}
</div>
{{#if showTrash}}
<!-- <div class="tab" data-group="inventory" data-tab="trash">

View File

@@ -80,19 +80,20 @@
{{!-- ── TAB CONTENT ── --}}
<div class="creature-body">
{{!-- ── TAB : COMBAT (compétences + attaques + traits) ── --}}
<div class="tab" data-group="primary" data-tab="combat">
{{!-- ── TAB : COMPÉTENCES ── --}}
<div class="tab" data-group="primary" data-tab="skills">
{{!-- Compétences --}}
<div class="header upcase">{{ localize 'MGT2.Creature.TabSkills' }}</div>
<div class="table-container">
<div class="table-row heading color-1">
<div class="row-item row-item-left upcase" style="flex: 3">{{ localize 'MGT2.Creature.SkillName' }}</div>
<div class="row-item row-item-center upcase" style="flex: 1">{{ localize 'MGT2.Creature.SkillLevel' }}</div>
<div class="row-item row-item-left upcase" style="flex: 3">{{ localize 'MGT2.Creature.SkillNote' }}</div>
<div class="row-item row-item-right" style="flex: 0 0 3rem">
<a data-action="addSkill" data-prop="skills" title="{{ localize 'MGT2.Creature.AddSkill' }}"><i class="fas fa-plus"></i></a>
<div class="row-item row-item-right item-controls" style="flex: 0 0 3rem">
{{#if isEditable}}<a data-action="addSkill" data-prop="skills" title="{{ localize 'MGT2.Creature.AddSkill' }}"><i class="fas fa-plus"></i></a>{{/if}}
</div>
</div>
{{#each system.skills as |skill i|}}
<div class="table-row">
<div class="row-item row-item-left" style="flex: 3">
@@ -124,29 +125,25 @@
</div>
</div>
{{/each}}
{{#unless system.skills.length}}
<div class="table-row">
<div class="row-item row-item-center text-muted" style="flex:1">{{ localize 'MGT2.Creature.NoSkills' }}</div>
</div>
{{/unless}}
</div>
</div>
{{!-- ── TAB : ATTAQUES ── --}}
<div class="tab" data-group="primary" data-tab="attacks">
{{!-- Attaques --}}
<div class="header upcase">{{ localize 'MGT2.Creature.TabAttacks' }}</div>
<div class="table-container">
<div class="table-row heading color-1">
<div class="row-item row-item-left upcase" style="flex: 3">{{ localize 'MGT2.Creature.AttackName' }}</div>
<div class="row-item row-item-center upcase" style="flex: 2">{{ localize 'MGT2.Creature.AttackDamage' }}</div>
<div class="row-item row-item-left upcase" style="flex: 3">{{ localize 'MGT2.Creature.AttackSkill' }}</div>
<div class="row-item row-item-left upcase" style="flex: 3">{{ localize 'MGT2.Items.Description' }}</div>
<div class="row-item row-item-right" style="flex: 0 0 4rem">
{{#if isEditable}}
<a data-action="addAttack" data-prop="attacks" title="{{ localize 'MGT2.Creature.AddAttack' }}"><i class="fas fa-plus"></i></a>
{{/if}}
<div class="row-item row-item-right item-controls" style="flex: 0 0 4rem">
{{#if isEditable}}<a data-action="addAttack" data-prop="attacks" title="{{ localize 'MGT2.Creature.AddAttack' }}"><i class="fas fa-plus"></i></a>{{/if}}
</div>
</div>
{{#each system.attacks as |atk i|}}
<div class="table-row">
<div class="row-item row-item-left" style="flex: 3">
@@ -163,6 +160,22 @@
<span class="damage-formula">{{atk.damage}}</span>
{{/if}}
</div>
<div class="row-item row-item-left" style="flex: 3">
{{#if ../isEditable}}
<select name="system.attacks.{{i}}.skill">
<option value="-1">— {{ localize 'MGT2.RollPrompt.NoSkill' }} —</option>
{{#each ../system.skills as |sk si|}}
<option value="{{si}}" {{#if (eq si ../skill)}}selected{{/if}}>{{sk.name}} ({{showDM sk.level}})</option>
{{/each}}
</select>
{{else}}
{{#if (gte atk.skill 0)}}
<span>{{lookup (lookup ../system.skills atk.skill) "name"}}</span>
{{else}}
<span class="text-muted"></span>
{{/if}}
{{/if}}
</div>
<div class="row-item row-item-left" style="flex: 3">
{{#if ../isEditable}}
<input type="text" name="system.attacks.{{i}}.description" value="{{atk.description}}" />
@@ -178,29 +191,24 @@
</div>
</div>
{{/each}}
{{#unless system.attacks.length}}
<div class="table-row">
<div class="row-item row-item-center text-muted" style="flex:1">{{ localize 'MGT2.Creature.NoAttacks' }}</div>
</div>
{{/unless}}
</div>
</div>
{{!-- ── TAB : TRAITS ── --}}
<div class="tab" data-group="primary" data-tab="traits">
{{!-- Traits --}}
<div class="header upcase">{{ localize 'MGT2.Creature.TabTraits' }}</div>
<div class="table-container">
<div class="table-row heading color-1">
<div class="row-item row-item-left upcase" style="flex: 3">{{ localize 'MGT2.Creature.TraitName' }}</div>
<div class="row-item row-item-center upcase" style="flex: 1">{{ localize 'MGT2.Creature.TraitValue' }}</div>
<div class="row-item row-item-left upcase" style="flex: 4">{{ localize 'MGT2.Items.Description' }}</div>
<div class="row-item row-item-right" style="flex: 0 0 3rem">
{{#if isEditable}}
<a data-action="addTrait" data-prop="traits" title="{{ localize 'MGT2.Creature.AddTrait' }}"><i class="fas fa-plus"></i></a>
{{/if}}
<div class="row-item row-item-right item-controls" style="flex: 0 0 3rem">
{{#if isEditable}}<a data-action="addTrait" data-prop="traits" title="{{ localize 'MGT2.Creature.AddTrait' }}"><i class="fas fa-plus"></i></a>{{/if}}
</div>
</div>
{{#each system.traits as |trait i|}}
<div class="table-row">
<div class="row-item row-item-left" style="flex: 3">
@@ -231,34 +239,32 @@
</div>
</div>
{{/each}}
{{#unless system.traits.length}}
<div class="table-row">
<div class="row-item row-item-center text-muted" style="flex:1">{{ localize 'MGT2.Creature.NoTraits' }}</div>
</div>
{{/unless}}
</div>
</div>
</div>{{!-- /tab combat --}}
{{!-- ── TAB : INFORMATIONS ── --}}
<div class="tab" data-group="primary" data-tab="info">
<div class="creature-info-tab">
<div class="field-group mt-1">
<label class="upcase">{{ localize 'MGT2.Items.Description' }}</label>
<textarea name="system.biography" rows="8" class="creature-description">{{system.biography}}</textarea>
{{formInput systemFields.biography enriched=enrichedBiography value=system.biography name="system.biography" toggled=true}}
</div>
<div class="field-group mt-1">
<label class="upcase">{{ localize 'MGT2.Items.Notes' }}</label>
<textarea name="system.notes" rows="4" class="creature-description">{{system.notes}}</textarea>
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
</div>
</div>
</div>
{{!-- ── VERTICAL SIDEBAR TABS (outside window, right side) ── --}}
<nav class="sheet-sidebar tabs" data-group="primary">
<a class="item tab-select" data-tab="skills" title="{{ localize 'MGT2.Creature.TabSkills' }}"><i class="fa-solid fa-head-side"></i><span class="tab-label">COMP.</span></a>
<a class="item tab-select" data-tab="attacks" title="{{ localize 'MGT2.Creature.TabAttacks' }}"><i class="fa-solid fa-bolt"></i><span class="tab-label">ATT.</span></a>
<a class="item tab-select" data-tab="traits" title="{{ localize 'MGT2.Creature.TabTraits' }}"><i class="fa-solid fa-star"></i><span class="tab-label">TRAITS</span></a>
<a class="item tab-select" data-tab="combat" title="{{ localize 'MGT2.Creature.TabCombat' }}"><i class="fa-solid fa-swords"></i><span class="tab-label">COMBAT</span></a>
<a class="item tab-select" data-tab="info" title="{{ localize 'MGT2.Creature.TabInfo' }}"><i class="fa-solid fa-circle-info"></i><span class="tab-label">INFO</span></a>
</nav>

View File

@@ -1,16 +1,124 @@
<form class="{{cssClass}} flexcol" autocomplete="off" style="align-content: flex-start;align-items: baseline;overflow: hidden;height: 100%;">
<div class="{{cssClass}} vehicule-sheet flexcol" style="overflow: hidden; height: 100%;">
<!-- ── Header ─────────────────────────────────────── -->
<section class="vehicule-header">
<div class="vehicule-header-img">
<img class="profile" src="{{img}}" data-edit="img" title="{{name}}" height="130" width="100" />
</div>
<div class="vehicule-header-img">
<img class="profile" src="{{img}}" data-edit="img" title="{{name}}" />
</div>
<div class="vehicule-header-body">
<input class="field-name" name="name" type="text" value="{{name}}" />
<ul class="character-summary">
<li class="w5-10"><input name="system.personal.title" type="text" value="{{system.personal.title}}" placeholder="{{ localize 'MGT2.Actor.PlaceholderTITLE' }}" /></li>
<li class="w2-10"><input name="system.personal.species" type="text" value="{{system.personal.species}}" placeholder="{{ localize 'MGT2.Actor.PlaceholderSPECIES' }}" /></li>
<li class="w1-10"><input name="system.personal.age" type="text" value="{{system.personal.age}}" placeholder="{{ localize 'MGT2.Actor.PlaceholderAGE' }}" /></li>
<li class="w2-10"><input name="system.personal.wup" type="text" value="{{system.personal.wup}}" placeholder="{{ localize 'MGT2.Actor.PlaceholderUCP' }}" /></li>
</ul>
<input class="vehicule-name" name="name" type="text" value="{{name}}" />
<div class="vehicule-header-stats">
<div class="vehicule-stat-box vehicule-hull">
<label>{{ localize 'MGT2.Vehicule.Hull' }}</label>
<div class="vehicule-stat-value">
<input type="number" name="system.life.value" value="{{system.life.value}}" />
<span>/</span>
<input type="number" name="system.life.max" value="{{system.life.max}}" />
</div>
</div>
<div class="vehicule-armor-group">
<div class="vehicule-armor-label">{{ localize 'MGT2.Vehicule.Armor' }}</div>
<div class="vehicule-armor-row">
<div class="vehicule-stat-box vehicule-armor-box">
<label>{{ localize 'MGT2.Vehicule.ArmorFront' }}</label>
<div class="vehicule-stat-value">
<input type="number" name="system.armor.front" value="{{system.armor.front}}" />
</div>
</div>
<div class="vehicule-stat-box vehicule-armor-box">
<label>{{ localize 'MGT2.Vehicule.ArmorSides' }}</label>
<div class="vehicule-stat-value">
<input type="number" name="system.armor.sides" value="{{system.armor.sides}}" />
</div>
</div>
<div class="vehicule-stat-box vehicule-armor-box">
<label>{{ localize 'MGT2.Vehicule.ArmorRear' }}</label>
<div class="vehicule-stat-value">
<input type="number" name="system.armor.rear" value="{{system.armor.rear}}" />
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</form>
<!-- ── Body: tab content + vertical sidebar nav ──── -->
<div class="vehicule-content">
<!-- Tab: Stats -->
<div class="tab vehicule-tab" data-group="primary" data-tab="stats">
<div class="vehicule-stats-grid">
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.SpeedCruise' }}</label>
<select name="system.speed.cruise">
{{selectOptions config.SpeedBands selected=system.speed.cruise localize=true}}
</select>
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.SpeedMax' }}</label>
<select name="system.speed.maximum">
{{selectOptions config.SpeedBands selected=system.speed.maximum localize=true}}
</select>
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Agility' }}</label>
<input type="number" name="system.agility" value="{{system.agility}}" />
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Crew' }}</label>
<input type="number" name="system.crew" value="{{system.crew}}" />
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Passengers' }}</label>
<input type="number" name="system.passengers" value="{{system.passengers}}" />
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Cargo' }}</label>
<input type="number" name="system.cargo" value="{{system.cargo}}" />
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Shipping' }}</label>
<input type="number" name="system.shipping" value="{{system.shipping}}" />
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Cost' }}</label>
<input type="number" name="system.cost" value="{{system.cost}}" />
</div>
<div class="vehicule-field">
<label>{{ localize 'MGT2.Vehicule.Autopilot' }}</label>
<input type="number" name="system.skills.autopilot" value="{{system.skills.autopilot}}" />
</div>
</div>
</div>
<!-- Tab: Description -->
<div class="tab vehicule-tab" data-group="primary" data-tab="description">
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</div>
<!-- Vertical sidebar nav (positioned absolutely right of window) -->
<nav class="sheet-sidebar tabs" data-group="primary">
<a class="item tab-select" data-tab="stats" title="{{ localize 'MGT2.Vehicule.TabStats' }}">
<i class="fa-solid fa-gauge-high"></i>
<span class="tab-label">STATS</span>
</a>
<a class="item tab-select" data-tab="description" title="{{ localize 'MGT2.Vehicule.TabDescription' }}">
<i class="fa-solid fa-circle-info"></i>
<span class="tab-label">INFO</span>
</a>
</nav>
</div>
</div>