mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-07-21 18:09:54 +02:00
Fixed TagTeamDialog
This commit is contained in:
parent
d33277f2be
commit
bbf27e5b4d
4 changed files with 48 additions and 25 deletions
|
|
@ -6,6 +6,7 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application
|
|||
|
||||
this.roll = roll;
|
||||
this.config = config;
|
||||
this.originalIsCritical = config.isCritical;
|
||||
this.selectedEffects = this.config.bonusEffects;
|
||||
}
|
||||
|
||||
|
|
@ -121,13 +122,16 @@ export default class DamageDialog extends HandlebarsApplicationMixin(Application
|
|||
}
|
||||
|
||||
static async submitRoll() {
|
||||
const isCritical = this.config.isCritical;
|
||||
const { damageFormula, resourceFormulas } = this.roll.constructFormulas({ ...this.config, isCritical: false });
|
||||
/* Sideeffect occuring in constructFormulas that sets this.config.isCritical to the false value. Can remove the below if it can be prevented */
|
||||
this.config.isCritical = isCritical;
|
||||
damageFormula.roll.options.isCritical = isCritical;
|
||||
this.config.isCritical = this.originalIsCritical;
|
||||
|
||||
/* If a critical has been forced in the Dialog, save that forced state to the damage roll */
|
||||
if (this.config.isCritical && !this.originalIsCritical) {
|
||||
damageFormula.roll.options.isCritical = true;
|
||||
for (const formula of resourceFormulas)
|
||||
formula.roll.options.isCritical = isCritical;
|
||||
formula.roll.options.isCritical = true;
|
||||
}
|
||||
|
||||
this.config.damageFormula = damageFormula;
|
||||
this.config.resourceFormulas = resourceFormulas;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { ResourceUpdateMap } from '../../data/action/baseAction.mjs';
|
||||
import { ChatDamageData } from '../../data/chat-message/chatDamageData.mjs';
|
||||
import { MemberData } from '../../data/tagTeamData.mjs';
|
||||
import DamageRoll from '../../dice/damageRoll.mjs';
|
||||
import { getCritDamageBonus, shouldUseHopeFearAutomation } from '../../helpers/utils.mjs';
|
||||
import { emitGMUpdate, GMUpdateEvent, RefreshType, socketEvent } from '../../systemRegistration/socket.mjs';
|
||||
import PartySheet from '../sheets/actors/party.mjs';
|
||||
|
|
@ -235,8 +236,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
|||
}
|
||||
}
|
||||
|
||||
if (data.damageRollData.main) {
|
||||
const selectedRoll = Object.values(this.party.system.tagTeam.members).find(member => member.selected);
|
||||
const critSelected = !selectedRoll ? undefined : (selectedRoll?.roll?.isCritical ?? false);
|
||||
const useCritDamage = critSelected || (critSelected === undefined && data.roll?.isCritical);
|
||||
data.damageRollData.main.options.isCritical = useCritDamage;
|
||||
}
|
||||
|
||||
return {
|
||||
...data,
|
||||
|
|
@ -249,7 +254,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
|||
damageRollOptions,
|
||||
damage: data.damageRollData,
|
||||
critDamage: this.getCriticalDamage(data.damageRollData),
|
||||
useCritDamage: critSelected || (critSelected === undefined && data.roll?.isCritical)
|
||||
useCritDamage: false
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -640,17 +645,13 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
|||
secondaryRoll.damageRollData = baseSecondaryRoll.damageRollData ?
|
||||
ChatDamageData.fromJSON(JSON.stringify(baseSecondaryRoll.damageRollData)) : null;
|
||||
|
||||
const isCritical = overrideIsCritical ?? mainRoll.roll.isCritical;
|
||||
if (isCritical) mainRoll.damageRollData = this.getCriticalDamage(mainRoll.damageRollData);
|
||||
|
||||
if (secondaryRoll.damageRollData) {
|
||||
const secondaryDamage = (displayVersion ? overrideIsCritical : isCritical)
|
||||
? this.getCriticalDamage(secondaryRoll.damageRollData)
|
||||
: secondaryRoll.damageRollData;
|
||||
const secondaryDamage = secondaryRoll.damageRollData;
|
||||
|
||||
if (mainRoll.damageRollData) {
|
||||
if (secondaryDamage.main) {
|
||||
if (mainRoll.damageRollData.main) {
|
||||
mainRoll.damageRollData.main = Roll.fromTerms([
|
||||
mainRoll.damageRollData.main = DamageRoll.fromTerms([
|
||||
...baseMainRoll.damageRollData.main.terms,
|
||||
new foundry.dice.terms.OperatorTerm({ operator: '+' }),
|
||||
...baseSecondaryRoll.damageRollData.main.terms
|
||||
|
|
@ -672,7 +673,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
|||
|
||||
for (const [key, damage] of Object.entries(secondaryDamage.resources ?? {})) {
|
||||
if (key in mainRoll.damageRollData.resources) {
|
||||
mainRoll.damageRollData.resources[key] = Roll.fromTerms([
|
||||
mainRoll.damageRollData.resources[key] = DamageRoll.fromTerms([
|
||||
...baseMainRoll.damageRollData.resources[key].terms,
|
||||
new foundry.dice.terms.OperatorTerm({ operator: '+' }),
|
||||
...baseSecondaryRoll.damageRollData.resources[key].terms
|
||||
|
|
@ -696,6 +697,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
|||
}
|
||||
}
|
||||
|
||||
if (mainRoll.damageRollData.main) {
|
||||
const isCritical = overrideIsCritical ?? mainRoll.roll.isCritical;
|
||||
mainRoll.damageRollData.main.options.isCritical = isCritical;
|
||||
}
|
||||
|
||||
|
||||
return mainRoll;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
|
|
@ -755,7 +762,11 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
|
|||
};
|
||||
|
||||
if (joinedRoll.damageRollData.main) {
|
||||
systemData.damage.main = joinedRoll.damageRollData.toJSON();
|
||||
systemData.damage.main = joinedRoll.damageRollData.main.toJSON();
|
||||
// isCritical is used internally in TagTeamDialog to force-flip damage from normal to critical and vice versa.
|
||||
// It's deleted here to avoid interupting normal critical damage logic in the chatMessage.
|
||||
// If someone explicitly set their own damage roll to be a forced critical, then I think it's fine that isn't transmitted to the final joined roll.
|
||||
delete systemData.damage.main.options.isCritical;
|
||||
}
|
||||
for (const type of Object.keys(joinedRoll.damageRollData?.resources ?? {})) {
|
||||
systemData.damage.resources[type] = joinedRoll.damageRollData.resources[type].toJSON();
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ export class ChatDamageData extends foundry.abstract.DataModel {
|
|||
...this.main,
|
||||
options: {
|
||||
...this.main.options,
|
||||
isCritical: this.main.options.isCritical || this.isCritical
|
||||
isCritical:
|
||||
this.main.options.isCritical === false ? false : (this.main.options.isCritical || this.isCritical)
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -18,11 +18,11 @@
|
|||
{{#if joinedRoll.damageRollData}}
|
||||
<div class="result-container">
|
||||
<span class="result-section-label">{{localize "DAGGERHEART.GENERAL.damage"}}</span>
|
||||
{{#each joinedRoll.damageRollData.types as |damage key|}}
|
||||
<div class="result-info">
|
||||
<div>{{localize (concat "DAGGERHEART.CONFIG.HealingType." key ".name")}}</div>
|
||||
<div class="damage-info">{{damage.total}}</div>
|
||||
</div>
|
||||
{{#if joinedRoll.damageRollData.main}}
|
||||
{{> damageSummary roll=joinedRoll.damageRollData.main label=(localize "DAGGERHEART.GENERAL.damage")}}
|
||||
{{/if}}
|
||||
{{#each joinedRoll.damageRollData.resources as |roll key|}}
|
||||
{{> damageSummary roll=roll label=(localize (concat "DAGGERHEART.CONFIG.HealingType." key ".name"))}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
|
@ -39,3 +39,10 @@
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{#*inline "damageSummary"}}
|
||||
<div class="result-info">
|
||||
<div>{{label}}</div>
|
||||
<div class="damage-info">{{roll.total}}</div>
|
||||
</div>
|
||||
{{/inline}}
|
||||
Loading…
Add table
Add a link
Reference in a new issue