import { BooleanField } from '@league-of-foundry-developers/foundry-vtt-types/src/foundry/common/data/fields.mjs'; export interface M5Skill { fw: number; attribute: string; pp: number; } export interface M5SkillUnlearned extends M5Skill { initial: number; } export interface M5SkillLearned extends M5Skill { skill: string; type: string; } export interface M5SkillCalculated extends M5Skill { label: string; calc: any; } export interface M5Attribute { value: number; bonus: number; } export interface M5RollData { c: any; i: any; iType: string; rolls: {}; res: { label: string; }; } export interface M5RollTemplate { formula: string; label: string; enabled: boolean; } export interface M5RollResult extends M5RollTemplate { total: number; totalStr: string; result: string; dice: {}; css: string; } export enum M5ItemType { SKILL = 'skill', ITEM = 'item', WEAPON = 'weapon', DEFENSIVE_WEAPON = 'defensiveWeapon', ARMOR = 'armor', CONTAINER = 'container', SPELL = 'spell', KAMPFKUNST = 'kampfkunst', EFFECT = 'effect', } export enum M5SkillType { INNATE = 'innate', GENERAL = 'general', LANGUAGE = 'language', COMBAT = 'combat', } export enum M5EwResult { TBD = '', FUMBLE = 'roll-ew-result-fumble', CRITICAL = 'roll-ew-result-critical', HIGH = 'roll-ew-result-high', FAIL = 'roll-ew-result-fail', PASS = 'roll-ew-result-pass', } export enum M5Attributes { ST = 'st', GW = 'gw', GS = 'gs', KO = 'ko', IN = 'in', ZT = 'zt', AU = 'au', PA = 'pa', WK = 'wk', } export enum M5Stats { DEFENSE = 'defenseBonus', ATTACK = 'attackBonus', DAMAGE = 'damageBonus', MOVEMENT = 'movement', RESISTANCE_MIND = 'resistanceMind', RESISTANCE_BODY = 'resistanceBody', SPELL_CASTING = 'spellCasting', BRAWL = 'brawl', POISON_RESISTANCE = 'poisonResistance', LP = 'lp', AP = 'ap', PROTECTION_LP = 'lpProtection', PROTECTION_AP = 'apProtection', PERCEPTION = 'perception', DRINKING = 'drinking', HOARD = 'hoard', HOARD_NEXT = 'hoardNext', HOARD_MIN = 'hoardMin', WEALTH = 'wealth', LOAD = 'load', HEAVY_LOAD = 'heavyLoad', LOAD_MAX = 'loadMax', THRUST_LOAD = 'thrustLoad', ENCUMBRANCE = 'encumbrance', } export enum M5ModType { ATTRIBUTE = 'attribute', STAT = 'stat', SKILL = 'skill', } export enum M5ModOperation { ADD_100 = 'add100', ROLL = 'roll', ADD = 'add', SET = 'set', FIXED = 'fixed', MULTIPLY = 'multiply', SUBTRACT = 'subtract', DIVISION = 'division', } export enum M5TimeUnit { ROUND = 'round', MINUTE = 'minute', HOUR = 'hour', LIMITLESS = 'limitless', } export interface M5ItemMod { type: M5ModType; id: string; operation: M5ModOperation; value: number; } export interface M5ModPair { mod: M5ItemMod; source: string; } export interface M5ModSource { item: string; operation: M5ModOperation; value: number; } export interface M5ModResult { mods: Array; value: number; } export interface M5AttributeCalculated extends M5ModResult { bonus: number; } export interface M5CharacterCalculatedData { level: number; attributes: { st: M5AttributeCalculated; gs: M5AttributeCalculated; gw: M5AttributeCalculated; ko: M5AttributeCalculated; in: M5AttributeCalculated; zt: M5AttributeCalculated; au: M5AttributeCalculated; pa: M5AttributeCalculated; wk: M5AttributeCalculated; }; stats: { lp: M5ModResult; ap: M5ModResult; lpProtection: M5ModResult; apProtection: M5ModResult; defense: M5ModResult; damageBonus: M5ModResult; attackBonus: M5ModResult; defenseBonus: M5ModResult; movement: M5ModResult; resistanceMind: M5ModResult; resistanceBody: M5ModResult; spellCasting: M5ModResult; brawl: M5ModResult; brawlFw: number; poisonResistance: M5ModResult; enduranceBonus: number; perception: M5ModResult; perceptionFW: number; drinking: M5ModResult; drinkingFW: number; hoard: number; hoardNext: number; hoardMin: number; wealth: number; load: number; heavyLoad: number; loadMax: number; thrustLoad: number; encumbrance: number; }; skillMods: {}; skills: { innate: {}; general: {}; combat: {}; language: {}; custom: {}; }; gear: { weapons: {}; defensiveWeapons: {}; armor: {}; items: {}; containers: {}; effects: {}; }; spells: {}; kampfkuenste: {}; } export function enumKeys(obj: O): K[] { return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[]; }