fix: Correct critical bugs and complete Creature/Group DataModel implementation
- Fix TypeError: controls.find is not a function in hooks.mjs - Fix undefined 'npc' variable in applications.mjs - Fix CONFIG.VERMINE.model undefined by checking game.system.template existence - Fix TypeError: html.find(...).forEach is not a function in roll.mjs - Fix Cannot set properties of undefined (setting 'initial') in actor.mjs - Fix Cannot read properties of undefined (reading 'difficulty') in actor.mjs - Fix ActiveEffect application phase 'initial' already completed by adding combatStatus to base template - Fix Missing helper: 'select' in roll-dialog.hbs (removed invalid Handlebars select block) - Add SIZE_LEVELS labels to creatureSizeLevels config - Add SIZE_LEVELS translations to fr.json - Add combatStatus to base actor template - Convert all .html templates to .hbs for Foundry v14 compatibility - Update item-sheet.mjs to use .hbs extension - Update handlebars-manager.mjs to use .hbs for all partials Complete Vermine2047 Creature and Group sheet implementation: - Creature: Pattern, Size, Role, Pack with computed values - Group: Totem, Reserve, Morale, Objectives, Members management - All templates functional with proper styling Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -4,107 +4,154 @@
|
||||
<header class="sheet-header">
|
||||
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"/>
|
||||
<div class="header-fields">
|
||||
<div class="resources grid grid-3col">
|
||||
<h1 class="charname">
|
||||
<input name="name" type="text" value="{{actor.name}}" placeholder="Nom"/>
|
||||
<div class="resources grid grid-4col">
|
||||
<h1 class="charname grid-span-2">
|
||||
<input name="name" type="text" value="{{actor.name}}" placeholder="{{ localize 'IDENTITY.name' }}"/>
|
||||
</h1>
|
||||
<div class="resource-content flexrow row text-right">
|
||||
<label for="system.pack.value" class="resource-label">{{ localize 'ADVERSITY.pack'}}</label>
|
||||
<select
|
||||
name="system.pack.value"
|
||||
id="system.pack.value"
|
||||
data-dtype="Number"
|
||||
>
|
||||
<option value="0">{{localize 'VERMINE.none'}}</option>
|
||||
{{#each ../config.creaturePackLevels}}
|
||||
{{#if @key}}
|
||||
<option
|
||||
value="{{@key}}"
|
||||
{{#ife @key ../system.pack.value}}selected{{/ife}}
|
||||
>{{@key}}</option>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</select>
|
||||
<div class="resource flex-group-center grid-span-1">
|
||||
<label for="system.pattern.value" class="resource-label">{{ localize 'ADVERSITY.pattern' }}</label>
|
||||
<div class="resource-content">
|
||||
<select name="system.pattern.value" id="system.pattern.value" data-dtype="Number">
|
||||
{{#each ../config.creaturePatternLevels}}
|
||||
<option value="{{@key}}" {{#ife @key ../system.pattern.value}}selected{{/ife}}>
|
||||
{{localize this.label}} ({{@key}})
|
||||
</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="resource flex-group-center grid-span-1">
|
||||
<label for="system.role.value" class="resource-label">{{ localize 'ADVERSITY.role' }}</label>
|
||||
<div class="resource-content">
|
||||
<select name="system.role.value" id="system.role.value" data-dtype="Number">
|
||||
{{#each ../config.creatureRoleLevels}}
|
||||
<option value="{{@key}}" {{#ife @key ../system.role.value}}selected{{/ife}}>
|
||||
{{localize this.label}} ({{@key}})
|
||||
</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="resources grid grid-3col">
|
||||
<div class="resources grid grid-4col">
|
||||
<div class="resource flex-group-center">
|
||||
<label for="system.pattern.value" class="resource-label">{{ localize 'ADVERSITY.pattern'}}</label>
|
||||
<label for="system.size.value" class="resource-label">{{ localize 'ADVERSITY.size' }}</label>
|
||||
<div class="resource-content">
|
||||
<select
|
||||
name="system.pattern.value"
|
||||
id="system.pattern.value"
|
||||
data-dtype="Number"
|
||||
>
|
||||
{{#each ../config.creaturePatternLevels}}
|
||||
<option
|
||||
value="{{@key}}"
|
||||
{{#ife @key ../system.pattern.value}}selected{{/ife}}
|
||||
>{{localize this.label}} ({{@key}})</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="resource flex-group-center">
|
||||
<label for="system.size.value" class="resource-label">{{ localize 'ADVERSITY.size'}}</label>
|
||||
<div class="resource-content">
|
||||
<select
|
||||
name="system.size.value"
|
||||
id="system.size.value"
|
||||
data-dtype="Number"
|
||||
>
|
||||
<select name="system.size.value" id="system.size.value" data-dtype="Number">
|
||||
{{#each ../config.creatureSizeLevels}}
|
||||
<option
|
||||
value="{{@key}}"
|
||||
{{#ife @key ../system.size.value}}selected{{/ife}}
|
||||
>{{@key}}</option>
|
||||
<option value="{{@key}}" {{#ife @key ../system.size.value}}selected{{/ife}}>
|
||||
{{@key}}
|
||||
</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="resource flex-group-center">
|
||||
<label for="system.role.value" class="resource-label">{{ localize 'ADVERSITY.role'}}</label>
|
||||
<label for="system.pack.value" class="resource-label">{{ localize 'ADVERSITY.pack' }}</label>
|
||||
<div class="resource-content">
|
||||
<select
|
||||
name="system.role.value"
|
||||
id="system.role.value"
|
||||
data-dtype="Number"
|
||||
>
|
||||
{{#each ../config.creatureRoleLevels}}
|
||||
<option
|
||||
value="{{@key}}"
|
||||
{{#ife @key ../system.role.value}}selected{{/ife}}
|
||||
>{{localize this.label}} ({{@key}})</option>
|
||||
<select name="system.pack.value" id="system.pack.value" data-dtype="Number">
|
||||
<option value="0">{{localize 'VERMINE.none'}}</option>
|
||||
{{#each ../config.creaturePackLevels}}
|
||||
{{#if @key}}
|
||||
<option value="{{@key}}" {{#ife @key ../system.pack.value}}selected{{/ife}}>
|
||||
{{@key}}
|
||||
</option>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="resource flex-group-center grid-span-2">
|
||||
<label class="resource-label">{{ localize 'VERMINE.computed_values' }}</label>
|
||||
<div class="resource-content">
|
||||
<span>{{ localize 'VERMINE.total_attack' }}: {{ system.computed.attack }}</span>
|
||||
<span style="margin-left: 10px;">{{ localize 'ADVERSITY.damage' }}: {{ system.computed.damage }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
{{!-- Default tab is specified in actor-sheet.mjs --}}
|
||||
<a class="item" data-tab="description">{{ localize 'VERMINE.abilities'}}</a>
|
||||
<a class="item" data-tab="effects">{{ localize 'VERMINE.combat'}}</a>
|
||||
<a class="item" data-tab="description">{{ localize 'VERMINE.information' }}</a>
|
||||
<a class="item" data-tab="stats">{{ localize 'VERMINE.stats' }}</a>
|
||||
<a class="item" data-tab="combat">{{ localize 'VERMINE.combat' }}</a>
|
||||
<a class="item" data-tab="effects">{{ localize 'UI.effects.name' }}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Biography Tab --}}
|
||||
<div class="tab stats" data-group="primary" data-tab="description">
|
||||
{{!-- Information Tab --}}
|
||||
<div class="tab biography" data-group="primary" data-tab="description">
|
||||
<div class="grid grid-2col">
|
||||
<div>
|
||||
<h4>{{ localize 'IDENTITY.profile' }}</h4>
|
||||
<input type="text" name="system.identity.profile" value="{{system.identity.profile}}"
|
||||
placeholder="Profil..." style="width: 100%;" />
|
||||
</div>
|
||||
<div>
|
||||
<h4>{{ localize 'IDENTITY.origin' }}</h4>
|
||||
<input type="text" name="system.identity.origin" value="{{system.identity.origin}}"
|
||||
placeholder="Origine..." style="width: 100%;" />
|
||||
</div>
|
||||
<div>
|
||||
<h4>{{ localize 'IDENTITY.theme' }}</h4>
|
||||
<input type="text" name="system.identity.theme" value="{{system.identity.theme}}"
|
||||
placeholder="Concept..." style="width: 100%;" />
|
||||
</div>
|
||||
<div>
|
||||
<h4>{{ localize 'ADVERSITY.skills' }}</h4>
|
||||
<input type="text" name="system.skills" value="{{system.skills}}"
|
||||
placeholder="Compétences..." style="width: 100%;" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-span-2">
|
||||
<h4>{{ localize 'IDENTITY.notes' }}</h4>
|
||||
{{editor system.identity.notes target="system.identity.notes" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
|
||||
{{!-- Modes --}}
|
||||
<div class="grid-span-2">
|
||||
<h4>{{ localize 'VERMINE.modes' }}</h4>
|
||||
<div class="grid grid-3col">
|
||||
<div>
|
||||
<label>
|
||||
<input type="checkbox" name="system.modes.survival"
|
||||
{{#if system.modes.survival}}checked{{/if}} data-dtype="Boolean" />
|
||||
{{ localize 'GAME_MODES.survival' }}
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
<input type="checkbox" name="system.modes.nightmare"
|
||||
{{#if system.modes.nightmare}}checked{{/if}} data-dtype="Boolean" />
|
||||
{{ localize 'GAME_MODES.nightmare' }}
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
<input type="checkbox" name="system.modes.apocalypse"
|
||||
{{#if system.modes.apocalypse}}checked{{/if}} data-dtype="Boolean" />
|
||||
{{ localize 'GAME_MODES.apocalypse' }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Stats Tab --}}
|
||||
<div class="tab stats" data-group="primary" data-tab="stats">
|
||||
<h3>{{ localize 'VERMINE.base_values' }}</h3>
|
||||
<section class="grid grid-3col gap-md">
|
||||
<div class="mdb">
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.pattern'}}</h4>
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.pattern' }}: {{ patternLabel }}</h4>
|
||||
<ul class="unstyled">
|
||||
<li>{{ localize 'ADVERSITY.attack'}} {{ creaturePatternLevel "attack" system.pattern.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.damage'}} {{ creaturePatternLevel "damage" system.pattern.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.wounds'}}
|
||||
<li>{{ localize 'ADVERSITY.attack' }}: {{ creaturePatternLevel "attack" system.pattern.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.damage' }}: {{ creaturePatternLevel "damage" system.pattern.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.wounds' }}:
|
||||
{{ creaturePatternLevel "minorWound" system.pattern.value }}/
|
||||
{{ creaturePatternLevel "majorWound" system.pattern.value }}/
|
||||
{{ creaturePatternLevel "deadlyWound" system.pattern.value }}
|
||||
@@ -112,11 +159,11 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mdb">
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.size'}}</h4>
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.size' }}: {{ sizeLabel }}</h4>
|
||||
<ul class="unstyled">
|
||||
<li>{{ localize 'ADVERSITY.attack'}} {{ creatureSizeLevel "attack" system.size.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.vigor'}} {{ creatureSizeLevel "vigor" system.size.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.wounds'}}
|
||||
<li>{{ localize 'ADVERSITY.attack' }}: {{ creatureSizeLevel "attack" system.size.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.vigor' }}: {{ creatureSizeLevel "vigor" system.size.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.wounds' }}:
|
||||
{{ creatureSizeLevel "minorWound" system.size.value }}/
|
||||
{{ creatureSizeLevel "majorWound" system.size.value }}/
|
||||
{{ creatureSizeLevel "deadlyWound" system.size.value }}
|
||||
@@ -124,22 +171,23 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mdb">
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.role'}}</h4>
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.role' }}: {{ roleLabel }}</h4>
|
||||
<ul class="unstyled">
|
||||
<li>{{ localize 'ADVERSITY.reaction'}} {{ creatureRoleLevel "reaction" system.role.value }} + {{ creatureRoleLevel "reaction_bonus" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.pools'}} {{ creatureRoleLevel "pools" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.gear'}} {{ creatureRoleLevel "gear" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.protection'}} {{ creatureRoleLevel "protection" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.reaction' }}: {{ creatureRoleLevel "reaction" system.role.value }} + {{ creatureRoleLevel "reaction_bonus" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.pools' }}: {{ creatureRoleLevel "pools" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.gear' }}: {{ creatureRoleLevel "gear" system.role.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.protection' }}: {{ creatureRoleLevel "protection" system.role.value }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section class="grid grid-3col gap-md">
|
||||
|
||||
<section class="grid grid-2col gap-md">
|
||||
<div class="mdb">
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.pack'}}</h4>
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.pack' }}: {{ packLabel }}</h4>
|
||||
<ul class="unstyled">
|
||||
<li>{{ localize 'ADVERSITY.attack'}} {{ creaturePackLevel "attack" system.pack.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.damage'}} {{ creaturePackLevel "damage" system.pack.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.wounds'}}
|
||||
<li>{{ localize 'ADVERSITY.attack' }}: {{ creaturePackLevel "attack" system.pack.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.damage' }}: {{ creaturePackLevel "damage" system.pack.value }}</li>
|
||||
<li>{{ localize 'ADVERSITY.wounds' }}:
|
||||
{{ creaturePackLevel "minorWound" system.pack.value }}/
|
||||
{{ creaturePackLevel "majorWound" system.pack.value }}/
|
||||
{{ creaturePackLevel "deadlyWound" system.pack.value }}
|
||||
@@ -147,62 +195,27 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mdb">
|
||||
<h4 class="align-center">{{ localize 'ADVERSITY.skills'}}</h4>
|
||||
<h4 class="align-center">{{ localize 'VERMINE.wound_thresholds' }}</h4>
|
||||
<ul class="unstyled">
|
||||
<li>
|
||||
<input type="text" name="system.skills" value="{{ system.skills }}" data-dtype="String" placeholder="{{ localize 'ADVERSITY.skills' }}"/>
|
||||
</li>
|
||||
<li>{{ localize 'VERMINE.wounds.light' }}: {{ system.minorWound.threshold }}D</li>
|
||||
<li>{{ localize 'VERMINE.wounds.heavy' }}: {{ system.majorWound.threshold }}D</li>
|
||||
<li>{{ localize 'VERMINE.wounds.deadly' }}: {{ system.deadlyWound.threshold }}D</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="mdb">
|
||||
<h4 class="align-center">{{ localize 'VERMINE.modes'}}</h4>
|
||||
<ul class="unstyled">
|
||||
<li>
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
name="system.modes.survival"
|
||||
{{#if system.modes.survival}}checked{{/if}}
|
||||
data-dtype="Boolean"
|
||||
/>
|
||||
{{ localize 'GAME_MODES.survival' }}
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
name="system.modes.nightmare"
|
||||
{{#if system.modes.nightmare}}checked{{/if}}
|
||||
data-dtype="Boolean"
|
||||
/>
|
||||
{{ localize 'GAME_MODES.nightmare' }}
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
name="system.modes.apocalypse"
|
||||
{{#if system.modes.apocalypse}}checked{{/if}}
|
||||
data-dtype="Boolean"
|
||||
/>
|
||||
{{ localize 'GAME_MODES.apocalypse' }}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section class="flexcol col gap-md">
|
||||
<h4 class="align-center">{{ localize 'IDENTITY.notes'}}</h4>
|
||||
{{editor system.biography target="system.biography" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
</div>
|
||||
|
||||
{{!-- Active Effects Tab --}}
|
||||
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
|
||||
{{!-- Combat Tab --}}
|
||||
<div class="tab effects" data-group="primary" data-tab="combat">
|
||||
<h3>{{ localize 'VERMINE.combat' }}</h3>
|
||||
{{> "systems/vermine2047/templates/actor/creature/creature-combat.hbs"}}
|
||||
</div>
|
||||
|
||||
{{!-- Effects Tab --}}
|
||||
<div class="tab effects" data-group="primary" data-tab="effects">
|
||||
<h3>{{ localize 'UI.effects.name' }}</h3>
|
||||
{{> "systems/vermine2047/templates/actor/parts/actor-effects.hbs"}}
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user