Browse Source

Merge branch 'release/0.4.0'

Warafear 1 year ago
parent
commit
f06b515d46

+ 144 - 0
.nx/cache/d/daemon.log

@@ -463546,3 +463546,147 @@ To fix this, set a unique name for each project in a project.json inside the pro
     at async processFilesAndCreateAndSerializeProjectGraph (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:138:17)
 [NX Daemon Server] - 2024-01-27T19:19:53.947Z - Time taken for 'hash changed files from watcher' 24.57920002937317ms
 [NX Daemon Server] - 2024-01-27T19:19:53.949Z - Done responding to the client null
+[NX Daemon Server] - 2024-01-28T07:53:54.310Z - Started listening on: \\.\pipe\nx\C:\Users\chris\AppData\Local\Temp\83d14e7134fc08a15480\d.sock
+[NX Daemon Server] - 2024-01-28T07:53:54.315Z - [WATCHER]: Subscribed to changes within: c:\Softwareprojekte\DnD (native)
+[NX Daemon Server] - 2024-01-28T07:53:54.324Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T07:53:54.326Z - Closed a connection. Number of open connections: 0
+[NX Daemon Server] - 2024-01-28T07:53:54.326Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T07:53:54.328Z - [REQUEST]: Client Request for Project Graph Received
+[NX Daemon Server] - 2024-01-28T07:53:55.627Z - Error detected when recomputing project file map: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+[NX Daemon Server] - 2024-01-28T07:53:55.627Z - [REQUEST]: Responding to the client with an error. Error when preparing serialized project graph. The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+Error: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+    at readProjectConfigurationsFromRootMap (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:97:15)
+    at buildProjectsConfigurationsFromProjectPathsAndPlugins (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:70:19)
+    at createProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:131:129)
+    at WorkspaceContext.<anonymous> (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:82:39)
+    at getProjectConfigurationsFromContext (c:\Softwareprojekte\DnD\node_modules\nx\src\utils\workspace-context.js:26:29)
+    at _retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:81:72)
+    at retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:58:12)
+    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
+    at async processCollectedUpdatedAndDeletedFiles (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:102:34)
+    at async processFilesAndCreateAndSerializeProjectGraph (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:138:17)
+[NX Daemon Server] - 2024-01-28T07:53:55.629Z - Time taken for 'hash changed files from watcher' 358.59670001268387ms
+[NX Daemon Server] - 2024-01-28T07:53:55.629Z - Done responding to the client null
+[NX Daemon Server] - 2024-01-28T20:49:26.666Z - Started listening on: \\.\pipe\nx\C:\Users\chris\AppData\Local\Temp\83d14e7134fc08a15480\d.sock
+[NX Daemon Server] - 2024-01-28T20:49:26.672Z - [WATCHER]: Subscribed to changes within: c:\Softwareprojekte\DnD (native)
+[NX Daemon Server] - 2024-01-28T20:49:26.681Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T20:49:26.685Z - Closed a connection. Number of open connections: 0
+[NX Daemon Server] - 2024-01-28T20:49:26.685Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T20:49:26.690Z - [REQUEST]: Client Request for Project Graph Received
+[NX Daemon Server] - 2024-01-28T20:49:28.362Z - Error detected when recomputing project file map: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+[NX Daemon Server] - 2024-01-28T20:49:28.362Z - [REQUEST]: Responding to the client with an error. Error when preparing serialized project graph. The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+Error: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+    at readProjectConfigurationsFromRootMap (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:97:15)
+    at buildProjectsConfigurationsFromProjectPathsAndPlugins (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:70:19)
+    at createProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:131:129)
+    at WorkspaceContext.<anonymous> (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:82:39)
+    at getProjectConfigurationsFromContext (c:\Softwareprojekte\DnD\node_modules\nx\src\utils\workspace-context.js:26:29)
+    at _retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:81:72)
+    at retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:58:12)
+    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
+    at async processCollectedUpdatedAndDeletedFiles (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:102:34)
+    at async processFilesAndCreateAndSerializeProjectGraph (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:138:17)
+[NX Daemon Server] - 2024-01-28T20:49:28.365Z - Time taken for 'hash changed files from watcher' 479.53909999132156ms
+[NX Daemon Server] - 2024-01-28T20:49:28.365Z - Done responding to the client null
+[NX Daemon Server] - 2024-01-28T20:51:00.270Z - Started listening on: \\.\pipe\nx\C:\Users\chris\AppData\Local\Temp\83d14e7134fc08a15480\d.sock
+[NX Daemon Server] - 2024-01-28T20:51:00.272Z - [WATCHER]: Subscribed to changes within: c:\Softwareprojekte\DnD (native)
+[NX Daemon Server] - 2024-01-28T20:51:00.280Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T20:51:00.282Z - Closed a connection. Number of open connections: 0
+[NX Daemon Server] - 2024-01-28T20:51:00.282Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T20:51:00.285Z - [REQUEST]: Client Request for Project Graph Received
+[NX Daemon Server] - 2024-01-28T20:51:00.363Z - Error detected when recomputing project file map: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+[NX Daemon Server] - 2024-01-28T20:51:00.363Z - [REQUEST]: Responding to the client with an error. Error when preparing serialized project graph. The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+Error: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+    at readProjectConfigurationsFromRootMap (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:97:15)
+    at buildProjectsConfigurationsFromProjectPathsAndPlugins (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:70:19)
+    at createProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:131:129)
+    at WorkspaceContext.<anonymous> (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:82:39)
+    at getProjectConfigurationsFromContext (c:\Softwareprojekte\DnD\node_modules\nx\src\utils\workspace-context.js:26:29)
+    at _retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:81:72)
+    at retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:58:12)
+    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
+    at async processCollectedUpdatedAndDeletedFiles (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:102:34)
+    at async processFilesAndCreateAndSerializeProjectGraph (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:138:17)
+[NX Daemon Server] - 2024-01-28T20:51:00.365Z - Time taken for 'hash changed files from watcher' 24.7389999628067ms
+[NX Daemon Server] - 2024-01-28T20:51:00.365Z - Done responding to the client null
+[NX Daemon Server] - 2024-01-28T20:51:02.196Z - Started listening on: \\.\pipe\nx\C:\Users\chris\AppData\Local\Temp\83d14e7134fc08a15480\d.sock
+[NX Daemon Server] - 2024-01-28T20:51:02.199Z - [WATCHER]: Subscribed to changes within: c:\Softwareprojekte\DnD (native)
+[NX Daemon Server] - 2024-01-28T20:51:02.212Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T20:51:02.215Z - Closed a connection. Number of open connections: 0
+[NX Daemon Server] - 2024-01-28T20:51:02.215Z - Established a connection. Number of open connections: 1
+[NX Daemon Server] - 2024-01-28T20:51:02.217Z - [REQUEST]: Client Request for Project Graph Received
+[NX Daemon Server] - 2024-01-28T20:51:02.272Z - Error detected when recomputing project file map: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+[NX Daemon Server] - 2024-01-28T20:51:02.273Z - [REQUEST]: Responding to the client with an error. Error when preparing serialized project graph. The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+Error: The following projects are defined in multiple locations:
+- DnDTools: 
+  - 
+  - .
+
+To fix this, set a unique name for each project in a project.json inside the project's root. If the project does not currently have a project.json, you can create one that contains only a name.
+    at readProjectConfigurationsFromRootMap (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:97:15)
+    at buildProjectsConfigurationsFromProjectPathsAndPlugins (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\project-configuration-utils.js:70:19)
+    at createProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:131:129)
+    at WorkspaceContext.<anonymous> (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:82:39)
+    at getProjectConfigurationsFromContext (c:\Softwareprojekte\DnD\node_modules\nx\src\utils\workspace-context.js:26:29)
+    at _retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:81:72)
+    at retrieveProjectConfigurations (c:\Softwareprojekte\DnD\node_modules\nx\src\project-graph\utils\retrieve-workspace-files.js:58:12)
+    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
+    at async processCollectedUpdatedAndDeletedFiles (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:102:34)
+    at async processFilesAndCreateAndSerializeProjectGraph (c:\Softwareprojekte\DnD\node_modules\nx\src\daemon\server\project-graph-incremental-recomputation.js:138:17)
+[NX Daemon Server] - 2024-01-28T20:51:02.276Z - Time taken for 'hash changed files from watcher' 0.937999963760376ms
+[NX Daemon Server] - 2024-01-28T20:51:02.277Z - Done responding to the client null

+ 1 - 1
.nx/cache/d/server-process.json

@@ -1 +1 @@
-{"processId":6032}
+{"processId":10992}

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "dndtools",
-  "version": "0.3.0",
+  "version": "0.4.0",
   "scripts": {
     "ng": "ng",
     "start": "nx serve",

+ 1 - 1
src/app/character/character-creator/character-creator.component.ts

@@ -354,7 +354,7 @@ export class CharacterCreatorComponent {
         this.characterName,
         {
           spells: [],
-          id: 1000,
+          id: 10000,
         },
         'customSpells'
       ),

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

@@ -1,7 +1,7 @@
 <div class="spellcards-container">
   <div cdkDropListGroup>
     <!-- TODO: revert array to 0-9 -->
-    @for(level of [0,1]; track level; let index = $index) {
+    @for(level of [0,1,2,3,4,5,6,7,8,9]; track level; let index = $index) {
 
     <div class="example-container">
       <div

+ 53 - 6
src/app/journal/journal-spellcards/spellcard/spellcard.component.html

@@ -1,7 +1,54 @@
-<div class="spellcard" #spellcard>
-  <div class="name">{{ spell.german }}</div>
-  <div>{{ spell.cost }}</div>
-  <div>{{ spell.school }}</div>
-  <div>ID: {{ spell.id }}</div>
-  <div>{{ spell.classes }}</div>
+<!-- <div class="card-container">
+  <div
+    class="card-background"
+    [style.background-color]="backgroundColors[spell.school]"
+  ></div>
+  <div class="title" [style.box-shadow]="borders[spell.school]">
+    {{ spell.german }}
+  </div>
+  <img
+    class="spell-image"
+    [src]="'assets/images/spells/' + spell.english.toLowerCase() + '.jpg'"
+    [style.box-shadow]="borders[spell.school]"
+    alt="spell image"
+  />
+  <div class="info" [style.box-shadow]="borders[spell.school]">
+    <div class="school">{{ schools[spell.school].display }}</div>
+    <div class="level" [style.box-shadow]="borders[spell.school]">
+      {{ spell.level }}
+    </div>
+  </div>
+</div> -->
+
+<div class="card-container">
+  <div
+    class="card-background"
+    [style.background-color]="
+      'var(--' + spell.school.toLowerCase() + '-background)'
+    "
+  ></div>
+  <div
+    class="title"
+    [style.box-shadow]="'var(--' + spell.school.toLowerCase() + '-border)'"
+  >
+    {{ spell.german }}
+  </div>
+  <img
+    class="spell-image"
+    [src]="'assets/images/spells/' + spell.english + '.jpg'"
+    [style.box-shadow]="'var(--' + spell.school.toLowerCase() + '-border)'"
+    alt="spell image"
+  />
+  <div
+    class="info"
+    [style.box-shadow]="'var(--' + spell.school.toLowerCase() + '-border)'"
+  >
+    <div class="school">{{ schools[spell.school].display }}</div>
+    <div
+      class="level"
+      [style.box-shadow]="'var(--' + spell.school.toLowerCase() + '-border)'"
+    >
+      {{ spell.level }}
+    </div>
+  </div>
 </div>

+ 105 - 12
src/app/journal/journal-spellcards/spellcard/spellcard.component.scss

@@ -1,17 +1,110 @@
-.spellcard {
-    height: 20rem;
+.card-container {
     width: 15rem;
-    border: solid 1px var(--border-color);
+    height: 20rem;
     border-radius: 10px;
-    background: white;
+    border: 1px solid black;
+    box-sizing: border-box;
     box-shadow: var(--shadow);
-    cursor: pointer;
-    transition: all 0.3s ease-in-out;
+    background: #171314;
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.card-background {
+    height: 86%;
+    width: calc(100% - 20px);
+    margin: 10px;
+    border-top-left-radius: 6px;
+    border-top-right-radius: 6px;
+    border-bottom-left-radius: 8%;
+    border-bottom-right-radius: 8%;
+    background-color: #863f57;
+    background-image: repeating-linear-gradient(140deg, transparent, rgba(255, 255, 255, 0.25) 1%, transparent 20%),
+        repeating-linear-gradient(-30deg, transparent, transparent 8%, rgba(255, 255, 255, 0.4), transparent 9%),
+        repeating-linear-gradient(-10deg, transparent, transparent 13%, rgba(0, 0, 0, 0.4), transparent 15%),
+        repeating-linear-gradient(80deg, transparent, transparent 7.5%, rgba(0, 0, 0, 0.25), transparent 8%),
+        repeating-linear-gradient(5deg, transparent, transparent 10.5%, rgba(255, 255, 255, 0.5), transparent 11%),
+        repeating-linear-gradient(75deg, transparent, transparent 11.5%, rgba(255, 255, 255, 0.5), transparent 12%),
+        repeating-radial-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2) 1%, transparent 1%, transparent 5%);
+    background-repeat: no-repeat;
+    background-size: cover;
+    z-index: 0;
+    position: absolute;
+}
+
+.title {
+    border-bottom: 4px solid #a9a9a9;
+    border-left: 2px solid #a9a9a9;
+    border-top: 1px solid #fff;
+    border-right: 1px solid #fff;
+    background: linear-gradient(0deg, rgba(201, 216, 201, 0.3), rgba(201, 216, 209, 0.3)),
+        url(https://image.ibb.co/jKByZn/tile_bg_1.jpg);
+    margin-top: 20px;
+    height: 2.25rem;
+    width: 12.5rem;
+    text-align: center;
+    border-radius: 18px/40px;
+    margin-bottom: 7px;
+    overflow: hidden;
+    font-size: 1.25em;
+    font-weight: 600;
+    z-index: 3;
+}
+
+.spell-image {
+    margin-top: -5px;
+    width: 12rem;
+    height: 12rem;
+    margin-bottom: 7px;
+    z-index: 2;
+}
+
+.info {
+    border-bottom: 4px solid #a9a9a9;
+    border-left: 2px solid #a9a9a9;
+    border-top: 1px solid #fff;
+    border-right: 1px solid #fff;
+    background: linear-gradient(0deg, rgba(201, 216, 201, 0.3), rgba(201, 216, 209, 0.3)),
+        url(https://image.ibb.co/jKByZn/tile_bg_1.jpg);
+    margin-top: -5px;
+    height: 2.5rem;
+    width: 12.5rem;
+    text-align: center;
+    border-radius: 18px/40px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding-left: 0.5rem;
+    // box-shadow:
+    //     0 0 0 2px #171314,
+    //     0 0 0 5px #26714a;
+    font-size: 1.25em;
+    font-weight: 600;
+    z-index: 2;
+    display: flex;
+}
+
+.school {
+    font-size: 0.875rem;
+}
 
-    .name {
-        font-weight: 600;
-        font-size: 1.125rem;
-        text-align: center;
-        margin-top: 0.25rem;
-    }
+.level {
+    background: linear-gradient(0deg, rgba(201, 216, 201, 0.3), rgba(201, 216, 209, 0.3)),
+        url(https://image.ibb.co/jKByZn/tile_bg_1.jpg);
+    box-shadow:
+        0 0 0 2px #171314,
+        0 0 0 5px #26714a;
+    border-radius: 100%;
+    margin-top: 0.125rem;
+    height: 3rem;
+    width: 3rem;
+    font-size: 1.5rem;
+    font-weight: 600;
+    z-index: 3;
+    transform: translateX(0.25rem);
+    display: flex;
+    justify-content: center;
+    align-items: center;
 }

+ 25 - 2
src/app/journal/journal-spellcards/spellcard/spellcard.component.ts

@@ -1,5 +1,6 @@
 import { Component, Input, Output, EventEmitter } from '@angular/core';
 import { Spell } from 'src/interfaces/spell';
+import { TranslatorService } from 'src/services/translator/translator.service';
 
 @Component({
   selector: 'spellcard',
@@ -8,8 +9,30 @@ import { Spell } from 'src/interfaces/spell';
 })
 export class SpellcardComponent {
   @Input() public spell!: Spell;
+  public schools: any;
+  public backgroundColors: any = {
+    Abjuration: '#F0E3CE', //final
+    Conjuration: '#26714a', //final
+    Divination: '#F0E3CE', //final
+    Enchantment: '#629179', //final
+    Evocation: '#a46a7d',
+    Illusion: '#69a', //final
+    Necromancy: '#000000', //final
+    Transmutation: '#69a', //final
+  };
 
-  public showLargeSpellcard(reference: any) {
-    reference.classList.add('large');
+  public borders: any = {
+    Abjuration: '0 0 0 2px #171314, 0 0 0 5px #FFFFFF',
+    Conjuration: '0 0 0 2px #171314, 0 0 0 5px #26714a', //final
+    Divination: '0 0 0 2px #171314, 0 0 0 5px #FFFFFF',
+    Enchantment: '0 0 0 2px #171314, 0 0 0 5px #26714a', //final
+    Evocation: '0 0 0 2px #171314, 0 0 0 5px #863f57',
+    Illusion: '0 0 0 2px #171314, 0 0 0 5px #2d6475', //final
+    Necromancy: '0 0 0 2px #171314, 0 0 0 5px #36353a', //final
+    Transmutation: '0 0 0 2px #171314, 0 0 0 5px #2d6475', //final
+  };
+
+  public constructor(public translator: TranslatorService) {
+    this.schools = translator.schools;
   }
 }

+ 9 - 2
src/app/journal/spell-modal/spell-modal.component.ts

@@ -22,7 +22,9 @@ export class SpellModalComponent {
   public german: string = '';
   public english: string = '';
   public cost: string = 'action';
-  public canRitual: boolean = false;
+  public duration: number = 0;
+  public timeToCast: number = 0;
+  public canRitual: string = 'false';
   public needsConcentration: boolean = false;
   public needsVerbal: boolean = false;
   public needsSomatic: boolean = false;
@@ -158,6 +160,8 @@ export class SpellModalComponent {
     this.level = this.spell.level;
     this.cost = this.spell.cost;
     this.canRitual = this.spell.canRitual;
+    this.duration = this.spell.duration;
+    this.timeToCast = this.spell.timeToCast;
     this.needsConcentration = this.spell.needsConcentration;
     this.needsVerbal = this.spell.needsVerbal;
     this.needsSomatic = this.spell.needsSomatic;
@@ -187,6 +191,7 @@ export class SpellModalComponent {
       german: this.german,
       classes: this.classes,
       duration: 0, // FIXME: only mocked
+      timeToCast: 0, // FIXME: only mocked
       damage: this.damage,
       heal: this.heal,
       level: parseInt(this.level.toString()),
@@ -219,7 +224,9 @@ export class SpellModalComponent {
     this.classes = [];
     this.level = 0;
     this.cost = 'action';
-    this.canRitual = false;
+    this.canRitual = 'false';
+    this.duration = 0;
+    this.timeToCast = 0;
     this.needsConcentration = false;
     this.needsVerbal = false;
     this.needsSomatic = false;

BIN
src/assets/images/spells/add-spell.jpg


BIN
src/assets/images/spells/background.jpg


BIN
src/assets/images/spells/bless.jpg


BIN
src/assets/images/spells/cureWounds.jpg


BIN
src/assets/images/spells/detectMagic.jpg


BIN
src/assets/images/spells/detectPoisonAndDisease.jpg


BIN
src/assets/images/spells/guidance.jpg


BIN
src/assets/images/spells/guidingBolt.jpg


BIN
src/assets/images/spells/healingWord.jpg


BIN
src/assets/images/spells/inflictWounds.jpg


BIN
src/assets/images/spells/sanctuary.jpg


BIN
src/assets/images/spells/thaumaturgy.jpg


BIN
src/assets/images/spells/tollTheDead.jpg


+ 2 - 1
src/interfaces/spell.ts

@@ -6,8 +6,9 @@ export interface Spell {
   classes: string[];
   level: number;
   cost: string;
+  timeToCast: number;
   duration: number;
-  canRitual: boolean;
+  canRitual: string;
   needsConcentration: boolean;
   needsVerbal: boolean;
   needsSomatic: boolean;

+ 354 - 415
src/services/spells/spells.service.ts

@@ -34,6 +34,8 @@ export class SpellsService {
       .filter((spell) => spell.level === level)
       .filter((spell) => spell.classes.includes(characterClass));
     result.push(...this.customSpells.filter((spell) => spell.level === level));
+    console.log(result);
+
     return result;
   }
 
@@ -59,16 +61,18 @@ export class SpellsService {
   //
 
   private spells: Spell[] = [
+    // Level 0
     {
       id: 0,
       isCustom: false,
       german: 'Göttliche Führung',
-      english: 'Guidance',
+      english: 'guidance',
       classes: ['Cleric', 'Druid'],
       level: 0,
       cost: 'action',
       duration: 10,
-      canRitual: false,
+      timeToCast: 0,
+      canRitual: 'false',
       needsVerbal: true,
       needsSomatic: true,
       needsMaterial: false,
@@ -81,7 +85,7 @@ export class SpellsService {
       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',
+      school: 'Divination',
       isRanged: false,
       range: 5,
       hasAreaOfEffect: false,
@@ -92,12 +96,13 @@ export class SpellsService {
       id: 1,
       isCustom: false,
       german: 'Totenläuten',
-      english: 'Toll the Dead',
+      english: 'tollTheDead',
       classes: ['Cleric', 'Warlock', 'Wizard'],
       level: 0,
       cost: 'action',
       duration: 0,
-      canRitual: false,
+      timeToCast: 0,
+      canRitual: 'false',
       needsVerbal: true,
       needsSomatic: true,
       needsMaterial: false,
@@ -111,7 +116,7 @@ export class SpellsService {
       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',
+      school: 'Necromancy',
       isRanged: true,
       range: 60,
       hasAreaOfEffect: false,
@@ -122,12 +127,13 @@ export class SpellsService {
       id: 2,
       isCustom: false,
       german: 'Thaumaturgie',
-      english: 'Thaumaturgy',
+      english: 'thaumaturgy',
       classes: ['Cleric'],
       level: 0,
       cost: 'action',
       duration: 10,
-      canRitual: false,
+      timeToCast: 0,
+      canRitual: 'false',
       needsVerbal: true,
       needsSomatic: false,
       needsMaterial: false,
@@ -140,7 +146,346 @@ export class SpellsService {
       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',
+      school: 'Transmutation',
+      isRanged: true,
+      range: 30,
+      hasAreaOfEffect: false,
+      areaOfEffectType: '',
+      radius: 0,
+    },
+    {
+      id: 3,
+      german: 'Beschwörung',
+      english: 'conjuration',
+      level: 0,
+      isCustom: false,
+      classes: ['Cleric'],
+      timeToCast: 0,
+      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: 'Conjuration',
+      isRanged: true,
+      range: 30,
+      hasAreaOfEffect: false,
+      areaOfEffectType: '',
+      radius: 0,
+    },
+    // Level 1
+    {
+      id: 1000,
+      german: 'Wunden verursachen',
+      english: 'inflictWounds',
+      level: 1,
+      cost: 'action',
+      isCustom: false,
+      classes: ['Cleric'],
+      duration: 0,
+      timeToCast: 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,
+    },
+    {
+      id: 1001,
+      german: 'Heilende Berührung',
+      english: 'cureWounds',
+      level: 1,
+      cost: 'action',
+      duration: 0,
+      isCustom: false,
+      classes: ['Bard', 'Cleric', 'Druid', 'Paladin', 'Ranger'],
+      timeToCast: 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,
+    },
+    {
+      id: 1002,
+      german: 'Magie entdecken',
+      english: 'detectMagic',
+      level: 1,
+      cost: 'action',
+      duration: 100,
+      isCustom: false,
+      classes: [
+        'Bard',
+        'Cleric',
+        'Druid',
+        'Paladin',
+        'Ranger',
+        'Sorcerer',
+        'Wizard',
+      ],
+      timeToCast: 0,
+      canRitual: 'true',
+      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:
+        '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,
+    },
+    {
+      id: 1003,
+      german: 'Segnen',
+      english: 'bless',
+      level: 1,
+      cost: 'action',
+      duration: 10,
+      isCustom: false,
+      classes: ['Cleric', 'Paladin'],
+      timeToCast: 0,
+      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,
+    },
+    {
+      id: 1004,
+      german: 'Heilendes Wort',
+      english: 'healingWord',
+      isCustom: false,
+      classes: ['Bard', 'Cleric', 'Druid'],
+      level: 1,
+      cost: 'bonus action',
+      duration: 0,
+      timeToCast: 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,
+    },
+    {
+      id: 1005,
+      german: 'Lenkendes Geschoss',
+      english: 'guidingBolt',
+      level: 1,
+      cost: 'action',
+      duration: 0,
+      isCustom: false,
+      classes: ['Cleric'],
+      timeToCast: 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,
+    },
+    {
+      id: 1006,
+      german: 'Gift und Krankheiten entdecken',
+      english: 'detectPoisonAndDisease',
+      level: 1,
+      cost: 'action',
+      duration: 100,
+      isCustom: false,
+      classes: ['Cleric', 'Druid', 'Paladin', 'Ranger'],
+      timeToCast: 0,
+      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,
+    },
+    {
+      id: 1007,
+      german: 'Heldenmut',
+      english: 'heroism',
+      level: 1,
+      cost: 'action',
+      duration: 10,
+      isCustom: false,
+      classes: ['Bard', 'Paladin'],
+      timeToCast: 0,
+      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,
+    },
+    {
+      id: 1008,
+      german: 'Heiligtum',
+      english: 'sanctuary',
+      level: 1,
+      isCustom: false,
+      classes: ['Cleric'],
+      timeToCast: 0,
+      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: 30,
+      hasAreaOfEffect: false,
+      areaOfEffectType: '',
+      radius: 0,
+    },
+    {
+      id: 1009,
+      german: 'Illusion',
+      english: 'illusion',
+      level: 1,
+      isCustom: false,
+      classes: ['Cleric'],
+      timeToCast: 0,
+      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: 'Illusion',
       isRanged: true,
       range: 30,
       hasAreaOfEffect: false,
@@ -148,410 +493,4 @@ export class SpellsService {
       radius: 0,
     },
   ];
-
-  // // Spells
-  // private level0: string[] = [
-  //   'Führung (Guidance)',
-  //   'Totenläuten (Toll the Dead)',
-  //   'Thaumaturgie (Thaumaturgy)',
-  // ];
-
-  // 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 level2: string[] = [];
-
-  // private level3: string[] = [];
-
-  // private level4: string[] = [];
-
-  // private level5: string[] = [];
-
-  // private level6: string[] = [];
-
-  // private level7: string[] = [];
-
-  // private level8: string[] = [];
-
-  // 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 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 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 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 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 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 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,
-  // };
 }

+ 11 - 0
src/services/translator/translator.service.ts

@@ -76,4 +76,15 @@ export class TranslatorService {
     Female: { display: 'Weiblich', value: 'Female' },
     Diverse: { display: 'Divers', value: 'Diverse' },
   };
+
+  public schools: any = {
+    Abjuration: { display: 'Bannmagie', value: 'Abjuration' },
+    Conjuration: { display: 'Beschwörung', value: 'Conjuration' },
+    Divination: { display: 'Erkenntnismagie', value: 'Divination' },
+    Enchantment: { display: 'Verzauberung', value: 'Enchantment' },
+    Evocation: { display: 'Hervorrufung', value: 'Evocation' },
+    Illusion: { display: 'Illusion', value: 'Illusion' },
+    Necromancy: { display: 'Nekromantie', value: 'Necromancy' },
+    Transmutation: { display: 'Verwandlung', value: 'Transmutation' },
+  };
 }

+ 34 - 0
src/styles.scss

@@ -53,6 +53,40 @@
     --tab: #efc8af;
     --tab-active: #e0ad91;
 
+    // Spellcards
+
+    // !
+    --abjuration-background: #cab8de;
+    --abjuration-border: 0 0 0 2px #171314, 0 0 0 5px #9586a5;
+
+    //  !
+    --conjuration-background: #714c81;
+    --conjuration-border: 0 0 0 2px #171314, 0 0 0 5px #744987;
+
+    // !
+    --divination-background: #f0e3ce;
+    --divination-border: 0 0 0 2px #171314, 0 0 0 5px #ffffff;
+
+    // !
+    --enchantment-background: #629179;
+    --enchantment-border: 0 0 0 2px #171314, 0 0 0 5px #26714a;
+
+    --evocation-background: #a46a7d;
+    --evocation-border: 0 0 0 2px #171314, 0 0 0 5px #863f57;
+
+    // !
+    --illusion-background: #69a;
+    --illusion-border: 0 0 0 2px #171314, 0 0 0 5px #2d6475;
+
+    // !
+    --necromancy-background: #000000;
+    --necromancy-border: 0 0 0 2px #171314, 0 0 0 5px #36353a;
+
+    --transmutation-background: rgb(51, 52, 138);
+    // --transmutation-border: 0 0 0 2px #171314, 0 0 0 5px #2d6475;
+    --transmutation-border: 0 0 0 2px #171314, 0 0 3px #8f088f, 0 0 6px #7f088f, 0 0 9px #69088f, 0 0 12px #3a088f,
+        0 0 15px #080a8f;
+
     // General
 
     --primary-color: #d8ac96;