Rework fiches, jets de dés et CSS
This commit is contained in:
789
.history/templates/actor-sheet_20260403081216.hbs
Normal file
789
.history/templates/actor-sheet_20260403081216.hbs
Normal file
@@ -0,0 +1,789 @@
|
||||
<section>
|
||||
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
|
||||
{{!-- Bannière : image + nom + bouton --}}
|
||||
<div class="header-banner">
|
||||
<img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
|
||||
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom du personnage" /></h1>
|
||||
<button type="button" class="sheet-mode-toggle" data-action="toggleSheet"
|
||||
data-tooltip="{{#if isEditMode}}Mode Visualisation{{else}}Mode Édition{{/if}}">
|
||||
<i class="{{#if isEditMode}}fas fa-eye{{else}}fas fa-edit{{/if}}"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Cartes de statistiques --}}
|
||||
<div class="header-stat-cards">
|
||||
|
||||
{{!-- LOI --}}
|
||||
<div class="stat-card card-loi{{#if (gt system.balance.loi system.balance.chaos)}} dominant{{/if}}">
|
||||
<div class="stat-card-title">⚖ Loi</div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>Niv.</label>
|
||||
<input type="text" name="system.balance.loi" value="{{system.balance.loi}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Pts</label>
|
||||
<select name="system.balance.pointsloi">
|
||||
{{selectOptions config.listeNiveauSkill selected=system.balance.pointsloi}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="stat-derived">Aspect : {{system.balance.aspect}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- CHAOS --}}
|
||||
<div class="stat-card card-chaos{{#if (gt system.balance.chaos system.balance.loi)}} dominant{{/if}}">
|
||||
<div class="stat-card-title">☯ Chaos</div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>Niv.</label>
|
||||
<input type="text" name="system.balance.chaos" value="{{system.balance.chaos}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Pts</label>
|
||||
<select name="system.balance.pointschaos">
|
||||
{{selectOptions config.listeNiveauSkill selected=system.balance.pointschaos}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="stat-derived">Marge : {{system.balance.marge}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- BONNE AVENTURE --}}
|
||||
<div class="stat-card card-ba">
|
||||
<div class="stat-card-title">★ Bonne Aventure</div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>Base</label>
|
||||
<input type="text" name="system.bonneaventure.base" value="{{system.bonneaventure.base}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Act.</label>
|
||||
<input type="text" name="system.bonneaventure.actuelle" value="{{system.bonneaventure.actuelle}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Éclat</label>
|
||||
<input type="text" name="system.eclat.value" value="{{system.eclat.value}}" data-dtype="Number" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- VIGUEUR --}}
|
||||
<div class="stat-card card-vigueur">
|
||||
<div class="stat-card-title">♥ Vigueur <span class="stat-sub">({{system.sante.vigueur}})</span></div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>État</label>
|
||||
<select name="system.sante.etat">
|
||||
{{selectOptions combativiteList selected=system.sante.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- ÂME --}}
|
||||
<div class="stat-card card-ame">
|
||||
<div class="stat-card-title">✦ Âme <span class="stat-sub">(Seuil {{system.ame.seuilpouvoir}})</span></div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>État</label>
|
||||
<select name="system.ame.etat">
|
||||
{{selectOptions ameList selected=system.ame.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Max</label>
|
||||
<select name="system.ame.max">
|
||||
{{selectOptions ameMaxList selected=system.ame.max valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<hr>
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="principal">Attributs</a>
|
||||
<a class="item" data-tab="competences">Compétences</a>
|
||||
<a class="item" data-tab="dons">Dons & Pactes</a>
|
||||
<a class="item" data-tab="combat">Combat</a>
|
||||
<a class="item" data-tab="equipement">Equipement</a>
|
||||
<a class="item" data-tab="biodata">Bio&Notes</a>
|
||||
</nav>
|
||||
<hr>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Main Tab --}}
|
||||
<div class="tab principal" data-group="primary" data-tab="principal">
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="grid grid-2col">
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
{{#each system.attributs as |attr key|}}
|
||||
<li class="item flexrow " data-attr-key="{{key}}">
|
||||
<img class="item-name-img" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/{{attr.labelnorm}}.webp">
|
||||
<span data-tooltip="Cliquez pour faire un jet" class="item-name-label competence-name item-field-label-medium"><a
|
||||
data-action="rollAttribut" data-attr-key="{{key}}">{{attr.label}}</a></span>
|
||||
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
|
||||
name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number">
|
||||
{{selectOptions @root.config.listeNiveauSkill selected=attr.value}}
|
||||
</select>
|
||||
</li>
|
||||
{{/each}}
|
||||
|
||||
<li class="item flexrow">
|
||||
<img class="item-name-img" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/vitesse.webp">
|
||||
<span class="item-name-label competence-name item-field-label-medium">Vitesse</span>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.vitesse.value"
|
||||
value="{{system.vitesse.value}}" data-dtype="Number" />
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype adversite-section">
|
||||
|
||||
<h4 class="adversite-section-title">Adversités</h4>
|
||||
<div class="adversite-cards">
|
||||
{{#each system.adversite as |adv key|}}
|
||||
<div class="adversite-card adversite-{{key}}" data-adversite="{{key}}">
|
||||
<div class="adversite-card-title">{{upperFirst key}}</div>
|
||||
<img class="adversite-gem" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/gemme_{{key}}.webp">
|
||||
<div class="adversite-value">{{adv}}</div>
|
||||
<div class="adversite-controls">
|
||||
<a data-action="modifyAdversite" class="adv-btn adv-minus" data-adversite-value="-1">−</a>
|
||||
<a data-action="modifyAdversite" class="adv-btn adv-plus" data-adversite-value="1">+</a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
<div class="adversite-total {{#if adversiteTotal}}adversite-total-nonzero{{/if}}"
|
||||
data-tooltip="Malus soustrait à tous les jets de dés">
|
||||
<span class="adversite-total-label">Malus jets</span>
|
||||
<span class="adversite-total-value">−{{adversiteTotal}}</span>
|
||||
</div>
|
||||
|
||||
{{#if isGM}}
|
||||
<div class="adversite-modifiers">
|
||||
<div class="adversite-modifier-row">
|
||||
<label data-tooltip="Modificateur de Vigueur">Mod. Vigueur</label>
|
||||
<input type="text" name="system.sante.vigueurmodifier"
|
||||
value="{{system.sante.vigueurmodifier}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="adversite-modifier-row">
|
||||
<label data-tooltip="Modificateur de Seuil de Pouvoir">Mod. Seuil Pouvoir</label>
|
||||
<input type="text" name="system.ame.seuilpouvoirmodifier"
|
||||
value="{{system.ame.seuilpouvoirmodifier}}" data-dtype="Number" />
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Talents</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Résumé</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="talent" title="Ajouter un Talent"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each talents as |talent key|}}
|
||||
<li class="item flexrow " data-item-id="{{talent._id}}" data-item-type="talent">
|
||||
<img class="item-name-img" src="{{talent.img}}" />
|
||||
<span class="item-name-label competence-name">{{talent.name}}</span>
|
||||
<span class="item-name-label item-field-label-long2">{{talent.system.resumebonus}}</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Competences Tab --}}
|
||||
<div class="tab competences" data-group="primary" data-tab="competences">
|
||||
|
||||
<div class="flexrow">
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Compétences</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Niveau</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
</li>
|
||||
{{#each skills as |skill key|}}
|
||||
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
|
||||
<img class="item-name-img" src="{{skill.img}}" />
|
||||
|
||||
<div class="flexcol item-name-label">
|
||||
|
||||
<span class="item-name-label competence-name"><a data-action="rollCompetence" class="item-field-label-short"
|
||||
data-attr-key="tochoose">{{skill.name}}</a></span>
|
||||
|
||||
<span class="predilection-text">
|
||||
{{#each skill.system.predilections as |pred key|}}
|
||||
{{#if (and pred.acquise (not pred.used))}}
|
||||
{{pred.name}},
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
|
||||
data-item-field="niveau" value="{{skill.system.niveau}}" data-dtype="Number">
|
||||
{{selectOptions @root.config.listeNiveauSkill selected=skill.system.niveau}}
|
||||
</select>
|
||||
|
||||
{{#if (ne skill.system.attribut1 "none")}}
|
||||
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut1}}">{{upper
|
||||
skill.system.attribut1}} : {{skill.system.attribut1total}}</button>
|
||||
{{/if}}
|
||||
{{#if (ne skill.system.attribut2 "none")}}
|
||||
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut2}}">{{upper
|
||||
skill.system.attribut2}} : {{skill.system.attribut2total}}</button>
|
||||
{{/if}}
|
||||
{{#if (ne skill.system.attribut3 "none")}}
|
||||
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut3}}">{{upper
|
||||
skill.system.attribut3}} : {{skill.system.attribut3total}}</button>
|
||||
{{/if}}
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Dons/Pactes Tab --}}
|
||||
<div class="tab dons" data-group="primary" data-tab="dons">
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Dons</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Allégeance</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="don"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each dons as |don key|}}
|
||||
<li class="item flexrow " data-item-id="{{don._id}}" data-item-type="don">
|
||||
<img class="item-name-img" src="{{don.img}}" />
|
||||
<span class="item-name-label competence-name">{{don.name}}</span>
|
||||
<span class="item-field-label-short">{{don.system.allegeance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Pactes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Allégeance</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="pacte"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each pactes as |pacte key|}}
|
||||
<li class="item flexrow " data-item-id="{{pacte._id}}" data-item-type="pacte">
|
||||
<img class="item-name-img" src="{{pacte.img}}" />
|
||||
<span class="item-name-label competence-name">{{pacte.name}}</span>
|
||||
<span class="item-field-label-short">{{pacte.system.allegeance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Runes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Haute Langue</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Difficulté</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="rune"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each runes as |rune key|}}
|
||||
<li class="item flexrow " data-item-id="{{rune._id}}" data-item-type="rune">
|
||||
<img class="item-name-img" src="{{rune.img}}" />
|
||||
<span class="item-name-label competence-name">{{rune.name}}</span>
|
||||
<span class="item-field-label-long">{{rune.system.formule}}</span>
|
||||
<span class="item-field-label-short">{{rune.system.seuil}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Tendances</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Allégeance</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="tendance"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each tendances as |tendance key|}}
|
||||
<li class="item flexrow " data-item-id="{{tendance._id}}" data-item-type="tendance">
|
||||
<img class="item-name-img" src="{{tendance.img}}" />
|
||||
<span class="item-name-label competence-name">{{tendance.name}}</span>
|
||||
<span class="item-field-label-short">{{tendance.system.allegeance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Traits Chaotiques</label></h3>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="traitchaotique"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each traitsChaotiques as |trait key|}}
|
||||
<li class="item flexrow " data-item-id="{{trait._id}}" data-item-type="traitchaotique">
|
||||
<img class="item-name-img" src="{{trait.img}}" />
|
||||
<span class="item-name-label competence-name">{{trait.name}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Traits d'Espèce</label></h3>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="traitespece"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each traitsEspeces as |trait key|}}
|
||||
<li class="item flexrow " data-item-id="{{trait._id}}" data-item-type="traitespece">
|
||||
<img class="item-name-img" src="{{trait.img}}" />
|
||||
<span class="item-name-label competence-name">{{trait.name}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Equipement Tab --}}
|
||||
<div class="tab combat" data-group="primary" data-tab="combat">
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<button class="chat-card-button" data-action="rollInitiative">Initiative (actuelle : {{initiative}} )</button>
|
||||
<label class="item-field-label-short"> </label>
|
||||
<label class="item-field-label-short">Monté?</label>
|
||||
<input type="checkbox" name="system.combat.monte" {{checked system.combat.monte}} />
|
||||
<label class="item-field-label-short"> </label>
|
||||
<label class="item-field-label-medium">Défense totale?</label>
|
||||
<input type="checkbox" name="system.combat.defensetotale" {{checked system.combat.defensetotale}} />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<button class="chat-card-button" data-action="rollAssommer">Assommer</button>
|
||||
<button class="chat-card-button" data-action="rollCoupBas">Coup bas</button>
|
||||
<button class="chat-card-button" data-action="rollImmobiliser">Immobiliser</button>
|
||||
<button class="chat-card-button" data-action="rollRepousser">Repousser</button>
|
||||
<button class="chat-card-button" data-action="rollDesengager">Se désengager</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Armes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Attaque</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Défense</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Dégats</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="arme" title="Ajouter une arme"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each armes as |arme key|}}
|
||||
<li class="item flexrow " data-item-id="{{arme._id}}" data-item-type="arme">
|
||||
<img class="item-name-img" src="{{arme.img}}" />
|
||||
<span class="item-name-label competence-name">{{arme.name}}</span>
|
||||
|
||||
<span class="item-field-label-short">
|
||||
{{#if arme.system.equipped}}
|
||||
<button data-action="rollArmeOffensif" class="button-sheet-roll">{{arme.system.totalOffensif}}</button>
|
||||
{{else}}
|
||||
<button disabled data-action="rollArmeOffensif" class="button-sheet-roll">{{arme.system.totalOffensif}}</button>
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
{{#if arme.system.isdefense}}
|
||||
<span class="item-field-label-short arme-defensif item-field-label-short"><label
|
||||
class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
|
||||
{{else}}
|
||||
<span class="item-field-label-short arme-defensif item-field-label-short"><label
|
||||
class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
|
||||
{{/if}}
|
||||
|
||||
<span class="item-field-label-short">
|
||||
{{#if arme.system.equipped}}
|
||||
<button data-action="rollArmeDegats" class="button-sheet-roll">{{arme.system.totalDegats}}</button>
|
||||
{{else}}
|
||||
<button disabled data-action="rollArmeDegats" class="button-sheet-roll">{{arme.system.totalDegats}}</button>
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="equipItem" title="Equipé">{{#if arme.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control" data-action="editItem" title="Editer l' Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Protections</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Protection</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="protection" title="Ajouter une arme"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each protections as |protection key|}}
|
||||
<li class="item flexrow " data-item-id="{{protection._id}}" data-item-type="protection">
|
||||
<img class="item-name-img" src="{{protection.img}}" />
|
||||
<span class="item-name-label competence-name">{{protection.name}}</span>
|
||||
<span class="item-field-label-short arme-defensif"><label
|
||||
class="arme-defensif">{{protection.system.protection}}</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="equipItem" title="Equipé">{{#if protection.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control" data-action="editItem" title="Editer l'Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Equipement Tab --}}
|
||||
<div class="tab equipement" data-group="primary" data-tab="equipement">
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<hr>
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<h4>
|
||||
<label class="argent-total-text">
|
||||
Argent Total : {{richesse.po}} PO - {{richesse.pa}} PA - {{richesse.sc}} SC (total {{richesse.valueSC}} SC)
|
||||
</label>
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Richesses et Argent</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Quantité</label>
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="monnaie" title="Ajouter une monnaie"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each monnaies as |monnaie key|}}
|
||||
<li class="item flexrow " data-item-id="{{monnaie._id}}" data-item-type="monnaie">
|
||||
<img class="item-name-img" src="{{monnaie.img}}" />
|
||||
<span class="item-name-label competence-name">{{monnaie.name}}</span>
|
||||
<span class="item-name-label competence-name item-field-label-medium">{{monnaie.system.quantite}}
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<h4>
|
||||
<label class="argent-total-text">
|
||||
Valeur Total Equipement : {{valeurEquipement.po}} PO - {{valeurEquipement.pa}} PA - {{valeurEquipement.sc}} SC (total {{valeurEquipement.valueSC}} SC)
|
||||
</label>
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Equipements</label></h3>
|
||||
</span>
|
||||
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Quantité</label>
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="equipement" title="Ajouter un équipement"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each equipements as |equipement key|}}
|
||||
<li class="item flexrow " data-item-id="{{equipement._id}}" data-item-type="equipement">
|
||||
<img class="item-name-img" src="{{equipement.img}}" />
|
||||
<span class="item-name-label competence-name">{{equipement.name}}</span>
|
||||
<span class="item-name-label competence-name item-field-label-medium">{{equipement.system.quantite}}
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Biography Tab --}}
|
||||
<div class="tab biodata" data-group="primary" data-tab="biodata">
|
||||
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
{{#each historiques as |historique key|}}
|
||||
<li class="item flexrow" data-item-id="{{historique._id}}">
|
||||
<label class="generic-label">Historique : </label>
|
||||
<label class="generic-label">{{historique.name}}</label>
|
||||
<label></label>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
{{#each profils as |profil key|}}
|
||||
<li class="item flexrow" data-item-id="{{profil._id}}">
|
||||
<label class="generic-label">Profil : </label>
|
||||
<label class="generic-label">{{profil.name}}</label>
|
||||
<label></label>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-3col">
|
||||
<div>
|
||||
<ul>
|
||||
<li class="flexrow item">
|
||||
<label class="generic-label">Sexe</label>
|
||||
<input type="text" class="" name="system.biodata.sex" value="{{system.biodata.sex}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Age</label>
|
||||
<input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Expérience</label>
|
||||
<input type="text" class="" name="system.biodata.experience" value="{{system.biodata.experience}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Taille</label>
|
||||
<input type="text" class="" name="system.biodata.size" value="{{system.biodata.size}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Cheveux</label>
|
||||
<input type="text" class="" name="system.biodata.hair" value="{{system.biodata.hair}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Yeux</label>
|
||||
<input type="text" class="" name="system.biodata.eyes" value="{{system.biodata.eyes}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="generic-label">Main préférée</label>
|
||||
<input type="text" class="" name="system.biodata.preferredhand" value="{{system.biodata.preferredhand}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="generic-label">Poids</label>
|
||||
<input type="text" class="" name="system.biodata.weight" value="{{system.biodata.weight}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span>
|
||||
<h3>Description</h3>
|
||||
</span>
|
||||
<div class="medium-editor item-text-long-line">
|
||||
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</section>
|
||||
789
.history/templates/actor-sheet_20260403094215.hbs
Normal file
789
.history/templates/actor-sheet_20260403094215.hbs
Normal file
@@ -0,0 +1,789 @@
|
||||
<section>
|
||||
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
|
||||
{{!-- Bannière : image + nom + bouton --}}
|
||||
<div class="header-banner">
|
||||
<img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
|
||||
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom du personnage" /></h1>
|
||||
<button type="button" class="sheet-mode-toggle" data-action="toggleSheet"
|
||||
data-tooltip="{{#if isEditMode}}Mode Visualisation{{else}}Mode Édition{{/if}}">
|
||||
<i class="{{#if isEditMode}}fas fa-eye{{else}}fas fa-edit{{/if}}"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Cartes de statistiques --}}
|
||||
<div class="header-stat-cards">
|
||||
|
||||
{{!-- LOI --}}
|
||||
<div class="stat-card card-loi{{#if (gt system.balance.loi system.balance.chaos)}} dominant{{/if}}">
|
||||
<div class="stat-card-title">⚖ Loi</div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>Niv.</label>
|
||||
<input type="text" name="system.balance.loi" value="{{system.balance.loi}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Pts</label>
|
||||
<select name="system.balance.pointsloi">
|
||||
{{selectOptions config.listeNiveauSkill selected=system.balance.pointsloi}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="stat-derived">Aspect : {{system.balance.aspect}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- CHAOS --}}
|
||||
<div class="stat-card card-chaos{{#if (gt system.balance.chaos system.balance.loi)}} dominant{{/if}}">
|
||||
<div class="stat-card-title">☯ Chaos</div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>Niv.</label>
|
||||
<input type="text" name="system.balance.chaos" value="{{system.balance.chaos}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Pts</label>
|
||||
<select name="system.balance.pointschaos">
|
||||
{{selectOptions config.listeNiveauSkill selected=system.balance.pointschaos}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="stat-derived">Marge : {{system.balance.marge}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- BONNE AVENTURE --}}
|
||||
<div class="stat-card card-ba">
|
||||
<div class="stat-card-title">★ Bonne Aventure</div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>Base</label>
|
||||
<input type="text" name="system.bonneaventure.base" value="{{system.bonneaventure.base}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Act.</label>
|
||||
<input type="text" name="system.bonneaventure.actuelle" value="{{system.bonneaventure.actuelle}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Éclat</label>
|
||||
<input type="text" name="system.eclat.value" value="{{system.eclat.value}}" data-dtype="Number" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- VIGUEUR --}}
|
||||
<div class="stat-card card-vigueur">
|
||||
<div class="stat-card-title">♥ Vigueur <span class="stat-sub">({{system.sante.vigueur}})</span></div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>État</label>
|
||||
<select name="system.sante.etat">
|
||||
{{selectOptions combativiteList selected=system.sante.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- ÂME --}}
|
||||
<div class="stat-card card-ame">
|
||||
<div class="stat-card-title">✦ Âme <span class="stat-sub">(Seuil {{system.ame.seuilpouvoir}})</span></div>
|
||||
<div class="stat-card-content">
|
||||
<div class="stat-field">
|
||||
<label>État</label>
|
||||
<select name="system.ame.etat">
|
||||
{{selectOptions ameList selected=system.ame.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="stat-field">
|
||||
<label>Max</label>
|
||||
<select name="system.ame.max">
|
||||
{{selectOptions ameMaxList selected=system.ame.max valueAttr="value" nameAttr="value" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<hr>
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="principal">Attributs</a>
|
||||
<a class="item" data-tab="competences">Compétences</a>
|
||||
<a class="item" data-tab="dons">Dons & Pactes</a>
|
||||
<a class="item" data-tab="combat">Combat</a>
|
||||
<a class="item" data-tab="equipement">Equipement</a>
|
||||
<a class="item" data-tab="biodata">Bio&Notes</a>
|
||||
</nav>
|
||||
<hr>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Main Tab --}}
|
||||
<div class="tab principal" data-group="primary" data-tab="principal">
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="grid grid-2col">
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
{{#each system.attributs as |attr key|}}
|
||||
<li class="item flexrow " data-attr-key="{{key}}">
|
||||
<img class="item-name-img" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/{{attr.labelnorm}}.webp">
|
||||
<span data-tooltip="Cliquez pour faire un jet" class="item-name-label competence-name item-field-label-medium"><a
|
||||
data-action="rollAttribut" data-attr-key="{{key}}">{{attr.label}}</a></span>
|
||||
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
|
||||
name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number">
|
||||
{{selectOptions @root.config.listeNiveauSkill selected=attr.value}}
|
||||
</select>
|
||||
</li>
|
||||
{{/each}}
|
||||
|
||||
<li class="item flexrow">
|
||||
<img class="item-name-img" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/vitesse.webp">
|
||||
<span class="item-name-label competence-name item-field-label-medium">Vitesse</span>
|
||||
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.vitesse.value"
|
||||
value="{{system.vitesse.value}}" data-dtype="Number" />
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype adversite-section">
|
||||
|
||||
<h4 class="adversite-section-title">Adversités</h4>
|
||||
<div class="adversite-cards">
|
||||
{{#each system.adversite as |adv key|}}
|
||||
<div class="adversite-card adversite-{{key}}" data-adversite="{{key}}">
|
||||
<div class="adversite-card-title">{{upperFirst key}}</div>
|
||||
<img class="adversite-gem" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/gemme_{{key}}.webp">
|
||||
<div class="adversite-value">{{adv}}</div>
|
||||
<div class="adversite-controls">
|
||||
<a data-action="modifyAdversite" class="adv-btn adv-minus" data-adversite-value="-1">−</a>
|
||||
<a data-action="modifyAdversite" class="adv-btn adv-plus" data-adversite-value="1">+</a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
<div class="adversite-total {{#if adversiteTotal}}adversite-total-nonzero{{/if}}"
|
||||
data-tooltip="Malus soustrait à tous les jets de dés">
|
||||
<span class="adversite-total-label">Malus jets</span>
|
||||
<span class="adversite-total-value">−{{adversiteTotal}}</span>
|
||||
</div>
|
||||
|
||||
{{#if isGM}}
|
||||
<div class="adversite-modifiers">
|
||||
<div class="adversite-modifier-row">
|
||||
<label data-tooltip="Modificateur de Vigueur">Mod. Vigueur</label>
|
||||
<input type="text" name="system.sante.vigueurmodifier"
|
||||
value="{{system.sante.vigueurmodifier}}" data-dtype="Number" />
|
||||
</div>
|
||||
<div class="adversite-modifier-row">
|
||||
<label data-tooltip="Modificateur de Seuil de Pouvoir">Mod. Seuil Pouvoir</label>
|
||||
<input type="text" name="system.ame.seuilpouvoirmodifier"
|
||||
value="{{system.ame.seuilpouvoirmodifier}}" data-dtype="Number" />
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Talents</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Résumé</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="talent" title="Ajouter un Talent"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each talents as |talent key|}}
|
||||
<li class="item flexrow " data-item-id="{{talent._id}}" data-item-type="talent">
|
||||
<img class="item-name-img" src="{{talent.img}}" />
|
||||
<span class="item-name-label competence-name">{{talent.name}}</span>
|
||||
<span class="item-name-label item-field-label-long2">{{talent.system.resumebonus}}</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Competences Tab --}}
|
||||
<div class="tab competences" data-group="primary" data-tab="competences">
|
||||
|
||||
<div class="flexrow">
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Compétences</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Niveau</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
</li>
|
||||
{{#each skills as |skill key|}}
|
||||
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
|
||||
<img class="item-name-img" src="{{skill.img}}" />
|
||||
|
||||
<div class="flexcol item-name-label">
|
||||
|
||||
<span class="item-name-label competence-name"><a data-action="rollCompetence" class="item-field-label-short"
|
||||
data-attr-key="tochoose">{{skill.name}}</a></span>
|
||||
|
||||
<span class="predilection-text">
|
||||
{{#each skill.system.predilections as |pred key|}}
|
||||
{{#if (and pred.acquise (not pred.used))}}
|
||||
{{pred.name}},
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
|
||||
data-item-field="niveau" value="{{skill.system.niveau}}" data-dtype="Number">
|
||||
{{selectOptions @root.config.listeNiveauSkill selected=skill.system.niveau}}
|
||||
</select>
|
||||
|
||||
{{#if (ne skill.system.attribut1 "none")}}
|
||||
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut1}}">{{upper
|
||||
skill.system.attribut1}} : {{skill.system.attribut1total}}</button>
|
||||
{{/if}}
|
||||
{{#if (ne skill.system.attribut2 "none")}}
|
||||
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut2}}">{{upper
|
||||
skill.system.attribut2}} : {{skill.system.attribut2total}}</button>
|
||||
{{/if}}
|
||||
{{#if (ne skill.system.attribut3 "none")}}
|
||||
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut3}}">{{upper
|
||||
skill.system.attribut3}} : {{skill.system.attribut3total}}</button>
|
||||
{{/if}}
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Dons/Pactes Tab --}}
|
||||
<div class="tab dons" data-group="primary" data-tab="dons">
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Dons</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Allégeance</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="don"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each dons as |don key|}}
|
||||
<li class="item flexrow " data-item-id="{{don._id}}" data-item-type="don">
|
||||
<img class="item-name-img" src="{{don.img}}" />
|
||||
<span class="item-name-label competence-name">{{don.name}}</span>
|
||||
<span class="item-field-label-short">{{don.system.allegeance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Pactes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Allégeance</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="pacte"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each pactes as |pacte key|}}
|
||||
<li class="item flexrow " data-item-id="{{pacte._id}}" data-item-type="pacte">
|
||||
<img class="item-name-img" src="{{pacte.img}}" />
|
||||
<span class="item-name-label competence-name">{{pacte.name}}</span>
|
||||
<span class="item-field-label-short">{{pacte.system.allegeance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Runes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Haut Parler</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Difficulté</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="rune"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each runes as |rune key|}}
|
||||
<li class="item flexrow " data-item-id="{{rune._id}}" data-item-type="rune">
|
||||
<img class="item-name-img" src="{{rune.img}}" />
|
||||
<span class="item-name-label competence-name">{{rune.name}}</span>
|
||||
<span class="item-field-label-long">{{rune.system.formule}}</span>
|
||||
<span class="item-field-label-short">{{rune.system.seuil}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Tendances</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Allégeance</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="tendance"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each tendances as |tendance key|}}
|
||||
<li class="item flexrow " data-item-id="{{tendance._id}}" data-item-type="tendance">
|
||||
<img class="item-name-img" src="{{tendance.img}}" />
|
||||
<span class="item-name-label competence-name">{{tendance.name}}</span>
|
||||
<span class="item-field-label-short">{{tendance.system.allegeance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Traits Chaotiques</label></h3>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="traitchaotique"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each traitsChaotiques as |trait key|}}
|
||||
<li class="item flexrow " data-item-id="{{trait._id}}" data-item-type="traitchaotique">
|
||||
<img class="item-name-img" src="{{trait.img}}" />
|
||||
<span class="item-name-label competence-name">{{trait.name}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Traits d'Espèce</label></h3>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="traitespece"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each traitsEspeces as |trait key|}}
|
||||
<li class="item flexrow " data-item-id="{{trait._id}}" data-item-type="traitespece">
|
||||
<img class="item-name-img" src="{{trait.img}}" />
|
||||
<span class="item-name-label competence-name">{{trait.name}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Equipement Tab --}}
|
||||
<div class="tab combat" data-group="primary" data-tab="combat">
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<button class="chat-card-button" data-action="rollInitiative">Initiative (actuelle : {{initiative}} )</button>
|
||||
<label class="item-field-label-short"> </label>
|
||||
<label class="item-field-label-short">Monté?</label>
|
||||
<input type="checkbox" name="system.combat.monte" {{checked system.combat.monte}} />
|
||||
<label class="item-field-label-short"> </label>
|
||||
<label class="item-field-label-medium">Défense totale?</label>
|
||||
<input type="checkbox" name="system.combat.defensetotale" {{checked system.combat.defensetotale}} />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<button class="chat-card-button" data-action="rollAssommer">Assommer</button>
|
||||
<button class="chat-card-button" data-action="rollCoupBas">Coup bas</button>
|
||||
<button class="chat-card-button" data-action="rollImmobiliser">Immobiliser</button>
|
||||
<button class="chat-card-button" data-action="rollRepousser">Repousser</button>
|
||||
<button class="chat-card-button" data-action="rollDesengager">Se désengager</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Armes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Attaque</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Défense</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Dégats</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="arme" title="Ajouter une arme"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each armes as |arme key|}}
|
||||
<li class="item flexrow " data-item-id="{{arme._id}}" data-item-type="arme">
|
||||
<img class="item-name-img" src="{{arme.img}}" />
|
||||
<span class="item-name-label competence-name">{{arme.name}}</span>
|
||||
|
||||
<span class="item-field-label-short">
|
||||
{{#if arme.system.equipped}}
|
||||
<button data-action="rollArmeOffensif" class="button-sheet-roll">{{arme.system.totalOffensif}}</button>
|
||||
{{else}}
|
||||
<button disabled data-action="rollArmeOffensif" class="button-sheet-roll">{{arme.system.totalOffensif}}</button>
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
{{#if arme.system.isdefense}}
|
||||
<span class="item-field-label-short arme-defensif item-field-label-short"><label
|
||||
class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
|
||||
{{else}}
|
||||
<span class="item-field-label-short arme-defensif item-field-label-short"><label
|
||||
class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
|
||||
{{/if}}
|
||||
|
||||
<span class="item-field-label-short">
|
||||
{{#if arme.system.equipped}}
|
||||
<button data-action="rollArmeDegats" class="button-sheet-roll">{{arme.system.totalDegats}}</button>
|
||||
{{else}}
|
||||
<button disabled data-action="rollArmeDegats" class="button-sheet-roll">{{arme.system.totalDegats}}</button>
|
||||
{{/if}}
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="equipItem" title="Equipé">{{#if arme.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control" data-action="editItem" title="Editer l' Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Protections</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Protection</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="protection" title="Ajouter une arme"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each protections as |protection key|}}
|
||||
<li class="item flexrow " data-item-id="{{protection._id}}" data-item-type="protection">
|
||||
<img class="item-name-img" src="{{protection.img}}" />
|
||||
<span class="item-name-label competence-name">{{protection.name}}</span>
|
||||
<span class="item-field-label-short arme-defensif"><label
|
||||
class="arme-defensif">{{protection.system.protection}}</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="equipItem" title="Equipé">{{#if protection.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control" data-action="editItem" title="Editer l'Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Equipement Tab --}}
|
||||
<div class="tab equipement" data-group="primary" data-tab="equipement">
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<hr>
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<h4>
|
||||
<label class="argent-total-text">
|
||||
Argent Total : {{richesse.po}} PO - {{richesse.pa}} PA - {{richesse.sc}} SC (total {{richesse.valueSC}} SC)
|
||||
</label>
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Richesses et Argent</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Quantité</label>
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="monnaie" title="Ajouter une monnaie"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each monnaies as |monnaie key|}}
|
||||
<li class="item flexrow " data-item-id="{{monnaie._id}}" data-item-type="monnaie">
|
||||
<img class="item-name-img" src="{{monnaie.img}}" />
|
||||
<span class="item-name-label competence-name">{{monnaie.name}}</span>
|
||||
<span class="item-name-label competence-name item-field-label-medium">{{monnaie.system.quantite}}
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<h4>
|
||||
<label class="argent-total-text">
|
||||
Valeur Total Equipement : {{valeurEquipement.po}} PO - {{valeurEquipement.pa}} PA - {{valeurEquipement.sc}} SC (total {{valeurEquipement.valueSC}} SC)
|
||||
</label>
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Equipements</label></h3>
|
||||
</span>
|
||||
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Quantité</label>
|
||||
</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="createItem" data-type="equipement" title="Ajouter un équipement"><i
|
||||
class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each equipements as |equipement key|}}
|
||||
<li class="item flexrow " data-item-id="{{equipement._id}}" data-item-type="equipement">
|
||||
<img class="item-name-img" src="{{equipement.img}}" />
|
||||
<span class="item-name-label competence-name">{{equipement.name}}</span>
|
||||
<span class="item-name-label competence-name item-field-label-medium">{{equipement.system.quantite}}
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
|
||||
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{{!-- Biography Tab --}}
|
||||
<div class="tab biodata" data-group="primary" data-tab="biodata">
|
||||
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
{{#each historiques as |historique key|}}
|
||||
<li class="item flexrow" data-item-id="{{historique._id}}">
|
||||
<label class="generic-label">Historique : </label>
|
||||
<label class="generic-label">{{historique.name}}</label>
|
||||
<label></label>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
{{#each profils as |profil key|}}
|
||||
<li class="item flexrow" data-item-id="{{profil._id}}">
|
||||
<label class="generic-label">Profil : </label>
|
||||
<label class="generic-label">{{profil.name}}</label>
|
||||
<label></label>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control" data-action="editItem" title="Edit Item"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control" data-action="deleteItem" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-3col">
|
||||
<div>
|
||||
<ul>
|
||||
<li class="flexrow item">
|
||||
<label class="generic-label">Sexe</label>
|
||||
<input type="text" class="" name="system.biodata.sex" value="{{system.biodata.sex}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Age</label>
|
||||
<input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Expérience</label>
|
||||
<input type="text" class="" name="system.biodata.experience" value="{{system.biodata.experience}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Taille</label>
|
||||
<input type="text" class="" name="system.biodata.size" value="{{system.biodata.size}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Cheveux</label>
|
||||
<input type="text" class="" name="system.biodata.hair" value="{{system.biodata.hair}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<li class="item flexrow">
|
||||
<label class="generic-label">Yeux</label>
|
||||
<input type="text" class="" name="system.biodata.eyes" value="{{system.biodata.eyes}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="generic-label">Main préférée</label>
|
||||
<input type="text" class="" name="system.biodata.preferredhand" value="{{system.biodata.preferredhand}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="generic-label">Poids</label>
|
||||
<input type="text" class="" name="system.biodata.weight" value="{{system.biodata.weight}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span>
|
||||
<h3>Description</h3>
|
||||
</span>
|
||||
<div class="medium-editor item-text-long-line">
|
||||
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</section>
|
||||
@@ -356,6 +356,30 @@
|
||||
}
|
||||
}
|
||||
|
||||
// ── Éditeurs ProseMirror dans les onglets ──────────────────────────
|
||||
// Le texte global du sheet-body hérite d'une couleur claire (#efe6d8)
|
||||
// mais le fond de l'éditeur est blanc/beige clair → illisible.
|
||||
// On force couleur sombre + fond clair sur le contenu éditable.
|
||||
.tab prose-mirror,
|
||||
.tab .editor prose-mirror {
|
||||
.editor-content {
|
||||
color: #2a1a0a !important;
|
||||
background: rgba(255, 250, 240, 0.92);
|
||||
border-radius: 3px;
|
||||
padding: 0.4rem 0.5rem;
|
||||
min-height: 6rem;
|
||||
|
||||
p, ul, ol, li, h1, h2, h3, h4 {
|
||||
color: #2a1a0a !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Fond et couleur quand actif (mode édition)
|
||||
&:not(.inactive) .editor-content {
|
||||
background: rgba(255, 252, 245, 0.98);
|
||||
}
|
||||
}
|
||||
|
||||
// Listes compactes dans les sections
|
||||
.compact-list {
|
||||
list-style: none;
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
--tab-header-font-size: 1.0rem;
|
||||
--tab-header-font-weight: 700;
|
||||
--tab-header-color: #403f3e;
|
||||
--tab-header-color-active: #4a0404;
|
||||
--tab-header-color-active: #2a1400;
|
||||
|
||||
--font-primary: CentaurMT;
|
||||
--font-secondary: CentaurMT;
|
||||
@@ -1313,7 +1313,8 @@
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
max-height: 1.8rem;
|
||||
width: 3.5rem;
|
||||
width: 5rem;
|
||||
white-space: nowrap;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
@@ -1332,7 +1333,8 @@
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
max-height: 1.8rem;
|
||||
width: 3.5rem;
|
||||
width: 5rem;
|
||||
white-space: nowrap;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
@@ -1629,50 +1631,50 @@
|
||||
margin-right: 6px;
|
||||
}
|
||||
/* ==================== Roll Dialog V2 Styles ==================== */
|
||||
.application.mournblade-roll-dialog .window-content {
|
||||
.application.mournblade-cyd2-roll-dialog .window-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.window-app.mournblade-roll-dialog .window-content {
|
||||
.window-app.mournblade-cyd2-roll-dialog .window-content {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog {
|
||||
.mournblade-cyd2-roll-dialog {
|
||||
background: url("../assets/ui/pc_sheet_bg.webp");
|
||||
background-repeat: repeat;
|
||||
font-family: CentaurMT;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog * {
|
||||
.mournblade-cyd2-roll-dialog * {
|
||||
color: #2a2a2a;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.mournblade-roll-dialog .dialog-header {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 8px;
|
||||
background: linear-gradient(135deg, #4a0404 0%, #6d0808 100%);
|
||||
border-bottom: 3px solid #8b0000;
|
||||
background: linear-gradient(135deg, #2a1400 0%, #4a2200 100%);
|
||||
border-bottom: 3px solid #8b4513;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-header .actor-icon {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .actor-icon {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 4px;
|
||||
border: 2px solid #8b0000;
|
||||
border: 2px solid #8b4513;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title h3 {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title h3 {
|
||||
margin: 0;
|
||||
font-size: 1.1rem;
|
||||
color: #f5f5f5;
|
||||
@@ -1681,82 +1683,84 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title .competence-name {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title .competence-name {
|
||||
font-size: 0.85rem;
|
||||
color: #ffcccb;
|
||||
color: #f0d0a0;
|
||||
margin-top: 2px;
|
||||
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title .competence-name .attribut-info {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title .competence-name .attribut-info {
|
||||
color: #ffd700;
|
||||
font-weight: bold;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
/* Content */
|
||||
.mournblade-roll-dialog .dialog-content {
|
||||
padding: 8px;
|
||||
max-height: 650px;
|
||||
.mournblade-cyd2-roll-dialog .dialog-content {
|
||||
padding: 6px 8px;
|
||||
max-height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar {
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar-track {
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar-track {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar-thumb {
|
||||
background: rgba(139, 0, 0, 0.6);
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar-thumb {
|
||||
background: rgba(139, 69, 19, 0.6);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(139, 0, 0, 0.8);
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(139, 69, 19, 0.8);
|
||||
}
|
||||
|
||||
/* Form Groups */
|
||||
.mournblade-roll-dialog .form-group {
|
||||
margin-bottom: 8px;
|
||||
.mournblade-cyd2-roll-dialog .form-group {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .form-group label {
|
||||
display: block;
|
||||
.mournblade-cyd2-roll-dialog .form-group label {
|
||||
flex-shrink: 0;
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
color: #1a1a1a;
|
||||
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||
margin-bottom: 3px;
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
|
||||
.mournblade-roll-dialog .form-group input,
|
||||
.mournblade-roll-dialog .form-group select {
|
||||
width: 100%;
|
||||
padding: 5px 8px;
|
||||
.mournblade-cyd2-roll-dialog .form-group input,
|
||||
.mournblade-cyd2-roll-dialog .form-group select {
|
||||
flex: 1;
|
||||
min-width: 60px;
|
||||
padding: 4px 6px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
border: 1px solid rgba(100, 100, 100, 0.5);
|
||||
border-radius: 3px;
|
||||
color: #1a1a1a;
|
||||
font-size: 0.95rem;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
font-family: CentaurMT;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .form-group input:focus,
|
||||
.mournblade-roll-dialog .form-group select:focus {
|
||||
.mournblade-cyd2-roll-dialog .form-group input:focus,
|
||||
.mournblade-cyd2-roll-dialog .form-group select:focus {
|
||||
outline: none;
|
||||
border-color: #8b0000;
|
||||
box-shadow: 0 0 5px rgba(139, 0, 0, 0.6);
|
||||
border-color: #8b4513;
|
||||
box-shadow: 0 0 5px rgba(139, 69, 19, 0.6);
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .form-group input:disabled,
|
||||
.mournblade-roll-dialog .form-group select:disabled {
|
||||
.mournblade-cyd2-roll-dialog .form-group input:disabled,
|
||||
.mournblade-cyd2-roll-dialog .form-group select:disabled {
|
||||
opacity: 0.7;
|
||||
cursor: not-allowed;
|
||||
background: rgba(200, 200, 200, 0.9);
|
||||
@@ -1764,23 +1768,23 @@
|
||||
}
|
||||
|
||||
/* Grids */
|
||||
.mournblade-roll-dialog .modifiers-grid {
|
||||
.mournblade-cyd2-roll-dialog .modifiers-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
margin-bottom: 10px;
|
||||
gap: 6px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/* Sections spéciales */
|
||||
.mournblade-roll-dialog .attributes-section {
|
||||
background: rgba(139, 0, 0, 0.1);
|
||||
.mournblade-cyd2-roll-dialog .attributes-section {
|
||||
background: rgba(139, 69, 19, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(139, 0, 0, 0.3);
|
||||
border: 1px solid rgba(139, 69, 19, 0.3);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .rune-section {
|
||||
.mournblade-cyd2-roll-dialog .rune-section {
|
||||
background: rgba(75, 0, 130, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
@@ -1788,37 +1792,37 @@
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .weapon-section {
|
||||
.mournblade-cyd2-roll-dialog .weapon-section {
|
||||
background: rgba(184, 134, 11, 0.1);
|
||||
padding: 8px;
|
||||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(184, 134, 11, 0.3);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .weapon-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 5px 8px;
|
||||
background: rgba(184, 134, 11, 0.15);
|
||||
border-radius: 3px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .weapon-info .weapon-label {
|
||||
.mournblade-cyd2-roll-dialog .weapon-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 4px 6px;
|
||||
background: rgba(184, 134, 11, 0.15);
|
||||
border-radius: 3px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.mournblade-cyd2-roll-dialog .weapon-info .weapon-label {
|
||||
font-weight: bold;
|
||||
font-size: 0.9rem;
|
||||
color: #1a1a1a;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .weapon-info .weapon-bonus {
|
||||
.mournblade-cyd2-roll-dialog .weapon-info .weapon-bonus {
|
||||
font-size: 0.85rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .defense-info {
|
||||
.mournblade-cyd2-roll-dialog .defense-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
@@ -1828,79 +1832,88 @@
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .defense-info .defense-label {
|
||||
.mournblade-cyd2-roll-dialog .defense-info .defense-label {
|
||||
font-size: 0.85rem;
|
||||
color: #1a1a1a;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .defense-info .defense-value {
|
||||
.mournblade-cyd2-roll-dialog .defense-info .defense-value {
|
||||
font-size: 1rem;
|
||||
color: #006400;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Combat modifiers */
|
||||
.mournblade-roll-dialog .combat-modifiers,
|
||||
.mournblade-roll-dialog .ranged-combat-section {
|
||||
background: rgba(139, 0, 0, 0.1);
|
||||
padding: 8px;
|
||||
.mournblade-cyd2-roll-dialog .combat-modifiers,
|
||||
.mournblade-cyd2-roll-dialog .ranged-combat-section {
|
||||
background: rgba(139, 69, 19, 0.1);
|
||||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(139, 0, 0, 0.3);
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid rgba(139, 69, 19, 0.3);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .combat-modifiers h4,
|
||||
.mournblade-roll-dialog .ranged-combat-section h4 {
|
||||
margin: 0 0 8px 0;
|
||||
.mournblade-cyd2-roll-dialog .combat-modifiers h4,
|
||||
.mournblade-cyd2-roll-dialog .ranged-combat-section h4 {
|
||||
margin: 0 0 6px 0;
|
||||
color: #2a2a2a;
|
||||
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);
|
||||
font-size: 0.95rem;
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
.mournblade-roll-dialog .modifiers-columns {
|
||||
.mournblade-cyd2-roll-dialog .modifiers-columns {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 5px 10px;
|
||||
gap: 3px 8px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .checkbox-label {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 4px 6px;
|
||||
gap: 5px;
|
||||
padding: 3px 4px;
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .checkbox-label:hover {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label:hover {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .checkbox-label input[type="checkbox"] {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label input[type="checkbox"] {
|
||||
width: auto;
|
||||
margin: 0;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
accent-color: #8b0000;
|
||||
accent-color: #8b4513;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .checkbox-label span {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label span {
|
||||
color: #1a1a1a;
|
||||
font-size: 0.85rem;
|
||||
font-size: 0.82rem;
|
||||
user-select: none;
|
||||
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .checkbox-label.highlight {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label.highlight {
|
||||
background: rgba(255, 215, 0, 0.15);
|
||||
border: 1px solid rgba(255, 215, 0, 0.4);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .info-message {
|
||||
/* Ranged combat: 1-column grid for selects (long labels) */
|
||||
.mournblade-cyd2-roll-dialog .ranged-combat-section .modifiers-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.mournblade-cyd2-roll-dialog .info-message {
|
||||
padding: 6px 10px;
|
||||
background: rgba(33, 150, 243, 0.1);
|
||||
border-left: 3px solid rgba(33, 150, 243, 0.6);
|
||||
@@ -1912,7 +1925,7 @@
|
||||
|
||||
|
||||
/* Malus section */
|
||||
.mournblade-roll-dialog .malus-section {
|
||||
.mournblade-cyd2-roll-dialog .malus-section {
|
||||
background: rgba(100, 100, 100, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
@@ -1920,13 +1933,13 @@
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .malus-grid {
|
||||
.mournblade-cyd2-roll-dialog .malus-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .malus-item {
|
||||
.mournblade-cyd2-roll-dialog .malus-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
@@ -1935,20 +1948,20 @@
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .malus-item .malus-label {
|
||||
.mournblade-cyd2-roll-dialog .malus-item .malus-label {
|
||||
font-size: 0.85rem;
|
||||
color: #2a2a2a;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .malus-item .malus-value {
|
||||
.mournblade-cyd2-roll-dialog .malus-item .malus-value {
|
||||
font-size: 0.95rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Registered modifiers */
|
||||
.mournblade-roll-dialog .registered-modifiers {
|
||||
.mournblade-cyd2-roll-dialog .registered-modifiers {
|
||||
background: rgba(75, 0, 130, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
@@ -1956,7 +1969,7 @@
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .registered-modifiers h4 {
|
||||
.mournblade-cyd2-roll-dialog .registered-modifiers h4 {
|
||||
margin: 0 0 6px 0;
|
||||
color: #2a2a2a;
|
||||
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);
|
||||
@@ -1964,30 +1977,32 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .registered-modifiers h4 i {
|
||||
.mournblade-cyd2-roll-dialog .registered-modifiers h4 i {
|
||||
margin-right: 6px;
|
||||
color: #4b0082;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .modifier-item {
|
||||
.mournblade-cyd2-roll-dialog .modifier-item {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
/* Special option */
|
||||
.mournblade-roll-dialog .special-option {
|
||||
.mournblade-cyd2-roll-dialog .special-option {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* Dialog buttons */
|
||||
.mournblade-roll-dialog .dialog-buttons {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons,
|
||||
.mournblade-cyd2-roll-dialog .form-footer {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
padding: 10px;
|
||||
border-top: 2px solid rgba(139, 0, 0, 0.3);
|
||||
padding: 10px 12px 14px !important;
|
||||
border-top: 2px solid rgba(139, 69, 19, 0.3);
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-buttons button {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button {
|
||||
flex: 1;
|
||||
padding: 8px 14px;
|
||||
border: none;
|
||||
@@ -2000,33 +2015,46 @@
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld10"],
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld20"] {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #6d0808 100%);
|
||||
color: #f5f5f5;
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld10"],
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld20"],
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld10"],
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld20"] {
|
||||
background: rgba(100, 100, 100, 0.3) !important;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld10"]:hover,
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld20"]:hover {
|
||||
background: linear-gradient(135deg, #a00000 0%, #8b0000 100%);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 8px rgba(139, 0, 0, 0.5);
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld10"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld20"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld10"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld20"]:hover {
|
||||
background: rgba(100, 100, 100, 0.5) !important;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="cancel"] {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="cancel"],
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="cancel"] {
|
||||
background: rgba(100, 100, 100, 0.3);
|
||||
color: #2a2a2a;
|
||||
}
|
||||
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="cancel"]:hover {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="cancel"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="cancel"]:hover {
|
||||
background: rgba(100, 100, 100, 0.5);
|
||||
}
|
||||
|
||||
/* Affichage d'une valeur non-éditable dans le dialog */
|
||||
.mournblade-cyd2-roll-dialog .field-value {
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
color: #8b4513;
|
||||
font-size: 0.95rem;
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
/* ==================== Sheet Mode Toggle Button ==================== */
|
||||
.sheet-mode-toggle {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
border: 1px solid #8b0000;
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
border: 1px solid #8b4513;
|
||||
border-radius: 3px;
|
||||
color: #f5f5f5;
|
||||
padding: 2px 4px;
|
||||
@@ -2041,7 +2069,7 @@
|
||||
flex-shrink: 0;
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(135deg, #a00000 0%, #5a0505 100%);
|
||||
background: linear-gradient(135deg, #a06010 0%, #4a2200 100%);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -2054,15 +2082,15 @@
|
||||
|
||||
/* ==================== Chat Message Styles ==================== */
|
||||
.mournblade-chat-result {
|
||||
background: linear-gradient(135deg, rgba(74, 4, 4, 0.2) 0%, rgba(139, 0, 0, 0.15) 100%);
|
||||
border: 2px solid #8b0000;
|
||||
background: linear-gradient(135deg, rgba(42, 20, 0, 0.2) 0%, rgba(139, 69, 19, 0.15) 100%);
|
||||
border: 2px solid #8b4513;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
font-family: CentaurMT, serif;
|
||||
|
||||
.chat-result-header {
|
||||
background: linear-gradient(135deg, #4a0404 0%, #2a0202 100%);
|
||||
border-bottom: 2px solid #8b0000;
|
||||
background: linear-gradient(135deg, #2a1400 0%, #2a0202 100%);
|
||||
border-bottom: 2px solid #8b4513;
|
||||
padding: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -2072,7 +2100,7 @@
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #8b0000;
|
||||
border: 1px solid #8b4513;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
@@ -2103,7 +2131,7 @@
|
||||
.result-main {
|
||||
background: rgba(255, 250, 240, 0.9);
|
||||
padding: 4px 8px;
|
||||
border-bottom: 1px solid rgba(139, 0, 0, 0.3);
|
||||
border-bottom: 1px solid rgba(139, 69, 19, 0.3);
|
||||
|
||||
.result-display {
|
||||
display: flex;
|
||||
@@ -2120,10 +2148,10 @@
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
padding: 4px 6px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(139, 0, 0, 0.2);
|
||||
border: 1px solid rgba(139, 69, 19, 0.2);
|
||||
|
||||
i {
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-size: 1rem;
|
||||
display: block;
|
||||
margin-bottom: 2px;
|
||||
@@ -2138,7 +2166,7 @@
|
||||
.total-value,
|
||||
.difficulty-value {
|
||||
font-size: 1.5rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);
|
||||
font-weight: bold;
|
||||
line-height: 1.2;
|
||||
@@ -2147,12 +2175,31 @@
|
||||
.total-label,
|
||||
.difficulty-label {
|
||||
font-size: 0.75rem;
|
||||
color: #4a0404;
|
||||
color: #2a1400;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
line-height: 1.1;
|
||||
}
|
||||
}
|
||||
|
||||
.d20-impair {
|
||||
flex: 2;
|
||||
background: rgba(180, 60, 0, 0.12);
|
||||
border-color: rgba(180, 60, 0, 0.4);
|
||||
|
||||
i {
|
||||
color: #b03000;
|
||||
display: inline;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.dice-value {
|
||||
display: inline;
|
||||
font-size: 0.85rem;
|
||||
color: #b03000;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.result-badge-container {
|
||||
@@ -2186,7 +2233,7 @@
|
||||
}
|
||||
|
||||
&.failure {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
color: white;
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
@@ -2219,7 +2266,7 @@
|
||||
|
||||
&.bonus {
|
||||
background: rgba(255, 200, 200, 0.6);
|
||||
border: 1px solid rgba(139, 0, 0, 0.5);
|
||||
border: 1px solid rgba(139, 69, 19, 0.5);
|
||||
}
|
||||
|
||||
&.malus {
|
||||
@@ -2248,13 +2295,13 @@
|
||||
.result-effects {
|
||||
padding: 8px;
|
||||
background: rgba(255, 230, 230, 0.4);
|
||||
border-top: 1px solid rgba(139, 0, 0, 0.3);
|
||||
border-top: 1px solid rgba(139, 69, 19, 0.3);
|
||||
|
||||
.effect-item {
|
||||
padding: 5px 8px;
|
||||
margin-bottom: 5px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border-left: 3px solid #8b0000;
|
||||
border-left: 3px solid #8b4513;
|
||||
border-radius: 3px;
|
||||
color: #000000;
|
||||
font-size: 0.85rem;
|
||||
@@ -2266,7 +2313,7 @@
|
||||
|
||||
i {
|
||||
margin-right: 6px;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
@@ -2311,8 +2358,8 @@
|
||||
}
|
||||
|
||||
.chat-card-button {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
border: 1px solid #8b0000;
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
border: 1px solid #8b4513;
|
||||
border-radius: 3px;
|
||||
color: #f5f5f5;
|
||||
padding: 6px 12px;
|
||||
@@ -2327,7 +2374,7 @@
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(135deg, #a00000 0%, #5a0505 100%);
|
||||
background: linear-gradient(135deg, #a06010 0%, #4a2200 100%);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -2343,12 +2390,119 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* Tag non-létaux dans les messages de dégâts */
|
||||
.mournblade-chat-result .non-lethal-tag {
|
||||
font-size: 0.8rem;
|
||||
color: #888;
|
||||
font-style: italic;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Welcome Message Styling */
|
||||
.mournblade-post-item {
|
||||
background: linear-gradient(135deg, rgba(42, 20, 0, 0.15) 0%, rgba(139, 69, 19, 0.1) 100%);
|
||||
border: 2px solid #8b4513;
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
font-family: CentaurMT, serif;
|
||||
margin: 4px 0;
|
||||
|
||||
.post-item-header {
|
||||
background: linear-gradient(135deg, #2a1400 0%, #3a1800 100%);
|
||||
border-bottom: 2px solid #8b4513;
|
||||
padding: 8px 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
|
||||
.post-item-img {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #8b4513;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.post-item-title {
|
||||
flex: 1;
|
||||
|
||||
.post-item-name {
|
||||
margin: 0 0 2px 0;
|
||||
color: #ffd700;
|
||||
font-size: 1.1rem;
|
||||
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.9);
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.post-item-type {
|
||||
font-size: 0.75rem;
|
||||
color: #f5e6d3;
|
||||
font-style: italic;
|
||||
opacity: 0.8;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.post-item-stats {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
padding: 6px 8px;
|
||||
background: rgba(139, 69, 19, 0.08);
|
||||
border-bottom: 1px solid rgba(139, 69, 19, 0.3);
|
||||
|
||||
.post-stat {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border: 1px solid rgba(139, 69, 19, 0.4);
|
||||
border-radius: 3px;
|
||||
padding: 2px 6px;
|
||||
font-size: 0.8rem;
|
||||
|
||||
&.post-stat-full {
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
color: #8b4513;
|
||||
font-weight: bold;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
color: #2a1400;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.post-item-description {
|
||||
padding: 8px 10px;
|
||||
color: #2a1400;
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.4;
|
||||
background: rgba(245, 230, 211, 0.85);
|
||||
|
||||
p {
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
em, i {
|
||||
color: #5a2d00;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
.mournblade-welcome-message {
|
||||
background: linear-gradient(135deg, rgba(139, 0, 0, 0.15) 0%, rgba(74, 4, 4, 0.2) 100%);
|
||||
border: 2px solid #8b0000;
|
||||
background: linear-gradient(135deg, rgba(139, 69, 19, 0.15) 0%, rgba(42, 20, 0, 0.2) 100%);
|
||||
border: 2px solid #8b4513;
|
||||
border-radius: 8px;
|
||||
padding: 0;
|
||||
margin: 8px 0;
|
||||
@@ -2357,7 +2511,7 @@
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
||||
|
||||
.welcome-header {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
border-bottom: 2px solid #ffd700;
|
||||
@@ -2400,7 +2554,7 @@
|
||||
margin-bottom: 10px;
|
||||
padding: 8px;
|
||||
background: rgba(255, 255, 255, 0.6);
|
||||
border-left: 4px solid #8b0000;
|
||||
border-left: 4px solid #8b4513;
|
||||
border-radius: 4px;
|
||||
|
||||
&:last-child {
|
||||
@@ -2410,7 +2564,7 @@
|
||||
.section-icon {
|
||||
flex-shrink: 0;
|
||||
font-size: 1.3rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
width: 28px;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -2421,7 +2575,7 @@
|
||||
|
||||
strong {
|
||||
display: block;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 2px;
|
||||
line-height: 1.2;
|
||||
@@ -2436,7 +2590,7 @@
|
||||
.welcome-link {
|
||||
display: inline-block;
|
||||
margin-top: 4px;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s;
|
||||
@@ -2447,8 +2601,8 @@
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: #a00000;
|
||||
text-shadow: 0 0 4px rgba(139, 0, 0, 0.3);
|
||||
color: #a06010;
|
||||
text-shadow: 0 0 4px rgba(139, 69, 19, 0.3);
|
||||
transform: translateX(2px);
|
||||
}
|
||||
}
|
||||
@@ -2457,7 +2611,7 @@
|
||||
}
|
||||
|
||||
.welcome-footer {
|
||||
background: linear-gradient(135deg, #4a0404 0%, #8b0000 100%);
|
||||
background: linear-gradient(135deg, #2a1400 0%, #8b4513 100%);
|
||||
padding: 8px;
|
||||
text-align: center;
|
||||
color: #ffd700;
|
||||
|
||||
@@ -28,7 +28,7 @@ export class MournbladeCYD2RollDialog {
|
||||
return foundry.applications.api.DialogV2.wait({
|
||||
window: { title: "Test de Capacité", icon: "fa-solid fa-dice-d20" },
|
||||
classes: ["mournblade-cyd2-roll-dialog"],
|
||||
position: { width: 360 },
|
||||
position: { width: 470 },
|
||||
modal: false,
|
||||
content,
|
||||
buttons: [
|
||||
@@ -38,8 +38,8 @@ export class MournbladeCYD2RollDialog {
|
||||
icon: "fa-solid fa-dice-d10",
|
||||
default: true,
|
||||
callback: (event, button, dialog) => {
|
||||
MournbladeCYD2RollDialog._updateRollDataFromForm(rollData, button.form.elements, actor);
|
||||
rollData.mainDice = "1d10";
|
||||
MournbladeCYD2RollDialog._updateRollDataFromForm(rollData, button.form, actor);
|
||||
rollData.mainDice = "d10";
|
||||
MournbladeCYD2Utility.rollMournbladeCYD2(rollData);
|
||||
}
|
||||
},
|
||||
@@ -48,8 +48,8 @@ export class MournbladeCYD2RollDialog {
|
||||
label: "Lancer 1d20",
|
||||
icon: "fa-solid fa-dice-d20",
|
||||
callback: (event, button, dialog) => {
|
||||
MournbladeCYD2RollDialog._updateRollDataFromForm(rollData, button.form.elements, actor);
|
||||
rollData.mainDice = "1d20";
|
||||
MournbladeCYD2RollDialog._updateRollDataFromForm(rollData, button.form, actor);
|
||||
rollData.mainDice = "d20";
|
||||
MournbladeCYD2Utility.rollMournbladeCYD2(rollData);
|
||||
}
|
||||
},
|
||||
@@ -63,19 +63,47 @@ export class MournbladeCYD2RollDialog {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static _updateRollDataFromForm(rollData, elements, actor) {
|
||||
if (elements.modificateur) rollData.modificateur = Number(elements.modificateur.value);
|
||||
if (elements.difficulte) rollData.difficulte = Number(elements.difficulte.value);
|
||||
if (elements.attrKey) rollData.attrKey = String(elements.attrKey.value);
|
||||
if (elements.attrKey2) rollData.attrKey2 = String(elements.attrKey2.value);
|
||||
if (elements["select-maitrise"]) rollData.maitriseId = String(elements["select-maitrise"].value);
|
||||
if (elements["competence-talents"]) {
|
||||
const sel = elements["competence-talents"];
|
||||
static _updateRollDataFromForm(rollData, form, actor) {
|
||||
const el = form.elements;
|
||||
const getVal = (name) => el[name]?.value;
|
||||
const getChecked = (name) => {
|
||||
const e = form.querySelector(`#${name}`);
|
||||
return e ? e.checked : false;
|
||||
};
|
||||
|
||||
if (el.modificateur) rollData.modificateur = Number(getVal("modificateur"));
|
||||
if (el["bonus-malus-context"]) rollData.bonusMalusContext = Number(getVal("bonus-malus-context"));
|
||||
if (el.difficulte) rollData.difficulte = Number(getVal("difficulte"));
|
||||
if (el.attrKey) rollData.attrKey = String(getVal("attrKey"));
|
||||
if (el.attrKey2) rollData.attrKey2 = String(getVal("attrKey2"));
|
||||
if (el["select-maitrise"]) rollData.maitriseId = String(getVal("select-maitrise"));
|
||||
if (el["competence-talents"]) {
|
||||
const sel = el["competence-talents"];
|
||||
rollData.selectedTalents = Array.from(sel.selectedOptions).map(o => o.value);
|
||||
}
|
||||
if (elements["taille-cible"]) rollData.tailleCible = String(elements["taille-cible"].value);
|
||||
if (elements["tireur-deplacement"]) rollData.tireurDeplacement = String(elements["tireur-deplacement"].value);
|
||||
if (elements["cible-couvert"]) rollData.cibleCouvert = String(elements["cible-couvert"].value);
|
||||
if (elements["distance-tir"]) rollData.distanceTir = String(elements["distance-tir"].value);
|
||||
if (el["taille-cible"]) rollData.tailleCible = String(getVal("taille-cible"));
|
||||
if (el["tireur-deplacement"]) rollData.tireurDeplacement = String(getVal("tireur-deplacement"));
|
||||
if (el["cible-couvert"]) rollData.cibleCouvert = String(getVal("cible-couvert"));
|
||||
if (el["distance-tir"]) rollData.distanceTir = String(getVal("distance-tir"));
|
||||
if (el["soutiens"]) rollData.soutiens = Number(getVal("soutiens"));
|
||||
if (el["runemode"]) rollData.runemode = String(getVal("runemode"));
|
||||
if (el["runeame"]) rollData.runeame = Number(getVal("runeame"));
|
||||
|
||||
rollData.defenseurAuSol = getChecked("defenseur-au-sol");
|
||||
rollData.defenseurAveugle = getChecked("defenseur-aveugle");
|
||||
rollData.defenseurDeDos = getChecked("defenseur-de-dos");
|
||||
rollData.defenseurRestreint = getChecked("defenseur-restreint");
|
||||
rollData.defenseurImmobilise = getChecked("defenseur-immobilise");
|
||||
rollData.attaquantsMultiples = getChecked("attaquants-multiple");
|
||||
rollData.ambidextre1 = getChecked("ambidextre-1");
|
||||
rollData.ambidextre2 = getChecked("ambidextre-2");
|
||||
rollData.feinte = getChecked("feinte");
|
||||
rollData.attaqueCharge = getChecked("attaque-charge");
|
||||
rollData.chargeCavalerie = getChecked("charge-cavalerie");
|
||||
rollData.contenir = getChecked("contenir");
|
||||
rollData.attaqueDesarme = getChecked("attaque-desarme");
|
||||
rollData.cibleDeplace = getChecked("tireur-cible-deplace");
|
||||
rollData.cibleCaC = getChecked("cible-cac");
|
||||
rollData.cibleconsciente = getChecked("cibleconsciente");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ export default class MournbladeCYD2ActorSheetV2 extends HandlebarsApplicationMix
|
||||
const dataType = target.dataset.dtype;
|
||||
const value = dataType === "Number" ? Number(target.value) : target.value;
|
||||
const item = this.document.items.get(itemId);
|
||||
if (item) await item.update({ [itemField]: value });
|
||||
if (item) await item.update({ [`system.${itemField}`]: value });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1,211 +0,0 @@
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
|
||||
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
|
||||
import { MournbladeCYD2Automation } from "./mournblade-cyd2-automation.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeCYD2ActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade-cyd-2-0", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade-cyd-2-0/templates/actor-sheet.hbs",
|
||||
width: 640,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: false
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: objectData.id,
|
||||
type: objectData.type,
|
||||
img: objectData.img,
|
||||
name: objectData.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
system: objectData.system,
|
||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills(),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
historiques: foundry.utils.duplicate(this.actor.getHistoriques() || []),
|
||||
talents: foundry.utils.duplicate(this.actor.getTalents() || []),
|
||||
dons: foundry.utils.duplicate(this.actor.getDons() || []),
|
||||
pactes: foundry.utils.duplicate(this.actor.getPactes() || []),
|
||||
tendances: foundry.utils.duplicate(this.actor.getTendances() || []),
|
||||
runes: foundry.utils.duplicate(this.actor.getRunes() || []),
|
||||
traitsChaotiques: foundry.utils.duplicate(this.actor.getTraitsChaotiques() || []),
|
||||
traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces() || []),
|
||||
aspect: this.actor.getAspect(),
|
||||
marge: this.actor.getMarge(),
|
||||
profils: foundry.utils.duplicate(this.actor.getProfils() || []),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
richesse: this.actor.computeRichesse(),
|
||||
coupDevastateur: this.actor.items.find(it => it.type == "talent" && it.name.toLowerCase() == "coup devastateur" && !it.system.used),
|
||||
valeurEquipement: this.actor.computeValeurEquipement(),
|
||||
nbCombativite: this.actor.system.sante.nbcombativite,
|
||||
combativiteList: MournbladeCYD2Utility.getCombativiteList(this.actor.system.sante.nbcombativite),
|
||||
nbAme: this.actor.system.ame.nbame,
|
||||
ameMax: this.actor.getAmeMax(),
|
||||
ameList: MournbladeCYD2Utility.getAmeList(this.actor.system.ame.nbame, this.actor.getAmeMax()),
|
||||
ameMaxList: MournbladeCYD2Utility.getAmeMaxList(this.actor.system.ame.nbame),
|
||||
initiative: this.actor.getFlag("world", "last-initiative") || -1,
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, { async: true }),
|
||||
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, { async: true }),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.mournbladecyd2.config
|
||||
}
|
||||
this.formData = formData;
|
||||
|
||||
console.log("PC : ", formData, this.object);
|
||||
return formData;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
const item = this.actor.items.get(itemId)
|
||||
item.sheet.render(true)
|
||||
})
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
MournbladeCYD2Utility.confirmDelete(this, li);
|
||||
})
|
||||
html.find('.edit-item-data').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
let itemType = li.data("item-type")
|
||||
let itemField = $(ev.currentTarget).data("item-field")
|
||||
let dataType = $(ev.currentTarget).data("dtype")
|
||||
let value = ev.currentTarget.value
|
||||
this.actor.editItemField(itemId, itemType, itemField, dataType, value)
|
||||
})
|
||||
|
||||
html.find('.adversite-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let adv = li.data("adversite")
|
||||
let value = Number($(event.currentTarget).data("adversite-value"))
|
||||
this.actor.incDecAdversite(adv, value)
|
||||
})
|
||||
|
||||
html.find('.quantity-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const value = Number($(event.currentTarget).data("quantite-value"))
|
||||
this.actor.incDecQuantity(li.data("item-id"), value);
|
||||
})
|
||||
|
||||
html.find('.roll-initiative').click((event) => {
|
||||
this.actor.rollAttribut("adr", true)
|
||||
})
|
||||
|
||||
html.find('.roll-attribut').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let attrKey = li.data("attr-key")
|
||||
this.actor.rollAttribut(attrKey, false)
|
||||
})
|
||||
html.find('.roll-competence').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let attrKey = $(event.currentTarget).data("attr-key")
|
||||
let compId = li.data("item-id")
|
||||
this.actor.rollCompetence(attrKey, compId)
|
||||
})
|
||||
html.find('.roll-arme-offensif').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeOffensif(armeId)
|
||||
})
|
||||
|
||||
html.find('.roll-assommer').click((event) => {
|
||||
this.actor.rollAssommer()
|
||||
})
|
||||
html.find('.roll-coup-bas').click((event) => {
|
||||
this.actor.rollCoupBas()
|
||||
})
|
||||
html.find('.roll-immobiliser').click((event) => {
|
||||
this.actor.rollImmobiliser()
|
||||
})
|
||||
html.find('.roll-repousser').click((event) => {
|
||||
this.actor.rollRepousser()
|
||||
})
|
||||
html.find('.roll-desengager').click((event) => {
|
||||
this.actor.rollDesengager()
|
||||
})
|
||||
|
||||
html.find('.roll-arme-degats').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeDegats(armeId)
|
||||
})
|
||||
|
||||
html.find('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
this.render(true);
|
||||
});
|
||||
html.find('.item-equip').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equipItem(li.data("item-id"));
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
const position = super.setPosition(options);
|
||||
const sheetBody = this.element.find(".sheet-body");
|
||||
const bodyHeight = position.height - 192;
|
||||
sheetBody.css("height", bodyHeight);
|
||||
return position;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onDropItem(event, dragData) {
|
||||
let data = event.dataTransfer.getData('text/plain')
|
||||
let dataItem = JSON.parse(data)
|
||||
let item = fromUuidSync(dataItem.uuid)
|
||||
if (item.pack) {
|
||||
item = await MournbladeCYD2Utility.searchItem(item)
|
||||
}
|
||||
let autoresult = MournbladeCYD2Automation.processAutomations("on-drop", item, this.actor)
|
||||
if (autoresult.isValid) {
|
||||
super._onDropItem(event, dragData)
|
||||
} else {
|
||||
ui.notifications.warn(autoresult.warningMessage)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -774,7 +774,7 @@ export class MournbladeCYD2Actor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async rollAttribut(attrKey, isInit = false) {
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
rollData.multiplier = (isInit) ? 1 : 2
|
||||
rollData.multiplier = 1 // 1d10 + attr (optionally + attr2 if chosen in dialog)
|
||||
rollData.isInit = isInit
|
||||
await MournbladeCYD2RollDialog.create(this, rollData)
|
||||
}
|
||||
@@ -842,6 +842,33 @@ export class MournbladeCYD2Actor extends Actor {
|
||||
await MournbladeCYD2RollDialog.create(this, rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
subPointsAme(runeMode, value) {
|
||||
let ame = foundry.utils.duplicate(this.system.ame)
|
||||
if (runeMode == "prononcer") {
|
||||
ame.etat += value
|
||||
ame.etat = Math.min(ame.etat, ame.nbame)
|
||||
} else {
|
||||
ame.max = (ame.max || 0) + value
|
||||
}
|
||||
this.update({ 'system.ame': ame })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollRune(runeId) {
|
||||
let comp = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "savoir : runes")
|
||||
if (!comp) {
|
||||
ui.notifications.warn("La compétence « Savoir : Runes » n'a pas été trouvée sur ce personnage.")
|
||||
return
|
||||
}
|
||||
let rollData = this.getCommonRollData("cla", comp.id)
|
||||
rollData.rune = foundry.utils.duplicate(this.items.get(runeId) || {})
|
||||
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
||||
rollData.runemode = "prononcer"
|
||||
rollData.runeame = 1
|
||||
await MournbladeCYD2RollDialog.create(this, rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeDegats(armeId, targetVigueur = undefined, rollDataInput = undefined) {
|
||||
let arme = this.items.get(armeId)
|
||||
@@ -886,6 +913,7 @@ export class MournbladeCYD2Actor extends Actor {
|
||||
//console.log(roll)
|
||||
let rollData = {
|
||||
arme: arme,
|
||||
diceResult: roll.dice[0]?.total ?? roll.total,
|
||||
finalResult: roll.total,
|
||||
formula: roll.formula,
|
||||
alias: this.name,
|
||||
|
||||
@@ -52,9 +52,9 @@ export const MOURNBLADECYD2_CONFIG = {
|
||||
{ key: "30", label: "Pure Folie (30)" }
|
||||
],
|
||||
optionsDistanceTir: [
|
||||
{ key: "porteecourte", label: "Courte ({protectionDefenseur}+5)" },
|
||||
{ key: "porteemoyenne", label: "Moyenne ({protectionDefenseur}+9)" },
|
||||
{ key: "porteelongue", label: "Longue ({protectionDefenseur}+14)" }
|
||||
{ key: "porteecourte", label: "Courte (base +5)" },
|
||||
{ key: "porteemoyenne", label: "Moyenne (base +9)" },
|
||||
{ key: "porteelongue", label: "Longue (base +14)" }
|
||||
],
|
||||
optionsBonusMalus: [
|
||||
{ key: "-10", label: "-10" },
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
|
||||
import { MournbladeCYD2ActorSheet } from "./mournblade-cyd2-actor-sheet.js";
|
||||
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
|
||||
import { MournbladeCYD2Automation } from "./mournblade-cyd2-automation.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeCYD2CreatureSheet extends MournbladeCYD2ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade-cyd-2-0", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade-cyd-2-0/templates/creature-sheet.hbs",
|
||||
width: 640,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: false
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,228 +0,0 @@
|
||||
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
|
||||
|
||||
/**
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class MournbladeCYD2ItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade-cyd-2-0", "sheet", "item"],
|
||||
template: "systems/fvtt-mournblade-cyd-2-0/templates/item-sheet.hbs",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
width: 620,
|
||||
height: 550,
|
||||
tabs: [{navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description"}]
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_getHeaderButtons() {
|
||||
let buttons = super._getHeaderButtons();
|
||||
// Add "Post to chat" button
|
||||
// We previously restricted this to GM and editable items only. If you ever find this comment because it broke something: eh, sorry!
|
||||
buttons.unshift(
|
||||
{
|
||||
class: "post",
|
||||
icon: "fas fa-comment",
|
||||
onclick: ev => { }
|
||||
})
|
||||
return buttons
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
const position = super.setPosition(options);
|
||||
const sheetBody = this.element.find(".sheet-body");
|
||||
const bodyHeight = position.height - 192;
|
||||
sheetBody.css("height", bodyHeight);
|
||||
if (this.item.type.includes('weapon')) {
|
||||
position.width = 640;
|
||||
}
|
||||
return position;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: this.id,
|
||||
type: objectData.type,
|
||||
img: objectData.img,
|
||||
name: objectData.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
attributs: MournbladeCYD2Utility.getAttributs(),
|
||||
system: objectData.system,
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, {async: true}),
|
||||
mr: (this.object.type == 'specialisation'),
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.mournbladecyd2.config
|
||||
}
|
||||
|
||||
if ( objectData.type == "don") {
|
||||
formData.sacrifice = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.sacrifice, {async: true})
|
||||
}
|
||||
//this.options.editable = !(this.object.origin == "embeddedItem");
|
||||
console.log("ITEM DATA", formData, this);
|
||||
return formData;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_getHeaderButtons() {
|
||||
let buttons = super._getHeaderButtons();
|
||||
buttons.unshift({
|
||||
class: "post",
|
||||
icon: "fas fa-comment",
|
||||
onclick: ev => this.postItem()
|
||||
});
|
||||
return buttons
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = foundry.utils.duplicate(MournbladeCYD2Utility.data(this.item));
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
// Don't post any image for the item (which would leave a large gap) if the default image is used
|
||||
if (chatData.img.includes("/blank.png")) {
|
||||
chatData.img = null;
|
||||
}
|
||||
// JSON object for easy creation
|
||||
chatData.jsondata = JSON.stringify(
|
||||
{
|
||||
compendium: "postedItem",
|
||||
payload: chatData,
|
||||
});
|
||||
|
||||
renderTemplate('systems/fvtt-mournblade-cyd-2-0/templates/post-item.hbs', chatData).then(html => {
|
||||
let chatOptions = MournbladeCYD2Utility.chatDataSetup(html);
|
||||
ChatMessage.create(chatOptions)
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
const item = this.object.options.actor.getOwnedItem(li.data("item-id"))
|
||||
item.sheet.render(true);
|
||||
});
|
||||
|
||||
html.find('.delete-subitem').click(ev => {
|
||||
this.deleteSubitem(ev);
|
||||
})
|
||||
html.find('.edit-predilection').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].name = ev.currentTarget.value
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.edit-predilection-description').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].description = ev.currentTarget.value
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.predilection-acquise').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].acquise = ev.currentTarget.checked
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.predilection-maitrise').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].maitrise = ev.currentTarget.checked
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.predilection-used').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].used = ev.currentTarget.checked
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
|
||||
html.find('#add-predilection').click(ev => {
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", id: randomID(16), used: false })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.delete-prediction').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.splice(index,1)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
|
||||
html.find('#add-automation').click(ev => {
|
||||
let autom = foundry.utils.duplicate(this.object.system.automations)
|
||||
autom.push( { eventtype: "on-drop", name: "Automatisation 1", bonusname: "vigueur", bonus: 0, competence: "", minLevel: 0, baCost: 0, id: randomID(16) })
|
||||
this.object.update( { 'system.automations': autom })
|
||||
})
|
||||
html.find('.delete-automation').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".automation-item")
|
||||
let index = li.data("automation-index")
|
||||
let autom = foundry.utils.duplicate(this.object.system.automations)
|
||||
autom.splice(index,1)
|
||||
this.object.update( { 'system.automations': autom })
|
||||
})
|
||||
html.find('.automation-edit-field').change(ev => {
|
||||
let index = $(ev.currentTarget).data("automation-index")
|
||||
let field = $(ev.currentTarget).data("automation-field")
|
||||
let auto = foundry.utils.duplicate(this.object.system.automations)
|
||||
auto[index][field] = ev.currentTarget.value
|
||||
auto[index].id = auto[index].id || randomID(16)
|
||||
this.object.update( { 'system.automations': auto })
|
||||
})
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
get template() {
|
||||
let type = this.item.type;
|
||||
return `systems/fvtt-mournblade-cyd-2-0/templates/item-${type}-sheet.hbs`;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
_updateObject(event, formData) {
|
||||
return this.object.update(formData);
|
||||
}
|
||||
}
|
||||
@@ -111,12 +111,43 @@ function welcomeMessage() {
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: `<div id="welcome-message-MournbladeCYD2"><span class="rdd-roll-part">
|
||||
<strong>Bienvenue dans Mournblade CYD 2.0 !</strong>
|
||||
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr ainsi que le supplément de conversion de règle pour le CYD 2.0</p>
|
||||
<p>Mournblade est un jeu de rôle publié par Titam France/Sombres projets, tous les droits leur appartiennent.</p>
|
||||
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
|
||||
` });
|
||||
content: `<div class="mournblade-welcome-message">
|
||||
<div class="welcome-header">
|
||||
<div class="welcome-icon"><i class="fas fa-sword"></i></div>
|
||||
<h2 class="welcome-title">Mournblade CYD 2.0</h2>
|
||||
<div class="welcome-subtitle">Système FoundryVTT — Bienvenue !</div>
|
||||
</div>
|
||||
<div class="welcome-content">
|
||||
<div class="welcome-section">
|
||||
<div class="section-icon"><i class="fas fa-book-open"></i></div>
|
||||
<div class="section-text">
|
||||
<strong>Livres nécessaires</strong>
|
||||
<p>Les livres de Mournblade sont nécessaires pour jouer. Supplément de conversion CYD 2.0 requis.</p>
|
||||
<a class="welcome-link" href="https://www.titam-france.fr" target="_blank"><i class="fas fa-external-link-alt"></i>titam-france.fr</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="welcome-section">
|
||||
<div class="section-icon"><i class="fas fa-copyright"></i></div>
|
||||
<div class="section-text">
|
||||
<strong>Droits</strong>
|
||||
<p>Mournblade est un jeu publié par Titam France / Sombres Projets, tous les droits leur appartiennent.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="welcome-section">
|
||||
<div class="section-icon"><i class="fab fa-discord"></i></div>
|
||||
<div class="section-text">
|
||||
<strong>Support</strong>
|
||||
<p>Système développé par LeRatierBretonnien.</p>
|
||||
<a class="welcome-link" href="https://discord.gg/pPSDNJk" target="_blank"><i class="fab fa-discord"></i>Discord FR Foundry</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="welcome-footer">
|
||||
<i class="fas fa-dice-d20"></i>
|
||||
<span>Bonne partie !</span>
|
||||
</div>
|
||||
</div>`
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
import { MournbladeCYD2Utility } from "./mournblade-cyd2-utility.js";
|
||||
|
||||
export class MournbladeCYD2RollDialog extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["MournbladeCYD2Dialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-mournblade-cyd-2-0/templates/roll-dialog-generic.hbs', rollData);
|
||||
|
||||
return new MournbladeCYD2RollDialog(actor, rollData, html, options );
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor(actor, rollData, html, options, close = undefined) {
|
||||
let conf = {
|
||||
title: "Test de Capacité",
|
||||
content: html,
|
||||
buttons: {
|
||||
rolld10: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d10",
|
||||
callback: () => { this.roll("d10") }
|
||||
},
|
||||
rolld20: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d20",
|
||||
callback: () => { this.roll("d20") }
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Annuler",
|
||||
callback: () => { this.close() }
|
||||
} },
|
||||
close: close
|
||||
}
|
||||
|
||||
super(conf, options);
|
||||
|
||||
this.actor = actor
|
||||
this.rollData = rollData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
roll ( dice) {
|
||||
this.rollData.mainDice = dice
|
||||
MournbladeCYD2Utility.rollMournbladeCYD2( this.rollData )
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
var dialog = this;
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('#modificateur').change(async (event) => {
|
||||
this.rollData.modificateur = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#difficulte').change( (event) => {
|
||||
console.log("Difficulte: " + event.currentTarget.value)
|
||||
this.rollData.difficulte = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#attrKey').change(async (event) => {
|
||||
this.rollData.attrKey = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#attrKey2').change(async (event) => {
|
||||
this.rollData.attrKey2 = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#select-maitrise').change(async (event) => {
|
||||
this.rollData.maitriseId = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#competence-talents').change((event) => {
|
||||
this.rollData.selectedTalents = $('#competence-talents').val()
|
||||
})
|
||||
html.find('#taille-cible').change((event) => {
|
||||
this.rollData.tailleCible = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#tireur-deplacement').change((event) => {
|
||||
this.rollData.tireurDeplacement = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#cible-couvert').change((event) => {
|
||||
this.rollData.cibleCouvert = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#distance-tir').change((event) => {
|
||||
this.rollData.distanceTir = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#bonus-malus-context').change((event) => {
|
||||
this.rollData.bonusMalusContext = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#defenseur-au-sol').change((event) => {
|
||||
this.rollData.defenseurAuSol = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ambidextre-1').change((event) => {
|
||||
this.rollData.ambidextre1 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ambidextre-2').change((event) => {
|
||||
this.rollData.ambidextre2 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaque-monte').change((event) => {
|
||||
this.rollData.attqueMonte = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-aveugle').change((event) => {
|
||||
this.rollData.defenseurAveugle = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-de-dos').change((event) => {
|
||||
this.rollData.defenseurDeDos = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-restreint').change((event) => {
|
||||
this.rollData.defenseurRestreint = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-immobilise').change((event) => {
|
||||
this.rollData.defenseurImmobilise = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaque-charge').change((event) => {
|
||||
this.rollData.attaqueCharge = event.currentTarget.checked
|
||||
})
|
||||
html.find('#charge-cavalerie').change((event) => {
|
||||
this.rollData.chargeCavalerie = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaquants-multiple').change((event) => {
|
||||
this.rollData.attaquantsMultiples = event.currentTarget.checked
|
||||
})
|
||||
html.find('#soutiens').change((event) => {
|
||||
this.rollData.soutiens = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#feinte').change((event) => {
|
||||
this.rollData.feinte = event.currentTarget.checked
|
||||
})
|
||||
html.find('#contenir').change((event) => {
|
||||
this.rollData.contenir = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaque-desarme').change((event) => {
|
||||
this.rollData.attaqueDesarme = event.currentTarget.checked
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,11 @@ export class MournbladeCYD2Utility {
|
||||
Handlebars.registerHelper('mul', function (a, b) {
|
||||
return parseInt(a) * parseInt(b);
|
||||
})
|
||||
Handlebars.registerHelper('select', function(value, options) {
|
||||
const html = options.fn(this);
|
||||
const escaped = String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
return html.replace(new RegExp(`value="${escaped}"`, 'g'), `value="${value}" selected="selected"`);
|
||||
})
|
||||
|
||||
game.settings.register("fvtt-mournblade-cyd-2-0", "mournblade-cyd2-pause-logo", {
|
||||
name: "Logo de pause",
|
||||
@@ -63,6 +68,7 @@ export class MournbladeCYD2Utility {
|
||||
// Initialise les listes de sélection dès le hook init (avant le rendu des fiches)
|
||||
game.system.mournbladecyd2.config.listeNiveauSkill = this.createDirectOptionList(0, 10)
|
||||
game.system.mournbladecyd2.config.listeNiveauCreature = this.createDirectOptionList(0, 35)
|
||||
game.system.mournbladecyd2.config.pointsAmeOptions = this.createDirectOptionList(1, 20)
|
||||
|
||||
}
|
||||
|
||||
@@ -151,7 +157,7 @@ export class MournbladeCYD2Utility {
|
||||
static async chatListeners(html) {
|
||||
|
||||
$(html).on("click", '.predilection-reroll', async event => {
|
||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||
let predIdx = event.currentTarget.dataset.predilectionIndex
|
||||
let messageId = MournbladeCYD2Utility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-cyd2-roll")
|
||||
@@ -345,7 +351,7 @@ export class MournbladeCYD2Utility {
|
||||
if (rollData.mainDice.includes("d20")) {
|
||||
let diceValue = rollData.roll.terms[0].results[0].result
|
||||
if (diceValue % 2 == 1) {
|
||||
//console.log("PAIR/IMP2", diceValue)
|
||||
rollData.isD20Impair = true
|
||||
rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value
|
||||
if (diceValue == 1 || diceValue == 11) {
|
||||
rollData.isDramatique = true
|
||||
@@ -425,7 +431,8 @@ export class MournbladeCYD2Utility {
|
||||
} else if (rollData.attr2) {
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.attr2.value}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
||||
} else {
|
||||
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
||||
const attrPart = rollData.multiplier > 1 ? `${rollData.attr.value}*${rollData.multiplier}` : `${rollData.attr.value}`
|
||||
rollData.diceFormula += `+${attrPart}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
||||
}
|
||||
|
||||
// Bonus arme naturelle en défense
|
||||
@@ -491,6 +498,21 @@ export class MournbladeCYD2Utility {
|
||||
|
||||
rollData.finalResult = myRoll.total
|
||||
this.computeResult(rollData)
|
||||
|
||||
// Rune post-roll: calculate duration and apply soul cost
|
||||
if (rollData.rune) {
|
||||
rollData.runeduree = Math.ceil(rollData.runeame / 3)
|
||||
if (rollData.runemode == "inscrire") {
|
||||
rollData.runeduree *= 2
|
||||
}
|
||||
let subAme = rollData.runeame
|
||||
if (!rollData.isSuccess && !rollData.isDramatique) {
|
||||
subAme = Math.ceil(rollData.runeame / 2)
|
||||
}
|
||||
rollData.runeAmeCout = subAme
|
||||
actor.subPointsAme(rollData.runemode, subAme)
|
||||
}
|
||||
|
||||
if (rollData.isInit) {
|
||||
actor.setFlag("world", "last-initiative", rollData.finalResult)
|
||||
}
|
||||
@@ -779,7 +801,8 @@ export class MournbladeCYD2Utility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyBonneAventureRoll(li, changed, addedBonus) {
|
||||
let msgId = $(li).data("message-id")
|
||||
const el = li instanceof HTMLElement ? li : li[0];
|
||||
let msgId = el.dataset.messageId ?? el.closest("[data-message-id]")?.dataset.messageId
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-cyd2-roll")
|
||||
@@ -798,7 +821,8 @@ export class MournbladeCYD2Utility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = $(li).data("message-id")
|
||||
const el = li instanceof HTMLElement ? li : li[0];
|
||||
let msgId = el.dataset.messageId ?? el.closest("[data-message-id]")?.dataset.messageId
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-cyd2-roll")
|
||||
@@ -817,14 +841,19 @@ export class MournbladeCYD2Utility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static chatRollMenu(html, options) {
|
||||
let canApply = li => canvas.tokens.controlled.length && li.find(".mournblade-cyd2-roll").length
|
||||
let canApply = li => {
|
||||
const el = li instanceof HTMLElement ? li : li[0];
|
||||
return canvas.tokens.controlled.length && el.querySelector(".mournblade-cyd2-roll");
|
||||
}
|
||||
let getActor = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
const el = li instanceof HTMLElement ? li : li[0];
|
||||
let message = game.messages.get(el.dataset.messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-cyd2-roll")
|
||||
return MournbladeCYD2Utility.getActorFromRollData(rollData)
|
||||
}
|
||||
let getRollData = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
const el = li instanceof HTMLElement ? li : li[0];
|
||||
let message = game.messages.get(el.dataset.messageId)
|
||||
return message.getFlag("world", "mournblade-cyd2-roll")
|
||||
}
|
||||
let canApplyBA = function (li) {
|
||||
@@ -884,7 +913,7 @@ export class MournbladeCYD2Utility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
let itemId = li.dataset?.itemId ?? li.dataset?.["item-id"];
|
||||
let msgTxt = "<p>Etes vous certain de vouloir supprimer cet item ?";
|
||||
let buttons = {
|
||||
delete: {
|
||||
@@ -892,7 +921,7 @@ export class MournbladeCYD2Utility {
|
||||
label: "Oui !",
|
||||
callback: () => {
|
||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
actorSheet.render(false);
|
||||
}
|
||||
},
|
||||
cancel: {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
--tab-header-font-size: 1rem;
|
||||
--tab-header-font-weight: 700;
|
||||
--tab-header-color: #403f3e;
|
||||
--tab-header-color-active: #4a0404;
|
||||
--tab-header-color-active: #2a1400;
|
||||
--font-primary: CentaurMT;
|
||||
--font-secondary: CentaurMT;
|
||||
--actor-input-font-size: 0.9rem;
|
||||
@@ -1105,7 +1105,8 @@ li {
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
max-height: 1.8rem;
|
||||
width: 3.5rem;
|
||||
width: 5rem;
|
||||
white-space: nowrap;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.button-sheet-roll-offline {
|
||||
@@ -1123,7 +1124,8 @@ li {
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
max-height: 1.8rem;
|
||||
width: 3.5rem;
|
||||
width: 5rem;
|
||||
white-space: nowrap;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.button-sheet-roll-large {
|
||||
@@ -1379,43 +1381,43 @@ li {
|
||||
margin-right: 6px;
|
||||
}
|
||||
/* ==================== Roll Dialog V2 Styles ==================== */
|
||||
.application.mournblade-roll-dialog .window-content {
|
||||
.application.mournblade-cyd2-roll-dialog .window-content {
|
||||
padding: 0;
|
||||
}
|
||||
.window-app.mournblade-roll-dialog .window-content {
|
||||
.window-app.mournblade-cyd2-roll-dialog .window-content {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.mournblade-roll-dialog {
|
||||
.mournblade-cyd2-roll-dialog {
|
||||
background: url("../assets/ui/pc_sheet_bg.webp");
|
||||
background-repeat: repeat;
|
||||
font-family: CentaurMT;
|
||||
}
|
||||
.mournblade-roll-dialog * {
|
||||
.mournblade-cyd2-roll-dialog * {
|
||||
color: #2a2a2a;
|
||||
}
|
||||
/* Header */
|
||||
.mournblade-roll-dialog .dialog-header {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 8px;
|
||||
background: linear-gradient(135deg, #4a0404 0%, #6d0808 100%);
|
||||
border-bottom: 3px solid #8b0000;
|
||||
background: linear-gradient(135deg, #2a1400 0%, #4a2200 100%);
|
||||
border-bottom: 3px solid #8b4513;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-header .actor-icon {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .actor-icon {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 4px;
|
||||
border: 2px solid #8b0000;
|
||||
border: 2px solid #8b4513;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title {
|
||||
flex: 1;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title h3 {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title h3 {
|
||||
margin: 0;
|
||||
font-size: 1.1rem;
|
||||
color: #f5f5f5;
|
||||
@@ -1423,124 +1425,126 @@ li {
|
||||
font-family: Charlemagne;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title .competence-name {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title .competence-name {
|
||||
font-size: 0.85rem;
|
||||
color: #ffcccb;
|
||||
color: #f0d0a0;
|
||||
margin-top: 2px;
|
||||
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-header .dialog-title .competence-name .attribut-info {
|
||||
.mournblade-cyd2-roll-dialog .dialog-header .dialog-title .competence-name .attribut-info {
|
||||
color: #ffd700;
|
||||
font-weight: bold;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
/* Content */
|
||||
.mournblade-roll-dialog .dialog-content {
|
||||
padding: 8px;
|
||||
max-height: 650px;
|
||||
.mournblade-cyd2-roll-dialog .dialog-content {
|
||||
padding: 6px 8px;
|
||||
max-height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar {
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar-track {
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar-track {
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar-thumb {
|
||||
background: rgba(139, 0, 0, 0.6);
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar-thumb {
|
||||
background: rgba(139, 69, 19, 0.6);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-content::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(139, 0, 0, 0.8);
|
||||
.mournblade-cyd2-roll-dialog .dialog-content::-webkit-scrollbar-thumb:hover {
|
||||
background: rgba(139, 69, 19, 0.8);
|
||||
}
|
||||
/* Form Groups */
|
||||
.mournblade-roll-dialog .form-group {
|
||||
margin-bottom: 8px;
|
||||
.mournblade-cyd2-roll-dialog .form-group {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.mournblade-roll-dialog .form-group label {
|
||||
display: block;
|
||||
.mournblade-cyd2-roll-dialog .form-group label {
|
||||
flex-shrink: 0;
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
color: #1a1a1a;
|
||||
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||
margin-bottom: 3px;
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.mournblade-roll-dialog .form-group input,
|
||||
.mournblade-roll-dialog .form-group select {
|
||||
width: 100%;
|
||||
padding: 5px 8px;
|
||||
.mournblade-cyd2-roll-dialog .form-group input,
|
||||
.mournblade-cyd2-roll-dialog .form-group select {
|
||||
flex: 1;
|
||||
min-width: 60px;
|
||||
padding: 4px 6px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
border: 1px solid rgba(100, 100, 100, 0.5);
|
||||
border-radius: 3px;
|
||||
color: #1a1a1a;
|
||||
font-size: 0.95rem;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
font-family: CentaurMT;
|
||||
}
|
||||
.mournblade-roll-dialog .form-group input:focus,
|
||||
.mournblade-roll-dialog .form-group select:focus {
|
||||
.mournblade-cyd2-roll-dialog .form-group input:focus,
|
||||
.mournblade-cyd2-roll-dialog .form-group select:focus {
|
||||
outline: none;
|
||||
border-color: #8b0000;
|
||||
box-shadow: 0 0 5px rgba(139, 0, 0, 0.6);
|
||||
border-color: #8b4513;
|
||||
box-shadow: 0 0 5px rgba(139, 69, 19, 0.6);
|
||||
background: #ffffff;
|
||||
}
|
||||
.mournblade-roll-dialog .form-group input:disabled,
|
||||
.mournblade-roll-dialog .form-group select:disabled {
|
||||
.mournblade-cyd2-roll-dialog .form-group input:disabled,
|
||||
.mournblade-cyd2-roll-dialog .form-group select:disabled {
|
||||
opacity: 0.7;
|
||||
cursor: not-allowed;
|
||||
background: rgba(200, 200, 200, 0.9);
|
||||
color: #555;
|
||||
}
|
||||
/* Grids */
|
||||
.mournblade-roll-dialog .modifiers-grid {
|
||||
.mournblade-cyd2-roll-dialog .modifiers-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
margin-bottom: 10px;
|
||||
gap: 6px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
/* Sections spéciales */
|
||||
.mournblade-roll-dialog .attributes-section {
|
||||
background: rgba(139, 0, 0, 0.1);
|
||||
.mournblade-cyd2-roll-dialog .attributes-section {
|
||||
background: rgba(139, 69, 19, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(139, 0, 0, 0.3);
|
||||
border: 1px solid rgba(139, 69, 19, 0.3);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.mournblade-roll-dialog .rune-section {
|
||||
.mournblade-cyd2-roll-dialog .rune-section {
|
||||
background: rgba(75, 0, 130, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(75, 0, 130, 0.3);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.mournblade-roll-dialog .weapon-section {
|
||||
.mournblade-cyd2-roll-dialog .weapon-section {
|
||||
background: rgba(184, 134, 11, 0.1);
|
||||
padding: 8px;
|
||||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(184, 134, 11, 0.3);
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.mournblade-roll-dialog .weapon-info {
|
||||
.mournblade-cyd2-roll-dialog .weapon-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 5px 8px;
|
||||
padding: 4px 6px;
|
||||
background: rgba(184, 134, 11, 0.15);
|
||||
border-radius: 3px;
|
||||
margin-bottom: 8px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.mournblade-roll-dialog .weapon-info .weapon-label {
|
||||
.mournblade-cyd2-roll-dialog .weapon-info .weapon-label {
|
||||
font-weight: bold;
|
||||
font-size: 0.9rem;
|
||||
color: #1a1a1a;
|
||||
}
|
||||
.mournblade-roll-dialog .weapon-info .weapon-bonus {
|
||||
.mournblade-cyd2-roll-dialog .weapon-info .weapon-bonus {
|
||||
font-size: 0.85rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-roll-dialog .defense-info {
|
||||
.mournblade-cyd2-roll-dialog .defense-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
@@ -1549,68 +1553,76 @@ li {
|
||||
border-radius: 3px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.mournblade-roll-dialog .defense-info .defense-label {
|
||||
.mournblade-cyd2-roll-dialog .defense-info .defense-label {
|
||||
font-size: 0.85rem;
|
||||
color: #1a1a1a;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-roll-dialog .defense-info .defense-value {
|
||||
.mournblade-cyd2-roll-dialog .defense-info .defense-value {
|
||||
font-size: 1rem;
|
||||
color: #006400;
|
||||
font-weight: bold;
|
||||
}
|
||||
/* Combat modifiers */
|
||||
.mournblade-roll-dialog .combat-modifiers,
|
||||
.mournblade-roll-dialog .ranged-combat-section {
|
||||
background: rgba(139, 0, 0, 0.1);
|
||||
padding: 8px;
|
||||
.mournblade-cyd2-roll-dialog .combat-modifiers,
|
||||
.mournblade-cyd2-roll-dialog .ranged-combat-section {
|
||||
background: rgba(139, 69, 19, 0.1);
|
||||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(139, 0, 0, 0.3);
|
||||
margin-bottom: 10px;
|
||||
border: 1px solid rgba(139, 69, 19, 0.3);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.mournblade-roll-dialog .combat-modifiers h4,
|
||||
.mournblade-roll-dialog .ranged-combat-section h4 {
|
||||
margin: 0 0 8px 0;
|
||||
.mournblade-cyd2-roll-dialog .combat-modifiers h4,
|
||||
.mournblade-cyd2-roll-dialog .ranged-combat-section h4 {
|
||||
margin: 0 0 6px 0;
|
||||
color: #2a2a2a;
|
||||
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);
|
||||
font-size: 0.95rem;
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-roll-dialog .modifiers-columns {
|
||||
.mournblade-cyd2-roll-dialog .modifiers-columns {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 5px 10px;
|
||||
gap: 3px 8px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.mournblade-roll-dialog .checkbox-label {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 4px 6px;
|
||||
gap: 5px;
|
||||
padding: 3px 4px;
|
||||
cursor: pointer;
|
||||
border-radius: 3px;
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
.mournblade-roll-dialog .checkbox-label:hover {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label:hover {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
.mournblade-roll-dialog .checkbox-label input[type="checkbox"] {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label input[type="checkbox"] {
|
||||
width: auto;
|
||||
margin: 0;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
accent-color: #8b0000;
|
||||
accent-color: #8b4513;
|
||||
}
|
||||
.mournblade-roll-dialog .checkbox-label span {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label span {
|
||||
color: #1a1a1a;
|
||||
font-size: 0.85rem;
|
||||
font-size: 0.82rem;
|
||||
user-select: none;
|
||||
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5);
|
||||
line-height: 1.2;
|
||||
}
|
||||
.mournblade-roll-dialog .checkbox-label.highlight {
|
||||
.mournblade-cyd2-roll-dialog .checkbox-label.highlight {
|
||||
background: rgba(255, 215, 0, 0.15);
|
||||
border: 1px solid rgba(255, 215, 0, 0.4);
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-roll-dialog .info-message {
|
||||
/* Ranged combat: 1-column grid for selects (long labels) */
|
||||
.mournblade-cyd2-roll-dialog .ranged-combat-section .modifiers-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 4px;
|
||||
}
|
||||
.mournblade-cyd2-roll-dialog .info-message {
|
||||
padding: 6px 10px;
|
||||
background: rgba(33, 150, 243, 0.1);
|
||||
border-left: 3px solid rgba(33, 150, 243, 0.6);
|
||||
@@ -1620,19 +1632,19 @@ li {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
/* Malus section */
|
||||
.mournblade-roll-dialog .malus-section {
|
||||
.mournblade-cyd2-roll-dialog .malus-section {
|
||||
background: rgba(100, 100, 100, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(100, 100, 100, 0.3);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.mournblade-roll-dialog .malus-grid {
|
||||
.mournblade-cyd2-roll-dialog .malus-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 8px;
|
||||
}
|
||||
.mournblade-roll-dialog .malus-item {
|
||||
.mournblade-cyd2-roll-dialog .malus-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
@@ -1640,51 +1652,53 @@ li {
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.mournblade-roll-dialog .malus-item .malus-label {
|
||||
.mournblade-cyd2-roll-dialog .malus-item .malus-label {
|
||||
font-size: 0.85rem;
|
||||
color: #2a2a2a;
|
||||
font-weight: 500;
|
||||
}
|
||||
.mournblade-roll-dialog .malus-item .malus-value {
|
||||
.mournblade-cyd2-roll-dialog .malus-item .malus-value {
|
||||
font-size: 0.95rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-weight: bold;
|
||||
}
|
||||
/* Registered modifiers */
|
||||
.mournblade-roll-dialog .registered-modifiers {
|
||||
.mournblade-cyd2-roll-dialog .registered-modifiers {
|
||||
background: rgba(75, 0, 130, 0.1);
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(75, 0, 130, 0.3);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.mournblade-roll-dialog .registered-modifiers h4 {
|
||||
.mournblade-cyd2-roll-dialog .registered-modifiers h4 {
|
||||
margin: 0 0 6px 0;
|
||||
color: #2a2a2a;
|
||||
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-roll-dialog .registered-modifiers h4 i {
|
||||
.mournblade-cyd2-roll-dialog .registered-modifiers h4 i {
|
||||
margin-right: 6px;
|
||||
color: #4b0082;
|
||||
}
|
||||
.mournblade-roll-dialog .modifier-item {
|
||||
.mournblade-cyd2-roll-dialog .modifier-item {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
/* Special option */
|
||||
.mournblade-roll-dialog .special-option {
|
||||
.mournblade-cyd2-roll-dialog .special-option {
|
||||
margin-top: 10px;
|
||||
}
|
||||
/* Dialog buttons */
|
||||
.mournblade-roll-dialog .dialog-buttons {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons,
|
||||
.mournblade-cyd2-roll-dialog .form-footer {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
padding: 10px;
|
||||
border-top: 2px solid rgba(139, 0, 0, 0.3);
|
||||
padding: 10px 12px 14px !important;
|
||||
border-top: 2px solid rgba(139, 69, 19, 0.3);
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-buttons button {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button {
|
||||
flex: 1;
|
||||
padding: 8px 14px;
|
||||
border: none;
|
||||
@@ -1696,29 +1710,41 @@ li {
|
||||
font-family: Charlemagne;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld10"],
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld20"] {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #6d0808 100%);
|
||||
color: #f5f5f5;
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld10"],
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld20"],
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld10"],
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld20"] {
|
||||
background: rgba(100, 100, 100, 0.3) !important;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld10"]:hover,
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="rolld20"]:hover {
|
||||
background: linear-gradient(135deg, #a00000 0%, #8b0000 100%);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 8px rgba(139, 0, 0, 0.5);
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld10"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="rolld20"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld10"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="rolld20"]:hover {
|
||||
background: rgba(100, 100, 100, 0.5) !important;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="cancel"] {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="cancel"],
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="cancel"] {
|
||||
background: rgba(100, 100, 100, 0.3);
|
||||
color: #2a2a2a;
|
||||
}
|
||||
.mournblade-roll-dialog .dialog-buttons button[data-action="cancel"]:hover {
|
||||
.mournblade-cyd2-roll-dialog .dialog-buttons button[data-action="cancel"]:hover,
|
||||
.mournblade-cyd2-roll-dialog .form-footer button[data-action="cancel"]:hover {
|
||||
background: rgba(100, 100, 100, 0.5);
|
||||
}
|
||||
/* Affichage d'une valeur non-éditable dans le dialog */
|
||||
.mournblade-cyd2-roll-dialog .field-value {
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
color: #8b4513;
|
||||
font-size: 0.95rem;
|
||||
padding: 0 4px;
|
||||
}
|
||||
/* ==================== Sheet Mode Toggle Button ==================== */
|
||||
.sheet-mode-toggle {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
border: 1px solid #8b0000;
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
border: 1px solid #8b4513;
|
||||
border-radius: 3px;
|
||||
color: #f5f5f5;
|
||||
padding: 2px 4px;
|
||||
@@ -1733,7 +1759,7 @@ li {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.sheet-mode-toggle:hover {
|
||||
background: linear-gradient(135deg, #a00000 0%, #5a0505 100%);
|
||||
background: linear-gradient(135deg, #a06010 0%, #4a2200 100%);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -1743,15 +1769,15 @@ li {
|
||||
}
|
||||
/* ==================== Chat Message Styles ==================== */
|
||||
.mournblade-chat-result {
|
||||
background: linear-gradient(135deg, rgba(74, 4, 4, 0.2) 0%, rgba(139, 0, 0, 0.15) 100%);
|
||||
border: 2px solid #8b0000;
|
||||
background: linear-gradient(135deg, rgba(42, 20, 0, 0.2) 0%, rgba(139, 69, 19, 0.15) 100%);
|
||||
border: 2px solid #8b4513;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
font-family: CentaurMT, serif;
|
||||
}
|
||||
.mournblade-chat-result .chat-result-header {
|
||||
background: linear-gradient(135deg, #4a0404 0%, #2a0202 100%);
|
||||
border-bottom: 2px solid #8b0000;
|
||||
background: linear-gradient(135deg, #2a1400 0%, #2a0202 100%);
|
||||
border-bottom: 2px solid #8b4513;
|
||||
padding: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -1761,7 +1787,7 @@ li {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #8b0000;
|
||||
border: 1px solid #8b4513;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
@@ -1786,7 +1812,7 @@ li {
|
||||
.mournblade-chat-result .result-main {
|
||||
background: rgba(255, 250, 240, 0.9);
|
||||
padding: 4px 8px;
|
||||
border-bottom: 1px solid rgba(139, 0, 0, 0.3);
|
||||
border-bottom: 1px solid rgba(139, 69, 19, 0.3);
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-display {
|
||||
display: flex;
|
||||
@@ -1803,12 +1829,12 @@ li {
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
padding: 4px 6px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(139, 0, 0, 0.2);
|
||||
border: 1px solid rgba(139, 69, 19, 0.2);
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-display .dice-result i,
|
||||
.mournblade-chat-result .result-main .result-display .total-result i,
|
||||
.mournblade-chat-result .result-main .result-display .difficulty i {
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-size: 1rem;
|
||||
display: block;
|
||||
margin-bottom: 2px;
|
||||
@@ -1829,7 +1855,7 @@ li {
|
||||
.mournblade-chat-result .result-main .result-display .total-result .difficulty-value,
|
||||
.mournblade-chat-result .result-main .result-display .difficulty .difficulty-value {
|
||||
font-size: 1.5rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.8);
|
||||
font-weight: bold;
|
||||
line-height: 1.2;
|
||||
@@ -1841,11 +1867,27 @@ li {
|
||||
.mournblade-chat-result .result-main .result-display .total-result .difficulty-label,
|
||||
.mournblade-chat-result .result-main .result-display .difficulty .difficulty-label {
|
||||
font-size: 0.75rem;
|
||||
color: #4a0404;
|
||||
color: #2a1400;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
line-height: 1.1;
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-display .d20-impair {
|
||||
flex: 2;
|
||||
background: rgba(180, 60, 0, 0.12);
|
||||
border-color: rgba(180, 60, 0, 0.4);
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-display .d20-impair i {
|
||||
color: #b03000;
|
||||
display: inline;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-display .d20-impair .dice-value {
|
||||
display: inline;
|
||||
font-size: 0.85rem;
|
||||
color: #b03000;
|
||||
font-weight: bold;
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-badge-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
@@ -1874,7 +1916,7 @@ li {
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.mournblade-chat-result .result-main .result-badge-container .result-badge.failure {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
color: white;
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
@@ -1902,7 +1944,7 @@ li {
|
||||
}
|
||||
.mournblade-chat-result .result-details .details-section .detail-row.bonus {
|
||||
background: rgba(255, 200, 200, 0.6);
|
||||
border: 1px solid rgba(139, 0, 0, 0.5);
|
||||
border: 1px solid rgba(139, 69, 19, 0.5);
|
||||
}
|
||||
.mournblade-chat-result .result-details .details-section .detail-row.malus {
|
||||
background: rgba(255, 180, 180, 0.6);
|
||||
@@ -1923,13 +1965,13 @@ li {
|
||||
.mournblade-chat-result .result-effects {
|
||||
padding: 8px;
|
||||
background: rgba(255, 230, 230, 0.4);
|
||||
border-top: 1px solid rgba(139, 0, 0, 0.3);
|
||||
border-top: 1px solid rgba(139, 69, 19, 0.3);
|
||||
}
|
||||
.mournblade-chat-result .result-effects .effect-item {
|
||||
padding: 5px 8px;
|
||||
margin-bottom: 5px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border-left: 3px solid #8b0000;
|
||||
border-left: 3px solid #8b4513;
|
||||
border-radius: 3px;
|
||||
color: #000000;
|
||||
font-size: 0.85rem;
|
||||
@@ -1940,7 +1982,7 @@ li {
|
||||
}
|
||||
.mournblade-chat-result .result-effects .effect-item i {
|
||||
margin-right: 6px;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
}
|
||||
.mournblade-chat-result .result-effects .effect-item:last-child {
|
||||
margin-bottom: 0;
|
||||
@@ -1975,8 +2017,8 @@ li {
|
||||
width: 100%;
|
||||
}
|
||||
.mournblade-chat-result .chat-card-button {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
border: 1px solid #8b0000;
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
border: 1px solid #8b4513;
|
||||
border-radius: 3px;
|
||||
color: #f5f5f5;
|
||||
padding: 6px 12px;
|
||||
@@ -1990,7 +2032,7 @@ li {
|
||||
margin-right: 4px;
|
||||
}
|
||||
.mournblade-chat-result .chat-card-button:hover {
|
||||
background: linear-gradient(135deg, #a00000 0%, #5a0505 100%);
|
||||
background: linear-gradient(135deg, #a06010 0%, #4a2200 100%);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
@@ -2001,12 +2043,103 @@ li {
|
||||
.mournblade-chat-result .chat-card-button.predilection-reroll:hover {
|
||||
background: linear-gradient(135deg, #5b1092 0%, #3d005d 100%);
|
||||
}
|
||||
/* Tag non-létaux dans les messages de dégâts */
|
||||
.mournblade-chat-result .non-lethal-tag {
|
||||
font-size: 0.8rem;
|
||||
color: #888;
|
||||
font-style: italic;
|
||||
margin-left: 4px;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
/* Welcome Message Styling */
|
||||
.mournblade-post-item {
|
||||
background: linear-gradient(135deg, rgba(42, 20, 0, 0.15) 0%, rgba(139, 69, 19, 0.1) 100%);
|
||||
border: 2px solid #8b4513;
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
font-family: CentaurMT, serif;
|
||||
margin: 4px 0;
|
||||
}
|
||||
.mournblade-post-item .post-item-header {
|
||||
background: linear-gradient(135deg, #2a1400 0%, #3a1800 100%);
|
||||
border-bottom: 2px solid #8b4513;
|
||||
padding: 8px 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
.mournblade-post-item .post-item-header .post-item-img {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #8b4513;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.mournblade-post-item .post-item-header .post-item-title {
|
||||
flex: 1;
|
||||
}
|
||||
.mournblade-post-item .post-item-header .post-item-title .post-item-name {
|
||||
margin: 0 0 2px 0;
|
||||
color: #ffd700;
|
||||
font-size: 1.1rem;
|
||||
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.9);
|
||||
line-height: 1.2;
|
||||
}
|
||||
.mournblade-post-item .post-item-header .post-item-title .post-item-type {
|
||||
font-size: 0.75rem;
|
||||
color: #f5e6d3;
|
||||
font-style: italic;
|
||||
opacity: 0.8;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
.mournblade-post-item .post-item-stats {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
padding: 6px 8px;
|
||||
background: rgba(139, 69, 19, 0.08);
|
||||
border-bottom: 1px solid rgba(139, 69, 19, 0.3);
|
||||
}
|
||||
.mournblade-post-item .post-item-stats .post-stat {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
border: 1px solid rgba(139, 69, 19, 0.4);
|
||||
border-radius: 3px;
|
||||
padding: 2px 6px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.mournblade-post-item .post-item-stats .post-stat.post-stat-full {
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
.mournblade-post-item .post-item-stats .post-stat .stat-label {
|
||||
color: #8b4513;
|
||||
font-weight: bold;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.mournblade-post-item .post-item-stats .post-stat .stat-value {
|
||||
color: #2a1400;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.mournblade-post-item .post-item-description {
|
||||
padding: 8px 10px;
|
||||
color: #2a1400;
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.4;
|
||||
background: rgba(245, 230, 211, 0.85);
|
||||
}
|
||||
.mournblade-post-item .post-item-description p {
|
||||
margin: 4px 0;
|
||||
}
|
||||
.mournblade-post-item .post-item-description em,
|
||||
.mournblade-post-item .post-item-description i {
|
||||
color: #5a2d00;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
.mournblade-welcome-message {
|
||||
background: linear-gradient(135deg, rgba(139, 0, 0, 0.15) 0%, rgba(74, 4, 4, 0.2) 100%);
|
||||
border: 2px solid #8b0000;
|
||||
background: linear-gradient(135deg, rgba(139, 69, 19, 0.15) 0%, rgba(42, 20, 0, 0.2) 100%);
|
||||
border: 2px solid #8b4513;
|
||||
border-radius: 8px;
|
||||
padding: 0;
|
||||
margin: 8px 0;
|
||||
@@ -2015,7 +2148,7 @@ li {
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.mournblade-welcome-message .welcome-header {
|
||||
background: linear-gradient(135deg, #8b0000 0%, #4a0404 100%);
|
||||
background: linear-gradient(135deg, #8b4513 0%, #2a1400 100%);
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
border-bottom: 2px solid #ffd700;
|
||||
@@ -2054,7 +2187,7 @@ li {
|
||||
margin-bottom: 10px;
|
||||
padding: 8px;
|
||||
background: rgba(255, 255, 255, 0.6);
|
||||
border-left: 4px solid #8b0000;
|
||||
border-left: 4px solid #8b4513;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.mournblade-welcome-message .welcome-content .welcome-section:last-child {
|
||||
@@ -2063,7 +2196,7 @@ li {
|
||||
.mournblade-welcome-message .welcome-content .welcome-section .section-icon {
|
||||
flex-shrink: 0;
|
||||
font-size: 1.3rem;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
width: 28px;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -2073,7 +2206,7 @@ li {
|
||||
}
|
||||
.mournblade-welcome-message .welcome-content .welcome-section .section-text strong {
|
||||
display: block;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 2px;
|
||||
line-height: 1.2;
|
||||
@@ -2086,7 +2219,7 @@ li {
|
||||
.mournblade-welcome-message .welcome-content .welcome-section .section-text .welcome-link {
|
||||
display: inline-block;
|
||||
margin-top: 4px;
|
||||
color: #8b0000;
|
||||
color: #8b4513;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.2s;
|
||||
@@ -2096,12 +2229,12 @@ li {
|
||||
margin-right: 4px;
|
||||
}
|
||||
.mournblade-welcome-message .welcome-content .welcome-section .section-text .welcome-link:hover {
|
||||
color: #a00000;
|
||||
text-shadow: 0 0 4px rgba(139, 0, 0, 0.3);
|
||||
color: #a06010;
|
||||
text-shadow: 0 0 4px rgba(139, 69, 19, 0.3);
|
||||
transform: translateX(2px);
|
||||
}
|
||||
.mournblade-welcome-message .welcome-footer {
|
||||
background: linear-gradient(135deg, #4a0404 0%, #8b0000 100%);
|
||||
background: linear-gradient(135deg, #2a1400 0%, #8b4513 100%);
|
||||
padding: 8px;
|
||||
text-align: center;
|
||||
color: #ffd700;
|
||||
@@ -2710,6 +2843,36 @@ li {
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .sheet-box {
|
||||
height: auto;
|
||||
}
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content {
|
||||
color: #2a1a0a !important;
|
||||
background: rgba(255, 250, 240, 0.92);
|
||||
border-radius: 3px;
|
||||
padding: 0.4rem 0.5rem;
|
||||
min-height: 6rem;
|
||||
}
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content p,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content p,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content ul,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content ul,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content ol,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content ol,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content li,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content li,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content h1,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content h1,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content h2,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content h2,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content h3,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content h3,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror .editor-content h4,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror .editor-content h4 {
|
||||
color: #2a1a0a !important;
|
||||
}
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab prose-mirror:not(.inactive) .editor-content,
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .tab .editor prose-mirror:not(.inactive) .editor-content {
|
||||
background: rgba(255, 252, 245, 0.98);
|
||||
}
|
||||
.fvtt-mournblade-cyd-2-0.actor .sheet-body .compact-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
<h3><label class="items-title-text">Runes</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Haute Langue</label>
|
||||
<label class="short-label">Haut Parler</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Difficulté</label>
|
||||
@@ -375,7 +375,7 @@
|
||||
{{#each runes as |rune key|}}
|
||||
<li class="item flexrow " data-item-id="{{rune._id}}" data-item-type="rune">
|
||||
<img class="item-name-img" src="{{rune.img}}" />
|
||||
<span class="item-name-label competence-name">{{rune.name}}</span>
|
||||
<span class="item-name-label competence-name"><a data-action="rollRune">{{rune.name}}</a></span>
|
||||
<span class="item-field-label-long">{{rune.system.formule}}</span>
|
||||
<span class="item-field-label-short">{{rune.system.seuil}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
@@ -779,8 +779,8 @@
|
||||
<span>
|
||||
<h3>Description</h3>
|
||||
</span>
|
||||
<div class="medium-editor item-text-long-line">
|
||||
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
|
||||
<div class="editor">
|
||||
{{formInput systemFields.biodata.fields.description enriched=enrichedDescription value=system.biodata.description name="system.biodata.description" toggled=true}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,33 +1,96 @@
|
||||
<div class="chat-message-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
<div class="mournblade-chat-result">
|
||||
|
||||
<hr />
|
||||
|
||||
{{#if actionImg}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{actionImg}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexcol"></div>
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Arme</strong> : {{arme.name}} (+{{arme.system.totalDegats}})
|
||||
</li>
|
||||
<li><strong>Formule</strong> : {{formula}}</li>
|
||||
<li><strong>Dégats</strong> : {{finalResult}}</li>
|
||||
{{#if targetVigueur}}
|
||||
<li><strong>Vigueur de la cible</strong> : {{targetVigueur}}</li>
|
||||
<li>
|
||||
<strong>Etats de Combativité supplémentaires perdus (auto)</strong> :
|
||||
{{nbEtatPerdus}}
|
||||
</li>
|
||||
{{!-- Header avec acteur --}}
|
||||
<div class="chat-result-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
</ul>
|
||||
<div class="header-info">
|
||||
<h4 class="actor-name">{{alias}}</h4>
|
||||
{{#if arme}}
|
||||
<div class="action-title">
|
||||
<i class="fas fa-swords"></i>
|
||||
Dégâts — {{arme.name}}
|
||||
{{#if arme.system.nonletaux}}<span class="non-lethal-tag">(Non létaux)</span>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Résultat des dégâts --}}
|
||||
<div class="result-main">
|
||||
<div class="result-display">
|
||||
<div class="dice-result">
|
||||
<i class="fas fa-dice"></i>
|
||||
<span class="dice-value">{{diceResult}}</span>
|
||||
</div>
|
||||
<div class="total-result">
|
||||
<span class="total-label">Dégâts</span>
|
||||
<span class="total-value">{{finalResult}}</span>
|
||||
</div>
|
||||
{{#if targetVigueur}}
|
||||
<div class="difficulty">
|
||||
<span class="difficulty-label">SV</span>
|
||||
<span class="difficulty-value">{{targetVigueur}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Badge résultat dégâts --}}
|
||||
{{#if targetVigueur}}
|
||||
<div class="result-badge-container">
|
||||
{{#if (eq nbEtatPerdus 0)}}
|
||||
<div class="result-badge failure">
|
||||
<i class="fas fa-shield"></i> Armure tient
|
||||
</div>
|
||||
{{else if (eq nbEtatPerdus 1)}}
|
||||
<div class="result-badge success">
|
||||
<i class="fas fa-bolt"></i> +1 état supplémentaire
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="result-badge heroique">
|
||||
<i class="fas fa-fire"></i> +{{nbEtatPerdus}} états supplémentaires
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Détails des dégâts --}}
|
||||
<div class="result-details">
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Arme :</span>
|
||||
<span class="detail-value">{{arme.name}} (+{{arme.system.totalDegats}})</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Formule :</span>
|
||||
<span class="detail-value">{{formula}}</span>
|
||||
</div>
|
||||
{{#if targetVigueur}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">SV cible :</span>
|
||||
<span class="detail-value">{{targetVigueur}}</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">États supplémentaires perdus :</span>
|
||||
<span class="detail-value">{{nbEtatPerdus}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Info : dégâts auto-appliqués si cible sélectionnée --}}
|
||||
<div class="result-effects">
|
||||
{{#if defenderTokenId}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
Combativité appliquée automatiquement à la cible.
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
Aucune cible sélectionnée — appliquez les dégâts manuellement.
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,138 +1,304 @@
|
||||
<div class="chat-message-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
<h4 class="chat-actor-name">{{alias}}</h4>
|
||||
</div>
|
||||
<div class="mournblade-chat-result">
|
||||
|
||||
<hr />
|
||||
|
||||
{{#if actionImg}}
|
||||
<div>
|
||||
<img class="chat-icon" src="{{actionImg}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexcol"></div>
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
<li class="mournblade-cyd2-roll">
|
||||
<strong>Attribut</strong> : {{attr.label}} ({{attr.value}})
|
||||
</li>
|
||||
{{#if attr2}}
|
||||
<li><strong>Attribut</strong> : {{attr2.label}} ({{attr2.value}})</li>
|
||||
{{/if}} {{#if competence}}
|
||||
<li>
|
||||
<strong>Compétence</strong> : {{competence.name}}
|
||||
({{competence.system.niveau}})
|
||||
</li>
|
||||
{{/if}} {{#if selectedMaitrise}}
|
||||
<li><strong>Maitrise</strong> : {{selectedMaitrise.name}}</li>
|
||||
{{/if}} {{#if arme}}
|
||||
<li>
|
||||
<strong>Arme</strong> : {{arme.name}} (+{{arme.system.bonusmaniementoff}})
|
||||
</li>
|
||||
{{!-- Header avec acteur --}}
|
||||
<div class="chat-result-header">
|
||||
{{#if actorImg}}
|
||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
||||
{{/if}}
|
||||
|
||||
<li><strong>Formule</strong> : {{diceFormula}}</li>
|
||||
<li><strong>Résultat du dé</strong> : {{diceResult}}</li>
|
||||
|
||||
{{#if bonusRoll}}
|
||||
<li><strong>{{textBonus}}</strong> : +{{bonusRoll.total}}</li>
|
||||
{{/if}}
|
||||
|
||||
<li><strong>Total</strong> : {{finalResult}}</li>
|
||||
|
||||
{{#if attaqueCharge}}
|
||||
<li>
|
||||
Vous avez chargé : vos adversaires bénéficient de +3 pour vous attaquer
|
||||
</li>
|
||||
{{/if}} {{#if difficulte}}
|
||||
<li><strong>SD</strong> : {{difficulte}}</li>
|
||||
|
||||
{{#if isSuccess}}
|
||||
<li class="chat-success">Succés...</li>
|
||||
{{#if attaqueDesarme}}
|
||||
<li>Vous désarmez votre adversaire ! Son arme tombe hors de sa portée.</li>
|
||||
{{/if}} {{else}}
|
||||
<li class="chat-failure">Echec...</li>
|
||||
{{/if}} {{/if}} {{#if isHeroique}}
|
||||
<li class="chat-success">Héroïque !!!</li>
|
||||
{{#if attaqueDesarme}}
|
||||
<li>
|
||||
... Et en plus vous récupérez l'arme de votre adversaire dans votre main
|
||||
(si vous le souhaitez) !.
|
||||
</li>
|
||||
{{/if}} {{/if}} {{#if isDramatique}}
|
||||
<li class="chat-failure">Dramatique !!!</li>
|
||||
{{/if}} {{#if isInit}}
|
||||
<li>Initiative stockée !</li>
|
||||
{{/if}} {{#if isSuccess}} {{#if immobiliser}} {{#if isHeroique}}
|
||||
<li>
|
||||
Votre cible est immobilisée, et vous pouvez faire une action complexe.
|
||||
</li>
|
||||
{{else}}
|
||||
<li>Votre cible est immobilisée.</li>
|
||||
{{/if}} {{/if}} {{#if desengager}} {{#if isSuccess}}
|
||||
<li>Vous vous désengagez de votre adversaire.</li>
|
||||
{{else}}
|
||||
<li>
|
||||
Vous ne parvenez pas à vous désengager de votre adversaire, il a un bonus
|
||||
de +3 pour vous attaquer
|
||||
</li>
|
||||
{{/if}} {{/if}} {{#if repousser}} {{#if isHeroique}}
|
||||
<li>Votre cible est repoussée de 3 mètres et tombe au sol.</li>
|
||||
{{else}}
|
||||
<li>Votre cible tombe au sol.</li>
|
||||
{{/if}} {{/if}} {{#if assomer}} {{#if isHeroique}}
|
||||
<li>Votre cible est assomée pour [[/r 1d10+10]] minutes.</li>
|
||||
{{else}}
|
||||
<li>Votre cible est assomée pour [[/r 1d10]] minutes.</li>
|
||||
{{/if}} {{/if}} {{#if coupBas}}
|
||||
<li>
|
||||
La cible a reçu 2 adversités bleues et a perdu 1 niveau de combativité
|
||||
(auto).
|
||||
</li>
|
||||
{{#if isHeroique}}
|
||||
<li>Et votre cible perd sa prochaine action complexe.</li>
|
||||
{{/if}} {{/if}} {{#if arme}} {{#if contenir}} {{#if isHeroique}}
|
||||
<li>
|
||||
Aucun dégât, mais tous les adversaires dont le Seuil de Défense + 10 est
|
||||
atteint ou dépassé par le résultat de la manœuvre ne peuvent déclarer
|
||||
d’attaque contre le personnage lors de leur prochaine action complexe (à
|
||||
ce tour de jeu ou au suivant).
|
||||
</li>
|
||||
{{else}}
|
||||
<li>
|
||||
Aucun dégât, mais la cible de cette manœuvre ne peut pas déclarer
|
||||
d’attaque contre vous lors de sa prochaine action complexe (à ce tour de
|
||||
jeu ou au suivant).
|
||||
</li>
|
||||
{{/if}} {{else}} {{#if (eq nbCombativitePerdu "vaincu")}}
|
||||
<li>Votre adversaire est vaincu !</li>
|
||||
{{else}}
|
||||
<li>
|
||||
Votre adversaire a perdu {{nbCombativitePerdu}} Etat de Combativité (auto)
|
||||
</li>
|
||||
{{#if (not arme.system.onlevelonly)}}
|
||||
<button class="chat-card-button roll-chat-degat">Dégats de l'arme</button>
|
||||
{{#if coupDevastateur}}
|
||||
<button class="chat-card-button roll-chat-degat-devastateur">
|
||||
Dégats de l'arme avec Coup Dévastateur
|
||||
</button>
|
||||
{{/if}} {{/if}} {{/if}} {{/if}} {{/if}} {{/if}} {{#each predilections as
|
||||
|pred key|}}
|
||||
<li>
|
||||
{{#if (and (and pred.acquise (not pred.maitrise)) (not pred.used))}}
|
||||
<button
|
||||
class="chat-card-button predilection-reroll"
|
||||
data-predilection-index="{{key}}"
|
||||
>
|
||||
Predilection : {{pred.name}}
|
||||
</button>
|
||||
<div class="header-info">
|
||||
<h4 class="actor-name">{{alias}}</h4>
|
||||
{{#if competence}}
|
||||
<div class="action-title">
|
||||
<i class="fas fa-dice-d10"></i>
|
||||
{{competence.name}}
|
||||
{{#if rune}}• {{rune.name}}{{else if arme}}• {{arme.name}}{{/if}}
|
||||
</div>
|
||||
{{else if attr}}
|
||||
<div class="action-title">
|
||||
<i class="fas fa-dice-d10"></i>
|
||||
{{attr.label}}{{#if attr2}} / {{attr2.label}}{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Résultat principal --}}
|
||||
<div class="result-main">
|
||||
<div class="result-display">
|
||||
<div class="dice-result">
|
||||
<i class="fas fa-dice"></i>
|
||||
<span class="dice-value">{{diceResult}}</span>
|
||||
</div>
|
||||
{{#if isD20Impair}}
|
||||
<div class="dice-result d20-impair">
|
||||
<i class="fas fa-exclamation-circle"></i>
|
||||
<span class="dice-value">D20 impair → valeur dé : 0</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="total-result">
|
||||
<span class="total-label">Total</span>
|
||||
<span class="total-value">{{finalResult}}</span>
|
||||
</div>
|
||||
{{#if difficulte}}
|
||||
<div class="difficulty">
|
||||
<span class="difficulty-label">SD</span>
|
||||
<span class="difficulty-value">{{difficulte}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Badge de résultat --}}
|
||||
{{#if difficulte}}
|
||||
<div class="result-badge-container">
|
||||
{{#if isHeroique}}
|
||||
<div class="result-badge heroique">
|
||||
<i class="fas fa-star"></i> HÉROÏQUE !
|
||||
</div>
|
||||
{{else if isDramatique}}
|
||||
<div class="result-badge dramatique">
|
||||
<i class="fas fa-skull"></i> DRAMATIQUE !
|
||||
</div>
|
||||
{{else if isSuccess}}
|
||||
<div class="result-badge success">
|
||||
<i class="fas fa-check"></i> Succès
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="result-badge failure">
|
||||
<i class="fas fa-times"></i> Échec
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Détails du jet --}}
|
||||
<div class="result-details">
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Formule :</span>
|
||||
<span class="detail-value">{{diceFormula}}</span>
|
||||
</div>
|
||||
{{#if attr}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">{{attr.label}} :</span>
|
||||
<span class="detail-value">{{attr.value}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if attr2}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">{{attr2.label}} :</span>
|
||||
<span class="detail-value">{{attr2.value}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if competence}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">{{competence.name}} :</span>
|
||||
<span class="detail-value">{{competence.system.niveau}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if selectedMaitrise}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Maîtrise :</span>
|
||||
<span class="detail-value">{{selectedMaitrise.name}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if arme}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Arme :</span>
|
||||
<span class="detail-value">{{arme.name}} (+{{arme.system.bonusmaniementoff}})</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if rune}}
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Rune :</span>
|
||||
<span class="detail-value">{{rune.name}}{{#if rune.system.formule}} — {{rune.system.formule}}{{/if}}</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Mode :</span>
|
||||
<span class="detail-value">{{runemode}}</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Pouvoir / Durée :</span>
|
||||
<span class="detail-value">{{runeame}} pts → {{runeduree}} action(s) complexe(s)</span>
|
||||
</div>
|
||||
<div class="detail-row">
|
||||
<span class="detail-label">Coût en Âme :</span>
|
||||
<span class="detail-value">{{runeAmeCout}} pts</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if bonusRoll}}
|
||||
<div class="detail-row bonus">
|
||||
<span class="detail-label">{{textBonus}} :</span>
|
||||
<span class="detail-value">+{{bonusRoll.total}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Effets et conséquences --}}
|
||||
{{#if rune}}
|
||||
<div class="result-effects">
|
||||
{{#if isSuccess}}
|
||||
{{#if isHeroique}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-star"></i>
|
||||
La rune {{rune.name}} est activée avec une puissance héroïque — la résistance est impossible !
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-magic"></i>
|
||||
La rune {{rune.name}} est activée avec succès.
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{#if isDramatique}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-skull"></i>
|
||||
Échec dramatique : la rune échoue — les forces du chaos se déchaînent !
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-times-circle"></i>
|
||||
Échec simple : la rune n'a aucun effet.
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{!-- Effets et conséquences --}}
|
||||
{{#if isSuccess}}
|
||||
<div class="result-effects">
|
||||
{{#if attaqueCharge}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-horse"></i>
|
||||
Vous avez chargé : vos adversaires bénéficient de +3 pour vous attaquer.
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if attaqueDesarme}}
|
||||
<div class="effect-item">
|
||||
{{#if isHeroique}}
|
||||
<i class="fas fa-hand-rock"></i>
|
||||
Vous désarmez votre adversaire <em>et</em> récupérez son arme (si vous le souhaitez) !
|
||||
{{else}}
|
||||
<i class="fas fa-hand-rock"></i>
|
||||
Vous désarmez votre adversaire ! Son arme tombe hors de sa portée.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if immobiliser}}
|
||||
<div class="effect-item">
|
||||
{{#if isHeroique}}
|
||||
<i class="fas fa-lock"></i>
|
||||
Votre cible est immobilisée — vous pouvez faire une action complexe.
|
||||
{{else}}
|
||||
<i class="fas fa-lock"></i>
|
||||
Votre cible est immobilisée.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if repousser}}
|
||||
<div class="effect-item">
|
||||
{{#if isHeroique}}
|
||||
<i class="fas fa-arrow-right"></i>
|
||||
Votre cible est repoussée de 3 mètres et tombe au sol.
|
||||
{{else}}
|
||||
<i class="fas fa-arrow-right"></i>
|
||||
Votre cible tombe au sol.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if assomer}}
|
||||
<div class="effect-item">
|
||||
{{#if isHeroique}}
|
||||
<i class="fas fa-dizzy"></i>
|
||||
Votre cible est assommée pour [[/r 1d10+10]] minutes.
|
||||
{{else}}
|
||||
<i class="fas fa-dizzy"></i>
|
||||
Votre cible est assommée pour [[/r 1d10]] minutes.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if coupBas}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-exclamation-circle"></i>
|
||||
La cible reçoit 2 adversités bleues et perd 1 niveau de combativité (auto).
|
||||
{{#if isHeroique}}
|
||||
<br/><i class="fas fa-plus"></i> Votre cible perd aussi sa prochaine action complexe.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
{{#if contenir}}
|
||||
<div class="effect-item">
|
||||
{{#if isHeroique}}
|
||||
<i class="fas fa-shield"></i>
|
||||
Tous les adversaires dont le SD+10 est atteint ne peuvent pas déclarer d'attaque lors de leur prochaine action complexe.
|
||||
{{else}}
|
||||
<i class="fas fa-shield"></i>
|
||||
La cible ne peut pas vous attaquer lors de sa prochaine action complexe.
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{#if (eq nbCombativitePerdu "vaincu")}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-skull-crossbones"></i>
|
||||
Votre adversaire est <strong>vaincu</strong> !
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-bolt"></i>
|
||||
Votre adversaire a perdu <strong>{{nbCombativitePerdu}}</strong> état(s) de combativité (auto).
|
||||
</div>
|
||||
{{#if (not arme.system.onlevelonly)}}
|
||||
<div class="damage-buttons">
|
||||
<button class="chat-card-button roll-chat-degat">
|
||||
<i class="fas fa-burst"></i> Dégâts de l'arme
|
||||
</button>
|
||||
{{#if coupDevastateur}}
|
||||
<button class="chat-card-button roll-chat-degat-devastateur">
|
||||
<i class="fas fa-fire"></i> Dégâts avec Coup Dévastateur
|
||||
</button>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{!-- Conséquences d'un échec --}}
|
||||
{{#if desengager}}
|
||||
<div class="result-effects">
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
Vous ne parvenez pas à vous désengager — malus de -5 à votre défense ce tour et le suivant.
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if isInit}}
|
||||
<div class="result-effects">
|
||||
<div class="effect-item">
|
||||
<i class="fas fa-clock"></i>
|
||||
Initiative stockée !
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{!-- Prédilections (boutons de relance) --}}
|
||||
{{#each predilections as |pred key|}}
|
||||
{{#if (and (and pred.acquise (not pred.maitrise)) (not pred.used))}}
|
||||
<div class="predilection-section">
|
||||
<button class="chat-card-button predilection-reroll" data-predilection-index="{{key}}">
|
||||
<i class="fas fa-redo"></i> Prédilection : {{pred.name}}
|
||||
</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
</div>
|
||||
|
||||
@@ -347,14 +347,14 @@
|
||||
<div class="tab biodata" data-group="primary" data-tab="biodata">
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<div class="section-title">Description</div>
|
||||
<div class="medium-editor item-text-long-line">
|
||||
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
|
||||
<div class="editor">
|
||||
{{formInput systemFields.biodata.fields.description enriched=enrichedDescription value=system.biodata.description name="system.biodata.description" toggled=true}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="sheet-box color-bg-archetype">
|
||||
<div class="section-title">Habitat</div>
|
||||
<div class="medium-editor item-text-long-line">
|
||||
{{editor habitat target="system.biodata.habitat" button=true owner=owner editable=editable}}
|
||||
<div class="editor">
|
||||
{{formInput systemFields.biodata.fields.habitat enriched=enrichedHabitat value=system.biodata.habitat name="system.biodata.habitat" toggled=true}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,8 +1,55 @@
|
||||
<div class="post-item" data-transfer="{{transfer}}">
|
||||
<h3><b>{{name}}</b></h3>
|
||||
{{#if img}}
|
||||
<img class="chat-img" src="{{img}}" title="{{name}}" />
|
||||
<div class="mournblade-post-item" data-jsondata="{{jsondata}}">
|
||||
|
||||
{{!-- Header --}}
|
||||
<div class="post-item-header">
|
||||
{{#if img}}
|
||||
<img class="post-item-img" src="{{img}}" title="{{name}}" />
|
||||
{{/if}}
|
||||
<div class="post-item-title">
|
||||
<h3 class="post-item-name">{{name}}</h3>
|
||||
<span class="post-item-type">{{type}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Statistiques selon le type --}}
|
||||
{{#if (eq type "arme")}}
|
||||
<div class="post-item-stats">
|
||||
{{#if system.typearme}}<div class="post-stat"><span class="stat-label">Type</span><span class="stat-value">{{system.typearme}}</span></div>{{/if}}
|
||||
{{#if system.degats}}<div class="post-stat"><span class="stat-label">Dégâts</span><span class="stat-value">{{system.degats}}</span></div>{{/if}}
|
||||
{{#if system.bonusmaniementoff}}<div class="post-stat"><span class="stat-label">Bonus off.</span><span class="stat-value">+{{system.bonusmaniementoff}}</span></div>{{/if}}
|
||||
{{#if system.seuildefense}}<div class="post-stat"><span class="stat-label">Seuil def.</span><span class="stat-value">{{system.seuildefense}}</span></div>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
<h4><b>Description : </b></h4>
|
||||
<p class="card-content">{{{system.description}}}</p>
|
||||
|
||||
{{#if (eq type "protection")}}
|
||||
<div class="post-item-stats">
|
||||
{{#if system.protection}}<div class="post-stat"><span class="stat-label">Protection</span><span class="stat-value">{{system.protection}}</span></div>{{/if}}
|
||||
{{#if system.adversitepoids}}<div class="post-stat"><span class="stat-label">Adv. poids</span><span class="stat-value">{{system.adversitepoids}}</span></div>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq type "competence")}}
|
||||
<div class="post-item-stats">
|
||||
{{#if system.niveau}}<div class="post-stat"><span class="stat-label">Niveau</span><span class="stat-value">{{system.niveau}}</span></div>{{/if}}
|
||||
{{#if (ne system.attribut1 "none")}}<div class="post-stat"><span class="stat-label">Attribut 1</span><span class="stat-value">{{upper system.attribut1}}</span></div>{{/if}}
|
||||
{{#if (ne system.attribut2 "none")}}<div class="post-stat"><span class="stat-label">Attribut 2</span><span class="stat-value">{{upper system.attribut2}}</span></div>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq type "rune")}}
|
||||
<div class="post-item-stats">
|
||||
{{#if system.formule}}<div class="post-stat"><span class="stat-label">Formule</span><span class="stat-value">{{system.formule}}</span></div>{{/if}}
|
||||
{{#if system.seuil}}<div class="post-stat"><span class="stat-label">Seuil</span><span class="stat-value">{{system.seuil}}</span></div>{{/if}}
|
||||
{{#if system.prononcee}}<div class="post-stat post-stat-full"><span class="stat-label">Prononcée</span><span class="stat-value">{{system.prononcee}}</span></div>{{/if}}
|
||||
{{#if system.tracee}}<div class="post-stat post-stat-full"><span class="stat-label">Tracée</span><span class="stat-value">{{system.tracee}}</span></div>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Description --}}
|
||||
{{#if system.description}}
|
||||
<div class="post-item-description">
|
||||
{{{system.description}}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,240 +1,311 @@
|
||||
<form class="skill-roll-dialog">
|
||||
<header class="roll-dialog-header">
|
||||
{{#if img}}
|
||||
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
{{/if}}
|
||||
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
|
||||
</header>
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="flexrow">
|
||||
{{#if (eq attrKey "tochoose")}}
|
||||
<span class="roll-dialog-label">Attribut</span>
|
||||
<select class="status-small-label color-class-common" id ="attrKey" type="text" name="attrKey" value="attrKey" data-dtype="string" >
|
||||
{{selectOptions attributs selected=attrKey}}
|
||||
</select>
|
||||
{{else}}
|
||||
<span class="roll-dialog-label">{{attr.label}}</span>
|
||||
<span class="small-label roll-dialog-label">{{attr.value}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if nbAdversites}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Malus d'adversités </span>
|
||||
<span class="small-label roll-dialog-label">- {{nbAdversites}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Header --}}
|
||||
<div class="dialog-header">
|
||||
<img class="actor-icon" src="{{img}}" alt="{{name}}" />
|
||||
<div class="dialog-title">
|
||||
<h3>{{name}}</h3>
|
||||
{{#if competence}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{competence.name}}</span>
|
||||
<span class="small-label roll-dialog-label">{{competence.system.niveau}}</span>
|
||||
<div class="competence-name">
|
||||
{{competence.name}}
|
||||
{{#if arme}}— {{arme.name}}{{/if}}
|
||||
{{#if (and attr (ne attrKey "tochoose"))}}
|
||||
<span class="attribut-info"> ({{attr.label}} : {{attr.value}})</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if maitrises}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Utiliser une maîtrise</span>
|
||||
<select class="status-small-label color-class-common" id ="select-maitrise" type="text" name="select-maitrise" value="maitriseId" data-dtype="string" >
|
||||
{{selectOptions maitrises selected=maitriseId valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Second Attribut</span>
|
||||
<select class="status-small-label color-class-common" id ="attrKey2" type="text" name="attrKey2" value="attrKey2" data-dtype="string" >
|
||||
{{#select attrKey2}}
|
||||
<option value="none">Aucun</option>
|
||||
{{#each attributs as |attrLabel attrKey|}}
|
||||
<option value="{{attrKey}}">{{attrLabel}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{#if (and attr (ne attrKey "tochoose"))}}
|
||||
<div class="competence-name">
|
||||
<span class="attribut-info">{{attr.label}} : {{attr.value}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if (count talents)}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Talents </span>
|
||||
<select class="flex1" name="competence-talents" id="competence-talents" data-type="String" multiple>
|
||||
{{!-- Main Content --}}
|
||||
<div class="dialog-content">
|
||||
|
||||
{{!-- Attribut à choisir --}}
|
||||
{{#if (eq attrKey "tochoose")}}
|
||||
<div class="form-group attributes-section">
|
||||
<label>Attribut</label>
|
||||
<select id="attrKey" name="attrKey">
|
||||
{{selectOptions attributs selected=attrKey}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Second attribut (hors compétence) --}}
|
||||
{{#if (not competence)}}
|
||||
<div class="form-group">
|
||||
<label>Second attribut</label>
|
||||
<select id="attrKey2" name="attrKey2">
|
||||
{{#select attrKey2}}
|
||||
<option value="none">Aucun</option>
|
||||
{{#each attributs as |attrLabel attrKey|}}
|
||||
<option value="{{attrKey}}">{{attrLabel}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Malus d'adversités (CYD 2.0) --}}
|
||||
{{#if nbAdversites}}
|
||||
<div class="malus-section">
|
||||
<div class="malus-grid">
|
||||
<div class="malus-item">
|
||||
<span class="malus-label">Malus d'adversités</span>
|
||||
<span class="malus-value">- {{nbAdversites}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Compétence + Maîtrises --}}
|
||||
{{#if competence}}
|
||||
<div class="form-group">
|
||||
<label>{{competence.name}}</label>
|
||||
<span class="field-value">{{competence.system.niveau}}</span>
|
||||
</div>
|
||||
{{#if maitrises}}
|
||||
<div class="form-group">
|
||||
<label>Utiliser une maîtrise</label>
|
||||
<select id="select-maitrise" name="select-maitrise">
|
||||
{{selectOptions maitrises selected=maitriseId valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{!-- Talents --}}
|
||||
{{#if (count talents)}}
|
||||
<div class="form-group">
|
||||
<label>Talents</label>
|
||||
<select class="flex1" name="competence-talents" id="competence-talents" multiple>
|
||||
{{#each talents as |talent key|}}
|
||||
<option value="{{talent._id}}">{{talent.name}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if conditionsCommunes}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">En surplomb, défenseur au sol (+3)?</span>
|
||||
<input type="checkbox" id="defenseur-au-sol" {{checked defenseurAuSol}} />
|
||||
{{!-- Conditions communes (hors arme) --}}
|
||||
{{#if conditionsCommunes}}
|
||||
<div class="combat-modifiers">
|
||||
<h4>Avantages Tactiques</h4>
|
||||
<div class="modifiers-columns">
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-au-sol" {{checked defenseurAuSol}} />
|
||||
<span>En surplomb / défenseur au sol (+3)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-aveugle" {{checked defenseurAveugle}} />
|
||||
<span>Défenseur aveuglé (+10)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-de-dos" {{checked defenseurDeDos}} />
|
||||
<span>Défenseur de dos (+5)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-immobilise" {{checked defenseurImmobilise}} />
|
||||
<span>Défenseur immobilisé (+5)</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur aveuglé (+10)?</span>
|
||||
<input type="checkbox" id="defenseur-aveugle" {{checked defenseurAveugle}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur de dos (+5)?</span>
|
||||
<input type="checkbox" id="defenseur-de-dos" {{checked defenseurDeDos}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur immobilisé (+5)?</span>
|
||||
<input type="checkbox" id="defenseur-immobilise" {{checked defenseurImmobilise}} />
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (or immobiliser repousser)}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cible consciente?</span>
|
||||
{{!-- Manœuvres spéciales (immobiliser / repousser) --}}
|
||||
{{#if (or immobiliser repousser)}}
|
||||
<div class="form-group">
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="cibleconsciente" {{checked cibleconsciente}} />
|
||||
</div>
|
||||
{{/if}}
|
||||
<span>Cible consciente</span>
|
||||
</label>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if arme}}
|
||||
{{!-- Rune --}}
|
||||
{{#if rune}}
|
||||
<div class="rune-section">
|
||||
<div class="form-group">
|
||||
<label>Rune</label>
|
||||
<span class="field-value">{{rune.name}}{{#if rune.system.formule}} — {{rune.system.formule}}{{/if}}</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Mode de lancement</label>
|
||||
<select id="runemode" name="runemode">
|
||||
{{selectOptions config.lancementRuneOptions selected=runemode}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Points d'Âme (Pouvoir)</label>
|
||||
<select id="runeame" name="runeame">
|
||||
{{selectOptions config.pointsAmeOptions selected=runeame}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Section arme --}}
|
||||
{{#if arme}}
|
||||
<div class="weapon-section">
|
||||
<div class="weapon-info">
|
||||
<span class="weapon-label">{{arme.name}}</span>
|
||||
<span class="weapon-bonus">+{{arme.system.bonusmaniementoff}}</span>
|
||||
</div>
|
||||
|
||||
{{!-- Arme de mêlée --}}
|
||||
{{#if arme.system.isMelee}}
|
||||
{{#if bonusArmeNaturelle}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Arme naturelle/fortune en défense</span>
|
||||
<span class="small-label roll-dialog-label">{{bonusArmeNaturelle}}</span>
|
||||
<div class="form-group">
|
||||
<label>Arme naturelle/fortune</label>
|
||||
<span class="field-value">{{bonusArmeNaturelle}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">En surplomb, défenseur au sol (+3)?</span>
|
||||
<input type="checkbox" id="defenseur-au-sol" {{checked defenseurAuSol}} />
|
||||
|
||||
<h4>Modificateurs de Combat</h4>
|
||||
<div class="modifiers-columns">
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-au-sol" {{checked defenseurAuSol}} />
|
||||
<span>En surplomb / défenseur au sol (+3)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="attaquants-multiple" {{checked attaquantsMultiples}} />
|
||||
<span>Attaquants multiples (+3)</span>
|
||||
</label>
|
||||
{{#if hasAmbidextre}}
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="ambidextre-1" {{checked attaqueAmbidextre1}} />
|
||||
<span>1ère attaque avec deux armes (-3)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="ambidextre-2" {{checked attaqueAmbidextre2}} />
|
||||
<span>2ème attaque avec deux armes (-6)</span>
|
||||
</label>
|
||||
{{/if}}
|
||||
{{#if hasFeinte}}
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="feinte" {{checked feinte}} />
|
||||
<span>Feinte <strong>(coût : 1 BA)</strong></span>
|
||||
</label>
|
||||
{{/if}}
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-aveugle" {{checked defenseurAveugle}} />
|
||||
<span>Défenseur aveuglé (+10)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-de-dos" {{checked defenseurDeDos}} />
|
||||
<span>Défenseur de dos (+5)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-restreint" {{checked defenseurRestreint}} />
|
||||
<span>Espace restreint (+3)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="defenseur-immobilise" {{checked defenseurImmobilise}} />
|
||||
<span>Défenseur immobilisé (+5)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="attaque-charge" {{checked attaqueCharge}} />
|
||||
<span>Charge</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="contenir" {{checked contenir}} />
|
||||
<span>Contenir</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="attaque-desarme" {{checked attaqueDesarme}} />
|
||||
<span>Désarmer (SD+10)</span>
|
||||
</label>
|
||||
{{#if isMonte}}
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="charge-cavalerie" {{checked chargeCavalerie}} />
|
||||
<span>Charge de cavalerie</span>
|
||||
</label>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Attaquants multiples (après le premier) (+3)?</span>
|
||||
<input type="checkbox" id="attaquants-multiple" {{checked attaquantsMultiples}} />
|
||||
</div>
|
||||
{{#if hasAmbidextre}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Première attaque avec deux armes (-3)?</span>
|
||||
<input type="checkbox" id="ambidextre-1" {{checked attaqueAmbidextre1}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Seconde attaque avec deux armes (-6)?</span>
|
||||
<input type="checkbox" id="ambidextre-2" {{checked attaqueAmbidextre2}} />
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if hasFeinte}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Feinte (<strong>cout : 1 BA</strong>) ?</span>
|
||||
<input type="checkbox" id="feinte" {{checked feinte}} />
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Soutiens </span>
|
||||
<select class="status-small-label color-class-common" name="soutiens" id="soutiens" data-type="Number">
|
||||
|
||||
<div class="form-group">
|
||||
<label>Soutiens</label>
|
||||
<select id="soutiens" name="soutiens">
|
||||
{{selectOptions config.optionsSoutiens selected=soutiens valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur aveuglé (+10)?</span>
|
||||
<input type="checkbox" id="defenseur-aveugle" {{checked defenseurAveugle}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur de dos (+5)?</span>
|
||||
<input type="checkbox" id="defenseur-de-dos" {{checked defenseurDeDos}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur dans espace restreint (+3)?</span>
|
||||
<input type="checkbox" id="defenseur-restreint" {{checked defenseurRestreint}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Défenseur immobilisé (+5)?</span>
|
||||
<input type="checkbox" id="defenseur-immobilise" {{checked defenseurImmobilise}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Charge ?</span>
|
||||
<input type="checkbox" id="attaque-charge" {{checked attaqueCharge}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Contenir?</span>
|
||||
<input type="checkbox" id="contenir" {{checked contenir}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Désarmer (SD+10)?</span>
|
||||
<input type="checkbox" id="attaque-desarme" {{checked attaqueDesarme}} />
|
||||
</div>
|
||||
{{#if isMonte}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Charge de cavalerie?</span>
|
||||
<input type="checkbox" id="charge-cavalerie" {{checked chargeCavalerie}} />
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Tireur en déplacement ?</span>
|
||||
<select class="item-field-label-long" type="text" id="tireur-deplacement" data-dtype="string">
|
||||
{{selectOptions config.optionsTireurDeplacement selected=tireurDeplacement valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Couvert de la cible ?</span>
|
||||
<select class="item-field-label-long" type="text" id="cible-couvert" data-dtype="string">
|
||||
{{selectOptions config.optionsCouvert selected=cibleCouvert valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cible se déplace vite (SD+3)?</span>
|
||||
<input type="checkbox" id="tireur-cible-deplace" {{checked cibleDeplace}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cible corps à corps (SD+3)?</span>
|
||||
<input type="checkbox" id="tireur-cible-cac" {{checked cibleCaC}} />
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Taille de la cible ?</span>
|
||||
<select class="item-field-label-long" type="text" id="taille-cible" data-dtype="string">
|
||||
{{selectOptions config.optionsTailleCible selected=tailleCible valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Bonus/Malus </span>
|
||||
<select class="roll-dialog-label" id="bonus-malus-context" type="text" value="{{bonusMalusContext}}"
|
||||
data-dtype="Number">
|
||||
{{!-- Arme à distance --}}
|
||||
{{#if arme.system.isDistance}}
|
||||
<div class="ranged-combat-section">
|
||||
<h4>Modificateurs de Tir</h4>
|
||||
<div class="modifiers-columns">
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="tireur-cible-deplace" {{checked cibleDeplace}} />
|
||||
<span>Cible se déplace vite (SD+3)</span>
|
||||
</label>
|
||||
<label class="checkbox-label">
|
||||
<input type="checkbox" id="tireur-cible-cac" {{checked cibleCaC}} />
|
||||
<span>Cible en corps-à-corps (SD+3)</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="modifiers-grid">
|
||||
<div class="form-group">
|
||||
<label>Tireur en déplacement</label>
|
||||
<select id="tireur-deplacement" name="tireur-deplacement">
|
||||
{{selectOptions config.optionsTireurDeplacement selected=tireurDeplacement valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Couvert de la cible</label>
|
||||
<select id="cible-couvert" name="cible-couvert">
|
||||
{{selectOptions config.optionsCouvert selected=cibleCouvert valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Taille de la cible</label>
|
||||
<select id="taille-cible" name="taille-cible">
|
||||
{{selectOptions config.optionsTailleCible selected=tailleCible valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>SD distance</label>
|
||||
<select id="distance-tir" name="distance-tir">
|
||||
{{selectOptions config.optionsDistanceTir selected=distanceTir valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- SD de l'adversaire (mêlée) --}}
|
||||
{{#if (and armeDefense (not arme.system.isDistance))}}
|
||||
<div class="defense-info">
|
||||
<span class="defense-label">{{#if desengager}}C. Offensive adversaire{{else}}C. Défensive adversaire{{/if}}</span>
|
||||
<span class="defense-value">{{difficulte}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Bonus / Malus contextuel et Difficulté --}}
|
||||
<div class="modifiers-grid">
|
||||
<div class="form-group">
|
||||
<label>Bonus / Malus</label>
|
||||
<select id="bonus-malus-context" name="bonus-malus-context">
|
||||
{{selectOptions config.optionsBonusMalus selected=bonusMalusContext valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if (or armeDefense arme.system.isDistance)}}
|
||||
|
||||
{{#if arme.system.isDistance}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">SD de distance</span>
|
||||
<select class="item-field-label-long" type="text" id="distance-tir" data-dtype="string">
|
||||
{{selectOptions config.optionsDistanceTir selected=distanceTir valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
{{#if desengager}}
|
||||
<span class="roll-dialog-label">C. Offensive adversaire </span>
|
||||
{{else}}
|
||||
<span class="roll-dialog-label">C. Défensive adversaire</span>
|
||||
{{/if}}
|
||||
<span class="roll-dialog-label"><strong>{{difficulte}}</strong> </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{else}}
|
||||
|
||||
{{#if isInit}}
|
||||
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Difficulté : </span>
|
||||
<select class="roll-dialog-label" id="difficulte" type="text" name="difficulte" data-dtype="String">
|
||||
{{#if (not isInit)}}
|
||||
{{#unless (or armeDefense arme.system.isDistance)}}
|
||||
<div class="form-group">
|
||||
<label>Difficulté</label>
|
||||
<select id="difficulte" name="difficulte">
|
||||
{{selectOptions config.optionsDifficulte selected=difficulte valueAttr="key" nameAttr="key" labelAttr="label"}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user