SUpression bonus degats, gestion armes à 2mains
This commit is contained in:
@@ -104,7 +104,6 @@
|
|||||||
"DNC.Dialog.InitiativeIntro": "<strong>{actorName}</strong> lance l'initiative.",
|
"DNC.Dialog.InitiativeIntro": "<strong>{actorName}</strong> lance l'initiative.",
|
||||||
"DNC.Dialog.InitiativeCurrent": "DEX actuelle : <strong>{dex}</strong>, bonus de fiche : <strong>{initiativeBonus}</strong>",
|
"DNC.Dialog.InitiativeCurrent": "DEX actuelle : <strong>{dex}</strong>, bonus de fiche : <strong>{initiativeBonus}</strong>",
|
||||||
"DNC.Dialog.CharacteristicUsed": "Caracteristique utilisee",
|
"DNC.Dialog.CharacteristicUsed": "Caracteristique utilisee",
|
||||||
"DNC.Dialog.ActorDamageBonus": "Bonus de degats de l'acteur",
|
|
||||||
"DNC.Dialog.DamageCappedByDv": "Le DV martial actuel ({dv}) plafonne cette arme : {base} devient {damage}.",
|
"DNC.Dialog.DamageCappedByDv": "Le DV martial actuel ({dv}) plafonne cette arme : {base} devient {damage}.",
|
||||||
"DNC.Dialog.SpellAutoDisadvantage": "Le cout depasse le rang du lanceur : le jet se fera automatiquement avec desavantage.",
|
"DNC.Dialog.SpellAutoDisadvantage": "Le cout depasse le rang du lanceur : le jet se fera automatiquement avec desavantage.",
|
||||||
"DNC.Dialog.UseUsageDie": "Utiliser <strong>{itemName}</strong> et lancer son de d'usage actuel.",
|
"DNC.Dialog.UseUsageDie": "Utiliser <strong>{itemName}</strong> et lancer son de d'usage actuel.",
|
||||||
|
|||||||
@@ -202,16 +202,18 @@ export class DonjonEtCieRollDialog {
|
|||||||
|
|
||||||
static async createDamage(actor, item) {
|
static async createDamage(actor, item) {
|
||||||
const damageContext = DonjonEtCieUtility.getMartialDamageContext(actor, item);
|
const damageContext = DonjonEtCieUtility.getMartialDamageContext(actor, item);
|
||||||
|
const isMeleeTwoHanded = item.type === "arme" && item.system.categorie === "melee" && Number(item.system.mains ?? 1) > 1;
|
||||||
|
const defaultMode = isMeleeTwoHanded ? "avantage" : "normal";
|
||||||
const content = await foundry.applications.handlebars.renderTemplate(
|
const content = await foundry.applications.handlebars.renderTemplate(
|
||||||
"systems/fvtt-donjon-et-cie/templates/dialogs/damage-roll.hbs",
|
"systems/fvtt-donjon-et-cie/templates/dialogs/damage-roll.hbs",
|
||||||
{
|
{
|
||||||
actorName: actor?.name ?? item.actor?.name ?? "",
|
actorName: actor?.name ?? item.actor?.name ?? "",
|
||||||
item,
|
item,
|
||||||
actorBonus: actor?.system?.combat?.degatsBonus ?? 0,
|
|
||||||
damageFormula: damageContext.effectiveFormula || item.system.degats,
|
damageFormula: damageContext.effectiveFormula || item.system.degats,
|
||||||
damageBase: damageContext.baseFormula || item.system.degats,
|
damageBase: damageContext.baseFormula || item.system.degats,
|
||||||
damageCapped: damageContext.capped,
|
damageCapped: damageContext.capped,
|
||||||
martialDvLabel: damageContext.martialDvSides ? `d${damageContext.martialDvSides}` : damageContext.martialDvFormula
|
martialDvLabel: damageContext.martialDvSides ? `d${damageContext.martialDvSides}` : damageContext.martialDvFormula,
|
||||||
|
defaultMode
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -372,11 +372,15 @@ export class DonjonEtCieRolls {
|
|||||||
}
|
}
|
||||||
if (!isUsageDie && !item.system.degats) return null;
|
if (!isUsageDie && !item.system.degats) return null;
|
||||||
|
|
||||||
|
// Arme à 2 mains de corps à corps : avantage automatique
|
||||||
|
const isMeleeTwoHanded = item.type === "arme" && item.system.categorie === "melee" && Number(item.system.mains ?? 1) > 1;
|
||||||
|
if (isMeleeTwoHanded && mode === "normal") {
|
||||||
|
mode = "avantage";
|
||||||
|
}
|
||||||
|
|
||||||
const damageContext = DonjonEtCieUtility.getMartialDamageContext(actor, item);
|
const damageContext = DonjonEtCieUtility.getMartialDamageContext(actor, item);
|
||||||
const actorBonus = Number(actor?.system?.combat?.degatsBonus ?? 0);
|
|
||||||
const totalBonus = actorBonus;
|
|
||||||
const effectiveDamage = damageContext.effectiveFormula || (isUsageDie ? `1d${degatsDelta}` : item.system.degats);
|
const effectiveDamage = damageContext.effectiveFormula || (isUsageDie ? `1d${degatsDelta}` : item.system.degats);
|
||||||
const formula = totalBonus ? `${effectiveDamage} + ${totalBonus}` : effectiveDamage;
|
const formula = effectiveDamage;
|
||||||
const result = await this.#resolveFormulaRoll(formula, {}, { mode, favorable: "high" });
|
const result = await this.#resolveFormulaRoll(formula, {}, { mode, favorable: "high" });
|
||||||
const targets = DonjonEtCieUtility.getSceneDamageTargets();
|
const targets = DonjonEtCieUtility.getSceneDamageTargets();
|
||||||
const rollDieLabels = result.rolls.map((roll) => {
|
const rollDieLabels = result.rolls.map((roll) => {
|
||||||
@@ -427,6 +431,12 @@ export class DonjonEtCieRolls {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Arme à 2 mains de corps à corps : avantage automatique
|
||||||
|
const isMeleeTwoHanded = item.type === "arme" && item.system.categorie === "melee" && Number(item.system.mains ?? 1) > 1;
|
||||||
|
if (isMeleeTwoHanded && mode === "normal") {
|
||||||
|
mode = "avantage";
|
||||||
|
}
|
||||||
|
|
||||||
const resolved = await this.#resolveFormulaRoll(`1d${before}`, {}, { mode, favorable: "high" });
|
const resolved = await this.#resolveFormulaRoll(`1d${before}`, {}, { mode, favorable: "high" });
|
||||||
const result = resolved.kept;
|
const result = resolved.kept;
|
||||||
const degraded = result <= 3;
|
const degraded = result <= 3;
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ export class DonjonEtCieUtility {
|
|||||||
const scene = canvas?.scene ?? game.scenes?.current;
|
const scene = canvas?.scene ?? game.scenes?.current;
|
||||||
const tokens = scene?.tokens?.contents ?? [];
|
const tokens = scene?.tokens?.contents ?? [];
|
||||||
|
|
||||||
const selectedTokens = canvas?.tokens?.controlled ?? [];
|
const targetedTokens = game.user?.targets ?? [];
|
||||||
const selectedTokenUuid = selectedTokens.length === 1 ? selectedTokens[0]?.uuid : null;
|
const targetedTokenUuid = targetedTokens[0]?.uuid ?? null;
|
||||||
|
|
||||||
return tokens
|
return tokens
|
||||||
.map((token) => {
|
.map((token) => {
|
||||||
@@ -93,7 +93,7 @@ export class DonjonEtCieUtility {
|
|||||||
tokenUuid: token.uuid,
|
tokenUuid: token.uuid,
|
||||||
actorUuid: actor.uuid,
|
actorUuid: actor.uuid,
|
||||||
label,
|
label,
|
||||||
isSelected: token.uuid === selectedTokenUuid
|
isSelected: token.uuid === targetedTokenUuid
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ export default class EmployeDataModel extends foundry.abstract.TypeDataModel {
|
|||||||
}),
|
}),
|
||||||
combat: new fields.SchemaField({
|
combat: new fields.SchemaField({
|
||||||
initiativeBonus: new fields.NumberField({ initial: 0, integer: true }),
|
initiativeBonus: new fields.NumberField({ initial: 0, integer: true }),
|
||||||
degatsBonus: new fields.NumberField({ initial: 0, integer: true }),
|
|
||||||
attaquesCorpsACorps: new fields.NumberField({ initial: 1, integer: true }),
|
attaquesCorpsACorps: new fields.NumberField({ initial: 1, integer: true }),
|
||||||
attaquesDistance: new fields.NumberField({ initial: 1, integer: true })
|
attaquesDistance: new fields.NumberField({ initial: 1, integer: true })
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -46,10 +46,7 @@
|
|||||||
<span>Attaques distance</span>
|
<span>Attaques distance</span>
|
||||||
<input type="number" name="system.combat.attaquesDistance" value="{{system.combat.attaquesDistance}}">
|
<input type="number" name="system.combat.attaquesDistance" value="{{system.combat.attaquesDistance}}">
|
||||||
</label>
|
</label>
|
||||||
<label>
|
|
||||||
<span>Bonus degats</span>
|
|
||||||
<input type="number" name="system.combat.degatsBonus" value="{{system.combat.degatsBonus}}">
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,12 @@
|
|||||||
{{#if damageCapped}}
|
{{#if damageCapped}}
|
||||||
<p>{{localize "DNC.Dialog.DamageCappedByDv" dv=martialDvLabel damage=damageFormula base=damageBase}}</p>
|
<p>{{localize "DNC.Dialog.DamageCappedByDv" dv=martialDvLabel damage=damageFormula base=damageBase}}</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<p>{{localize "DNC.Dialog.ActorDamageBonus"}} : <strong>{{actorBonus}}</strong></p>
|
|
||||||
<label>
|
<label>
|
||||||
<span>{{localize "DNC.UI.Mode"}}</span>
|
<span>{{localize "DNC.UI.Mode"}}</span>
|
||||||
<select name="mode">
|
<select name="mode">
|
||||||
<option value="normal">{{localize "DNC.UI.ModeNormal"}}</option>
|
<option value="normal" {{#if (eq defaultMode "normal")}}selected{{/if}}>{{localize "DNC.UI.ModeNormal"}}</option>
|
||||||
<option value="avantage">{{localize "DNC.UI.ModeAdvantage"}}</option>
|
<option value="avantage" {{#if (eq defaultMode "avantage")}}selected{{/if}}>{{localize "DNC.UI.ModeAdvantage"}}</option>
|
||||||
<option value="desavantage">{{localize "DNC.UI.ModeDisadvantage"}}</option>
|
<option value="desavantage" {{#if (eq defaultMode "desavantage")}}selected{{/if}}>{{localize "DNC.UI.ModeDisadvantage"}}</option>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user