Эх сурвалжийг харах

Implemented simple adding of preexisting spells.

Warafear 1 жил өмнө
parent
commit
b20074e5e5
19 өөрчлөгдсөн 705 нэмэгдсэн , 485 устгасан
  1. 9 0
      src/app/character/character-creator/character-creator.component.ts
  2. 21 22
      src/app/journal/journal-spellcards/add-card/add-card.component.html
  3. 63 24
      src/app/journal/journal-spellcards/add-card/add-card.component.scss
  4. 58 27
      src/app/journal/journal-spellcards/add-card/add-card.component.ts
  5. 1 0
      src/app/journal/journal-spellcards/journal-spellcards.component.html
  6. 1 1
      src/app/journal/journal-spellcards/journal-spellcards.component.scss
  7. 12 9
      src/app/journal/journal-spellcards/journal-spellcards.component.ts
  8. 1 1
      src/app/journal/journal-spellcards/spellcard/spellcard.component.html
  9. 2 6
      src/app/journal/journal-spellcards/spellcard/spellcard.component.scss
  10. 1 1
      src/app/journal/journal-stats/weapons-container/spell-table/spell-details/spell-details.component.html
  11. 1 1
      src/app/journal/journal-stats/weapons-container/spell-table/spell-table.component.html
  12. 3 3
      src/app/journal/journal-stats/weapons-container/spell-table/spell-table.component.ts
  13. 6 1
      src/app/journal/spell-modal/spell-modal.component.html
  14. 16 5
      src/app/journal/spell-modal/spell-modal.component.ts
  15. 1 1
      src/app/shared-components/full-spellcard/full-spellcard.component.html
  16. 1 1
      src/assets/icons/UIIcons/add.svg
  17. 4 1
      src/interfaces/spell.ts
  18. 25 0
      src/services/data/data.service.ts
  19. 479 381
      src/services/spells/spells.service.ts

+ 9 - 0
src/app/character/character-creator/character-creator.component.ts

@@ -349,6 +349,15 @@ export class CharacterCreatorComponent {
         'favoriteSpells'
       ),
       // Spells
+
+      this.dataAccessor.addData(
+        this.characterName,
+        {
+          spells: [],
+          id: 0,
+        },
+        'customSpells'
+      ),
       this.dataAccessor.addData(
         this.characterName,
         {

+ 21 - 22
src/app/journal/journal-spellcards/add-card/add-card.component.html

@@ -1,38 +1,37 @@
 <div class="add-card">
   @if(isModification == undefined) {
-  <icon
-    class="add"
-    [size]="'l'"
-    [type]="'UI'"
-    [icon]="'add'"
-    [class]="'pointer'"
-  ></icon>
-  <button
-    class="slide-button add-card-button"
-    (click)="continueToSpellSelection(false)"
-  >
+  <img class="add-icon" src="assets/icons/UIIcons/add.svg" />
+  <button class="add-button" (click)="continueToSpellSelection(false)">
     Offiziellen Zauber auswählen
   </button>
-  <button
-    class="slide-button add-card-button"
-    (click)="continueToSpellSelection(true)"
-  >
+  <button class="add-button" (click)="continueToSpellSelection(true)">
     Offiziellen Zauber bearbeiten
   </button>
-  <button class="slide-button add-card-button" (click)="emitNewSpell()">
+  <button class="add-button" (click)="emitNewSpell()">
     Neuen Zauber erstellen
   </button>
   } @else {
 
   <input
-    id="typeahead-basic"
     type="text"
-    class="form-control"
-    (selectItem)="spellSelected($event.item); $event.preventDefault()"
+    class="spell-name"
     [(ngModel)]="newSpellName"
-    [ngbTypeahead]="search"
-    placeholder="Name des Zaubers"
+    placeholder="Zauber durchsuchen"
+    (keyup)="
+      isModification ? filterSpellArrayForModification() : filterSpellArray()
+    "
   />
-  <button (click)="resetThis()">Abbrechen</button>
+  <div class="available-spells">
+    <ul>
+      @for(spell of availableSpells; track spell) {
+      <li>
+        <button (click)="spellSelected(spell)">
+          {{ spell.german }}
+        </button>
+      </li>
+      } @empty { Keine Zauber gefunden }
+    </ul>
+  </div>
+  <button class="abort-button" (click)="resetThis()">Abbrechen</button>
   }
 </div>

+ 63 - 24
src/app/journal/journal-spellcards/add-card/add-card.component.scss

@@ -1,51 +1,90 @@
 .add-card {
     position: relative;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: space-around;
-    height: 14rem;
-    width: 10rem;
-    border: solid 1px var(--border-color);
+    height: 20rem;
+    width: 15rem;
+    border: var(--border);
     border-radius: 10px;
-    // background-image: url("../../../../assets/images/spells/add-spell.jpg");
-    // background-size: auto 100%;
-    // background-position: center;
     box-shadow: var(--shadow);
     overflow: hidden;
     transition: all 0.3s ease-in-out;
 
     &:hover {
-        .slide-button {
-            transform: translateX(0);
+        .add-button {
+            opacity: 1;
+        }
+        .add-icon {
+            display: none;
         }
     }
 
-    .add {
+    .add-icon {
         position: absolute;
         top: 50%;
         left: 50%;
         transform: translate(-50%, -50%);
+        height: 4rem;
     }
 }
 
-.slide-button {
-    transform: translateX(-120%);
-    transition: transform 0.3s ease-in-out;
-}
-
-.add-card-button {
+.add-button {
+    width: 90%;
+    margin: 0 0.5rem;
     background-color: var(--primary-color);
-    border: 1px solid var(--border-color);
+    border: var(--border);
     border-radius: 10px;
     box-shadow: var(--shadow);
     font-weight: 600;
-    width: 90%;
-    margin: 0 0.5rem;
-    transition: all 0.3s ease-in-out;
+    opacity: 0;
+    transition: all 0.25s ease-in-out;
 
     &:hover {
         background-color: var(--primary-color-dark);
-        scale: 1.03;
     }
 }
+
+.spell-name {
+    width: 94%;
+    margin: 1rem auto;
+    display: block;
+    border-radius: 5px;
+    border: var(--border);
+}
+
+.available-spells {
+    margin: 0.5rem;
+    padding: 0.5rem;
+    border: var(--border);
+    border-radius: 5px;
+    // box-shadow: var(--shadow);
+    overflow: auto;
+    height: 12rem;
+
+    button {
+        all: unset;
+        border: var(--border);
+        border-radius: 5px;
+        padding: 0.25rem;
+        margin: 0 auto 0.375rem auto;
+        display: block;
+        width: 90%;
+    }
+}
+
+ul {
+    list-style-type: none;
+    padding: 0;
+    margin: 0;
+}
+
+.abort-button {
+    width: 10rem;
+    height: 2.5rem;
+    display: block;
+    margin: 1rem auto 0 auto;
+    background-color: var(--delete);
+    border: var(--border);
+    border-radius: 10px;
+    box-shadow: var(--shadow);
+    font-weight: 600;
+    font-size: 1.25rem;
+}

+ 58 - 27
src/app/journal/journal-spellcards/add-card/add-card.component.ts

@@ -1,11 +1,8 @@
 import { Component, Input, Output, EventEmitter } from '@angular/core';
-import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
-import { Observable, OperatorFunction } from 'rxjs';
-import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';
-import { FormsModule } from '@angular/forms';
-import { JsonPipe } from '@angular/common';
+import { DataService } from 'src/services/data/data.service';
+
+// import { FormsModule } from '@angular/forms';
 import { SpellsService } from 'src/services/spells/spells.service';
-import { FormControl, ReactiveFormsModule } from '@angular/forms';
 
 @Component({
   selector: 'add-card',
@@ -14,18 +11,30 @@ import { FormControl, ReactiveFormsModule } from '@angular/forms';
 })
 export class AddCardComponent {
   @Input() level!: number;
+  @Input() alreadyUsedSpells!: any[];
 
   @Output() createNewSpell = new EventEmitter<any>();
   @Output() onSpellSelected = new EventEmitter<any>();
 
   public newSpellName: string = '';
-  private availableSpells: string[] = [];
+  private allAvailableSpells: any[] = [];
+  public availableSpells: any[] = [];
   public isModification: boolean | undefined;
 
-  public constructor(private spellsAccessor: SpellsService) {}
+  public constructor(
+    private spellsAccessor: SpellsService,
+    private dataAccessor: DataService
+  ) {}
 
   public ngOnInit(): void {
-    this.availableSpells = this.spellsAccessor.getListOfSpells(this.level);
+    this.allAvailableSpells = this.spellsAccessor.getSpellsByLevel(
+      this.level,
+      this.dataAccessor.characterData.class
+    );
+    console.warn(this.allAvailableSpells);
+    console.warn('Already used spells: ', this.alreadyUsedSpells);
+
+    this.filterSpellArray();
     this.spellsAccessor.closeSubject$.subscribe((level) => {
       if (level !== this.level) {
         this.resetThis();
@@ -33,21 +42,25 @@ export class AddCardComponent {
     });
   }
 
-  // Enlarged view
-
   public emitNewSpell(): void {
     this.createNewSpell.emit(this.level);
     this.resetThis();
   }
 
   public continueToSpellSelection(modify: boolean): void {
+    this.filterSpellArray();
     this.isModification = modify;
+    if (modify) {
+      this.filterSpellArrayForModification();
+    } else {
+      this.filterSpellArray();
+    }
     this.spellsAccessor.closeAllOthers(this.level);
   }
 
-  public spellSelected(spellname: any): void {
+  public spellSelected(spell: any): void {
     const response = {
-      spell: this.spellsAccessor.getSpell(spellname),
+      spell: spell,
       isToModify: this.isModification,
     };
     this.onSpellSelected.emit(response);
@@ -59,18 +72,36 @@ export class AddCardComponent {
     this.isModification = undefined;
   }
 
-  public search: OperatorFunction<string, readonly string[]> = (
-    text$: Observable<string>
-  ) =>
-    text$.pipe(
-      debounceTime(200),
-      distinctUntilChanged(),
-      map((term) =>
-        term.length < 2
-          ? []
-          : this.availableSpells
-              .filter((v) => v.toLowerCase().indexOf(term.toLowerCase()) > -1)
-              .slice(0, 5)
-      )
-    );
+  public filterSpellArray(): void {
+    if (this.newSpellName.length >= 1) {
+      this.availableSpells = this.allAvailableSpells.filter(
+        (spell) =>
+          (spell.german
+            .toLowerCase()
+            .includes(this.newSpellName.toLowerCase()) ||
+            spell.english
+              .toLowerCase()
+              .includes(this.newSpellName.toLowerCase())) &&
+          !this.alreadyUsedSpells.includes(spell.id)
+      );
+    } else {
+      this.availableSpells = this.allAvailableSpells.filter(
+        (spell) => !this.alreadyUsedSpells.includes(spell.id)
+      );
+    }
+  }
+
+  public filterSpellArrayForModification(): void {
+    if (this.newSpellName.length >= 1) {
+      this.availableSpells = this.allAvailableSpells.filter(
+        (spell) =>
+          spell.german
+            .toLowerCase()
+            .includes(this.newSpellName.toLowerCase()) ||
+          spell.english.toLowerCase().includes(this.newSpellName.toLowerCase())
+      );
+    } else {
+      this.availableSpells = this.allAvailableSpells;
+    }
+  }
 }

+ 1 - 0
src/app/journal/journal-spellcards/journal-spellcards.component.html

@@ -44,6 +44,7 @@
         } @else {
         <add-card
           [level]="index"
+          [alreadyUsedSpells]="getUsedIDs(index)"
           (createNewSpell)="openSpellModal(false, index)"
           (onSpellSelected)="handleSpellSelection($event, index)"
         ></add-card>

+ 1 - 1
src/app/journal/journal-spellcards/journal-spellcards.component.scss

@@ -66,7 +66,7 @@
 
 .spell-list {
   border: solid 1px var(--border-color);
-  height: 16rem;
+  height: 22rem;
   background: white;
   border-radius: 0 10px 10px 10px;
   display: flex;

+ 12 - 9
src/app/journal/journal-spellcards/journal-spellcards.component.ts

@@ -62,6 +62,14 @@ export class JournalSpellcardsComponent {
 
   ///////// FUNCTIONS //////////
 
+  public getUsedIDs(level: number): number[] {
+    const usedIDs: number[] = [];
+    this.getSpellList(level).forEach((spell) => {
+      usedIDs.push(spell.id);
+    });
+    return usedIDs;
+  }
+
   public showFullSpellcard(
     spell: Spell,
     level: number,
@@ -69,7 +77,7 @@ export class JournalSpellcardsComponent {
   ): void {
     const favorites = this.dataAccessor.favoriteSpells;
     const alreadyInFavorites = favorites.some(
-      (currentSpell) => currentSpell.name === spell.name
+      (currentSpell) => currentSpell.id === spell.id
     );
     this.modalAccessor.openModal(FullSpellcardComponent, {
       spell: spell,
@@ -88,8 +96,6 @@ export class JournalSpellcardsComponent {
           }, 100);
         } else if (result.state === 'add') {
           this.dataAccessor.addFavoriteSpell(spell);
-        } else if (result.state !== 'cancel') {
-          throw new Error('Unexpected result state, please send a bug report.');
         }
       }
     );
@@ -137,18 +143,15 @@ export class JournalSpellcardsComponent {
       (result) => {
         if (result.state === 'update') {
           this.addSpell(result.data, result.data.level);
-        } else {
-          throw new Error('Unexpected result state, please send a bug report.');
         }
         resultSubscription.unsubscribe();
       }
     );
   }
 
-  public handleSpellSelection(event: any, level: number): void {
-    const newSpell = event.spell;
-    const isToModify = event.isToModify;
-
+  public handleSpellSelection(data: any, level: number): void {
+    const newSpell = data.spell;
+    const isToModify = data.isToModify;
     if (isToModify) {
       this.openSpellModalModifyOfficial(newSpell);
     } else {

+ 1 - 1
src/app/journal/journal-spellcards/spellcard/spellcard.component.html

@@ -1,5 +1,5 @@
 <div class="spellcard" #spellcard>
-  <div class="name">{{ spell.name }}</div>
+  <div class="name">{{ spell.german }}</div>
   <div>{{ spell.cost }}</div>
   <div>{{ spell.school }}</div>
 </div>

+ 2 - 6
src/app/journal/journal-spellcards/spellcard/spellcard.component.scss

@@ -1,6 +1,6 @@
 .spellcard {
-    height: 14rem;
-    width: 10rem;
+    height: 20rem;
+    width: 15rem;
     border: solid 1px var(--border-color);
     border-radius: 10px;
     background: white;
@@ -8,10 +8,6 @@
     cursor: pointer;
     transition: all 0.3s ease-in-out;
 
-    // &:hover {
-    //     box-shadow: var(--shadow);
-    // }
-
     .name {
         font-weight: 600;
         font-size: 1.125rem;

+ 1 - 1
src/app/journal/journal-stats/weapons-container/spell-table/spell-details/spell-details.component.html

@@ -1,4 +1,4 @@
-<div class="details-title">{{ spell.name }}</div>
+<div class="details-title">{{ spell.german }}</div>
 
 <div class="details-scrollcontainer">
   <div class="details-subheading">Beschreibung</div>

+ 1 - 1
src/app/journal/journal-stats/weapons-container/spell-table/spell-table.component.html

@@ -102,7 +102,7 @@
 <!-- NAME -->
 <ng-template #spellNameTemplate let-spell="spell">
   <div>
-    <div class="bold">{{ spell.name }}</div>
+    <div class="bold">{{ spell.german }}</div>
     <div class="bold small">
       <span *ngIf="spell.cost === 'action'">A</span>
       <span *ngIf="spell.cost === 'bonus'">B</span>

+ 3 - 3
src/app/journal/journal-stats/weapons-container/spell-table/spell-table.component.ts

@@ -55,7 +55,7 @@ export class SpellTableComponent {
   public ngOnInit(): void {
     this.spells = this.dataAccessor.favoriteSpells;
     this.preparedSpells = this.dataAccessor.getAllPreparedSpells();
-    this.preparedSpellsNames = this.preparedSpells.map((spell) => spell.name);
+    this.preparedSpellsNames = this.preparedSpells.map((spell) => spell.german);
     this.subscribeToData();
   }
 
@@ -130,7 +130,7 @@ export class SpellTableComponent {
 
   public onSpellSelect(spellname: any): void {
     const newSpell = this.preparedSpells.filter(
-      (spell) => spell.name === spellname
+      (spell) => spell.german === spellname
     );
     if (newSpell.length !== 1) {
       throw new Error('Spell not found.');
@@ -208,7 +208,7 @@ export class SpellTableComponent {
               .filter(
                 (v) =>
                   !this.spells.some(
-                    (spell) => spell.name.toLowerCase() === v.toLowerCase()
+                    (spell) => spell.german.toLowerCase() === v.toLowerCase()
                   )
               )
               .slice(0, 5)

+ 6 - 1
src/app/journal/spell-modal/spell-modal.component.html

@@ -6,7 +6,12 @@
   <div class="add-form-group">
     <div class="input-element">
       <label for="weaponName">Name</label>
-      <input type="text" class="add-input" id="weaponName" [(ngModel)]="name" />
+      <input
+        type="text"
+        class="add-input"
+        id="weaponName"
+        [(ngModel)]="german"
+      />
     </div>
     <div class="form-element-row">
       <!-- general -->

+ 16 - 5
src/app/journal/spell-modal/spell-modal.component.ts

@@ -15,8 +15,10 @@ export class SpellModalComponent {
   @Input() public isUpdate: boolean = false;
   @Input() public level: number = 0;
 
-  public name: string = '';
-  // public level: number = 0;
+  public german: string = '';
+  public english: string = '';
+  public id: number = 0;
+  public classes: string[] = [];
   public cost: string = 'action';
   public canRitual: boolean = false;
   public needsConcentration: boolean = false;
@@ -134,7 +136,10 @@ export class SpellModalComponent {
   }
 
   private loadspell(): void {
-    this.name = this.spell.name;
+    this.id = this.spell.id;
+    this.german = this.spell.german;
+    this.english = this.spell.english;
+    this.classes = this.spell.classes;
     this.level = this.spell.level;
     this.cost = this.spell.cost;
     this.canRitual = this.spell.canRitual;
@@ -161,7 +166,10 @@ export class SpellModalComponent {
 
   private createSpell(): Spell {
     const spell: Spell = {
-      name: this.name,
+      id: this.id,
+      english: this.english,
+      german: this.german,
+      classes: this.classes,
       duration: 0, // FIXME: only mocked
       damage: this.damage,
       heal: this.heal,
@@ -189,7 +197,10 @@ export class SpellModalComponent {
   }
 
   private resetSpell(): void {
-    this.name = '';
+    this.id = 0;
+    this.german = '';
+    this.english = '';
+    this.classes = [];
     this.level = 0;
     this.cost = 'action';
     this.canRitual = false;

+ 1 - 1
src/app/shared-components/full-spellcard/full-spellcard.component.html

@@ -1,6 +1,6 @@
 <div class="full-spellcard-container">
   <div class="full-spellcard">
-    <h2 style="text-align: center; margin-top: 1rem">{{ spell.name }}</h2>
+    <h2 style="text-align: center; margin-top: 1rem">{{ spell.german }}</h2>
 
     <table class="table table-striped" style="height: 20rem; overflow: auto">
       <thead>

+ 1 - 1
src/assets/icons/UIIcons/add.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/></svg>

+ 4 - 1
src/interfaces/spell.ts

@@ -1,5 +1,8 @@
 export interface Spell {
-  name: string;
+  id: number;
+  german: string;
+  english: string;
+  classes: string[];
   level: number;
   cost: string;
   duration: number;

+ 25 - 0
src/services/data/data.service.ts

@@ -44,6 +44,7 @@ export class DataService {
       characterData,
       combatStatsData,
       consumablesData,
+      customSpellsData,
       favoriteSpellsData,
       favoriteWeaponsData,
       foodData,
@@ -101,6 +102,8 @@ export class DataService {
     this.inspiration = combatStatsData.inspiration;
 
     // Spells
+
+    this.customSpells = customSpellsData.data;
     this.spellslots = spellslotsData;
     this.favoriteSpells = favoriteSpellsData.spells;
     this.spellLevel0 = spellLevel0.spells;
@@ -184,6 +187,28 @@ export class DataService {
     this.setData('favoriteSpells', { spells: this._favoriteSpells });
   }
 
+  private _customSpells: Spell[] = [];
+
+  public get customSpells(): Spell[] {
+    return this._customSpells;
+  }
+
+  public set customSpells(spells: Spell[]) {
+    this._customSpells = spells;
+    this.setData('customSpells', { spells: spells, id: this.customSpellId });
+  }
+
+  private _customSpellId: number = 100;
+
+  public get customSpellId(): number {
+    return this._customSpellId;
+  }
+
+  public set customSpellId(id: number) {
+    this._customSpellId = id;
+    this.setData('customSpells', { data: this.customSpells, id: id });
+  }
+
   private _spellLevel0: Spell[] = [];
 
   public get spellLevel0(): Spell[] {

+ 479 - 381
src/services/spells/spells.service.ts

@@ -16,409 +16,507 @@ export class SpellsService {
     this._closeSubject.next(level);
   }
 
-  // Spells
-  private level0: string[] = [
-    'Führung (Guidance)',
-    'Totenläuten (Toll the Dead)',
-    'Thaumaturgie (Thaumaturgy)',
-  ];
+  public getSpellsByLevel(level: number, characterClass: string): any[] {
+    return this.spells
+      .filter((spell) => spell.level === level)
+      .filter((spell) => spell.classes.includes(characterClass));
+  }
+
+  public getSpellById(id: number): any {
+    return this.spells.find((spell) => spell.id === id);
+  }
 
-  private level1: string[] = [
-    'Wunden Heilen (Cure Wounds)',
-    'Wunden hinzufügen (Inflict Wounds)',
-    'Magie entdecken (Detect Magic)',
-    'Gift und Krankheiten entdecken (Detect Poison and Disease)',
-    'Segnen (Bless)',
-    'Heilendes Wort (Healing Word)',
-    'Lenkendes Geschoss (Guiding Bolt)',
-    'Heldenmut (Heroism)',
-    'Heiligtum (Sanctuary)',
+  private spells: Spell[] = [
+    {
+      id: 0,
+      german: 'Göttliche Führung',
+      english: 'Guidance',
+      classes: ['Cleric', 'Druid'],
+      level: 0,
+      cost: 'action',
+      duration: 10,
+      canRitual: false,
+      needsVerbal: true,
+      needsSomatic: true,
+      needsMaterial: false,
+      needsConcentration: true,
+      needsAttackRoll: false,
+      needsSavingThrow: false,
+      doesDamage: false,
+      damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+      doesHeal: false,
+      heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+      description:
+        'Du berührst eine bereitwillige Kreatur. Einmal vor dem Ende des Zaubers kann das Ziel mit einem W4 würfeln und das Ergebnis zu einem Attributswurf seiner Wahl addieren. Es kann mit dem W4 vor oder nach dem Attributswurf würfeln. Dann endet der Zauber.',
+      school: 'divination',
+      isRanged: false,
+      range: 5,
+      hasAreaOfEffect: false,
+      areaOfEffectType: '',
+      radius: 0,
+    },
+    {
+      id: 1,
+      german: 'Totenläuten',
+      english: 'Toll the Dead',
+      classes: ['Cleric', 'Warlock', 'Wizard'],
+      level: 0,
+      cost: 'action',
+      duration: 0,
+      canRitual: false,
+      needsVerbal: true,
+      needsSomatic: true,
+      needsMaterial: false,
+      needsConcentration: false,
+      needsAttackRoll: false,
+      needsSavingThrow: true,
+      savingThrowAttribute: 'wisdom',
+      doesDamage: true,
+      damage: [{ diceNumber: '1', diceType: 'd8', damageType: 'necrotic' }],
+      doesHeal: false,
+      heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+      description:
+        'Du zeigst auf eine Kreatur innehalb von 18 Meter, die du sehen kannst und der Klang schmerzhafter Glocken füllt die Luft um sie herum für einen Moment. Das Ziel muss einen Weisheitsrettungswurf machen oder 1W8 Nekrotischen Schaden erleiden. Wenn das Ziel bereits Schaden erlitten hat, erhöht sich der Schaden auf 1W12.',
+      school: 'necromancy',
+      isRanged: true,
+      range: 60,
+      hasAreaOfEffect: false,
+      areaOfEffectType: '',
+      radius: 0,
+    },
+    {
+      id: 2,
+      german: 'Thaumaturgie',
+      english: 'Thaumaturgy',
+      classes: ['Cleric'],
+      level: 0,
+      cost: 'action',
+      duration: 10,
+      canRitual: false,
+      needsVerbal: true,
+      needsSomatic: false,
+      needsMaterial: false,
+      needsConcentration: false,
+      needsAttackRoll: false,
+      needsSavingThrow: false,
+      doesDamage: false,
+      damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+      doesHeal: false,
+      heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+      description:
+        'Du erzeugst einen der folgenden magischen Effekte innerhalb von 9 Metern: \b\b • Deine Stimme wird dreimal lauter.\b • Du lässt einen unverschlossenen Tür oder ein Fenster aufspringen. \b• Du lässt eine Flamme aufleuchten, erlöschen oder ihre Farbe ändern. \b• Du lässt den Boden für eine Minute beben.\b • Du erzeugst Geräusche, die von dir ausgehen, wie das Flüstern einer Stimme, das Brüllen eines Löwen, das Knurren von Donner oder das Klappern von Metall. \b• Du lässt eine Tür oder ein Fenster, das du berührst, für eine Minute verriegeln oder entriegeln.',
+      school: 'transmutation',
+      isRanged: true,
+      range: 30,
+      hasAreaOfEffect: false,
+      areaOfEffectType: '',
+      radius: 0,
+    },
   ];
 
-  private level2: string[] = [];
+  // // Spells
+  // private level0: string[] = [
+  //   'Führung (Guidance)',
+  //   'Totenläuten (Toll the Dead)',
+  //   'Thaumaturgie (Thaumaturgy)',
+  // ];
 
-  private level3: string[] = [];
+  // private level1: string[] = [
+  //   'Wunden Heilen (Cure Wounds)',
+  //   'Wunden hinzufügen (Inflict Wounds)',
+  //   'Magie entdecken (Detect Magic)',
+  //   'Gift und Krankheiten entdecken (Detect Poison and Disease)',
+  //   'Segnen (Bless)',
+  //   'Heilendes Wort (Healing Word)',
+  //   'Lenkendes Geschoss (Guiding Bolt)',
+  //   'Heldenmut (Heroism)',
+  //   'Heiligtum (Sanctuary)',
+  // ];
 
-  private level4: string[] = [];
+  // private level2: string[] = [];
 
-  private level5: string[] = [];
+  // private level3: string[] = [];
 
-  private level6: string[] = [];
+  // private level4: string[] = [];
 
-  private level7: string[] = [];
+  // private level5: string[] = [];
 
-  private level8: string[] = [];
+  // private level6: string[] = [];
 
-  private level9: string[] = [];
+  // private level7: string[] = [];
 
-  public getListOfSpells(level: number) {
-    switch (level) {
-      case 0:
-        return this.level0;
-      case 1:
-        return this.level1;
-      case 2:
-        return this.level2;
-      case 3:
-        return this.level3;
-      case 4:
-        return this.level4;
-      case 5:
-        return this.level5;
-      case 6:
-        return this.level6;
-      case 7:
-        return this.level7;
-      case 8:
-        return this.level8;
-      case 9:
-        return this.level9;
-      default:
-        return this.level0;
-    }
-  }
+  // private level8: string[] = [];
 
-  public getSpell(name: string): Spell {
-    switch (name) {
-      case 'Führung (Guidance)':
-        return this.guidance;
-      case 'Totenläuten (Toll the Dead)':
-        return this.tollTheDead;
-      case 'Thaumaturgie (Thaumaturgy)':
-        return this.thaumaturgie;
-      case 'Wunden Heilen (Cure Wounds)':
-        return this.cureWounds;
-      case 'Wunden hinzufügen (Inflict Wounds)':
-        return this.inflictWounds;
-      case 'Magie entdecken (Detect Magic)':
-        return this.detectMagic;
-      case 'Segnen (Bless)':
-        return this.bless;
-      case 'Heilendes Wort (Healing Word)':
-        return this.healingWord;
-      case 'Lenkendes Geschoss (Guiding Bolt)':
-        return this.guidingBolt;
-      case 'Gift und Krankheiten entdecken (Detect Poison and Disease)':
-        return this.detectPoisonAndDisease;
-      case 'Heldenmut (Heroism)':
-        return this.heroism;
-      case 'Heiligtum (Sanctuary)':
-        return this.santcuary;
-      default:
-        return this.guidance;
-    }
-  }
+  // private level9: string[] = [];
+
+  // public getListOfSpells(level: number) {
+  //   switch (level) {
+  //     case 0:
+  //       return this.level0;
+  //     case 1:
+  //       return this.level1;
+  //     case 2:
+  //       return this.level2;
+  //     case 3:
+  //       return this.level3;
+  //     case 4:
+  //       return this.level4;
+  //     case 5:
+  //       return this.level5;
+  //     case 6:
+  //       return this.level6;
+  //     case 7:
+  //       return this.level7;
+  //     case 8:
+  //       return this.level8;
+  //     case 9:
+  //       return this.level9;
+  //     default:
+  //       return this.level0;
+  //   }
+  // }
+
+  // public getSpell(name: string): Spell {
+  //   switch (name) {
+  //     case 'Führung (Guidance)':
+  //       return this.guidance;
+  //     case 'Totenläuten (Toll the Dead)':
+  //       return this.tollTheDead;
+  //     case 'Thaumaturgie (Thaumaturgy)':
+  //       return this.thaumaturgie;
+  //     case 'Wunden Heilen (Cure Wounds)':
+  //       return this.cureWounds;
+  //     case 'Wunden hinzufügen (Inflict Wounds)':
+  //       return this.inflictWounds;
+  //     case 'Magie entdecken (Detect Magic)':
+  //       return this.detectMagic;
+  //     case 'Segnen (Bless)':
+  //       return this.bless;
+  //     case 'Heilendes Wort (Healing Word)':
+  //       return this.healingWord;
+  //     case 'Lenkendes Geschoss (Guiding Bolt)':
+  //       return this.guidingBolt;
+  //     case 'Gift und Krankheiten entdecken (Detect Poison and Disease)':
+  //       return this.detectPoisonAndDisease;
+  //     case 'Heldenmut (Heroism)':
+  //       return this.heroism;
+  //     case 'Heiligtum (Sanctuary)':
+  //       return this.santcuary;
+  //     default:
+  //       return this.guidance;
+  //   }
+  // }
 
-  private inflictWounds: Spell = {
-    name: 'Wunden hinzufügen',
-    level: 1,
-    cost: 'action',
-    duration: 0,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: true,
-    needsSavingThrow: false,
-    doesDamage: true,
-    damage: [{ diceNumber: '3', diceType: 'd10', damageType: 'necrotic' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Mach einen Nahkampf-Zauberangriff gegen eine Kreatur deiner Wahl. Bei einem Erfolg erleidet das Ziel 3W10 Nekrotischen Schaden. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt der Schaden für jeden Grad über dem 1. um 1W10.',
-    school: 'necromancy',
-    isRanged: false,
-    range: 5,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private inflictWounds: Spell = {
+  //   name: 'Wunden hinzufügen',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 0,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: true,
+  //   needsSavingThrow: false,
+  //   doesDamage: true,
+  //   damage: [{ diceNumber: '3', diceType: 'd10', damageType: 'necrotic' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Mach einen Nahkampf-Zauberangriff gegen eine Kreatur deiner Wahl. Bei einem Erfolg erleidet das Ziel 3W10 Nekrotischen Schaden. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt der Schaden für jeden Grad über dem 1. um 1W10.',
+  //   school: 'necromancy',
+  //   isRanged: false,
+  //   range: 5,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private guidance: Spell = {
-    name: 'Göttliche Führung',
-    level: 0,
-    cost: 'action',
-    duration: 10,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: true,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Du berührst eine bereitwillige Kreatur. Einmal vor dem Ende des Zaubers kann das Ziel mit einem W4 würfeln und das Ergebnis zu einem Attributswurf seiner Wahl addieren. Es kann mit dem W4 vor oder nach dem Attributswurf würfeln. Dann endet der Zauber.',
-    school: 'divination',
-    isRanged: false,
-    range: 5,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private guidance: Spell = {
+  //   name: 'Göttliche Führung',
+  //   level: 0,
+  //   cost: 'action',
+  //   duration: 10,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: true,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Du berührst eine bereitwillige Kreatur. Einmal vor dem Ende des Zaubers kann das Ziel mit einem W4 würfeln und das Ergebnis zu einem Attributswurf seiner Wahl addieren. Es kann mit dem W4 vor oder nach dem Attributswurf würfeln. Dann endet der Zauber.',
+  //   school: 'divination',
+  //   isRanged: false,
+  //   range: 5,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private tollTheDead: Spell = {
-    name: 'Totenläuten',
-    level: 0,
-    cost: 'action',
-    duration: 0,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: false,
-    needsSavingThrow: true,
-    savingThrowAttribute: 'wisdom',
-    doesDamage: true,
-    damage: [{ diceNumber: '1', diceType: 'd8', damageType: 'necrotic' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Du zeigst auf eine Kreatur innehalb von 18 Meter, die du sehen kannst und der Klang schmerzhafter Glocken füllt die Luft um sie herum für einen Moment. Das Ziel muss einen Weisheitsrettungswurf machen oder 1W8 Nekrotischen Schaden erleiden. Wenn das Ziel bereits Schaden erlitten hat, erhöht sich der Schaden auf 1W12.',
-    school: 'necromancy',
-    isRanged: true,
-    range: 60,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private tollTheDead: Spell = {
+  //   name: 'Totenläuten',
+  //   level: 0,
+  //   cost: 'action',
+  //   duration: 0,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: true,
+  //   savingThrowAttribute: 'wisdom',
+  //   doesDamage: true,
+  //   damage: [{ diceNumber: '1', diceType: 'd8', damageType: 'necrotic' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Du zeigst auf eine Kreatur innehalb von 18 Meter, die du sehen kannst und der Klang schmerzhafter Glocken füllt die Luft um sie herum für einen Moment. Das Ziel muss einen Weisheitsrettungswurf machen oder 1W8 Nekrotischen Schaden erleiden. Wenn das Ziel bereits Schaden erlitten hat, erhöht sich der Schaden auf 1W12.',
+  //   school: 'necromancy',
+  //   isRanged: true,
+  //   range: 60,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private thaumaturgie: Spell = {
-    name: 'Thaumaturgie',
-    level: 0,
-    cost: 'action',
-    duration: 10,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: false,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Du erzeugst einen der folgenden magischen Effekte innerhalb von 9 Metern: \b\b • Deine Stimme wird dreimal lauter.\b • Du lässt einen unverschlossenen Tür oder ein Fenster aufspringen. \b• Du lässt eine Flamme aufleuchten, erlöschen oder ihre Farbe ändern. \b• Du lässt den Boden für eine Minute beben.\b • Du erzeugst Geräusche, die von dir ausgehen, wie das Flüstern einer Stimme, das Brüllen eines Löwen, das Knurren von Donner oder das Klappern von Metall. \b• Du lässt eine Tür oder ein Fenster, das du berührst, für eine Minute verriegeln oder entriegeln.',
-    school: 'transmutation',
-    isRanged: true,
-    range: 30,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private thaumaturgie: Spell = {
+  //   name: 'Thaumaturgie',
+  //   level: 0,
+  //   cost: 'action',
+  //   duration: 10,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: false,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Du erzeugst einen der folgenden magischen Effekte innerhalb von 9 Metern: \b\b • Deine Stimme wird dreimal lauter.\b • Du lässt einen unverschlossenen Tür oder ein Fenster aufspringen. \b• Du lässt eine Flamme aufleuchten, erlöschen oder ihre Farbe ändern. \b• Du lässt den Boden für eine Minute beben.\b • Du erzeugst Geräusche, die von dir ausgehen, wie das Flüstern einer Stimme, das Brüllen eines Löwen, das Knurren von Donner oder das Klappern von Metall. \b• Du lässt eine Tür oder ein Fenster, das du berührst, für eine Minute verriegeln oder entriegeln.',
+  //   school: 'transmutation',
+  //   isRanged: true,
+  //   range: 30,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private cureWounds: Spell = {
-    name: 'Heilende Berührung',
-    level: 1,
-    cost: 'action',
-    duration: 0,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: true,
-    heal: { diceNumber: '1', diceType: 'd8', additionalHeal: 4 },
-    description:
-      'Eine Kreatur, die du berührst, gewinnt Trefferpunkte in Höhe von 1W8 + deinem Attributsmodifikator im Zauberwirken zurück. Dieser Zauber wirkt nicht auf Untote oder Konstrukte. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt die Heilung für jeden Grad über dem 1. um 1W8.',
-    school: 'evocation',
-    isRanged: false,
-    range: 5,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private cureWounds: Spell = {
+  //   name: 'Heilende Berührung',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 0,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: true,
+  //   heal: { diceNumber: '1', diceType: 'd8', additionalHeal: 4 },
+  //   description:
+  //     'Eine Kreatur, die du berührst, gewinnt Trefferpunkte in Höhe von 1W8 + deinem Attributsmodifikator im Zauberwirken zurück. Dieser Zauber wirkt nicht auf Untote oder Konstrukte. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt die Heilung für jeden Grad über dem 1. um 1W8.',
+  //   school: 'evocation',
+  //   isRanged: false,
+  //   range: 5,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private detectMagic: Spell = {
-    name: 'Magie entdecken',
-    level: 1,
-    cost: 'action',
-    duration: 100,
-    canRitual: true,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Während der Wirkungsdauer nimmst du die Gegenwart von Magie im Abstand von bis zu neun Metern von dir wahr. Wenn du auf diese Weise Magie wahrnimmst, kannst du deine Aktion verwenden, um schwache Auren um sichtbare magische Kreaturen oder Objekte sowie ihre magische Schule zu erkennen, falls vorhanden. Dieser Zauber durchdringt die meisten Barrieren, wird aber von 30 Zentimetern Stein, 2,5 Zentimetern gewöhnlichem Metall, dünnem Bleiblech sowie von einem Meter Holz oder Erde blockiert.',
-    school: 'divination',
-    isRanged: true,
-    range: 30,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private detectMagic: Spell = {
+  //   name: 'Magie entdecken',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 100,
+  //   canRitual: true,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Während der Wirkungsdauer nimmst du die Gegenwart von Magie im Abstand von bis zu neun Metern von dir wahr. Wenn du auf diese Weise Magie wahrnimmst, kannst du deine Aktion verwenden, um schwache Auren um sichtbare magische Kreaturen oder Objekte sowie ihre magische Schule zu erkennen, falls vorhanden. Dieser Zauber durchdringt die meisten Barrieren, wird aber von 30 Zentimetern Stein, 2,5 Zentimetern gewöhnlichem Metall, dünnem Bleiblech sowie von einem Meter Holz oder Erde blockiert.',
+  //   school: 'divination',
+  //   isRanged: true,
+  //   range: 30,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private bless: Spell = {
-    name: 'Segnen',
-    level: 1,
-    cost: 'action',
-    duration: 10,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: true,
-    needsConcentration: true,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Du segnest bis zu drei Kreaturen deiner Wahl in Reichweite. Wenn ein Ziel während der Wirkungsdauer einen Angriffs- oder Rettungswurf ausführt, darf es mit einem W4 würfeln und das Würfelergebnis zu seinem Angriffs- oder Rettungswurf addieren. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, kannst du für jeden Grad über dem 1. eine zusätzliche Kreatur als Ziel wählen.',
-    school: 'enchantment',
-    isRanged: true,
-    range: 60,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private bless: Spell = {
+  //   name: 'Segnen',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 10,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: true,
+  //   needsConcentration: true,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Du segnest bis zu drei Kreaturen deiner Wahl in Reichweite. Wenn ein Ziel während der Wirkungsdauer einen Angriffs- oder Rettungswurf ausführt, darf es mit einem W4 würfeln und das Würfelergebnis zu seinem Angriffs- oder Rettungswurf addieren. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, kannst du für jeden Grad über dem 1. eine zusätzliche Kreatur als Ziel wählen.',
+  //   school: 'enchantment',
+  //   isRanged: true,
+  //   range: 60,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private healingWord: Spell = {
-    name: 'Heilendes Wort',
-    level: 1,
-    cost: 'bonus action',
-    duration: 0,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: false,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: true,
-    heal: { diceNumber: '1', diceType: 'd4', additionalHeal: 4 },
-    description:
-      'Eine Kreatur deiner Wahl in Reichweite, die du sehen kannst, gewinnt Trefferpunkte in Höhe von 1W4 + deinem Zauberwirken-Attributsmodifikator zurück. Dieser Zauber wirkt nicht auf Untote oder Konstrukte. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt die Heilung für jeden Grad über dem 1. um 1W4.',
-    school: 'evocation',
-    isRanged: true,
-    range: 60,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private healingWord: Spell = {
+  //   name: 'Heilendes Wort',
+  //   level: 1,
+  //   cost: 'bonus action',
+  //   duration: 0,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: false,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: true,
+  //   heal: { diceNumber: '1', diceType: 'd4', additionalHeal: 4 },
+  //   description:
+  //     'Eine Kreatur deiner Wahl in Reichweite, die du sehen kannst, gewinnt Trefferpunkte in Höhe von 1W4 + deinem Zauberwirken-Attributsmodifikator zurück. Dieser Zauber wirkt nicht auf Untote oder Konstrukte. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt die Heilung für jeden Grad über dem 1. um 1W4.',
+  //   school: 'evocation',
+  //   isRanged: true,
+  //   range: 60,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private guidingBolt: Spell = {
-    name: 'Lenkendes Geschoss',
-    level: 1,
-    cost: 'action',
-    duration: 0,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: false,
-    needsAttackRoll: true,
-    needsSavingThrow: false,
-    doesDamage: true,
-    damage: [{ diceNumber: '4', diceType: 'd6', damageType: 'radiant' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Ein Lichtblitz schießt auf eine Kreatur deiner Wahl in Reichweite zu. Führe einen Fernkampf-Zauberangriff gegen das Ziel aus. Bei einem Erfolg erleidet das Ziel 4W6 gleißenden Schaden. Dank des mystischen dämmrigen Lichts, das auf dem Ziel glitzert, ist der nächste Angriffswurf gegen das Ziel vor Ende deines nächsten Zugs im Vorteil. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt der Schaden für jeden Grad über dem 1. um 1W6.',
-    school: 'evocation',
-    isRanged: true,
-    range: 120,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private guidingBolt: Spell = {
+  //   name: 'Lenkendes Geschoss',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 0,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: false,
+  //   needsAttackRoll: true,
+  //   needsSavingThrow: false,
+  //   doesDamage: true,
+  //   damage: [{ diceNumber: '4', diceType: 'd6', damageType: 'radiant' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Ein Lichtblitz schießt auf eine Kreatur deiner Wahl in Reichweite zu. Führe einen Fernkampf-Zauberangriff gegen das Ziel aus. Bei einem Erfolg erleidet das Ziel 4W6 gleißenden Schaden. Dank des mystischen dämmrigen Lichts, das auf dem Ziel glitzert, ist der nächste Angriffswurf gegen das Ziel vor Ende deines nächsten Zugs im Vorteil. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, steigt der Schaden für jeden Grad über dem 1. um 1W6.',
+  //   school: 'evocation',
+  //   isRanged: true,
+  //   range: 120,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private detectPoisonAndDisease: Spell = {
-    name: 'Gift und Krankheiten entdecken',
-    level: 1,
-    cost: 'action',
-    duration: 100,
-    canRitual: true,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: true,
-    needsConcentration: true,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Während der Wirkungsdauer nimmst du die Gegenwart und die Position von Giften, giftigen Kreaturen und Krankheiten im Abstand von bis zu neun Metern von dir wahr. Du kannst auch die Art des Gifts, der giftigen Kreatur oder der Krankheit bestimmen. Dieser Zauber durchdringt die meisten Barrieren, wird aber von 30 Zentimetern Stein, 2,5 Zentimetern gewöhnlichem Metall, dünnem Bleiblech sowie von einem Meter Holz oder Erde blockiert.',
-    school: 'divination',
-    isRanged: true,
-    range: 30,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private detectPoisonAndDisease: Spell = {
+  //   name: 'Gift und Krankheiten entdecken',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 100,
+  //   canRitual: true,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: true,
+  //   needsConcentration: true,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Während der Wirkungsdauer nimmst du die Gegenwart und die Position von Giften, giftigen Kreaturen und Krankheiten im Abstand von bis zu neun Metern von dir wahr. Du kannst auch die Art des Gifts, der giftigen Kreatur oder der Krankheit bestimmen. Dieser Zauber durchdringt die meisten Barrieren, wird aber von 30 Zentimetern Stein, 2,5 Zentimetern gewöhnlichem Metall, dünnem Bleiblech sowie von einem Meter Holz oder Erde blockiert.',
+  //   school: 'divination',
+  //   isRanged: true,
+  //   range: 30,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private heroism: Spell = {
-    name: 'Heldenmut',
-    level: 1,
-    cost: 'action',
-    duration: 10,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: false,
-    needsConcentration: true,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Du berührst eine bereitwillige Kreatur und erfüllst sie mit Tapferkeit. Bis der Zauber endet, kann die Kreatur nicht verängstigt werden, und sie erhält zu Beginn jedes ihrer Züge temporäre Trefferpunkte in Höhe deines Zauberwirken-Attributsmodifikators. Wenn der Zauber endet, verliert das Ziel alle verbleibenden temporären Trefferpunkte dieses Zaubers. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, kannst du für jeden Grad über dem 1. eine zusätzliche Kreatur als Ziel wählen.',
-    school: 'enchantment',
-    isRanged: false,
-    range: 5,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private heroism: Spell = {
+  //   name: 'Heldenmut',
+  //   level: 1,
+  //   cost: 'action',
+  //   duration: 10,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: false,
+  //   needsConcentration: true,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Du berührst eine bereitwillige Kreatur und erfüllst sie mit Tapferkeit. Bis der Zauber endet, kann die Kreatur nicht verängstigt werden, und sie erhält zu Beginn jedes ihrer Züge temporäre Trefferpunkte in Höhe deines Zauberwirken-Attributsmodifikators. Wenn der Zauber endet, verliert das Ziel alle verbleibenden temporären Trefferpunkte dieses Zaubers. Auf höheren Graden: Wirkst du diesen Zauber, indem du einen Zauberplatz des 2. Grades oder höher nutzt, kannst du für jeden Grad über dem 1. eine zusätzliche Kreatur als Ziel wählen.',
+  //   school: 'enchantment',
+  //   isRanged: false,
+  //   range: 5,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 
-  private santcuary: Spell = {
-    name: 'Heiligtum',
-    level: 1,
-    cost: 'bonus action',
-    duration: 10,
-    canRitual: false,
-    needsVerbal: true,
-    needsSomatic: true,
-    needsMaterial: true,
-    needsConcentration: true,
-    needsAttackRoll: false,
-    needsSavingThrow: false,
-    doesDamage: false,
-    damage: [{ diceNumber: '', diceType: '', damageType: '' }],
-    doesHeal: false,
-    heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
-    description:
-      'Du schützt eine Kreatur in Reichweite vor Angriffen. Während der Wirkungsdauer muss jede Kreatur, die bei einem Angriff oder schädlichen Zauber die geschützte Kreatur als Ziel hat, zuerst einen Weisheitsrettungswurf bestehen. Scheitert der Wurf, muss die Kreatur ein neues Ziel wählen, oder sie verliert den Angriff oder Zauber. Dieser Zauber schützt die entsprechende Kreatur nicht vor Flächeneffekten wie der Explosion eines Feuerballs. Greift die geschützte Kreatur an oder wirkt sie einen Zauber auf eine feindliche Kreatur, endet der Effekt dieses Zaubers.',
-    school: 'abjuration',
-    isRanged: true,
-    range: 60,
-    hasAreaOfEffect: false,
-    areaOfEffectType: '',
-    radius: 0,
-  };
+  // private santcuary: Spell = {
+  //   name: 'Heiligtum',
+  //   level: 1,
+  //   cost: 'bonus action',
+  //   duration: 10,
+  //   canRitual: false,
+  //   needsVerbal: true,
+  //   needsSomatic: true,
+  //   needsMaterial: true,
+  //   needsConcentration: true,
+  //   needsAttackRoll: false,
+  //   needsSavingThrow: false,
+  //   doesDamage: false,
+  //   damage: [{ diceNumber: '', diceType: '', damageType: '' }],
+  //   doesHeal: false,
+  //   heal: { diceNumber: '', diceType: '', additionalHeal: 0 },
+  //   description:
+  //     'Du schützt eine Kreatur in Reichweite vor Angriffen. Während der Wirkungsdauer muss jede Kreatur, die bei einem Angriff oder schädlichen Zauber die geschützte Kreatur als Ziel hat, zuerst einen Weisheitsrettungswurf bestehen. Scheitert der Wurf, muss die Kreatur ein neues Ziel wählen, oder sie verliert den Angriff oder Zauber. Dieser Zauber schützt die entsprechende Kreatur nicht vor Flächeneffekten wie der Explosion eines Feuerballs. Greift die geschützte Kreatur an oder wirkt sie einen Zauber auf eine feindliche Kreatur, endet der Effekt dieses Zaubers.',
+  //   school: 'abjuration',
+  //   isRanged: true,
+  //   range: 60,
+  //   hasAreaOfEffect: false,
+  //   areaOfEffectType: '',
+  //   radius: 0,
+  // };
 }