Skip to content

Commit ff038a3

Browse files
committed
support hiding duplicate manual scripts, added hide subscript to manual trigger
1 parent ca9cc07 commit ff038a3

File tree

9 files changed

+88
-41
lines changed

9 files changed

+88
-41
lines changed

src/apps/effect-script-editor.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ export default class WarhammerEffectScriptEditor extends WarhammerScriptEditor
132132
foundry.utils.setProperty(scriptObject, "options.defending", formData.object.defending);
133133
foundry.utils.setProperty(scriptObject, "options.deleteEffect", formData.object.deleteEffect);
134134
foundry.utils.setProperty(scriptObject, "options.runIfDisabled", formData.object.runIfDisabled);
135+
foundry.utils.setProperty(scriptObject, "options.showDuplicates", formData.object.showDuplicates);
135136
if(!foundry.utils.isEmpty(script))
136137
{
137138
scriptObject.script = script;

src/document/effect.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -589,15 +589,23 @@ export default class WarhammerActiveEffect extends CONFIG.ActiveEffect.documentC
589589

590590
get manualScripts()
591591
{
592+
let scripts = this.scripts.filter(i => i.trigger == "manual").map((script, index) =>
593+
{
594+
script.index = index; // When triggering manual scripts, need to know the index (listing all manual scripts on an actor is messy)
595+
return script;
596+
});
597+
592598
if (this.disabled)
593599
{
594-
return [];
600+
scripts = scripts.filter(i => i.options.runIfDisabled);
595601
}
596-
return this.scripts.filter(i => i.trigger == "manual").map((script, index) =>
602+
603+
scripts = scripts.filter(i =>
597604
{
598-
script.index = index; // When triggering manual scripts, need to know the index (listing all manual scripts on an actor is messy)
599-
return script;
605+
return !i.hidden({});
600606
});
607+
608+
return scripts;
601609
}
602610

603611
get sheetButtons()

src/document/item.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,11 @@ export class WarhammerItem extends WarhammerDocumentMixin(Item)
232232
return effects.reduce((prev, current) => prev.concat(current.scripts), []).concat(fromActor).filter(i => i.trigger == trigger);
233233
}
234234

235-
*allApplicableEffects()
235+
*allApplicableEffects(ignoreDisabled=false)
236236
{
237-
for(let effect of this.effects.contents.concat(this.system.getOtherEffects()).filter(e => this.system.effectIsApplicable(e)))
237+
for(let effect of this.effects.contents.concat(this.system.getOtherEffects()).filter(e => this.system.effectIsApplicable(e, {ignoreDisabled})))
238238
{
239-
if (!effect.disabled)
240-
{yield effect;};
239+
yield effect;
241240
}
242241
}
243242

@@ -321,8 +320,26 @@ export class WarhammerItem extends WarhammerDocumentMixin(Item)
321320

322321
get manualScripts()
323322
{
324-
let effects = Array.from(this.allApplicableEffects()).filter(e => e.system.transferData.type == "document");
325-
return effects.reduce((scripts, effect) => scripts.concat(effect.manualScripts), []);
323+
let effects = Array.from(this.allApplicableEffects(true)).filter(e => e.system.transferData.type == "document");
324+
let scripts = effects.reduce((scripts, effect) => scripts.concat(effect.manualScripts), []);
325+
let unique = [];
326+
for(let script of scripts)
327+
{
328+
let existing = unique.find(i => i.label == script.label);
329+
if (existing && !script.options.showDuplicates)
330+
{
331+
// Don't show multiple manual scripts from the same effect
332+
if (existing.effect.name != script.effect.name)
333+
{
334+
unique.push(script);
335+
}
336+
}
337+
else
338+
{
339+
unique.push(script);
340+
}
341+
}
342+
return unique;
326343
}
327344

328345
get testIndependentEffects()

src/model/effect.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export class WarhammerActiveEffectModel extends foundry.abstract.DataModel
8484
activateScript: new fields.StringField({}),
8585
submissionScript: new fields.StringField({}),
8686
deleteEffect: new fields.BooleanField({initial : false}),
87+
showDuplicates: new fields.BooleanField({initial : false}),
8788
}),
8889
async: new fields.BooleanField()
8990
}));

src/model/item.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ export class BaseWarhammerItemModel extends BaseWarhammerModel
2020
}
2121
}
2222

23-
effectIsApplicable(effect)
23+
effectIsApplicable(effect, {ignoreDisabled=false}={})
2424
{
25-
return !effect.disabled;
25+
return !effect.disabled || ignoreDisabled;
2626
}
2727

2828
// If an item effect is disabled it should still transfer to the actor, so that it's visibly disabled

src/system/script.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default class WarhammerScript
4646
}
4747

4848

49-
// Dialog modifiers only
49+
// Dialog modifiers / manual only
5050
hidden(args)
5151
{
5252
if (!this.options?.hideScript)

src/warhammer-lib.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import AreaTemplate from "./util/area-template";
2222
import { WarhammerMessageModel} from "./model/message";
2323
import { WarhammerTestMessageModel} from "./model/test";
2424
import WarhammerModuleInitializer from "./modules/module-initialization";
25-
import { WarhammerActorSheet } from "./sheets/actor";
26-
import { WarhammerItemSheet } from "./sheets/item";
2725
import overrides from "./util/overrides";
2826
import { error,
2927
findAllItems,
@@ -121,8 +119,6 @@ warhammer.apps = {
121119
WarhammerTestBase,
122120
AreaTemplate,
123121
WarhammerModuleInitializer,
124-
WarhammerActorSheet,
125-
WarhammerItemSheet,
126122
WarhammerActorSheetV2,
127123
WarhammerItemSheetV2,
128124
WarhammerZoneConfig,

static/lang/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@
272272
"ScriptTrigger": "Trigger",
273273
"Scripts": "Scripts",
274274
"SendingSocketRequest": "Sending Socket Request",
275+
"ShowDuplicates" : "Show Duplicates",
276+
"ShowDuplicatesHint" : "Check to show this script's button even if there are other manual scripts with the same name",
275277
"SubmissionScript": "Submission Script",
276278
"SubmitChoices": "Submit Choices",
277279
"Target": "Target",

static/templates/scripts/effect-script-editor.hbs

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,23 @@
1616
</div>
1717
</div>
1818

19+
20+
<div class="form-group">
21+
<label>{{localize "WH.RunIfDisabled"}}</label>
22+
<div class="form-fields">
23+
<p class="hint">{{localize "WH.RunIfDisabledHint"}}</p>
24+
<input name="runIfDisabled" type="checkbox" {{checked scriptData.options.runIfDisabled}}>
25+
</div>
26+
</div>
27+
1928
{{#if (eq scriptData.trigger "dialog")}}
2029
{{#if (eq effect.system.transferData.documentType "Actor")}}
21-
<div class="form-group" data-tooltip="WH.TargeterTT">
22-
<label>{{localize "WH.Targeter"}}</label>
23-
<div class="form-fields">
24-
<input name="targeter" type="checkbox" {{checked scriptData.options.targeter}}>
30+
<div class="form-group" data-tooltip="WH.TargeterTT">
31+
<label>{{localize "WH.Targeter"}}</label>
32+
<div class="form-fields">
33+
<input name="targeter" type="checkbox" {{checked scriptData.options.targeter}}>
34+
</div>
2535
</div>
26-
</div>
2736
{{/if}}
2837
<div class="form-group" data-tooltip="WH.DefendingAgainstTT">
2938
<label>{{localize "WH.DefendingAgainst"}}</label>
@@ -43,16 +52,18 @@
4352
</div>
4453
{{/if}}
4554

46-
<div class="form-group">
47-
<label>{{localize "WH.RunIfDisabled"}}</label>
55+
{{#if (eq scriptData.trigger "manual")}}
56+
<div class="form-group">
57+
<label>{{localize "WH.ShowDuplicates"}}</label>
4858
<div class="form-fields">
49-
<p class="hint">{{localize "WH.RunIfDisabledHint"}}</p>
50-
<input name="runIfDisabled" type="checkbox" {{checked scriptData.options.runIfDisabled}}>
59+
<p class="hint">{{localize "WH.ShowDuplicatesHint"}}</p>
60+
<input name="showDuplicates" type="checkbox" {{checked scriptData.options.showDuplicates}}>
5161
</div>
5262
</div>
63+
{{/if}}
5364

5465

55-
{{#if hasScriptReferences}}
66+
{{#if hasScriptReferences}}
5667
<div class="form-group">
5768
<label data-tooltip="WH.ScriptLockTT" data-tooltip-direction="LEFT">{{localize "WH.ScriptLock"}} <i class="fa-regular fa-circle-info"></i></label>
5869
<div class="form-fields">
@@ -61,11 +72,11 @@
6172
</div>
6273
{{/if}}
6374

64-
<hr>
75+
<hr>
6576

6677
<div class="script-fields">
6778

68-
79+
6980
<div class="form-group stacked script">
7081
{{#if (eq scriptData.trigger "dialog")}}
7182
<label>{{localize "WH.DialogScript"}} <a data-action="copyScript" data-script="script"><i class="fa-solid fa-copy"></i></a></label>
@@ -81,33 +92,44 @@
8192
</div>
8293

8394

95+
{{#if (eq scriptData.trigger "manual")}}
96+
<div class="form-group stacked script">
97+
<label>{{localize "WH.HideScript"}} <a data-action="copyScript" data-script="hideScript"><i class="fa-solid fa-copy"></i></a></label>
98+
{{#if lockedScripts.hideScript}}
99+
{{formInput fields.options.fields.hideScript value=dereferencedScripts.options.hideScript language="javascript" elementType="code-mirror" disabled="true"}}
100+
{{else}}
101+
{{formInput fields.options.fields.hideScript value=scriptData.options.hideScript language="javascript" elementType="code-mirror" name="hideScript" disabled=(not (isGM))}}
102+
{{/if}}
103+
</div>
104+
{{/if}}
105+
84106

85-
{{#if (eq scriptData.trigger "dialog")}}
86-
<div class="form-group stacked script">
87-
<label>{{localize "WH.HideScript"}} <a data-action="copyScript" data-script="hideScript"><i class="fa-solid fa-copy"></i></a></label>
107+
{{#if (eq scriptData.trigger "dialog")}}
108+
<div class="form-group stacked script">
109+
<label>{{localize "WH.HideScript"}} <a data-action="copyScript" data-script="hideScript"><i class="fa-solid fa-copy"></i></a></label>
88110
{{#if lockedScripts.hideScript}}
89111
{{formInput fields.options.fields.hideScript value=dereferencedScripts.options.hideScript language="javascript" elementType="code-mirror" disabled="true"}}
90112
{{else}}
91113
{{formInput fields.options.fields.hideScript value=scriptData.options.hideScript language="javascript" elementType="code-mirror" name="hideScript" disabled=(not (isGM))}}
92114
{{/if}}
93-
</div>
115+
</div>
94116

95-
<div class="form-group stacked script">
96-
<label>{{localize "WH.ActivateScript"}} <a data-action="copyScript" data-script="activateScript"><i class="fa-solid fa-copy"></i></a></label>
117+
<div class="form-group stacked script">
118+
<label>{{localize "WH.ActivateScript"}} <a data-action="copyScript" data-script="activateScript"><i class="fa-solid fa-copy"></i></a></label>
97119
{{#if lockedScripts.activateScript}}
98120
{{formInput fields.options.fields.activateScript value=dereferencedScripts.options.activateScript language="javascript" elementType="code-mirror" disabled="true"}}
99121
{{else}}
100122
{{formInput fields.options.fields.activateScript value=scriptData.options.activateScript language="javascript" elementType="code-mirror" name="activateScript" disabled=(not (isGM))}}
101123
{{/if}}
102-
</div>
103-
<div class="form-group stacked script">
104-
<label>{{localize "WH.SubmissionScript"}} <a data-action="copyScript" data-script="submissionScript"><i class="fa-solid fa-copy"></i></a></label>
124+
</div>
125+
<div class="form-group stacked script">
126+
<label>{{localize "WH.SubmissionScript"}} <a data-action="copyScript" data-script="submissionScript"><i class="fa-solid fa-copy"></i></a></label>
105127
{{#if lockedScripts.submissionScript}}
106128
{{formInput fields.options.fields.submissionScript value=dereferencedScripts.options.submissionScript language="javascript" elementType="code-mirror" disabled="true"}}
107129
{{else}}
108130
{{formInput fields.options.fields.submissionScript value=scriptData.options.submissionScript language="javascript" elementType="code-mirror" name="submissionScript" disabled=(not (isGM))}}
109131
{{/if}}
110-
</div>
111-
{{/if}}
132+
</div>
133+
{{/if}}
112134

113-
</div>
135+
</div>

0 commit comments

Comments
 (0)