diff --git a/src/acks.js b/src/acks.js
index afa8a73..72fa099 100644
--- a/src/acks.js
+++ b/src/acks.js
@@ -71,9 +71,6 @@ Hooks.once("setup", function () {
return obj;
}, {});
}
- for (let l of CONFIG.ACKS.languages) {
- CONFIG.ACKS.languages[l] = game.i18n.localize(CONFIG.ACKS.languages[l]);
- }
});
Hooks.once("ready", async () => {
@@ -96,7 +93,7 @@ Hooks.on("renderSidebarTab", async (object, html) => {
// License text
const template = "systems/acks/templates/chat/license.html";
const rendered = await renderTemplate(template);
- gamesystem.append(rendered);
+ gamesystem.find(".system").append(rendered);
// User guide
let docs = html.find("button[data-action='docs']");
@@ -115,34 +112,10 @@ Hooks.on("preCreateCombatant", (combat, data, options, id) => {
}
});
-Hooks.on("preUpdateCombatant", (combat, combatant, data) => {
- AcksCombat.updateCombatant(combat, combatant, data);
-});
-
-Hooks.on("renderCombatTracker", (object, html, data) => {
- AcksCombat.format(object, html, data);
-});
-
-Hooks.on("preUpdateCombat", async (combat, data, diff, id) => {
- let init = game.settings.get("acks", "initiative");
- let reroll = game.settings.get("acks", "rerollInitiative");
- if (!data.round) {
- return;
- }
- if (data.round !== 1) {
- if (reroll === "reset") {
- OseCombat.resetInitiative(combat, data, diff, id);
- return;
- } else if (reroll === "keep") {
- return;
- }
- }
- if (init === "group") {
- AcksCombat.rollInitiative(combat, data, diff, id);
- } else if (init === "individual") {
- AcksCombat.individualInitiative(combat, data, diff, id);
- }
-});
+Hooks.on("preUpdateCombatant", AcksCombat.updateCombatant);
+Hooks.on("renderCombatTracker", AcksCombat.format);
+Hooks.on("preUpdateCombat", AcksCombat.preUpdateCombat);
+Hooks.on("getCombatTrackerEntryContext", AcksCombat.addContextEntry);
Hooks.on("renderChatLog", (app, html, data) => AcksItem.chatListeners(html));
Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions);
diff --git a/src/lang/en.json b/src/lang/en.json
index f77d377..11aeeb3 100644
--- a/src/lang/en.json
+++ b/src/lang/en.json
@@ -165,8 +165,6 @@
"ACKS.Setting.Initiative": "Initiative",
"ACKS.Setting.InitiativeHint": "Grouped or individual initiative.",
"ACKS.Setting.InitiativeIndividual": "Individual initiative",
-
-
"ACKS.Setting.InitiativeGroup": "Grouped Initiative",
"ACKS.Setting.RerollInitiative": "Initiative persistence",
"ACKS.Setting.RerollInitiativeHint": "Keeps, resets or rerolls initiative each round",
diff --git a/src/module/combat.js b/src/module/combat.js
index ea069e1..e9538c7 100644
--- a/src/module/combat.js
+++ b/src/module/combat.js
@@ -32,7 +32,7 @@ export class AcksCombat {
}
static async resetInitiative(combat, data) {
- let reroll = game.settings.get("acks", "rerollInitiative");
+ let reroll = game.settings.get("acks", "initiative");
if (!["reset", "reroll"].includes(reroll)) {
return;
}
@@ -55,7 +55,7 @@ export class AcksCombat {
// Determine the roll mode
let rollMode = game.settings.get("core", "rollMode");
- if ((c.token.hidden || c.hidden) && (rollMode === "roll")) rollMode = "gmroll";
+ if ((c.token.hidden || c.hidden) && (rollMode === "roll")) rollMode = "gmroll";
// Construct chat message data
let messageData = mergeObject({
@@ -88,7 +88,23 @@ export class AcksCombat {
? ''
: span.innerHTML;
});
- let init = game.settings.get("acks", "initiative") == "group";
+
+ html.find(".combatant").each((_, ct) => {
+ // Append spellcast and retreat
+ const controls = $(ct).find(".combatant-controls .combatant-control");
+ const cmbtant = object.combat.getCombatant(ct.dataset.combatantId);
+ const moveActive = cmbtant.flags.acks && cmbtant.flags.acks.moveInCombat ? "active" : "";
+ controls.eq(1).after(
+ ``
+ );
+ const spellActive = cmbtant.flags.acks && cmbtant.flags.acks.prepareSpell ? "active" : "";
+ controls.eq(1).after(
+ ``
+ );
+ });
+ AcksCombat.announceListener(html);
+
+ let init = game.settings.get("acks", "initiative") === "group";
if (!init) {
return;
}
@@ -107,7 +123,7 @@ export class AcksCombat {
$(ct).find(".roll").remove();
// Get group color
- let cmbtant = object.combat.getCombatant(ct.dataset.combatantId);
+ const cmbtant = object.combat.getCombatant(ct.dataset.combatantId);
let color = cmbtant.flags.acks.group;
// Append colored flag
@@ -145,6 +161,29 @@ export class AcksCombat {
}
}
+ static announceListener(html) {
+ html.find(".combatant-control.prepare-spell").click((ev) => {
+ ev.preventDefault();
+ // Toggle spell announcement
+ let id = $(ev.currentTarget).closest(".combatant")[0].dataset.combatantId;
+ let isActive = ev.currentTarget.classList.contains('active');
+ game.combat.updateCombatant({
+ _id: id,
+ flags: { acks: { prepareSpell: !isActive } },
+ });
+ });
+ html.find(".combatant-control.move-combat").click((ev) => {
+ ev.preventDefault();
+ // Toggle spell announcement
+ let id = $(ev.currentTarget).closest(".combatant")[0].dataset.combatantId;
+ let isActive = ev.currentTarget.classList.contains('active');
+ game.combat.updateCombatant({
+ _id: id,
+ flags: { acks: { moveInCombat: !isActive } },
+ });
+ })
+ }
+
static addListeners(html) {
// Cycle through colors
html.find(".combatant-control.flag").click((ev) => {
@@ -198,4 +237,37 @@ export class AcksCombat {
},
};
}
-}
+ static activateCombatant(li) {
+ const turn = game.combat.turns.findIndex(turn => turn._id === li.data('combatant-id'));
+ game.combat.update({turn: turn})
+ }
+
+ static addContextEntry(html, options) {
+ options.unshift({
+ name: "Set Active",
+ icon: '',
+ callback: AcksCombat.activateCombatant
+ });
+ }
+
+ static async preUpdateCombat(combat, data, diff, id) {
+ let init = game.settings.get("acks", "initiative");
+ let reroll = game.settings.get("acks", "initiative");
+ if (!data.round) {
+ return;
+ }
+ if (data.round !== 1) {
+ if (reroll === "reset") {
+ AcksCombat.resetInitiative(combat, data, diff, id);
+ return;
+ } else if (reroll === "keep") {
+ return;
+ }
+ }
+ if (init === "group") {
+ AcksCombat.rollInitiative(combat, data, diff, id);
+ } else if (init === "individual") {
+ AcksCombat.individualInitiative(combat, data, diff, id);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/module/settings.js b/src/module/settings.js
index 7e35630..7943d27 100644
--- a/src/module/settings.js
+++ b/src/module/settings.js
@@ -1,22 +1,6 @@
export const registerSettings = function () {
game.settings.register("acks", "initiative", {
- name: game.i18n.localize("ACKS.Setting.Initiative"),
- hint: game.i18n.localize("ACKS.Setting.InitiativeHint"),
- default: "group",
- scope: "world",
- type: String,
- config: true,
- choices: {
- disabled: "ACKS.Setting.InitiativeOnce",
- rerolled: "ACKS.Setting.InitiativeReroll",
- reset: "ACKS.Setting.InitiativeReset",
- group: "ACKS.Setting.InitiativeGroup",
- },
- onChange: _ => window.location.reload()
- });
-
- game.settings.register("acks", "ascendingAC", {
name: game.i18n.localize("ACKS.Setting.RerollInitiative"),
hint: game.i18n.localize("ACKS.Setting.RerollInitiativeHint"),
default: "reset",
diff --git a/src/module/treasure.js b/src/module/treasure.js
index 18e29b9..de0f1dc 100644
--- a/src/module/treasure.js
+++ b/src/module/treasure.js
@@ -36,7 +36,7 @@ function drawTreasure(table, data) {
return roll.total <= chance;
};
data.treasure = {};
- if (table.getFlag('ose', 'treasure')) {
+ if (table.getFlag('acks', 'treasure')) {
table.results.forEach((r) => {
if (percent(r.weight)) {
const text = table._getResultChatText(r);