A repository for a FoundryVTT plugin for Kingmaker homebrew.

Added chat button functionality

+17 -6
+4 -2
src/main.ts
··· 1 1 import KingdomSheet from "./kingdom-sheet"; 2 2 import { registerSocket } from "./socket"; 3 3 import { handlers } from "./kingdom-desc"; 4 + import type { KingdomActor } from "./global"; 4 5 5 6 Hooks.on("init", (): void => { 6 7 KingdomSheet.register(); ··· 14 15 const button = el as HTMLButtonElement; 15 16 16 17 button.onclick = (ev: PointerEvent): void => { 17 - // TODO: figure out how to pass the actor ID at least to the chat message 18 - console.log("clicked", ev); 18 + const data: Record<string, any> = (ev.target as HTMLElement).dataset; 19 + const kingdomActor: KingdomActor = (game as foundry.Game).actors.get(data.kingdomActor!); 20 + handlers[data.action as string](kingdomActor, ev); 19 21 }; 20 22 }); 21 23 });
+2 -2
src/socket.ts
··· 2 2 import type { Socket, isocketlib } from "./utils"; 3 3 import type * as Data from "./data"; 4 4 import type { AttributeInfo } from "./kingdom"; 5 - import { kmLocalize, capitalize, enrichAndLocalize } from "./utils"; 5 + import { kmLocalize, capitalize, enrichAndLocalize, ealWithActor } from "./utils"; 6 6 declare var socketlib: isocketlib; 7 7 8 8 export let socket: Socket | null = null; ··· 228 228 "CritSuccess" 229 229 ]; 230 230 231 - const msg = await enrichAndLocalize(true, "activities", activityId, "results", result.degreeOfSuccess.toString(), "msg"); 231 + const msg = await ealWithActor(true, actor, "activities", activityId, "results", result.degreeOfSuccess.toString(), "msg"); 232 232 233 233 return `<b>${(game as foundry.Game).i18n!.localize(`PF2E.${keys[result.degreeOfSuccess]}`)}</b> ${msg}`; 234 234 }).then((msg: string): void => {
+2 -1
src/svelte/tabs/turn.svelte
··· 177 177 function performRoll(event: Event): void { 178 178 const activityData = JSON.parse((event.target as HTMLElement).dataset.rollData!); 179 179 const rollData = activityData.rollData; 180 + console.log(rollData); 180 181 const leaderActor = (game as foundry.Game).actors.get(actor.getFlag("kingdom-homebrew", `leaders.${rollData.leader}`)); 181 182 182 183 const leaders: Record<string, string> = { ··· 376 377 ({(game as foundry.Game).i18n!.localize(`PF2E.ProficiencyLevel${activity.rollData.rank}`)}) 377 378 {/if} 378 379 </h4> 379 - <button onclick={performRoll} data-roll-data={JSON.stringify(activity.rollData)} class="kmhb-action-button" disabled={getPerformButtonDisabled(activity)}>{kmLocalize("check")} <i class="fa-solid fa-dice-d20"></i></button> 380 + <button onclick={performRoll} data-roll-data={JSON.stringify({id: activity.id, rollData: activity.rollData})} class="kmhb-action-button" disabled={getPerformButtonDisabled(activity)}>{kmLocalize("check")} <i class="fa-solid fa-dice-d20"></i></button> 380 381 <KingdomDesc actor={actor} activityData={activity} /> 381 382 </div> 382 383 {/each}
+9 -1
src/utils.ts
··· 30 30 return (game as foundry.Game).i18n!.localize(`kingdom-homebrew.${args.join(".")}`); 31 31 } 32 32 33 - export async function enrichText(raw: string, markdown: boolean, enrichedOptions: object = {}): Promise<string> { 33 + export async function enrichText(raw: string, markdown: boolean, actor: KingdomActor | null = null, enrichedOptions: object = {}): Promise<string> { 34 34 let text = raw; 35 35 36 36 if (markdown) { ··· 54 54 label = kmLocalize("applyEffect"); 55 55 } 56 56 57 + if (actor !== null) { 58 + actionData["kingdom-actor"] = actor.id; 59 + } 60 + 57 61 text = text.replace(match[0], `<button class="kmhb-button" data-action="${action}" ${Object.entries(actionData).map((value: [string, string]): string => { 58 62 return `data-${value[0]}="${value[1]}"`; 59 63 }).join(" ")}>${label}</button>`); ··· 79 83 80 84 export async function enrichAndLocalize(markdown: boolean, ...args: string[]): Promise<string> { 81 85 return enrichText(kmLocalize(...args), markdown); 86 + } 87 + 88 + export async function ealWithActor(markdown: boolean, actor: KingdomActor, ...args: string[]): Promise<string> { 89 + return enrichText(kmLocalize(...args), markdown, actor); 82 90 } 83 91 84 92 export enum SettlementTerrain {