import { SafeHtml } from '@angular/platform-browser'; // #region CHARACTER DATA export interface Ability { name: string; shortDescription: string; longDescription: string; cost: string; charges: number; currentlyUsedCharges: number; } export interface Attribute { name: string; value: number; proficiency: boolean; advantage?: 'none' | 'advantage' | 'disadvantage'; } export interface Skill { name: string; proficiency: boolean; bardicExpertise?: boolean; advantage?: 'none' | 'advantage' | 'disadvantage'; } export interface Trait { name: string; shortDescription: string; longDescription: string; origin: string; } // #endregion // #region CLASSES AND SUBCLASSES export interface ClassData { title: string; subclassLevel: number; description: string; features: any[]; } export interface SubclassData { title: string; description: string; features: any[]; } // #endregion // #region EQUIPMENT export interface Weapon { name: string; damage: Damage[]; attackBonus: string; useAttributeModifier: boolean; hasAdditionalDamage: boolean; additionalDamage: number; range: number[]; hasReach: boolean; throwRange?: number[]; proficient: boolean; isVersatile: boolean; isTwoHanded: boolean; isFinesse: boolean; isRanged: boolean; canBeThrown: boolean; weight: string; versatileDamage?: string; isMagical: boolean; magicBonus?: number; description: string; } export interface SimpleItem { name: string; weight: number; value: number; quantity: number; description?: string; } export interface Consumable { name: string; weight: number; value: number; quantity: number; description: string; } export interface Food { name: string; isReady: boolean; quantity: number; weight: number; description?: string; } export interface Misc { name: string; weight: number; value: number; quantity: number; description?: string; } // #endregion // #region DAMAGE AND HEAL export interface Damage { diceNumber: number; diceType: number; damageType: string; additionalDamage?: number; } export interface Heal { diceNumber: number; diceType: number; additionalHeal?: number; } // #endregion // #region SPELLS export interface Spell { id: number; isCustom: boolean; german: string; english: string; image: string; classes: string[]; level: number; timeToCast: number; cost: | 'action' | 'bonus' | 'reaction' | 'rounds' | 'minutes' | 'hours' | 'days'; duration: number; durationType: | 'instant' | 'rounds' | 'minutes' | 'hours' | 'days' | 'permanent'; isRitual: boolean; needsConcentration: boolean; needsVerbal: boolean; needsSomatic: boolean; needsMaterial: boolean; school: string; description_de: string; description_en: string; needsAttackRoll: boolean; needsSavingThrow: boolean; savingThrowAttribute?: string; isRanged: boolean; range?: number; hasAreaOfEffect: boolean; length?: number; areaOfEffectType?: string; doesDamage: boolean; damage?: Damage[]; doesHeal: boolean; heal?: Heal; } // #endregion // #region Journal export interface JournalEntry { title: string; created: Date; content: string; startDate?: string; endDate?: string; } export interface Npcs { [key: string]: Npc[]; companions: Npc[]; allies: Npc[]; enemies: Npc[]; others: Npc[]; } export interface Npc { name: string; identifier?: string; longDescription: string; shortDescription: string; organization?: string; } export interface Place { name: string; identifier?: string; longDescription: string; shortDescription: string; }