update spell effects to use about-time or turn alert

This commit is contained in:
Mike Bloy 2021-12-05 16:34:12 -06:00
parent 4329e2093b
commit 3135a46450
9 changed files with 103 additions and 75 deletions

View File

@ -1,65 +0,0 @@
let effect = args[0];
let targets = args[1];
let extra = args[2];
if (!extra) {
extra = {};
}
if (!extra.name) { extra.name = effect.label }
if (!extra.duration) { extra.duration = effect.duration.rounds }
if (!extra.startMessage) {
extra.startMessage = `${effect.label}'s effects start`
}
if (!extra.endMessage) {
extra.endMessage = `${effect.label}'s effects end`
}
if (!extra.fadeMessage) {
extra.fadeMessage = `${effect.label}'s effects start to fade`
}
if (canvas.tokens.controlled.length == 0) {
ui.notifications.error("No tokens selected");
return;
}
for (let tgt of targets) {
let actor = tgt.actor;
let active = actor.effects.find(i => i.data.label === effect.label);
let chatData = {
speaker: ChatMessage.getSpeaker(tgt),
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
emote: true
}
if (extra.flavor) {
chatData.flavor = extra.flavor;
}
if (active) {
await tgt.toggleEffect(effect, { active: false })
chatData.content = extra.endMessage;
} else {
await tgt.toggleEffect(effect, { active: true })
chatData.content = extra.startMessage;
}
if (chatData.content) {
ChatMessage.create(chatData);
}
}
if (game.combat && extra.duration) {
let alertData = {
round: extra.duration-1,
roundAbsolute: false,
turnId: game.combat.combatant._id,
message: extra.fadeMessage
}
await TurnAlert.create(alertData);
const targetIds = targets.map(t => t.id);
alertData = {
round: extra.duration-1,
roundAbsolute: false,
turnId: game.combat.combatant._id,
endOfTurn: true,
message: extra.endMessage,
macro: "CancelSpellEffect",
args: [effect, targetIds]
}
await TurnAlert.create(alertData);
}

View File

@ -0,0 +1,96 @@
let effect = args[0];
let targets = args[1];
let extra = args[2];
if (!extra) {
extra = {};
}
if (!extra.name) { extra.name = effect.label }
if (!extra.duration) { extra.duration = effect.duration.rounds }
if (!extra.startMessage) {
extra.startMessage = `${effect.label}'s effects start`
}
if (!extra.endMessage) {
extra.endMessage = `${effect.label}'s effects end`
}
if (!extra.fadeMessage) {
extra.fadeMessage = `${effect.label}'s effects start to fade`
}
if (canvas.tokens.controlled.length == 0) {
ui.notifications.error("No tokens selected");
return;
}
for (let tgt of targets) {
let actor = tgt.actor;
let active = actor.effects.find(i => i.data.label === effect.label);
let chatData = {
speaker: ChatMessage.getSpeaker(tgt),
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
emote: true
}
if (extra.flavor) {
chatData.flavor = extra.flavor;
}
if (active) {
await tgt.toggleEffect(effect, { active: false })
chatData.content = extra.endMessage;
} else {
await tgt.toggleEffect(effect, { active: true })
chatData.content = extra.startMessage;
}
if (chatData.content) {
ChatMessage.create(chatData);
}
}
if (game.modules.get("turnAlert")?.active) {
if (game.combat && extra.duration) {
let alertData = {
round: extra.duration - 1,
roundAbsolute: false,
turnId: game.combat.combatant._id,
message: extra.fadeMessage
}
await TurnAlert.create(alertData);
const targetIds = targets.map(t => t.id);
alertData = {
round: extra.duration - 1,
roundAbsolute: false,
turnId: game.combat.combatant._id,
endOfTurn: true,
message: extra.endMessage,
macro: "CancelSpellEffect",
args: [effect, targetIds]
}
await TurnAlert.create(alertData);
}
} else if (game.modules.get("about-time")?.active) {
let duration = extra.duration * 6;
let preDuration = duration - 6;
console.log("effects end in duration:", duration, preDuration)
Gametime.doIn({ seconds: preDuration }, () => {
let chatData = {
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
emote: true,
content: extra.fadeMessage
}
if (extra.flavor) {
chatData.flavor = extra.flavor;
}
ChatMessage.create(chatData);
});
const targetIds = targets.map(t => t.id);
Gametime.doIn({ seconds: duration }, () => {
let chatData = {
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
emote: true,
content: extra.endMessage
}
if (extra.flavor) {
chatData.flavor = extra.flavor;
}
ChatMessage.create(chatData);
let macro = game.macros.getName("CancelSpellEffect")
macro.execute(effect, targetIds)
})
}

View File

@ -7,6 +7,8 @@
"minimumCoreVersion": "0.8.0", "minimumCoreVersion": "0.8.0",
"compatibleCoreVersion": "0.8.9", "compatibleCoreVersion": "0.8.9",
"manifestPlusVersion": "1.2.0", "manifestPlusVersion": "1.2.0",
"dependencies": [
],
"packs": [ "packs": [
{ {
"name": "actiondeck", "name": "actiondeck",

File diff suppressed because one or more lines are too long