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