export interface M5Skill { fw: number attribute: string } 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 M5RollResult { formula: string label: string type: string total: number totalStr: string result: string dice: {} css: string } 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 = "defense", ATTACK = "attack", DAMAGE = "damage", MOVEMENT = "movement", RESISTANCE_MIND = "resistanceMind", RESISTANCE_BODY = "resistanceBody", SPELL_CASTING = "spellCasting", BRAWL = "brawl", POISON_RESISTANCE = "poisonResistance", LP = "lp", AP = "ap" } export enum M5ModType { ATTRIBUTE = "attribute", STAT = "stat", SKILL = "skill" } export enum M5ModOperation { ADD_100 = "add100", ADD = "add", SET = "set", FIXED = "fixed" } 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 armor: number defense: M5ModResult damageBonus: M5ModResult attackBonus: M5ModResult defenseBonus: M5ModResult movementBonus: M5ModResult resistanceMind: M5ModResult resistanceBody: M5ModResult spellCasting: M5ModResult brawl: M5ModResult brawlEw: number poisonResistance: M5ModResult enduranceBonus: number } skillMods: {} skills: { innate: {} general: {} combat: {} language: {} custom: {} } gear: { weapons: {} defensiveWeapons: {} armor: {} items: {} } spells: {} } export function enumKeys(obj: O): K[] { return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[] }