- Schéma xp dans CelestopolCharacter : actuel (éditable), log[] ({montant, raison, date}), depense (calculé dans prepareDerivedData)
- Bouton 'Dépenser XP' → DialogV2 (montant + raison) : décrémente actuel, logge l'entrée
- Suppression d'entrée de log avec remboursement des points (mode édition)
- Section XP en haut de l'onglet Biographie : compteurs, tableau du log, référentiel des coûts
- i18n : section CELESTOPOL.XP.* complète
- CSS : .xp-section avec compteurs, tableau de log et accordéon de référence
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
61 lines
2.4 KiB
Handlebars
61 lines
2.4 KiB
Handlebars
<div class="npc-main sheet-part">
|
|
<header class="sheet-header">
|
|
<div class="portrait" data-action="editImage">
|
|
<img src="{{actor.img}}" alt="{{actor.name}}" class="actor-portrait">
|
|
</div>
|
|
<div class="header-fields">
|
|
<div class="charname">
|
|
{{#if isEditMode}}
|
|
<input type="text" name="name" value="{{actor.name}}">
|
|
{{else}}
|
|
<h1 class="actor-name">{{actor.name}}</h1>
|
|
{{/if}}
|
|
</div>
|
|
<div class="concept-row">
|
|
{{#if isEditMode}}
|
|
<input type="text" name="system.concept" value="{{system.concept}}"
|
|
placeholder="{{localize 'CELESTOPOL.Actor.concept'}}">
|
|
{{else}}
|
|
<span class="concept-display">{{system.concept}}</span>
|
|
{{/if}}
|
|
</div>
|
|
<div class="header-stats-row">
|
|
<div class="header-stat">
|
|
<label>{{localize "CELESTOPOL.Actor.initiative"}}</label>
|
|
<span>{{system.initiative}}</span>
|
|
</div>
|
|
<div class="header-stat">
|
|
<label>{{localize "CELESTOPOL.Actor.anomaly"}}</label>
|
|
{{#if isEditMode}}
|
|
<select name="system.anomaly.type">
|
|
{{#each anomalyTypes as |atype key|}}
|
|
<option value="{{key}}" {{#if (eq key ../system.anomaly.type)}}selected{{/if}}>{{localize atype.label}}</option>
|
|
{{/each}}
|
|
</select>
|
|
<input type="number" name="system.anomaly.value" value="{{system.anomaly.value}}" min="0" max="8" class="small-input">
|
|
{{else}}
|
|
<span class="anomaly-type-display">{{localize (lookup (lookup anomalyTypes system.anomaly.type) 'label')}}</span>
|
|
{{/if}}
|
|
</div>
|
|
{{#with (lookup woundLevels system.blessures.lvl) as |wound|}}
|
|
{{#if wound.id}}
|
|
<div class="header-stat wound-status-badge wound-level-{{wound.id}}">
|
|
<label>{{localize "CELESTOPOL.Wound.status"}}</label>
|
|
<span class="wound-value">
|
|
<span class="wound-label">{{localize wound.label}}</span>
|
|
{{#if wound.duration}}<span class="wound-duration"> — {{localize wound.duration}}</span>{{/if}}
|
|
{{#if wound.malus}}<span class="wound-malus"> ({{wound.malus}})</span>{{/if}}
|
|
</span>
|
|
</div>
|
|
{{/if}}
|
|
{{/with}}
|
|
</div>
|
|
</div>
|
|
<div class="header-buttons">
|
|
<a data-action="toggleSheet">
|
|
<i class="fas {{#if isEditMode}}fa-eye{{else}}fa-edit{{/if}}"></i>
|
|
</a>
|
|
</div>
|
|
</header>
|
|
</div>
|