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;
}