export interface M5CharacterCalculatedData { level: number attributes: { st: { value: number, bonus: number } gs: { value: number, bonus: number } gw: { value: number, bonus: number } ko: { value: number, bonus: number } in: { value: number, bonus: number } zt: { value: number, bonus: number } au: { value: number, bonus: number } pa: { value: number, bonus: number } wk: { value: number, bonus: number } } stats: { armor: number defense: number damageBonus: number attackBonus: number defenseBonus: number movementBonus: number resistanceMind: number resistanceBody: number spellCasting: number brawl: number brawlEw: number poisonResistance: number enduranceBonus: number } skills: { innate: {} general: {} combat: {} language: {} custom: {} } gear: { weapons: {} defensiveWeapons: {} armor: {} items: {} } spells: {} } 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 function enumKeys(obj: O): K[] { return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[] }