tangled
alpha
login
or
join now
cass.cityboundforest.com
/
kingdom-homebrew
0
fork
atom
A repository for a FoundryVTT plugin for Kingmaker homebrew.
0
fork
atom
overview
issues
pulls
pipelines
Starting to work on Kingdom Checks stuff
cass.cityboundforest.com
3 months ago
fea3c856
51af061c
+61
-19
5 changed files
expand all
collapse all
unified
split
public
lang
en.json
src
socket.ts
svelte
kingdom-desc.svelte
tabs
turn.svelte
utils.ts
+4
-1
public/lang/en.json
···
1374
1374
"supernaturalSolutions": "Supernatural Solutions"
1375
1375
},
1376
1376
"collectResources": "Collecting resources...",
1377
1377
-
"payConsumption": "Paying Consumption..."
1377
1377
+
"payConsumption": "Paying Consumption...",
1378
1378
+
"skillChoose": "Choose a skill",
1379
1379
+
"submit": "Submit",
1380
1380
+
"skillLore": "@Skill @Lore"
1378
1381
}
1379
1382
}
+36
-17
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
5
+
import { kmLocalize, capitalize } from "./utils";
5
6
declare var socketlib: isocketlib;
6
7
7
8
export let socket: Socket | null = null;
···
20
21
socket.register("updateHeartlandBoost", updateHeartlandBoost);
21
22
socket.register("updateGovernmentBoost", updateGovernmentBoost);
22
23
socket.register("updateFreeBoost", updateFreeBoost);
23
23
-
socket.register("gainKRP", gainKRP);
24
24
-
socket.register("adjustUnrest", adjustUnrest);
25
25
-
socket.register("collectResources", collectResources);
26
26
-
socket.register("payConsumption", payConsumption);
24
24
+
socket.register("showRollDialog", showRollDialog);
27
25
}
28
26
29
27
function updateKingdomValue(key: string, actor: KingdomActor, value: any): void {
···
170
168
}));
171
169
}
172
170
173
173
-
function gainKRP(actor: KingdomActor): void {
171
171
+
function showRollDialog(actor: KingdomActor, kingdomAttribute: string, skills: string[]): void {
172
172
+
try {
173
173
+
foundry.applications.api.DialogV2.prompt({
174
174
+
window: {
175
175
+
title: kmLocalize("skillChoose")
176
176
+
},
177
177
+
content: `<select name="kmhb-skill-choose" class="kmhb-skill-choose">${
178
178
+
skills.map((skill: string) => {
179
179
+
if (skill.indexOf("lore") === -1) {
180
180
+
return `<option value="${skill}">${(game as foundry.Game).i18n!.localize(`PF2E.Skill.${capitalize(skill)}`)}</option>`
181
181
+
} else {
182
182
+
const loreSkill = capitalize(skill.replace("lore", "").replace(/\-/g, ""));
183
183
+
const loreSkillLore = (game as foundry.Game).i18n!.localize("PF2E.SkillLore");
184
184
+
return `<option value="${skill}">${kmLocalize("skillLore").replace("@Skill", loreSkill).replace("@Lore", loreSkillLore)}</option>`
185
185
+
}
186
186
+
}).join("\n")
187
187
+
}</select>`,
188
188
+
ok: {
189
189
+
label: kmLocalize("sheet", "submit"),
190
190
+
callback: (_event: PointerEvent | SubmitEvent, button: HTMLButtonElement, _dialog: foundry.applications.api.DialogV2): Promise<string | null> => {
191
191
+
return new Promise((resolve: (value: string | null) => void, reject: (reason: any) => void): void => {
192
192
+
const element = (button.form?.elements.namedItem("kmhb-skill-choose") as HTMLSelectElement | null);
174
193
175
175
-
}
176
176
-
177
177
-
function adjustUnrest(actor: KingdomActor): void {
178
178
-
179
179
-
}
180
180
-
181
181
-
function collectResources(actor: KingdomActor): void {
182
182
-
183
183
-
}
184
184
-
185
185
-
function payConsumption(actor: KingdomActor): void {
186
186
-
194
194
+
if (element === null) {
195
195
+
resolve(null);
196
196
+
} else {
197
197
+
resolve(element.value);
198
198
+
}
199
199
+
});
200
200
+
}
201
201
+
}
202
202
+
}).then((skill: string): void => {
203
203
+
// proc roll
204
204
+
});
205
205
+
} catch {}
187
206
}
+1
-1
src/svelte/kingdom-desc.svelte
···
82
82
},
83
83
content: `<input name="kmhb-multiple" type="number" min="1" max="50" step="1" autofocus />`,
84
84
ok: {
85
85
-
label: "Submit",
85
85
+
label: kmLocalize("sheet", "submit"),
86
86
callback: (_event: PointerEvent | SubmitEvent, button: HTMLButtonElement, _dialog: foundry.applications.api.DialogV2): any => (button.form?.elements.namedItem("kmhb-multiple") as HTMLInputElement | null)?.valueAsNumber
87
87
}
88
88
}).then((val: number): void => {
+16
src/svelte/tabs/turn.svelte
···
140
140
});
141
141
});
142
142
}
143
143
+
144
144
+
// roll resource dice and add value
143
145
},
144
146
payConsumption: (_event: Event): void => {
145
147
const priorValue = actor.getFlag("kingdom-homebrew", "commodities.food.current") as number;
···
160
162
161
163
function performRoll(event: Event): void {
162
164
const rollData = JSON.parse((event.target as HTMLElement).dataset.rollData!);
165
165
+
const leaderActor = (game as foundry.Game).actors.get(actor.getFlag("kingdom-homebrew", `leaders.${rollData.leader}`));
166
166
+
167
167
+
const leaders: Record<string, string> = {
168
168
+
ruler: "loyalty",
169
169
+
viceroy: "economy",
170
170
+
emissary: "loyalty",
171
171
+
general: "stability",
172
172
+
treasurer: "economy",
173
173
+
magister: "culture",
174
174
+
warden: "stability",
175
175
+
counselor: "culture"
176
176
+
};
177
177
+
178
178
+
socket?.executeAsUser("showRollDialog", leaderActor.id, actor, leaders[rollData.leader], rollData.skills);
163
179
}
164
180
165
181
function getPerformButtonDisabled(activityData: any): boolean {
+4
src/utils.ts
···
174
174
thumb: `worlds/${(game as foundry.Game).world.id}/assets/scenes/${scene.id}-thumb.webp`
175
175
});
176
176
});
177
177
+
}
178
178
+
179
179
+
export function capitalize(s: string): string {
180
180
+
return String(s).charAt(0).toUpperCase() + String(s).slice(1);
177
181
}