Compare commits

..

10 Commits

Author SHA1 Message Date
038aa37838 Correction sur combat des PNJs
All checks were successful
Release Creation / build (release) Successful in 51s
2026-03-16 23:04:21 +01:00
25b6e30aa8 Correction sur calcul du rang
All checks were successful
Release Creation / build (release) Successful in 51s
2026-01-21 10:55:29 +01:00
f445741eda DIvers petites corrections pour les specialités et les competences
All checks were successful
Release Creation / build (release) Successful in 54s
2026-01-18 18:39:51 +01:00
d3c24e44d8 Correction sur la fortune
All checks were successful
Release Creation / build (release) Successful in 55s
2026-01-14 23:53:36 +01:00
d2cf0d80b1 Fix item Fee
All checks were successful
Release Creation / build (release) Successful in 50s
2026-01-12 20:17:53 +01:00
47350cb2f1 Fix item Fee
All checks were successful
Release Creation / build (release) Successful in 51s
2026-01-12 18:59:56 +01:00
26e46cf10a Fix item Fee
All checks were successful
Release Creation / build (release) Successful in 55s
2026-01-12 17:10:01 +01:00
4722fdf4d6 Migration vers DataModels et appv2 2026-01-10 22:55:38 +01:00
dc3040df26 Migration vers DataModels et appv2
All checks were successful
Release Creation / build (release) Successful in 53s
2026-01-10 22:51:45 +01:00
b1bce86604 Migration vers DataModels et appv2 2026-01-10 22:49:38 +01:00
115 changed files with 1531 additions and 5519 deletions

View File

@@ -0,0 +1,63 @@
name: Release Creation
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner."
#- uses: actions/checkout@v3
- uses: RouxAntoine/checkout@v3.5.4
# get part of the tag after the `v`
- name: Extract tag version number
id: get_version
uses: battila7/get-version-action@v2
# Substitute the Manifest and Download URLs in the system.json
- name: Substitute Manifest and Download Links For Versioned Ones
id: sub_manifest_link_version
uses: microsoft/variable-substitution@v1
with:
files: 'system.json'
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/${{gitea.repository}}
manifest: https://www.uberwald.me/gitea/public/fvtt-les-heritiers/releases/download/latest/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-les-heritiers.zip
# Create a zip file with all files required by the module to add to the release
- run: |
apt update -y
apt install -y zip
- run: zip -r ./fvtt-les-heritiers.zip system.json README.md LICENCE.txt assets/ lang/ modules/ packs/ styles/ templates/
- name: setup go
uses: https://github.com/actions/setup-go@v4
with:
go-version: '>=1.20.1'
- name: Use Go Action
id: use-go-action
uses: https://gitea.com/actions/release-action@main
with:
files: |-
./fvtt-les-heritiers.zip
system.json
api_key: '${{secrets.ALLOW_PUSH_RELEASE}}'
- name: Publish to Foundry server
uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
with:
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
id: 'fvtt-les-heritiers'
version: ${{github.event.release.tag_name}}
manifest: 'https://www.uberwald.me/gitea/public/fvtt-les-heritiers/releases/download/latest/system.json'
notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-les-heritiers.zip'
compatibility-minimum: '13'
compatibility-verified: '13'

598
DEVELOPER_INSTRUCTIONS.md Normal file
View File

@@ -0,0 +1,598 @@
# FoundryVTT Les Héritiers System - Developer Instructions
## Executive Summary
**Les Héritiers** is an unofficial FoundryVTT system for the French RPG "Les Héritiers" (published by Titam France/Sombres Projets). The system implements a complete actor and item management framework with support for characters (personnage), NPCs (pnj), and 13 item types. Recent development includes a migration to Foundry v13+ with DataModels and AppV2 architecture.
**Repository**: https://www.uberwald.me/gitea/public/fvtt-les-heritiers
**Current Version**: 13.0.7
**Compatibility**: Foundry 13+
**Language**: French (single language localization)
---
## 1. BUILD & DEVELOPMENT COMMANDS
### Build System
- **Build Tool**: Gulp 4 with LESS compilation
- **Package Manager**: npm
### Scripts (package.json)
```json
"build": "gulp build" # Compile LESS to CSS (primary task)
"watch": "gulp watch" # Watch LESS files and rebuild on changes
```
### Gulp Pipeline (gulpfile.js)
The gulpfile defines three main tasks:
| Task | Source | Output | Features |
|------|--------|--------|----------|
| `styles` | `less/heritiers.less` | `styles/heritiers.css` | LESS→CSS compilation with source maps |
| `watchFiles` | `less/**/*.less` | Watches recursively | Auto-rebuild on LESS file changes |
| `build` | - | - | Runs `styles` (default export) |
| `watch` | - | - | Runs `build` then `watchFiles` |
**Development Workflow**:
```bash
npm install # Install dependencies (gulp, gulp-less, gulp-sourcemaps)
npm run build # One-time CSS compilation
npm run watch # Development: continuous LESS watching
```
**Key Files**:
- `/package.json` - Minimal deps (only gulp toolchain)
- `/gulpfile.js` - 36 lines defining LESS tasks
- `/less/heritiers.less` - Entry point (imports `simple-converted.less`)
- `/styles/heritiers.css` - Generated output + source maps
---
## 2. SYSTEM ARCHITECTURE
### 2.1 System Metadata (system.json)
| Field | Value |
|-------|-------|
| **id** | `fvtt-les-heritiers` |
| **title** | Les Héritiers |
| **version** | 13.0.7 |
| **description** | Les Héritiers pour FoundryVTT (French) |
| **authors** | Uberwald/LeRatierBretonnien, Prêtre |
| **compatibility** | min: "13", verified: "13" |
| **manifest** | Hosted on Uberwald Gitea |
| **languages** | French only (fr.json) |
| **license** | LICENCE.txt (proprietary) |
| **grid** | 5m squares |
**Key Configuration Flags**:
- `hotReload.extensions`: `css`, `html`, `hbs`, `json`
- `hotReload.paths`: `styles`, `./`, `templates`, `lang/fr.json`
- `primaryTokenAttribute`: `sante.vigueur` (health/vigor)
- `secondaryTokenAttribute`: `bonneaventure.actuelle` (current good fortune)
- **Socket Support**: Enabled (`socket: true`)
### 2.2 Data Model (template.json.backup)
The system defines a complex hierarchical data model with 2 Actor types and 14 Item types:
#### **Actor Types**
**1. `personnage` (Player Character)**
- Templates: `biodata`, `core`
- Key characteristics (8 attributes):
- Physical: Agilité (agi), Constitution (con), Force (for), Précision (prec)
- Mental: Esprit (esp), Perception (per), Prestance (pres), Sang-Froid (san)
- Fields include biodata (name, appearance variants masked/unmasked, age, personality traits), ranks (Tricherie, Féerie, Masque, Héritage with scenario tracking), PV (health), combat skills
- Profile-based competences (6 profiles + magic)
**2. `pnj` (NPC)**
- Templates: `biodata`, `core`
- Identical structure to `personnage` with simpler NPC-specific metadata
**Core Actor Data** (template.core):
```
caracteristiques: {
agi, con, for, prec, esp, per, pres, san
└─ label, labelnorm, abbrev, kind(physical|mental), value, rang, max
}
rang: {
tricherie, feerie, masque, heritage (with scenarios subfield)
}
pv: { value, max, mod }
competences: { aventurier, combattant, erudit, gentleman, roublard, savant }
magie: { pointsame (value, max) }
experience: { value, pourtricher }
combat: {
esquive, parade, resistancephysique, resistancepsychique, protection,
effetssecondaires, dissimulation, initiative, corpsacorps, tir
}
```
#### **Item Types** (14 total)
| Item Type | Key Fields | Use Case |
|-----------|-----------|----------|
| `arme` (Weapon) | degats, precision, cadence, portee, dissimulation, armetype, rarete, prix | Combat equipment |
| `protection` | points, malusagilite, protectiontype, effetsecondaire | Armor/shields |
| `equipement` | rarete, quantite, prix | General gear |
| `accessoire` | lieu (location code) | Small items |
| `competence` | categorie, profil, niveau, specialites[], ismagie, nomniveau | Skills (6 profiles) |
| `profil` | profiltype (majeur|mineur) | Character archetypes |
| `contact` | contacttype (contact, allie, ennemi, interet) | NPC contacts |
| `avantage` | description | Advantages (benefits) |
| `desavantage` | description | Disadvantages (flaws) |
| `capacitenaturelle` | pouvoirtype, activation, effet, portee, resistance, cibles, virulence | Natural abilities |
| `pouvoir` | pouvoirtype, masquetype, niveau, istest, feeriemasque, carac, zoneffet, pointsusagecourant | Powers/spells |
| `atoutfeerique` | description | Fairy/magical perks |
| `fee` | feetype, avantages, desavantages, pouvoirsfeeriques*, atoutsfeeriques, competences, capacitenaturelles | Fairy character sheet |
| `sort` (Spell) | niveau, rang, competence (Druidisme), carac1, carac2, duree, portee, ingredients, resistance | Magic spells |
**Item Templates**:
- `base`: description (HTMLField)
- `basequip`: rarete, quantite, prix, equipped (for equipable items)
### 2.3 Directory Structure
```
modules/ # ES6 source code (12,273 LOC total)
├── heritiers-main.js # Entry point: init, hook setup, document class config
├── heritiers-actor.js # HeritiersActor class with creation hooks
├── heritiers-item.js # HeritiersItem class
├── heritiers-config.js # HERITIERS_CONFIG object (enums, constants)
├── heritiers-commands.js # Chat command system
├── heritiers-utility.js # Static utility class (dice, rolls, templates, socket)
├── heritiers-combat.js # HeritiersCombat class
├── xregexp-all.js # RegExp library
├── models/
│ ├── index.mjs # Exports all DataModels
│ ├── personnage.mjs # PersonnageDataModel (complex, 12K+ lines)
│ ├── pnj.mjs # PnjDataModel
│ ├── arme.mjs # ArmeDataModel (updated Jan 21)
│ ├── competence.mjs # CompetenceDataModel (updated Jan 21)
│ ├── capacitenaturelle.mjs # Natural ability model (updated Jan 21)
│ ├── pouvoir.mjs # PouvoirDataModel (updated Jan 21)
│ ├── protection.mjs # ProtectionDataModel (updated Jan 21)
│ ├── [11 more models] # accessoire, atoutfeerique, avantage, contact,
│ │ # desavantage, equipement, fee, profil, sort
│ └── base-item.mjs # Base item template
├── applications/
│ ├── sheets/
│ │ ├── _module.mjs # Exports all sheet classes
│ │ ├── base-actor-sheet.mjs # HeritiersActorSheet (HandlebarsApplicationMixin, AppV2)
│ │ ├── base-item-sheet.mjs # HeritiersItemSheet base
│ │ ├── personnage-sheet.mjs # Character sheet (specific)
│ │ ├── pnj-sheet.mjs # NPC sheet (specific)
│ │ └── [11 item sheets] # Type-specific sheets: arme, protection, competence, etc.
│ └── heritiers-roll-dialog.mjs # Dialog for roll resolution
```
#### **Key Module Details**:
**heritiers-main.js** (100+ lines):
- Hooks.once("init") - Registers templates, combat, actor/item classes, DataModels
- Registers AppV2 sheets for all actor and item types
- Creates `game.system.lesheritiers` namespace with utilities, config, models, sheets
- Socket message handling
**heritiers-config.js**:
- `HERITIERS_CONFIG` object with ~40 enum dictionaries:
- `caracList`: 8 characteristics with labels
- `competenceProfil`: 6 profiles (aventurier, roublard, combattant, erudit, savant, gentleman) + magic
- `baseTestPouvoir`, `resistancePouvoir`, `typePouvoir`
- `seuilsDifficulte`: 30-level difficulty scale (5=Enfantine to 30=Divine)
- `attaqueCible`: target localization (body part damage tracking)
- Game-specific constants
**heritiers-utility.js** (60+ custom Handlebars helpers):
- `rollDataStore`, `defenderStore` for roll tracking
- Handlebars helpers: count, includes, upper, lower, upperFirst, notEmpty, mul, and, or, eq, isTest, etc.
- `preloadHandlebarsTemplates()` - loads 27 template files
- `chatListeners()` - click handlers for chat
- `loadCompendium()` - loads packs dynamically
- `onSocketMesssage()` - inter-client communication
**heritiers-actor.js**:
- Custom creation logic: auto-adds useful skills from compendium for personnage type
- Extends Foundry Actor class
**heritiers-item.js**:
- Custom Item class with item-type-specific business logic
### 2.4 Templates Directory (27 Handlebars files)
Organized by purpose:
**Actor Sheets** (2 files):
- `actor-sheet.hbs` - Personnage character sheet (complex form with tabs)
- `actor-pnj-sheet.hbs` - NPC sheet (simplified)
**Item Sheets** (14 files):
- `item-[type]-sheet.hbs` for each item type
- E.g., `item-arme-sheet.hbs`, `item-competence-sheet.hbs`, `item-sort-sheet.hbs`
**Partials** (5 files):
- `partial-actor-equipment.hbs` - Equipment list rendering
- `partial-item-header.hbs` - Item sheet header (common)
- `partial-item-nav.hbs` - Tabbed navigation
- `partial-item-description.hbs` - Description editor
- `partial-utile-skills.hbs` - Skill list filtering
- `post-item.hbs` - Chat card for item description
- `editor-notes-gm.hbs` - GM notes editor
**Chat Results** (3 files):
- `chat-generic-result.hbs` - Generic roll result
- `chat-cc-result.hbs` - Close combat result
- `chat-assommer-result.hbs` - Stun attack result
**Dialogs** (1 file):
- `roll-dialog-generic.hbs` - Roll dialog with modifiers
**Design Notes**:
- Heavy use of Handlebars conditionals ({{#if}}, {{#each}})
- Data-action attributes for action routing
- Flexbox-based layout (`flexrow`, `flexcol` CSS classes)
- Partial templates for reusability
### 2.5 Localization (lang/fr.json)
**Minimal localization** - only 24 lines:
```json
{
"TYPES": {
"Actor": {
"personnage": "Personnage",
"pnj": "PNJ"
},
"Item": {
"accessoire": "Accessoire",
"arme": "Arme",
[12 more item types...]
}
}
}
```
**Localization Strategy**:
- Labels hardcoded in code/templates in French
- No string keys for UI text outside TYPES
- Template labels defined in DataModel schema (initial values)
- Seeded localization keys in heritiers-config.js (no i18n lookup)
### 2.6 Styles (less/ and styles/)
**LESS Structure** (2 files):
- `heritiers.less` (4 lines) - Entry point, imports converted template
- `simple-converted.less` - Full stylesheet (converted from Bootstrap/template.css)
**Output**:
- Compiled to `/styles/heritiers.css` (referenced in system.json)
- Source maps generated (`.map` files)
**Styling Approach**:
- Utility classes: `flexrow`, `flexcol`, `padd-right`, `status-small-label`
- Color classes: `color-class-common`, etc.
- Section classes: `background-sheet-header`
- Responsive design via flexbox
### 2.7 Compendium Packs (packs/)
11 packs defined in system.json, stored as `.db` (LevelDB format):
| Pack Name | Type | Label | Folder | Contents |
|-----------|------|-------|--------|----------|
| `competences` | Item | Compétences | Creation | Skills |
| `avantages` | Item | Avantages | Creation | Advantages |
| `desavantages` | Item | Désavantages | Creation | Disadvantages |
| `capacites` | Item | Capacités Naturelles | Creation | Natural abilities |
| `atouts-feeriques` | Item | Atouts Féériques | Creation | Fairy perks |
| `magie-sorts` | Item | Sorts | Creation | Spells (5 spell schools) |
| `archetypes-fees` | Item | Fées | Creation | Fairy archetypes |
| `pouvoirs` | Item | Pouvoirs | Creation | Powers |
| `profils` | Item | Profils | Creation | Character profiles |
| `armes-et-protection` | Item | Armes et Protections | Equipment | Weapons & armor |
| `scenes` | Scene | Scènes | Root | Sample scenes |
| `journaux` | JournalEntry | Journaux | Root | Game journal entries |
**Ownership Model** (PLAYER: OBSERVER, ASSISTANT: OWNER):
- Players can observe (read) items in packs
- Assistants have full control
**Source Data** (`srcdata/`):
- 5 JSON files for spell normalization:
- `sort_druidisme.json`, `sort_faeomancie.json`, `sort_magieduclan.json`, `sort_necromancie.json`, `sort_theurgie.json`
- `normalize.py` - Python script to transform spell data to compendium format
---
## 3. KEY CONVENTIONS
### 3.1 Module/Class Structure
**Pattern**: ES6 Classes extending Foundry base classes
- **Naming**: `Heritiers[Type]` (e.g., `HeritiersActor`, `HeritiersItem`, `HeritiersCombat`)
- **Exports**: Named exports via `export class`/`export default`
**Example (heritiers-actor.js)**:
```javascript
export class HeritiersActor extends Actor {
static async create(data, options) { ... }
// Custom methods and hooks
}
```
**Example (models/personnage.mjs)**:
```javascript
export default class PersonnageDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
biodata: new fields.SchemaField({ ... }),
// nested SchemaFields with detailed field definitions
}
}
}
```
**Sheet Pattern (AppV2 - Foundry v13+)**:
```javascript
const { HandlebarsApplicationMixin } = foundry.applications.api
export default class HeritiersPersonnageSheet extends HandlebarsApplicationMixin(
foundry.applications.sheets.ActorSheetV2
) {
static DEFAULT_OPTIONS = {
classes: ["fvtt-les-heritiers", "sheet", "actor"],
position: { width: 780, height: 840 },
form: { submitOnChange: true, closeOnSubmit: false },
actions: {
editImage, toggleSheet, editItem, deleteItem,
createItem, equipItem, rollCarac, ...
}
}
// Static action handlers (#onEditImage, etc.)
}
```
### 3.2 Data Model Conventions
**Field Types** (foundry.data.fields.*):
- `StringField` - Text values, default initial values
- `HTMLField` - Rich-text fields (description, notes, etc.)
- `NumberField` - Integers (integer: true), floats
- `BooleanField` - Boolean flags
- `ArrayField` - Lists (with element type)
- `SchemaField` - Nested objects
**Naming Conventions**:
- Snake_case for internal field names: `biodata`, `caracteristiques`, `pointsame`
- Abbreviations for characteristics: `agi`, `con`, `for`, `prec`, `esp`, `per`, `pres`, `san`
- French names for labels and UI: "Agilité", "Constitution", etc.
**Special Fields**:
- `labelnorm` - Normalized label for lookups (lowercase, no accents)
- `kind` - Classification (physical, mental, magical)
- `initial` - Default value in schema definition
### 3.3 Handlebars Template Conventions
**File Naming**:
- `actor-sheet.hbs` - Main sheet template (not item-specific)
- `actor-[type]-sheet.hbs` - Type-specific actor sheet
- `item-[type]-sheet.hbs` - Type-specific item sheet
- `partial-[purpose].hbs` - Reusable component
- `chat-[result-type].hbs` - Chat message template
- `editor-[context].hbs` - Editor component
**Data Binding**:
- Actor data: `{{system.field.subfield}}`, `{{actor.name}}`
- Item data: `{{system.field}}`
- Loops: `{{#each system.array as |item key|}}`
- Conditionals: `{{#if condition}}...{{/if}}`
**Custom Helpers** (60+):
- Comparison: `eq`, `ne`, `lt`, `gt`
- Array: `includes`, `count`, `notEmpty`
- String: `upper`, `lower`, `upperFirst`
- Math: `mul`, `add`, `sub`, `and`, `or`
- Game: `isTest` (checks test type)
**CSS Classes**:
- Layout: `flexrow`, `flexcol`, `item`, `item-list`
- Styling: `status-small-label`, `color-class-common`, `background-sheet-header`
- Action: `data-action="actionName"` for click routing
### 3.4 Localization Key Naming
**Pattern**: `TYPES.Actor.[type]`, `TYPES.Item.[type]`
Current localization (lang/fr.json):
```json
"TYPES": {
"Actor": {
"personnage": "Personnage",
"pnj": "PNJ"
},
"Item": {
"accessoire": "Accessoire",
"arme": "Arme",
"atoutfeerique": "Atout féerique",
...
}
}
```
**Strategy**:
- **Type labels**: Centralized in TYPES
- **Field labels**: Defined in DataModel schema as `initial` values
- **Config labels**: In heritiers-config.js (caracList, competenceProfil, etc.)
- **Template text**: Hardcoded in .hbs files (all French)
**No i18n System**: System is French-only; no game.i18n lookups used in code
### 3.5 Dice & Roll System
**Initiative Formula** (heritiers-config.js):
```javascript
CONFIG.Combat.initiative = {
formula: "1d10",
decimals: 1
};
```
**Roll Data Storage** (heritiers-utility.js):
- `rollDataStore = {}` - Tracks active rolls by ID
- `defenderStore = {}` - Tracks defenders for opposed rolls
- Socket-based roll updates for multi-client scenarios
**Bonus/Malus**:
- Range: -6 to +6 (signed integers)
- Generated as: `Array.from({ length: 7 }, (v, k) => toString(k - 6))`
**Dice Mechanics**:
- D8, D10, D12 support with face adjacency tables (unused in some contexts)
- Example: `__facesAdjacentes` object maps die faces to adjacent faces
### 3.6 Socket Message Handling
**Game Socket** (configured in system.json):
- Enabled via `"socket": true`
- Message channel: `"system.fvtt-les-heritiers"`
**Message Flow** (heritiers-utility.js):
```javascript
game.socket.on("system.fvtt-les-heritiers", data => {
HeritiersUtility.onSocketMesssage(data)
})
```
Used for:
- Inter-client roll notifications
- Multiplayer combat updates
### 3.7 Recent Migration Notes (v13.0.7)
**Latest Changes** (from git log):
- Migrated from legacy v1 sheets to **AppV2** (HandlebarsApplicationMixin + ActorSheetV2)
- Migrated to **DataModels** (foundry.abstract.TypeDataModel)
- All sheets converted to `.mjs` (ES6 modules)
- Specification & competence fixes (Jan 21)
- Armor (protection) and weapon (arme) model refinements (Jan 21)
**Key Commit**: `4722fdf - Migration vers DataModels et appv2` (major architecture update)
---
## 4. EXISTING AI & DEVELOPER CONFIGURATIONS
### No Pre-Existing Configs Found
The following configuration files **do NOT exist** in the repository:
- `.github/copilot-instructions.md`
- `CLAUDE.md`
- `.cursorrules`
- `AGENTS.md`
- `.windsurfrules`
- `CONVENTIONS.md`
- `CONTRIBUTING.md`
Only **README.md** exists (29 lines):
- Credits Titam France/Sombres Projets
- Lists contributors: LeRatierBretonnien (dev), Prêtre (testing/data entry)
- Notes official authorization
- Links to books at titam-france.fr
---
## 5. DEVELOPMENT WORKFLOW
### 5.1 Setup
```bash
cd /home/morr/work/foundryvtt/fvtt-les-heritiers
npm install
npm run watch
```
### 5.2 File Organization When Adding Features
| Purpose | Location | Pattern |
|---------|----------|---------|
| New item type logic | `modules/heritiers-item.js` | Extend HeritiersItem |
| New item data model | `modules/models/[type].mjs` | Extend TypeDataModel |
| New item sheet | `modules/applications/sheets/[type]-sheet.mjs` | Extend HeritiersItemSheet |
| New item template | `templates/item-[type]-sheet.hbs` | Handlebars + data-action |
| New actor type | `modules/models/[type].mjs` | Extend TypeDataModel |
| New actor sheet | `modules/applications/sheets/[type]-sheet.mjs` | Extend HeritiersActorSheet |
| New chat message | `templates/chat-[result]-result.hbs` | HTML template |
| Style updates | `less/heritiers.less` or new import | LESS → npm run build |
| New config constants | `modules/heritiers-config.js` | Add to HERITIERS_CONFIG |
| Game mechanics | `modules/heritiers-utility.js` or -commands.js | Static utilities or commands |
### 5.3 Registration Steps for New Item Type
1. **Update template.json.backup** - Add schema definition
2. **Create DataModel** - `modules/models/[type].mjs`
3. **Update heritiers-config.js** - Add enums if needed
4. **Create Sheet** - `modules/applications/sheets/[type]-sheet.mjs`
5. **Create Template** - `templates/item-[type]-sheet.hbs`
6. **Update heritiers-main.js** - Register sheet class
7. **Add to models/index.mjs** - Export DataModel
8. **Add to applications/sheets/_module.mjs** - Export Sheet class
9. **Update localization** - Add type to lang/fr.json TYPES.Item
10. **Update system.json** - If exposing in UI
### 5.4 Debugging
- Check browser console for JS errors
- Use Chrome DevTools on http://localhost:30000 (Foundry dev port)
- Hot reload enabled for: `.css`, `.html`, `.hbs`, `.json` files (from system.json flags)
- Git history available via `git log` or `git show <commit>`
---
## 6. KEY STATISTICS
| Metric | Value |
|--------|-------|
| **System ID** | fvtt-les-heritiers |
| **Version** | 13.0.7 |
| **Total Source LOC** | 12,273 lines |
| **Actor Types** | 2 (personnage, pnj) |
| **Item Types** | 14 (arme, protection, competence, etc.) |
| **Compendium Packs** | 11 |
| **Template Files** | 27 (.hbs) |
| **Module Files** | 28 (.js/.mjs) |
| **Model Files** | 16 (DataModels) |
| **Sheet Files** | 14 (+ 1 base) |
| **LESS Files** | 2 |
| **Localization Files** | 1 (fr.json, 24 lines) |
| **Dev Dependencies** | 3 (gulp, gulp-less, gulp-sourcemaps) |
| **Characteristics** | 8 (agi, con, for, prec, esp, per, pres, san) |
| **Competence Profiles** | 6 + magic (aventurier, roublard, combattant, erudit, savant, gentleman) |
| **Difficulty Scale** | 30 levels (-1 to 30) |
| **Last Commit** | "Correction sur calcul du rang" (recent) |
---
## 7. EXTERNAL RESOURCES
- **Official Publisher**: [Titam France / Sombres Projets](http://www.titam-france.fr)
- **System Repository**: https://www.uberwald.me/gitea/public/fvtt-les-heritiers
- **Foundry Documentation**: https://foundryvtt.com/articles/
- **Foundry v13 API**: DataModels, AppV2 sheets (major changes in this version)
---
## 8. RECOMMENDATIONS FOR DEVELOPERS
1. **Use AppV2 Sheet API** for all new sheets (do not use legacy v1)
2. **Define DataModels** for type data rather than inline templates
3. **Keep French localization** in code/templates (minimal i18n setup)
4. **Test with `npm run watch`** during development
5. **Use socket messages** for multiplayer features
6. **Follow naming conventions** (Heritiers[Type], snake_case for fields, French labels)
7. **Document dice mechanics** when adding new rolls
8. **Keep configuration constants** in heritiers-config.js
9. **Use Handlebars helpers** rather than inline logic in templates
10. **Register sheets in heritiers-main.js** and export from _module.mjs files

239
DOCUMENTATION_INDEX.md Normal file
View File

@@ -0,0 +1,239 @@
# Les Héritiers FoundryVTT System - Documentation Index
## 📖 Available Documentation
### 1. **QUICK_REFERENCE.md** ⭐ START HERE
- **Length**: 250 lines
- **Purpose**: Fast lookup and common task guide
- **Best for**: Developers new to the system
- **Contains**:
- Quick start setup commands
- System overview & statistics
- Project structure diagram
- Key classes and exports
- Step-by-step: Adding a new item type
- Common edits (characteristics, packs, rolls, UI)
- Testing and git workflow
- Useful commands
### 2. **DEVELOPER_INSTRUCTIONS.md** 📚 COMPREHENSIVE GUIDE
- **Length**: 598 lines
- **Purpose**: Complete architectural reference
- **Best for**: Deep understanding and long-term development
- **Contains**:
- Executive summary
- Build/dev commands (package.json, gulpfile.js)
- System architecture (metadata, data model, directories)
- Directory structure with file descriptions
- Template organization & conventions
- Localization strategy
- Styling (LESS, CSS)
- Compendium packs reference
- Detailed conventions:
- Module/class structure
- Data model conventions
- Handlebars template patterns
- Localization key naming
- Dice & roll system
- Socket message handling
- Recent migration notes (v13)
- Development workflow (setup, file organization, registration steps)
- Debugging tips
- Key statistics
- External resources
- Developer recommendations
### 3. **README.md** (ORIGINAL)
- **Length**: 29 lines
- **Purpose**: Project overview and credits
- **Contains**:
- Project description (English & French)
- Copyright & authorization notes
- Developer credits
---
## 🎯 How to Use This Documentation
### For First-Time Setup (5-10 minutes)
1. Read **QUICK_REFERENCE.md** → "Quick Start" section
2. Run `npm install` and `npm run watch`
3. Skim the "Project Structure" section
### For Adding a New Feature (30 minutes)
1. Open **QUICK_REFERENCE.md** → "Adding a New Item Type" section
2. Follow the numbered steps
3. Reference **DEVELOPER_INSTRUCTIONS.md** for deeper understanding of each step
4. Test with `npm run watch`
### For Understanding the System (1-2 hours)
1. Start with **DEVELOPER_INSTRUCTIONS.md** → "Executive Summary"
2. Read section 2: "System Architecture"
3. Read section 3: "Key Conventions"
4. Review section 5: "Development Workflow"
### For Debugging a Bug (varies)
1. Check **QUICK_REFERENCE.md** → "Useful Commands" for search/analysis tools
2. Reference **DEVELOPER_INSTRUCTIONS.md** → Section 3 for patterns
3. Look at git history: `git log --oneline | head -20`
4. Check browser console (DevTools) at `http://localhost:30000`
### For Making Common Edits (5-15 minutes each)
Reference **QUICK_REFERENCE.md** → "Common Edits" section:
- Adding a new characteristic
- Adding a new compendium pack
- Adding a new roll type
- Changing UI layout
---
## 📊 Quick System Overview
| Aspect | Detail |
|--------|--------|
| **System ID** | `fvtt-les-heritiers` |
| **Version** | 13.0.7 |
| **Foundry** | v13+ (AppV2, DataModels) |
| **Language** | French (monolingual) |
| **Build Tool** | Gulp 4 + LESS |
| **Code** | 12,273 LOC total |
| **Actor Types** | 2 (personnage, pnj) |
| **Item Types** | 14 types |
| **Compendium Packs** | 11 LevelDB packs |
| **Sheets** | 16 AppV2 sheets |
| **Architecture** | ES6 modules, TypeDataModel |
---
## 🗂️ Repository Structure
```
fvtt-les-heritiers/
├── README.md # Original project readme
├── QUICK_REFERENCE.md # ⭐ Start here (250 lines)
├── DEVELOPER_INSTRUCTIONS.md # 📚 Deep dive (598 lines)
├── DOCUMENTATION_INDEX.md # This file
├── package.json # npm config (build commands)
├── gulpfile.js # Gulp tasks (LESS → CSS)
├── system.json # FoundryVTT manifest
├── template.json.backup # Data schema reference
├── LICENCE.txt # License
├── modules/ # Source code (12,273 LOC)
│ ├── heritiers-main.js # Foundry init & registration
│ ├── heritiers-actor.js # HeritiersActor class
│ ├── heritiers-item.js # HeritiersItem class
│ ├── heritiers-config.js # Game constants (HERITIERS_CONFIG)
│ ├── heritiers-utility.js # Static utilities & helpers
│ ├── heritiers-commands.js # Chat commands
│ ├── heritiers-combat.js # Combat handling
│ ├── models/ # 16 TypeDataModels
│ │ └── personnage.mjs, arme.mjs, competence.mjs, ...
│ └── applications/sheets/ # 15 AppV2 Sheet classes
│ └── personnage-sheet.mjs, arme-sheet.mjs, ...
├── templates/ # 27 Handlebars templates
│ ├── actor-sheet.hbs # Character sheet
│ ├── actor-pnj-sheet.hbs # NPC sheet
│ ├── item-[type]-sheet.hbs # Item sheets (14)
│ ├── partial-*.hbs # Reusable components
│ ├── chat-*-result.hbs # Chat templates
│ └── editor-*.hbs # Editor components
├── lang/
│ └── fr.json # Localization (24 lines, minimal)
├── less/
│ ├── heritiers.less # Entry point
│ └── simple-converted.less # Imported styles
├── styles/
│ ├── heritiers.css # Compiled output (generated)
│ └── heritiers.css.map # Source map (generated)
├── packs/ # 11 Compendium packs (LevelDB)
├── srcdata/ # Source data for compilation
├── assets/ # UI assets (images, etc.)
└── .git/ # Git history available
```
---
## 🚀 Common Tasks Quick Links
| Task | Guide | Time |
|------|-------|------|
| Initial setup | QUICK_REFERENCE.md → Quick Start | 5 min |
| Add item type | QUICK_REFERENCE.md → Adding a New Item Type | 30 min |
| Fix a bug | DEVELOPER_INSTRUCTIONS.md → Section 5 | 15-60 min |
| Understand architecture | DEVELOPER_INSTRUCTIONS.md → Section 2 | 30 min |
| Change UI layout | QUICK_REFERENCE.md → Change UI layout | 10 min |
| Add characteristic | QUICK_REFERENCE.md → Add a new characteristic | 20 min |
| Add new roll type | QUICK_REFERENCE.md → Add a new roll type | 25 min |
| Debug an issue | QUICK_REFERENCE.md → Testing Changes | 10-30 min |
---
## 📝 Documentation Standards
All documentation follows these principles:
1. **Clarity**: Written for developers unfamiliar with the system
2. **Completeness**: All information needed to perform tasks included
3. **Accuracy**: Based on actual code analysis, not assumptions
4. **Brevity**: Concise sections with clear headings
5. **Examples**: Code snippets and patterns provided
6. **Cross-references**: Links between guides for deeper understanding
---
## 🔄 Keeping Documentation Updated
When making significant changes:
1. **Update QUICK_REFERENCE.md** if:
- Adding/removing item types
- Changing build commands
- Adding/removing features
- Changing conventions
2. **Update DEVELOPER_INSTRUCTIONS.md** if:
- Major architecture changes
- New development patterns established
- New statistics to report
- New sections needed
3. **Update git history** (automatic):
- Commit messages explain changes
- Reference these in DEVELOPER_INSTRUCTIONS.md
---
## 📞 Questions?
Refer to:
- **FoundryVTT Docs**: https://foundryvtt.com/articles/
- **Game Rules**: https://titam-france.fr
- **Git History**: `git log --oneline` (see recent commits)
- **Code Comments**: Most functions have JSDoc-style comments
---
**Last Updated**: March 16, 2025
**Documentation Version**: 1.0
**System Version**: 13.0.7
---
## 🎓 Learning Path
**Day 1**: Quick understanding
1. Read QUICK_REFERENCE.md (20 min)
2. Run setup commands (5 min)
3. Explore directory structure (10 min)
**Week 1**: Basic development
1. Read DEVELOPER_INSTRUCTIONS.md sections 1-3 (45 min)
2. Add a simple new item type (1-2 hours)
3. Fix a small bug (30 min - 1 hour)
**Week 2+**: Deep expertise
1. Read full DEVELOPER_INSTRUCTIONS.md (1-2 hours)
2. Add complex feature (3-6 hours)
3. Understand DataModels & AppV2 sheets intimately
4. Review git history for patterns (1-2 hours)

250
QUICK_REFERENCE.md Normal file
View File

@@ -0,0 +1,250 @@
# Les Héritiers FoundryVTT System - Quick Reference
## Quick Start
```bash
npm install # Install once
npm run watch # Development watch (LESS → CSS)
npm run build # Build once (production)
```
## System at a Glance
| Item | Details |
|------|---------|
| **ID** | `fvtt-les-heritiers` |
| **Version** | 13.0.7 |
| **Foundry** | v13+ (AppV2, DataModels) |
| **Language** | French only |
| **Architecture** | ES6 modules, Foundry TypeDataModel |
## Core Actors (2 types)
- **`personnage`** - Player Character (full biodata + core mechanics)
- **`pnj`** - NPC (same structure, simplified UI)
### Actor Data Structure
- **Characteristics** (8): agi, con, for, prec, esp, per, pres, san
- **Ranks** (4): tricherie, feerie, masque, heritage
- **Combat**: esquive, parade, initiative, corpsacorps, tir, resistances
- **Profiles** (6): aventurier, roublard, combattant, erudit, savant, gentleman + magic
## Core Items (14 types)
**Combat**: arme, protection
**Equipment**: equipement, accessoire
**Character Building**: competence, profil, contact, avantage, desavantage
**Powers**: pouvoir, capacitenaturelle, atoutfeerique, fee
**Magic**: sort
## Project Structure
```
modules/
├─ heritiers-main.js # Foundry init, hook setup
├─ heritiers-actor.js # Actor class
├─ heritiers-item.js # Item class
├─ heritiers-config.js # HERITIERS_CONFIG (enums)
├─ heritiers-utility.js # Static utilities, Handlebars helpers
├─ heritiers-commands.js # Chat commands
├─ heritiers-combat.js # Combat class
├─ models/ # DataModels for each type
│ └─ personnage.mjs, pnj.mjs, arme.mjs, ...
└─ applications/sheets/ # AppV2 Sheets
└─ personnage-sheet.mjs, arme-sheet.mjs, ...
templates/ # 27 Handlebars templates
lang/fr.json # Localization (minimal, type names only)
less/heritiers.less # LESS compilation entry
styles/heritiers.css # Compiled CSS (generated)
packs/ # 11 LevelDB compendium packs
system.json # Manifest
template.json.backup # Data schema reference
```
## Key Classes & Exports
### Actor Classes
- **`HeritiersActor`** extends `Actor`
- Custom creation: auto-adds utility skills for `personnage`
- **PersonnageDataModel**, **PnjDataModel** extend `foundry.abstract.TypeDataModel`
### Item Classes
- **`HeritiersItem`** extends `Item`
- **14 DataModels**: ArmeDataModel, CompetenceDataModel, etc.
### Sheets (AppV2 - Foundry v13+)
- **`HeritiersPersonnageSheet`**, **`HeritiersPnjSheet`** extend ActorSheetV2
- **`HeritiersArmeSheet`**, **`HeritiersCompetenceSheet`**, etc. (14 item sheets)
- All use `HandlebarsApplicationMixin`
- Registered in `heritiers-main.js` with `foundry.documents.collections.[Actors|Items].registerSheet()`
## Adding a New Item Type
1. Add schema to `template.json.backup`
2. Create `modules/models/[typename].mjs` (DataModel)
3. Create `modules/applications/sheets/[typename]-sheet.mjs` (AppV2 Sheet)
4. Create `templates/item-[typename]-sheet.hbs` (Handlebars template)
5. Export from `modules/models/index.mjs`
6. Export from `modules/applications/sheets/_module.mjs`
7. Register in `heritiers-main.js` (+ other registrations)
8. Add to `lang/fr.json` TYPES.Item
9. Optionally: add config constants to `heritiers-config.js`
## Key Constants (heritiers-config.js)
```javascript
HERITIERS_CONFIG = {
caracList, // 8 characteristics
competenceProfil, // 6 profiles + magic
seuilsDifficulte, // 30-level difficulty scale
baseTestPouvoir, // feerie, masque, autre
resistancePouvoir, // physical/psychic active/passive
typePouvoir, // actif, passif, metamorphose
// ... 30+ more enums
}
```
## Handlebars Template Patterns
**File Naming**:
- `actor-sheet.hbs` → Personnage sheet
- `actor-pnj-sheet.hbs` → NPC sheet
- `item-[type]-sheet.hbs` → Item sheet
- `partial-*.hbs` → Reusable components
- `chat-*-result.hbs` → Chat results
- `editor-*.hbs` → Editor components
**Data Access**:
```handlebars
{{actor.name}} <!-- Actor name -->
{{system.caracteristiques.agi.value}} <!-- Nested field -->
{{#each system.items as |item key|}} <!-- Loops -->
{{#if system.magie}} ... {{/if}} <!-- Conditionals -->
{{eq kind "physical"}} <!-- Custom helper -->
```
**Custom Helpers** (60+):
- Comparison: `eq`, `ne`, `lt`, `gt`, `gte`, `lte`
- String: `upper`, `lower`, `upperFirst`
- Array: `includes`, `count`, `notEmpty`
- Math: `mul`, `add`, `sub`, `and`, `or`
## Localization
**Single File**: `lang/fr.json`
```json
{
"TYPES": {
"Actor": { "personnage": "Personnage", "pnj": "PNJ" },
"Item": { "arme": "Arme", "competence": "Compétence", ... }
}
}
```
**Strategy**: Minimal i18n
- Type labels in TYPES
- Field labels in DataModel schema (French initial values)
- Config constants in heritiers-config.js (French)
- Template text hardcoded (French)
**No game.i18n calls** - all text is French-only
## Dice & Combat
- **Initiative**: 1d10 (decimal)
- **Bonus/Malus**: -6 to +6
- **Roll Storage**: `HeritiersUtility.rollDataStore` (socket-aware)
- **Defender Tracking**: `HeritiersUtility.defenderStore`
## Socket Communication
**Channel**: `"system.fvtt-les-heritiers"`
**Handler**: `HeritiersUtility.onSocketMesssage(data)`
**Use Cases**: Roll updates, multi-client sync
## Recent Changes (v13.0.7)
- ✅ AppV2 sheet migration (from legacy v1)
- ✅ DataModels adoption
- ✅ ES6 modules (.mjs) throughout
- ✅ Jan 21: arme, competence, capacitenaturelle, pouvoir, protection updates
- ✅ Rank calculation fixes
## Common Edits
### Add a new characteristic?
1. Update `template.json.backup``caracteristiques`
2. Update `PersonnageDataModel``caracteristiques` SchemaField
3. Update `HERITIERS_CONFIG.caracList`
4. Update templates that reference characteristics
### Add a new compendium pack?
1. Add to `system.json``packs` array
2. Create directory in `packs/[packname]/`
3. Add `.db` file via Foundry UI or scripts
### Add a new roll type?
1. Add dialog template: `templates/roll-dialog-*.hbs`
2. Add result template: `templates/chat-*-result.hbs`
3. Add handler in `heritiers-utility.js` or `heritiers-commands.js`
4. Emit via socket if multiplayer: `game.socket.emit("system.fvtt-les-heritiers", data)`
### Change UI layout?
1. Edit `templates/actor-sheet.hbs` or `item-*.hbs`
2. Update LESS: edit `less/heritiers.less`
3. Run `npm run build` or watch with `npm run watch`
4. CSS reloads automatically via hotReload
## Testing Changes
```bash
npm run watch
# Open FoundryVTT on http://localhost:30000
# Open system's world
# Make edits (files auto-reload)
# Check browser console for errors
# Test in UI
```
## Git Workflow (Development)
```bash
git status
git add -A
git commit -m "Description of change"
git push
# Check recent commits: git log --oneline
```
## Useful Commands
```bash
# Count lines of code
wc -l modules/*.js modules/**/*.mjs
# Search for string in code
grep -r "searchterm" modules/
# List all item types
grep '"type":' packs/*/[file].db | head -20
# Check template syntax
npm run build 2>&1 | grep error
```
## Documentation
- **DEVELOPER_INSTRUCTIONS.md** - Comprehensive guide (this repo)
- **README.md** - Project overview & credits
- **system.json** - Manifest (metadata, packs, compatibility)
- **template.json.backup** - Data schema reference
- [FoundryVTT Docs](https://foundryvtt.com/articles/)
- [Les Héritiers Books](https://titam-france.fr) - Game rules
## Notes
- All code is French (variable names in French, labels in French)
- No English strings in UI
- Single language system (French)
- Heavy use of camelCase following Foundry conventions
- AppV2 is the only supported sheet architecture (v13+)

View File

@@ -550,9 +550,9 @@
} }
.fvtt-les-heritiers .items-list .item { .fvtt-les-heritiers .items-list .item {
height: 30px; height: 24px;
line-height: 24px; line-height: 20px;
padding: 1px 0; padding: 0;
border-bottom: 1px solid #BBB; border-bottom: 1px solid #BBB;
} }
@@ -724,7 +724,7 @@
/* AppV2 Actor Sheets - Tabs with scrolling */ /* AppV2 Actor Sheets - Tabs with scrolling */
.fvtt-les-heritiers.actor .tab[data-tab] { .fvtt-les-heritiers.actor .tab[data-tab] {
display: none; display: none;
padding: 0.5rem; padding: 0.25rem 0.5rem;
overflow-y: auto; overflow-y: auto;
flex: 1 1 auto; flex: 1 1 auto;
} }
@@ -735,7 +735,7 @@
/* Redesigned skill category headers */ /* Redesigned skill category headers */
.fvtt-les-heritiers.actor .sheet-box { .fvtt-les-heritiers.actor .sheet-box {
margin-bottom: 0.5rem; margin-bottom: 0.25rem;
} }
.fvtt-les-heritiers.actor .items-title-text { .fvtt-les-heritiers.actor .items-title-text {
@@ -2336,35 +2336,35 @@
} }
.item-field-label-short { .item-field-label-short {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 4rem; max-width: 4rem;
min-width: 4rem; min-width: 4rem;
} }
.item-field-label-short-num { .item-field-label-short-num {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 2rem; max-width: 2rem;
min-width: 2rem; min-width: 2rem;
} }
.item-field-label-medium { .item-field-label-medium {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 6rem; max-width: 6rem;
min-width: 6rem; min-width: 6rem;
} }
.item-field-label-long { .item-field-label-long {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 8rem; max-width: 8rem;
min-width: 8rem; min-width: 8rem;
} }
.item-field-label-long2 { .item-field-label-long2 {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 14rem; max-width: 14rem;
min-width: 14rem; min-width: 14rem;
@@ -2376,7 +2376,7 @@
} }
.item-field-label-long3 { .item-field-label-long3 {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 20rem; max-width: 20rem;
min-width: 20rem; min-width: 20rem;

View File

@@ -186,7 +186,8 @@ export default class HeritiersActorSheet extends HandlebarsApplicationMixin(foun
const itemType = li?.dataset.itemType const itemType = li?.dataset.itemType
const itemField = event.target.dataset.itemField const itemField = event.target.dataset.itemField
const dataType = event.target.dataset.dtype const dataType = event.target.dataset.dtype
const value = event.target.value // Pour les checkboxes, utiliser checked au lieu de value
const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value
if (itemId && itemType && itemField) { if (itemId && itemType && itemField) {
this.actor.editItemField(itemId, itemType, itemField, dataType, value) this.actor.editItemField(itemId, itemType, itemField, dataType, value)
} }

View File

@@ -11,8 +11,6 @@ export default class HeritiersCompetenceSheet extends HeritiersItemSheet {
actions: { actions: {
addSpecialite: HeritiersCompetenceSheet.#onAddSpecialite, addSpecialite: HeritiersCompetenceSheet.#onAddSpecialite,
deleteSpecialite: HeritiersCompetenceSheet.#onDeleteSpecialite, deleteSpecialite: HeritiersCompetenceSheet.#onDeleteSpecialite,
editSpecialite: HeritiersCompetenceSheet.#onEditSpecialite,
editSpecialiteDescription: HeritiersCompetenceSheet.#onEditSpecialiteDescription,
} }
} }
@@ -23,43 +21,55 @@ export default class HeritiersCompetenceSheet extends HeritiersItemSheet {
}, },
} }
/** @override */
_onRender(context, options) {
super._onRender(context, options)
// Attacher les écouteurs pour l'édition des spécialités
this.element.querySelectorAll('.edit-specialite').forEach(input => {
input.addEventListener('change', async (event) => {
const li = event.target.closest('.specialite-item')
const index = Number.parseInt(li?.dataset.specialiteIndex)
if (index !== undefined && !Number.isNaN(index)) {
const spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].name = event.target.value
await this.item.update({ 'system.specialites': spec })
}
}
})
})
this.element.querySelectorAll('.edit-specialite-description').forEach(textarea => {
textarea.addEventListener('change', async (event) => {
const li = event.target.closest('.specialite-item')
const index = Number.parseInt(li?.dataset.specialiteIndex)
if (index !== undefined && !Number.isNaN(index)) {
const spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].description = event.target.value
await this.item.update({ 'system.specialites': spec })
}
}
})
})
}
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Event Handlers */ /* Event Handlers */
/* -------------------------------------------- */ /* -------------------------------------------- */
static async #onAddSpecialite(event, target) { static async #onAddSpecialite(event, target) {
let spec = foundry.utils.duplicate(this.item.system.specialites) || [] let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.push({ name: "Nouvelle Spécialité", id: foundry.utils.randomID(16), used: false }) spec.push({ name: "Nouvelle Spécialité", description: "", used: false })
await this.item.update({ 'system.specialites': spec }) await this.item.update({ 'system.specialites': spec })
} }
static async #onDeleteSpecialite(event, target) { static async #onDeleteSpecialite(event, target) {
const li = target.closest(".specialite-item") const li = target.closest(".specialite-item")
let index = parseInt(li.dataset.specialiteIndex) let index = Number.parseInt(li.dataset.specialiteIndex)
let spec = foundry.utils.duplicate(this.item.system.specialites) || [] let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.splice(index, 1) spec.splice(index, 1)
await this.item.update({ 'system.specialites': spec }) await this.item.update({ 'system.specialites': spec })
} }
static async #onEditSpecialite(event, target) {
const li = target.closest(".specialite-item")
let index = parseInt(li.dataset.specialiteIndex)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].name = target.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
await this.item.update({ 'system.specialites': spec })
}
}
static async #onEditSpecialiteDescription(event, target) {
const li = target.closest(".specialite-item")
let index = parseInt(li.dataset.specialiteIndex)
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].description = target.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
await this.item.update({ 'system.specialites': spec })
}
}
} }

View File

@@ -1,26 +0,0 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { HeritiersActorSheet } from "./heritiers-actor-sheet.js";
import { HeritiersUtility } from "./heritiers-utility.js";
/* -------------------------------------------- */
export class HeritiersActorPNJSheet extends HeritiersActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-les-heritiers", "sheet", "actor"],
template: "systems/fvtt-les-heritiers/templates/actor-pnj-sheet.html",
width: 780,
height: 840,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: false
})
}
}

View File

@@ -1,277 +0,0 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { HeritiersUtility } from "./heritiers-utility.js";
/* -------------------------------------------- */
export class HeritiersActorSheet extends foundry.appv1.sheets.ActorSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-les-heritiers", "sheet", "actor"],
template: "systems/fvtt-les-heritiers/templates/actor-sheet.html",
width: 780,
height: 840,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: false
})
}
/* -------------------------------------------- */
async getData() {
const objectData = foundry.utils.duplicate(this.object)
let formData = {
title: this.title,
id: objectData.id,
type: objectData.type,
img: objectData.img,
name: objectData.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
system: objectData.system,
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
limited: this.object.limited,
skills: this.actor.getSkills(),
utileSkillsMental: this.actor.organizeUtileSkills("mental"),
utileSkillsPhysical: this.actor.organizeUtileSkills("physical"),
competencesMagie: HeritiersUtility.getCompetencesMagie(),
futileSkills: this.actor.organizeFutileSkills(),
contacts: this.actor.organizeContacts(),
armes: foundry.utils.duplicate(this.actor.getWeapons()),
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
pouvoirs: foundry.utils.duplicate(this.actor.getPouvoirs()),
fee: foundry.utils.duplicate(this.actor.getFee() || {}),
protections: foundry.utils.duplicate(this.actor.getArmors()),
combat: this.actor.getCombatValues(),
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
avantages: foundry.utils.duplicate(this.actor.getAvantages()),
atouts: foundry.utils.duplicate(this.actor.getAtouts()),
capacites: foundry.utils.duplicate(this.actor.getCapacites()),
desavantages: foundry.utils.duplicate(this.actor.getDesavantages()),
profils: foundry.utils.duplicate(this.actor.getProfils()),
pvMalus: this.actor.getPvMalus(),
heritage: game.settings.get("fvtt-les-heritiers", "heritiers-heritage"),
initiative: this.actor.getFlag("world", "last-initiative") || -1,
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, { async: true }),
revesetranges: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.revesetranges, { async: true }),
secretsdecouverts: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.secretsdecouverts, { async: true }),
questions: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.questions, { async: true }),
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, { async: true }),
playernotes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.playernotes, { async: true }),
magieList: this.actor.prepareMagie(),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
config: game.system.lesheritiers.config,
isGM: game.user.isGM,
isPNJ: (this.actor.type == "pnj")
}
this.formData = formData;
console.log("PC : ", formData, this.object);
return formData;
}
/* -------------------------------------------- */
dialogRecupUsage() {
new Dialog({
title: "Récupération des Points d'Usage",
content: "<p>Combien de Points d'Usage souhaitez-vous récupérer ?</p>",
buttons: {
one: {
icon: '<i class="fas fa-check"></i>',
label: "1 Point",
callback: () => {
this.actor.recupUsage(1)
}
},
two: {
icon: '<i class="fas fa-check"></i>',
label: "2 Points",
callback: () => {
this.actor.recupUsage(2)
}
},
four: {
icon: '<i class="fas fa-check"></i>',
label: "4 Points",
callback: () => {
this.actor.recupUsage(4)
}
},
all: {
icon: '<i class="fas fa-check"></i>',
label: "Tous les Points",
callback: () => {
this.actor.recupUsage(100)
}
}
}
}).render(true)
}
/* -------------------------------------------- */
/** @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");
HeritiersUtility.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('[data-action="quantityIncrease"]').click(event => {
event.preventDefault()
event.stopPropagation()
const li = $(event.currentTarget).parents(".item")
this.actor.incDecQuantity(li.data("item-id"), 1);
})
html.find('[data-action="quantityDecrease"]').click(event => {
event.preventDefault()
event.stopPropagation()
const li = $(event.currentTarget).parents(".item")
this.actor.incDecQuantity(li.data("item-id"), -1);
})
html.find('.roll-initiative').click((event) => {
this.actor.rollInitiative()
})
html.find('.roll-carac').click((event) => {
const key = $(event.currentTarget).data("key")
this.actor.rollCarac(key, false)
})
html.find('.roll-rang').click((event) => {
const key = $(event.currentTarget).data("rang-key")
this.actor.rollRang(key, false)
})
html.find('.roll-root-competence').click((event) => {
const compKey = $(event.currentTarget).data("attr-key")
this.actor.rollRootCompetence(compKey)
})
html.find('.roll-competence').click((event) => {
const li = $(event.currentTarget).parents(".item")
let compId = li.data("item-id")
this.actor.rollCompetence(compId)
})
html.find('.roll-sort').click((event) => {
const li = $(event.currentTarget).parents(".item")
let sortId = li.data("item-id")
this.actor.rollSort(sortId)
})
html.find('.roll-attaque-arme').click((event) => {
const li = $(event.currentTarget).parents(".item")
let armeId = li.data("item-id")
this.actor.rollAttaqueArme(armeId)
})
html.find('.roll-attaque-brutale-arme').click((event) => {
const li = $(event.currentTarget).parents(".item")
let armeId = li.data("item-id")
this.actor.rollAttaqueBrutaleArme(armeId)
})
html.find('.roll-attaque-charge-arme').click((event) => {
const li = $(event.currentTarget).parents(".item")
let armeId = li.data("item-id")
this.actor.rollAttaqueChargeArme(armeId)
})
html.find('.roll-assomer-arme').click((event) => {
const li = $(event.currentTarget).parents(".item")
let armeId = li.data("item-id")
this.actor.rollAssomerArme(armeId)
})
html.find('.roll-pouvoir').click((event) => {
const li = $(event.currentTarget).parents(".item")
let pouvoirId = li.data("item-id")
this.actor.rollPouvoir(pouvoirId)
})
html.find('.dialog-recup-usage').click((event) => {
this.dialogRecupUsage()
})
html.find('.item-add').click((event) => {
const itemType = $(event.currentTarget).data("type")
if (itemType == "sort") {
// Get data-sort-competence
let sortCompetence = $(event.currentTarget).data("sort-competence");
if (sortCompetence) {
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType} de ${sortCompetence}`, type: itemType, system: { competence: sortCompetence } }], { renderSheet: true })
return
}
}
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 HeritiersUtility.searchItem(item)
}
super._onDropItem(event, dragData)
}*/
}

View File

@@ -277,7 +277,7 @@ export class HeritiersActor extends Actor {
let comp = {} let comp = {}
for (let key in game.system.lesheritiers.config.competenceProfil) { for (let key in game.system.lesheritiers.config.competenceProfil) {
if (game.system.lesheritiers.config.competenceProfil[key].kind == kind) if (game.system.lesheritiers.config.competenceProfil[key].kind == kind)
comp[key] = { skills: [], niveau: this.system.competences[key].niveau } comp[key] = { skills: [], niveau: this.system.competences[key].niveau, rang: this.system.competences[key].rang }
} }
for (let item of this.items) { for (let item of this.items) {
if (item.type == "competence") { if (item.type == "competence") {
@@ -394,6 +394,34 @@ export class HeritiersActor extends Actor {
} }
if (this.type == 'personnage') { if (this.type == 'personnage') {
// Calculate rang for each competence profile
let competencesRangs = {
aventurier: 0,
combattant: 0,
erudit: 0,
gentleman: 0,
roublard: 0,
savant: 0
}
// Sum up niveau for each profil
for (let item of this.items) {
if (item.type == "competence" && item.system.profil && item.system.categorie == "utile") {
let profil = item.system.profil.toLowerCase()
if (competencesRangs.hasOwnProperty(profil)) {
competencesRangs[profil] += item.system.niveau
}
}
}
// Calculate rang (total / 4, rounded down) for each competence
for (let profil in competencesRangs) {
let total = competencesRangs[profil]
let rang = Math.floor(total / 4)
if (this.system.competences[profil]) {
this.system.competences[profil].rang = rang
}
}
} }
super.prepareDerivedData() super.prepareDerivedData()
@@ -431,6 +459,8 @@ export class HeritiersActor extends Actor {
if (dataType) { if (dataType) {
if (dataType.toLowerCase() == "number") { if (dataType.toLowerCase() == "number") {
value = Number(value) value = Number(value)
} else if (dataType.toLowerCase() == "boolean") {
value = Boolean(value)
} else { } else {
value = String(value) value = String(value)
} }
@@ -650,6 +680,14 @@ export class HeritiersActor extends Actor {
this.update({ 'system.rang.tricherie': tricherie }) this.update({ 'system.rang.tricherie': tricherie })
return true return true
} }
/* -------------------------------------------- */
/* -------------------------------------------- */
// Returns the combattant root competence formatted for rollData, used for PNJ attacks
_getCombattantCompetence() {
const combattant = this.system.competences.combattant
return { name: combattant.label, system: { niveau: combattant.niveau } }
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getPireCompetence(compName1, compName2) { getPireCompetence(compName1, compName2) {
let comp1 = this.items.find(it => it.name == compName1) let comp1 = this.items.find(it => it.name == compName1)
@@ -826,13 +864,15 @@ export class HeritiersActor extends Actor {
if (arme) { if (arme) {
arme = foundry.utils.duplicate(arme) arme = foundry.utils.duplicate(arme)
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme) arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
let competenceName = "Tir" let key = arme.system.isMelee ? "agi" : "prec"
let key = "prec" let rollData
if (arme.system.isMelee) { if (this.type == 'pnj') {
competenceName = "Mêlée" rollData = this.getCommonRollData()
key = "agi" rollData.competence = this._getCombattantCompetence()
} else {
let competenceName = arme.system.isMelee ? "Mêlée" : "Tir"
rollData = this.getCommonRollData(undefined, competenceName)
} }
let rollData = this.getCommonRollData(undefined, competenceName)
rollData.carac = this.system.caracteristiques[key] rollData.carac = this.system.caracteristiques[key]
rollData.caracKey = key rollData.caracKey = key
rollData.arme = arme rollData.arme = arme
@@ -852,9 +892,14 @@ export class HeritiersActor extends Actor {
let arme = this.items.get(armeId) let arme = this.items.get(armeId)
if (arme) { if (arme) {
let key = "for" let key = "for"
let competenceName = "Mêlée"
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme) arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
let rollData = this.getCommonRollData(undefined, competenceName) let rollData
if (this.type == 'pnj') {
rollData = this.getCommonRollData()
rollData.competence = this._getCombattantCompetence()
} else {
rollData = this.getCommonRollData(undefined, "Mêlée")
}
rollData.carac = this.system.caracteristiques[key] rollData.carac = this.system.caracteristiques[key]
rollData.caracKey = key rollData.caracKey = key
rollData.arme = foundry.utils.duplicate(arme) rollData.arme = foundry.utils.duplicate(arme)
@@ -871,8 +916,14 @@ export class HeritiersActor extends Actor {
if (arme) { if (arme) {
let key = "agi" let key = "agi"
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme) arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
let rollData
if (this.type == 'pnj') {
rollData = this.getCommonRollData()
rollData.competence = this._getCombattantCompetence()
} else {
let pireCompetence = this.getPireCompetence("Mêlée", "Mouvement") let pireCompetence = this.getPireCompetence("Mêlée", "Mouvement")
let rollData = this.getCommonRollData(undefined, pireCompetence.name) rollData = this.getCommonRollData(undefined, pireCompetence.name)
}
rollData.carac = this.system.caracteristiques[key] rollData.carac = this.system.caracteristiques[key]
rollData.caracKey = key rollData.caracKey = key
rollData.arme = foundry.utils.duplicate(arme) rollData.arme = foundry.utils.duplicate(arme)
@@ -887,9 +938,13 @@ export class HeritiersActor extends Actor {
async rollAssomerArme(armeId) { async rollAssomerArme(armeId) {
let arme = this.items.get(armeId) let arme = this.items.get(armeId)
if (arme) { if (arme) {
let competenceName = "Mêlée" let rollData
//arme.system.isMelee = HeritiersUtility.isArmeMelee(arme) if (this.type == 'pnj') {
let rollData = this.getCommonRollData(undefined, competenceName) rollData = this.getCommonRollData()
rollData.competence = this._getCombattantCompetence()
} else {
rollData = this.getCommonRollData(undefined, "Mêlée")
}
rollData.carac = this.system.caracteristiques["agi"] rollData.carac = this.system.caracteristiques["agi"]
rollData.caracKey = "agi" rollData.caracKey = "agi"
rollData.arme = foundry.utils.duplicate(arme) rollData.arme = foundry.utils.duplicate(arme)

View File

@@ -1,217 +0,0 @@
import { HeritiersUtility } from "./heritiers-utility.js";
/**
* Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet}
*/
export class HeritiersItemSheet extends foundry.appv1.sheets.ItemSheet {
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-les-heritiers", "sheet", "item"],
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",
system: objectData.system,
limited: this.object.limited,
options: this.options,
owner: this.document.isOwner,
config: game.system.lesheritiers.config,
isArmeMelee: HeritiersUtility.isArmeMelee(this.object),
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
mr: (this.object.type == 'specialisation'),
isGM: game.user.isGM,
usageMax: -1
}
// Items specific data
if (this.object.type == 'pouvoir' && this.document.isOwner && this.actor) {
formData.usageMax = this.actor.getPouvoirUsageMax(this.object)
if (this.object.system.pointsusagecourant == -1) {
this.object.system.pointsusagecourant = formData.usageMax
}
}
if (this.object.type == 'sort') {
formData.competencesMagie = HeritiersUtility.getCompetencesMagie()
}
//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(HeritiersUtility.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-Heritiers-rpg/templates/post-item.html', chatData).then(html => {
let chatOptions = HeritiersUtility.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('#add-specialite').click(ev => {
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.push({ name: "Nouvelle Spécialité", id: foundry.utils.randomID(16), used: false })
this.item.update({ 'system.specialites': spec })
})
html.find('.delete-specialite').click(ev => {
const li = $(ev.currentTarget).parents(".specialite-item")
let index = li.data("specialite-index")
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
spec.splice(index, 1)
this.item.update({ 'system.specialites': spec })
})
html.find('.edit-specialite').change(ev => {
const li = $(ev.currentTarget).parents(".specialite-item")
let index = li.data("specialite-index")
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].name = ev.currentTarget.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
this.item.update({ 'system.specialites': spec })
}
})
html.find('.edit-specialite-description').change(ev => {
const li = $(ev.currentTarget).parents(".specialite-item")
let index = li.data("specialite-index")
let spec = foundry.utils.duplicate(this.item.system.specialites) || []
if (spec[index]) {
spec[index].description = ev.currentTarget.value
spec[index].id = spec[index].id || foundry.utils.randomID(16)
this.item.update({ 'system.specialites': spec })
}
})
html.find('#add-automation').click(ev => {
let autom = foundry.utils.duplicate(this.object.system.automations)
autom.push({ eventtype: "on-drop", name: "Automatisation 1", competence: "", minLevel: 0, id: foundry.utils.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 || foundry.utils.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-les-heritiers/templates/item-${type}-sheet.hbs`;
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
return this.object.update(formData);
}
}

View File

@@ -1,146 +0,0 @@
import { HeritiersUtility } from "./heritiers-utility.js";
export class HeritiersRollDialog extends Dialog {
/* -------------------------------------------- */
static async create(actor, rollData) {
let options = { classes: ["HeritiersDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-les-heritiers/templates/roll-dialog-generic.html', rollData);
return new HeritiersRollDialog(actor, rollData, html, options);
}
/* -------------------------------------------- */
constructor(actor, rollData, html, options, close = undefined) {
let buttons = {
rolld8: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d8",
callback: () => { this.roll("d8") }
}
}
let enableD10 = false
let enableD12 = false
if (rollData.mode == "pouvoir" || rollData.competence?.system.niveau > 0) {
enableD10 = true
}
if (rollData.mode == "pouvoir" || rollData.competence?.system.niveau > 1) {
enableD12 = true
}
if (enableD10) {
buttons.rolld10 = {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d10",
callback: () => { this.roll("d10") }
}
}
if (enableD12) {
buttons.rolld12 = {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d12",
callback: () => { this.roll("d12") }
}
}
if (rollData.tricherie) {
buttons["rollTricherie"] = {
icon: '<i class="fas fa-check"></i>',
label: "Avec 1 Tricherie",
callback: () => { this.roll("tricherie") }
}
}
if (rollData.heritage) {
buttons["rollHeritage"] = {
icon: '<i class="fas fa-check"></i>',
label: "Avec 1 Héritage",
callback: () => { this.roll("heritage") }
}
}
buttons["Cancel"] = {
icon: '<i class="fas fa-times"></i>',
label: "Annuler",
callback: () => { this.close() }
}
let conf = {
title: "Test de Capacité",
content: html,
buttons: buttons,
close: close
}
// Overwrite in case of carac only -> 1d8
if (rollData.mode == "carac") {
conf.buttons = {
rolld8: {
icon: '<i class="fas fa-check"></i>',
label: "Lancer 1d8",
callback: () => { this.roll("d8") }
},
cancel: {
icon: '<i class="fas fa-times"></i>',
label: "Annuler",
callback: () => { this.close() }
}
}
}
super(conf, options);
this.actor = actor
this.rollData = rollData
}
/* -------------------------------------------- */
roll(dice) {
if (dice == "heritage") {
this.rollData.useHeritage = true
}
else {
if (dice == "tricherie") {
this.rollData.useTricherie = true
} else {
this.rollData.mainDice = dice
}
}
HeritiersUtility.rollHeritiers(this.rollData)
}
/* -------------------------------------------- */
activateListeners(html) {
super.activateListeners(html);
function onLoad() {
}
$(function () { onLoad(); });
html.find('#sdValue').change(async (event) => {
this.rollData.sdValue = Number(event.currentTarget.value)
})
html.find('#caracKey').change(async (event) => {
//console.log("caracKey", event.currentTarget.value)
this.rollData.caracKey = String(event.currentTarget.value)
})
html.find('#bonus-malus-context').change((event) => {
this.rollData.bonusMalusContext = Number(event.currentTarget.value)
})
html.find('#bonus-attaque-plusieurs').change((event) => {
this.rollData.bonusAttaquePlusieurs = Number(event.currentTarget.value)
})
html.find('#useSpecialite').change((event) => {
this.rollData.useSpecialite = event.currentTarget.checked
})
html.find('#pouvoirPointsUsage').change((event) => {
this.rollData.pouvoirPointsUsage = Number(event.currentTarget.value)
})
html.find('#attaqueDos').change((event) => {
this.rollData.attaqueDos = event.currentTarget.checked
})
html.find('#bonus-attaque-seconde-arme').change((event) => {
this.rollData.secondeArme = String(event.currentTarget.value)
})
html.find('#attaque-cible').change((event) => {
this.rollData.attaqueCible = String(event.currentTarget.value)
})
}
}

View File

@@ -200,7 +200,7 @@ export class HeritiersUtility {
static async preloadHandlebarsTemplates() { static async preloadHandlebarsTemplates() {
const templatePaths = [ const templatePaths = [
'systems/fvtt-les-heritiers/templates/editor-notes-gm.html', 'systems/fvtt-les-heritiers/templates/editor-notes-gm.hbs',
'systems/fvtt-les-heritiers/templates/partial-item-header.hbs', 'systems/fvtt-les-heritiers/templates/partial-item-header.hbs',
'systems/fvtt-les-heritiers/templates/partial-item-description.hbs', 'systems/fvtt-les-heritiers/templates/partial-item-description.hbs',
'systems/fvtt-les-heritiers/templates/partial-item-nav.hbs', 'systems/fvtt-les-heritiers/templates/partial-item-nav.hbs',

View File

@@ -10,8 +10,8 @@ export default class ArmeDataModel extends foundry.abstract.TypeDataModel {
quantite: new fields.NumberField({ initial: 0, integer: true }), quantite: new fields.NumberField({ initial: 0, integer: true }),
prix: new fields.NumberField({ initial: 0, integer: true }), prix: new fields.NumberField({ initial: 0, integer: true }),
equipped: new fields.BooleanField({ initial: false }), equipped: new fields.BooleanField({ initial: false }),
categorie: new fields.StringField({ initial: "" }), categorie: new fields.StringField({ initial: "trait" }),
armetype: new fields.StringField({ initial: "" }), armetype: new fields.StringField({ initial: "trait" }),
degats: new fields.NumberField({ initial: 0, integer: true }), degats: new fields.NumberField({ initial: 0, integer: true }),
precision: new fields.NumberField({ initial: 0, integer: true }), precision: new fields.NumberField({ initial: 0, integer: true }),
cadence: new fields.StringField({ initial: "" }), cadence: new fields.StringField({ initial: "" }),
@@ -19,8 +19,8 @@ export default class ArmeDataModel extends foundry.abstract.TypeDataModel {
magasin: new fields.NumberField({ initial: 0, integer: true }), magasin: new fields.NumberField({ initial: 0, integer: true }),
charge: new fields.NumberField({ initial: 0, integer: true }), charge: new fields.NumberField({ initial: 0, integer: true }),
portee: new fields.StringField({ initial: "" }), portee: new fields.StringField({ initial: "" }),
legalite: new fields.StringField({ initial: "" }), legalite: new fields.StringField({ initial: "libre" }),
dissimulation: new fields.StringField({ initial: "" }), dissimulation: new fields.StringField({ initial: "tresfacile" }),
zone: new fields.NumberField({ initial: 0, integer: true }), zone: new fields.NumberField({ initial: 0, integer: true }),
temps: new fields.StringField({ initial: "" }), temps: new fields.StringField({ initial: "" }),
allumage: new fields.StringField({ initial: "" }), allumage: new fields.StringField({ initial: "" }),

View File

@@ -5,13 +5,13 @@ export default class CapaciteNaturelleDataModel extends foundry.abstract.TypeDat
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
return { return {
pouvoirtype: new fields.StringField({ initial: "" }), pouvoirtype: new fields.StringField({ initial: "actif" }),
activation: new fields.StringField({ initial: "" }), activation: new fields.StringField({ initial: "" }),
cibles: new fields.StringField({ initial: "" }), cibles: new fields.StringField({ initial: "" }),
effet: new fields.StringField({ initial: "" }), effet: new fields.StringField({ initial: "" }),
duree: new fields.StringField({ initial: "" }), duree: new fields.StringField({ initial: "" }),
portee: new fields.StringField({ initial: "" }), portee: new fields.StringField({ initial: "" }),
resistance: new fields.StringField({ initial: "" }), resistance: new fields.StringField({ initial: "aucune" }),
resistanceautre: new fields.StringField({ initial: "" }), resistanceautre: new fields.StringField({ initial: "" }),
isvirulence: new fields.BooleanField({ initial: false }), isvirulence: new fields.BooleanField({ initial: false }),
virulence: new fields.StringField({ initial: "" }), virulence: new fields.StringField({ initial: "" }),

View File

@@ -5,8 +5,8 @@ export default class CompetenceDataModel extends foundry.abstract.TypeDataModel
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
return { return {
categorie: new fields.StringField({ initial: "" }), categorie: new fields.StringField({ initial: "utile" }),
profil: new fields.StringField({ initial: "" }), profil: new fields.StringField({ initial: "aventurier" }),
niveau: new fields.NumberField({ initial: 0, integer: true }), niveau: new fields.NumberField({ initial: 0, integer: true }),
nomniveau: new fields.SchemaField({ nomniveau: new fields.SchemaField({
1: new fields.StringField({ initial: "" }), 1: new fields.StringField({ initial: "" }),

View File

@@ -5,7 +5,7 @@ export default class FeeDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
return { return {
feetype: new fields.NumberField({ initial: 0, integer: true }), feetype: new fields.StringField({ initial: "traditionnelle" }),
avantages: new fields.StringField({ initial: "" }), avantages: new fields.StringField({ initial: "" }),
desavantages: new fields.StringField({ initial: "" }), desavantages: new fields.StringField({ initial: "" }),
pouvoirsfeeriquesmasque: new fields.StringField({ initial: "" }), pouvoirsfeeriquesmasque: new fields.StringField({ initial: "" }),

View File

@@ -11,7 +11,7 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
activite: new fields.StringField({ initial: "" }), activite: new fields.StringField({ initial: "" }),
nomhumain: new fields.StringField({ initial: "" }), nomhumain: new fields.StringField({ initial: "" }),
activites: new fields.StringField({ initial: "" }), activites: new fields.StringField({ initial: "" }),
fortune: new fields.NumberField({ initial: 0, integer: true }), fortune: new fields.StringField({ initial: "0" }),
traitscaracteres: new fields.StringField({ initial: "" }), traitscaracteres: new fields.StringField({ initial: "" }),
tailledemasquee: new fields.StringField({ initial: "" }), tailledemasquee: new fields.StringField({ initial: "" }),
taillemasquee: new fields.StringField({ initial: "" }), taillemasquee: new fields.StringField({ initial: "" }),
@@ -23,7 +23,7 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
langues: new fields.StringField({ initial: "" }), langues: new fields.StringField({ initial: "" }),
factionfeerique: new fields.StringField({ initial: "" }), factionfeerique: new fields.StringField({ initial: "" }),
typetaille: new fields.StringField({ initial: "" }), typetaille: new fields.StringField({ initial: "" }),
age: new fields.NumberField({ initial: 0, integer: true }), age: new fields.StringField({ initial: "0" }),
poids: new fields.StringField({ initial: "" }), poids: new fields.StringField({ initial: "" }),
taille: new fields.StringField({ initial: "" }), taille: new fields.StringField({ initial: "" }),
cheveux: new fields.StringField({ initial: "" }), cheveux: new fields.StringField({ initial: "" }),
@@ -135,7 +135,7 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
}), }),
heritage: new fields.SchemaField({ heritage: new fields.SchemaField({
label: new fields.StringField({ initial: "Héritage" }), label: new fields.StringField({ initial: "Héritage" }),
value: new fields.NumberField({ initial: 0, integer: true }), value: new fields.StringField({ initial: "0" }),
max: new fields.NumberField({ initial: 0, integer: true }), max: new fields.NumberField({ initial: 0, integer: true }),
scenarios: new fields.NumberField({ initial: 0, integer: true }) scenarios: new fields.NumberField({ initial: 0, integer: true })
}) })
@@ -190,8 +190,8 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
}) })
}), }),
experience: new fields.SchemaField({ experience: new fields.SchemaField({
value: new fields.NumberField({ initial: 0, integer: true }), value: new fields.StringField({ initial: "0" }),
pourtricher: new fields.NumberField({ initial: 0, integer: true }) pourtricher: new fields.StringField({ initial: "0" })
}), }),
combat: new fields.SchemaField({ combat: new fields.SchemaField({
esquive: new fields.SchemaField({ esquive: new fields.SchemaField({

View File

@@ -5,9 +5,9 @@ export default class PouvoirDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
const fields = foundry.data.fields; const fields = foundry.data.fields;
return { return {
pouvoirtype: new fields.StringField({ initial: "" }), pouvoirtype: new fields.StringField({ initial: "actif" }),
masquetype: new fields.StringField({ initial: "" }), masquetype: new fields.StringField({ initial: "masque" }),
niveau: new fields.StringField({ initial: "" }), niveau: new fields.StringField({ initial: "normal" }),
activation: new fields.StringField({ initial: "" }), activation: new fields.StringField({ initial: "" }),
istest: new fields.BooleanField({ initial: false }), istest: new fields.BooleanField({ initial: false }),
feeriemasque: new fields.StringField({ initial: "feerie" }), feeriemasque: new fields.StringField({ initial: "feerie" }),
@@ -18,7 +18,7 @@ export default class PouvoirDataModel extends foundry.abstract.TypeDataModel {
cibles: new fields.StringField({ initial: "" }), cibles: new fields.StringField({ initial: "" }),
effet: new fields.StringField({ initial: "" }), effet: new fields.StringField({ initial: "" }),
portee: new fields.StringField({ initial: "" }), portee: new fields.StringField({ initial: "" }),
resistance: new fields.StringField({ initial: "" }), resistance: new fields.StringField({ initial: "aucune" }),
resistanceautre: new fields.StringField({ initial: "" }), resistanceautre: new fields.StringField({ initial: "" }),
pointsusagecourant: new fields.NumberField({ initial: -1, integer: true }), pointsusagecourant: new fields.NumberField({ initial: -1, integer: true }),
isvirulence: new fields.BooleanField({ initial: false }), isvirulence: new fields.BooleanField({ initial: false }),

View File

@@ -11,7 +11,7 @@ export default class ProtectionDataModel extends foundry.abstract.TypeDataModel
prix: new fields.NumberField({ initial: 0, integer: true }), prix: new fields.NumberField({ initial: 0, integer: true }),
equipped: new fields.BooleanField({ initial: false }), equipped: new fields.BooleanField({ initial: false }),
points: new fields.NumberField({ initial: 0, integer: true }), points: new fields.NumberField({ initial: 0, integer: true }),
protectiontype: new fields.StringField({ initial: "" }), protectiontype: new fields.StringField({ initial: "balle" }),
effetsecondaire: new fields.StringField({ initial: "" }), effetsecondaire: new fields.StringField({ initial: "" }),
malusagilite: new fields.NumberField({ initial: 0, integer: true }), malusagilite: new fields.NumberField({ initial: 0, integer: true }),
dissimulation: new fields.StringField({ initial: "" }) dissimulation: new fields.StringField({ initial: "" })

View File

@@ -1 +1 @@
MANIFEST-000308 MANIFEST-000336

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.499762 7fd462ffd6c0 Recovering log #306 2026/01/21-10:53:45.991086 7f152a3fc6c0 Recovering log #334
2026/01/10-17:13:21.510831 7fd462ffd6c0 Delete type=3 #304 2026/01/21-10:53:46.000764 7f152a3fc6c0 Delete type=3 #332
2026/01/10-17:13:21.511011 7fd462ffd6c0 Delete type=0 #306 2026/01/21-10:53:46.000821 7f152a3fc6c0 Delete type=0 #334
2026/01/10-22:35:10.944218 7fd4627fc6c0 Level-0 table #311: started 2026/01/21-10:54:50.937646 7f1529bfb6c0 Level-0 table #339: started
2026/01/10-22:35:10.944249 7fd4627fc6c0 Level-0 table #311: 0 bytes OK 2026/01/21-10:54:50.937686 7f1529bfb6c0 Level-0 table #339: 0 bytes OK
2026/01/10-22:35:10.950116 7fd4627fc6c0 Delete type=0 #309 2026/01/21-10:54:50.968467 7f1529bfb6c0 Delete type=0 #337
2026/01/10-22:35:10.963623 7fd4627fc6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044557 7f1529bfb6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.963688 7fd4627fc6c0 Manual compaction at level-1 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044593 7f1529bfb6c0 Manual compaction at level-1 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.969467 7fd4637fe6c0 Recovering log #302 2026/01/21-10:43:50.240377 7f152b3fe6c0 Recovering log #330
2026/01/10-16:36:53.980503 7fd4637fe6c0 Delete type=3 #300 2026/01/21-10:43:50.250901 7f152b3fe6c0 Delete type=3 #328
2026/01/10-16:36:53.980609 7fd4637fe6c0 Delete type=0 #302 2026/01/21-10:43:50.250970 7f152b3fe6c0 Delete type=0 #330
2026/01/10-17:13:09.472065 7fd4627fc6c0 Level-0 table #307: started 2026/01/21-10:46:58.350230 7f1529bfb6c0 Level-0 table #335: started
2026/01/10-17:13:09.472120 7fd4627fc6c0 Level-0 table #307: 0 bytes OK 2026/01/21-10:46:58.350259 7f1529bfb6c0 Level-0 table #335: 0 bytes OK
2026/01/10-17:13:09.478554 7fd4627fc6c0 Delete type=0 #305 2026/01/21-10:46:58.357573 7f1529bfb6c0 Delete type=0 #333
2026/01/10-17:13:09.492266 7fd4627fc6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364032 7f1529bfb6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.492326 7fd4627fc6c0 Manual compaction at level-1 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364070 7f1529bfb6c0 Manual compaction at level-1 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000308 MANIFEST-000336

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.528896 7fd478fff6c0 Recovering log #306 2026/01/21-10:53:46.017018 7f152b3fe6c0 Recovering log #334
2026/01/10-17:13:21.539812 7fd478fff6c0 Delete type=3 #304 2026/01/21-10:53:46.027168 7f152b3fe6c0 Delete type=3 #332
2026/01/10-17:13:21.539902 7fd478fff6c0 Delete type=0 #306 2026/01/21-10:53:46.027239 7f152b3fe6c0 Delete type=0 #334
2026/01/10-22:35:10.963778 7fd4627fc6c0 Level-0 table #311: started 2026/01/21-10:54:51.075256 7f1529bfb6c0 Level-0 table #339: started
2026/01/10-22:35:10.963855 7fd4627fc6c0 Level-0 table #311: 0 bytes OK 2026/01/21-10:54:51.075290 7f1529bfb6c0 Level-0 table #339: 0 bytes OK
2026/01/10-22:35:10.969945 7fd4627fc6c0 Delete type=0 #309 2026/01/21-10:54:51.119572 7f1529bfb6c0 Delete type=0 #337
2026/01/10-22:35:10.989919 7fd4627fc6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190089 7f1529bfb6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.989967 7fd4627fc6c0 Manual compaction at level-1 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190275 7f1529bfb6c0 Manual compaction at level-1 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:54.002327 7fd462ffd6c0 Recovering log #302 2026/01/21-10:43:50.267294 7f152abfd6c0 Recovering log #330
2026/01/10-16:36:54.012517 7fd462ffd6c0 Delete type=3 #300 2026/01/21-10:43:50.276983 7f152abfd6c0 Delete type=3 #328
2026/01/10-16:36:54.012642 7fd462ffd6c0 Delete type=0 #302 2026/01/21-10:43:50.277035 7f152abfd6c0 Delete type=0 #330
2026/01/10-17:13:09.492537 7fd4627fc6c0 Level-0 table #307: started 2026/01/21-10:46:58.364131 7f1529bfb6c0 Level-0 table #335: started
2026/01/10-17:13:09.492568 7fd4627fc6c0 Level-0 table #307: 0 bytes OK 2026/01/21-10:46:58.364205 7f1529bfb6c0 Level-0 table #335: 0 bytes OK
2026/01/10-17:13:09.498555 7fd4627fc6c0 Delete type=0 #305 2026/01/21-10:46:58.370782 7f1529bfb6c0 Delete type=0 #333
2026/01/10-17:13:09.518553 7fd4627fc6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391376 7f1529bfb6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.518642 7fd4627fc6c0 Manual compaction at level-1 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391426 7f1529bfb6c0 Manual compaction at level-1 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000308 MANIFEST-000336

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.469395 7fd4637fe6c0 Recovering log #306 2026/01/21-10:53:45.963781 7f152abfd6c0 Recovering log #334
2026/01/10-17:13:21.479611 7fd4637fe6c0 Delete type=3 #304 2026/01/21-10:53:45.974011 7f152abfd6c0 Delete type=3 #332
2026/01/10-17:13:21.479687 7fd4637fe6c0 Delete type=0 #306 2026/01/21-10:53:45.974068 7f152abfd6c0 Delete type=0 #334
2026/01/10-22:35:10.919012 7fd4627fc6c0 Level-0 table #311: started 2026/01/21-10:54:50.901280 7f1529bfb6c0 Level-0 table #339: started
2026/01/10-22:35:10.919040 7fd4627fc6c0 Level-0 table #311: 0 bytes OK 2026/01/21-10:54:50.901351 7f1529bfb6c0 Level-0 table #339: 0 bytes OK
2026/01/10-22:35:10.924958 7fd4627fc6c0 Delete type=0 #309 2026/01/21-10:54:50.937470 7f1529bfb6c0 Delete type=0 #337
2026/01/10-22:35:10.937993 7fd4627fc6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044539 7f1529bfb6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.938027 7fd4627fc6c0 Manual compaction at level-1 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044584 7f1529bfb6c0 Manual compaction at level-1 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.937580 7fd463fff6c0 Recovering log #302 2026/01/21-10:43:50.215403 7f152a3fc6c0 Recovering log #330
2026/01/10-16:36:53.948656 7fd463fff6c0 Delete type=3 #300 2026/01/21-10:43:50.225230 7f152a3fc6c0 Delete type=3 #328
2026/01/10-16:36:53.948746 7fd463fff6c0 Delete type=0 #302 2026/01/21-10:43:50.225283 7f152a3fc6c0 Delete type=0 #330
2026/01/10-17:13:09.478691 7fd4627fc6c0 Level-0 table #307: started 2026/01/21-10:46:58.336769 7f1529bfb6c0 Level-0 table #335: started
2026/01/10-17:13:09.478722 7fd4627fc6c0 Level-0 table #307: 0 bytes OK 2026/01/21-10:46:58.336818 7f1529bfb6c0 Level-0 table #335: 0 bytes OK
2026/01/10-17:13:09.485719 7fd4627fc6c0 Delete type=0 #305 2026/01/21-10:46:58.343699 7f1529bfb6c0 Delete type=0 #333
2026/01/10-17:13:09.492280 7fd4627fc6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364008 7f1529bfb6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.492336 7fd4627fc6c0 Manual compaction at level-1 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364042 7f1529bfb6c0 Manual compaction at level-1 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000308 MANIFEST-000336

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.429229 7fd463fff6c0 Recovering log #306 2026/01/21-10:53:45.925373 7f152bbff6c0 Recovering log #334
2026/01/10-17:13:21.439355 7fd463fff6c0 Delete type=3 #304 2026/01/21-10:53:45.935373 7f152bbff6c0 Delete type=3 #332
2026/01/10-17:13:21.439437 7fd463fff6c0 Delete type=0 #306 2026/01/21-10:53:45.935424 7f152bbff6c0 Delete type=0 #334
2026/01/10-22:35:10.925075 7fd4627fc6c0 Level-0 table #311: started 2026/01/21-10:54:50.778002 7f1529bfb6c0 Level-0 table #339: started
2026/01/10-22:35:10.925115 7fd4627fc6c0 Level-0 table #311: 0 bytes OK 2026/01/21-10:54:50.778030 7f1529bfb6c0 Level-0 table #339: 0 bytes OK
2026/01/10-22:35:10.931575 7fd4627fc6c0 Delete type=0 #309 2026/01/21-10:54:50.828753 7f1529bfb6c0 Delete type=0 #337
2026/01/10-22:35:10.938004 7fd4627fc6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901010 7f1529bfb6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.938039 7fd4627fc6c0 Manual compaction at level-1 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901050 7f1529bfb6c0 Manual compaction at level-1 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.884816 7fd463fff6c0 Recovering log #302 2026/01/21-10:43:50.178287 7f152abfd6c0 Recovering log #330
2026/01/10-16:36:53.895475 7fd463fff6c0 Delete type=3 #300 2026/01/21-10:43:50.188475 7f152abfd6c0 Delete type=3 #328
2026/01/10-16:36:53.895553 7fd463fff6c0 Delete type=0 #302 2026/01/21-10:43:50.188562 7f152abfd6c0 Delete type=0 #330
2026/01/10-17:13:09.459290 7fd4627fc6c0 Level-0 table #307: started 2026/01/21-10:46:58.315382 7f1529bfb6c0 Level-0 table #335: started
2026/01/10-17:13:09.459318 7fd4627fc6c0 Level-0 table #307: 0 bytes OK 2026/01/21-10:46:58.315409 7f1529bfb6c0 Level-0 table #335: 0 bytes OK
2026/01/10-17:13:09.465368 7fd4627fc6c0 Delete type=0 #305 2026/01/21-10:46:58.323079 7f1529bfb6c0 Delete type=0 #333
2026/01/10-17:13:09.465682 7fd4627fc6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336644 7f1529bfb6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.465759 7fd4627fc6c0 Manual compaction at level-1 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336671 7f1529bfb6c0 Manual compaction at level-1 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000308 MANIFEST-000336

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.456371 7fd462ffd6c0 Recovering log #306 2026/01/21-10:53:45.951417 7f152a3fc6c0 Recovering log #334
2026/01/10-17:13:21.466637 7fd462ffd6c0 Delete type=3 #304 2026/01/21-10:53:45.961147 7f152a3fc6c0 Delete type=3 #332
2026/01/10-17:13:21.466715 7fd462ffd6c0 Delete type=0 #306 2026/01/21-10:53:45.961217 7f152a3fc6c0 Delete type=0 #334
2026/01/10-22:35:10.912772 7fd4627fc6c0 Level-0 table #311: started 2026/01/21-10:54:50.828879 7f1529bfb6c0 Level-0 table #339: started
2026/01/10-22:35:10.912830 7fd4627fc6c0 Level-0 table #311: 0 bytes OK 2026/01/21-10:54:50.828907 7f1529bfb6c0 Level-0 table #339: 0 bytes OK
2026/01/10-22:35:10.918894 7fd4627fc6c0 Delete type=0 #309 2026/01/21-10:54:50.862960 7f1529bfb6c0 Delete type=0 #337
2026/01/10-22:35:10.937977 7fd4627fc6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901020 7f1529bfb6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.938019 7fd4627fc6c0 Manual compaction at level-1 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901069 7f1529bfb6c0 Manual compaction at level-1 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.922222 7fd4637fe6c0 Recovering log #302 2026/01/21-10:43:50.203621 7f152b3fe6c0 Recovering log #330
2026/01/10-16:36:53.933241 7fd4637fe6c0 Delete type=3 #300 2026/01/21-10:43:50.213118 7f152b3fe6c0 Delete type=3 #328
2026/01/10-16:36:53.933388 7fd4637fe6c0 Delete type=0 #302 2026/01/21-10:43:50.213182 7f152b3fe6c0 Delete type=0 #330
2026/01/10-17:13:09.439054 7fd4627fc6c0 Level-0 table #307: started 2026/01/21-10:46:58.323189 7f1529bfb6c0 Level-0 table #335: started
2026/01/10-17:13:09.439130 7fd4627fc6c0 Level-0 table #307: 0 bytes OK 2026/01/21-10:46:58.323211 7f1529bfb6c0 Level-0 table #335: 0 bytes OK
2026/01/10-17:13:09.445231 7fd4627fc6c0 Delete type=0 #305 2026/01/21-10:46:58.329442 7f1529bfb6c0 Delete type=0 #333
2026/01/10-17:13:09.465606 7fd4627fc6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336652 7f1529bfb6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.465720 7fd4627fc6c0 Manual compaction at level-1 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336688 7f1529bfb6c0 Manual compaction at level-1 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000314 MANIFEST-000342

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.415001 7fd4637fe6c0 Recovering log #312 2026/01/21-10:53:45.912760 7f152abfd6c0 Recovering log #340
2026/01/10-17:13:21.425375 7fd4637fe6c0 Delete type=3 #310 2026/01/21-10:53:45.922870 7f152abfd6c0 Delete type=3 #338
2026/01/10-17:13:21.425467 7fd4637fe6c0 Delete type=0 #312 2026/01/21-10:53:45.922940 7f152abfd6c0 Delete type=0 #340
2026/01/10-22:35:10.931688 7fd4627fc6c0 Level-0 table #317: started 2026/01/21-10:54:50.741159 7f1529bfb6c0 Level-0 table #345: started
2026/01/10-22:35:10.931718 7fd4627fc6c0 Level-0 table #317: 0 bytes OK 2026/01/21-10:54:50.741200 7f1529bfb6c0 Level-0 table #345: 0 bytes OK
2026/01/10-22:35:10.937843 7fd4627fc6c0 Delete type=0 #315 2026/01/21-10:54:50.777875 7f1529bfb6c0 Delete type=0 #343
2026/01/10-22:35:10.938011 7fd4627fc6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.900993 7f1529bfb6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.938033 7fd4627fc6c0 Manual compaction at level-1 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901062 7f1529bfb6c0 Manual compaction at level-1 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.866020 7fd4637fe6c0 Recovering log #308 2026/01/21-10:43:50.165803 7f152b3fe6c0 Recovering log #336
2026/01/10-16:36:53.876591 7fd4637fe6c0 Delete type=3 #306 2026/01/21-10:43:50.175695 7f152b3fe6c0 Delete type=3 #334
2026/01/10-16:36:53.876659 7fd4637fe6c0 Delete type=0 #308 2026/01/21-10:43:50.175747 7f152b3fe6c0 Delete type=0 #336
2026/01/10-17:13:09.451819 7fd4627fc6c0 Level-0 table #313: started 2026/01/21-10:46:58.329532 7f1529bfb6c0 Level-0 table #341: started
2026/01/10-17:13:09.451873 7fd4627fc6c0 Level-0 table #313: 0 bytes OK 2026/01/21-10:46:58.329569 7f1529bfb6c0 Level-0 table #341: 0 bytes OK
2026/01/10-17:13:09.459165 7fd4627fc6c0 Delete type=0 #311 2026/01/21-10:46:58.336457 7f1529bfb6c0 Delete type=0 #339
2026/01/10-17:13:09.465661 7fd4627fc6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336659 7f1529bfb6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.465741 7fd4627fc6c0 Manual compaction at level-1 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336676 7f1529bfb6c0 Manual compaction at level-1 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000308 MANIFEST-000336

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.442425 7fd478fff6c0 Recovering log #306 2026/01/21-10:53:45.937902 7f152b3fe6c0 Recovering log #334
2026/01/10-17:13:21.453357 7fd478fff6c0 Delete type=3 #304 2026/01/21-10:53:45.949011 7f152b3fe6c0 Delete type=3 #332
2026/01/10-17:13:21.453438 7fd478fff6c0 Delete type=0 #306 2026/01/21-10:53:45.949063 7f152b3fe6c0 Delete type=0 #334
2026/01/10-22:35:10.950222 7fd4627fc6c0 Level-0 table #311: started 2026/01/21-10:54:50.863087 7f1529bfb6c0 Level-0 table #339: started
2026/01/10-22:35:10.950248 7fd4627fc6c0 Level-0 table #311: 0 bytes OK 2026/01/21-10:54:50.863116 7f1529bfb6c0 Level-0 table #339: 0 bytes OK
2026/01/10-22:35:10.957326 7fd4627fc6c0 Delete type=0 #309 2026/01/21-10:54:50.900818 7f1529bfb6c0 Delete type=0 #337
2026/01/10-22:35:10.963639 7fd4627fc6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901029 7f1529bfb6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.963675 7fd4627fc6c0 Manual compaction at level-1 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end) 2026/01/21-10:54:50.901057 7f1529bfb6c0 Manual compaction at level-1 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.901069 7fd462ffd6c0 Recovering log #302 2026/01/21-10:43:50.191071 7f152bbff6c0 Recovering log #330
2026/01/10-16:36:53.911601 7fd462ffd6c0 Delete type=3 #300 2026/01/21-10:43:50.201148 7f152bbff6c0 Delete type=3 #328
2026/01/10-16:36:53.911674 7fd462ffd6c0 Delete type=0 #302 2026/01/21-10:43:50.201234 7f152bbff6c0 Delete type=0 #330
2026/01/10-17:13:09.445468 7fd4627fc6c0 Level-0 table #307: started 2026/01/21-10:46:58.308832 7f1529bfb6c0 Level-0 table #335: started
2026/01/10-17:13:09.445527 7fd4627fc6c0 Level-0 table #307: 0 bytes OK 2026/01/21-10:46:58.308870 7f1529bfb6c0 Level-0 table #335: 0 bytes OK
2026/01/10-17:13:09.451617 7fd4627fc6c0 Delete type=0 #305 2026/01/21-10:46:58.315278 7f1529bfb6c0 Delete type=0 #333
2026/01/10-17:13:09.465640 7fd4627fc6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336631 7f1529bfb6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.465701 7fd4627fc6c0 Manual compaction at level-1 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.336665 7f1529bfb6c0 Manual compaction at level-1 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000026 MANIFEST-000054

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.571878 7fd462ffd6c0 Recovering log #24 2026/01/21-10:53:46.057066 7f152bbff6c0 Recovering log #52
2026/01/10-17:13:21.582771 7fd462ffd6c0 Delete type=3 #22 2026/01/21-10:53:46.067412 7f152bbff6c0 Delete type=3 #50
2026/01/10-17:13:21.582857 7fd462ffd6c0 Delete type=0 #24 2026/01/21-10:53:46.067481 7f152bbff6c0 Delete type=0 #52
2026/01/10-22:35:10.976802 7fd4627fc6c0 Level-0 table #29: started 2026/01/21-10:54:51.154446 7f1529bfb6c0 Level-0 table #57: started
2026/01/10-22:35:10.976847 7fd4627fc6c0 Level-0 table #29: 0 bytes OK 2026/01/21-10:54:51.154494 7f1529bfb6c0 Level-0 table #57: 0 bytes OK
2026/01/10-22:35:10.983280 7fd4627fc6c0 Delete type=0 #27 2026/01/21-10:54:51.189974 7f1529bfb6c0 Delete type=0 #55
2026/01/10-22:35:10.989948 7fd4627fc6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190106 7f1529bfb6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.989976 7fd4627fc6c0 Manual compaction at level-1 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190265 7f1529bfb6c0 Manual compaction at level-1 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:54.053637 7fd4637fe6c0 Recovering log #20 2026/01/21-10:43:50.312683 7f152b3fe6c0 Recovering log #48
2026/01/10-16:36:54.063508 7fd4637fe6c0 Delete type=3 #18 2026/01/21-10:43:50.322328 7f152b3fe6c0 Delete type=3 #46
2026/01/10-16:36:54.063638 7fd4637fe6c0 Delete type=0 #20 2026/01/21-10:43:50.322376 7f152b3fe6c0 Delete type=0 #48
2026/01/10-17:13:09.505493 7fd4627fc6c0 Level-0 table #25: started 2026/01/21-10:46:58.384370 7f1529bfb6c0 Level-0 table #53: started
2026/01/10-17:13:09.505547 7fd4627fc6c0 Level-0 table #25: 0 bytes OK 2026/01/21-10:46:58.384393 7f1529bfb6c0 Level-0 table #53: 0 bytes OK
2026/01/10-17:13:09.512124 7fd4627fc6c0 Delete type=0 #23 2026/01/21-10:46:58.391260 7f1529bfb6c0 Delete type=0 #51
2026/01/10-17:13:09.518599 7fd4627fc6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391418 7f1529bfb6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.518680 7fd4627fc6c0 Manual compaction at level-1 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391443 7f1529bfb6c0 Manual compaction at level-1 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000112 MANIFEST-000140

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.484535 7fd478fff6c0 Recovering log #110 2026/01/21-10:53:45.976776 7f152b3fe6c0 Recovering log #138
2026/01/10-17:13:21.495192 7fd478fff6c0 Delete type=3 #108 2026/01/21-10:53:45.987431 7f152b3fe6c0 Delete type=3 #136
2026/01/10-17:13:21.495268 7fd478fff6c0 Delete type=0 #110 2026/01/21-10:53:45.987486 7f152b3fe6c0 Delete type=0 #138
2026/01/10-22:35:10.938160 7fd4627fc6c0 Level-0 table #115: started 2026/01/21-10:54:51.007181 7f1529bfb6c0 Level-0 table #143: started
2026/01/10-22:35:10.938192 7fd4627fc6c0 Level-0 table #115: 0 bytes OK 2026/01/21-10:54:51.007212 7f1529bfb6c0 Level-0 table #143: 0 bytes OK
2026/01/10-22:35:10.944117 7fd4627fc6c0 Delete type=0 #113 2026/01/21-10:54:51.044437 7f1529bfb6c0 Delete type=0 #141
2026/01/10-22:35:10.963606 7fd4627fc6c0 Manual compaction at level-0 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044577 7f1529bfb6c0 Manual compaction at level-0 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.963664 7fd4627fc6c0 Manual compaction at level-1 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044600 7f1529bfb6c0 Manual compaction at level-1 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.954476 7fd462ffd6c0 Recovering log #105 2026/01/21-10:43:50.227772 7f152abfd6c0 Recovering log #134
2026/01/10-16:36:53.964579 7fd462ffd6c0 Delete type=3 #103 2026/01/21-10:43:50.237335 7f152abfd6c0 Delete type=3 #132
2026/01/10-16:36:53.964711 7fd462ffd6c0 Delete type=0 #105 2026/01/21-10:43:50.237395 7f152abfd6c0 Delete type=0 #134
2026/01/10-17:13:09.485886 7fd4627fc6c0 Level-0 table #111: started 2026/01/21-10:46:58.343808 7f1529bfb6c0 Level-0 table #139: started
2026/01/10-17:13:09.485937 7fd4627fc6c0 Level-0 table #111: 0 bytes OK 2026/01/21-10:46:58.343835 7f1529bfb6c0 Level-0 table #139: 0 bytes OK
2026/01/10-17:13:09.492028 7fd4627fc6c0 Delete type=0 #109 2026/01/21-10:46:58.350098 7f1529bfb6c0 Delete type=0 #137
2026/01/10-17:13:09.492315 7fd4627fc6c0 Manual compaction at level-0 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364021 7f1529bfb6c0 Manual compaction at level-0 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.492345 7fd4627fc6c0 Manual compaction at level-1 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364061 7f1529bfb6c0 Manual compaction at level-1 from '!folders!5pCYN0vTiCKOHrXM' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000309 MANIFEST-000337

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.514326 7fd4637fe6c0 Recovering log #307 2026/01/21-10:53:46.003247 7f152abfd6c0 Recovering log #335
2026/01/10-17:13:21.524571 7fd4637fe6c0 Delete type=3 #305 2026/01/21-10:53:46.013653 7f152abfd6c0 Delete type=3 #333
2026/01/10-17:13:21.524713 7fd4637fe6c0 Delete type=0 #307 2026/01/21-10:53:46.013722 7f152abfd6c0 Delete type=0 #335
2026/01/10-22:35:10.957462 7fd4627fc6c0 Level-0 table #312: started 2026/01/21-10:54:50.968627 7f1529bfb6c0 Level-0 table #340: started
2026/01/10-22:35:10.957496 7fd4627fc6c0 Level-0 table #312: 0 bytes OK 2026/01/21-10:54:50.968655 7f1529bfb6c0 Level-0 table #340: 0 bytes OK
2026/01/10-22:35:10.963461 7fd4627fc6c0 Delete type=0 #310 2026/01/21-10:54:51.007062 7f1529bfb6c0 Delete type=0 #338
2026/01/10-22:35:10.963651 7fd4627fc6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044568 7f1529bfb6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.963700 7fd4627fc6c0 Manual compaction at level-1 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.044607 7f1529bfb6c0 Manual compaction at level-1 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:53.985018 7fd463fff6c0 Recovering log #303 2026/01/21-10:43:50.253598 7f152a3fc6c0 Recovering log #331
2026/01/10-16:36:53.995735 7fd463fff6c0 Delete type=3 #301 2026/01/21-10:43:50.263729 7f152a3fc6c0 Delete type=3 #329
2026/01/10-16:36:53.995805 7fd463fff6c0 Delete type=0 #303 2026/01/21-10:43:50.263795 7f152a3fc6c0 Delete type=0 #331
2026/01/10-17:13:09.498747 7fd4627fc6c0 Level-0 table #308: started 2026/01/21-10:46:58.357700 7f1529bfb6c0 Level-0 table #336: started
2026/01/10-17:13:09.498805 7fd4627fc6c0 Level-0 table #308: 0 bytes OK 2026/01/21-10:46:58.357727 7f1529bfb6c0 Level-0 table #336: 0 bytes OK
2026/01/10-17:13:09.505290 7fd4627fc6c0 Delete type=0 #306 2026/01/21-10:46:58.363871 7f1529bfb6c0 Delete type=0 #334
2026/01/10-17:13:09.518578 7fd4627fc6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364050 7f1529bfb6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.518661 7fd4627fc6c0 Manual compaction at level-1 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.364080 7f1529bfb6c0 Manual compaction at level-1 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000306 MANIFEST-000334

View File

@@ -1,7 +1,7 @@
2026/01/10-17:13:21.543192 7fd463fff6c0 Recovering log #304 2026/01/21-10:53:46.029848 7f152a3fc6c0 Recovering log #332
2026/01/10-17:13:21.553430 7fd463fff6c0 Delete type=3 #302 2026/01/21-10:53:46.039745 7f152a3fc6c0 Delete type=3 #330
2026/01/10-17:13:21.553529 7fd463fff6c0 Delete type=0 #304 2026/01/21-10:53:46.039809 7f152a3fc6c0 Delete type=0 #332
2026/01/10-22:35:10.970109 7fd4627fc6c0 Level-0 table #309: started 2026/01/21-10:54:51.044679 7f1529bfb6c0 Level-0 table #337: started
2026/01/10-22:35:10.970150 7fd4627fc6c0 Level-0 table #309: 0 bytes OK 2026/01/21-10:54:51.044730 7f1529bfb6c0 Level-0 table #337: 0 bytes OK
2026/01/10-22:35:10.976638 7fd4627fc6c0 Delete type=0 #307 2026/01/21-10:54:51.075139 7f1529bfb6c0 Delete type=0 #335
2026/01/10-22:35:10.989936 7fd4627fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190078 7f1529bfb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/10-16:36:54.016444 7fd4637fe6c0 Recovering log #300 2026/01/21-10:43:50.279117 7f152b3fe6c0 Recovering log #328
2026/01/10-16:36:54.027547 7fd4637fe6c0 Delete type=3 #298 2026/01/21-10:43:50.289888 7f152b3fe6c0 Delete type=3 #326
2026/01/10-16:36:54.027611 7fd4637fe6c0 Delete type=0 #300 2026/01/21-10:43:50.289946 7f152b3fe6c0 Delete type=0 #328
2026/01/10-17:13:09.465917 7fd4627fc6c0 Level-0 table #305: started 2026/01/21-10:46:58.370955 7f1529bfb6c0 Level-0 table #333: started
2026/01/10-17:13:09.465950 7fd4627fc6c0 Level-0 table #305: 0 bytes OK 2026/01/21-10:46:58.370994 7f1529bfb6c0 Level-0 table #333: 0 bytes OK
2026/01/10-17:13:09.471878 7fd4627fc6c0 Delete type=0 #303 2026/01/21-10:46:58.377870 7f1529bfb6c0 Delete type=0 #331
2026/01/10-17:13:09.492251 7fd4627fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391392 7f1529bfb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000277 MANIFEST-000305

View File

@@ -1,8 +1,8 @@
2026/01/10-17:13:21.556875 7fd4637fe6c0 Recovering log #275 2026/01/21-10:53:46.042639 7f152abfd6c0 Recovering log #303
2026/01/10-17:13:21.568002 7fd4637fe6c0 Delete type=3 #273 2026/01/21-10:53:46.053450 7f152abfd6c0 Delete type=3 #301
2026/01/10-17:13:21.568079 7fd4637fe6c0 Delete type=0 #275 2026/01/21-10:53:46.053514 7f152abfd6c0 Delete type=0 #303
2026/01/10-22:35:10.983465 7fd4627fc6c0 Level-0 table #280: started 2026/01/21-10:54:51.119771 7f1529bfb6c0 Level-0 table #308: started
2026/01/10-22:35:10.983518 7fd4627fc6c0 Level-0 table #280: 0 bytes OK 2026/01/21-10:54:51.119820 7f1529bfb6c0 Level-0 table #308: 0 bytes OK
2026/01/10-22:35:10.989758 7fd4627fc6c0 Delete type=0 #278 2026/01/21-10:54:51.154290 7f1529bfb6c0 Delete type=0 #306
2026/01/10-22:35:10.989959 7fd4627fc6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190098 7f1529bfb6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)
2026/01/10-22:35:10.989984 7fd4627fc6c0 Manual compaction at level-1 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end) 2026/01/21-10:54:51.190281 7f1529bfb6c0 Manual compaction at level-1 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)

View File

@@ -1,8 +1,8 @@
2026/01/10-16:36:54.030870 7fd463fff6c0 Recovering log #271 2026/01/21-10:43:50.292479 7f152a3fc6c0 Recovering log #299
2026/01/10-16:36:54.048804 7fd463fff6c0 Delete type=3 #269 2026/01/21-10:43:50.302752 7f152a3fc6c0 Delete type=3 #297
2026/01/10-16:36:54.048881 7fd463fff6c0 Delete type=0 #271 2026/01/21-10:43:50.302832 7f152a3fc6c0 Delete type=0 #299
2026/01/10-17:13:09.512260 7fd4627fc6c0 Level-0 table #276: started 2026/01/21-10:46:58.377980 7f1529bfb6c0 Level-0 table #304: started
2026/01/10-17:13:09.512293 7fd4627fc6c0 Level-0 table #276: 0 bytes OK 2026/01/21-10:46:58.378008 7f1529bfb6c0 Level-0 table #304: 0 bytes OK
2026/01/10-17:13:09.518322 7fd4627fc6c0 Delete type=0 #274 2026/01/21-10:46:58.384246 7f1529bfb6c0 Delete type=0 #302
2026/01/10-17:13:09.518622 7fd4627fc6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391407 7f1529bfb6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)
2026/01/10-17:13:09.518702 7fd4627fc6c0 Manual compaction at level-1 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end) 2026/01/21-10:46:58.391435 7f1529bfb6c0 Manual compaction at level-1 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -465,9 +465,9 @@ table {
font-weight: bold; font-weight: bold;
} }
.fvtt-les-heritiers .items-list .item { .fvtt-les-heritiers .items-list .item {
height: 30px; height: 24px;
line-height: 24px; line-height: 20px;
padding: 1px 0; padding: 0;
border-bottom: 1px solid #BBB; border-bottom: 1px solid #BBB;
} }
.fvtt-les-heritiers .items-list .item .item-image { .fvtt-les-heritiers .items-list .item .item-image {
@@ -614,7 +614,7 @@ nav.sheet-tabs .item:after {
/* AppV2 Actor Sheets - Tabs with scrolling */ /* AppV2 Actor Sheets - Tabs with scrolling */
.fvtt-les-heritiers.actor .tab[data-tab] { .fvtt-les-heritiers.actor .tab[data-tab] {
display: none; display: none;
padding: 0.5rem; padding: 0.25rem 0.5rem;
overflow-y: auto; overflow-y: auto;
flex: 1 1 auto; flex: 1 1 auto;
} }
@@ -623,7 +623,7 @@ nav.sheet-tabs .item:after {
} }
/* Redesigned skill category headers */ /* Redesigned skill category headers */
.fvtt-les-heritiers.actor .sheet-box { .fvtt-les-heritiers.actor .sheet-box {
margin-bottom: 0.5rem; margin-bottom: 0.25rem;
} }
.fvtt-les-heritiers.actor .items-title-text { .fvtt-les-heritiers.actor .items-title-text {
font-size: 0.95rem; font-size: 0.95rem;
@@ -2005,31 +2005,31 @@ h4.entry-name.document-name {
min-width: 9rem; min-width: 9rem;
} }
.item-field-label-short { .item-field-label-short {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 4rem; max-width: 4rem;
min-width: 4rem; min-width: 4rem;
} }
.item-field-label-short-num { .item-field-label-short-num {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 2rem; max-width: 2rem;
min-width: 2rem; min-width: 2rem;
} }
.item-field-label-medium { .item-field-label-medium {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 6rem; max-width: 6rem;
min-width: 6rem; min-width: 6rem;
} }
.item-field-label-long { .item-field-label-long {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 8rem; max-width: 8rem;
min-width: 8rem; min-width: 8rem;
} }
.item-field-label-long2 { .item-field-label-long2 {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 14rem; max-width: 14rem;
min-width: 14rem; min-width: 14rem;
@@ -2039,7 +2039,7 @@ h4.entry-name.document-name {
min-width: 16rem; min-width: 16rem;
} }
.item-field-label-long3 { .item-field-label-long3 {
padding-top: 6px; padding-top: 2px;
flex-grow: 1; flex-grow: 1;
max-width: 20rem; max-width: 20rem;
min-width: 20rem; min-width: 20rem;

File diff suppressed because one or more lines are too long

View File

@@ -82,7 +82,7 @@
"units": "m" "units": "m"
}, },
"license": "LICENSE.txt", "license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/raw/branch/master/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/releases/download/latest/system.json",
"download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-les-heritiers-13.0.7.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-les-heritiers-13.0.7.zip",
"languages": [ "languages": [
{ {

View File

@@ -6,7 +6,7 @@
<div class="flexrow"> <div class="flexrow">
<img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" /> <img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
<div class="flexcol"> <div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" {{#if isPlayMode}}disabled{{/if}} /></h1> <h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" /></h1>
<div class="flexrow"> <div class="flexrow">
<div class="flexrow"> <div class="flexrow">

View File

@@ -1,547 +0,0 @@
<section 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="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
<div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="flexrow">
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "physical")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac" data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" value="{{carac.value}}" data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" value="{{carac.rang}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "mental")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac" data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" value="{{carac.value}}" data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" value="{{carac.rang}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
</div>
<div class="flexrow">
<label class="item-field-label-short">PV</label>
<input type="text" class="item-field-label-short" name="system.pv.value" value="{{system.pv.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.max" value="{{system.pv.max}}" data-dtype="Number" />
<label class="item-field-label-short">Malus</label>
<input type="text" class="item-field-label-short" value="{{pvMalus.value}}" data-dtype="Number" disabled />
<span>&nbsp;&nbsp;</span>
<select class="item-field-label-medium" type="text" name="system.statutmasque" value="{{system.statutmasque}}" data-dtype="string">
{{selectOptions config.statutMasque selected=system.statutmasque}}
</select>
<span>&nbsp;&nbsp;</span>
<label class="item-field-label-short">Tricherie</label>
<input type="text" class="item-field-label-short" name="system.rang.tricherie.value" value="{{system.rang.tricherie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.tricherie.max" value="{{system.rang.tricherie.max}}" data-dtype="Number" />
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="competences">Compétences</a>
<a class="item" data-tab="atouts">Atouts&Matériel</a>
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="notes">Notes</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Competence Tab --}}
<div class="tab competences" data-group="primary" data-tab="competences">
<div class="flexcol">
<div class="grid-2col">
<div>
{{#each utileSkillsPhysical as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.hbs skillDef=skillDef keyProfil=keyProfil isPNJ=true}}
{{/each}}
</div>
<div>
{{#each utileSkillsMental as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.hbs skillDef=skillDef keyProfil=keyProfil isPNJ=true}}
{{/each}}
</div>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow">
<span class="item-field-label-long2">
<h3><label class="items-title-text">Compétences Futiles</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each futileSkills as |skill key|}}
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
<span class="item-field-label-long2 roll-style"><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{skill.name}}</a></span>
<select class="item-field-label-short edit-item-data" type="text"
data-item-field="niveau" value="{{skill.system.niveau}}" data-dtype="Number">
{{selectOptions @root.config.listNiveau selected=skill.system.niveau}}
</select>
<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>
<li class="item flexrow " >
<h2>Magie</h3>
</li>
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style"><a class="item-field-label-short"
data-rang-key="feerie">Point d'Ame</a></label>
<input type="text" class="item-field-label-short" name="system.magie.pointsame.value"
value="{{system.magie.pointsame.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.magie.pointsame.max"
value="{{system.magie.pointsame.max}}" data-dtype="Number" {{#if issGM}} {{else}} disabled {{/if}} />
</li>
</ul>
</div>
{{#each magieList as |magie idx|}}
<li class="item flexrow " data-item-id="{{magie.competence._id}}" data-item-type="competence">
<h2 class="flexrow"><label class="items-title-text "><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{magie.name}} {{magie.competence.system.niveau}} </a> </label>
<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>
</h2>
</li>
<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 item-field-label-long2-img">
<h3><label class="items-title-text">Nom du sort</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="sort" title="Ajouter un sort"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</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>
{{/each}}
</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>
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-medium"><strong>Esquive</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.masquee" value="{{system.combat.esquive.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.demasquee" value="{{system.combat.esquive.demasquee}}" data-dtype="Number" />
<label class="item-field-label-medium"><strong>Parade</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.masquee" value="{{system.combat.parade.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.demasquee" value="{{system.combat.parade.demasquee}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Rés. physique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancephysique.value" value="{{system.combat.resistancephysique.value}}" data-dtype="Number" />
<label class="item-field-label-long">Rés. psychique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancepsychique.value" value="{{system.combat.resistancepsychique.value}}" data-dtype="Number" />
<label class="item-field-label-medium">Protection : </label>
<input type="text" class="item-field-label-short" name="system.combat.protection.value" value="{{system.combat.protection.value}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Effets secondaires</label>
<input type="text" class="item-field-label-short" name="system.combat.effetssecondaires" value="{{system.combat.effetssecondaires}}" data-dtype="String" />
<label class="item-field-label-long">Dissimulation : </label>
<input type="text" class="item-field-label-short" name="system.combat.dissimulation.value" value="{{system.combat.dissimulation.value}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long"><strong>Corps à Corps</strong></label>
<label class="item-field-label-medium">Masqué</label>
<input type="text" class="item-field-label-short" name="system.combat.corpsacorps.masquee" value="{{system.combat.corpsacorps.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasqué</label>
<input type="text" class="item-field-label-short" name="system.combat.corpsacorps.demasquee" value="{{system.combat.corpsacorps.demasquee}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long"><strong>A distance</strong></label>
<label class="item-field-label-medium">Masqué</label>
<input type="text" class="item-field-label-short" name="system.combat.tir.masquee" value="{{system.combat.tir.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasqué</label>
<input type="text" class="item-field-label-short" name="system.combat.tir.demasquee" value="{{system.combat.tir.demasquee}}" data-dtype="Number" />
</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é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">
<button class="roll-attaque-arme button-sheet-roll">Attaquer</button>
</span>
<span class="item-field-label-short">
{{arme.system.degats}}
</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 protection"><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>
{{!-- atouts Tab --}}
<div class="tab atouts" data-group="primary" data-tab="atouts">
<div class="flexrow">
<li class="item flexrow " data-item-id="{{fee._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{fee.img}}" />
<span class="item-field-label-long2">{{fee.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>
</div>
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short" data-rang-key="feerie">Féerie</a></label>
<input type="text" class="item-field-label-short" name="system.rang.feerie.value" value="{{system.rang.feerie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.feerie.max" value="{{system.rang.feerie.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short" data-rang-key="masque">Masque</a></label>
<input type="text" class="item-field-label-short" name="system.rang.masque.value" value="{{system.rang.masque.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.masque.max" value="{{system.rang.masque.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-long roll-style"><a class="dialog-recup-usage item-field-label-long">Récup. P. d'Usage</a></label>
</li>
</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">Avantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="avantage" title="Ajouter un avantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each avantages as |avantage key|}}
<li class="item flexrow " data-item-id="{{avantage._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{avantage.img}}" />
<span class="item-field-label-long2">{{avantage.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">Désavantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="desavantage" title="Ajouter un Désavantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each desavantages as |desavantage key|}}
<li class="item flexrow " data-item-id="{{desavantage._id}}" data-item-type="desavantage">
<img class="item-name-img" src="{{desavantage.img}}" />
<span class="item-field-label-long2">{{desavantage.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">Atouts Féériques</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="atoutfeerique" title="Ajouter un Atout féerique"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each atouts as |atout key|}}
<li class="item flexrow " data-item-id="{{atout._id}}" data-item-type="atout">
<img class="item-name-img" src="{{atout.img}}" />
<span class="item-field-label-long2">{{atout.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 item-field-label-long2-img">
<h3><label class="items-title-text">Pouvoirs</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Masque</label>
</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>
<span class="item-field-label-medium">
<label class="short-label">Usage</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="pouvoir" title="Ajouter un pouvoir"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each pouvoirs as |pouvoir key|}}
<li class="item flexrow " data-item-id="{{pouvoir._id}}" data-item-type="pouvoir">
<img class="item-name-img" src="{{pouvoir.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-pouvoir">{{pouvoir.name}}</a></span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.masquetype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.pouvoirtype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.niveau}}</span>
<span class="item-field-label-medium">{{pouvoir.system.pointsusagecourant}}/{{pouvoir.maxUsage}}</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">Capacités Naturelles</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="capacitenaturelle" title="Ajouter une Capacité naturelle"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each capacites as |capa key|}}
<li class="item flexrow " data-item-id="{{capa._id}}" data-item-type="capacite">
<img class="item-name-img" src="{{capa.img}}" />
<span class="item-field-label-long2">{{capa.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">Equipements</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="equipement" title="Créer un équipement"><i class="fas fa-plus"></i></a>
</div>
</li>
{{#each equipements as |equip key|}}
<li class="item flexrow " data-item-id="{{equip._id}}" data-item-type="equipement">
<img class="item-name-img" src="{{equip.img}}" />
<span class="item-field-label-long2">{{equip.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>
</div>
<div class="tab notes" data-group="primary" data-tab="notes">
<span>
<h3>Historique</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
</div>
</div>
</section>
</section>

View File

@@ -1,547 +0,0 @@
<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">
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "physical")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac" data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" value="{{carac.value}}" data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" value="{{carac.rang}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "mental")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac" data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" value="{{carac.value}}" data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" value="{{carac.rang}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
</div>
<div class="flexrow">
<label class="item-field-label-short">PV</label>
<input type="text" class="item-field-label-short" name="system.pv.value" value="{{system.pv.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.max" value="{{system.pv.max}}" data-dtype="Number" />
<label class="item-field-label-short">Malus</label>
<input type="text" class="item-field-label-short" value="{{pvMalus.value}}" data-dtype="Number" disabled />
<span>&nbsp;&nbsp;</span>
<select class="item-field-label-medium" type="text" name="system.statutmasque" value="{{system.statutmasque}}" data-dtype="string">
{{selectOptions config.statutMasque selected=system.statutmasque}}
</select>
<span>&nbsp;&nbsp;</span>
<label class="item-field-label-short">Tricherie</label>
<input type="text" class="item-field-label-short" name="system.rang.tricherie.value" value="{{system.rang.tricherie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.tricherie.max" value="{{system.rang.tricherie.max}}" data-dtype="Number" />
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="competences">Compétences</a>
<a class="item" data-tab="atouts">Atouts&Matériel</a>
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="notes">Notes</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Competence Tab --}}
<div class="tab competences" data-group="primary" data-tab="competences">
<div class="flexcol">
<div class="grid-2col">
<div>
{{#each utileSkillsPhysical as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.html skillDef=skillDef keyProfil=keyProfil isPNJ=true}}
{{/each}}
</div>
<div>
{{#each utileSkillsMental as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.html skillDef=skillDef keyProfil=keyProfil isPNJ=true}}
{{/each}}
</div>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow">
<span class="item-field-label-long2">
<h3><label class="items-title-text">Compétences Futiles</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each futileSkills as |skill key|}}
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
<span class="item-field-label-long2 roll-style"><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{skill.name}}</a></span>
<select class="item-field-label-short edit-item-data" type="text"
data-item-field="niveau" value="{{skill.system.niveau}}" data-dtype="Number">
{{selectOptions @root.config.listNiveau selected=skill.system.niveau}}
</select>
<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>
<li class="item flexrow " >
<h2>Magie</h3>
</li>
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style"><a class="item-field-label-short"
data-rang-key="feerie">Point d'Ame</a></label>
<input type="text" class="item-field-label-short" name="system.magie.pointsame.value"
value="{{system.magie.pointsame.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.magie.pointsame.max"
value="{{system.magie.pointsame.max}}" data-dtype="Number" {{#if issGM}} {{else}} disabled {{/if}} />
</li>
</ul>
</div>
{{#each magieList as |magie idx|}}
<li class="item flexrow " data-item-id="{{magie.competence._id}}" data-item-type="competence">
<h2 class="flexrow"><label class="items-title-text "><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{magie.name}} {{magie.competence.system.niveau}} </a> </label>
<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>
</h2>
</li>
<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 item-field-label-long2-img">
<h3><label class="items-title-text">Nom du sort</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="sort" title="Ajouter un sort"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</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>
{{/each}}
</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>
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-medium"><strong>Esquive</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.masquee" value="{{system.combat.esquive.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.demasquee" value="{{system.combat.esquive.demasquee}}" data-dtype="Number" />
<label class="item-field-label-medium"><strong>Parade</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.masquee" value="{{system.combat.parade.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.demasquee" value="{{system.combat.parade.demasquee}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Rés. physique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancephysique.value" value="{{system.combat.resistancephysique.value}}" data-dtype="Number" />
<label class="item-field-label-long">Rés. psychique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancepsychique.value" value="{{system.combat.resistancepsychique.value}}" data-dtype="Number" />
<label class="item-field-label-medium">Protection : </label>
<input type="text" class="item-field-label-short" name="system.combat.protection.value" value="{{system.combat.protection.value}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Effets secondaires</label>
<input type="text" class="item-field-label-short" name="system.combat.effetssecondaires" value="{{system.combat.effetssecondaires}}" data-dtype="String" />
<label class="item-field-label-long">Dissimulation : </label>
<input type="text" class="item-field-label-short" name="system.combat.dissimulation.value" value="{{system.combat.dissimulation.value}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long"><strong>Corps à Corps</strong></label>
<label class="item-field-label-medium">Masqué</label>
<input type="text" class="item-field-label-short" name="system.combat.corpsacorps.masquee" value="{{system.combat.corpsacorps.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasqué</label>
<input type="text" class="item-field-label-short" name="system.combat.corpsacorps.demasquee" value="{{system.combat.corpsacorps.demasquee}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long"><strong>A distance</strong></label>
<label class="item-field-label-medium">Masqué</label>
<input type="text" class="item-field-label-short" name="system.combat.tir.masquee" value="{{system.combat.tir.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasqué</label>
<input type="text" class="item-field-label-short" name="system.combat.tir.demasquee" value="{{system.combat.tir.demasquee}}" data-dtype="Number" />
</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é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">
<button class="roll-attaque-arme button-sheet-roll">Attaquer</button>
</span>
<span class="item-field-label-short">
{{arme.system.degats}}
</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 protection"><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>
{{!-- atouts Tab --}}
<div class="tab atouts" data-group="primary" data-tab="atouts">
<div class="flexrow">
<li class="item flexrow " data-item-id="{{fee._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{fee.img}}" />
<span class="item-field-label-long2">{{fee.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>
</div>
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short" data-rang-key="feerie">Féerie</a></label>
<input type="text" class="item-field-label-short" name="system.rang.feerie.value" value="{{system.rang.feerie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.feerie.max" value="{{system.rang.feerie.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short" data-rang-key="masque">Masque</a></label>
<input type="text" class="item-field-label-short" name="system.rang.masque.value" value="{{system.rang.masque.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.masque.max" value="{{system.rang.masque.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-long roll-style"><a class="dialog-recup-usage item-field-label-long">Récup. P. d'Usage</a></label>
</li>
</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">Avantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="avantage" title="Ajouter un avantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each avantages as |avantage key|}}
<li class="item flexrow " data-item-id="{{avantage._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{avantage.img}}" />
<span class="item-field-label-long2">{{avantage.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">Désavantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="desavantage" title="Ajouter un Désavantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each desavantages as |desavantage key|}}
<li class="item flexrow " data-item-id="{{desavantage._id}}" data-item-type="desavantage">
<img class="item-name-img" src="{{desavantage.img}}" />
<span class="item-field-label-long2">{{desavantage.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">Atouts Féériques</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="atoutfeerique" title="Ajouter un Atout féerique"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each atouts as |atout key|}}
<li class="item flexrow " data-item-id="{{atout._id}}" data-item-type="atout">
<img class="item-name-img" src="{{atout.img}}" />
<span class="item-field-label-long2">{{atout.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 item-field-label-long2-img">
<h3><label class="items-title-text">Pouvoirs</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Masque</label>
</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>
<span class="item-field-label-medium">
<label class="short-label">Usage</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="pouvoir" title="Ajouter un pouvoir"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each pouvoirs as |pouvoir key|}}
<li class="item flexrow " data-item-id="{{pouvoir._id}}" data-item-type="pouvoir">
<img class="item-name-img" src="{{pouvoir.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-pouvoir">{{pouvoir.name}}</a></span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.masquetype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.pouvoirtype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.niveau}}</span>
<span class="item-field-label-medium">{{pouvoir.system.pointsusagecourant}}/{{pouvoir.maxUsage}}</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">Capacités Naturelles</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="capacitenaturelle" title="Ajouter une Capacité naturelle"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each capacites as |capa key|}}
<li class="item flexrow " data-item-id="{{capa._id}}" data-item-type="capacite">
<img class="item-name-img" src="{{capa.img}}" />
<span class="item-field-label-long2">{{capa.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">Equipements</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="equipement" title="Créer un équipement"><i class="fas fa-plus"></i></a>
</div>
</li>
{{#each equipements as |equip key|}}
<li class="item flexrow " data-item-id="{{equip._id}}" data-item-type="equipement">
<img class="item-name-img" src="{{equip.img}}" />
<span class="item-field-label-long2">{{equip.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>
</div>
<div class="tab notes" data-group="primary" data-tab="notes">
<span>
<h3>Historique</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
</div>
</div>
</section>
</form>

View File

@@ -6,7 +6,7 @@
<div class="flexrow"> <div class="flexrow">
<img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" /> <img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
<div class="flexcol"> <div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" {{#if isPlayMode}}disabled{{/if}} /></h1> <h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" /></h1>
<div class="flexrow"> <div class="flexrow">
<div class="flexrow"> <div class="flexrow">

View File

@@ -1,948 +0,0 @@
<section 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="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
<div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" {{#if isPlayMode}}disabled{{/if}} /></h1>
<div class="flexrow">
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "physical")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac"
data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" data-tooltip="Valeur actuelle" value="{{carac.value}}"
data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" data-tooltip="Rang" value="{{carac.rang}}"
data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "mental")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac"
data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" value="{{carac.value}}" data-tooltip="Valeur actuelle"
data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" value="{{carac.rang}}" data-tooltip="Rang"
data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
</div>
<div class="flexrow">
<label class="item-field-label-short">PV</label>
<input type="text" class="item-field-label-short" name="system.pv.value" value="{{system.pv.value}}"
data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.max" value="{{system.pv.max}}" disabled
data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.mod" value="{{system.pv.mod}}"
data-dtype="Number" />
<label class="item-field-label-short">Malus</label>
<input type="text" class="item-field-label-short" value="{{pvMalus.value}}" data-dtype="Number" disabled />
<span>&nbsp;&nbsp;</span>
<select class="item-field-label-medium" type="text" name="system.statutmasque"
value="{{system.statutmasque}}" data-dtype="string">
{{selectOptions config.statutMasque selected=system.statutmasque}}
</select>
<span>&nbsp;&nbsp;</span>
<label class="item-field-label-short">Tricherie</label>
<input type="text" class="item-field-label-short-num" name="system.rang.tricherie.value"
value="{{system.rang.tricherie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short-num" name="system.rang.tricherie.max"
value="{{system.rang.tricherie.max}}" data-dtype="Number" />
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="competences">Compétences</a>
<a class="item" data-tab="fee">Fée</a>
{{#if system.biodata.magie}}
<a class="item" data-tab="magie">Magie</a>
{{/if}}
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="equipement">Equipement</a>
<a class="item" data-tab="contact">Contacts</a>
<a class="item" data-tab="biodata">Bio</a>
<a class="item" data-tab="notes">Notes</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Competence Tab --}}
<div class="tab competences" data-group="primary" data-tab="competences">
<div class="flexcol">
<div class="grid-2col">
<div>
{{#each utileSkillsPhysical as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.hbs skillDef=skillDef keyProfil=keyProfil
config=config}}
{{/each}}
</div>
<div>
{{#each utileSkillsMental as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.hbs skillDef=skillDef keyProfil=keyProfil
config=config}}
{{/each}}
</div>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow">
<span class="item-field-label-long2">
<h3><label class="items-title-text">Compétences Futiles</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="competence" title="Ajouter une compétence futile"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each futileSkills as |skill key|}}
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
<span class="item-field-label-long2 roll-style"><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{skill.name}}</a></span>
<select class="item-field-label-short edit-item-data" type="text" data-item-field="niveau"
value="{{skill.system.niveau}}" data-dtype="Number">
{{selectOptions @root.config.listNiveau selected=skill.system.niveau}}
</select>
<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>
{{!-- 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>
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-medium"><strong>Esquive</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.masquee"
value="{{system.combat.esquive.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.demasquee"
value="{{system.combat.esquive.demasquee}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-medium"><strong>Parade</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.masquee"
value="{{system.combat.parade.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.demasquee"
value="{{system.combat.parade.demasquee}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Rés. physique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancephysique.value"
value="{{system.combat.resistancephysique.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-long">Rés. psychique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancepsychique.value"
value="{{system.combat.resistancepsychique.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-medium">Protection : </label>
<input type="text" class="item-field-label-short" name="system.combat.protection.value"
value="{{system.combat.protection.value}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Effets secondaires</label>
<input type="text" class="item-field-label-short" name="system.combat.effetssecondaires"
value="{{system.combat.effetssecondaires}}" data-dtype="String" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-long">Dissimulation : </label>
<input type="text" class="item-field-label-short" name="system.combat.dissimulation.value"
value="{{system.combat.dissimulation.value}}" data-dtype="Number" />
</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">Dégats</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Attaque</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">
{{arme.system.degats}}
</span>
<span class="item-field-label-short">
<button class="roll-attaque-arme button-sheet-roll">Attaque</button>
</span>
<span class="item-field-label-short">
<button class="roll-assomer-arme button-sheet-roll">Assommer</button>
</span>
{{#if arme.system.isMelee}}
<span class="item-field-label-short">
<button class="roll-attaque-charge-arme button-sheet-roll">Charger</button>
</span>
<span class="item-field-label-short">
<button class="roll-attaque-brutale-arme button-sheet-roll button-sheet-roll-long1">Attaque
brutale</button>
</span>
{{/if}}
<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 protection"><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>
{{!-- Fee Tab --}}
<div class="tab fee" data-group="primary" data-tab="fee">
<div class="flexrow">
<li class="item flexrow " data-item-id="{{fee._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{fee.img}}" />
<span class="item-field-label-long2">{{fee.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>
</div>
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short"
data-rang-key="feerie">Féerie</a></label>
<input type="text" class="item-field-label-short" name="system.rang.feerie.value"
value="{{system.rang.feerie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.feerie.max"
value="{{system.rang.feerie.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short"
data-rang-key="masque">Masque</a></label>
<input type="text" class="item-field-label-short" name="system.rang.masque.value"
value="{{system.rang.masque.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.masque.max"
value="{{system.rang.masque.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-long roll-style"><a class="dialog-recup-usage item-field-label-long">Récup.
P. d'Usage</a></label>
</li>
</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">Avantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="avantage" title="Ajouter un avantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each avantages as |avantage key|}}
<li class="item flexrow " data-item-id="{{avantage._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{avantage.img}}" />
<span class="item-field-label-long2">{{avantage.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">Désavantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="desavantage" title="Ajouter un désavantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each desavantages as |desavantage key|}}
<li class="item flexrow " data-item-id="{{desavantage._id}}" data-item-type="desavantage">
<img class="item-name-img" src="{{desavantage.img}}" />
<span class="item-field-label-long2">{{desavantage.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">Atouts Féériques</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="atoutfeerique" title="Ajouter un atout féerique"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each atouts as |atout key|}}
<li class="item flexrow " data-item-id="{{atout._id}}" data-item-type="atout">
<img class="item-name-img" src="{{atout.img}}" />
<span class="item-field-label-long2">{{atout.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 item-field-label-long2-img">
<h3><label class="items-title-text">Pouvoirs</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Masque</label>
</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>
<span class="item-field-label-medium">
<label class="short-label">Usage</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="pouvoir" title="Ajouter un pouvoir"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each pouvoirs as |pouvoir key|}}
<li class="item flexrow " data-item-id="{{pouvoir._id}}" data-item-type="pouvoir">
<img class="item-name-img" src="{{pouvoir.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-pouvoir">{{pouvoir.name}}</a></span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.masquetype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.pouvoirtype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.niveau}}</span>
<span class="item-field-label-medium">{{pouvoir.system.pointsusagecourant}}/{{pouvoir.maxUsage}}</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">Capacités Naturelles</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="capacitenaturelle" title="Ajouter une capacité naturelle"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each capacites as |capa key|}}
<li class="item flexrow " data-item-id="{{capa._id}}" data-item-type="capacite">
<img class="item-name-img" src="{{capa.img}}" />
<span class="item-field-label-long2">{{capa.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>
</div>
{{!-- Magie Tab --}}
<div class="tab magie" data-group="primary" data-tab="magie">
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style">Point d'Ame</label>
<input type="text" class="item-field-label-short" name="system.magie.pointsame.value"
value="{{system.magie.pointsame.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.magie.pointsame.max"
value="{{system.magie.pointsame.max}}" data-dtype="Number" {{#if isGM}} {{else}} disabled {{/if}} />
</li>
</ul>
</div>
{{#each magieList as |magie idx|}}
<li class="item flexrow " data-item-id="{{magie.competence._id}}" data-item-type="competence">
<h3 class="flexrow"><label class="items-title-text "><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{magie.name}} {{magie.competence.system.niveau}} </a> </label>
<!-- <span>Rang : {{magie.rang}}</span> -->
<span>{{magie.rangSpecificName}}</span>
<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>
</h3>
</li>
{{#if (eq magie.name "Magie du Clan")}}
<div class="sheet-box color-bg-archetype">
<h4 class="items-title-text">Souffle de Combat</h4>
<ul class="item-list alternate-list">
{{#each sorts.soufflecombat as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
<h4 class="items-title-text">Souffle de Mouvement</h4>
<ul class="item-list alternate-list">
{{#each sorts.soufflemouvement as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
<h4 class="items-title-text">Souffle de l'Esprit</h4>
<ul class="item-list alternate-list">
{{#each sorts.souffleesprit as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
{{else}}
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
{{#each sorts as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
</div>
{{/if}}
{{/each}}
</div>
{{!-- Equipement Tab --}}
<div class="tab equipement" data-group="primary" data-tab="equipement">
<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>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="equipement" title="Créer un équipement"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each equipements as |equip key|}}
<li class="item flexrow " data-item-id="{{equip._id}}" data-item-type="equipement">
<img class="item-name-img" src="{{equip.img}}" />
<span class="item-field-label-long2">{{equip.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>
{{!-- Contact Tab --}}
<div class="tab contact" data-group="primary" data-tab="contact">
<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 item-field-label-long3">
<h3><label class="items-title-text">Contacts, Allies et Ennemis</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="contact" title="Créer un contact"><i
class="fas fa-plus"></i></a>
</div>
</li>
</div>
{{#each contacts as |contactList idx|}}
<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">{{contactList.label}}</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="contact" title="Créer un contact"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each contactList.list as |contact key|}}
<li class="item flexrow " data-item-id="{{contact._id}}" data-item-type="contact">
<img class="item-name-img" src="{{contact.img}}" />
<span class="item-field-label-long2">{{contact.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>
{{/each}}
</div>
{{!-- Biography Tab --}}
<div class="tab biodata" data-group="primary" data-tab="biodata">
<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 item-field-label-long2-img">
<h3><label class="items-title-text">Profils</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Type</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
</div>
</li>
{{#each profils as |profil key|}}
<li class="item flexrow " data-item-id="{{profil._id}}" data-item-type="profil">
<img class="item-name-img" src="{{profil.img}}" />
<span class="item-field-label-long2">{{profil.name}}</span>
<span class="item-field-label-medium">{{upperFirst profil.system.profiltype}}</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="flexrow">
<div class="grid-2col">
<ul>
<li class="flexrow item">
<label class="item-field-label-long2">Nom humain</label> <input type="text" class=""
name="system.biodata.nomhumain" value="{{system.biodata.nomhumain}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Activités</label> <input type="text" class=""
name="system.biodata.activites" value="{{system.biodata.activites}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Apparence masquée</label> <input type="text" class=""
name="system.biodata.apparencemasquee" value="{{system.biodata.apparencemasquee}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Apparence démasquée</label> <input type="text" class=""
name="system.biodata.apparencedemasquee" value="{{system.biodata.apparencedemasquee}}"
data-dtype="String" />
</li>
</ul>
<ul>
<li class="flexrow item">
<label class="item-field-label-long2">Titre et Famille</label> <input type="text" class=""
name="system.biodata.titrefamille" value="{{system.biodata.titrefamille}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Factions féériques</label> <input type="text" class=""
name="system.biodata.factionfeerique" value="{{system.biodata.factionfeerique}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Traits de caractères dominants</label> <input type="text" class=""
name="system.biodata.traitscaracteres" value="{{system.biodata.traitscaracteres}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Langues</label> <input type="text" class=""
name="system.biodata.langues" value="{{system.biodata.langues}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
<div class="grid grid-3col">
<div>
<ul>
<li class="flexrow item">
<label class="generic-label">Fortune</label>
<input type="text" class="" name="system.biodata.fortune" value="{{system.biodata.fortune}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Genre</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>
{{#if isGM}}
<li class="item flexrow">
<label class="generic-label">Fiche de Magie ?</label>
<input type="checkbox" class="item-field-label-short edit-item-data" name="system.biodata.magie"
{{checked system.biodata.magie}} />
</li>
{{/if}}
</ul>
</div>
<div>
<ul>
<li class="item flexrow">
<label class="generic-label">Taille Masquée</label>
<input type="text" class="" name="system.biodata.taillemasquee" value="{{system.biodata.taillemasquee}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Taille Démasquée</label>
<input type="text" class="" name="system.biodata.tailledemasquee"
value="{{system.biodata.tailledemasquee}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Type de taille</label>
<input type="text" class="" name="system.experience.typetaille" value="{{system.experience.typetaille}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Points d'héritage</label>
<input type="text" class="" name="system.rang.heritage.value" value="{{system.rang.heritage.value}}"
data-dtype="String" />
</li>
</ul>
</div>
<div>
<ul>
<li class="item flexrow">
<label class="generic-label">Poids Masqué</label>
<input type="text" class="" name="system.biodata.poidsmasquee" value="{{system.biodata.poidsmasquee}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Poids Démasqué</label>
<input type="text" class="" name="system.biodata.poidsdemasquee"
value="{{system.biodata.poidsdemasquee}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">XP</label>
<input type="text" class="" name="system.experience.value" value="{{system.experience.value}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">XP pour tricher</label>
<input type="text" class="" name="system.experience.pourtricher"
value="{{system.experience.pourtricher}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
{{#if isGM}}
{{#if system.biodata.magie}}
<div class="magie-text-helper"><strong>Magie activée : </strong>Glissez/Déplacez la/les compétences de Magie
nécessaires
depuis le compendium dans l'onglet "Magie", puis faites de même pour les sorts.
</div>
{{/if}}
{{/if}}
</div>
<div class="tab notes" data-group="primary" data-tab="notes">
<span>
<h3>Historique</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>Notes diverses</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor playernotes target="system.biodata.playernotes" button=true owner=owner editable=editable}}
</div>
<span>
<h3>Rêves étranges</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor revesetranges target="system.biodata.revesetranges" button=true owner=owner editable=editable}}
</div>
<span>
<h3>Secrets découverts</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor secretsdecouverts target="system.biodata.secretsdecouverts" button=true owner=owner
editable=editable}}
</div>
<span>
<h3>Questions en suspens</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor questions target="system.biodata.questions" button=true owner=owner editable=editable}}
</div>
</div>
</section>
</section>

View File

@@ -1,948 +0,0 @@
<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">
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "physical")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac"
data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" data-tooltip="Valeur actuelle" value="{{carac.value}}"
data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" data-tooltip="Rang" value="{{carac.rang}}"
data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
<div class="flexrow">
<ul class="item-list alternate-list">
{{#each system.caracteristiques as |carac key|}}
{{#if (eq kind "mental")}}
<li class="item flexrow ">
<h4 class="item-name-label competence-name roll-style"><a class="roll-carac"
data-key="{{key}}">{{carac.label}}</a></h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.value" value="{{carac.value}}" data-tooltip="Valeur actuelle"
data-dtype="Number" />
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.caracteristiques.{{key}}.rang" value="{{carac.rang}}" data-tooltip="Rang"
data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
</div>
</div>
<div class="flexrow">
<label class="item-field-label-short">PV</label>
<input type="text" class="item-field-label-short" name="system.pv.value" value="{{system.pv.value}}"
data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.max" value="{{system.pv.max}}" disabled
data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.mod" value="{{system.pv.mod}}"
data-dtype="Number" />
<label class="item-field-label-short">Malus</label>
<input type="text" class="item-field-label-short" value="{{pvMalus.value}}" data-dtype="Number" disabled />
<span>&nbsp;&nbsp;</span>
<select class="item-field-label-medium" type="text" name="system.statutmasque"
value="{{system.statutmasque}}" data-dtype="string">
{{selectOptions config.statutMasque selected=system.statutmasque}}
</select>
<span>&nbsp;&nbsp;</span>
<label class="item-field-label-short">Tricherie</label>
<input type="text" class="item-field-label-short-num" name="system.rang.tricherie.value"
value="{{system.rang.tricherie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short-num" name="system.rang.tricherie.max"
value="{{system.rang.tricherie.max}}" data-dtype="Number" />
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="competences">Compétences</a>
<a class="item" data-tab="fee">Fée</a>
{{#if system.biodata.magie}}
<a class="item" data-tab="magie">Magie</a>
{{/if}}
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="equipement">Equipement</a>
<a class="item" data-tab="contact">Contacts</a>
<a class="item" data-tab="biodata">Bio</a>
<a class="item" data-tab="notes">Notes</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Competence Tab --}}
<div class="tab competences" data-group="primary" data-tab="competences">
<div class="flexcol">
<div class="grid-2col">
<div>
{{#each utileSkillsPhysical as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.html skillDef=skillDef keyProfil=keyProfil
config=config}}
{{/each}}
</div>
<div>
{{#each utileSkillsMental as |skillDef keyProfil|}}
{{> systems/fvtt-les-heritiers/templates/partial-utile-skills.html skillDef=skillDef keyProfil=keyProfil
config=config}}
{{/each}}
</div>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow">
<span class="item-field-label-long2">
<h3><label class="items-title-text">Compétences Futiles</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Niveau</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="competence" title="Ajouter une compétence futile"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each futileSkills as |skill key|}}
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
<span class="item-field-label-long2 roll-style"><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{skill.name}}</a></span>
<select class="item-field-label-short edit-item-data" type="text" data-item-field="niveau"
value="{{skill.system.niveau}}" data-dtype="Number">
{{selectOptions @root.config.listNiveau selected=skill.system.niveau}}
</select>
<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>
{{!-- 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>
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-medium"><strong>Esquive</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.masquee"
value="{{system.combat.esquive.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.esquive.demasquee"
value="{{system.combat.esquive.demasquee}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-medium"><strong>Parade</strong></label>
<label class="item-field-label-medium">Masquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.masquee"
value="{{system.combat.parade.masquee}}" data-dtype="Number" />
<label class="item-field-label-medium">Démasquée</label>
<input type="text" class="item-field-label-short" name="system.combat.parade.demasquee"
value="{{system.combat.parade.demasquee}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Rés. physique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancephysique.value"
value="{{system.combat.resistancephysique.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-long">Rés. psychique</label>
<input type="text" class="item-field-label-short" name="system.combat.resistancepsychique.value"
value="{{system.combat.resistancepsychique.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-medium">Protection : </label>
<input type="text" class="item-field-label-short" name="system.combat.protection.value"
value="{{system.combat.protection.value}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item items-title-bg">
<label class="item-field-label-long">Effets secondaires</label>
<input type="text" class="item-field-label-short" name="system.combat.effetssecondaires"
value="{{system.combat.effetssecondaires}}" data-dtype="String" />
<label class="item-field-label-short">&nbsp;&nbsp;</label>
<label class="item-field-label-long">Dissimulation : </label>
<input type="text" class="item-field-label-short" name="system.combat.dissimulation.value"
value="{{system.combat.dissimulation.value}}" data-dtype="Number" />
</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">Dégats</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Attaque</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">
{{arme.system.degats}}
</span>
<span class="item-field-label-short">
<button class="roll-attaque-arme button-sheet-roll">Attaque</button>
</span>
<span class="item-field-label-short">
<button class="roll-assomer-arme button-sheet-roll">Assommer</button>
</span>
{{#if arme.system.isMelee}}
<span class="item-field-label-short">
<button class="roll-attaque-charge-arme button-sheet-roll">Charger</button>
</span>
<span class="item-field-label-short">
<button class="roll-attaque-brutale-arme button-sheet-roll button-sheet-roll-long1">Attaque
brutale</button>
</span>
{{/if}}
<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 protection"><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>
{{!-- Fee Tab --}}
<div class="tab fee" data-group="primary" data-tab="fee">
<div class="flexrow">
<li class="item flexrow " data-item-id="{{fee._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{fee.img}}" />
<span class="item-field-label-long2">{{fee.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>
</div>
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short"
data-rang-key="feerie">Féerie</a></label>
<input type="text" class="item-field-label-short" name="system.rang.feerie.value"
value="{{system.rang.feerie.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.feerie.max"
value="{{system.rang.feerie.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-medium roll-style"><a class="roll-rang item-field-label-short"
data-rang-key="masque">Masque</a></label>
<input type="text" class="item-field-label-short" name="system.rang.masque.value"
value="{{system.rang.masque.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.rang.masque.max"
value="{{system.rang.masque.max}}" data-dtype="Number" />
<span class="item-field-label-medium"></span>
<label class="item-field-label-long roll-style"><a class="dialog-recup-usage item-field-label-long">Récup.
P. d'Usage</a></label>
</li>
</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">Avantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="avantage" title="Ajouter un avantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each avantages as |avantage key|}}
<li class="item flexrow " data-item-id="{{avantage._id}}" data-item-type="avantage">
<img class="item-name-img" src="{{avantage.img}}" />
<span class="item-field-label-long2">{{avantage.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">Désavantages</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="desavantage" title="Ajouter un désavantage"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each desavantages as |desavantage key|}}
<li class="item flexrow " data-item-id="{{desavantage._id}}" data-item-type="desavantage">
<img class="item-name-img" src="{{desavantage.img}}" />
<span class="item-field-label-long2">{{desavantage.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">Atouts Féériques</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="atoutfeerique" title="Ajouter un atout féerique"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each atouts as |atout key|}}
<li class="item flexrow " data-item-id="{{atout._id}}" data-item-type="atout">
<img class="item-name-img" src="{{atout.img}}" />
<span class="item-field-label-long2">{{atout.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 item-field-label-long2-img">
<h3><label class="items-title-text">Pouvoirs</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Masque</label>
</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>
<span class="item-field-label-medium">
<label class="short-label">Usage</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="pouvoir" title="Ajouter un pouvoir"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each pouvoirs as |pouvoir key|}}
<li class="item flexrow " data-item-id="{{pouvoir._id}}" data-item-type="pouvoir">
<img class="item-name-img" src="{{pouvoir.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-pouvoir">{{pouvoir.name}}</a></span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.masquetype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.pouvoirtype}}</span>
<span class="item-field-label-medium">{{upperFirst pouvoir.system.niveau}}</span>
<span class="item-field-label-medium">{{pouvoir.system.pointsusagecourant}}/{{pouvoir.maxUsage}}</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">Capacités Naturelles</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="capacitenaturelle" title="Ajouter une capacité naturelle"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each capacites as |capa key|}}
<li class="item flexrow " data-item-id="{{capa._id}}" data-item-type="capacite">
<img class="item-name-img" src="{{capa.img}}" />
<span class="item-field-label-long2">{{capa.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>
</div>
{{!-- Magie Tab --}}
<div class="tab magie" data-group="primary" data-tab="magie">
<div class="flexrow">
<ul>
<li class="flexrow item">
<label class="item-field-label-medium roll-style">Point d'Ame</label>
<input type="text" class="item-field-label-short" name="system.magie.pointsame.value"
value="{{system.magie.pointsame.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.magie.pointsame.max"
value="{{system.magie.pointsame.max}}" data-dtype="Number" {{#if isGM}} {{else}} disabled {{/if}} />
</li>
</ul>
</div>
{{#each magieList as |magie idx|}}
<li class="item flexrow " data-item-id="{{magie.competence._id}}" data-item-type="competence">
<h3 class="flexrow"><label class="items-title-text "><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{magie.name}} {{magie.competence.system.niveau}} </a> </label>
<!-- <span>Rang : {{magie.rang}}</span> -->
<span>{{magie.rangSpecificName}}</span>
<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>
</h3>
</li>
{{#if (eq magie.name "Magie du Clan")}}
<div class="sheet-box color-bg-archetype">
<h4 class="items-title-text">Souffle de Combat</h4>
<ul class="item-list alternate-list">
{{#each sorts.soufflecombat as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
<h4 class="items-title-text">Souffle de Mouvement</h4>
<ul class="item-list alternate-list">
{{#each sorts.soufflemouvement as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
<h4 class="items-title-text">Souffle de l'Esprit</h4>
<ul class="item-list alternate-list">
{{#each sorts.souffleesprit as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
{{else}}
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
{{#each sorts as |niveau key|}}
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header item-field-label-long2-img">
<h4><label class="items-title-text">Niveau {{key}} {{niveau.nomNiveau}}</label></h4>
</span>
<div class="item-controls item-controls-fixed">
{{#if @root.isGM}}
<a class="item-control item-add" data-type="sort" data-sort-competence={{magie.name}}
title="Ajouter un sort"><i class="fas fa-plus"></i></a>
{{/if}}
</div>
</li>
{{#each niveau.sorts as |sort key|}}
<li class="item flexrow " data-item-id="{{sort._id}}" data-item-type="sort">
<img class="item-name-img" src="{{sort.img}}" />
<span class="item-field-label-long2 roll-style"><a class="roll-sort">{{sort.name}}</a></span>
{{#if sort.system.informatif}}
<span class="item-field-label-medium">Informatif</span>
{{else}}
<span class="item-field-label-medium">{{upperFirst sort.system.niveau}}</span>
{{/if}}
<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}}
{{/each}}
</ul>
</div>
{{/if}}
{{/each}}
</div>
{{!-- Equipement Tab --}}
<div class="tab equipement" data-group="primary" data-tab="equipement">
<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>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="equipement" title="Créer un équipement"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each equipements as |equip key|}}
<li class="item flexrow " data-item-id="{{equip._id}}" data-item-type="equipement">
<img class="item-name-img" src="{{equip.img}}" />
<span class="item-field-label-long2">{{equip.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>
{{!-- Contact Tab --}}
<div class="tab contact" data-group="primary" data-tab="contact">
<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 item-field-label-long3">
<h3><label class="items-title-text">Contacts, Allies et Ennemis</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="contact" title="Créer un contact"><i
class="fas fa-plus"></i></a>
</div>
</li>
</div>
{{#each contacts as |contactList idx|}}
<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">{{contactList.label}}</label></h3>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="contact" title="Créer un contact"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each contactList.list as |contact key|}}
<li class="item flexrow " data-item-id="{{contact._id}}" data-item-type="contact">
<img class="item-name-img" src="{{contact.img}}" />
<span class="item-field-label-long2">{{contact.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>
{{/each}}
</div>
{{!-- Biography Tab --}}
<div class="tab biodata" data-group="primary" data-tab="biodata">
<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 item-field-label-long2-img">
<h3><label class="items-title-text">Profils</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Type</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
</div>
</li>
{{#each profils as |profil key|}}
<li class="item flexrow " data-item-id="{{profil._id}}" data-item-type="profil">
<img class="item-name-img" src="{{profil.img}}" />
<span class="item-field-label-long2">{{profil.name}}</span>
<span class="item-field-label-medium">{{upperFirst profil.system.profiltype}}</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="flexrow">
<div class="grid-2col">
<ul>
<li class="flexrow item">
<label class="item-field-label-long2">Nom humain</label> <input type="text" class=""
name="system.biodata.nomhumain" value="{{system.biodata.nomhumain}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Activités</label> <input type="text" class=""
name="system.biodata.activites" value="{{system.biodata.activites}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Apparence masquée</label> <input type="text" class=""
name="system.biodata.apparencemasquee" value="{{system.biodata.apparencemasquee}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Apparence démasquée</label> <input type="text" class=""
name="system.biodata.apparencedemasquee" value="{{system.biodata.apparencedemasquee}}"
data-dtype="String" />
</li>
</ul>
<ul>
<li class="flexrow item">
<label class="item-field-label-long2">Titre et Famille</label> <input type="text" class=""
name="system.biodata.titrefamille" value="{{system.biodata.titrefamille}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Factions féériques</label> <input type="text" class=""
name="system.biodata.factionfeerique" value="{{system.biodata.factionfeerique}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Traits de caractères dominants</label> <input type="text" class=""
name="system.biodata.traitscaracteres" value="{{system.biodata.traitscaracteres}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-long2">Langues</label> <input type="text" class=""
name="system.biodata.langues" value="{{system.biodata.langues}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
<div class="grid grid-3col">
<div>
<ul>
<li class="flexrow item">
<label class="generic-label">Fortune</label>
<input type="text" class="" name="system.biodata.fortune" value="{{system.biodata.fortune}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Genre</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>
{{#if isGM}}
<li class="item flexrow">
<label class="generic-label">Fiche de Magie ?</label>
<input type="checkbox" class="item-field-label-short edit-item-data" name="system.biodata.magie"
{{checked system.biodata.magie}} />
</li>
{{/if}}
</ul>
</div>
<div>
<ul>
<li class="item flexrow">
<label class="generic-label">Taille Masquée</label>
<input type="text" class="" name="system.biodata.taillemasquee" value="{{system.biodata.taillemasquee}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Taille Démasquée</label>
<input type="text" class="" name="system.biodata.tailledemasquee"
value="{{system.biodata.tailledemasquee}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Type de taille</label>
<input type="text" class="" name="system.experience.typetaille" value="{{system.experience.typetaille}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Points d'héritage</label>
<input type="text" class="" name="system.rang.heritage.value" value="{{system.rang.heritage.value}}"
data-dtype="String" />
</li>
</ul>
</div>
<div>
<ul>
<li class="item flexrow">
<label class="generic-label">Poids Masqué</label>
<input type="text" class="" name="system.biodata.poidsmasquee" value="{{system.biodata.poidsmasquee}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Poids Démasqué</label>
<input type="text" class="" name="system.biodata.poidsdemasquee"
value="{{system.biodata.poidsdemasquee}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">XP</label>
<input type="text" class="" name="system.experience.value" value="{{system.experience.value}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">XP pour tricher</label>
<input type="text" class="" name="system.experience.pourtricher"
value="{{system.experience.pourtricher}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
{{#if isGM}}
{{#if system.biodata.magie}}
<div class="magie-text-helper"><strong>Magie activée : </strong>Glissez/Déplacez la/les compétences de Magie
nécessaires
depuis le compendium dans l'onglet "Magie", puis faites de même pour les sorts.
</div>
{{/if}}
{{/if}}
</div>
<div class="tab notes" data-group="primary" data-tab="notes">
<span>
<h3>Historique</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>Notes diverses</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor playernotes target="system.biodata.playernotes" button=true owner=owner editable=editable}}
</div>
<span>
<h3>Rêves étranges</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor revesetranges target="system.biodata.revesetranges" button=true owner=owner editable=editable}}
</div>
<span>
<h3>Secrets découverts</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor secretsdecouverts target="system.biodata.secretsdecouverts" button=true owner=owner
editable=editable}}
</div>
<span>
<h3>Questions en suspens</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor questions target="system.biodata.questions" button=true owner=owner editable=editable}}
</div>
</div>
</section>
</form>

View File

@@ -1,30 +0,0 @@
<div class="chat-message-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<h4 class=chat-actor-name>{{alias}}</h4>
</div>
<hr>
{{#if actionImg}}
<div>
<img class="chat-icon" src="{{actionImg}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>
<div>
<ul>
<li>Assomer {{defenderName}} en état de : {{etatAssommer}}</li>
{{#if isSuccess}}
<li>Marge : {{marge}}</li>
<li>{{defenderName}} est assomé pour {{dureeAssommer}} minutes !</li>
{{else}}
<li>{{defenderName}} n'a pas été assomé et est conscient la tentative !</li>
{{/if}}
</ul>
</div>

View File

@@ -1,43 +0,0 @@
<div class="chat-message-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<h4 class=chat-actor-name>{{alias}}</h4>
</div>
<hr>
{{#if actionImg}}
<div>
<img class="chat-icon" src="{{actionImg}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>
<div>
<ul>
<li>Défense de {{defenderName}} : {{defenderMode}} ({{defenderValue}})</li>
{{#if isSuccess}}
<li>Marge : {{marge}}</li>
<li>Degats de l'arme : {{degatsArme}}</li>
{{#if (eq attaqueCible "membre")}}
<li><strong>Cible un membre : La cible a -2 de malus sur ces actions avec ce membre (mouvement 2 si jambes)</strong>
</li>
{{/if}}
{{#if (eq attaqueCible "main")}}
<li><strong>Cible une main : La cible ne peut plus utiliser sa main</strong></li>
{{/if}}
{{#if isCriticalSuccess}}
<Li>Critique : Aubaine ou +2 aux dégats ci-dessus</li>
{{/if}}
{{else}}
<li>Echec face à la {{defenderMode}} !</li>
{{/if}}
</ul>
</div>

View File

@@ -1,176 +0,0 @@
{{!-- Chat Card for Roll Results --}}
<div class="heritiers-chat-card">
{{!-- Header --}}
<div class="chat-card-header">
{{#if actorImg}}
<img class="chat-actor-avatar" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<div class="chat-actor-info">
<h4 class="chat-actor-name">{{alias}}</h4>
{{#if competence}}
<div class="chat-action-name">{{competence.name}}{{#if arme}} - {{arme.name}}{{/if}}</div>
{{else if pouvoir}}
<div class="chat-action-name">{{pouvoir.name}}</div>
{{else if sort}}
<div class="chat-action-name">{{sort.name}}</div>
{{else if rang}}
<div class="chat-action-name">{{rang.label}}</div>
{{else}}
<div class="chat-action-name">{{carac.label}}</div>
{{/if}}
</div>
{{#if actionImg}}
<img class="chat-action-icon" src="{{actionImg}}" alt="{{name}}" />
{{/if}}
</div>
{{!-- Attack Type Badge --}}
{{#if attackType}}
<div class="chat-attack-badge">{{attackType}}</div>
{{/if}}
{{!-- Roll Calculation Grid --}}
{{#unless noRoll}}
<div class="chat-roll-grid">
<div class="chat-roll-item">
<span class="chat-roll-label">Carac</span>
<span class="chat-roll-value">{{carac.label}} ({{carac.value}})</span>
</div>
{{#if rang}}
<div class="chat-roll-item">
<span class="chat-roll-label">Rang</span>
<span class="chat-roll-value">{{rang.value}}</span>
</div>
{{/if}}
{{#if competence}}
<div class="chat-roll-item">
<span class="chat-roll-label">Compétence</span>
<span class="chat-roll-value">{{competence.system.niveau}}</span>
</div>
{{/if}}
{{#if useSpecialite}}
<div class="chat-roll-item">
<span class="chat-roll-label">Spécialité</span>
<span class="chat-roll-value">+1</span>
</div>
{{/if}}
<div class="chat-roll-item">
<span class="chat-roll-label">Formule</span>
<span class="chat-roll-value">{{diceFormula}}</span>
</div>
<div class="chat-roll-item">
<span class="chat-roll-label">Dé</span>
<span class="chat-roll-value chat-dice-result">{{diceResult}}</span>
</div>
</div>
{{/unless}}
{{!-- Result Display --}}
{{#unless noRoll}}
<div class="chat-result-box {{#if isSuccess}}success{{else}}{{#if isCriticalFailure}}critical-failure{{else}}failure{{/if}}{{/if}}">
<div class="chat-result-total">
<span class="chat-result-label">Total</span>
<span class="chat-result-number">{{finalResult}}</span>
</div>
{{#if (gt sdValue "-1")}}
<div class="chat-result-details">
<span>SD: {{sdValue}}</span>
<span>Marge: {{marge}}</span>
</div>
<div class="chat-result-status">
{{#if isCriticalSuccess}}
<i class="fas fa-star"></i> RÉUSSITE CRITIQUE !
{{else if isCriticalFailure}}
<i class="fas fa-skull"></i> ÉCHEC CRITIQUE !
{{else if isSuccess}}
<i class="fas fa-check"></i> Succès
{{else}}
<i class="fas fa-times"></i> Échec
{{/if}}
</div>
{{/if}}
{{#if isBrelan}}
<div class="chat-special-result"><i class="fas fa-dice"></i> Brelan !</div>
{{/if}}
{{#if isSuite}}
<div class="chat-special-result"><i class="fas fa-dice"></i> Suite !</div>
{{/if}}
</div>
{{/unless}}
{{!-- Tricherie Adjacent Faces --}}
{{#if adjacentFaces}}
<div class="chat-tricherie-box">
<span class="chat-tricherie-label">Faces adjacentes (2 pts Tricherie) :</span>
<div class="chat-tricherie-faces">
{{#each adjacentFaces as |value key|}}
<a class="roll-tricherie-2 chat-tricherie-face" data-dice-value="{{value}}">{{value}}</a>
{{/each}}
</div>
</div>
{{/if}}
{{!-- Details Section (Collapsible) --}}
{{#if pouvoir}}
<details class="chat-details-section">
<summary class="chat-details-summary"><i class="fas fa-magic"></i> Détails du pouvoir</summary>
<div class="chat-details-content">
<div><strong>Effet :</strong> {{pouvoir.system.effet}}</div>
{{#if (ne pouvoir.system.duree "")}}
<div><strong>Durée :</strong> {{pouvoir.system.duree}}</div>
{{/if}}
{{#if (ne pouvoir.system.portee "")}}
<div><strong>Portée :</strong> {{pouvoir.system.portee}}</div>
{{/if}}
{{#if (ne pouvoir.system.resistance "")}}
<div><strong>Résistance :</strong> {{pouvoir.system.resistance}}</div>
{{/if}}
{{#if (ne pouvoir.system.zoneeffet "")}}
<div><strong>Zone d'effet :</strong> {{pouvoir.system.zoneeffet}}</div>
{{/if}}
{{#if (ne pouvoir.system.cibles "")}}
<div><strong>Cibles :</strong> {{pouvoir.system.cibles}}</div>
{{/if}}
<div><strong>Points d'usage :</strong> {{pouvoirPointsUsage}}</div>
</div>
</details>
{{/if}}
{{#if sort}}
<details class="chat-details-section">
<summary class="chat-details-summary"><i class="fas fa-hat-wizard"></i> Détails du sort</summary>
<div class="chat-details-content">
{{#if (ne sort.system.duree "")}}
<div><strong>Durée :</strong> {{sort.system.duree}}</div>
{{/if}}
{{#if (ne sort.system.portee "")}}
<div><strong>Portée :</strong> {{sort.system.portee}}</div>
{{/if}}
{{#if (ne sort.system.ingredients "")}}
<div><strong>Ingrédients :</strong> {{sort.system.ingredients}}</div>
{{/if}}
{{#if (ne sort.system.resistance "")}}
<div><strong>Résistance :</strong> {{sort.system.resistance}}</div>
{{/if}}
{{#if spendEsprit}}
<div><strong>Points d'Esprit :</strong> 1</div>
{{else}}
<div><strong>Points d'Âme :</strong> {{sortPointsAme}}</div>
{{#if (eq sort.system.competence "Magie du Clan")}}
<div><strong>Souffle :</strong> {{sort.system.souffle}}</div>
<div><strong>Coût PV :</strong> 2</div>
{{/if}}
{{/if}}
</div>
</details>
{{/if}}
</div>

View File

@@ -1,145 +0,0 @@
<div class="chat-message-header">
{{#if actorImg}}
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
{{/if}}
<h4 class=chat-actor-name>{{alias}}</h4>
</div>
<hr>
{{#if actionImg}}
<div>
<img class="chat-icon" src="{{actionImg}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>
<div>
<ul>
<li class="heritiers-roll"><strong>Caractéristique :</strong> {{carac.label}} ({{carac.value}})</li>
{{#if rang}}
<li><strong>{{rang.label}} :</strong> {{rang.value}}</li>
{{/if}}
{{#if competence}}
<li><strong>Compétence :</strong> {{competence.name}} ({{competence.system.niveau}})</li>
{{#if useSpecialite}}
<li>Bonus de spécialité +1</li>
{{/if}}
{{/if}}
{{#if arme}}
<li><strong>Attaque avec : </strong>{{arme.name}}</li>
{{#if (eq mode "assommer")}}
<li>Attaque pour assommer</li>
{{/if}}
{{/if}}
{{#if pouvoir}}
<li><strong>Pouvoir</strong> : {{pouvoir.name}}</li>
<li><strong>Effet</strong> : {{pouvoir.system.effet}}</li>
{{#if (ne pouvoir.system.duree "")}}
<li><strong>Durée :</strong> {{pouvoir.system.duree}}</li>
{{/if}}
{{#if (ne pouvoir.system.portee "")}}
<li><strong>Portée :</strong> {{pouvoir.system.portee}}</li>
{{/if}}
{{#if (ne pouvoir.system.resistance "")}}
<li><strong>Résistance :</strong> {{pouvoir.system.resistance}}</li>
{{/if}}
{{#if (ne pouvoir.system.resistanceautre "")}}
<li><strong>Résistance autre :</strong> {{pouvoir.system.resistanceautre}}</li>
{{/if}}
{{#if (ne pouvoir.system.zoneeffet "")}}
<li><strong>Zone d'effet :</strong> {{pouvoir.system.zoneeffet}}</li>
{{/if}}
{{#if (ne pouvoir.system.cibles "")}}
<li><strong>Cibles :</strong> {{pouvoir.system.cibles}}</li>
{{/if}}
{{#if (ne pouvoir.system.virulence "")}}
<li><strong>Virulence :</strong> {{pouvoir.system.virulence}}</li>
{{/if}}
<li><strong>Points d'usage consommés :</strong> {{pouvoirPointsUsage}}</li>
{{/if}}
{{#if sort}}
<li><strong>Sort :</strong> {{sort.name}}</li>
{{#if (ne sort.system.resistance "")}}
<li><strong>Résistance :</strong> {{sort.system.resistance}}</li>
{{/if}}
{{#if (ne sort.system.concentration "")}}
<li><strong>Concentration :</strong> {{sort.system.concentration}}</li>
{{/if}}
{{#if (ne sort.system.duree "")}}
<li><strong>Durée :</strong> {{sort.system.duree}}</li>
{{/if}}
{{#if (ne sort.system.portee "")}}
<li><strong>Portée :</strong> {{sort.system.portee}}</li>
{{/if}}
{{#if (ne sort.system.ingredients "")}}
<li><strong>Ingrédients :</strong> {{sort.system.ingredients}}</li>
{{/if}}
{{#if (ne sort.system.coutactivation "")}}
<li><strong>Coût d'activation :</strong> {{sort.system.coutactivation}}</li>
{{/if}}
{{#if spendEsprit}}
<li><strong>Points d'Esprit dépensé :</strong> 1</li>
{{else}}
<li><strong>Coût en points d'Âme</strong> : {{sortPointsAme}}</li>
{{#if (eq sort.system.competence "Magie du Clan")}}
<li><strong>Souffle :</strong> {{sort.system.souffle}}</li>
<li><strong>Cout en PV :</strong> 2</li>
{{/if}}
{{/if}}
{{/if}}
{{#if forcedValue}}
<li>Vous dépensez 2 points de Tricherie et utilisez une face adjacente du dé !</li>
{{/if}}
{{#if noRoll}}
{{else}}
<li><strong>Formule :</strong> {{diceFormula}}</li>
<li><strong>Résultat du dé :</strong> {{diceResult}} </li>
{{#if adjacentFaces}}
<li><strong>Faces adjacentes :</strong>
{{#each adjacentFaces as |value key|}}
<a class="roll-tricherie-2" data-dice-value="{{value}}">{{value}}</a>
{{/each}}
</li>
{{/if}}
<li><strong>Total : {{finalResult}} {{#if (gt sdValue "-1")}}(Marge : {{marge}}){{/if}}</strong></li>
{{#if (gt sdValue "-1")}}
<li><strong>Seuil de difficulté :</strong> {{sdValue}}</li>
{{#if isSuccess}}
<li class="chat-success">Succès...
</li>
{{else}}
<li class="chat-failure">Echec...</li>
{{/if}}
{{/if}}
{{#if isBrelan}}
<li class="chat-success">Brelan sur 3 dés !</li>
{{/if}}
{{#if isSuite}}
<li class="chat-success">Suite sur 3 dés !</li>
{{/if}}
{{#if isCriticalSuccess}}
<li class="chat-success">Réussite Critique !!!</li>
{{/if}}
{{#if isCriticalFailure}}
<li class="chat-failure">Echec Critique !!!</li>
{{/if}}
{{/if}}
</ul>
</div>

View File

@@ -1,6 +0,0 @@
{{#if data.isGM}}
<h3>GM Notes : </h3>
<div class="form-group editor">
{{editor data.biodata.gmnotes target="system.biodata.gmnotes" button=true owner=owner editable=editable}}
</div>
{{/if}}

View File

@@ -1,40 +0,0 @@
<section class="{{cssClass}}" autocomplete="off">
{{> systems/fvtt-les-heritiers/templates/partial-item-header.html}}
{{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}}
{{!-- Sheet Body --}}
<section class="sheet-body">
{{> systems/fvtt-les-heritiers/templates/partial-item-description.html}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label item-field-label-long">Lieu : </label>
<input type="text" class="item-field-label-long" name="system.lieu"
value="{{system.lieu}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Prix : </label>
<input type="text" class="item-field-label-short" name="system.prix"
value="{{system.prix}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Quantité : </label>
<input type="text" class="item-field-label-short" name="system.quantite"
value="{{system.quantite}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Equipé ? : </label>
<input type="checkbox" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.equipped" {{checked system.equipped}}/>
</li>
</div>
</section>
</section>

View File

@@ -1,121 +0,0 @@
<section class="{{cssClass}}" autocomplete="off">
{{> systems/fvtt-les-heritiers/templates/partial-item-header.html}}
{{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}}
{{!-- Sheet Body --}}
<section class="sheet-body">
{{> systems/fvtt-les-heritiers/templates/partial-item-description.html}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="item-field-label-long">Catégorie : </label>
<select class="item-field-label-long" type="text" name="system.categorie"
value="{{system.categorie}}" data-dtype="string">
{{selectOptions config.categorieArme selected=system.categorie}}
</select>
</li>
<li class="flexrow item">
<label class="item-field-label-long">Type : </label>
<select class="item-field-label-long" type="text" name="system.armetype"
value="{{system.armetype}}" data-dtype="string">
{{selectOptions config.typeArme selected=system.armetype}}
</select>
</li>
<li class="flexrow item">
<label class="item-field-label-long">Degats : </label>
<input type="text" class="item-field-label-short" name="system.degats" value="{{system.degats}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Precision : </label>
<input type="text" class="item-field-label-short" name="system.precision"
value="{{system.precision}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Cadence : </label>
<input type="text" class="item-field-label-short" name="system.cadence"
value="{{system.cadence}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Enraiement : </label>
<input type="text" class="item-field-label-short" name="system.enraiement"
value="{{system.enraiement}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Magasin : </label>
<input type="text" class="item-field-label-short" name="system.magasin"
value="{{system.magasin}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Charge : </label>
<input type="text" class="item-field-label-short" name="system.charge"
value="{{system.charge}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Portée : </label>
<input type="text" class="item-field-label-short" name="system.portee"
value="{{system.portee}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Légalité : </label>
<select class="item-field-label-long" type="text" name="system.legalite"
value="{{system.legalite}}" data-dtype="string">
{{selectOptions config.armeLegalite selected=system.legalite}}
</select>
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Dissimulation : </label>
<select class="item-field-label-long" type="text" name="system.dissimulation"
value="{{system.dissimulation}}" data-dtype="string">
{{selectOptions config.armeDissimulation selected=system.dissimulation}}
</select>
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Zone : </label>
<input type="text" class="item-field-label-short" name="system.zone"
value="{{system.zone}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Temps : </label>
<input type="text" class="item-field-label-long" name="system.temps"
value="{{system.temps}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Allumage : </label>
<input type="text" class="item-field-label-long" name="system.allumage"
value="{{system.allumage}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Special : </label>
<input type="text" class="item-field-label-long" name="system.special"
value="{{system.special}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Prix : </label>
<input type="text" class="item-field-label-short" name="system.prix"
value="{{system.prix}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Quantité : </label>
<input type="text" class="item-field-label-short" name="system.quantite"
value="{{system.quantite}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Equipé ? : </label>
<input type="checkbox" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.equipped" {{checked system.equipped}}/>
</li>
</div>
</section>
</section>

View File

@@ -1,20 +0,0 @@
<section class="{{cssClass}}" autocomplete="off">
{{> systems/fvtt-les-heritiers/templates/partial-item-header.html}}
{{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}}
{{!-- Sheet Body --}}
<section class="sheet-body">
{{> systems/fvtt-les-heritiers/templates/partial-item-description.html}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
</ul>
</div>
</section>
</section>

View File

@@ -1,22 +0,0 @@
<section class="{{cssClass}}" autocomplete="off">
{{> systems/fvtt-les-heritiers/templates/partial-item-header.html}}
{{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}}
{{!-- Sheet Body --}}
<section class="sheet-body">
{{> systems/fvtt-les-heritiers/templates/partial-item-description.html}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
</ul>
</div>
</section>
</section>

View File

@@ -1,81 +0,0 @@
<section class="{{cssClass}}" autocomplete="off">
{{> systems/fvtt-les-heritiers/templates/partial-item-header.html}}
{{> systems/fvtt-les-heritiers/templates/partial-item-nav.html}}
{{!-- Sheet Body --}}
<section class="sheet-body">
{{> systems/fvtt-les-heritiers/templates/partial-item-description.html}}
<div class="tab details" data-group="primary" data-tab="details">
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Type </label>
<select class="status-small-label color-class-common item-field-label-long" type="text"
name="system.pouvoirtype" value="{{system.pouvoirtype}}" data-dtype="string">
{{selectOptions config.typePouvoir selected=system.pouvoirtype}}
</select>
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Activation </label>
<input type="text" class="padd-right color-class-common item-field-label-long3"
name="system.activation" value="{{system.activation}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Cibles </label>
<input type="text" class="padd-right color-class-common item-field-label-long3"
name="system.cibles" value="{{system.cibles}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Effet </label>
<textarea rows="6" type="text" class="padd-right color-class-common item-field-label-long3" name="system.effet"
data-dtype="String">{{system.effet}}</textarea>
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Portée </label>
<input type="text" class="padd-right color-class-common item-field-label-long3"
name="system.portee" value="{{system.portee}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Résistance</label>
<select class="status-small-label color-class-common item-field-label-long" type="text"
name="system.resistance" value="{{system.resistance}}" data-dtype="string">
{{selectOptions config.resistancePouvoir selected=system.resistance}}
</select>
</li>
{{#if (eq system.resistance "autre")}}
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Résistance (Autre) </label>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-long3"
name="system.resistanceautre" value="{{system.resistanceautre}}" data-dtype="String" />
</li>
{{/if}}
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Virulence (ie Poison) ? </label>
<input type="checkbox" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.isvirulence" {{checked system.isvirulence}}/>
</li>
{{#if system.isvirulence}}
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Virulence </label>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-long3"
name="system.virulence" value="{{system.virulence}}" data-dtype="String" />
</li>
{{/if}}
</ul>
</div>
</section>
</section>

View File

@@ -17,6 +17,7 @@
</select> </select>
</li> </li>
{{#if (eq system.categorie "utile")}}
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label item-field-label-long2">Profil </label> <label class="generic-label item-field-label-long2">Profil </label>
<select class="status-small-label color-class-common item-field-label-long" type="text" name="system.profil" <select class="status-small-label color-class-common item-field-label-long" type="text" name="system.profil"
@@ -24,6 +25,7 @@
{{selectOptions config.competenceProfil selected=system.profil labelAttr="name"}} {{selectOptions config.competenceProfil selected=system.profil labelAttr="name"}}
</select> </select>
</li> </li>
{{/if}}
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label item-field-label-long2">Compétence de Prédilection ? </label> <label class="generic-label item-field-label-long2">Compétence de Prédilection ? </label>
@@ -80,13 +82,13 @@
{{#each system.specialites as |specialite key|}} {{#each system.specialites as |specialite key|}}
<li class="specialite-item item flexrow" data-specialite-index="{{key}}"> <li class="specialite-item item flexrow" data-specialite-index="{{key}}">
<input type="text" class="padd-right color-class-common edit-specialite" value="{{specialite.name}}" <input type="text" class="padd-right color-class-common edit-specialite" value="{{specialite.name}}"
data-dtype="String" data-action="editSpecialite" /> data-dtype="String" />
<a class="item-control delete-specialite" title="Supprimer une specialité" data-action="deleteSpecialite"><i <a class="item-control delete-specialite" title="Supprimer une specialité" data-action="deleteSpecialite"><i
class="fas fa-trash"></i></a> class="fas fa-trash"></i></a>
</li> </li>
<li class="specialite-item item flexrow" data-specialite-index="{{key}}"> <li class="specialite-item item flexrow" data-specialite-index="{{key}}">
<textarea row="4" type="text" class="padd-right color-class-common edit-specialite-description" <textarea row="4" type="text" class="padd-right color-class-common edit-specialite-description"
data-dtype="String" data-action="editSpecialiteDescription">{{specialite.description}}</textarea> data-dtype="String">{{specialite.description}}</textarea>
</li> </li>
<hr> <hr>
{{/each}} {{/each}}

Some files were not shown because too many files have changed in this diff Show More