Exact source used by this build. SHA-256: 7598fe9634d175a0d6a665731965a9eea68b488c1a82b69ed3fb051b8e0df79d.
1 import { z } from "zod";
2 export const SkillIdSchema = z.enum(["farming", "mining", "foraging", "fishing", "combat"]);
3 export const ProfessionEffectSchema = z.discriminatedUnion("kind", [
4 z.object({ kind: z.literal("sale"), category: z.string().optional(), tag: z.string().optional(), excludedTags: z.array(z.string()).optional(), multiplier: z.number().positive() }),
5 z.object({ kind: z.literal("growth"), reduction: z.number().min(0).max(1) }),
6 z.object({ kind: z.literal("animal"), group: z.enum(["coop", "barn"]), friendshipMultiplier: z.number().positive(), incubationMultiplier: z.number().positive().optional(), woolDaysReduction: z.number().int().nonnegative().optional(), qualityBonus: z.number().nonnegative() }),
7 z.object({ kind: z.literal("hook"), hook: z.string().regex(/^(mining|foraging|fishing|combat)_0[1-6]$/) }),
8 ]);
9 export const SkillsContentSchema = z.object({
10 skills: z.array(z.object({ id: SkillIdSchema, name: z.string().min(1), description: z.string() })).length(5),
11 xpTable: z.array(z.number().int().positive()).length(10),
12 professions: z.array(z.object({ id: z.string().min(1), name: z.string().min(1), description: z.string(), skill: SkillIdSchema, level: z.union([z.literal(5), z.literal(10)]), parentId: z.string().nullable(), effects: z.array(ProfessionEffectSchema) })),
13 });
14