69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
import { Collection } from 'discord.js'
|
|
import charactersJSON from './characters.json';
|
|
import { z } from 'zod'
|
|
|
|
export enum Target {
|
|
Self = "self",
|
|
Team = "team",
|
|
OneTeammate = "oneTeammate",
|
|
TrueRandomTeammate = "trueRandomTeammate",
|
|
OneOpponent = "oneOpponent",
|
|
AllOpponents = "allOpponents",
|
|
TrueRandomOpponent = "trueRandomOpponent",
|
|
TrueRandom = "trueRandom"
|
|
}
|
|
|
|
const TargetEnum = z.nativeEnum(Target);
|
|
type TargetEnum = z.infer<typeof TargetEnum>;
|
|
|
|
const PotencyStatus = z.object({
|
|
duration: z.number().int(),
|
|
potency: z.number().int()
|
|
}).strict();
|
|
export type PotencyStatus = z.infer<typeof PotencyStatus>;
|
|
|
|
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()),
|
|
dispel: 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()),
|
|
taunt: 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<typeof Effect>;
|
|
|
|
const Skill = z.object({
|
|
name: z.string(),
|
|
accuracy: z.optional(z.number().int()),
|
|
effects: z.array(Effect)
|
|
}).strict();
|
|
export type Skill = z.infer<typeof Skill>;
|
|
|
|
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<typeof Character>;
|
|
|
|
const CharacterJSON = z.array(Character);
|
|
type CharacterJSON = z.infer<typeof CharacterJSON>;
|
|
|
|
export const CHARACTERS: Collection<number, Character> = (() => {
|
|
return new Collection(CharacterJSON.parse(charactersJSON).map((element, index) => {return [element.id, element]}));
|
|
})(); |