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:
2026-06-04 20:58:22 +02:00
parent f9f07cbc7e
commit 30d6f71fc7
43 changed files with 19225 additions and 609 deletions
+13 -26
View File
@@ -8,47 +8,34 @@
<h1 class="char-name flexrow flex-group-left w-full">
<label>{{ localize 'IDENTITY.name' }}</label>
<input name="name" type="text" value="{{actor.name}}"
placeholder="{{localize "VERMINE.GroupNamePlaceholder"}}" />
placeholder="Nom du groupe" />
</h1>
<div class="profile flexrow flex-group-center">
<label>{{ localize 'IDENTITY.profile' }}</label>
<input name="system.identity.profile" type="text"
value="{{system.identity.profile }}" data-dtype="String" />
</div>
<div class="flexrow flex-group-center w-full">
<label for="system.identity.age">{{ localize 'IDENTITY.morale'
}}</label>
<div class="flexrow row">
<input type="number" name="system.identity.age"
value="{{ system.morale.value }}" data-dtype="Number"
max="7" min="1" />
<span id="moraleLevel">({{ system.morale.level }})</span>
</div>
value="{{system.identity.profile}}" data-dtype="String" />
</div>
</section>
<section class="char-level grid-span-5">
<h1 class="char-vermine2047 flexrow flex-group-left w-full">
<label for="system.identity.totem">{{ localize 'IDENTITY.totem'
}}</label>
<label for="system.identity.totem">{{ localize 'IDENTITY.totem' }}</label>
{{#if (eq system.identity.totem "")}}
<a name="chooseTotem" class="chooseTotem">Choisissez&hellip;</a>
{{ else }}
<a name="chooseTotem" class="chooseTotem">{{ smarttl "TOTEMS"
system.identity.totem }}</a>
<a name="chooseTotem" class="chooseTotem">{{ smarttl "TOTEMS" system.identity.totem }}</a>
{{/if}}
</h1>
<div class="level flexrow flex-group-center">
<label>{{ localize 'VERMINE.level' }}</label>
<input name="system.level.value" type="number"
value="{{system.level.value}}" data-dtype="Number" min="{{system.level.min}}" max="{{system.level.max}}" />
<span>/ {{system.level.max}}</span>
</div>
<div class="reputation flexrow flex-group-center">
<label>{{ localize 'VERMINE.reputation' }}</label>
<input name="system.reputation.value" type="number"
value="{{system.reputation.value }}" data-dtype="Number" min="2"
max="10" />
<img src="{{totem}}" alt>
</div>
<div class="experience flexrow flex-group-center">
<label>{{ localize 'VERMINE.level' }}</label>
<input name="system.level.value" type="number"
value="{{system.level.value }}" data-dtype="Number" min="0"
max="3" />
value="{{system.reputation.value}}" data-dtype="Number" min="{{system.reputation.min}}" max="{{system.reputation.max}}" />
<span>/ {{system.reputation.max}}</span>
</div>
</section>
</header>
</header>