Gestion des traits d'arme et des munitions

This commit is contained in:
2026-04-21 18:50:49 +02:00
parent 74f1b581f7
commit 6ef454d533
22 changed files with 1448 additions and 195 deletions

View File

@@ -40,4 +40,10 @@
{{ localize 'MGT2.Chat.Roll.Effect' }} <span class="mgt2-effect-value">{{effectStr}}</span>
</div>
{{/if}}
{{#if showRollDamage}}
<div class="mgt2-buttons">
<button data-action="rollDamage">{{ localize 'MGT2.Chat.Roll.Damages' }}</button>
</div>
{{/if}}
</div>

View File

@@ -0,0 +1,24 @@
<div class="mgt2-chat-roll mgt2-radiation-card">
<div class="mgt2-roll-header">
<span class="mgt2-roll-char-name">{{rollObjectName}}</span>
<div class="mgt2-roll-meta">
<span class="mgt2-roll-type mgt2-radiation-label">
<i class="fa-solid fa-radiation"></i>
{{ localize 'MGT2.Chat.Radiation.Title' }}
</span>
</div>
</div>
<div class="dice-roll">
<div class="dice-result">
<div class="dice-formula">{{formula}}</div>
{{{tooltip}}}
<h4 class="dice-total">{{total}} {{ localize 'MGT2.Chat.Radiation.Rads' }}</h4>
</div>
</div>
<div class="mgt2-radiation-rules">
<i class="fa-solid fa-triangle-exclamation"></i>
{{ localize 'MGT2.Chat.Radiation.Rules' }}
</div>
</div>

View File

@@ -34,6 +34,40 @@
</div>
</div>
{{#if apValue}}
<div class="mgt2-ap-info" data-tooltip="{{ localize 'MGT2.Chat.Roll.APIgnoreHint' }}">
<i class="fa-solid fa-shield-halved"></i>
{{ localize 'MGT2.Chat.Roll.APIgnore' }} {{apValue}}
</div>
{{/if}}
{{#if blastRadius}}
<div class="mgt2-blast-info" data-tooltip="{{ localize 'MGT2.Chat.Roll.BlastHint' }}">
<i class="fa-solid fa-burst"></i>
{{ localize 'MGT2.Chat.Roll.BlastArea' }} {{blastRadius}}m — {{ localize 'MGT2.Chat.Roll.BlastRules' }}
</div>
{{/if}}
{{#if stunWeapon}}
<div class="mgt2-stun-info" data-tooltip="{{ localize 'MGT2.Chat.Roll.StunHint' }}">
<i class="fa-solid fa-bolt"></i>
{{ localize 'MGT2.Chat.Roll.StunWeapon' }}
</div>
{{/if}}
{{#if radiationWeapon}}
<div class="mgt2-radiation-info" data-tooltip="{{ localize 'MGT2.Chat.Radiation.Hint' }}">
<i class="fa-solid fa-radiation"></i>
{{ localize 'MGT2.Chat.Radiation.Badge' }}
</div>
{{/if}}
{{#if autoInfo}}
<div class="mgt2-auto-info">
<i class="fa-solid fa-gun"></i> {{autoInfo}}
</div>
{{/if}}
{{#if rollSuccess}}
<div class="mgt2-outcome is-success"><i class="fa-solid fa-check"></i> {{ localize 'MGT2.Chat.Roll.Success' }}</div>
{{else if rollFailure}}
@@ -56,6 +90,11 @@
{{#if showRollDamage}}
<button data-action="rollDamage">{{ localize 'MGT2.Chat.Roll.Damages' }}</button>
{{/if}}
{{#if radiationWeapon}}
<button data-action="rollRadiation" title="{{ localize 'MGT2.Chat.Radiation.RollButton' }}">
<i class="fa-solid fa-radiation"></i> {{ localize 'MGT2.Chat.Radiation.RollButton' }}
</button>
{{/if}}
{{#each cardButtons as |cardButton|}}
<button data-action="{{cardButton.action}}" title="{{cardButton.label}}">{{cardButton.label}}</button>
{{/each}}

View File

@@ -78,24 +78,44 @@
</div>
{{/if}}
</div>
<div class="table-container">
<div class="table-row heading">
<div class="row-item row-item-left">{{ localize 'MGT2.Items.Trait' }}</div>
<div class="row-item row-item-left">{{ localize 'MGT2.Items.Description' }}</div>
<div class="row-item row-item-right"><a class="options-create" data-property="traits"><i class="fas fa-plus"></i></a></div>
</div>
{{#each system.traits as |trait i| }}
<div class="table-row dropitem options-part" data-options-part="{{i}}" data-property="traits" role="rowgroup">
<div class="row-item row-item-left"><input type="text" name="system.traits.{{i}}.name" value="{{trait.name}}" /></div>
<div class="row-item row-item-left">
<textarea name="system.traits.{{i}}.description" rows="2">{{trait.description}}</textarea>
<fieldset class="mgt2-weapon-traits">
<legend>{{ localize 'MGT2.WeaponTraits.SectionTitle' }}</legend>
<div class="mgt2-weapon-traits-grid">
<div class="mgt2-trait-num" data-tooltip="{{ localize 'MGT2.WeaponTraits.APHint' }}">
<label>{{ localize 'MGT2.WeaponTraits.AP' }}</label>
<input type="number" name="system.traits.ap" value="{{system.traits.ap}}" data-dtype="Number" min="0" class="short" />
</div>
<div class="row-item row-item-right item-controls">
<a class="item-control options-delete" title="Delete Trait"><i class="fas fa-trash"></i></a>
<div class="mgt2-trait-num" data-tooltip="{{ localize 'MGT2.WeaponTraits.AutoHint' }}">
<label>{{ localize 'MGT2.WeaponTraits.Auto' }}</label>
<input type="number" name="system.traits.auto" value="{{system.traits.auto}}" data-dtype="Number" min="0" class="short" />
</div>
<div class="mgt2-trait-num" data-tooltip="{{ localize 'MGT2.WeaponTraits.BlastHint' }}">
<label>{{ localize 'MGT2.WeaponTraits.Blast' }}</label>
<input type="number" name="system.traits.blast" value="{{system.traits.blast}}" data-dtype="Number" min="0" class="short" />
</div>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.BulkyHint' }}">
<input type="checkbox" name="system.traits.bulky" data-dtype="Boolean" {{checked system.traits.bulky}} />{{ localize 'MGT2.WeaponTraits.Bulky' }}
</label>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.VeryBulkyHint' }}">
<input type="checkbox" name="system.traits.veryBulky" data-dtype="Boolean" {{checked system.traits.veryBulky}} />{{ localize 'MGT2.WeaponTraits.VeryBulky' }}
</label>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.StunHint' }}">
<input type="checkbox" name="system.traits.stun" data-dtype="Boolean" {{checked system.traits.stun}} />{{ localize 'MGT2.WeaponTraits.Stun' }}
</label>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.SmartHint' }}">
<input type="checkbox" name="system.traits.smart" data-dtype="Boolean" {{checked system.traits.smart}} />{{ localize 'MGT2.WeaponTraits.Smart' }}
</label>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.RadiationHint' }}">
<input type="checkbox" name="system.traits.radiation" data-dtype="Boolean" {{checked system.traits.radiation}} />{{ localize 'MGT2.WeaponTraits.Radiation' }}
</label>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.ScopeHint' }}">
<input type="checkbox" name="system.traits.scope" data-dtype="Boolean" {{checked system.traits.scope}} />{{ localize 'MGT2.WeaponTraits.Scope' }}
</label>
<label class="mgt2-checkbox mgt2-trait-bool" data-tooltip="{{ localize 'MGT2.WeaponTraits.ZeroGHint' }}">
<input type="checkbox" name="system.traits.zeroG" data-dtype="Boolean" {{checked system.traits.zeroG}} />{{ localize 'MGT2.WeaponTraits.ZeroG' }}
</label>
</div>
{{/each}}
</div>
</fieldset>
</div>
<div class="tab" data-group="primary" data-tab="tab3">
{{> systems/mgt2/templates/items/parts/sheet-configuration.html }}

View File

@@ -40,19 +40,138 @@
{{selectOptions skills selected=skill valueAttr="_id" labelAttr="name"}}
</select>
</div>
{{#unless isAttack}}
<div class="form-group">
<label>{{ localize 'MGT2.RollPrompt.Timeframes' }}</label>
<select name="timeframes">
{{selectOptions config.Timeframes selected = timeframe localize = true}}
</select>
</div>
{{/unless}}
<fieldset>
<legend>{{ localize 'MGT2.RollPrompt.States' }}</legend>
<div class="form-group">
<label class="mgt2-checkbox"><input type="checkbox" name="encumbrance" data-dtype="Boolean" {{checked encumbrance}} />{{ localize 'MGT2.RollPrompt.EncumbranceDM' }}</label>
<label class="mgt2-checkbox"><input type="checkbox" name="fatigue" data-dtype="Boolean" {{checked fatigue}} />{{ localize 'MGT2.RollPrompt.FatigueDM' }}</label>
{{!-- Hidden checkboxes preserve form values for the roll calculation --}}
<input type="checkbox" name="encumbrance" data-dtype="Boolean" {{checked encumbrance}} style="display:none" />
<input type="checkbox" name="fatigue" data-dtype="Boolean" {{checked fatigue}} style="display:none" />
{{!-- Read-only state badges --}}
<div class="roll-prompt-states">
<span class="roll-prompt-state-badge {{#if encumbrance}}is-active{{/if}}">
<i class="fa-solid fa-weight-hanging"></i>
{{ localize 'MGT2.RollPrompt.EncumbranceDM' }}
{{#if encumbrance}}<strong>2</strong>{{/if}}
</span>
<span class="roll-prompt-state-badge {{#if fatigue}}is-active{{/if}}">
<i class="fa-solid fa-person-dots-from-line"></i>
{{ localize 'MGT2.RollPrompt.FatigueDM' }}
{{#if fatigue}}<strong>2</strong>{{/if}}
</span>
</div>
</fieldset>
{{#if isRanged}}
<fieldset class="mgt2-ranged-modifiers">
<legend>{{ localize 'MGT2.RollPrompt.RangedModifiers' }}</legend>
{{#if hasScope}}
<div class="mgt2-scope-badge" data-tooltip="{{ localize 'MGT2.RollPrompt.ScopeHint' }}">
<i class="fa-solid fa-crosshairs"></i>
{{ localize 'MGT2.RollPrompt.ScopeActive' }}
</div>
{{/if}}
{{#if hasZeroG}}
<div class="mgt2-zerog-badge" data-tooltip="{{ localize 'MGT2.RollPrompt.ZeroGHint' }}">
<i class="fa-solid fa-satellite"></i>
{{ localize 'MGT2.RollPrompt.ZeroGActive' }}
</div>
{{/if}}
{{#if autoLevel}}
<div class="form-group mgt2-auto-mode">
<label>{{ localize 'MGT2.RollPrompt.FireMode' }}</label>
<select name="autoMode">
<option value="single">{{ localize 'MGT2.RollPrompt.AutoSingle' }}</option>
<option value="burst">{{ localize 'MGT2.RollPrompt.AutoBurst' }} (+{{autoLevel}})</option>
<option value="fullAuto">{{ localize 'MGT2.RollPrompt.AutoFull' }} (×{{autoLevel}})</option>
</select>
</div>
<p class="mgt2-auto-hint">⚠ {{ localize 'MGT2.RollPrompt.AutoNoAim' }}</p>
{{/if}}
<div class="form-group">
<label>{{ localize 'MGT2.RollPrompt.Range' }}</label>
<select name="rangedRange">
<option value="1">{{ localize 'MGT2.RollPrompt.RangeShort' }} (+1)</option>
<option value="0" selected>{{ localize 'MGT2.RollPrompt.RangeNormal' }}</option>
<option value="-2">{{ localize 'MGT2.RollPrompt.RangeLong' }} (2)</option>
<option value="-4">{{ localize 'MGT2.RollPrompt.RangeExtreme' }} (4)</option>
</select>
</div>
<div class="form-group">
<label>{{ localize 'MGT2.RollPrompt.Aim' }}</label>
<select name="rangedAim">
<option value="0" selected>0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
<option value="4">+4</option>
<option value="5">+5</option>
<option value="6">+6</option>
</select>
</div>
<div class="form-group">
<label>{{ localize 'MGT2.RollPrompt.FastTarget' }}</label>
<select name="rangedFastTarget">
<option value="0" selected>0</option>
<option value="-1">1</option>
<option value="-2">2</option>
<option value="-3">3</option>
<option value="-4">4</option>
</select>
</div>
<div class="form-group mgt2-ranged-checkboxes">
<label class="mgt2-checkbox-tag"><input type="checkbox" name="rangedLaserSight" data-dtype="Boolean" />{{ localize 'MGT2.RollPrompt.LaserSight' }} <em>(+1 si Viser)</em></label>
<label class="mgt2-checkbox-tag"><input type="checkbox" name="rangedCover" data-dtype="Boolean" />{{ localize 'MGT2.RollPrompt.Cover' }} <em>(2)</em></label>
<label class="mgt2-checkbox-tag"><input type="checkbox" name="rangedProne" data-dtype="Boolean" />{{ localize 'MGT2.RollPrompt.Prone' }} <em>(1)</em></label>
</div>
<div class="form-group mgt2-ranged-dodge">
<label class="mgt2-checkbox-tag"><input type="checkbox" name="rangedDodge" data-dtype="Boolean" />{{ localize 'MGT2.RollPrompt.Dodge' }}</label>
<select name="rangedDodgeDM">
<option value="0" selected>MD 0</option>
<option value="-1">MD 1</option>
<option value="-2">MD 2</option>
<option value="-3">MD 3</option>
<option value="-4">MD 4</option>
<option value="-5">MD 5</option>
<option value="-6">MD 6</option>
</select>
</div>
</fieldset>
{{/if}}
{{#if isMelee}}
<fieldset class="mgt2-ranged-modifiers">
<legend>{{ localize 'MGT2.RollPrompt.MeleeModifiers' }}</legend>
<div class="form-group mgt2-ranged-dodge">
<label class="mgt2-checkbox-tag"><input type="checkbox" name="meleeDodge" data-dtype="Boolean" />{{ localize 'MGT2.RollPrompt.Dodge' }}</label>
<select name="meleeDodgeDM">
<option value="0" selected>MD 0</option>
<option value="-1">MD 1</option>
<option value="-2">MD 2</option>
<option value="-3">MD 3</option>
<option value="-4">MD 4</option>
<option value="-5">MD 5</option>
<option value="-6">MD 6</option>
</select>
</div>
<div class="form-group mgt2-ranged-dodge">
<label class="mgt2-checkbox-tag"><input type="checkbox" name="meleeParry" data-dtype="Boolean" />{{ localize 'MGT2.RollPrompt.Parry' }}</label>
<select name="meleeParryDM">
<option value="0" selected>MD 0</option>
<option value="-1">MD 1</option>
<option value="-2">MD 2</option>
<option value="-3">MD 3</option>
<option value="-4">MD 4</option>
<option value="-5">MD 5</option>
<option value="-6">MD 6</option>
</select>
</div>
</fieldset>
{{/if}}
{{/if}}
<div class="form-group">