import { Collection } from 'discord.js' import charactersJSON from './characters.json'; import { z } from 'zod' export enum Target { Self = "self", Team = "team", OneTeammate = "oneTeammate", OneOpponent = "oneOpponent", AllOpponents = "allOpponents", TrueRandomOpponent = "trueRandomOpponent" } const TargetEnum = z.nativeEnum(Target); type TargetEnum = z.infer; const PotencyStatus = z.object({ duration: z.number().int(), potency: z.number().int() }).strict(); export type PotencyStatus = z.infer; const Effect = z.object({ target: TargetEnum, accuracy: z.optional(z.number().int()), damage: z.optional(z.number().int()), heal: z.optional(z.number().int()), cure: z.optional(z.boolean()), poison: z.optional(z.number().int()), regeneration: z.optional(z.number().int()), burn: z.optional(z.number().int()), confusion: z.optional(z.number().int()), stun: z.optional(z.number().int()), resistanceChange: z.optional(PotencyStatus), accuracyChange: z.optional(PotencyStatus), speedChange: z.optional(PotencyStatus), damageChange: z.optional(PotencyStatus), function: z.optional(z.string()) }).strict(); export type Effect = z.infer; const Skill = z.object({ name: z.string(), accuracy: z.optional(z.number().int()), effects: z.array(Effect) }).strict(); export type Skill = z.infer; const Character = z.object({ id: z.number().int(), name: z.string(), nameShort: z.string(), img: z.string(), health: z.number().int(), speed: z.number().int(), skills: z.tuple([Skill, Skill, Skill]) }).strict(); export type Character = z.infer; const CharacterJSON = z.array(Character); type CharacterJSON = z.infer; export const CHARACTERS: Collection = (() => { return new Collection(CharacterJSON.parse(charactersJSON).map((element, index) => {return [index, element]})); })();