Spell and Retreat Announcement
OSE Author added spell and retreat announcement. Fixed a few bugs in his code regarding initiative settings calls.master
parent
3280d4f84a
commit
024660b6bf
37
src/acks.js
37
src/acks.js
|
@ -71,9 +71,6 @@ Hooks.once("setup", function () {
|
||||||
return obj;
|
return obj;
|
||||||
}, {});
|
}, {});
|
||||||
}
|
}
|
||||||
for (let l of CONFIG.ACKS.languages) {
|
|
||||||
CONFIG.ACKS.languages[l] = game.i18n.localize(CONFIG.ACKS.languages[l]);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Hooks.once("ready", async () => {
|
Hooks.once("ready", async () => {
|
||||||
|
@ -96,7 +93,7 @@ Hooks.on("renderSidebarTab", async (object, html) => {
|
||||||
// License text
|
// License text
|
||||||
const template = "systems/acks/templates/chat/license.html";
|
const template = "systems/acks/templates/chat/license.html";
|
||||||
const rendered = await renderTemplate(template);
|
const rendered = await renderTemplate(template);
|
||||||
gamesystem.append(rendered);
|
gamesystem.find(".system").append(rendered);
|
||||||
|
|
||||||
// User guide
|
// User guide
|
||||||
let docs = html.find("button[data-action='docs']");
|
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) => {
|
Hooks.on("preUpdateCombatant", AcksCombat.updateCombatant);
|
||||||
AcksCombat.updateCombatant(combat, combatant, data);
|
Hooks.on("renderCombatTracker", AcksCombat.format);
|
||||||
});
|
Hooks.on("preUpdateCombat", AcksCombat.preUpdateCombat);
|
||||||
|
Hooks.on("getCombatTrackerEntryContext", AcksCombat.addContextEntry);
|
||||||
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("renderChatLog", (app, html, data) => AcksItem.chatListeners(html));
|
Hooks.on("renderChatLog", (app, html, data) => AcksItem.chatListeners(html));
|
||||||
Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions);
|
Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions);
|
||||||
|
|
|
@ -165,8 +165,6 @@
|
||||||
"ACKS.Setting.Initiative": "Initiative",
|
"ACKS.Setting.Initiative": "Initiative",
|
||||||
"ACKS.Setting.InitiativeHint": "Grouped or individual initiative.",
|
"ACKS.Setting.InitiativeHint": "Grouped or individual initiative.",
|
||||||
"ACKS.Setting.InitiativeIndividual": "Individual initiative",
|
"ACKS.Setting.InitiativeIndividual": "Individual initiative",
|
||||||
|
|
||||||
|
|
||||||
"ACKS.Setting.InitiativeGroup": "Grouped Initiative",
|
"ACKS.Setting.InitiativeGroup": "Grouped Initiative",
|
||||||
"ACKS.Setting.RerollInitiative": "Initiative persistence",
|
"ACKS.Setting.RerollInitiative": "Initiative persistence",
|
||||||
"ACKS.Setting.RerollInitiativeHint": "Keeps, resets or rerolls initiative each round",
|
"ACKS.Setting.RerollInitiativeHint": "Keeps, resets or rerolls initiative each round",
|
||||||
|
|
|
@ -32,7 +32,7 @@ export class AcksCombat {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async resetInitiative(combat, data) {
|
static async resetInitiative(combat, data) {
|
||||||
let reroll = game.settings.get("acks", "rerollInitiative");
|
let reroll = game.settings.get("acks", "initiative");
|
||||||
if (!["reset", "reroll"].includes(reroll)) {
|
if (!["reset", "reroll"].includes(reroll)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ export class AcksCombat {
|
||||||
|
|
||||||
// Determine the roll mode
|
// Determine the roll mode
|
||||||
let rollMode = game.settings.get("core", "rollMode");
|
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
|
// Construct chat message data
|
||||||
let messageData = mergeObject({
|
let messageData = mergeObject({
|
||||||
|
@ -88,7 +88,23 @@ export class AcksCombat {
|
||||||
? '<i class="fas fa-dizzy"></i>'
|
? '<i class="fas fa-dizzy"></i>'
|
||||||
: span.innerHTML;
|
: 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(
|
||||||
|
`<a class='combatant-control move-combat ${moveActive}'><i class='fas fa-running'></i></a>`
|
||||||
|
);
|
||||||
|
const spellActive = cmbtant.flags.acks && cmbtant.flags.acks.prepareSpell ? "active" : "";
|
||||||
|
controls.eq(1).after(
|
||||||
|
`<a class='combatant-control prepare-spell ${spellActive}'><i class='fas fa-magic'></i></a>`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
AcksCombat.announceListener(html);
|
||||||
|
|
||||||
|
let init = game.settings.get("acks", "initiative") === "group";
|
||||||
if (!init) {
|
if (!init) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -107,7 +123,7 @@ export class AcksCombat {
|
||||||
$(ct).find(".roll").remove();
|
$(ct).find(".roll").remove();
|
||||||
|
|
||||||
// Get group color
|
// 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;
|
let color = cmbtant.flags.acks.group;
|
||||||
|
|
||||||
// Append colored flag
|
// 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) {
|
static addListeners(html) {
|
||||||
// Cycle through colors
|
// Cycle through colors
|
||||||
html.find(".combatant-control.flag").click((ev) => {
|
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: '<i class="fas fa-star-of-life"></i>',
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,22 +1,6 @@
|
||||||
export const registerSettings = function () {
|
export const registerSettings = function () {
|
||||||
|
|
||||||
game.settings.register("acks", "initiative", {
|
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"),
|
name: game.i18n.localize("ACKS.Setting.RerollInitiative"),
|
||||||
hint: game.i18n.localize("ACKS.Setting.RerollInitiativeHint"),
|
hint: game.i18n.localize("ACKS.Setting.RerollInitiativeHint"),
|
||||||
default: "reset",
|
default: "reset",
|
||||||
|
|
|
@ -36,7 +36,7 @@ function drawTreasure(table, data) {
|
||||||
return roll.total <= chance;
|
return roll.total <= chance;
|
||||||
};
|
};
|
||||||
data.treasure = {};
|
data.treasure = {};
|
||||||
if (table.getFlag('ose', 'treasure')) {
|
if (table.getFlag('acks', 'treasure')) {
|
||||||
table.results.forEach((r) => {
|
table.results.forEach((r) => {
|
||||||
if (percent(r.weight)) {
|
if (percent(r.weight)) {
|
||||||
const text = table._getResultChatText(r);
|
const text = table._getResultChatText(r);
|
||||||
|
|
Loading…
Reference in New Issue