Appv2 + DataModel migration completed

This commit is contained in:
2026-01-08 08:28:13 +01:00
parent 5894cf043f
commit 60978a67b2
88 changed files with 656 additions and 257 deletions

View File

@@ -0,0 +1,635 @@
<form class="{{cssClass}}" autocomplete="off">
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields background-sheet-header">
<div class="flexrow">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow">
<ul class="item-list alternate-list">
<li class="item flexrow ">
<h4 class="item-name-label competence-name">Bonne Aventure</h4>
<label class="item-name-label competence-name item-field-label-short">Base</label>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.bonneaventure.base" value="{{system.bonneaventure.base}}" data-dtype="Number" />
<label class="item-name-label competence-name item-field-label-short">Actuelle</label>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.bonneaventure.actuelle" value="{{system.bonneaventure.actuelle}}" data-dtype="Number" />
</li>
<li class="item flexrow ">
<h4 class="item-name-label competence-name item-field-label-medium">Expérience</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.experience.value" value="{{system.experience.value}}" data-dtype="Number" />
<h4 class="item-name-label competence-name item-field-label-medium">Eclat</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.eclat.value" value="{{system.eclat.value}}" data-dtype="Number" />
</li>
<li class="item flexrow">
<h4 class="item-name-label competence-name item-field-label-medium">Vigueur</h4>
<label class="status-small-label color-class-common item-field-label-short">{{system.sante.vigueur}}</label>
<h4 class="item-name-label competence-name item-field-label-medium">Etat</h4>
<select class="status-small-label color-class-common item-field-label-medium" type="text" name="system.sante.etat"
value="{{system.sante.etat}}" data-dtype="Number">
{{selectOptions combativiteList selected=system.sante.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
</select>
</li>
</ul>
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<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="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-hawkmoon-cyd/assets/icons/{{attr.labelnorm}}.webp">
<span data-tooltip="Cliquez pour faire un jet" class="item-name-label competence-name item-field-label-medium"><a
class="roll-attribut">{{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-hawkmoon-cyd/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">
<h4 class="item-name-label competence-name">Adversités</h4>
<ul class="item-list alternate-list">
{{#each system.adversite as |adv key|}}
<li class="item flexrow" data-adversite="{{key}}">
<a class="adversite-modify plus-minus-button" data-adversite-value="-1">-</a>
<div class="icon-adversite-container">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_{{key}}.webp">
<div class="adversite-text">{{adv}}</div>
</div>
<a class="adversite-modify plus-minus-button" data-adversite-value="1">+</a>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
</li>
{{/each}}
</ul>
{{#if isGM}}
<div class="flexrow">
<span class="item-name-label competence-name item-field-label-medium">Modificateur de Vigueur</span>
<input type="text" class="item-field-label-short" name="system.sante.vigueurmodifier"
value="{{system.sante.vigueurmodifier}}" data-dtype="Number" />
</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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
{{#if (count mutations)}}
<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">Mutations</label></h3>
</span>
<span class="item-field-label-long">
<label class="short-label">Catégorie</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="mutation" title="Ajouter une Mutation"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each mutations as |mutation key|}}
<li class="item flexrow " data-item-id="{{mutation._id}}" data-item-type="mutation">
<img class="item-name-img" src="{{mutation.img}}" />
<span class="item-name-label competence-name">{{mutation.name}}</span>
<span class="item-name-label item-field-label-long2">{{mutation.system.mutationcategorie}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
{{/if}}
<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">Talents de Cellule</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Résumé</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="talent" title="Ajouter un Talent"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each talentsCell as |talent key|}}
<li class="item flexrow " data-item-id="{{talent._id}}" data-item-type="competence">
<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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
{{!-- Competence 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">&nbsp;</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 class="roll-competence "
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 class="roll-competence 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 class="roll-competence 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 class="roll-competence button-sheet-roll" data-attr-key="{{skill.system.attribut3}}">{{upper
skill.system.attribut3}} : {{skill.system.attribut3total}}</button>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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 roll-initiative">Initiative (actuelle : {{initiative}} )</button>
<label class="item-field-label-short">&nbsp</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">&nbsp</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 roll-assommer">Assommer</button>
<button class="chat-card-button roll-coup-bas">Coup bas</button>
<button class="chat-card-button roll-immobiliser">Immobiliser</button>
<button class="chat-card-button roll-repousser">Repousser</button>
<button class="chat-card-button roll-desengager">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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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 class="roll-arme-offensif button-sheet-roll">{{arme.system.totalOffensif}}</button>
{{else}}
<button disabled class="roll-arme-offensif 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 class="roll-arme-degats button-sheet-roll">{{arme.system.totalDegats}}</button>
{{else}}
<button disabled class="roll-arme-degats button-sheet-roll">{{arme.system.totalDegats}}</button>
{{/if}}
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-equip" 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 item-edit" title="Editer l' Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-equip" 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 item-edit" title="Editer l'Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">Artefacts</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Quantité</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="artefact" title="Ajouter un artefact"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each artefacts as |artefact key|}}
<li class="item flexrow " data-item-id="{{artefact._id}}" data-item-type="artefact">
<img class="item-name-img" src="{{artefact.img}}" />
<span class="item-name-label competence-name">{{artefact.name}}</span>
<span class="item-name-label competence-name item-field-label-medium">{{artefact.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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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 item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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 item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">Statut de résistant</label>
<select class="status-small-label color-class-common item-field-label-long" type="text" name="system.biodata.statutresistant" data-dtype="String">
{{selectOptions config.optionsStatutResistant selected=system.biodata.statutresistant valueAttr="key" nameAttr="key" labelAttr="label"}}
</select>
</li>
<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>
</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>
</section>
</form>

View File

@@ -0,0 +1,385 @@
<form class="{{cssClass}}" autocomplete="off">
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields background-sheet-header">
<div class="flexrow">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow">
<ul class="item-list alternate-list">
<li class="item flexrow">
<h4 class="item-name-label competence-name item-field-label-medium">Notoriété</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.notoriete" value="{{system.notoriete}}" data-dtype="Number" />
<h4 class="item-name-label competence-name item-field-label-long">Résistance</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.resistance" value="{{system.resistance}}" data-dtype="Number" />
</li>
<li class="item flexrow ">
<h4 class="item-name-label competence-name item-field-label-long">Développement</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.developpement" value="{{system.developpement}}" data-dtype="Number" />
</li>
</ul>
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="talents">Membres&Talents</a>
<a class="item" data-tab="contacts">Contacts</a>
<a class="item" data-tab="ressources">Ressources</a>
<a class="item" data-tab="equipement">Equipement</a>
<a class="item" data-tab="biodata">Description</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Talents Tab --}}
<div class="tab talents" data-group="primary" data-tab="talents">
<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">Membres</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each members as |membre key|}}
<li class="item flexrow " data-actor-id="{{membre.id}}" >
<img class="item-name-img" src="{{membre.img}}" />
<span class="item-name-label competence-name">{{membre.name}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control actor-edit" title="Edit Actor"><i class="fas fa-edit"></i></a>
<a class="item-control actor-delete" title="Delete Actor"><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">
<span class="item-name-label-header">
<h3><label class="items-title-text">Talents de Cellule</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Résumé</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
{{!-- Contacts Tab --}}
<div class="tab contacts" data-group="primary" data-tab="contacts">
<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">Contacts</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Type</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each contacts as |contact key|}}
<li class="item flexrow " data-item-id="{{contact._id}}" data-item-type="competence">
<img class="item-name-img" src="{{contact.img}}" />
<span class="item-name-label competence-name">{{contact.name}}</span>
<span class="item-name-label item-field-label-medium">{{upperFirst contact.system.contacttype}}</span>
<span class="item-name-label item-field-label-medium">{{contact.system.niveau}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Ressources Tab --}}
<div class="tab ressources" data-group="primary" data-tab="ressources">
<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">Ressources</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each ressources as |ressource key|}}
<li class="item flexrow " data-item-id="{{ressource._id}}" data-item-type="competence">
<img class="item-name-img" src="{{ressource.img}}" />
<span class="item-name-label competence-name">{{ressource.name}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<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>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer l' Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Editer l'Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</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">Artefacts</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Quantité</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="artefact" title="Ajouter un artefact"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each artefacts as |artefact key|}}
<li class="item flexrow " data-item-id="{{artefact._id}}" data-item-type="artefact">
<img class="item-name-img" src="{{artefact.img}}" />
<span class="item-name-label competence-name">{{artefact.name}}</span>
<span class="item-name-label competence-name item-field-label-medium">{{artefact.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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">
<span>
<h3>Description</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor description target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</section>
</form>

View File

@@ -0,0 +1,254 @@
<div class="hawkmoon-chat-result">
{{!-- Header avec acteur --}}
<div class="chat-result-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<div class="header-info">
<h4 class="actor-name">{{alias}}</h4>
{{#if competence}}
<div class="action-title">
<i class="fas fa-dice-d20"></i>
{{competence.name}}
{{#if arme}}• {{arme.name}}{{/if}}
</div>
{{else if actionImg}}
<div class="action-title">
<i class="fas fa-dice-d20"></i>
{{attr.label}}{{#if attr2}} + {{attr2.label}}{{/if}}
</div>
{{/if}}
</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>
<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="details-section">
<div class="detail-row">
<span class="detail-label">Formule:</span>
<span class="detail-value">{{diceFormula}}</span>
</div>
<div class="detail-row">
<span class="detail-label">{{attr.label}}:</span>
<span class="detail-value">{{attr.value}}</span>
</div>
{{#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 bonusRoll}}
<div class="detail-row bonus">
<span class="detail-label">{{textBonus}}:</span>
<span class="detail-value">+{{bonusRoll.total}}</span>
</div>
{{/if}}
</div>
</div>
{{!-- Effets et conséquences --}}
{{#if isSuccess}}
<div class="result-effects">
{{#if attaqueDesarme}}
<div class="effect-item">
<i class="fas fa-hand-sparkles"></i>
{{#if isHeroique}}
Vous récupérez l'arme de votre adversaire dans votre main !
{{else}}
Vous désarmez votre adversaire ! Son arme tombe hors de sa portée.
{{/if}}
</div>
{{/if}}
{{#if immobiliser}}
<div class="effect-item">
<i class="fas fa-lock"></i>
{{#if isHeroique}}
Votre cible est immobilisée, et vous pouvez faire une action complexe.
{{else}}
Votre cible est immobilisée.
{{/if}}
</div>
{{/if}}
{{#if desengager}}
<div class="effect-item">
<i class="fas fa-running"></i>
Vous vous désengagez de votre adversaire.
</div>
{{/if}}
{{#if repousser}}
<div class="effect-item">
<i class="fas fa-hand-rock"></i>
{{#if isHeroique}}
Votre cible est repoussée de 3 mètres et tombe au sol.
{{else}}
Votre cible tombe au sol.
{{/if}}
</div>
{{/if}}
{{#if assomer}}
<div class="effect-item">
<i class="fas fa-dizzy"></i>
{{#if isHeroique}}
Votre cible est assomée pour [[/r 1d10+10]] minutes.
{{else}}
Votre cible est assomée pour [[/r 1d10]] minutes.
{{/if}}
</div>
{{/if}}
{{#if coupBas}}
<div class="effect-item">
<i class="fas fa-shoe-prints"></i>
La cible a reçu 2 adversités bleues et a perdu 1 niveau de combativité.
{{#if isHeroique}}
<br><strong>Et votre cible perd sa prochaine action complexe.</strong>
{{/if}}
</div>
{{/if}}
{{#if arme}}
{{#if contenir}}
<div class="effect-item">
<i class="fas fa-shield-alt"></i>
{{#if isHeroique}}
Aucun dégât, mais tous les adversaires dont le SD + 10 est atteint ne peuvent déclarer d'attaque contre vous lors de leur prochaine action complexe.
{{else}}
Aucun dégât, mais la cible ne peut pas déclarer d'attaque contre vous lors de sa prochaine action complexe.
{{/if}}
</div>
{{else}}
{{#if (eq nbCombativitePerdu "vaincu")}}
<div class="effect-item victory">
<i class="fas fa-trophy"></i>
<strong>Votre adversaire est vaincu !</strong>
</div>
{{else}}
<div class="effect-item">
<i class="fas fa-heart-broken"></i>
Votre adversaire a perdu {{nbCombativitePerdu}} État de Combativité.
</div>
{{/if}}
{{#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-explosion"></i> Dégâts avec Coup Dévastateur
</button>
{{/if}}
</div>
{{/if}}
{{/if}}
{{/if}}
</div>
{{/if}}
{{!-- Avertissements --}}
{{#if attaqueCharge}}
<div class="result-warning">
<i class="fas fa-exclamation-triangle"></i>
Vous avez chargé : vos adversaires bénéficient de +3 pour vous attaquer.
</div>
{{/if}}
{{#if desengager}}
{{#if (not isSuccess)}}
<div class="result-warning">
<i class="fas fa-exclamation-triangle"></i>
Vous ne parvenez pas à vous désengager, votre adversaire a un bonus de +3 pour vous attaquer.
</div>
{{/if}}
{{/if}}
{{#if isInit}}
<div class="result-info">
<i class="fas fa-flag"></i> Initiative stockée !
</div>
{{/if}}
{{!-- Prédilections --}}
{{#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>

View File

@@ -0,0 +1,403 @@
<form class="{{cssClass}}" autocomplete="off">
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields background-sheet-header">
<div class="flexrow">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow">
<ul class="item-list alternate-list">
<li class="item flexrow ">
<h4 class="item-name-label competence-name">Ressources</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.ressources.value" value="{{system.ressources.value}}" data-dtype="Number" />
</li>
</ul>
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="principal">Technique</a>
<a class="item" data-tab="competences">Compétences</a>
<a class="item" data-tab="talents">Talents</a>
<a class="item" data-tab="armes">Armes</a>
<a class="item" data-tab="biodata">Bio&Notes</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Main Tab --}}
<div class="tab principal" data-group="primary" data-tab="principal">
<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-hawkmoon-cyd/assets/icons/{{attr.labelnorm}}.webp">
<span class="item-name-label competence-name item-field-label-medium"><a
class="roll-attribut">{{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.listeNiveauCreature selected=attr.value}}
</select>
</li>
{{/each}}
<li class="item flexrow">
<img class="item-name-img" src="systems/fvtt-hawkmoon-cyd/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>
<h4 class="item-name-label competence-name">Santé</h4>
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="label-name item-field-label-medium">Vigueur</label>
<input type="text" class="padd-right numeric-input item-field-label-short" data-dtype="Number"
name="system.sante.vigueur" value="{{system.sante.vigueur}}">
</li>
<li class="item flexrow">
<label class="label-name item-field-label-medium">Etat</label>
<select class="label-name item-field-label-medium" type="text" name="system.sante.etat"
value="{{system.sante.etat}}" data-dtype="Number">
{{selectOptions combativiteList selected=system.sante.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
</select>
</li>
</ul>
<h4 class="item-name-label competence-name">Combat</h4>
<ul class="item-list alternate-list">
<li class="item flexrow">
<button class="chat-card-button roll-initiative">Initiative (actuelle : {{initiative}} )</button>
</li>
</ul>
</div>
<div class="sheet-box color-bg-archetype">
<h4 class="item-name-label competence-name">Adversité</h4>
<ul class="item-list alternate-list">
{{#each system.adversite as |adv key|}}
<li class="item flexrow" data-adversite="{{key}}">
<a class="adversite-modify plus-minus-button" data-adversite-value="-1">-</a>
<div class="icon-adversite-container">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_{{key}}.webp">
<div class="adversite-text">{{adv}}</div>
</div>
<a class="adversite-modify plus-minus-button" data-adversite-value="1">+</a>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
</li>
{{/each}}
</ul>
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="label-name item-field-label-long1">Niveaux de combativité</label>
<input type="text" class="padd-right numeric-input item-field-label-short" data-dtype="Number"
name="system.sante.nbcombativite" value="{{system.sante.nbcombativite}}">
</li>
</ul>
<ul class="item-list alternate-list">
<li class="item flexrow">
<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">&nbsp</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 roll-assommer">Assommer</button>
<button class="chat-card-button roll-coup-bas">Coup bas</button>
<button class="chat-card-button roll-immobiliser">Immobiliser</button>
</li>
<li class="item flexrow">
<button class="chat-card-button roll-repousser">Repousser</button>
<button class="chat-card-button roll-desengager">Se désengager</button>
</li>
</ul>
</div>
</div>
</div>
{{!-- Competence 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">&nbsp;</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 class="roll-competence 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.listeNiveauCreature selected=skill.system.niveau}}
</select>
{{#if (ne skill.system.attribut1 "none")}}
<button class="roll-competence 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 class="roll-competence 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 class="roll-competence button-sheet-roll" data-attr-key="{{skill.system.attribut3}}">{{upper
skill.system.attribut3}} : {{skill.system.attribut3total}}</button>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Talents Tab --}}
<div class="tab talents" data-group="primary" data-tab="talents">
<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">Talents</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Résumé</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
<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">Talents de Cellule</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Résumé</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="talent" title="Ajouter un Talent"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each talentsCell 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Equipement Tab --}}
<div class="tab armes" data-group="primary" data-tab="armes">
<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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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 class="roll-arme-offensif button-sheet-roll">{{arme.system.totalOffensif}}</button>
{{else}}
<button disabled class="roll-arme-offensif 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 class="roll-arme-degats button-sheet-roll">{{arme.system.totalDegats}}</button>
{{else}}
<button disabled class="roll-arme-degats button-sheet-roll">{{arme.system.totalDegats}}</button>
{{/if}}
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-equip" 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 item-edit" title="Editer l'Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" 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">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-equip" 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 item-edit" title="Editer l'Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'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">
<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>
<span>
<h3>Habitat</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor habitat target="system.biodata.habitat" button=true owner=owner editable=editable}}
</div>
</div>
</section>
</form>

View File

@@ -0,0 +1,216 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { HawkmoonUtility } from "../modules/hawkmoon-utility.js";
import { HawkmoonAutomation } from "../modules/hawkmoon-automation.js";
/* -------------------------------------------- */
export class HawkmoonActorSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
template: "systems/fvtt-hawkmoon-cyd/templates/actor-sheet.html",
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,
systemFields: this.document.system.schema.fields,
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() || []),
mutations: foundry.utils.duplicate(this.actor.getMutations() || []),
talentsCell: this.getCelluleTalents(),
profils: foundry.utils.duplicate(this.actor.getProfils() || []),
combat: this.actor.getCombatValues(),
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
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: HawkmoonUtility.getCombativiteList(this.actor.system.sante.nbcombativite),
initiative: this.actor.getFlag("world", "last-initiative") || -1,
enrichedDescription: 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.hawkmoon.config
}
this.formData = formData;
return formData;
}
/* -------------------------------------------- */
getCelluleTalents( ) {
let talents = []
for(let cellule of game.actors) {
if (cellule.type == "cellule") {
let found = cellule.system.members.find( it => it.id == this.actor.id)
if (found) {
talents = talents.concat( cellule.getTalents() )
}
}
}
return talents
}
/* -------------------------------------------- */
/** @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");
HawkmoonUtility.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 HawkmoonUtility.searchItem(item)
}
let autoresult = HawkmoonAutomation.processAutomations("on-drop", item, this.actor)
if ( autoresult.isValid ) {
super._onDropItem(event, dragData)
} else {
ui.notifications.warn( autoresult.warningMessage)
}
}
}

View File

@@ -0,0 +1,173 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { HawkmoonUtility } from "../modules/hawkmoon-utility.js";
import { HawkmoonAutomation } from "../modules/hawkmoon-automation.js";
/* -------------------------------------------- */
const __ALLOWED_ITEM_CELLULE = { "talent": 1, "ressource": 1, "contact": 1, "equipement": 1, "protection": 1, "artefact": 1, "arme": 1, "monnaie": 1 }
/* -------------------------------------------- */
export class HawkmoonCelluleSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
template: "systems/fvtt-hawkmoon-cyd/templates/cellule-sheet.html",
width: 640,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "talents" }],
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,
talents: foundry.utils.duplicate(this.actor.getTalents() || {}),
ressources: foundry.utils.duplicate(this.actor.getRessources()),
contacts: foundry.utils.duplicate(this.actor.getContacts()),
members: this.getMembers(),
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
armes: foundry.utils.duplicate(this.actor.getWeapons()),
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
protections: foundry.utils.duplicate(this.actor.getArmors()),
richesse: this.actor.computeRichesse(),
valeurEquipement: this.actor.computeValeurEquipement(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
isGM: game.user.isGM,
config: game.system.hawkmoon.config
}
this.formData = formData;
console.log("CELLULE : ", formData, this.object);
return formData;
}
/* -------------------------------------------- */
getMembers( ) {
let membersFull = []
for(let def of this.actor.system.members) {
let actor = game.actors.get(def.id)
membersFull.push( { name: actor.name, id: actor.id, img: actor.img } )
}
return membersFull
}
/* -------------------------------------------- */
/** @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('.actor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let actorId = li.data("actor-id")
const actor = game.actors.get(actorId)
actor.sheet.render(true)
})
html.find('.actor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let actorId = li.data("actor-id")
this.actor.removeMember(actorId)
})
// 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");
HawkmoonUtility.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('.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('.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);
});
}
/* -------------------------------------------- */
async _onDropActor(event, dragData) {
const actor = fromUuidSync(dragData.uuid)
if (actor) {
this.actor.addMember(actor.id)
} else {
ui.notifications.warn("Cet acteur n'a pas été trouvé.")
}
super._onDropActor(event)
}
/* -------------------------------------------- */
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 HawkmoonUtility.searchItem(item)
}
if ( __ALLOWED_ITEM_CELLULE[item.type]) {
super._onDropItem(event, dragData)
return
}
ui.notification.info("Ce type d'item n'est pas autorisé sur une Cellule.")
}
/* -------------------------------------------- */
/** @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;
}
}

View File

@@ -0,0 +1,26 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { HawkmoonActorSheet } from "./hawkmoon-actor-sheet.js";
import { HawkmoonUtility } from "../modules/hawkmoon-utility.js";
import { HawkmoonAutomation } from "../modules/hawkmoon-automation.js";
/* -------------------------------------------- */
export class HawkmoonCreatureSheet extends HawkmoonActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
template: "systems/fvtt-hawkmoon-cyd/templates/creature-sheet.html",
width: 640,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: false
})
}
}

View File

@@ -0,0 +1,228 @@
import { HawkmoonUtility } from "./hawkmoon-utility.js";
/**
* Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet}
*/
export class HawkmoonItemSheet extends foundry.appv1.sheets.ItemSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-hawkmoon-cyd", "sheet", "item"],
template: "systems/fvtt-hawkmoon-cyd/templates/item-sheet.html",
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: HawkmoonUtility.getAttributs(),
system: objectData.system,
limited: this.object.limited,
options: this.options,
owner: this.document.isOwner,
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
mr: (this.object.type == 'specialisation'),
isGM: game.user.isGM,
config: game.system.hawkmoon.config
}
if ( objectData.type == "don") {
formData.sacrifice = await TextEditor.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(HawkmoonUtility.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-Hawkmoon-rpg/templates/post-item.html', chatData).then(html => {
let chatOptions = HawkmoonUtility.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-hawkmoon-cyd/templates/item-${type}-sheet.html`;
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
return this.object.update(formData);
}
}

View File

@@ -0,0 +1,143 @@
import { HawkmoonUtility } from "../modules/hawkmoon-utility.js";
export class HawkmoonRollDialog extends Dialog {
/* -------------------------------------------- */
static async create(actor, rollData) {
let options = { classes: ["HawkmoonDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-hawkmoon-cyd/templates/roll-dialog-generic.html', rollData);
return new HawkmoonRollDialog(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
HawkmoonUtility.rollHawkmoon(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
})
}
}

View File

@@ -0,0 +1,36 @@
<li
class="item flexrow list-item list-item-shadow"
data-item-id="{{equip._id}}"
>
<a class="item-edit item-name-img" title="Edit Item"
><img class="sheet-competence-img" src="{{equip.img}}"
/></a>
{{#if (eq level 1)}}
<span class="item-name-label">{{equip.name}}</span>
{{else}}
<span class="item-name-label-level2">{{equip.name}}</span>
{{/if}}
<span class="item-field-label-long"
><label>
{{equip.system.quantity}} (<a class="quantity-minus plus-minus-button">
-</a
>/<a class="quantity-plus plus-minus-button">+</a>)
</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
{{#if (eq level 1)}}
<a class="item-control item-equip" title="Worn"
>{{#if equip.system.equipped}}<i class="fas fa-circle"></i>{{else}}<i
class="fas fa-genderless"
></i
>{{/if}}</a
>
{{/if}}
<a class="item-control item-delete" title="Delete Item"
><i class="fas fa-trash"></i
></a>
</div>
</li>

View File

@@ -0,0 +1,334 @@
<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"><strong>Attribut</strong></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"><strong>{{attr.label}}</strong></span>
<span class="small-label roll-dialog-label">{{attr.value}}</span>
{{/if}}
</div>
{{#if nbAdversites}}
<div class="flexrow">
<span class="roll-dialog-label"><strong>Malus d'adversités</strong></span>
<span class="small-label roll-dialog-label">- {{nbAdversites}}</span>
</div>
{{/if}} {{#if competence}}
<div class="flexrow">
<span class="roll-dialog-label"><strong>{{competence.name}}</strong></span>
<span class="small-label roll-dialog-label"><strong>{{competence.system.niveau}}</strong></span>
</div>
{{#if maitrises}}
<div class="flexrow">
<span class="roll-dialog-label"><strong>Maîtrise</strong></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"><strong>Second Attribut</strong></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}} {{#if (count talents)}}
<div class="flexrow">
<span class="roll-dialog-label"><strong></strong>Talents</strong></span>
<select
class="flex1"
name="competence-talents"
id="competence-talents"
data-type="String"
multiple
>
{{#each talents as |talent key|}}
<option value="{{talent._id}}">{{talent.name}}</option>
{{/each}}
</select>
</div>
{{/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}} />
</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}} {{#if (or immobiliser repousser)}}
<div class="flexrow">
<span class="roll-dialog-label">Cible consciente?</span>
<input type="checkbox" id="cibleconsciente" {{checked cibleconsciente}} />
</div>
{{/if}} {{#if arme}} {{#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>
{{/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}} />
</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"><strong></strong>Soutiens</strong></span>
<select
class="status-small-label color-class-common"
name="soutiens"
id="soutiens"
data-type="Number"
>
{{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"
>
{{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"
>
{{selectOptions config.optionsDifficulte selected=difficulte
valueAttr="key" nameAttr="key" labelAttr="label"}}
</select>
</div>
{{/if}} {{/if}}
</div>
</form>