Compare commits
254
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0dc6316b5b | ||
|
|
c7d1735e4b | ||
|
|
aa93dab7fd | ||
|
|
5a9ae86cf9 | ||
|
|
7f5f94491e | ||
|
|
a2979650f2 | ||
|
|
bc80b0479a | ||
|
|
fdd391b849 | ||
|
|
057edce846 | ||
|
|
c52fc26a1b | ||
|
|
d28667a935 | ||
|
|
b92e47cd13 | ||
|
|
87a21b6fc4 | ||
|
|
ccd0898f4e | ||
|
|
c162931e74 | ||
|
|
b578254d75 | ||
|
|
7b57aca991 | ||
|
|
282467e4af | ||
|
|
e6d1b8d3fd | ||
|
|
f09be7d54b | ||
|
|
3397ed8cee | ||
|
|
7b6a0980b9 | ||
|
|
7b245b989b | ||
|
|
32058f76c2 | ||
|
|
a6576bb8ab | ||
|
|
7c6e377692 | ||
|
|
fe7c5e68ed | ||
|
|
531530e763 | ||
|
|
e1befd1383 | ||
|
|
2eb87c8f4c | ||
|
|
531715f171 | ||
|
|
4c9096b3d5 | ||
|
|
7c3d722d7e | ||
|
|
c4b995e046 | ||
|
|
c987847c9b | ||
|
|
e99828f1cc | ||
|
|
8e8932cd83 | ||
|
|
246b3d5c1d | ||
|
|
c15505062d | ||
|
|
8d54177cac | ||
|
|
96c7b54fce | ||
|
|
5c7ffd0660 | ||
|
|
d24fae03b7 | ||
|
|
8102bb1a9a | ||
|
|
07d336dbb3 | ||
|
|
d40bdac744 | ||
|
|
d3926aff86 | ||
|
|
80fdffb373 | ||
|
|
92bfcb96b0 | ||
|
|
afd32c9827 | ||
|
|
3f87dca910 | ||
|
|
2c9332c37f | ||
|
|
9e9a1139d3 | ||
|
|
c5d2b0a7a4 | ||
|
|
f1e16d5c39 | ||
|
|
449f8c7bb2 | ||
|
|
53ab0e704e | ||
|
|
5b7f223211 | ||
|
|
5bb9c8ca7b | ||
|
|
ef84a38cf6 | ||
|
|
d2eca82ea5 | ||
|
|
854995cb3b | ||
|
|
659ab5f8db | ||
|
|
8777b9a0cd | ||
|
|
27cbd7abd7 | ||
|
|
e4672041db | ||
|
|
fc8c837008 | ||
|
|
a3c269dd35 | ||
|
|
8753a4656e | ||
|
|
bdb3eb7804 | ||
|
|
c0dbb3fbcb | ||
|
|
06eac93221 | ||
|
|
d2d3445928 | ||
|
|
c0d799c057 | ||
|
|
b1942216e5 | ||
|
|
1e21b6bcd4 | ||
|
|
8b18b26361 | ||
|
|
923b7605fe | ||
|
|
589338fe74 | ||
|
|
5f1e1f8148 | ||
|
|
1f090605a4 | ||
|
|
e558c1d80d | ||
|
|
232795d129 | ||
|
|
a49048d468 | ||
|
|
1ce2db9cfb | ||
|
|
7e31136083 | ||
|
|
4c9a1f9bc5 | ||
|
|
2a62e4231d | ||
|
|
41ee35ba76 | ||
|
|
cad0f26042 | ||
|
|
7a9da8f65e | ||
|
|
e36099d812 | ||
|
|
8e66f9b83a | ||
|
|
f1024868ff | ||
|
|
a24ff8082a | ||
|
|
1ed0c64b0d | ||
|
|
83b534d3f9 | ||
|
|
4dabbdbcd2 | ||
|
|
0ab65e869c | ||
|
|
f2e61386ab | ||
|
|
e70a8b9d34 | ||
|
|
c3985275bb | ||
|
|
8b060b6002 | ||
|
|
ac0cdc3778 | ||
|
|
8b5eedeb37 | ||
|
|
06b57c9d15 | ||
|
|
03f26214ae | ||
|
|
d66afba3c1 | ||
|
|
3574d1ba46 | ||
|
|
dcfba14df7 | ||
|
|
6669352d06 | ||
|
|
9cb26586f3 | ||
|
|
cd16e5314a | ||
|
|
6ba99f2f46 | ||
|
|
bd9fc1badc | ||
|
|
47e66d6546 | ||
|
|
bba9b92e5d | ||
|
|
fb0a0bbbfb | ||
|
|
8bcae62f2f | ||
|
|
383a9c166c | ||
|
|
94e751fda1 | ||
|
|
36c643f04a | ||
|
|
0143c28b0c | ||
|
|
793ad447b4 | ||
|
|
9f3e52b5da | ||
|
|
a7ff9fc901 | ||
|
|
3ea0d6ee10 | ||
|
|
83d9bd40dd | ||
|
|
8fb5f28dd0 | ||
|
|
85eba763ac | ||
|
|
a6417ff1de | ||
|
|
fe85d2d79a | ||
|
|
4850363119 | ||
|
|
e0f3d5b1a3 | ||
|
|
a26b4094c2 | ||
|
|
47028ab470 | ||
|
|
d8c9f52542 | ||
|
|
29c7b4bc39 | ||
|
|
6b93c15aa0 | ||
|
|
0620ff2ab8 | ||
|
|
10582541e0 | ||
|
|
c13b557dd7 | ||
|
|
bf9d29a6dc | ||
|
|
4699d38a1a | ||
|
|
b2fb0353a9 | ||
|
|
66077430d8 | ||
|
|
08e7817597 | ||
|
|
87cec15ba9 | ||
|
|
63ac0abbe3 | ||
|
|
41278f8316 | ||
|
|
5d45a6084e | ||
|
|
f8114c2f43 | ||
|
|
e40f995e34 | ||
|
|
ed74170865 | ||
|
|
8297455ddb | ||
|
|
42891f070c | ||
|
|
a5df7c863c | ||
|
|
ec9bd71e10 | ||
|
|
21146eb2ab | ||
|
|
16bd668313 | ||
|
|
6eeb430e83 | ||
|
|
ae2fbad1c7 | ||
|
|
d647cf5f4e | ||
|
|
e334e51685 | ||
|
|
092343f45d | ||
|
|
7ac4773b05 | ||
|
|
0b5713d6fd | ||
|
|
6357b2c4b4 | ||
|
|
ea86624560 | ||
|
|
fe34bedc54 | ||
|
|
c8094f5ef1 | ||
|
|
a02700eecc | ||
|
|
fdde329de5 | ||
|
|
c1b2e267cb | ||
|
|
eb5a06884d | ||
|
|
0a59d9e5e5 | ||
|
|
3ceeadbdf7 | ||
|
|
28f260a2c4 | ||
|
|
5b6a4c8301 | ||
|
|
cc5ecd6f09 | ||
|
|
9179bb9ff6 | ||
|
|
6c63ab1b50 | ||
|
|
3f9fae30a2 | ||
|
|
2ad037ecbc | ||
|
|
3d755eb408 | ||
|
|
2c6da7bd75 | ||
|
|
ccd7decc83 | ||
|
|
397abe2b4a | ||
|
|
3b05e69e27 | ||
|
|
723e9106eb | ||
|
|
eef960f496 | ||
|
|
6b706d3adb | ||
|
|
d3a6df526d | ||
|
|
a098a97509 | ||
|
|
093a726cf2 | ||
|
|
9d033d23df | ||
|
|
912642a5ee | ||
|
|
b92c19a3c8 | ||
|
|
c2afd39946 | ||
|
|
444cb12892 | ||
|
|
b1d7ad9ae1 | ||
|
|
f16a8fe249 | ||
|
|
764731d02f | ||
|
|
02f24b24bc | ||
|
|
ee30c4eaea | ||
|
|
8de7b51895 | ||
|
|
2c1cea9ef8 | ||
|
|
f0e8ce17ab | ||
|
|
b6112666b8 | ||
|
|
99123d5ec0 | ||
|
|
17424878e7 | ||
|
|
e44e6f8832 | ||
|
|
c33e4f1821 | ||
|
|
c1dab5b312 | ||
|
|
31cf5d6c54 | ||
|
|
63243a2e9d | ||
|
|
9017dff1fc | ||
|
|
6a479949e7 | ||
|
|
228c401666 | ||
|
|
052b5bbf2f | ||
|
|
f30efc84ce | ||
|
|
9a2902c9e9 | ||
|
|
9b44e29738 | ||
|
|
096af99794 | ||
|
|
073064c030 | ||
|
|
1ff11d6e9a | ||
|
|
fa1c527381 | ||
|
|
272095d0b9 | ||
|
|
f416587e33 | ||
|
|
cb3a4a24f2 | ||
|
|
20a0c7a055 | ||
|
|
2ec6fd0ab5 | ||
|
|
bea154d6e6 | ||
|
|
728c7e15a8 | ||
|
|
182cb92a20 | ||
|
|
0531ffb657 | ||
|
|
f9b4ab6ce4 | ||
|
|
20242a117d | ||
|
|
0cf4c70b5c | ||
|
|
a577f6b783 | ||
|
|
d445a3a378 | ||
|
|
c58279cc95 | ||
|
|
d63a494305 | ||
|
|
1df5ac8fee | ||
|
|
3edf16d8be | ||
|
|
e63713687e | ||
|
|
ad1c78ea58 | ||
|
|
b4b477ec73 | ||
|
|
e11cbd6c52 | ||
|
|
b3f9010ef0 | ||
|
|
030a3270c3 | ||
|
|
6b9d974db9 | ||
|
|
8ce525e3ab | ||
|
|
8ff055276e |
@@ -1,3 +1,6 @@
|
||||
src/App/Utilities/YAML/Schema/
|
||||
*.js
|
||||
*.gen.tsx
|
||||
node_modules
|
||||
/app
|
||||
/deploy
|
||||
|
||||
+19
-7
@@ -1,12 +1,15 @@
|
||||
root: true
|
||||
parser: "@typescript-eslint/parser"
|
||||
plugins:
|
||||
- "@typescript-eslint"
|
||||
- eslint-plugin-react
|
||||
- eslint-plugin-react-hooks
|
||||
parser: "@typescript-eslint/parser"
|
||||
- eslint-plugin-tsdoc
|
||||
parserOptions:
|
||||
ecmaVersion: 2020
|
||||
ecmaVersion: latest
|
||||
sourceType: module
|
||||
project: ./tsconfig.json
|
||||
project:
|
||||
- ./tsconfig.json
|
||||
ecmaFeatures:
|
||||
jsx: true
|
||||
env:
|
||||
@@ -68,7 +71,12 @@ rules:
|
||||
no-empty-pattern: 2
|
||||
no-eq-null: 2
|
||||
no-eval: 2
|
||||
no-extend-native: 2
|
||||
no-extend-native:
|
||||
- 2
|
||||
- exceptions:
|
||||
- "Array"
|
||||
- "Map"
|
||||
- "Set"
|
||||
no-extra-bind: 2
|
||||
no-extra-label: 2
|
||||
no-fallthrough: 2
|
||||
@@ -154,7 +162,7 @@ rules:
|
||||
- consistent
|
||||
function-paren-newline:
|
||||
- 2
|
||||
- consistent
|
||||
- multiline-arguments
|
||||
jsx-quotes: 2
|
||||
key-spacing: 2
|
||||
keyword-spacing: 2
|
||||
@@ -371,9 +379,10 @@ rules:
|
||||
"@typescript-eslint/no-redeclare": 2
|
||||
"@typescript-eslint/no-shadow": 2
|
||||
"@typescript-eslint/no-unused-expressions": 2
|
||||
"@typescript-eslint/no-unused-vars-experimental":
|
||||
"@typescript-eslint/no-unused-vars":
|
||||
- 2
|
||||
- ignoredNamesRegex: "^_"
|
||||
- argsIgnorePattern: "^_"
|
||||
varsIgnorePattern: "^_"
|
||||
"@typescript-eslint/no-use-before-define": 2
|
||||
no-useless-constructor: 0
|
||||
"@typescript-eslint/no-useless-constructor": 2
|
||||
@@ -479,6 +488,9 @@ rules:
|
||||
# React Hooks
|
||||
react-hooks/rules-of-hooks: 2
|
||||
react-hooks/exhaustive-deps: 2
|
||||
|
||||
# TSDoc
|
||||
tsdoc/syntax: warn
|
||||
settings:
|
||||
react:
|
||||
version: detect
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: optolith # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: Bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Environment (please complete the following information):**
|
||||
|
||||
- OS: [e.g. Windows 10]
|
||||
- Version: [e.g. 1.1.0, 1.3.0-alpha.5]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,73 @@
|
||||
name: Bug report
|
||||
description: Create a report to help improve Optolith
|
||||
labels:
|
||||
- Bug
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: agreements
|
||||
attributes:
|
||||
label: Please confirm the following
|
||||
options:
|
||||
- label: I checked the [current issues](https://github.com/elyukai/optolith-client/issues) for duplicate problems.
|
||||
required: true
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
description: A clear and concise description of what the bug is.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: to-reproduce
|
||||
attributes:
|
||||
label: To Reproduce
|
||||
description: |
|
||||
Steps to reproduce the behavior.
|
||||
placeholder: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: A clear and concise description of what you expected to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: If applicable, add screenshots to help explain your problem.
|
||||
validations:
|
||||
required: false
|
||||
- type: dropdown
|
||||
id: operating-system
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: Which operating systems have you used? You may select more than one.
|
||||
multiple: true
|
||||
options:
|
||||
- macOS
|
||||
- Windows
|
||||
- Linux
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: Which Optolith version have you used?
|
||||
placeholder: 1.1.0, 1.3.0-alpha.5, …
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add any other context about the problem here.
|
||||
validations:
|
||||
required: false
|
||||
@@ -7,14 +7,24 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
## Is your feature request related to a problem?
|
||||
|
||||
A clear and concise description of what the problem is. E.g. _I'm always frustrated when [...]_
|
||||
|
||||
|
||||
|
||||
## Describe the solution you'd like
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
|
||||
## Describe alternatives
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
|
||||
## Additional context
|
||||
|
||||
> Add any other context or screenshots about the feature request here.
|
||||
|
||||
@@ -7,21 +7,40 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Sources**
|
||||
> List here what is included in this part of the book to implement. E.g., for special abilities, you need to list every source of entries from the book. Example (in German):
|
||||
>
|
||||
> - [ ] S. 133 (Berufsgeheimnisse)
|
||||
> - [ ] S. 165-170 (Zauber- und Liturgiestile)
|
||||
> - [ ] S. 183 (Stabzauber)
|
||||
> - [ ] S. 195 (Zeremonialgegenstand Widderkeule)
|
||||
## Sources
|
||||
|
||||
**Tables**
|
||||
> Delete Univ and change locale if necessary. Add specific entries if they could not be resolved.
|
||||
<!-- List here what is included in this part of the book to implement. E.g., for special abilities, you need to list every source of entries from the book. Use page ranges if entries span multiple pages. Example:
|
||||
|
||||
- [ ] Univ
|
||||
- [ ] L10n de-DE
|
||||
- [ ] S. 133 (Entry A)
|
||||
- [ ] S. 133–134 (Entry B)
|
||||
|
||||
**Code**
|
||||
> List here what cannot be solved only using the tables. Example (in German):
|
||||
>
|
||||
> - [ ] Voraussetzungen Vorliebe I-II
|
||||
Alternatively, provide an overview of the different sections in the book where one or more relevant entries occur. Example (in German):
|
||||
|
||||
- [ ] S. 133–150 (Berufsgeheimnisse)
|
||||
|
||||
-->
|
||||
|
||||
- [ ] S. X (Entry/Section/Chapter Name)
|
||||
|
||||
## Special Notes
|
||||
|
||||
<!-- List here any special hints to implement the sources listed above. Example:
|
||||
|
||||
- All entries are already present, only add source references
|
||||
- Pay attention to the layout of entry A, there is a gap that should not be in Optolith
|
||||
|
||||
Replace the dash below this comment if there are any notes. -->
|
||||
|
||||
—
|
||||
|
||||
|
||||
|
||||
## Special Implementations
|
||||
|
||||
<!-- List issues that track what cannot be solved only using the database. Example:
|
||||
|
||||
- #123
|
||||
|
||||
Replace the dash below this comment if there are any notes. -->
|
||||
|
||||
—
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Publication ambiguity
|
||||
about: An ambiguity in an official publication
|
||||
title: ''
|
||||
labels: 'Ulisses: Question'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Source(s)
|
||||
|
||||
Please complete the following information:
|
||||
|
||||
- Book: [e.g. Magic of Aventuria I]
|
||||
- Printing: [e.g. 1st]
|
||||
- Page(s): [e.g. 199]
|
||||
- Area: [e.g. Profession Black Mage (Demirion Ophenos's Student), AP value]
|
||||
|
||||
|
||||
|
||||
## Describe the ambiguity
|
||||
|
||||
A clear and concise description of what the ambiguity is.
|
||||
@@ -7,21 +7,33 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Source (please complete the following information):**
|
||||
## Source (please complete the following information):
|
||||
|
||||
- Book: [e.g. Magic of Aventuria I]
|
||||
- Printing: [e.g. 1st]
|
||||
- Page(s): [e.g. 199]
|
||||
- Area: [e.g. Profession Black Mage (Demirion Ophenos's Student), AP value]
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
|
||||
## Describe the bug
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected text**
|
||||
|
||||
|
||||
## Expected text
|
||||
|
||||
A clear and concise description of what the text *should* be instead.
|
||||
|
||||
**Optolith Version:**
|
||||
|
||||
|
||||
## Optolith Version:
|
||||
|
||||
If applicable, the exact version of Optolith where you experience the bug, e.g. 1.2.0, 1.3.0-alpha.5.
|
||||
|
||||
**Additional context**
|
||||
|
||||
|
||||
## Additional context
|
||||
|
||||
If needed, add any other context about the problem here.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
name: Question
|
||||
about: I have a question.
|
||||
title: ''
|
||||
labels: Question
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ name: Prerelease Builds
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -12,41 +12,55 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macOS-latest
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macOS-latest
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
osName: Linux
|
||||
- os: windows-latest
|
||||
osName: Windows
|
||||
- os: macOS-latest
|
||||
osName: macOS
|
||||
- os: ubuntu-latest
|
||||
osName: Linux
|
||||
- os: windows-latest
|
||||
osName: Windows
|
||||
- os: macOS-latest
|
||||
osName: macOS
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 12.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Build ReasonML files
|
||||
run: npm run re:build
|
||||
- name: Build TypeScript files
|
||||
run: npm run js:build
|
||||
- name: Build Sass files
|
||||
run: npm run css:build
|
||||
- name: Build
|
||||
run: node ./deploy/build.js prerelease
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Deploy
|
||||
run: node ./deploy/deploy.js prerelease
|
||||
env:
|
||||
HOST: ${{ secrets.HOST }}
|
||||
USERNAME: ${{ secrets.USERNAME }}
|
||||
PASSWORD: ${{ secrets.PASSWORD }}
|
||||
ROOT: ${{ secrets.ROOT }}
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Compile JavaScript files
|
||||
run: npm run js:build
|
||||
- name: Compile Sass files
|
||||
run: npm run css:build
|
||||
- name: Build macOS application
|
||||
if: runner.os == 'macOS'
|
||||
run: node ./deploy/build.mjs prerelease
|
||||
env:
|
||||
APPLEID: ${{ secrets.APPLEID }}
|
||||
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
|
||||
TEAMID: ${{ secrets.TEAMID }}
|
||||
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Linux application
|
||||
if: runner.os == 'Linux'
|
||||
run: node ./deploy/build.mjs prerelease
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Windows application
|
||||
if: runner.os == 'Windows'
|
||||
run: node ./deploy/build.mjs prerelease
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Deploy
|
||||
run: node ./deploy/deploy.mjs prerelease
|
||||
env:
|
||||
HOST: ${{ secrets.HOST }}
|
||||
USERNAME: ${{ secrets.USERNAME }}
|
||||
PASSWORD: ${{ secrets.PASSWORD }}
|
||||
ROOT: ${{ secrets.ROOT }}
|
||||
|
||||
@@ -3,7 +3,7 @@ name: Stable Builds
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -12,41 +12,55 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macOS-latest
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macOS-latest
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
osName: Linux
|
||||
- os: windows-latest
|
||||
osName: Windows
|
||||
- os: macOS-latest
|
||||
osName: macOS
|
||||
- os: ubuntu-latest
|
||||
osName: Linux
|
||||
- os: windows-latest
|
||||
osName: Windows
|
||||
- os: macOS-latest
|
||||
osName: macOS
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 12.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Build ReasonML files
|
||||
run: npm run re:build
|
||||
- name: Build TypeScript files
|
||||
run: npm run js:build
|
||||
- name: Build Sass files
|
||||
run: npm run css:build
|
||||
- name: Build
|
||||
run: node ./deploy/build.js stable
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Deploy
|
||||
run: node ./deploy/deploy.js stable
|
||||
env:
|
||||
HOST: ${{ secrets.HOST }}
|
||||
USERNAME: ${{ secrets.USERNAME }}
|
||||
PASSWORD: ${{ secrets.PASSWORD }}
|
||||
ROOT: ${{ secrets.ROOT }}
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Compile JavaScript files
|
||||
run: npm run js:build
|
||||
- name: Compile Sass files
|
||||
run: npm run css:build
|
||||
- name: Build macOS application
|
||||
if: runner.os == 'macOS'
|
||||
run: node ./deploy/build.mjs stable
|
||||
env:
|
||||
APPLEID: ${{ secrets.APPLEID }}
|
||||
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
|
||||
TEAMID: ${{ secrets.TEAMID }}
|
||||
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Linux application
|
||||
if: runner.os == 'Linux'
|
||||
run: node ./deploy/build.mjs stable
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Windows application
|
||||
if: runner.os == 'Windows'
|
||||
run: node ./deploy/build.mjs stable
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Deploy
|
||||
run: node ./deploy/deploy.mjs stable
|
||||
env:
|
||||
HOST: ${{ secrets.HOST }}
|
||||
USERNAME: ${{ secrets.USERNAME }}
|
||||
PASSWORD: ${{ secrets.PASSWORD }}
|
||||
ROOT: ${{ secrets.ROOT }}
|
||||
|
||||
+30
-32
@@ -3,12 +3,12 @@ name: Integration
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -16,36 +16,34 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 14.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 14.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- run: npm run re:build
|
||||
- run: npm run ts:build
|
||||
- run: npm test
|
||||
env:
|
||||
CI: true
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Compile TypeScript files
|
||||
run: npm run ts:build
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 12.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- run: npm run lint
|
||||
env:
|
||||
CI: true
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Run linter
|
||||
run: npm run lint
|
||||
|
||||
Vendored
+1
-1
@@ -3,7 +3,7 @@
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Electron: Debug Main",
|
||||
"type": "node",
|
||||
"type": "pwa-node",
|
||||
"request": "launch",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"typescript.tsdk": "node_modules\\typescript\\lib",
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"typescript.preferences.quoteStyle": "double",
|
||||
"javascript.preferences.quoteStyle": "double",
|
||||
"files.exclude": {
|
||||
|
||||
Vendored
+47
-53
@@ -8,64 +8,19 @@
|
||||
"type": "shell",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "build",
|
||||
"command": "npm run build",
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "buildTest",
|
||||
"command": "npm run buildTest"
|
||||
},
|
||||
{
|
||||
"label": "buildMac",
|
||||
"command": "npm run buildMac"
|
||||
},
|
||||
{
|
||||
"label": "buildMacTest",
|
||||
"command": "npm run buildMacTest"
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"command": "npm run watch"
|
||||
},
|
||||
{
|
||||
"label": "bundle",
|
||||
"command": "npm run bundle",
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "run",
|
||||
"label": "start",
|
||||
"command": "npm start"
|
||||
},
|
||||
{
|
||||
"label": "bundle_l10ns",
|
||||
"command": "npm run bundle_l10ns"
|
||||
},
|
||||
{
|
||||
"label": "bundle_data",
|
||||
"command": "npm run bundle_data"
|
||||
},
|
||||
{
|
||||
"label": "bundle_css",
|
||||
"command": "npm run bundle_css"
|
||||
},
|
||||
{
|
||||
"type": "typescript",
|
||||
"tsconfig": "tsconfig.json",
|
||||
"isBackground": true,
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
],
|
||||
"label": "jest",
|
||||
"command": "npm test",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "tsc watch",
|
||||
"type": "typescript",
|
||||
"tsconfig": "tsconfig.json",
|
||||
"option": "watch",
|
||||
@@ -73,11 +28,50 @@
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
],
|
||||
"group": "build"
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"group": "watch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "buildWin",
|
||||
"label": "webpack watch",
|
||||
"command": "npm run js:watch",
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"group": "watch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "sass watch",
|
||||
"command": "npm run css:watch",
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"group": "watch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"dependsOn": ["tsc watch", "webpack watch", "sass watch"],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "create prerelease",
|
||||
"command": "npm run release:pre",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "create release",
|
||||
"command": "npm run release:main",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "git push --follow-tags",
|
||||
"command": "git push --follow-tags",
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
Lukas Obermann <lukas.obermann@outlook.de>
|
||||
Lukas Obermann <lukas.obermann@icloud.com>
|
||||
Philipp Borucki <p.borucki@icloud.com>
|
||||
|
||||
+284
@@ -2,6 +2,290 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [1.5.2](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.4...v1.5.2) (2025-01-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* throws during startup due to changed devtools identifiers ([7f5f944](https://github.com/elyukai/optolith-client/commit/7f5f94491e1432d66add1315889075fb5369f700)), closes [#1634](https://github.com/elyukai/optolith-client/issues/1634)
|
||||
|
||||
### [1.5.2-alpha.4](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.3...v1.5.2-alpha.4) (2022-07-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improvement cost handling for some traditions ([c52fc26](https://github.com/elyukai/optolith-client/commit/c52fc26a1b1d6cccc1cfec758da8886be966233b))
|
||||
* show improvement cost in tabular list ([c162931](https://github.com/elyukai/optolith-client/commit/c162931e74bce5f4fd1e42de6ebc92c71d15e81a))
|
||||
|
||||
### [1.5.2-alpha.3](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.2...v1.5.2-alpha.3) (2022-07-12)
|
||||
|
||||
### [1.5.2-alpha.2](https://github.com/elyukai/optolith-client/compare/v1.5.2-alpha.1...v1.5.2-alpha.2) (2022-07-11)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* enable auto-update for macOS ([7c6e377](https://github.com/elyukai/optolith-client/commit/7c6e3776921fdc4f13c42ea5c6a4bf5d316856e1))
|
||||
|
||||
### [1.5.2-alpha.1](https://github.com/elyukai/optolith-client/compare/v1.5.1-alpha.2...v1.5.2-alpha.1) (2022-04-29)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add krallenkettenzauber as placeholder ([c987847](https://github.com/elyukai/optolith-client/commit/c987847c9b192a0528df52da33f55adf90164eaf))
|
||||
|
||||
|
||||
## [1.5.1](https://github.com/elyukai/optolith-client/compare/v1.5.0...v1.5.1) (2022-03-20)
|
||||
|
||||
|
||||
### Enhancements
|
||||
|
||||
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* **MapTool:** Add missing Italian translations for export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350)
|
||||
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
### [1.5.1-alpha.2](https://github.com/elyukai/optolith-client/compare/v1.5.1-alpha.1...v1.5.1-alpha.2) (2022-02-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **maptool:** add project links ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* advantage Inspire Confidence could be bought with social Incompetence ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
|
||||
### [1.5.1-alpha.1](https://github.com/elyukai/optolith-client/compare/v1.5.1-alpha.0...v1.5.1-alpha.1) (2022-02-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **maptool:** no export possible without an avatar ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
|
||||
### [1.5.1-alpha.0](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.9...v1.5.1-alpha.0) (2022-02-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add missing Italian translations for MapTool export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350)
|
||||
* add more action types that should be ignored for undo history ([d2eca82](https://github.com/elyukai/optolith-client/commit/d2eca82ea5fd1d65f234363d2700c80f37afe653))
|
||||
* **maptool:** format change for 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* markdown parser ignores strikethrough ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
## [1.5.0](https://github.com/elyukai/optolith-client/compare/v1.4.2...v1.5.0) (2022-02-09)
|
||||
|
||||
### Features
|
||||
|
||||
* MapTool export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
* Portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
|
||||
* Native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
### Enhancements
|
||||
|
||||
* **English:** Kilogram input hint for weight in item dialog ([bd9fc1b](https://github.com/elyukai/optolith-client/commit/bd9fc1badc8a408495bd7c1594338b1a5fe6df11))
|
||||
* Security ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **German/English:** Hit Zone Armor character sheet had left margin ([e637136](https://github.com/elyukai/optolith-client/commit/e63713687eff9b825a79d159fb8b44dc26f64ffe), [#788](https://github.com/elyukai/optolith-client/issues/788))
|
||||
* Additional LE set a minimum required value of STR instead of CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
|
||||
* Two-handed (2H) and improvised (i) weapon indicators were missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
|
||||
* Brawling weapons had no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
|
||||
* An entry that depends on a single activation of another entry disables removing of all activations of that entry if multiple activations are present ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
|
||||
* Entries affecting spells to not be unfamiliar could be removed if Spell Enhancements were bought ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
|
||||
* The equipment info area may have crashed ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* Professions that granted higher Combat Technique Ratings than what the selected Experience Level allowed were not filtered ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
|
||||
* **German:** Special ability Kernschuss had misplaced minus sign in penalty ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#1080](https://github.com/elyukai/optolith-client/issues/1080))
|
||||
* **German:** Wrong page number in description of Albernisches Entermesser and Harbener Säbel ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#1081](https://github.com/elyukai/optolith-client/issues/1081))
|
||||
* **German:** Spell Zauberschnurren had mixed-up QL descriptions in spell description ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#846](https://github.com/elyukai/optolith-client/issues/846) [#1122](https://github.com/elyukai/optolith-client/issues/1122))
|
||||
* **German:** Schlachtermesser and Fleischerbeil were not marked as improvised ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#808](https://github.com/elyukai/optolith-client/issues/808))
|
||||
* INI/MOV modifiers on armor were handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
|
||||
* Language specializations did not always cost 1 AP and could not be activated multiple times for a single language ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
|
||||
* Portraits with transparency had a black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
|
||||
* **German:** Profession Garether Krieger was missing Swords 12 and Orienting should be 3 instead of 2 ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#792](https://github.com/elyukai/optolith-client/issues/792))
|
||||
* Bornlander cultural package had Prepare Food instead of Leatherworking ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
|
||||
* **Italian:** Some typos in translation of items, languages and scripts ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#832](https://github.com/elyukai/optolith-client/issues/832))
|
||||
* **Italian:** Doubled level range in title of Iron Will special ability ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#850](https://github.com/elyukai/optolith-client/issues/850))
|
||||
* **Italian:** Spells and liturgies displayed different casing and punctuation ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#851](https://github.com/elyukai/optolith-client/issues/851))
|
||||
* **German/English:** Spell Wind Shaping had the wrong traditions and wrong spell enhancements order ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1139](https://github.com/elyukai/optolith-client/issues/1139))
|
||||
* **German:** Typo in measurements in description of spell Invocatio Minima ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1224](https://github.com/elyukai/optolith-client/issues/1224))
|
||||
* Primary attribute changes for items were not applied in edit window, only on character sheet ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
|
||||
* Professions with due to EL impossible attribute values could be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
|
||||
* Summoning spellworks from professions did not register dependencies from prerequisites ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
|
||||
* **Dutch:** Typo in effect of Bliksemblind spell ([c58279c](https://github.com/elyukai/optolith-client/commit/c58279cc95aba5506824510d83aa6ffbc410107a), [#805](https://github.com/elyukai/optolith-client/issues/805))
|
||||
* Weight of Elves was not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
|
||||
* **English:** Gaze into the Essence spell was misspelled as Gase into the Essence ([42891f0](https://github.com/elyukai/optolith-client/commit/42891f070c35b74c49bb2c9e16152789cc8cc7df), [#1180](https://github.com/elyukai/optolith-client/issues/1180))
|
||||
* **German:** Typo in Physiostabilis name ([e40f995](https://github.com/elyukai/optolith-client/commit/e40f995e341dc7fbcb1d9688c4b82a9187c180de), [#1234](https://github.com/elyukai/optolith-client/issues/1234))
|
||||
* **German/English:** Tradition (Druid) referenced a non-existent disadvantage instead of advantage Iron-Attuned Aura ([f8114c2](https://github.com/elyukai/optolith-client/commit/f8114c2f4318967631b71ea3614bf647e7826fa2), [#1237](https://github.com/elyukai/optolith-client/issues/1237))
|
||||
* **German/English:** Hook Dagger was not marked as a parrying weapon ([ed74170](https://github.com/elyukai/optolith-client/commit/ed74170865b2caad8008a345db5c1705e0376bc5), [#1232](https://github.com/elyukai/optolith-client/issues/1232))
|
||||
* **English:** Special ability Deadly Thrust had special ability Crossblock's rules text ([ec9bd71](https://github.com/elyukai/optolith-client/commit/ec9bd71e101abcaf61e84e3da340890e161896ea), [#841](https://github.com/elyukai/optolith-client/issues/841))
|
||||
* **German:** Weapon advantage of Kriegsbogen has wrong DP bonus ([8297455](https://github.com/elyukai/optolith-client/commit/8297455ddbd360035428a4ed244a684e6f1c7e7a), [#1074](https://github.com/elyukai/optolith-client/issues/1074))
|
||||
* **English:** Missing translations for spell enhancements of Heptagramma ([a5df7c8](https://github.com/elyukai/optolith-client/commit/a5df7c863cded391609950fa5b8bf8474ffe2dfd), [#848](https://github.com/elyukai/optolith-client/issues/848))
|
||||
* **German:** Wrong Animal Lore value in profession Spider Witch ([#1250](https://github.com/elyukai/optolith-client/issues/1250))
|
||||
* Attributes on minimum value (8) did not allow a combat technique rating over 6 if the attribute was the combat technique's primary attribute ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
|
||||
* **German/English:** Profession Sharisad got Earthencraft bonus instead of Clothworking bonus ([cd16e53](https://github.com/elyukai/optolith-client/commit/cd16e5314a7f579a5f5f916bb204a15df3220bda), [#1341](https://github.com/elyukai/optolith-client/issues/1341))
|
||||
* **English:** The Hit Zone Armor tab in Belongings was not available, even with Aventuria Armory activated ([383a9c1](https://github.com/elyukai/optolith-client/commit/383a9c166c6d8c5d713f4852f40999c5d8c00efc), [#1328](https://github.com/elyukai/optolith-client/issues/1328))
|
||||
* Too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
|
||||
* **English:** Weight column in inventory showed wrong weight ([6ba99f2](https://github.com/elyukai/optolith-client/commit/6ba99f2f4610e8a26d1703d978738a907f26bd92), [#1329](https://github.com/elyukai/optolith-client/issues/1329))
|
||||
* Auto-updater did not work in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
|
||||
* **German:** Special ability Weg der Schreiberin could not be activated ([83b534d](https://github.com/elyukai/optolith-client/commit/83b534d3f9fcd5e63ef7cf482d9dd26f06b5a1a2), [#1233](https://github.com/elyukai/optolith-client/issues/1233))
|
||||
* Some primary attribute prerequisites were not enforced ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
|
||||
* Range brackets input fields influenced other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
|
||||
* Requiring only one matching languages and script required all of them instead ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
|
||||
* Scripts did not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
|
||||
* Some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
|
||||
* **German:** Typo in Tarnele ([8b5eede](https://github.com/elyukai/optolith-client/commit/8b5eedeb372622761480f2511935e8b74bdfcdcd), [#1330](https://github.com/elyukai/optolith-client/issues/1330))
|
||||
* Unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
|
||||
* **English:** special ability Knuckle Storm's description used Damage Points instead of Brawling Points ([06b57c9](https://github.com/elyukai/optolith-client/commit/06b57c9d15e1ef6f35da69ea46512bb790119b0a), [#1340](https://github.com/elyukai/optolith-client/issues/1340))
|
||||
* Combat techniques did not influence the minimum of their primary attributes ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
|
||||
* Saving a hero cleared the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
|
||||
* **German:** Spells converted by Imitationszauberei could not use spell enhancements ([e558c1d](https://github.com/elyukai/optolith-client/commit/e558c1d80d1c668f926e4a56049029f989081a45), [#828](https://github.com/elyukai/optolith-client/issues/828))
|
||||
* Widened rows in second column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
|
||||
* **German:** Special ability Blattschuss displayed the wrong combat special ability type ([7e31136](https://github.com/elyukai/optolith-client/commit/7e31136083ae62e26c5017f3af2376938bd264c3), [#1331](https://github.com/elyukai/optolith-client/issues/1331))
|
||||
* **German:** Typo in name of Tradition (Illusionist) ([bdb3eb7](https://github.com/elyukai/optolith-client/commit/bdb3eb7804f8464689172f39d5bd8c229140c891), [#1239](https://github.com/elyukai/optolith-client/issues/1239))
|
||||
|
||||
## [1.5.0-alpha.9](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.8...v1.5.0-alpha.9) (2022-02-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* active animist powers occurred multiple times in addition list ([06eac93](https://github.com/elyukai/optolith-client/commit/06eac932217377b78901a08a1133789d95e8920e)), closes [#794](https://github.com/elyukai/optolith-client/issues/794)
|
||||
* typo in German name of Tradition (Illusionist) ([bdb3eb7](https://github.com/elyukai/optolith-client/commit/bdb3eb7804f8464689172f39d5bd8c229140c891)), closes [#1239](https://github.com/elyukai/optolith-client/issues/1239)
|
||||
|
||||
## [1.5.0-alpha.8](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.7...v1.5.0-alpha.8) (2022-02-04)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **logs:** add small logging utility function ([8b18b26](https://github.com/elyukai/optolith-client/commit/8b18b26361c1526c93b4ca8906e961d56f85ed49))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* attribute minimum must include combat techniques ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185)), closes [#836](https://github.com/elyukai/optolith-client/issues/836)
|
||||
* **datatypes:** find might return an existing value that is undefined ([232795d](https://github.com/elyukai/optolith-client/commit/232795d12984e1070223bffd60b79367d3560752))
|
||||
* **prerelease:** cult of Levtan not registered as blessed tradition ([1f09060](https://github.com/elyukai/optolith-client/commit/1f090605a4c5404ed1550a0b4048a72dffbb0104))
|
||||
* saving a hero clears the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9)), closes [#811](https://github.com/elyukai/optolith-client/issues/811)
|
||||
* spells converted by Imitationszauberei cannot use spell enhancements ([e558c1d](https://github.com/elyukai/optolith-client/commit/e558c1d80d1c668f926e4a56049029f989081a45)), closes [#828](https://github.com/elyukai/optolith-client/issues/828)
|
||||
* widened rows in seconds column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa)), closes [#1342](https://github.com/elyukai/optolith-client/issues/1342)
|
||||
* wrong combat type of special ability Blattschuss ([7e31136](https://github.com/elyukai/optolith-client/commit/7e31136083ae62e26c5017f3af2376938bd264c3)), closes [#1331](https://github.com/elyukai/optolith-client/issues/1331)
|
||||
|
||||
## [1.5.0-alpha.7](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.6...v1.5.0-alpha.7) (2022-02-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* auto-updater not working in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4)), closes [#753](https://github.com/elyukai/optolith-client/issues/753)
|
||||
* cannot activate special ability Weg der Schreiberin ([83b534d](https://github.com/elyukai/optolith-client/commit/83b534d3f9fcd5e63ef7cf482d9dd26f06b5a1a2)), closes [#1233](https://github.com/elyukai/optolith-client/issues/1233)
|
||||
* primary attribute prerequisites may not have been added as dependencies ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e)), closes [#1260](https://github.com/elyukai/optolith-client/issues/1260)
|
||||
* range brackets input influences other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af)), closes [#1251](https://github.com/elyukai/optolith-client/issues/1251)
|
||||
* requiring one matching languages and script requires all of them ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a)), closes [#1343](https://github.com/elyukai/optolith-client/issues/1343)
|
||||
* scripts do not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e)), closes [#1344](https://github.com/elyukai/optolith-client/issues/1344)
|
||||
* some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c)), closes [#1252](https://github.com/elyukai/optolith-client/issues/1252)
|
||||
* typo in German name of Tarnele ([8b5eede](https://github.com/elyukai/optolith-client/commit/8b5eedeb372622761480f2511935e8b74bdfcdcd)), closes [#1330](https://github.com/elyukai/optolith-client/issues/1330)
|
||||
* unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f)), closes [#1315](https://github.com/elyukai/optolith-client/issues/1315)
|
||||
* use Brawling Points in special ability Knuckle Storm description ([06b57c9](https://github.com/elyukai/optolith-client/commit/06b57c9d15e1ef6f35da69ea46512bb790119b0a)), closes [#1340](https://github.com/elyukai/optolith-client/issues/1340)
|
||||
|
||||
## [1.5.0-alpha.6](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.5...v1.5.0-alpha.6) (2022-02-01)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add kilogram hint to English item dialog ([bd9fc1b](https://github.com/elyukai/optolith-client/commit/bd9fc1badc8a408495bd7c1594338b1a5fe6df11))
|
||||
* add utilities for working with tagged unions ([bba9b92](https://github.com/elyukai/optolith-client/commit/bba9b92e5d50fbb7cad7450b56b95b87e2e9aa4d))
|
||||
* add native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* attributes on minimum value do not allow CtR over 6 ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94)), closes [#835](https://github.com/elyukai/optolith-client/issues/835)
|
||||
* profession Sharisad gets Earthencraft bonus instead of Clothworking bonus ([cd16e53](https://github.com/elyukai/optolith-client/commit/cd16e5314a7f579a5f5f916bb204a15df3220bda)), closes [#1341](https://github.com/elyukai/optolith-client/issues/1341)
|
||||
* show Hit Zone Armor tab for English Armory ([383a9c1](https://github.com/elyukai/optolith-client/commit/383a9c166c6d8c5d713f4852f40999c5d8c00efc)), closes [#1328](https://github.com/elyukai/optolith-client/issues/1328)
|
||||
* special ability Tradition (Tsatuara-Anhängerinnen) is in wrong group ([6669352](https://github.com/elyukai/optolith-client/commit/6669352d06c3687a9793eb69ea0018915b865212)), closes [#1137](https://github.com/elyukai/optolith-client/issues/1137)
|
||||
* too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4)), closes [#1094](https://github.com/elyukai/optolith-client/issues/1094)
|
||||
* weight column in inventory shows wrong weight in English ([6ba99f2](https://github.com/elyukai/optolith-client/commit/6ba99f2f4610e8a26d1703d978738a907f26bd92)), closes [#1329](https://github.com/elyukai/optolith-client/issues/1329)
|
||||
|
||||
## [1.5.0-alpha.5](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.4...v1.5.0-alpha.5) (2022-01-27)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* latest TypeScript compilation errors ([6b93c15](https://github.com/elyukai/optolith-client/commit/6b93c15aa02513dcd8ddccfb43cea92370de8290))
|
||||
* missing import ([29c7b4b](https://github.com/elyukai/optolith-client/commit/29c7b4bc39d21e41291ee944c8051b2b10863069))
|
||||
|
||||
## [1.5.0-alpha.4](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.3...v1.5.0-alpha.4) (2021-08-03)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add XML export for MapTool ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* maptools should provide user interface strings ([b2fb035](https://github.com/elyukai/optolith-client/commit/b2fb0353a9cac409d726e3ad236c0508f230ff06))
|
||||
|
||||
## [1.5.0-alpha.3](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.2...v1.5.0-alpha.3) (2021-08-03)
|
||||
|
||||
## [1.5.0-alpha.2](https://github.com/elyukai/optolith-client/compare/v1.5.0-alpha.1...v1.5.0-alpha.2) (2021-05-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* "Gaze into the Essence" spell is misspelled as "Gase into the Essence" ([42891f0](https://github.com/elyukai/optolith-client/commit/42891f070c35b74c49bb2c9e16152789cc8cc7df)), closes [#1180](https://github.com/elyukai/optolith-client/issues/1180)
|
||||
* "Physiostabilis" name typo ([e40f995](https://github.com/elyukai/optolith-client/commit/e40f995e341dc7fbcb1d9688c4b82a9187c180de)), closes [#1234](https://github.com/elyukai/optolith-client/issues/1234)
|
||||
* "Tradition (Druid)" has invalid prerequisite in data ([f8114c2](https://github.com/elyukai/optolith-client/commit/f8114c2f4318967631b71ea3614bf647e7826fa2)), closes [#1237](https://github.com/elyukai/optolith-client/issues/1237)
|
||||
* hook dagger is not marked as a parrying weapon ([ed74170](https://github.com/elyukai/optolith-client/commit/ed74170865b2caad8008a345db5c1705e0376bc5)), closes [#1232](https://github.com/elyukai/optolith-client/issues/1232)
|
||||
* multiple database fixes ([16bd668](https://github.com/elyukai/optolith-client/commit/16bd668313826ab8df0eeaeb5259a2f30304c134)), closes [#854](https://github.com/elyukai/optolith-client/issues/854) [#855](https://github.com/elyukai/optolith-client/issues/855) [#1136](https://github.com/elyukai/optolith-client/issues/1136) [#1213](https://github.com/elyukai/optolith-client/issues/1213) [#1238](https://github.com/elyukai/optolith-client/issues/1238) [#1242](https://github.com/elyukai/optolith-client/issues/1242)
|
||||
* special ability Deadly Thrust has SA Crossblock's rules text ([ec9bd71](https://github.com/elyukai/optolith-client/commit/ec9bd71e101abcaf61e84e3da340890e161896ea)), closes [#841](https://github.com/elyukai/optolith-client/issues/841)
|
||||
* weapon advantage of Kriegsbogen has wrong DP bonus ([8297455](https://github.com/elyukai/optolith-client/commit/8297455ddbd360035428a4ed244a684e6f1c7e7a)), closes [#1074](https://github.com/elyukai/optolith-client/issues/1074)
|
||||
* wrong English names for spell enhancements of Heptagramma ([a5df7c8](https://github.com/elyukai/optolith-client/commit/a5df7c863cded391609950fa5b8bf8474ffe2dfd)), closes [#848](https://github.com/elyukai/optolith-client/issues/848)
|
||||
* wrong negative prerequisite for Aspect Knowledge entry ([21146eb](https://github.com/elyukai/optolith-client/commit/21146eb2abdb16ff84f58d0223810603125ff63a)), closes [#1243](https://github.com/elyukai/optolith-client/issues/1243)
|
||||
* wrong talent value profession Spider Witch, closes [#1250](https://github.com/elyukai/optolith-client/issues/1250)
|
||||
|
||||
## [1.5.0-alpha.1](https://github.com/elyukai/optolith-client/compare/v1.4.3-alpha.1...v1.5.0-alpha.1) (2021-05-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 2H and i weapon settings missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94)), closes [#797](https://github.com/elyukai/optolith-client/issues/797)
|
||||
* brawling weapons have no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8)), closes [#1229](https://github.com/elyukai/optolith-client/issues/1229)
|
||||
* cannot remove dependent entry with multiple activations ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76)), closes [#1097](https://github.com/elyukai/optolith-client/issues/1097)
|
||||
* enhancements on transferred unfamiliar spells as dependency ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414)), closes [#827](https://github.com/elyukai/optolith-client/issues/827)
|
||||
* equipment info crash ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* filter professions with CTs higher than EL allows ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02)), closes [#1244](https://github.com/elyukai/optolith-client/issues/1244)
|
||||
* include latest database changes ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7))
|
||||
* ini/mov modifiers on armor are handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb)), closes [#1091](https://github.com/elyukai/optolith-client/issues/1091)
|
||||
* language specializations always cost 1 AP and are multi-buyable ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf)), closes [#1082](https://github.com/elyukai/optolith-client/issues/1082)
|
||||
* large spell selection and restrictions for Animists ([2ad037e](https://github.com/elyukai/optolith-client/commit/2ad037ecbc2727f360161d6500f2aeaef3c4a67c)), closes [#803](https://github.com/elyukai/optolith-client/issues/803)
|
||||
* patch security vulnerabilities ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98))
|
||||
* portraits with transparency have black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220)), closes [#800](https://github.com/elyukai/optolith-client/issues/800)
|
||||
* previous database fixes ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6)), closes [#792](https://github.com/elyukai/optolith-client/issues/792) [#824](https://github.com/elyukai/optolith-client/issues/824) [#832](https://github.com/elyukai/optolith-client/issues/832) [#850](https://github.com/elyukai/optolith-client/issues/850) [#851](https://github.com/elyukai/optolith-client/issues/851) [#1139](https://github.com/elyukai/optolith-client/issues/1139) [#1224](https://github.com/elyukai/optolith-client/issues/1224)
|
||||
* primary attribute dropdown does not handle data correctly ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f)), closes [#798](https://github.com/elyukai/optolith-client/issues/798)
|
||||
* profession with due to EL impossible attribute values can be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e)), closes [#1109](https://github.com/elyukai/optolith-client/issues/1109)
|
||||
* spellworks from professions do not register dependencies ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec)), closes [#1240](https://github.com/elyukai/optolith-client/issues/1240)
|
||||
* typo in effect of Bliksemblind spell (Dutch) ([c58279c](https://github.com/elyukai/optolith-client/commit/c58279cc95aba5506824510d83aa6ffbc410107a)), closes [#805](https://github.com/elyukai/optolith-client/issues/805)
|
||||
* weight of Elves is not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21)), closes [#813](https://github.com/elyukai/optolith-client/issues/813)
|
||||
|
||||
## [1.4.3-alpha.1](https://github.com/elyukai/optolith-client/compare/v1.4.3-alpha.0...v1.4.3-alpha.1) (2020-11-13)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **sheets:** removed margin of hit zone sheet ([e637136](https://github.com/elyukai/optolith-client/commit/e63713687eff9b825a79d159fb8b44dc26f64ffe)), closes [#788](https://github.com/elyukai/optolith-client/issues/788)
|
||||
* adding LE should affect CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a)), closes [#787](https://github.com/elyukai/optolith-client/issues/787)
|
||||
|
||||
## [1.4.2](https://github.com/elyukai/optolith-client/compare/v1.4.1...v1.4.2) (2020-11-08)
|
||||
|
||||
### Enhancements
|
||||
|
||||
+8
-2
@@ -28,7 +28,7 @@ You can suggest features either in the issues tracker or in one of the [listed f
|
||||
|
||||
### Important note
|
||||
|
||||
Due to licensing, the YAML files containing the crunch elements from the books are **not** included in this repository but in a separate private one. Please join my [Discord Server](https://discord.gg/uDyR4yr) if you want to contribute and thus need to access them. Just text me in a channel on the server or PN me (@elyukai).
|
||||
Due to licensing, the YAML files containing the crunch elements from the books are **not** included in this repository but in a separate private one. If you only plan to contribute something independent of the database, you can just get the database from an alpha installation. On Windows, for example, the database is available under `Resources/app.asar.unpacked/app/Data` inside the installation folder. If you plan to contribute anything to the database itself and thus need to access its source, please join my [Discord Server](https://discord.gg/uDyR4yr) and text me in a channel on the server or PN me (@elyukai).
|
||||
|
||||
### Basic development rules
|
||||
|
||||
@@ -40,6 +40,12 @@ Due to licensing, the YAML files containing the crunch elements from the books a
|
||||
- Code should follow functional programming practices while maintaining readablilty – which can be an issue using JavaScript/TypeScript, which is why in certain circumstances imperative/OOP code is allowed. It is also possible to write Reason/OCaml code, which compiles to JS.
|
||||
- The contribution has to be easy to understand not only for players using the app, but also for coders trying to further enhance the app: Please document *at least* module exports!
|
||||
|
||||
### Install required software
|
||||
|
||||
- **Git** — <https://git-scm.com/downloads> or via a package manager
|
||||
- **Node.js** with **npm** — <https://nodejs.org/en/> or via [`nvm`](https://github.com/nvm-sh/nvm)
|
||||
- *Optional:* **Visual Studio Code** — <https://code.visualstudio.com/> (you can use your own editor as well, there are project-specific VSCode settings within this repository, though)
|
||||
|
||||
### Prepare the repo
|
||||
|
||||
Clone the repo, including the private submodule.
|
||||
@@ -63,7 +69,7 @@ Compile the source code. `js:` is for TypeScript/Webpack, `re:` for Reason/OCaml
|
||||
You have to run the Reason build first as it generates TypeScript files...
|
||||
|
||||
```sh
|
||||
npm run re:build
|
||||
npm run ts:build
|
||||
npm run css:build
|
||||
npm run js:build
|
||||
```
|
||||
|
||||
+1
-1
Submodule app/Database updated: f2064cea3e...a43a1789d8
@@ -1,3 +1,88 @@
|
||||
## 1.5.1
|
||||
|
||||
### Verbesserungen
|
||||
|
||||
* **MapTool:** unter dem Exportbutton sind nun Links zu der MapTool-Erweiterung ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
### Fehlerbehebungen
|
||||
|
||||
* **MapTool:** ohne Avatar konnte nicht exportiert werden ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), schließt [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** für MapTool Version 1.11.4 wurde das Exportformat angepasst ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* Vorteil *Vertrauenerweckend* konnte selbst mit einem aktiven Nachteil *Inkompetent* in einem Gesellschaftstalent gekauft werden ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), schließt [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Voraussetzungen, die hätten durchgestrichen werden sollen, wurden stattdessen mit umgebenen Tilden dargestellt ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), schließt [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
## 1.5.0
|
||||
|
||||
### Features
|
||||
|
||||
* MapTool-Export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
* Portugiesische Übersetzung ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
|
||||
* Native Unterstützung für Apples M1 ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
### Verbesserungen
|
||||
|
||||
* Sicherheit ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
|
||||
|
||||
### Fehlerbehebungen
|
||||
|
||||
* Der Trefferzonenrüstungscharakterbogen hatte einen höheren Abstand nach links als die anderen Bögen ([e637136](https://github.com/elyukai/optolith-client/commit/e63713687eff9b825a79d159fb8b44dc26f64ffe), [#788](https://github.com/elyukai/optolith-client/issues/788))
|
||||
* Bei hinzugekaufter LE wurde nicht für KO ein entsprechendes Minimum gesetzt, sondern für KK ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
|
||||
* Waffenindikatoren für zweihändig (2H) und improvisiert (i) fehlten auf dem Charakterbogen ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
|
||||
* Waffen der Kampftechnik Raufen hatten auf dem Charakterbogen keinen Paradewert ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
|
||||
* Ein Eintrag, der von einer einzelnen Aktivierung eines anderen Eintrags abhängt, hat die Möglichkeit, die Aktivierung zu entfernen, auch bei mehreren Aktivierungen dieses anderen Eintrags nicht bereitgestellt ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
|
||||
* Einträge, die Fremdzauber in die eigenen Tradition überführen, konnten entfernt werden, wenn für diese Zauber Zaubererweiterungen gekauft worden waren ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
|
||||
* Der Infobereich für Gegenstände hat manchmal nur Fehler angezeigt ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* Professionen, die höhere Kampftechnikwerte geben als durch den Erfahrungsgrad erlaubt, wurden nicht ausgeblendet ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
|
||||
* Bei der Sonderfertigkeit Kernschuss war unter Erschwernis ein Minuszeichen falsch platziert ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#1080](https://github.com/elyukai/optolith-client/issues/1080))
|
||||
* In der Beschreibung von Albernisches Entermesser und Harbener Säbel war die Seitenzahl falsch ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#1081](https://github.com/elyukai/optolith-client/issues/1081))
|
||||
* In der Beschreibung des Zaubers Zauberschnurren waren die QS-Beschreibungen vertauscht ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#846](https://github.com/elyukai/optolith-client/issues/846) [#1122](https://github.com/elyukai/optolith-client/issues/1122))
|
||||
* Schlachtermesser und Fleischerbeil waren nicht als improvisierte Waffen markiert ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#808](https://github.com/elyukai/optolith-client/issues/808))
|
||||
* INI/GS-Modifikatoren von Rüstungen wurden negativ eingerechnet ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
|
||||
* Sprachspezialisierungen kosteten nicht immer 1 AP und konnten zudem pro Sprache nicht mehrfach aktiviert werden ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
|
||||
* Portraits mit transparenten Flächen hatten einen schwarzen Hintergrund ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
|
||||
* Bei Profession Garether Krieger fehlte Schwerter auf 12 und Orientierung sollte 3 statt 2 betragen ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#792](https://github.com/elyukai/optolith-client/issues/792))
|
||||
* Das bornländische Kulturpaket führte Lederbearbeitung statt Lebensmittelbearbeitung auf ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
|
||||
* Zauber Wirbelform hatte die falsche Tradition und eine falsche Reihenfolge bei den Zaubererweiterungen ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1139](https://github.com/elyukai/optolith-client/issues/1139))
|
||||
* Kleine Fehler bei den Maßangaben in der Beschreibung des Zaubers Invocatio Minima ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1224](https://github.com/elyukai/optolith-client/issues/1224))
|
||||
* Leiteigenschaftsänderungen bei Gegenständen wurden auf dem Charakterbogen geändert, aber nicht direkt im Editierfenster des Gegenstands ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
|
||||
* Bestimmte Professionen waren trotz eines für vorausgesetzte Eigenschaften zu niedrigen Erfahrungsgrads auswählbar ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
|
||||
* Herbeirufende und beschwörende Zauber aus Professionen haben nicht direkt die Abhängigkeiten für ihre Voraussetzungen registriert ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
|
||||
* Das Gewicht bei Elfen wurde nicht korrekt zufällig generiert ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
|
||||
* Schreibfehler bei Physiostabilis ([e40f995](https://github.com/elyukai/optolith-client/commit/e40f995e341dc7fbcb1d9688c4b82a9187c180de), [#1234](https://github.com/elyukai/optolith-client/issues/1234))
|
||||
* Tradition (Druide) referenzierte einen nicht existierenden Nachteil statt des Vorteils Eisenaffine Aura ([f8114c2](https://github.com/elyukai/optolith-client/commit/f8114c2f4318967631b71ea3614bf647e7826fa2), [#1237](https://github.com/elyukai/optolith-client/issues/1237))
|
||||
* Der Hakendolch war nicht als Parierwaffe markiert ([ed74170](https://github.com/elyukai/optolith-client/commit/ed74170865b2caad8008a345db5c1705e0376bc5), [#1232](https://github.com/elyukai/optolith-client/issues/1232))
|
||||
* Der Waffenvorteil des Kriegsbogens hatte einen falschen Schadensbonus ([8297455](https://github.com/elyukai/optolith-client/commit/8297455ddbd360035428a4ed244a684e6f1c7e7a), [#1074](https://github.com/elyukai/optolith-client/issues/1074))
|
||||
* Profession Spinnenhexe hatte einen falschen Tierkunde-Wert ([#1250](https://github.com/elyukai/optolith-client/issues/1250))
|
||||
* Eigenschaften auf dem niedrigsten möglichen Wert (8) erlaubten Kampftechniken, dessen Leiteigenschaften sie waren, keinen Kampftechnikwert über 6 ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
|
||||
* Profession Sharisad bekam einen Bonus auf Steinbearbeitung statt auf Stoffbearbeitung ([cd16e53](https://github.com/elyukai/optolith-client/commit/cd16e5314a7f579a5f5f916bb204a15df3220bda), [#1341](https://github.com/elyukai/optolith-client/issues/1341))
|
||||
* Die PDF-Datei war zu groß, wenn die Hintergrundtextur verwendet wurde ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
|
||||
* Bei AppImages funktionierte der Auto-Updater nicht ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
|
||||
* SF Weg der Schreiberin konnte nicht aktiviert werden ([83b534d](https://github.com/elyukai/optolith-client/commit/83b534d3f9fcd5e63ef7cf482d9dd26f06b5a1a2), [#1233](https://github.com/elyukai/optolith-client/issues/1233))
|
||||
* Einige Leiteigenschaftsvoraussetzungen wurden ignoriert ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
|
||||
* Die Texteingabefehler für die Reichweite von Fernkampfwaffen beeinflussten ihre Inhalte gegenseitig ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
|
||||
* Wenn eine einzige Sprache und dazu passende Schrift vorausgesetzt wurden, wurden stattdessen alle Sprachen und Schriften vorausgesetzt ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
|
||||
* Schriften erforderten keine aktive passende Sprache ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
|
||||
* Einige Gegenstandswerte wurden nicht gespeichert ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
|
||||
* Schreibfeler bei Tarnele ([8b5eede](https://github.com/elyukai/optolith-client/commit/8b5eedeb372622761480f2511935e8b74bdfcdcd), [#1330](https://github.com/elyukai/optolith-client/issues/1330))
|
||||
* Die Auswahl eines Fremdzaubers für eine gildenmagische Profession war optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
|
||||
* Kampftechniken haben nicht das Minimum ihrer Leiteigenschaften beeinflusst ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
|
||||
* Das Speichern eines Charakters hat manchmal die Änderungshistorie von mehreren Charakteren gelöscht ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
|
||||
* Zauber, die durch Imitationszauberei in Schelmenstreiche konvertiert wurden, konnten Zaubererweiterungen nutzen ([e558c1d](https://github.com/elyukai/optolith-client/commit/e558c1d80d1c668f926e4a56049029f989081a45), [#828](https://github.com/elyukai/optolith-client/issues/828))
|
||||
* Dickere Zeilen in der zweiten Spalte der Talenttabelle auf dem Charakterbogen ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
|
||||
* Sonderfertigkeit Blattschuss zeigte den falschen Kampfsonderfertigkeitstyp an ([7e31136](https://github.com/elyukai/optolith-client/commit/7e31136083ae62e26c5017f3af2376938bd264c3), [#1331](https://github.com/elyukai/optolith-client/issues/1331))
|
||||
* Schreibfehler bei Tradition (Scharlatane) ([bdb3eb7](https://github.com/elyukai/optolith-client/commit/bdb3eb7804f8464689172f39d5bd8c229140c891), [#1239](https://github.com/elyukai/optolith-client/issues/1239))
|
||||
|
||||
### Danke
|
||||
|
||||
Zu guter Letzt ein großes **Danke** an alle, die über verschiedeste Kanäle Feedback geben und helfen, sowie an die folgenden Menschen auf GitHub, die an dieser Version mitgewirkt haben!
|
||||
|
||||
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lector (@Lector)](https://github.com/Lector)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
|
||||
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
|
||||
|
||||
## 1.4.2
|
||||
|
||||
### Enhancements
|
||||
|
||||
@@ -51,5 +51,9 @@ Die Charaktere und auch andere Dateien wie die Konfiguration findest du – je n
|
||||
Hier finden sich verschiedene relevante Dateien:
|
||||
|
||||
- `heroes.json` enthält alle Helden, die aktuell in Optolith sind
|
||||
- `config.json` enthält die Konfiguration deiner Optolith-Anwendung. Enthält keine wichtigen Daten, nur Dinge wie Farbschema, Sprache (falls man eine spezielle eingestellt hat), und ein paar andere Sachen.
|
||||
- `config.json` enthält die Konfiguration deiner Optolith-Anwendung. Enthält keine wichtigen Daten, nur Dinge wie Farbschema, Sprache (falls man eine spezielle eingestellt hat), und ein paar andere Sachen.
|
||||
*Ein Hinweis zu Windows:* `AppData` ist ein versteckter Ordner. Um ihn zu sehen, müsst ihr im Windows Explorer unter *Ansicht* die Einstellung *Ausgeblendete Elemente* aktivieren.
|
||||
|
||||
## Wie skaliere ich die Benutzeroberfläche von Optolith auf meinem Linux-System?
|
||||
|
||||
Wenn du die `tar.gz` heruntergeladen hast, kannst du in den entpackten Ordner navigieren und dort `GDK_DPI_SCALE=<Scale> ./Optolith` in der Kommandozeile ausführen. Dabei muss `<Scale>` mit dem gewünschten Skalierungsfaktor ersetzt werden, also z. B. `1.5`.
|
||||
|
||||
@@ -1,3 +1,82 @@
|
||||
## 1.5.1
|
||||
|
||||
### Enhancements
|
||||
|
||||
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
<!-- * **MapTool:** Add missing Italian translations for export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350) -->
|
||||
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
## 1.5.0
|
||||
|
||||
### Features
|
||||
|
||||
* MapTool export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
* Portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
|
||||
* Native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
### Enhancements
|
||||
|
||||
* Kilogram input hint for weight in item dialog ([bd9fc1b](https://github.com/elyukai/optolith-client/commit/bd9fc1badc8a408495bd7c1594338b1a5fe6df11))
|
||||
* Security ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Hit Zone Armor character sheet had left margin ([e637136](https://github.com/elyukai/optolith-client/commit/e63713687eff9b825a79d159fb8b44dc26f64ffe), [#788](https://github.com/elyukai/optolith-client/issues/788))
|
||||
* Additional LE set a minimum required value of STR instead of CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
|
||||
* Two-handed (2H) and improvised (i) weapon indicators were missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
|
||||
* Brawling weapons had no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
|
||||
* An entry that depends on a single activation of another entry disables removing of all activations of that entry if multiple activations are present ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
|
||||
* Entries affecting spells to not be unfamiliar could be removed if Spell Enhancements were bought ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
|
||||
* The equipment info area may have crashed ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* Professions that granted higher Combat Technique Ratings than what the selected Experience Level allowed were not filtered ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
|
||||
* INI/MOV modifiers on armor were handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
|
||||
* Language specializations did not always cost 1 AP and could not be activated multiple times for a single language ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
|
||||
* Portraits with transparency had a black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
|
||||
* Bornlander cultural package had Leatherworking instead of Prepare Food ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
|
||||
* Spell Wind Shaping had the wrong traditions and wrong spell enhancements order ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1139](https://github.com/elyukai/optolith-client/issues/1139))
|
||||
* Primary attribute changes for items were not applied in edit window, only on character sheet ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
|
||||
* Professions with due to EL impossible attribute values could be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
|
||||
* Summoning spellworks from professions did not register dependencies from prerequisites ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
|
||||
* Weight of Elves was not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
|
||||
* Gaze into the Essence spell was misspelled as Gase into the Essence ([42891f0](https://github.com/elyukai/optolith-client/commit/42891f070c35b74c49bb2c9e16152789cc8cc7df), [#1180](https://github.com/elyukai/optolith-client/issues/1180))
|
||||
* Tradition (Druid) referenced a non-existent disadvantage instead of advantage Iron-Attuned Aura ([f8114c2](https://github.com/elyukai/optolith-client/commit/f8114c2f4318967631b71ea3614bf647e7826fa2), [#1237](https://github.com/elyukai/optolith-client/issues/1237))
|
||||
* Hook Dagger was not marked as a parrying weapon ([ed74170](https://github.com/elyukai/optolith-client/commit/ed74170865b2caad8008a345db5c1705e0376bc5), [#1232](https://github.com/elyukai/optolith-client/issues/1232))
|
||||
* Special ability Deadly Thrust had special ability Crossblock's rules text ([ec9bd71](https://github.com/elyukai/optolith-client/commit/ec9bd71e101abcaf61e84e3da340890e161896ea), [#841](https://github.com/elyukai/optolith-client/issues/841))
|
||||
* Missing translations for spell enhancements of Heptagramma ([a5df7c8](https://github.com/elyukai/optolith-client/commit/a5df7c863cded391609950fa5b8bf8474ffe2dfd), [#848](https://github.com/elyukai/optolith-client/issues/848))
|
||||
* Attributes on minimum value (8) did not allow a combat technique rating over 6 if the attribute was the combat technique's primary attribute ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
|
||||
* Profession Sharisad got Earthencraft bonus instead of Clothworking bonus ([cd16e53](https://github.com/elyukai/optolith-client/commit/cd16e5314a7f579a5f5f916bb204a15df3220bda), [#1341](https://github.com/elyukai/optolith-client/issues/1341))
|
||||
* The Hit Zone Armor tab in Belongings was not available, even with Aventuria Armory activated ([383a9c1](https://github.com/elyukai/optolith-client/commit/383a9c166c6d8c5d713f4852f40999c5d8c00efc), [#1328](https://github.com/elyukai/optolith-client/issues/1328))
|
||||
* Too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
|
||||
* Weight column in inventory showed wrong weight ([6ba99f2](https://github.com/elyukai/optolith-client/commit/6ba99f2f4610e8a26d1703d978738a907f26bd92), [#1329](https://github.com/elyukai/optolith-client/issues/1329))
|
||||
* Auto-updater did not work in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
|
||||
* Some primary attribute prerequisites were not enforced ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
|
||||
* Range brackets input fields influenced other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
|
||||
* Requiring only one matching languages and script required all of them instead ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
|
||||
* Scripts did not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
|
||||
* Some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
|
||||
* Unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
|
||||
* special ability Knuckle Storm's description used Damage Points instead of Brawling Points ([06b57c9](https://github.com/elyukai/optolith-client/commit/06b57c9d15e1ef6f35da69ea46512bb790119b0a), [#1340](https://github.com/elyukai/optolith-client/issues/1340))
|
||||
* Combat techniques did not influence the minimum of their primary attributes ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
|
||||
* Saving a hero cleared the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
|
||||
* Widened rows in second column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
|
||||
|
||||
### Thank you
|
||||
|
||||
Last but definitely not least a big **Thank You** to all of you who give feedback and help out on various channels as well as to the following people on GitHub who contributed to this release!
|
||||
|
||||
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lector (@Lector)](https://github.com/Lector)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
|
||||
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
|
||||
|
||||
## 1.4.2
|
||||
|
||||
### Enhancements
|
||||
|
||||
@@ -50,4 +50,8 @@ A list of relevant files:
|
||||
|
||||
- `heroes.json ` contains all heroes saved in Optolith
|
||||
- `config.json` contains the configuration of your Optolith. It does not contain critical data but things like color theme, language (only if you selected a specific one) and alike.
|
||||
*A note on Windows:* `AppData` is a *hidden* folder. To be able to see it, check out the Windows Explorer, go to the *View* tab and activate the setting *Hidden elements*.
|
||||
*A note on Windows:* `AppData` is a *hidden* folder. To be able to see it, check out the Windows Explorer, go to the *View* tab and activate the setting *Hidden elements*.
|
||||
|
||||
## How do I scale the UI for Optolith on Linux?
|
||||
|
||||
If you have the `tar.gz`, you can go into the extracted folder and then run `GDK_DPI_SCALE=<Scale> ./Optolith`, where `<Scale>` needs to be replaced with the desired scale, e.g. `1.5`.
|
||||
|
||||
@@ -1,3 +1,69 @@
|
||||
## 1.5.1
|
||||
|
||||
### Améliorations
|
||||
|
||||
* **MapTool:** ajout de liens vers l'extension près du bouton d'export ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
### Bugs corrigés
|
||||
|
||||
* **MapTool:** sans avatar aucun export n'était possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), fermeture [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** modification du format d'export pour MapTool en version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* L'avantage *Rassurant* pouvait être acheté malgré un désavantage *Incompétent* dans un des talents sociaux ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), fermeture [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Les prérequis à ne pas remplir étaient affichés avec des tirets autour au lieu d'être rayés ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), fermeture [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
## 1.5.0
|
||||
|
||||
### Fonctionnalités
|
||||
|
||||
* Export MapTool ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
* Traductions en portugais ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
|
||||
* Support natif Apple M1 ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
### Améliorations
|
||||
|
||||
* Sécurité ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
|
||||
|
||||
### Bugs corrigés
|
||||
|
||||
* Des PV supplémentaires fixaient une valeur minimale requise de FO au lieu de CN. ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
|
||||
* Les indicateurs d'armes à deux mains (2M) et d'armes improvisées (i) manquaient sur la feuille de personnage. ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
|
||||
* Les armes de bagarre n'avaient pas de parade sur la feuille de personnage. ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
|
||||
* Une entrée qui dépend d'une seule activation d'une autre entrée désactive la suppression de toutes les activations de cette entrée si des activations multiples sont présentes. ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
|
||||
* Les entrées affectant les sorts de façon à ce qu'ils ne soient pas "non familiers" pouvaient être supprimées si des améliorations de sorts étaient achetées. ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
|
||||
* La zone d'information sur l'équipement pouvait planter ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* Les professions qui accordaient une valeur de technique de combat supérieure à celle autorisée par le niveau d'expérience sélectionné n'étaient pas filtrées. ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
|
||||
* Les modificateurs INI/VIT sur les armures étaient traités comme des pénalités. ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
|
||||
* Les spécialisations linguistiques ne coûtaient pas toujours 1 PA et ne pouvaient pas être activées plusieurs fois pour une même langue. ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
|
||||
* Les portraits en transparence avaient un fond noir ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
|
||||
* Le bagage culturel Sourcelandais avait Cuisine au lieu de Travail du cuir. ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
|
||||
* Les changements d'attributs primaires des objets n'étaient pas appliqués dans la fenêtre d'édition, mais uniquement sur la feuille de personnage. ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
|
||||
* Les professions avec des valeurs d'attributs impossibles à sélectionner en raison du niveau d'expérience peuvent être sélectionnées. ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
|
||||
* Les sorts d'invocation des professions n'enregistraient pas les dépendances des prérequis. ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
|
||||
* Le poids des Elfes n'était pas généré correctement ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
|
||||
* Les attributs ayant une valeur minimale (8) ne permettaient pas d'obtenir une valeur de technique de combat supérieure à 6 si l'attribut était l'attribut principal de la technique de combat. ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
|
||||
* Sortie PDF trop grande lors de l'utilisation d'un fond de feuille. ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
|
||||
* Auto-updater ne fonctionne pas dans AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
|
||||
* Certains prérequis d'attributs primaires n'étaient pas appliqués. ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
|
||||
* Les champs de saisie entre parenthèses influençaient les autres champs entre parenthèses. ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
|
||||
* L'exigence d'une seule langue et d'une seule écriture correspondante exigeait toutes les langues à la place ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
|
||||
* Les écritures ne requièrent pas qu'une langue correspondante soit active. ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
|
||||
* Certaines propriétés d'objets n'étaient pas sauvegardées ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
|
||||
* La sélection des sorts non familiers dans la profession était facultative. ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
|
||||
* Les techniques de combat n'influencent pas le minimum de leurs attributs primaires. ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
|
||||
* La sauvegarde d'un héros efface l'historique d'annulation de plusieurs personnages. ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
|
||||
* Les lignes de la deuxième colonne du tableau des compétences de la fiche de personnage ont été élargies. ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
|
||||
|
||||
### Remerciements
|
||||
|
||||
Enfin et surtout, un grand **merci** à tous ceux qui font des retours et donnent leur aide sur les différents canaux ainsi qu'aux personnes ci-dessous sur GitHub qui ont contribué à cette version !
|
||||
|
||||
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lector (@Lector)](https://github.com/Lector)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
|
||||
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
|
||||
|
||||
## 1.4.2
|
||||
|
||||
### Améliorations
|
||||
|
||||
@@ -1,3 +1,74 @@
|
||||
## 1.5.1
|
||||
|
||||
### Miglioramenti
|
||||
|
||||
* **MapTool:** aggiunto collegamento all’estensione accanto al pulsante di esportazione ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
### Correzioni
|
||||
|
||||
* **MapTool:** non era possibile esportare senza avatar ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), corregge [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** modificato il formato di esportazione alla versione 1.11.4 di MapTool ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* **MapTool:** aggiunte traduzioni italiane per l’esportazione ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), corregge [#1350](https://github.com/elyukai/optolith-client/issues/1350)
|
||||
* Il vantaggio *Affabilità* poteva essere acquistato con lo svantaggio *Incompetenza* su una competenza sociale ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), corregge [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Prerequisiti barrati venivano renderizzati con delle tilde prima e dopo ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), corregge [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
## 1.5.0
|
||||
|
||||
### Features
|
||||
|
||||
* Esportazione per MapTool ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
* Traduzione portoghese ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
|
||||
* Supporto nativo per Apple M1 ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
### Migliorie
|
||||
|
||||
* Sicurezza ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) e altre)
|
||||
|
||||
### Correzioni
|
||||
|
||||
* PV aggiuntivi influenzano il valore minimo di COS e non FOR ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
|
||||
* Aggiunti gli indicatori per armi a due mani (2M) e improvvisate (i) sul Foglio d’identità ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
|
||||
* Armi usate con Armi nude non avevano il valore di Parata indicato sul Foglio d’identità ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
|
||||
* Un valore che dipende da una singola attivazione di un altro valore impedisce di rimuovere tutte le attivazioni di quel valore, se ce ne sono più attive ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
|
||||
* Valori che hanno effetto sulle magie estranee potevano essere rimossi se venivano acquistati miglioramenti di incantesimo ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
|
||||
* Terminazione anomala dovuto alle informazioni sull’equipaggiamento ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* Le professioni che garantiscono un Valore di Tecnica di Combattimento più elevato del massimo concesso dal Livello d’Esperienza non venivano filtrate ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
|
||||
* I modificatori di Ini e Mov delle armature venivano gestiti come penalità ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
|
||||
* Specializzazioni di linguaggio non costavano sempre 1 PAvv e non potevano essere scelte più volte per una singola lingua ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
|
||||
* Immagini con trasparenza venivano mostrate con sfondo nero ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
|
||||
* Il pacchetto culturale bornese modificava Cucinare invece di Lavorazione del cuoio ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
|
||||
* Alcuni errori di battitura in oggetti, lingue e scritture ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#832](https://github.com/elyukai/optolith-client/issues/832))
|
||||
* Corretto il titolo di Volontà del ferro ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#850](https://github.com/elyukai/optolith-client/issues/850))
|
||||
* Incantesimi e liturgie venivano indicate con punteggiatura e maiuscole diverse ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#851](https://github.com/elyukai/optolith-client/issues/851))
|
||||
* Le modifiche di attributo primario per gli oggetti venivano mostrate soltanto nella finestra di modifica, non sul Foglio d’identità ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
|
||||
* Le professioni con valori di attributi impossibili (a causa del Livello d’Esperienza) non possono più essere selezionate ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
|
||||
* Magie di evocazione fornite dalla professione non registravano i prerequisiti corretti ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
|
||||
* Il peso degli elfi non veniva calcolato in maniera corretta ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
|
||||
* Gli attributi al valore minimo (8) non permettevano di raggiungere un Valore di Tecnica di Combattimento superiore al 6 se facevano da Attributo primario per la Tecnica
|
||||
([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
|
||||
* PDF troppo grande quando si utilizza lo sfondo ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
|
||||
* Sistema di aggiornamento non funziona con AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
|
||||
* Alcuni requisiti sugli Attributi primari non venivano rispettati ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
|
||||
* Gli indicatori di Raggio influenzavano altri campi ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
|
||||
* Si richiedeva soltanto una lingua compatibile invece di tutte ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
|
||||
* Le scritture non richiedevano la conoscenza di una lingua compatibile ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
|
||||
* Alcune proprietà degli oggetti non venivano salvati ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
|
||||
* La selezione dei propri incantesimi estranei era opzionale ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
|
||||
* Le Tecniche di Combattimento non influenzavano il minimo richiesto sugli Attributi primari ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
|
||||
* Salvando un eroe veniva cancellata la cronologia per più eroi ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
|
||||
* Allargate le righe della seconda colonna di abilità nel Foglio d’identità ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
|
||||
|
||||
### Ringraziamenti
|
||||
|
||||
Come ultimo punto, ma non per importanza, un grandissimo **grazie** a tutti coloro che forniscono commenti, suggerimenti e aiuto sui vari canali sociali e un grazie alle seguenti persone su GitHub che hanno contribuito a questa versione!
|
||||
|
||||
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lector (@Lector)](https://github.com/Lector)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
|
||||
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
|
||||
|
||||
## 1.4.2
|
||||
|
||||
### Migliorie
|
||||
|
||||
@@ -1,3 +1,70 @@
|
||||
## 1.5.1
|
||||
|
||||
### Enhancements
|
||||
|
||||
* **MapTool:** voeg links toe naar extensie naast export knop ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **MapTool:** zonder avatar kon je niet exporteren ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), sluit [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** export formaat voor MapTool versie 1.11.4 is aangepast ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* Voordeel *Inspireer Vertrouwen* kon gekocht worden met een actieve *incompetent* in een sociale vaardigheid ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), sluit [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Doorstreepte vereisten werden gerenderd met omsluitende tildes ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), sluit [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
## 1.5.0
|
||||
|
||||
### Features
|
||||
|
||||
* MapTool export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
|
||||
* Portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
|
||||
* Native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
|
||||
|
||||
### Verbeteringen
|
||||
|
||||
* Security ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
|
||||
|
||||
### Probleemoplossingen
|
||||
|
||||
* Additional LE set a minimum required value of STR instead of CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
|
||||
* Two-handed (2H) and improvised (i) weapon indicators were missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
|
||||
* Brawling weapons had no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
|
||||
* An entry that depends on a single activation of another entry disables removing of all activations of that entry if multiple activations are present ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
|
||||
* Entries affecting spells to not be unfamiliar could be removed if Spell Enhancements were bought ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
|
||||
* The equipment info area may have crashed ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
|
||||
* Professions that granted higher Combat Technique Ratings than what the selected Experience Level allowed were not filtered ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
|
||||
* INI/MOV modifiers on armor were handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
|
||||
* Language specializations did not always cost 1 AP and could not be activated multiple times for a single language ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
|
||||
* Portraits with transparency had a black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
|
||||
* Bornlander cultural package had Leatherworking instead of Prepare Food ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
|
||||
* Primary attribute changes for items were not applied in edit window, only on character sheet ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
|
||||
* Professions with due to EL impossible attribute values could be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
|
||||
* Summoning spellworks from professions did not register dependencies from prerequisites ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
|
||||
* Typo in effect of Bliksemblind spell ([c58279c](https://github.com/elyukai/optolith-client/commit/c58279cc95aba5506824510d83aa6ffbc410107a), [#805](https://github.com/elyukai/optolith-client/issues/805))
|
||||
* Weight of Elves was not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
|
||||
* Attributes on minimum value (8) did not allow a combat technique rating over 6 if the attribute was the combat technique's primary attribute ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
|
||||
* Too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
|
||||
* Auto-updater did not work in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
|
||||
* Some primary attribute prerequisites were not enforced ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
|
||||
* Range brackets input fields influenced other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
|
||||
* Requiring only one matching languages and script required all of them instead ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
|
||||
* Scripts did not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
|
||||
* Some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
|
||||
* Unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
|
||||
* Combat techniques did not influence the minimum of their primary attributes ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
|
||||
* Saving a hero cleared the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
|
||||
* Widened rows in second column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
|
||||
|
||||
### Dank u
|
||||
|
||||
Ten laatste maar zeker niet ten minste een dikke **Dank u** voor iedereen die feedback en help geeft in de verschillende kanalen alsook de volgende mensen op GitHub die bijgedragen hebben tot deze release!
|
||||
|
||||
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lector (@Lector)](https://github.com/Lector)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
|
||||
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
|
||||
|
||||
## 1.4.2
|
||||
|
||||
### Verbeteringen
|
||||
|
||||
@@ -48,4 +48,6 @@ Een lijst met relevante files:
|
||||
- `config.json` bevat de configuratie van Optolith. Het bevat geen kritieke data maar dingen zoals theme, taal (alleen als je een specifieke taal gekozen hebt) en zoverder.
|
||||
*Een noot voor Windows:* `AppData` is een *verborgen* folder. Om die te kunnen zien, open Windows Explorere, ga naar de "View" tab en activeer de setting "Hidden elements".
|
||||
|
||||
|
||||
## Hoe schaal ik de UI voor Optolith in Linux?
|
||||
|
||||
Als je de `.tar.gz` hebt gedownload, ga je naar de uitgepakte folder en start je `GDK_DPI_SCALE=<Scale> ./Optolith` in je terminal, waarbij je `<scale>` moet vervangen met de gewenste schaal, e.g. `1.5`.
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
## 1.5.0
|
||||
|
||||
Initial release.
|
||||
|
||||
### Features
|
||||
## 1.5.1
|
||||
|
||||
### Enhancements
|
||||
|
||||
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
### Thank you
|
||||
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
|
||||
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
|
||||
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
|
||||
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
|
||||
|
||||
Last but definitely not least a big **Thank You** to the following people on GitHub who contributed to this release!
|
||||
## 1.5.0
|
||||
|
||||
- [TBD (@tbd)](https://github.com/tbd)
|
||||
Lançamento inicial.
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
const _require = require("esm")(module)
|
||||
|
||||
process.once('loaded', () => {
|
||||
global.require = _require
|
||||
})
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 265 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 6.1 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 640 B |
@@ -1,25 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
'use strict';
|
||||
|
||||
|
||||
var WINDOWS = {};
|
||||
|
||||
var LINUX = {};
|
||||
|
||||
var MAC = {};
|
||||
|
||||
var Platform = {
|
||||
WINDOWS: WINDOWS,
|
||||
LINUX: LINUX,
|
||||
MAC: MAC
|
||||
};
|
||||
|
||||
var Config = {};
|
||||
|
||||
var ElectronBuilder = {
|
||||
Platform: Platform,
|
||||
Config: Config
|
||||
};
|
||||
|
||||
exports.ElectronBuilder = ElectronBuilder;
|
||||
/* No side effect */
|
||||
@@ -1,361 +0,0 @@
|
||||
module ElectronBuilder = {
|
||||
type target;
|
||||
|
||||
module Platform = {
|
||||
module WINDOWS = {
|
||||
[@bs.module "electron-builder"] [@bs.scope ("Platform", "WINDOWS")]
|
||||
external createTarget: unit => target = "createTarget";
|
||||
};
|
||||
|
||||
module LINUX = {
|
||||
[@bs.module "electron-builder"] [@bs.scope ("Platform", "LINUX")]
|
||||
external createTarget: unit => target = "createTarget";
|
||||
};
|
||||
|
||||
module MAC = {
|
||||
[@bs.module "electron-builder"] [@bs.scope ("Platform", "MAC")]
|
||||
external createTarget: unit => target = "createTarget";
|
||||
};
|
||||
};
|
||||
|
||||
module Config = {
|
||||
type directories = {
|
||||
buildResources: option(string),
|
||||
output: option(string),
|
||||
app: option(string),
|
||||
};
|
||||
|
||||
type target = {
|
||||
target: string,
|
||||
arch: option(array(string)),
|
||||
};
|
||||
|
||||
type mac = {
|
||||
artifactName: option(string),
|
||||
category: option(string),
|
||||
target: option(string),
|
||||
icon: option(string),
|
||||
[@bs.as "type"]
|
||||
type_: option(string),
|
||||
hardenedRuntime: option(bool),
|
||||
gatekeeperAssess: option(bool),
|
||||
};
|
||||
|
||||
type dmg = {sign: option(bool)};
|
||||
|
||||
type win = {
|
||||
artifactName: option(string),
|
||||
target: option(array(target)),
|
||||
icon: option(string),
|
||||
};
|
||||
|
||||
type nsis = {
|
||||
perMachine: option(bool),
|
||||
deleteAppDataOnUninstall: option(bool),
|
||||
};
|
||||
|
||||
type linux = {
|
||||
artifactName: option(string),
|
||||
category: option(string),
|
||||
target: option(array(target)),
|
||||
executableName: option(string),
|
||||
icon: option(string),
|
||||
};
|
||||
|
||||
type publish = {
|
||||
provider: string,
|
||||
url: string,
|
||||
channel: option(string),
|
||||
useMultipleRangeRequest: option(bool),
|
||||
};
|
||||
|
||||
type t = {
|
||||
appId: option(string),
|
||||
productName: option(string),
|
||||
copyright: option(string),
|
||||
directories: option(directories),
|
||||
mac: option(mac),
|
||||
dmg: option(dmg),
|
||||
win: option(win),
|
||||
nsis: option(nsis),
|
||||
linux: option(linux),
|
||||
files: option(array(string)),
|
||||
publish: option(publish),
|
||||
};
|
||||
};
|
||||
|
||||
type options = {
|
||||
config: Config.t,
|
||||
targets: target,
|
||||
};
|
||||
|
||||
[@bs.module "electron-builder"]
|
||||
external build: options => Js.Promise.t(list(string)) = "build";
|
||||
};
|
||||
|
||||
// module Publisher = {
|
||||
// // require("dotenv").config()
|
||||
// // const ftp = require ("basic-ftp")
|
||||
// // const Client = require ("ssh2-sftp-client")
|
||||
// // const fs = require ("fs")
|
||||
// // const path = require ("path")
|
||||
// // const semver = require ("semver");
|
||||
|
||||
// type channel =
|
||||
// | Stable
|
||||
// | Insider;
|
||||
|
||||
// type os =
|
||||
// | Windows
|
||||
// | OSX
|
||||
// | Linux;
|
||||
|
||||
// /**
|
||||
// * Needed env variables:
|
||||
// * - `HOST`
|
||||
// * - `USERNAME`
|
||||
// * - `PASSWORD`
|
||||
// */
|
||||
// let publishToServer = (channel, os) => {
|
||||
// let subFolder =
|
||||
// switch (os) {
|
||||
// | Windows => "win"
|
||||
// | Linux => "linux"
|
||||
// | OSX => "mac"
|
||||
// };
|
||||
|
||||
// let updateYmlName =
|
||||
// switch (os) {
|
||||
// | Windows => "latest.yml"
|
||||
// | Linux => "latest-linux.yml"
|
||||
// | OSX => "latest-mac.yml"
|
||||
// };
|
||||
|
||||
// let distPath =
|
||||
// switch (channel) {
|
||||
// | Insider => ["dist", "insider"]
|
||||
// | Stable => ["dist"]
|
||||
// };
|
||||
|
||||
// let subPathServer =
|
||||
// switch (channel) {
|
||||
// | Insider => "insider/"
|
||||
// | Stable => ""
|
||||
// };
|
||||
|
||||
// let serverPath = "./update.optolith.app/" ++ subPathServer ++ subFolder;
|
||||
|
||||
// let regex =
|
||||
// switch (channel) {
|
||||
// | Insider =>
|
||||
// switch (os) {
|
||||
// | Windows =>
|
||||
// %re
|
||||
// "/^OptolithInsiderSetup_(.+)\\.exe$/"
|
||||
// | Linux =>
|
||||
// %re
|
||||
// "/^OptolithInsider_(.+)\\.(?:AppImage|tar\\.gz)$/"
|
||||
// | OSX =>
|
||||
// %re
|
||||
// "/^OptolithInsider_(.+)\\.(?:zip|dmg)$/"
|
||||
// }
|
||||
// | Stable =>
|
||||
// switch (os) {
|
||||
// | Windows =>
|
||||
// %re
|
||||
// "/^OptolithSetup_(.+)\\.exe$/"
|
||||
// | Linux =>
|
||||
// %re
|
||||
// "/^Optolith_(.+)\\.(?:AppImage|tar\\.gz)$/"
|
||||
// | OSX =>
|
||||
// %re
|
||||
// "/^Optolith_(.+)\\.(?:zip|dmg)$/"
|
||||
// }
|
||||
// };
|
||||
|
||||
// let recreateFileNames =
|
||||
// switch (channel) {
|
||||
// | Insider =>
|
||||
// switch (os) {
|
||||
// | Windows => (v => ["OptolithInsiderSetup_" ++ v ++ ".exe"])
|
||||
// | Linux => (
|
||||
// v => [
|
||||
// "OptolithInsider_" ++ v ++ ".AppImage",
|
||||
// "OptolithInsider_" ++ v ++ ".tar.gz",
|
||||
// ]
|
||||
// )
|
||||
// | OSX => (
|
||||
// v => [
|
||||
// "OptolithInsider_" ++ v ++ ".dmg",
|
||||
// "OptolithInsider_" ++ v ++ ".zip",
|
||||
// ]
|
||||
// )
|
||||
// }
|
||||
// | Stable =>
|
||||
// switch (os) {
|
||||
// | Windows => (v => ["OptolithSetup_" ++ v ++ ".exe"])
|
||||
// | Linux => (
|
||||
// v => [
|
||||
// "Optolith_" ++ v ++ ".AppImage",
|
||||
// "Optolith_" ++ v ++ ".tar.gz",
|
||||
// ]
|
||||
// )
|
||||
// | OSX => (
|
||||
// v => ["Optolith_" ++ v ++ ".dmg", "Optolith_" ++ v ++ ".zip"]
|
||||
// )
|
||||
// }
|
||||
// };
|
||||
// ();
|
||||
// // const allFiles = await fs.promises.readdir (path.join (...distPath))
|
||||
// // const allInstallerNames = allFiles .filter (fileName => regex .test (fileName))
|
||||
// // const allInstallerVersionsSorted =
|
||||
// // allInstallerNames .map (fileName => regex .exec (fileName) [1])
|
||||
// // .sort (semver .rcompare)
|
||||
// // if (allInstallerVersionsSorted .length < 1) {
|
||||
// // throw new RangeError ("Array of sorted installer versions is empty")
|
||||
// // }
|
||||
// // const latestFileNames = recreateFileNames (allInstallerVersionsSorted [0])
|
||||
// // console.log(`Files to upload: ${[updateYmlName, ...latestFileNames] .join (", ")}`);
|
||||
// // // Actual server connection
|
||||
// // const client = new Client ()
|
||||
// // console.log("Connecting to server...");
|
||||
// // await client.connect ({
|
||||
// // host: process.env.HOST,
|
||||
// // port: 22,
|
||||
// // username: process.env.USERNAME,
|
||||
// // password: process.env.PASSWORD
|
||||
// // })
|
||||
// // console.log(`Server connection established`);
|
||||
// // for (const fileName of latestFileNames) {
|
||||
// // console.log(`Uploading ${fileName}`);
|
||||
// // const stream = fs.readFileSync (path.join (...distPath, fileName))
|
||||
// // const fileRes = await client.put (stream, `${serverPath}/${fileName}`)
|
||||
// // console.log(`Upload done: ${fileName} (${fileRes})`);
|
||||
// // }
|
||||
// // console.log(`Uploading ${updateYmlName}`);
|
||||
// // const updateYml = fs.readFileSync (path.join (...distPath, updateYmlName))
|
||||
// // const ymlRes = await client.put (updateYml, `${serverPath}/${updateYmlName}`)
|
||||
// // console.log(`Upload done: ${updateYmlName} (${ymlRes})`);
|
||||
// // await client.end ()
|
||||
// // console.log("Closed server connection.");
|
||||
// };
|
||||
// };
|
||||
|
||||
// module Stable = {
|
||||
// let config: ElectronBuilder.Config.t = {
|
||||
// appId: Some("com.lukasobermann.optolith"),
|
||||
// productName: Some("Optolith"),
|
||||
// copyright:
|
||||
// Some(
|
||||
// "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
|
||||
// ),
|
||||
// directories:
|
||||
// Some({buildResources: None, output: Some("dist"), app: None}),
|
||||
// files: Some([|"app/**/*"|]),
|
||||
// mac:
|
||||
// Some({
|
||||
// artifactName: Some("Optolith_${version}.${ext}"),
|
||||
// category: Some("public.app-category.role-playing-games"),
|
||||
// target: Some("default"),
|
||||
// icon: Some("app/icon.icns"),
|
||||
// type_: Some("distribution"),
|
||||
// hardenedRuntime: Some(true),
|
||||
// gatekeeperAssess: Some(false),
|
||||
// }),
|
||||
// dmg: Some({sign: Some(false)}),
|
||||
// win:
|
||||
// Some({
|
||||
// artifactName: Some("OptolithSetup_${version}.${ext}"),
|
||||
// target: Some([|{target: "nsis", arch: Some([|"x64", "ia32"|])}|]),
|
||||
// icon: Some("app/icon.ico"),
|
||||
// }),
|
||||
// nsis:
|
||||
// Some({perMachine: Some(true), deleteAppDataOnUninstall: Some(false)}),
|
||||
// linux:
|
||||
// Some({
|
||||
// artifactName: Some("Optolith_${version}.${ext}"),
|
||||
// category: Some("RolePlaying"),
|
||||
// target:
|
||||
// Some([|
|
||||
// {target: "AppImage", arch: Some([|"x64"|])},
|
||||
// {target: "tar.gz", arch: Some([|"x64"|])},
|
||||
// |]),
|
||||
// executableName: Some("Optolith"),
|
||||
// icon: Some("app"),
|
||||
// }),
|
||||
// publish:
|
||||
// Some({
|
||||
// provider: "generic",
|
||||
// url:
|
||||
// Belt.Option.getWithDefault(
|
||||
// Js.Dict.get(Node.Process.process##env, "PUBLISH_URL"),
|
||||
// "",
|
||||
// ),
|
||||
// channel: Some("latest"),
|
||||
// useMultipleRangeRequest: None,
|
||||
// }),
|
||||
// };
|
||||
|
||||
// let buildWindows = (): Js.Promise.t(unit) => {
|
||||
// Js.log("Building Optolith for Windows...");
|
||||
|
||||
// ElectronBuilder.build({
|
||||
// config,
|
||||
// targets: ElectronBuilder.Platform.WINDOWS.createTarget(),
|
||||
// })
|
||||
// |> Js.Promise.then_(x => {
|
||||
// Js.log("Optolith Build for Windows successful.");
|
||||
// x |> ignore |> Js.Promise.resolve;
|
||||
// })
|
||||
// |> Js.Promise.then_(_ =>
|
||||
// Js.Promise.resolve(Publisher.publishToServer(Stable, Windows))
|
||||
// )
|
||||
// |> Js.Promise.then_(_ => {
|
||||
// Js.log("Optolith Build for Windows deployed.");
|
||||
|
||||
// Js.Promise.resolve();
|
||||
// });
|
||||
// };
|
||||
|
||||
// let buildLinux = (): Js.Promise.t(unit) => {
|
||||
// Js.log("Building Optolith for Linux...");
|
||||
|
||||
// ElectronBuilder.build({
|
||||
// config,
|
||||
// targets: ElectronBuilder.Platform.LINUX.createTarget(),
|
||||
// })
|
||||
// |> Js.Promise.then_(x => {
|
||||
// Js.log("Optolith Build for Linux successful.");
|
||||
// x |> ignore |> Js.Promise.resolve;
|
||||
// })
|
||||
// |> Js.Promise.then_(_ =>
|
||||
// Js.Promise.resolve(Publisher.publishToServer(Stable, Linux))
|
||||
// )
|
||||
// |> Js.Promise.then_(_ => {
|
||||
// Js.log("Optolith Build for Linux deployed.");
|
||||
|
||||
// Js.Promise.resolve();
|
||||
// });
|
||||
// };
|
||||
|
||||
// let buildMac = (): Js.Promise.t(unit) => {
|
||||
// Js.log("Building Optolith for OSX...");
|
||||
|
||||
// ElectronBuilder.build({
|
||||
// config,
|
||||
// targets: ElectronBuilder.Platform.MAC.createTarget(),
|
||||
// })
|
||||
// |> Js.Promise.then_(x => {
|
||||
// Js.log("Optolith Build for OSX successful.");
|
||||
// x |> ignore |> Js.Promise.resolve;
|
||||
// })
|
||||
// |> Js.Promise.then_(_ =>
|
||||
// Js.Promise.resolve(Publisher.publishToServer(Stable, OSX))
|
||||
// )
|
||||
// |> Js.Promise.then_(_ => {
|
||||
// Js.log("Optolith Build for OSX deployed.");
|
||||
|
||||
// Js.Promise.resolve();
|
||||
// });
|
||||
// };
|
||||
// };
|
||||
@@ -0,0 +1,52 @@
|
||||
// @ts-check
|
||||
/**
|
||||
* @param {"prerelease" | "stable"} channel
|
||||
*/
|
||||
const channelSuffix = channel => {
|
||||
switch (channel) {
|
||||
case "prerelease": return "Insider"
|
||||
case "stable": return ""
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("./platform.mjs").System} os
|
||||
* @param {"prerelease" | "stable"} channel
|
||||
*/
|
||||
const prefix = (os, channel) => {
|
||||
switch (os) {
|
||||
case "win": return `Optolith${channelSuffix(channel)}Setup`
|
||||
case "linux":
|
||||
case "mac": return `Optolith${channelSuffix(channel)}`
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("./platform.mjs").System} os
|
||||
*/
|
||||
const extensions = os => {
|
||||
switch (os) {
|
||||
case "win": return [".exe", ".exe.blockmap"]
|
||||
case "linux": return [".AppImage", ".tar.gz"]
|
||||
case "mac": return [".dmg", ".dmg.blockmap", ".zip", ".zip.blockmap"]
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("./platform.mjs").System} os
|
||||
* @param {"prerelease" | "stable"} channel
|
||||
* @param {string} version
|
||||
*/
|
||||
export const getApplicationFileNames = (os, channel, version) =>
|
||||
extensions(os).map(ext => `${prefix(os, channel)}_${version}${ext}`)
|
||||
|
||||
/**
|
||||
* @param {"win" | "mac" | "linux"} os
|
||||
*/
|
||||
export const getUpdateFileName = os => {
|
||||
switch (os) {
|
||||
case "win": return "latest.yml"
|
||||
case "linux": return "latest-linux.yml"
|
||||
default: return "latest-mac.yml"
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
/**
|
||||
* @type {import ("electron-builder") .Configuration}
|
||||
*/
|
||||
module.exports = {
|
||||
appId: "com.lukasobermann.optolith",
|
||||
productName: "Optolith",
|
||||
copyright: "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
|
||||
directories: {
|
||||
output: "dist"
|
||||
},
|
||||
files: [
|
||||
"app/**/*",
|
||||
"LICENSE"
|
||||
],
|
||||
win: {
|
||||
target: [
|
||||
{
|
||||
target: "nsis",
|
||||
arch: [
|
||||
"x64",
|
||||
"ia32"
|
||||
]
|
||||
}
|
||||
],
|
||||
icon: "app/icon.ico",
|
||||
artifactName: "OptolithSetup_${version}.${ext}"
|
||||
},
|
||||
nsis: {
|
||||
perMachine: true,
|
||||
differentialPackage: true,
|
||||
deleteAppDataOnUninstall: false,
|
||||
},
|
||||
linux: {
|
||||
category: "RolePlaying",
|
||||
executableName: "Optolith",
|
||||
icon: "app",
|
||||
target: [
|
||||
{
|
||||
target: "AppImage",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
},
|
||||
{
|
||||
target: "tar.gz",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
],
|
||||
artifactName: "Optolith_${version}.${ext}"
|
||||
},
|
||||
mac: {
|
||||
category: "public.app-category.role-playing-games",
|
||||
type: "distribution",
|
||||
icon: "app/icon.icns",
|
||||
target: "default",
|
||||
artifactName: "Optolith_${version}.${ext}",
|
||||
hardenedRuntime: true,
|
||||
// entitlements: "deploy/entitlements.mac.plist",
|
||||
// entitlementsInherit: "deploy/entitlements.mac.plist",
|
||||
gatekeeperAssess: false,
|
||||
},
|
||||
dmg: {
|
||||
sign: false,
|
||||
},
|
||||
publish: {
|
||||
"provider": "generic",
|
||||
"url": `${process.env.UPDATE_URL}/\${os}`,
|
||||
"channel": "latest"
|
||||
},
|
||||
// afterSign: notarize,
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
// @ts-check
|
||||
import { notarize } from "./notarize.mjs"
|
||||
|
||||
/**
|
||||
* @type {import("electron-builder").Configuration}
|
||||
*/
|
||||
const config = {
|
||||
appId: "com.lukasobermann.optolith",
|
||||
productName: "Optolith",
|
||||
copyright: "© 2017–present Lukas Obermann. This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
|
||||
directories: {
|
||||
output: "dist"
|
||||
},
|
||||
files: [
|
||||
"app/**/*",
|
||||
"LICENSE"
|
||||
],
|
||||
win: {
|
||||
target: [
|
||||
{
|
||||
target: "nsis",
|
||||
arch: [
|
||||
"x64",
|
||||
"ia32"
|
||||
]
|
||||
}
|
||||
],
|
||||
icon: "app/icon.ico",
|
||||
artifactName: "OptolithSetup_${version}.${ext}"
|
||||
},
|
||||
nsis: {
|
||||
perMachine: true,
|
||||
differentialPackage: true,
|
||||
deleteAppDataOnUninstall: false,
|
||||
},
|
||||
linux: {
|
||||
category: "RolePlaying",
|
||||
executableName: "Optolith",
|
||||
icon: "app",
|
||||
target: [
|
||||
{
|
||||
target: "AppImage",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
},
|
||||
{
|
||||
target: "tar.gz",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
],
|
||||
artifactName: "Optolith_${version}.${ext}"
|
||||
},
|
||||
mac: {
|
||||
category: "public.app-category.role-playing-games",
|
||||
type: "distribution",
|
||||
icon: "app/icon.icns",
|
||||
target: [
|
||||
{
|
||||
target: "default",
|
||||
arch: "universal"
|
||||
}
|
||||
],
|
||||
artifactName: "Optolith_${version}.${ext}",
|
||||
entitlements: "deploy/entitlements.mac.plist",
|
||||
entitlementsInherit: "deploy/entitlements.mac.plist",
|
||||
hardenedRuntime: true,
|
||||
gatekeeperAssess: false,
|
||||
},
|
||||
dmg: {
|
||||
sign: false
|
||||
},
|
||||
publish: {
|
||||
"provider": "generic",
|
||||
"url": `${process.env.UPDATE_URL}/\${os}`,
|
||||
"channel": "latest"
|
||||
},
|
||||
afterSign: notarize,
|
||||
}
|
||||
|
||||
export default config
|
||||
@@ -1,6 +1,6 @@
|
||||
// @ts-check
|
||||
const builder = require("electron-builder")
|
||||
const { getSystem } = require("./platform")
|
||||
import builder from "electron-builder"
|
||||
import { getSystem } from "./platform.mjs"
|
||||
|
||||
const [channel] = process.argv.slice(2)
|
||||
|
||||
@@ -10,15 +10,18 @@ if (channel !== "stable" && channel !== "prerelease") {
|
||||
|
||||
const config =
|
||||
channel === "prerelease"
|
||||
? require("./build.prerelease.config.js")
|
||||
: require("./build.config.js")
|
||||
? (await import("./build.prerelease.config.mjs")).default
|
||||
: (await import("./build.config.mjs")).default
|
||||
|
||||
process.on ('unhandledRejection', error => {
|
||||
throw new Error (`Unhandled promise rejection: ${error .toString ()}`);
|
||||
});
|
||||
throw new Error(`Unhandled promise rejection: ${/** @type {Error} */ (error).toString ()}`)
|
||||
})
|
||||
|
||||
const os = getSystem()
|
||||
|
||||
const plaformKey = os === "linux" ? "LINUX" : os === "mac" ? "MAC" : "WINDOWS"
|
||||
|
||||
builder.build ({ config, targets: builder.Platform[plaformKey].createTarget () })
|
||||
await builder.build({
|
||||
config,
|
||||
targets: builder.Platform[plaformKey].createTarget(),
|
||||
})
|
||||
@@ -1,10 +1,13 @@
|
||||
// @ts-check
|
||||
import { notarize } from "./notarize.mjs"
|
||||
|
||||
/**
|
||||
* @type {import ("electron-builder") .Configuration}
|
||||
*/
|
||||
module.exports = {
|
||||
const config = {
|
||||
appId: "com.lukasobermann.optolithinsider",
|
||||
productName: "Optolith Insider",
|
||||
copyright: "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
|
||||
copyright: "© 2017–present Lukas Obermann. This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
|
||||
directories: {
|
||||
output: "dist/insider"
|
||||
},
|
||||
@@ -55,20 +58,27 @@ module.exports = {
|
||||
category: "public.app-category.role-playing-games",
|
||||
type: "distribution",
|
||||
icon: "app/icon.icns",
|
||||
target: "default",
|
||||
target: [
|
||||
{
|
||||
target: "default",
|
||||
arch: "universal"
|
||||
}
|
||||
],
|
||||
artifactName: "OptolithInsider_${version}.${ext}",
|
||||
entitlements: "deploy/entitlements.mac.plist",
|
||||
entitlementsInherit: "deploy/entitlements.mac.plist",
|
||||
hardenedRuntime: true,
|
||||
// entitlements: "deploy/entitlements.mac.plist",
|
||||
// entitlementsInherit: "deploy/entitlements.mac.plist",
|
||||
gatekeeperAssess: false,
|
||||
},
|
||||
dmg: {
|
||||
sign: false,
|
||||
sign: false
|
||||
},
|
||||
publish: {
|
||||
"provider": "generic",
|
||||
"url": `${process.env.UPDATE_URL}/insider/\${os}`,
|
||||
"channel": "latest"
|
||||
},
|
||||
// afterSign: notarize,
|
||||
afterSign: notarize,
|
||||
}
|
||||
|
||||
export default config
|
||||
@@ -1,150 +0,0 @@
|
||||
// @ts-check
|
||||
require("dotenv").config()
|
||||
const { Client } = require ("qusly-core")
|
||||
const readline = require ("readline")
|
||||
const fs = require ("fs")
|
||||
const path = require ("path")
|
||||
const semver = require ("semver");
|
||||
const { getSystem, getSystemName } = require("./platform");
|
||||
|
||||
const [channel] = process.argv.slice(2)
|
||||
const os = getSystem()
|
||||
|
||||
if (channel !== "stable" && channel !== "prerelease") {
|
||||
throw new TypeError (`publishToServer requires a specified channel ("stable" or "prerelease"), but it received ${channel}`)
|
||||
}
|
||||
|
||||
if (os !== "win" && os !== "mac" && os !== "linux") {
|
||||
throw new TypeError (`publishToServer requires a specified OS ("win", "mac" or "linux"), but it received ${os}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* Needed env variables:
|
||||
* - `HOST`
|
||||
* - `USERNAME`
|
||||
* - `PASSWORD`
|
||||
* - `ROOT`
|
||||
*/
|
||||
const uploadToServer = async () => {
|
||||
console.log (`Preparing to upload update files for "${getSystemName(os)}" on "${channel}" channel...`)
|
||||
|
||||
const subFolder = os === "win" ? "win" : os === "linux" ? "linux" : "mac"
|
||||
|
||||
const updateYmlName =
|
||||
os === "win"
|
||||
? "latest.yml"
|
||||
: os === "linux"
|
||||
? "latest-linux.yml"
|
||||
: "latest-mac.yml"
|
||||
|
||||
const distPath = channel === "prerelease" ? ["dist", "insider"] : ["dist"]
|
||||
|
||||
const serverPath = `${process.env.ROOT}${channel === "prerelease" ? "/insider" : ""}/${subFolder}`
|
||||
|
||||
const regex =
|
||||
channel === "prerelease"
|
||||
? os === "win"
|
||||
? /^OptolithInsiderSetup_(.+)\.exe$/
|
||||
: os === "linux"
|
||||
? /^OptolithInsider_(.+)\.(?:AppImage|tar\.gz)$/
|
||||
: /^OptolithInsider_(.+)\.(?:zip|dmg)$/
|
||||
: os === "win"
|
||||
? /^OptolithSetup_(.+)\.exe$/
|
||||
: os === "linux"
|
||||
? /^Optolith_(.+)\.(?:AppImage|tar\.gz)$/
|
||||
: /^Optolith_(.+)\.(?:zip|dmg)$/
|
||||
|
||||
const recreateFileNames =
|
||||
channel === "prerelease"
|
||||
? os === "win"
|
||||
? /**
|
||||
* @param {string} v Version
|
||||
*/ v => [`OptolithInsiderSetup_${v}.exe`, `OptolithInsiderSetup_${v}.exe.blockmap`]
|
||||
: os === "linux"
|
||||
? /**
|
||||
* @param {string} v Version
|
||||
*/ v => [`OptolithInsider_${v}.AppImage`, `OptolithInsider_${v}.tar.gz`]
|
||||
: /**
|
||||
* @param {string} v Version
|
||||
*/ v => [`OptolithInsider_${v}.dmg`, `OptolithInsider_${v}.dmg.blockmap`, `OptolithInsider_${v}.zip`]
|
||||
: os === "win"
|
||||
? /**
|
||||
* @param {string} v Version
|
||||
*/ v => [`OptolithSetup_${v}.exe`, `OptolithSetup_${v}.exe.blockmap`]
|
||||
: os === "linux"
|
||||
? /**
|
||||
* @param {string} v Version
|
||||
*/ v => [`Optolith_${v}.AppImage`, `Optolith_${v}.tar.gz`]
|
||||
: /**
|
||||
* @param {string} v Version
|
||||
*/ v => [`Optolith_${v}.dmg`, `Optolith_${v}.dmg.blockmap`, `Optolith_${v}.zip`]
|
||||
|
||||
const allFiles = await fs.promises.readdir (path.join (...distPath))
|
||||
|
||||
const allInstallerNames = allFiles .filter (fileName => regex .test (fileName))
|
||||
|
||||
const allInstallerVersionsSorted =
|
||||
allInstallerNames .map (fileName => regex .exec (fileName) [1])
|
||||
.sort (semver .rcompare)
|
||||
|
||||
if (allInstallerVersionsSorted .length < 1) {
|
||||
throw new RangeError ("Array of sorted installer versions is empty")
|
||||
}
|
||||
|
||||
const latestFileNames = recreateFileNames (allInstallerVersionsSorted [0])
|
||||
|
||||
console.log(`Files to upload: ${[updateYmlName, ...latestFileNames] .join (", ")}.`);
|
||||
|
||||
// Actual server connection
|
||||
|
||||
const client = new Client ()
|
||||
|
||||
console.log("Connecting to server...");
|
||||
|
||||
await client.connect ({
|
||||
protocol: "sftp",
|
||||
host: process.env.HOST,
|
||||
user: process.env.USERNAME,
|
||||
password: process.env.PASSWORD,
|
||||
})
|
||||
|
||||
let loggedProgress = false
|
||||
|
||||
client.addListener("progress", (progress, info) => {
|
||||
if (loggedProgress) {
|
||||
readline.clearLine(process.stdout, 1);
|
||||
readline.cursorTo(process.stdout, 0);
|
||||
}
|
||||
else {
|
||||
loggedProgress = true
|
||||
}
|
||||
|
||||
process.stdout.write(`Progress: ${progress.percent}%`);
|
||||
})
|
||||
|
||||
console.log(`Server connection established.`);
|
||||
|
||||
for (const fileName of latestFileNames) {
|
||||
console.log(`Uploading ${fileName}`);
|
||||
|
||||
loggedProgress = false
|
||||
const stream = fs.createReadStream (path.join (...distPath, fileName))
|
||||
await client.upload (`${serverPath}/${fileName}`, stream)
|
||||
|
||||
console.log(`\nUpload done: ${fileName}.`);
|
||||
}
|
||||
|
||||
console.log(`Uploading ${updateYmlName}...`);
|
||||
|
||||
loggedProgress = false
|
||||
const updateYml = fs.createReadStream (path.join (...distPath, updateYmlName))
|
||||
await client.upload (`${serverPath}/${updateYmlName}`, updateYml)
|
||||
|
||||
console.log(`\nUpload done: ${updateYmlName}.`);
|
||||
|
||||
await client.disconnect ()
|
||||
|
||||
console.log("Closed server connection.");
|
||||
}
|
||||
|
||||
uploadToServer()
|
||||
@@ -0,0 +1,52 @@
|
||||
// @ts-check
|
||||
import packageJson from "../package.json" assert { type: "json" }
|
||||
import { getApplicationFileNames, getUpdateFileName } from "./assetNames.mjs"
|
||||
import { getLocalPath } from "./localPath.mjs"
|
||||
import { getSystem, getSystemName } from "./platform.mjs"
|
||||
import { run, upload } from "./remoteConnection.mjs"
|
||||
import { getRemotePath } from "./remotePath.mjs"
|
||||
|
||||
/**
|
||||
* Needed env variables:
|
||||
* - `HOST`
|
||||
* - `USERNAME`
|
||||
* - `PASSWORD`
|
||||
* - `ROOT`
|
||||
*
|
||||
* Optional env variables:
|
||||
* - `CI`
|
||||
*/
|
||||
const {
|
||||
HOST,
|
||||
USERNAME,
|
||||
PASSWORD,
|
||||
ROOT = "/",
|
||||
CI,
|
||||
} = process.env
|
||||
|
||||
const [channel] = process.argv.slice(2)
|
||||
const os = getSystem()
|
||||
|
||||
if (channel !== "stable" && channel !== "prerelease") {
|
||||
throw new TypeError(`publishToServer requires a specified channel ("stable" or "prerelease"), but it received ${channel}`)
|
||||
}
|
||||
|
||||
console.log(`Preparing to upload update files for "${getSystemName(os)}" on "${channel}" channel...`)
|
||||
|
||||
const localDir = getLocalPath(channel)
|
||||
const remoteDir = getRemotePath(ROOT, channel, os)
|
||||
|
||||
const updateFileName = getUpdateFileName(os)
|
||||
const applicationFileNames = getApplicationFileNames(os, channel, packageJson.version)
|
||||
|
||||
console.log(`Files to upload: ${[updateFileName, ...applicationFileNames] .join (", ")}.`)
|
||||
|
||||
await run({ host: HOST, username: USERNAME, password: PASSWORD }, async client => {
|
||||
for (const applicationFileName of applicationFileNames) {
|
||||
await upload(client, localDir, remoteDir, applicationFileName)
|
||||
}
|
||||
|
||||
await upload(client, localDir, remoteDir, updateFileName)
|
||||
})
|
||||
|
||||
console.log(`Uploading files finished successfully.`)
|
||||
@@ -2,7 +2,9 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.debugger</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// @ts-check
|
||||
import { join } from "path"
|
||||
|
||||
/**
|
||||
* @param {"prerelease" | "stable"} channel
|
||||
*/
|
||||
export const getLocalPath = channel => {
|
||||
switch (channel) {
|
||||
case "prerelease": return join("dist", "insider")
|
||||
case "stable": return join("dist")
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
// @ts-check
|
||||
|
||||
const { notarize } = require ('electron-notarize')
|
||||
|
||||
/**
|
||||
* @param context {import("electron-builder").AfterPackContext}
|
||||
*/
|
||||
exports.notarize = async context => {
|
||||
const { electronPlatformName, appOutDir } = context
|
||||
|
||||
if (electronPlatformName === 'darwin') {
|
||||
const appName = context.packager.appInfo.productFilename
|
||||
|
||||
console.log (`Notarizing "${appName}.app"...`)
|
||||
|
||||
await notarize ({
|
||||
appBundleId: 'com.lukasobermann.optolith',
|
||||
appPath: `${appOutDir}/${appName}.app`,
|
||||
appleId: process.env.APPLEID,
|
||||
appleIdPassword: process.env.APPLEIDPASS,
|
||||
})
|
||||
|
||||
console.log (`Notarization successful`)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// @ts-check
|
||||
import { notarize as electronNotarize } from 'electron-notarize'
|
||||
|
||||
/**
|
||||
* @param context {import("electron-builder").AfterPackContext}
|
||||
*/
|
||||
export const notarize = async (context) => {
|
||||
const { electronPlatformName, appOutDir } = context
|
||||
|
||||
if (electronPlatformName === 'darwin') {
|
||||
const appName = context.packager.appInfo.productFilename
|
||||
|
||||
console.log(`Notarizing "${appName}.app"...`)
|
||||
|
||||
await electronNotarize({
|
||||
tool: "notarytool",
|
||||
appPath: `${appOutDir}/${appName}.app`,
|
||||
appleId: /** @type {string} */ (process.env.APPLEID),
|
||||
appleIdPassword: /** @type {string} */ (process.env.APPLEIDPASS),
|
||||
teamId: /** @type {string} */ (process.env.TEAMID),
|
||||
})
|
||||
|
||||
console.log(`Notarization successful`)
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
// @ts-check
|
||||
const os = require ("os")
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
* @typedef {"win" | "mac" | "linux"} System
|
||||
* @returns {System}
|
||||
*/
|
||||
getSystem: () => {
|
||||
switch (os.platform()) {
|
||||
case "win32":
|
||||
return "win"
|
||||
case "darwin":
|
||||
return "mac"
|
||||
default:
|
||||
return "linux"
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @param {System} system
|
||||
*/
|
||||
getSystemName: system => {
|
||||
switch (system) {
|
||||
case "win":
|
||||
return "Windows"
|
||||
case "mac":
|
||||
return "macOS"
|
||||
case "linux":
|
||||
return "Linux"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// @ts-check
|
||||
import { platform } from "os"
|
||||
|
||||
/**
|
||||
* @typedef {"win" | "mac" | "linux"} System
|
||||
* @returns {System}
|
||||
*/
|
||||
export const getSystem = () => {
|
||||
switch (platform()) {
|
||||
case "win32": return "win"
|
||||
case "darwin": return "mac"
|
||||
default: return "linux"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {System} system
|
||||
*/
|
||||
export const getSystemName = system => {
|
||||
switch (system) {
|
||||
case "win": return "Windows"
|
||||
case "mac": return "macOS"
|
||||
case "linux": return "Linux"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// @ts-check
|
||||
import { join } from "path"
|
||||
import { join as joinPosix } from "path/posix"
|
||||
import Client from "ssh2-sftp-client"
|
||||
|
||||
/**
|
||||
* @param {Client.ConnectOptions} options
|
||||
* @param {(client: Client) => Promise<void>} action
|
||||
*/
|
||||
export const run = async (options, action) => {
|
||||
const client = new Client()
|
||||
console.log("Connecting to server ...")
|
||||
await client.connect(options)
|
||||
console.log(`Server connection established.`)
|
||||
await action(client)
|
||||
await client.end ()
|
||||
console.log("Closed server connection.")
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Client} client
|
||||
* @param {string} localDir
|
||||
* @param {string} remoteDir
|
||||
* @param {string} fileName
|
||||
*/
|
||||
export const upload = async (client, localDir, remoteDir, fileName) => {
|
||||
console.log(`Uploading ${fileName} ...`);
|
||||
|
||||
await client.fastPut (
|
||||
join (localDir, fileName),
|
||||
joinPosix (remoteDir, fileName),
|
||||
{
|
||||
step: !process.env.CI ? (totalTransferred, _, total) => {
|
||||
const percent = Math.floor (totalTransferred / total * 100)
|
||||
console.log(`Progress: ${percent}%`);
|
||||
} : undefined
|
||||
}
|
||||
)
|
||||
|
||||
console.log(`Upload done: ${fileName}.`);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// @ts-check
|
||||
import { join } from "path/posix"
|
||||
|
||||
/**
|
||||
* @param {"prerelease" | "stable"} channel
|
||||
*/
|
||||
const remoteChannelPath = channel => {
|
||||
switch (channel) {
|
||||
case "prerelease": return "insider"
|
||||
case "stable": return "."
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("./platform.mjs").System} os
|
||||
*/
|
||||
const remoteOsPath = os => {
|
||||
switch (os) {
|
||||
case "win": return "win"
|
||||
case "linux": return "linux"
|
||||
default: return "mac"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} root
|
||||
* @param {"prerelease" | "stable"} channel
|
||||
* @param {import("./platform.mjs").System} os
|
||||
*/
|
||||
export const getRemotePath = (root, channel, os) =>
|
||||
join(root, remoteChannelPath(channel), remoteOsPath(os))
|
||||
+3
-17
@@ -1,25 +1,11 @@
|
||||
// @ts-check
|
||||
/**
|
||||
* @typedef {import('ts-jest')}
|
||||
* @type {import('@jest/types').Config.InitialOptions}
|
||||
*/
|
||||
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
|
||||
module.exports = {
|
||||
transform: {
|
||||
"^.+\\.tsx?$": "ts-jest"
|
||||
},
|
||||
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
|
||||
moduleFileExtensions: [
|
||||
"ts",
|
||||
"tsx",
|
||||
"js",
|
||||
"jsx",
|
||||
"json",
|
||||
"node"
|
||||
],
|
||||
preset: "ts-jest",
|
||||
testEnvironment: "node",
|
||||
globals: {
|
||||
"ts-jest": {
|
||||
tsConfig: "tsconfig.test.json"
|
||||
tsconfig: "tsconfig.test.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+21100
-5004
File diff suppressed because it is too large
Load Diff
+36
-40
@@ -1,48 +1,46 @@
|
||||
{
|
||||
"name": "optolith",
|
||||
"productName": "Optolith",
|
||||
"version": "1.4.3-alpha.0",
|
||||
"version": "1.5.2",
|
||||
"description": "A generator for heroes for the P&P-RPG 'The Dark Eye'.",
|
||||
"author": {
|
||||
"name": "Lukas Obermann",
|
||||
"email": "support@optolith.app"
|
||||
},
|
||||
"homepage": "https://github.com/elyukai/optolith-client",
|
||||
"homepage": "https://optolith.app",
|
||||
"license": "MPL-2.0",
|
||||
"main": "app/main.js",
|
||||
"dependencies": {
|
||||
"@glennsl/bs-json": "5.0.2",
|
||||
"@electron/remote": "^2.0.8",
|
||||
"adm-zip": "^0.5.1",
|
||||
"ajv": "6.12.6",
|
||||
"bs-platform": "8.3.2",
|
||||
"electron-devtools-installer": "3.1.1",
|
||||
"electron-log": "4.2.4",
|
||||
"electron-updater": "4.3.1",
|
||||
"electron-devtools-installer": "^3.2.1",
|
||||
"electron-log": "^4.4.8",
|
||||
"electron-updater": "^5.0.5",
|
||||
"electron-window-state": "5.0.3",
|
||||
"moment": "2.25.3",
|
||||
"moment": "^2.29.4",
|
||||
"mousetrap": "1.6.5",
|
||||
"react": "16.13.1",
|
||||
"react-custom-scrollbars": "4.2.1",
|
||||
"react-dom": "16.13.1",
|
||||
"react-markdown": "4.3.1",
|
||||
"react-markdown": "^8.0.0",
|
||||
"react-portal": "4.2.1",
|
||||
"react-redux": "7.2.1",
|
||||
"react-textfit": "1.1.0",
|
||||
"reason-react": "0.9.1",
|
||||
"reductive": "2.0.1",
|
||||
"redux": "4.0.5",
|
||||
"redux-devtools-extension": "2.13.8",
|
||||
"redux-thunk": "2.3.0",
|
||||
"remark-breaks": "1.0.5",
|
||||
"rehype-raw": "^5.1.0",
|
||||
"remark-breaks": "^2.0.2",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"reselect": "4.0.0",
|
||||
"semver": "7.3.2",
|
||||
"ssh2-sftp-client": "5.3.1",
|
||||
"tslib": "1.11.2",
|
||||
"tslib": "^2.3.1",
|
||||
"yaml": "1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "11.0.0",
|
||||
"@commitlint/config-conventional": "11.0.0",
|
||||
"@glennsl/bs-jest": "0.6.0",
|
||||
"@types/classnames": "2.2.11",
|
||||
"@types/jest": "26.0.15",
|
||||
"@types/mousetrap": "1.6.4",
|
||||
@@ -53,29 +51,30 @@
|
||||
"@types/react-portal": "4.0.2",
|
||||
"@types/react-redux": "7.1.11",
|
||||
"@types/semver": "7.3.4",
|
||||
"@typescript-eslint/eslint-plugin": "4.7.0",
|
||||
"@typescript-eslint/parser": "4.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.0",
|
||||
"@typescript-eslint/parser": "^5.10.0",
|
||||
"custom-env": "2.0.1",
|
||||
"dotenv": "8.2.0",
|
||||
"electron": "10.1.5",
|
||||
"electron-builder": "22.9.1",
|
||||
"electron-notarize": "0.3.0",
|
||||
"eslint": "7.13.0",
|
||||
"eslint-plugin-react": "7.21.5",
|
||||
"eslint-plugin-react-hooks": "4.2.0",
|
||||
"electron": "^19.0.8",
|
||||
"electron-builder": "^23.1.0",
|
||||
"electron-notarize": "^1.2.1",
|
||||
"eslint": "^8.7.0",
|
||||
"eslint-plugin-react": "^7.28.0",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"eslint-plugin-tsdoc": "^0.2.14",
|
||||
"fs-extra": "9.0.1",
|
||||
"gentype": "3.38.0",
|
||||
"html-webpack-plugin": "4.5.0",
|
||||
"husky": "4.3.0",
|
||||
"jest": "26.4.2",
|
||||
"qusly-core": "2.5.2",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"husky": "^4.3.8",
|
||||
"jest": "^26.6.3",
|
||||
"sass": "1.29.0",
|
||||
"standard-version": "9.0.0",
|
||||
"ts-jest": "26.4.4",
|
||||
"ts-loader": "8.0.11",
|
||||
"typescript": "3.8.3",
|
||||
"webpack": "5.4.0",
|
||||
"webpack-cli": "4.2.0"
|
||||
"ssh2-sftp-client": "^9.0.1",
|
||||
"standard-version": "^9.3.1",
|
||||
"ts-jest": "^26.5.6",
|
||||
"ts-loader": "^9.2.6",
|
||||
"typescript": "^4.5.5",
|
||||
"webpack": "^5.67.0",
|
||||
"webpack-cli": "^4.9.2"
|
||||
},
|
||||
"scripts": {
|
||||
"prerelease:win": "set NODE_ENV=development && node ./deploy/buildInsiderWin.js",
|
||||
@@ -86,20 +85,17 @@
|
||||
"stable:mac": "NODE_ENV=production node ./deploy/buildMac.js",
|
||||
"css:build": "sass --style=compressed src/Main.scss app/main.css",
|
||||
"css:watch": "sass --watch --style=compressed src/Main.scss app/main.css",
|
||||
"build": "npm run re:build && npm run css:build && npm run js:build",
|
||||
"js:build": "webpack --config ./webpack.config.js",
|
||||
"js:watch": "webpack -w --config ./webpack.config.js",
|
||||
"build": "npm run ts:build && npm run css:build && npm run js:build",
|
||||
"js:build": "webpack",
|
||||
"js:watch": "webpack -w",
|
||||
"ts:build": "tsc",
|
||||
"ts:watch": "tsc -w",
|
||||
"re:build": "bsb -make-world",
|
||||
"re:watch": "bsb -make-world -w",
|
||||
"re:clean": "bsb -clean-world",
|
||||
"lint": "eslint \"src/\" --ext \".ts\" --ext \".tsx\"",
|
||||
"start": "electron .",
|
||||
"test": "jest",
|
||||
"circ": "madge -c ./src",
|
||||
"release:main": "standard-version --skip.commit --skip.tag",
|
||||
"release:pre": "standard-version --prerelease=alpha --skip.changelog"
|
||||
"release:pre": "standard-version --prerelease=alpha"
|
||||
},
|
||||
"repository": "github:elyukai/optolith-client",
|
||||
"husky": {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { remote } from "electron"
|
||||
import { Just, Nothing } from "../../Data/Maybe"
|
||||
import * as remote from "@electron/remote"
|
||||
import { Just } from "../../Data/Maybe"
|
||||
import { getCurrentHeroId } from "../Selectors/stateSelectors"
|
||||
import { getIsHeroSection } from "../Selectors/uilocationSelectors"
|
||||
import { TabId } from "../Utilities/LocationUtils"
|
||||
import { isDialogOpen } from "../Utilities/SubwindowsUtils"
|
||||
@@ -24,8 +25,10 @@ export const redoAccelerator = (): ReduxAction => (dispatch, getState) => {
|
||||
|
||||
export const saveHeroAccelerator: ReduxAction<Promise<void>> =
|
||||
async (dispatch, getState) => {
|
||||
if (!isDialogOpen () && getIsHeroSection (getState ())) {
|
||||
await dispatch (saveHero (Nothing))
|
||||
const heroId = getCurrentHeroId (getState ())
|
||||
|
||||
if (!isDialogOpen () && getIsHeroSection (getState ()) && heroId.isJust) {
|
||||
await dispatch (saveHero (heroId.value))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
|
||||
@@ -1,120 +0,0 @@
|
||||
type action =
|
||||
| SetLocale(Either.t(string, string))
|
||||
| SwitchActiveItemHints
|
||||
| SetTheme(FilterOptions.theme)
|
||||
| SwitchEditingHeroAfterCreationPhase
|
||||
| SwitchAnimations
|
||||
| SetTab(FilterOptions.tab)
|
||||
| SetHeroListSortOrder(FilterOptions.heroListSortOptions)
|
||||
| SetHeroListVisibilityFilter(FilterOptions.heroListVisibilityFilter)
|
||||
| SetHeroListFilterText(string)
|
||||
| CreateHero(Hero.t)
|
||||
| OpenHero(int)
|
||||
| SaveHero(int)
|
||||
| DeleteHero(int)
|
||||
| DuplicateHero(int)
|
||||
| UndoHeroAction
|
||||
| RedoHeroAction
|
||||
| SetHeroName(string)
|
||||
| SetCustomProfessionName(string)
|
||||
| SetFamily(string)
|
||||
| SetPlaceOfBirth(string)
|
||||
| SetDateOfBirth(string)
|
||||
| SetAge(string)
|
||||
| SetHairColor(int)
|
||||
| SetEyeColor(int)
|
||||
| SetSize(string)
|
||||
| SetWeight(string)
|
||||
| SetTitle(string)
|
||||
| SetSocialStatus(int)
|
||||
| SetCharacteristics(string)
|
||||
| SetOtherInfo(string)
|
||||
| SetCultureAreaKnowledge(string)
|
||||
| AddAdventurePoints(int)
|
||||
| EndHeroCreation
|
||||
| SetPactCategory(Maybe.t(int))
|
||||
| SetPactLevel(int)
|
||||
| SetPactTargetType(int)
|
||||
| SetTargetDomain(int)
|
||||
| SetCustomTargetDomain(string)
|
||||
| SetTargetName(string)
|
||||
| SetRace(int)
|
||||
| SetRaceVariant(int)
|
||||
| SetRacesSortOrder(FilterOptions.racesSortOptions)
|
||||
| SetRacesFilterText(string)
|
||||
| SetCulture(int)
|
||||
| SetCulturesSortOrder(FilterOptions.culturesSortOptions)
|
||||
| SetCulturesVisibilityFilter(FilterOptions.culturesVisibilityFilter)
|
||||
| SetCulturesFilterText(string)
|
||||
| SetProfession(int)
|
||||
| SetProfessionVariant(int)
|
||||
| SetProfessionsSortOrder(FilterOptions.professionsSortOptions)
|
||||
| SetProfessionsVisibilityFilter(FilterOptions.professionsVisibilityFilter)
|
||||
| SetProfessionsGroupVisibilityFilter(
|
||||
FilterOptions.professionsGroupVisibilityFilter,
|
||||
)
|
||||
| SetProfessionsFilterText(string)
|
||||
| AddAttributePoint(int)
|
||||
| RemoveAttributePoint(int)
|
||||
| AddLifePoint
|
||||
| RemoveLifePoint
|
||||
| AddArcaneEnergyPoint
|
||||
| RemoveArcaneEnergyPoint
|
||||
| AddKarmaPoint
|
||||
| RemoveKarmaPoint
|
||||
| AddLostLifePoint
|
||||
| RemoveLostLifePoint
|
||||
| AddLostLifePoints(int)
|
||||
| AddBoughtBackArcaneEnergyPoint
|
||||
| RemoveBoughtBackArcaneEnergyPoint
|
||||
| AddLostArcaneEnergyPoint
|
||||
| RemoveLostArcaneEnergyPoint
|
||||
| AddLostArcaneEnergyPoints(int)
|
||||
| AddBoughtBackKarmaPoint
|
||||
| RemoveBoughtBackKarmaPoint
|
||||
| AddLostKarmaPoint
|
||||
| RemoveLostKarmaPoint
|
||||
| AddLostKarmaPoints(int)
|
||||
| SetAttributeAdjustment(int)
|
||||
| AddCombatTechniquePoint(int)
|
||||
| RemoveCombatTechniquePoint(int)
|
||||
| SetCombatTechniquesSortOrder(FilterOptions.combatTechniquesSortOptions)
|
||||
| SetCombatTechniquesFilterText(string)
|
||||
| AddLiturgicalChant(int)
|
||||
| RemoveLiturgicalChant(int)
|
||||
| AddLiturgicalChantPoint(int)
|
||||
| RemoveLiturgicalChantPoint(int)
|
||||
| AddBlessing(int)
|
||||
| RemoveBlessing(int)
|
||||
| SetLiturgicalChantsSortOrder(FilterOptions.liturgicalChantsSortOptions)
|
||||
| SetActiveLiturgicalChantsFilterText(string)
|
||||
| SetInactiveLiturgicalChantsFilterText(string)
|
||||
| SetPetName(string)
|
||||
| SetPetSize(string)
|
||||
| SetPetType(string)
|
||||
| SetPetSpentAp(string)
|
||||
| SetPetTotalAp(string)
|
||||
| SetPetCourage(string)
|
||||
| SetPetSagacity(string)
|
||||
| SetPetIntuition(string)
|
||||
| SetPetCharisma(string)
|
||||
| SetPetDexterity(string)
|
||||
| SetPetAgility(string)
|
||||
| SetPetConstitution(string)
|
||||
| SetPetStrength(string)
|
||||
| SetPetLp(string)
|
||||
| SetPetAe(string)
|
||||
| SetPetSpi(string)
|
||||
| SetPetTou(string)
|
||||
| SetPetPro(string)
|
||||
| SetPetIni(string)
|
||||
| SetPetMov(string)
|
||||
| SetPetAttack(string)
|
||||
| SetPetAt(string)
|
||||
| SetPetPa(string)
|
||||
| SetPetDp(string)
|
||||
| SetPetReach(string)
|
||||
| SetPetActions(string)
|
||||
| SetPetSkills(string)
|
||||
| SetPetAbilities(string)
|
||||
| SetPetNotes(string);
|
||||
@@ -1,5 +1,4 @@
|
||||
import { clipboard } from "electron"
|
||||
import { fromLeft_, Left } from "../../Data/Either"
|
||||
import { fmapF } from "../../Data/Functor"
|
||||
import { List } from "../../Data/List"
|
||||
import { Just, Maybe, Nothing } from "../../Data/Maybe"
|
||||
@@ -180,13 +179,13 @@ export const addErrorAlert =
|
||||
export const getErrorMsg =
|
||||
(staticData: StaticDataRecord) =>
|
||||
(message: string) =>
|
||||
(error: Left<Error>): string =>
|
||||
`${message} (${translate (staticData) ("general.errorcode")}: ${JSON.stringify (fromLeft_ (error))})`
|
||||
(error: Error): string =>
|
||||
`${message} (${translate (staticData) ("general.errorcode")}: ${JSON.stringify (error)})`
|
||||
|
||||
export const addDefaultErrorAlert =
|
||||
(staticData: StaticDataRecord) =>
|
||||
(message: string) =>
|
||||
(error: Left<Error>) =>
|
||||
(error: Error) =>
|
||||
addErrorAlert (AlertOptions ({
|
||||
message: getErrorMsg (staticData) (message) (error),
|
||||
title: Just (translate (staticData) ("general.error")),
|
||||
@@ -196,7 +195,7 @@ export const addDefaultErrorAlertWithTitle =
|
||||
(staticData: StaticDataRecord) =>
|
||||
(title: string) =>
|
||||
(message: string) =>
|
||||
(error: Left<Error>) =>
|
||||
(error: Error) =>
|
||||
addErrorAlert (AlertOptions ({
|
||||
message: getErrorMsg (staticData) (message) (error),
|
||||
title: Just (title),
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
|
||||
@@ -1,23 +0,0 @@
|
||||
type action =
|
||||
| AddAttributePoint(int)
|
||||
| RemoveAttributePoint(int)
|
||||
| AddLifePoint
|
||||
| RemoveLifePoint
|
||||
| AddArcaneEnergyPoint
|
||||
| RemoveArcaneEnergyPoint
|
||||
| AddKarmaPoint
|
||||
| RemoveKarmaPoint
|
||||
| AddLostLifePoint
|
||||
| RemoveLostLifePoint
|
||||
| AddLostLifePoints(int)
|
||||
| AddBoughtBackArcaneEnergyPoint
|
||||
| RemoveBoughtBackArcaneEnergyPoint
|
||||
| AddLostArcaneEnergyPoint
|
||||
| RemoveLostArcaneEnergyPoint
|
||||
| AddLostArcaneEnergyPoints(int)
|
||||
| AddBoughtBackKarmaPoint
|
||||
| RemoveBoughtBackKarmaPoint
|
||||
| AddLostKarmaPoint
|
||||
| RemoveLostKarmaPoint
|
||||
| AddLostKarmaPoints(int)
|
||||
| SetAttributeAdjustment(int);
|
||||
@@ -8,7 +8,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
|
||||
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
|
||||
import { getAddedArcaneEnergyPoints, getAddedKarmaPoints, getAddedLifePoints, getCurrentHeroPresent, getWikiAttributes } from "../Selectors/stateSelectors"
|
||||
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
|
||||
import { getAPForInc } from "../Utilities/IC.gen"
|
||||
import { getAPForInc, ImprovementCost } from "../Utilities/ImprovementCost"
|
||||
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
|
||||
import { pipe, pipe_ } from "../Utilities/pipe"
|
||||
import { ReduxAction } from "./Actions"
|
||||
@@ -84,7 +84,7 @@ export const addLifePoint: ReduxAction<Promise<void>> =
|
||||
liftM2 (pipe (
|
||||
|
||||
// get AP for added points
|
||||
curryN (getAPForInc) ("D"),
|
||||
curryN (getAPForInc) (ImprovementCost.D),
|
||||
|
||||
// AP are passed to result and result finally gets the available AP
|
||||
getMissingAP (getIsInCharacterCreation (state))
|
||||
@@ -120,7 +120,7 @@ export const addArcaneEnergyPoint: ReduxAction<Promise<void>> =
|
||||
liftM2 (pipe (
|
||||
|
||||
// get AP for added points
|
||||
curryN (getAPForInc) ("D"),
|
||||
curryN (getAPForInc) (ImprovementCost.D),
|
||||
|
||||
// AP are passed to result and result finally gets the available AP
|
||||
getMissingAP (getIsInCharacterCreation (state))
|
||||
@@ -156,7 +156,7 @@ export const addKarmaPoint: ReduxAction<Promise<void>> =
|
||||
liftM2 (pipe (
|
||||
|
||||
// get AP for added points
|
||||
curryN (getAPForInc) ("D"),
|
||||
curryN (getAPForInc) (ImprovementCost.D),
|
||||
|
||||
// AP are passed to result and result finally gets the available AP
|
||||
getMissingAP (getIsInCharacterCreation (state))
|
||||
|
||||
@@ -284,14 +284,14 @@ export const removeDisAdvantage =
|
||||
Race.A.eyeColors,
|
||||
altF_ (() => fmapF (mrace_var) (RaceVariant.A.eyeColors)),
|
||||
bindF (uncons),
|
||||
fmap (fst)
|
||||
fmap<Pair<number, List<number>>, number> (fst)
|
||||
)
|
||||
(race),
|
||||
pipe (
|
||||
Race.A.hairColors,
|
||||
altF_ (() => fmapF (mrace_var) (RaceVariant.A.hairColors)),
|
||||
bindF (uncons),
|
||||
fmap (fst)
|
||||
fmap<Pair<number, List<number>>, number> (fst)
|
||||
)
|
||||
(race)
|
||||
)
|
||||
|
||||
@@ -2,13 +2,14 @@ import { fmap } from "../../Data/Functor"
|
||||
import { bindF, fromJust, isJust, Just, Maybe } from "../../Data/Maybe"
|
||||
import { keys, lookup, lookupF, OrderedMap } from "../../Data/OrderedMap"
|
||||
import { Record } from "../../Data/Record"
|
||||
import { Pair } from "../../Data/Tuple"
|
||||
import * as ActionTypes from "../Constants/ActionTypes"
|
||||
import { IdPrefixes } from "../Constants/IdPrefixes"
|
||||
import { MeleeCombatTechniqueId, RangedCombatTechniqueId } from "../Constants/Ids"
|
||||
import { AttrId, MeleeCombatTechniqueId, RangedCombatTechniqueId } from "../Constants/Ids"
|
||||
import { EquipmentSortOptions } from "../Models/Config"
|
||||
import { EditItem } from "../Models/Hero/EditItem"
|
||||
import { HitZoneArmor } from "../Models/Hero/HitZoneArmor"
|
||||
import { Item } from "../Models/Hero/Item"
|
||||
import { Item, Range } from "../Models/Hero/Item"
|
||||
import { ItemTemplate } from "../Models/Wiki/ItemTemplate"
|
||||
import { getHitZoneArmorsState, getItemEditorInstance, getItemsState, getWikiItemTemplates } from "../Selectors/stateSelectors"
|
||||
import { getNewId, prefixId } from "../Utilities/IDUtils"
|
||||
@@ -375,16 +376,17 @@ export const setDamageFlat = (value: string): SetDamageFlatAction => ({
|
||||
export interface SetPrimaryAttributeAction {
|
||||
type: ActionTypes.SET_ITEM_PRIMARY_ATTRIBUTE
|
||||
payload: {
|
||||
primary: Maybe<string>
|
||||
primary: Maybe<AttrId | Pair<AttrId, AttrId>>
|
||||
}
|
||||
}
|
||||
|
||||
export const setPrimaryAttribute = (primary: Maybe<string>): SetPrimaryAttributeAction => ({
|
||||
type: ActionTypes.SET_ITEM_PRIMARY_ATTRIBUTE,
|
||||
payload: {
|
||||
primary,
|
||||
},
|
||||
})
|
||||
export const setPrimaryAttribute =
|
||||
(primary: Maybe<AttrId | Pair<AttrId, AttrId>>): SetPrimaryAttributeAction => ({
|
||||
type: ActionTypes.SET_ITEM_PRIMARY_ATTRIBUTE,
|
||||
payload: {
|
||||
primary,
|
||||
},
|
||||
})
|
||||
|
||||
export interface SetDamageThresholdAction {
|
||||
type: ActionTypes.SET_ITEM_DAMAGE_THRESHOLD
|
||||
@@ -510,15 +512,15 @@ export interface SetRangeAction {
|
||||
type: ActionTypes.SET_ITEM_RANGE
|
||||
payload: {
|
||||
value: string
|
||||
index: number
|
||||
key: keyof Range
|
||||
}
|
||||
}
|
||||
|
||||
export const setRange = (value: string, index: number): SetRangeAction => ({
|
||||
export const setRange = (value: string, key: keyof Range): SetRangeAction => ({
|
||||
type: ActionTypes.SET_ITEM_RANGE,
|
||||
payload: {
|
||||
value,
|
||||
index,
|
||||
key,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -716,12 +718,13 @@ export const applyItemTemplate: ReduxAction =
|
||||
getItemEditorInstance,
|
||||
bindF (EditItem.A.template),
|
||||
bindF (lookupF (getWikiItemTemplates (getState ()))),
|
||||
fmap (template => dispatch<ApplyItemTemplateAction> ({
|
||||
type: ActionTypes.APPLY_ITEM_TEMPLATE,
|
||||
payload: {
|
||||
template,
|
||||
},
|
||||
}))
|
||||
fmap ((template: Record<ItemTemplate>) =>
|
||||
dispatch<ApplyItemTemplateAction> ({
|
||||
type: ActionTypes.APPLY_ITEM_TEMPLATE,
|
||||
payload: {
|
||||
template,
|
||||
},
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -739,12 +742,13 @@ export const lockItemTemplate: ReduxAction =
|
||||
getItemEditorInstance,
|
||||
bindF (EditItem.A.template),
|
||||
bindF (lookupF (getWikiItemTemplates (getState ()))),
|
||||
fmap (template => dispatch<LockItemTemplateAction> ({
|
||||
type: ActionTypes.LOCK_ITEM_TEMPLATE,
|
||||
payload: {
|
||||
template,
|
||||
},
|
||||
}))
|
||||
fmap ((template: Record<ItemTemplate>) =>
|
||||
dispatch<LockItemTemplateAction> ({
|
||||
type: ActionTypes.LOCK_ITEM_TEMPLATE,
|
||||
payload: {
|
||||
template,
|
||||
},
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { handleE } from "../../Control/Exception"
|
||||
import { Either, fromLeft_, fromRight_, isLeft, isRight } from "../../Data/Either"
|
||||
import { List } from "../../Data/List"
|
||||
import { elem, fromJust, isJust, Just, Maybe } from "../../Data/Maybe"
|
||||
import { elem, fromJust, isJust, Just } from "../../Data/Maybe"
|
||||
import { lookup } from "../../Data/OrderedMap"
|
||||
import { OrderedSet } from "../../Data/OrderedSet"
|
||||
import { bind } from "../../System/IO"
|
||||
@@ -121,7 +120,7 @@ export const loadHero = (id: string): LoadHeroAction => ({
|
||||
export const saveHeroes: ReduxAction =
|
||||
async (dispatch, getState) => {
|
||||
await bind (handleE (dispatch (requestAllHeroesSave)))
|
||||
(async res => isRight (res)
|
||||
(async res => res.isRight
|
||||
? dispatch (addAlert (AlertOptions ({
|
||||
message: translate (getWiki (getState ()))
|
||||
("header.dialogs.allsaved"),
|
||||
@@ -137,12 +136,12 @@ export interface SaveHeroAction {
|
||||
}
|
||||
|
||||
export const saveHero =
|
||||
(id: Maybe<string>): ReduxAction<Promise<void>> =>
|
||||
(id: string): ReduxAction<Promise<void>> =>
|
||||
async (dispatch, getState) => {
|
||||
await bind (handleE (dispatch (requestHeroSave (id))))
|
||||
(async res => {
|
||||
if (isLeft (res)) {
|
||||
const err = fromLeft_ (res)
|
||||
if (res.isLeft) {
|
||||
const err = res.value
|
||||
|
||||
const title = translate (getWiki (getState ()))
|
||||
("header.dialogs.saveheroeserror.title")
|
||||
@@ -154,8 +153,8 @@ export const saveHero =
|
||||
|
||||
await dispatch (addErrorAlert (opts))
|
||||
}
|
||||
else if (Either.any (isJust) (res)) {
|
||||
const save_id = fromJust (fromRight_ (res))
|
||||
else if (isJust (res.value)) {
|
||||
const save_id = fromJust (res.value)
|
||||
|
||||
dispatch<SaveHeroAction> ({
|
||||
type: ActionTypes.SAVE_HERO,
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { remote } from "electron"
|
||||
import * as remote from "@electron/remote"
|
||||
import * as fs from "fs"
|
||||
import { extname, join } from "path"
|
||||
import { handleE } from "../../Control/Exception"
|
||||
import { Either, fromLeft_, fromRight_, isLeft, isRight } from "../../Data/Either"
|
||||
import { Either, fromLeft_, fromRight_, isLeft } from "../../Data/Either"
|
||||
import { flip } from "../../Data/Function"
|
||||
import { fmap } from "../../Data/Functor"
|
||||
import { over } from "../../Data/Lens"
|
||||
import { List, notNull } from "../../Data/List"
|
||||
import { alt_, bindF, elem, ensure, fromJust, isJust, isNothing, Just, listToMaybe, Maybe, maybe, Nothing } from "../../Data/Maybe"
|
||||
import { bindF, elem, ensure, fromJust, isJust, Just, listToMaybe, Maybe, maybe, Nothing } from "../../Data/Maybe"
|
||||
import { any, lookup, OrderedMap } from "../../Data/OrderedMap"
|
||||
import { toObject } from "../../Data/Record"
|
||||
import * as IO from "../../System/IO"
|
||||
@@ -23,7 +23,7 @@ import { UISettingsState } from "../Models/UISettingsState"
|
||||
import { StaticDataRecord } from "../Models/Wiki/WikiModel"
|
||||
import { heroReducer } from "../Reducers/heroReducer"
|
||||
import { user_data_path } from "../Selectors/envSelectors"
|
||||
import { getCurrentHeroId, getFallbackLocaleId, getHeroes, getLocaleId, getWiki } from "../Selectors/stateSelectors"
|
||||
import { getFallbackLocaleId, getHeroes, getLocaleId, getWiki } from "../Selectors/stateSelectors"
|
||||
import { getUISettingsState } from "../Selectors/uisettingsSelectors"
|
||||
import { prepareAPCache, prepareAPCacheForHero, writeCache } from "../Utilities/Cache"
|
||||
import { translate } from "../Utilities/I18n"
|
||||
@@ -37,6 +37,7 @@ import { deleteHeroFromFile, saveAllHeroesToFile, saveHeroToFile } from "../Util
|
||||
import { ReduxAction } from "./Actions"
|
||||
import { addAlert, addErrorAlert, addPrompt, AlertOptions, CustomPromptOptions, getErrorMsg, PromptButton } from "./AlertActions"
|
||||
|
||||
|
||||
const UISSA = UISettingsState.A
|
||||
|
||||
export const requestConfigSave: ReduxAction<Promise<boolean>> =
|
||||
@@ -69,13 +70,13 @@ export const requestConfigSave: ReduxAction<Promise<boolean>> =
|
||||
IO.bindF (async res => {
|
||||
console.log (res)
|
||||
|
||||
if (isLeft (res)) {
|
||||
if (res.isLeft) {
|
||||
const title = Just (translate (static_data) ("header.dialogs.saveconfigerror.title"))
|
||||
|
||||
const message = getErrorMsg (static_data)
|
||||
(translate (static_data)
|
||||
("header.dialogs.saveconfigerror.message"))
|
||||
(res)
|
||||
(res.value)
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -119,7 +120,7 @@ export const requestAllHeroesSave: ReduxAction<Promise<boolean>> =
|
||||
const message = getErrorMsg (static_data)
|
||||
(translate (static_data)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(fromLeft_ (res))
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -144,6 +145,7 @@ export const requestSaveCache = (all_saved: boolean): ReduxAction<Promise<Either
|
||||
prepareAPCache (all_saved),
|
||||
writeCache
|
||||
)
|
||||
.then (e => e.toOldEither ())
|
||||
|
||||
export interface ReceiveHeroSaveAction {
|
||||
type: ActionTypes.RECEIVE_HERO_SAVE
|
||||
@@ -168,20 +170,12 @@ const receiveHeroSave = (
|
||||
})
|
||||
|
||||
export const requestHeroSave =
|
||||
(mcurrent_id: Maybe<string>): ReduxAction<Promise<Maybe<string>>> =>
|
||||
(id: string): ReduxAction<Promise<Maybe<string>>> =>
|
||||
async (dispatch, getState) => {
|
||||
const state = getState ()
|
||||
const static_data = getWiki (state)
|
||||
const heroes = getHeroes (state)
|
||||
|
||||
const mcurrent_id_alt = alt_ (mcurrent_id) (() => getCurrentHeroId (getState ()))
|
||||
|
||||
if (isNothing (mcurrent_id_alt)) {
|
||||
return Promise.resolve (Nothing)
|
||||
}
|
||||
|
||||
const id = fromJust (mcurrent_id_alt)
|
||||
|
||||
const mcache = prepareAPCacheForHero (state, id)
|
||||
|
||||
if (isJust (mcache)) {
|
||||
@@ -194,7 +188,7 @@ export const requestHeroSave =
|
||||
const message = getErrorMsg (static_data)
|
||||
(translate (static_data)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(fromLeft_ (res))
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -210,13 +204,13 @@ export const requestHeroSave =
|
||||
await dispatch (async (_, getState2) => writeCache (prepareAPCache (false)
|
||||
(getState2 ())))
|
||||
|
||||
if (isLeft (cacheRes)) {
|
||||
if (cacheRes.isLeft) {
|
||||
const title = Just (translate (static_data) ("header.dialogs.saveheroeserror.title"))
|
||||
|
||||
const message = getErrorMsg (static_data)
|
||||
(translate (static_data)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(cacheRes)
|
||||
(cacheRes.value)
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -268,7 +262,7 @@ export const requestHeroDeletion =
|
||||
const message = getErrorMsg (staticData)
|
||||
(translate (staticData)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(fromLeft_ (res))
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -307,6 +301,7 @@ export const imgPathToBase64 =
|
||||
return Just (path)
|
||||
}
|
||||
|
||||
|
||||
export const requestHeroExport =
|
||||
(id: string): ReduxAction =>
|
||||
async (dispatch, getState) => {
|
||||
@@ -342,7 +337,7 @@ export const requestHeroExport =
|
||||
(flip (IO.writeFile) (JSON.stringify (hero)))
|
||||
(pmfilepath))
|
||||
|
||||
if (isRight (res)) {
|
||||
if (res.isRight) {
|
||||
await dispatch (addAlert (AlertOptions ({
|
||||
message: translate (staticData) ("heroes.dialogs.herosaved"),
|
||||
})))
|
||||
@@ -353,7 +348,7 @@ export const requestHeroExport =
|
||||
const message = getErrorMsg (staticData)
|
||||
(translate (staticData)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(res.value)
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -395,14 +390,14 @@ export const requestHeroImport: ReduxAction<Promise<void>> =
|
||||
if (isJust (mfile_path)) {
|
||||
const staticData = getWiki (getState ())
|
||||
|
||||
const ehero = await parseHero (staticData)
|
||||
const hero = await parseHero (staticData)
|
||||
(fromJust (mfile_path))
|
||||
|
||||
if (isLeft (ehero)) {
|
||||
await dispatch (addErrorAlert (fromLeft_ (ehero)))
|
||||
if (hero.isLeft) {
|
||||
await dispatch (addErrorAlert (hero.value))
|
||||
}
|
||||
else {
|
||||
dispatch (receiveHeroImport (fromRight_ (ehero)))
|
||||
dispatch (receiveHeroImport (hero.value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import { join } from "path"
|
||||
import { handleE, toMsg } from "../../Control/Exception"
|
||||
import { eitherToMaybe, fromLeft_, fromRight_, isLeft, Left } from "../../Data/Either"
|
||||
import { fromLeft_, fromRight_, isLeft } from "../../Data/Either"
|
||||
import { flip } from "../../Data/Function"
|
||||
import { fmap } from "../../Data/Functor"
|
||||
import { fromArray, intercalate, map } from "../../Data/List"
|
||||
import { bindF, fromJust, fromMaybe, isJust, Just, Maybe } from "../../Data/Maybe"
|
||||
import { fromJust, fromMaybe, isJust, Just, Maybe } from "../../Data/Maybe"
|
||||
import { filter, keysSet, OrderedMap } from "../../Data/OrderedMap"
|
||||
import { notMember } from "../../Data/OrderedSet"
|
||||
import { Record } from "../../Data/Record"
|
||||
@@ -23,6 +22,7 @@ import { user_data_path } from "../Selectors/envSelectors"
|
||||
import { getHeroes } from "../Selectors/stateSelectors"
|
||||
import { deleteCache, forceCacheIsAvailable, insertAppStateCache, insertCacheMap, insertHeroesCache, readCache } from "../Utilities/Cache"
|
||||
import { getSystemLocale } from "../Utilities/IOUtils"
|
||||
import { Maybe as NewMaybe } from "../Utilities/Maybe"
|
||||
import { pipe, pipe_ } from "../Utilities/pipe"
|
||||
import { parseConfig } from "../Utilities/Raw/JSON/Config"
|
||||
import { RawHerolist } from "../Utilities/Raw/RawData"
|
||||
@@ -85,17 +85,17 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
|
||||
const did_update = await readUpdate ()
|
||||
|
||||
const dispatchErrorAlertOptions = async (options: Left<Record<AlertOptions>>) => {
|
||||
await dispatch (addErrorAlert (fromLeft_ (options)))
|
||||
const dispatchErrorAlertOptions = async (options: Record<AlertOptions>) => {
|
||||
await dispatch (addErrorAlert (options))
|
||||
|
||||
dispatch (setLoadingDoneWithError ())
|
||||
}
|
||||
|
||||
const dispatchError = async (err: Left<Error>) =>
|
||||
dispatchErrorAlertOptions (Left (AlertOptions ({
|
||||
title: Just ("Error"),
|
||||
message: toMsg (fromLeft_ (err)),
|
||||
})))
|
||||
const dispatchError = async (err: Error) =>
|
||||
dispatchErrorAlertOptions (AlertOptions ({
|
||||
title: Just ("Error"),
|
||||
message: toMsg (err),
|
||||
}))
|
||||
|
||||
console.log (did_update)
|
||||
|
||||
@@ -103,7 +103,7 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
const deleted = await deleteCache ()
|
||||
|
||||
if (isLeft (deleted)) {
|
||||
return dispatchError (deleted)
|
||||
return dispatchError (fromLeft_ (deleted))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,26 +111,26 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
|
||||
console.log (show (update_written))
|
||||
|
||||
if (isLeft (update_written)) {
|
||||
return dispatchError (update_written)
|
||||
if (update_written.isLeft) {
|
||||
return dispatchError (update_written.value)
|
||||
}
|
||||
|
||||
const econfig = await parseConfig ()
|
||||
const config = await parseConfig ()
|
||||
|
||||
if (isLeft (econfig)) {
|
||||
return dispatchErrorAlertOptions (econfig)
|
||||
if (config.isLeft) {
|
||||
return dispatchErrorAlertOptions (config.value)
|
||||
}
|
||||
|
||||
const config = fromRight_ (econfig)
|
||||
console.log (show (config.value))
|
||||
|
||||
console.log (show (config))
|
||||
|
||||
const mheroes = await pipe_ (
|
||||
const mheroes = (await pipe_ (
|
||||
join (user_data_path, "heroes.json"),
|
||||
IO.readFile,
|
||||
handleE,
|
||||
fmap (pipe (eitherToMaybe, bindF (parseJSON as (x: string) => Maybe<RawHerolist>)))
|
||||
)
|
||||
handleE
|
||||
))
|
||||
.toMaybe ()
|
||||
.bind (x => parseJSON (x) as NewMaybe<RawHerolist>)
|
||||
.toOldMaybe ()
|
||||
|
||||
const mcache = await readCache ()
|
||||
|
||||
@@ -142,7 +142,6 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
fromLeft_,
|
||||
parseErrorsToPairStr,
|
||||
pairStrErrorToAlertOptions,
|
||||
Left,
|
||||
dispatchErrorAlertOptions
|
||||
)
|
||||
}
|
||||
@@ -151,8 +150,8 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
|
||||
const estatic_data =
|
||||
await parseStaticData (
|
||||
fromMaybe (defaultLocale) (Config.A.locale (config)),
|
||||
Config.A.fallbackLocale (config)
|
||||
fromMaybe (defaultLocale) (Config.A.locale (config.value)),
|
||||
Config.A.fallbackLocale (config.value)
|
||||
)
|
||||
|
||||
if (isLeft (estatic_data)) {
|
||||
@@ -161,7 +160,6 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
fromLeft_,
|
||||
parseErrorsToPairStr,
|
||||
pairStrErrorToAlertOptions,
|
||||
Left,
|
||||
dispatchErrorAlertOptions
|
||||
)
|
||||
}
|
||||
@@ -170,7 +168,7 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
staticData: fromRight_ (estatic_data),
|
||||
heroes: mheroes,
|
||||
defaultLocale,
|
||||
config: Just (config),
|
||||
config: Just (config.value),
|
||||
cache: mcache,
|
||||
availableLangs: available_langs,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Da
|
||||
import { lookup } from "../../Data/OrderedMap"
|
||||
import { Record } from "../../Data/Record"
|
||||
import * as ActionTypes from "../Constants/ActionTypes"
|
||||
import { icFromJs } from "../Constants/Groups"
|
||||
import { ChantsSortOptions } from "../Models/Config"
|
||||
import { HeroModel } from "../Models/Hero/HeroModel"
|
||||
import { LiturgicalChant } from "../Models/Wiki/LiturgicalChant"
|
||||
@@ -10,7 +9,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
|
||||
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
|
||||
import { getCurrentHeroPresent, getLiturgicalChants, getWikiLiturgicalChants } from "../Selectors/stateSelectors"
|
||||
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
|
||||
import { getAPForActivatation } from "../Utilities/IC.gen"
|
||||
import { getAPForActivatation } from "../Utilities/ImprovementCost"
|
||||
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
|
||||
import { pipe_ } from "../Utilities/pipe"
|
||||
import { ReduxAction } from "./Actions"
|
||||
@@ -45,7 +44,6 @@ export const addLiturgicalChant =
|
||||
(pipe_ (
|
||||
staticLiturgicalChant,
|
||||
LiturgicalChant.A.ic,
|
||||
icFromJs,
|
||||
getAPForActivatation
|
||||
)))
|
||||
)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { PrintToPDFOptions } from "electron"
|
||||
import { handleE } from "../../Control/Exception"
|
||||
import { Either, isLeft, isRight, Right } from "../../Data/Either"
|
||||
import { flip } from "../../Data/Function"
|
||||
import { appendStr } from "../../Data/List"
|
||||
import { isJust, maybe } from "../../Data/Maybe"
|
||||
import * as IO from "../../System/IO"
|
||||
import { getCurrentHeroName, getWiki } from "../Selectors/stateSelectors"
|
||||
import { Either, Right } from "../Utilities/Either"
|
||||
import { translate } from "../Utilities/I18n"
|
||||
import { showSaveDialog, windowPrintToPDF } from "../Utilities/IOUtils"
|
||||
import { pipe } from "../Utilities/pipe"
|
||||
@@ -42,15 +42,15 @@ export const requestPrintHeroToPDF = (): ReduxAction<Promise<void>> =>
|
||||
(pipe (flip (IO.writeFile) (data), handleE))
|
||||
(path)
|
||||
|
||||
if (isRight (res) && isJust (path)) {
|
||||
if (res.isRight && isJust (path)) {
|
||||
await dispatch (addAlert (AlertOptions ({
|
||||
message: translate (staticData) ("sheets.dialogs.pdfsaved"),
|
||||
})))
|
||||
}
|
||||
else if (isLeft (res)) {
|
||||
else if (res.isLeft) {
|
||||
await dispatch (addDefaultErrorAlert (staticData)
|
||||
(translate (staticData)
|
||||
("sheets.dialogs.pdfsaveerror.title"))
|
||||
(res))
|
||||
(res.value))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Da
|
||||
import { lookup } from "../../Data/OrderedMap"
|
||||
import { Record } from "../../Data/Record"
|
||||
import * as ActionTypes from "../Constants/ActionTypes"
|
||||
import { icFromJs } from "../Constants/Groups"
|
||||
import { SpellsSortOptions } from "../Models/Config"
|
||||
import { HeroModel } from "../Models/Hero/HeroModel"
|
||||
import { Cantrip } from "../Models/Wiki/Cantrip"
|
||||
@@ -11,7 +10,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
|
||||
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
|
||||
import { getCurrentHeroPresent, getSpells, getWikiCantrips, getWikiSpells } from "../Selectors/stateSelectors"
|
||||
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
|
||||
import { getAPForActivatation } from "../Utilities/IC.gen"
|
||||
import { getAPForActivatation } from "../Utilities/ImprovementCost"
|
||||
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
|
||||
import { pipe_ } from "../Utilities/pipe"
|
||||
import { ReduxAction } from "./Actions"
|
||||
@@ -43,7 +42,7 @@ export const addSpell =
|
||||
bindF (hero => getAvailableAPMap (HeroModel.A.id (hero)) (state, { hero })),
|
||||
join,
|
||||
bindF (getMissingAP (getIsInCharacterCreation (state))
|
||||
(pipe_ (staticSpell, Spell.A.ic, icFromJs, getAPForActivatation)))
|
||||
(pipe_ (staticSpell, Spell.A.ic, getAPForActivatation)))
|
||||
)
|
||||
|
||||
if (isNothing (missingAPForInc)) {
|
||||
|
||||
@@ -24,7 +24,7 @@ export const setUpdateDownloadProgress =
|
||||
})
|
||||
|
||||
enum UpdateAvailableResponse {
|
||||
UpdateAndRestart, Cancel
|
||||
UpdateAndRestart, Cancel
|
||||
}
|
||||
|
||||
export const updateAvailable =
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,2 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
|
||||
@@ -1,97 +0,0 @@
|
||||
type heroListSortOptions =
|
||||
| Name
|
||||
| DateModified;
|
||||
|
||||
type heroListVisibilityFilter =
|
||||
| All
|
||||
| Own
|
||||
| Shared;
|
||||
|
||||
type racesSortOptions =
|
||||
| Name
|
||||
| Cost;
|
||||
|
||||
type culturesSortOptions =
|
||||
| Name
|
||||
| Cost;
|
||||
|
||||
type culturesVisibilityFilter =
|
||||
| All
|
||||
| Common;
|
||||
|
||||
type professionsSortOptions =
|
||||
| Name
|
||||
| Cost;
|
||||
|
||||
type professionsVisibilityFilter =
|
||||
| All
|
||||
| Common;
|
||||
|
||||
type professionsGroupVisibilityFilter =
|
||||
| All
|
||||
| Mundane
|
||||
| Magical
|
||||
| Blessed;
|
||||
|
||||
type skillsSortOptions =
|
||||
| Name
|
||||
| Group
|
||||
| IC;
|
||||
|
||||
type specialAbilitiesSortOptions =
|
||||
| Name
|
||||
| Group;
|
||||
|
||||
type combatTechniquesSortOptions =
|
||||
| Name
|
||||
| Group
|
||||
| IC;
|
||||
|
||||
type spellsSortOptions =
|
||||
| Name
|
||||
| Group
|
||||
| Property
|
||||
| IC;
|
||||
|
||||
type liturgicalChantsSortOptions =
|
||||
| Name
|
||||
| Group
|
||||
| IC;
|
||||
|
||||
type equipmentSortOptions =
|
||||
| Name
|
||||
| Group
|
||||
| Where
|
||||
| Weight;
|
||||
|
||||
type theme =
|
||||
| Dark
|
||||
| Light;
|
||||
|
||||
type tab =
|
||||
| Herolist
|
||||
| Grouplist
|
||||
| Wiki
|
||||
| Faq
|
||||
| Imprint
|
||||
| ThirdPartyLicenses
|
||||
| LastChanges
|
||||
| Profile
|
||||
| PersonalData
|
||||
| CharacterSheet
|
||||
| Pact
|
||||
| Rules
|
||||
| Races
|
||||
| Cultures
|
||||
| Professions
|
||||
| Attributes
|
||||
| Advantages
|
||||
| Disadvantages
|
||||
| Skills
|
||||
| CombatTechniques
|
||||
| SpecialAbilities
|
||||
| Spells
|
||||
| LiturgicalChants
|
||||
| Equipment
|
||||
| ZoneArmor
|
||||
| Pets;
|
||||
@@ -1,4 +1,3 @@
|
||||
import { t as _IC } from "../Utilities/IC.gen"
|
||||
|
||||
export enum ProfessionGroup {
|
||||
Mundane = 1,
|
||||
@@ -26,36 +25,6 @@ export enum ProfessionSubGroup {
|
||||
BlessedOnesOfTheTwelveGods = 1,
|
||||
}
|
||||
|
||||
export enum IC {
|
||||
A = 1,
|
||||
B,
|
||||
C,
|
||||
D,
|
||||
E,
|
||||
}
|
||||
|
||||
export const icFromJs = (x: IC): _IC => {
|
||||
switch (x) {
|
||||
case IC.A: return "A"
|
||||
case IC.B: return "B"
|
||||
case IC.C: return "C"
|
||||
case IC.D: return "D"
|
||||
case IC.E: return "E"
|
||||
default: throw new TypeError (`icFromJs: ${x} is not an IC`)
|
||||
}
|
||||
}
|
||||
|
||||
export const icToJs = (x: _IC): IC => {
|
||||
switch (x) {
|
||||
case "A": return IC.A
|
||||
case "B": return IC.B
|
||||
case "C": return IC.C
|
||||
case "D": return IC.D
|
||||
case "E": return IC.E
|
||||
default: throw new TypeError (`icToJs: ${x} is not an IC`)
|
||||
}
|
||||
}
|
||||
|
||||
export enum SkillGroup {
|
||||
Physical = 1,
|
||||
Social = 2,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,88 +0,0 @@
|
||||
/* TypeScript file generated from Id.re by genType. */
|
||||
/* eslint-disable import/first */
|
||||
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type t =
|
||||
{ NAME: "ExperienceLevel"; VAL: number }
|
||||
| { NAME: "Race"; VAL: number }
|
||||
| { NAME: "Culture"; VAL: number }
|
||||
| { NAME: "Profession"; VAL: number }
|
||||
| { NAME: "Attribute"; VAL: number }
|
||||
| { NAME: "Advantage"; VAL: number }
|
||||
| { NAME: "Disadvantage"; VAL: number }
|
||||
| { NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "Curse"; VAL: number }
|
||||
| { NAME: "ElvenMagicalSong"; VAL: number }
|
||||
| { NAME: "DominationRitual"; VAL: number }
|
||||
| { NAME: "MagicalMelody"; VAL: number }
|
||||
| { NAME: "MagicalDance"; VAL: number }
|
||||
| { NAME: "RogueSpell"; VAL: number }
|
||||
| { NAME: "AnimistForce"; VAL: number }
|
||||
| { NAME: "GeodeRitual"; VAL: number }
|
||||
| { NAME: "ZibiljaRitual"; VAL: number }
|
||||
| { NAME: "Cantrip"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number }
|
||||
| { NAME: "Blessing"; VAL: number }
|
||||
| { NAME: "SpecialAbility"; VAL: number }
|
||||
| { NAME: "Item"; VAL: number }
|
||||
| { NAME: "EquipmentPackage"; VAL: number }
|
||||
| { NAME: "HitZoneArmor"; VAL: number }
|
||||
| { NAME: "Familiar"; VAL: number }
|
||||
| { NAME: "Animal"; VAL: number }
|
||||
| { NAME: "FocusRule"; VAL: number }
|
||||
| { NAME: "OptionalRule"; VAL: number }
|
||||
| { NAME: "Condition"; VAL: number }
|
||||
| { NAME: "State"; VAL: number };
|
||||
export type Id = t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatable =
|
||||
{ NAME: "Advantage"; VAL: number }
|
||||
| { NAME: "Disadvantage"; VAL: number }
|
||||
| { NAME: "SpecialAbility"; VAL: number };
|
||||
export type ActivatableId = activatable;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableAndSkill =
|
||||
{ NAME: "Advantage"; VAL: number }
|
||||
| { NAME: "Disadvantage"; VAL: number }
|
||||
| { NAME: "SpecialAbility"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number };
|
||||
export type ActivatableAndSkillId = activatableAndSkill;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableSkill =
|
||||
{ NAME: "Spell"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number };
|
||||
export type ActivatableSkillId = activatableSkill;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type permanentSkill =
|
||||
{ NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number };
|
||||
export type PermanentSkillId = permanentSkill;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type selectOption =
|
||||
{ NAME: "Generic"; VAL: number }
|
||||
| { NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "Cantrip"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number }
|
||||
| { NAME: "Blessing"; VAL: number };
|
||||
export type SelectOptionId = selectOption;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type hitZoneArmorZoneItem =
|
||||
{ tag: "Template"; value: number }
|
||||
| { tag: "Custom"; value: number };
|
||||
export type HitZoneArmorZoneItemId = hitZoneArmorZoneItem;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type phase = "Outline" | "Definition" | "Advancement";
|
||||
export type Phase = phase;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,956 +0,0 @@
|
||||
/* TypeScript file generated from Ids.re by genType. */
|
||||
/* eslint-disable import/first */
|
||||
|
||||
|
||||
// tslint:disable-next-line:no-var-requires
|
||||
const IdsBS = require('./Ids.bs');
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type id =
|
||||
{ NAME: "ExperienceLevel"; VAL: number }
|
||||
| { NAME: "Race"; VAL: number }
|
||||
| { NAME: "Culture"; VAL: number }
|
||||
| { NAME: "Profession"; VAL: number }
|
||||
| { NAME: "Attribute"; VAL: number }
|
||||
| { NAME: "Advantage"; VAL: number }
|
||||
| { NAME: "Disadvantage"; VAL: number }
|
||||
| { NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "Curse"; VAL: number }
|
||||
| { NAME: "ElvenMagicalSong"; VAL: number }
|
||||
| { NAME: "DominationRitual"; VAL: number }
|
||||
| { NAME: "MagicalMelody"; VAL: number }
|
||||
| { NAME: "MagicalDance"; VAL: number }
|
||||
| { NAME: "RogueSpell"; VAL: number }
|
||||
| { NAME: "AnimistForce"; VAL: number }
|
||||
| { NAME: "GeodeRitual"; VAL: number }
|
||||
| { NAME: "ZibiljaRitual"; VAL: number }
|
||||
| { NAME: "Cantrip"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number }
|
||||
| { NAME: "Blessing"; VAL: number }
|
||||
| { NAME: "SpecialAbility"; VAL: number }
|
||||
| { NAME: "Item"; VAL: number }
|
||||
| { NAME: "EquipmentPackage"; VAL: number }
|
||||
| { NAME: "HitZoneArmor"; VAL: number }
|
||||
| { NAME: "Familiar"; VAL: number }
|
||||
| { NAME: "Animal"; VAL: number }
|
||||
| { NAME: "FocusRule"; VAL: number }
|
||||
| { NAME: "OptionalRule"; VAL: number }
|
||||
| { NAME: "Condition"; VAL: number }
|
||||
| { NAME: "State"; VAL: number };
|
||||
export type Id = id;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableId =
|
||||
{ NAME: "Advantage"; VAL: number }
|
||||
| { NAME: "Disadvantage"; VAL: number }
|
||||
| { NAME: "SpecialAbility"; VAL: number };
|
||||
export type ActivatableId = activatableId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableAndSkillId =
|
||||
{ NAME: "Advantage"; VAL: number }
|
||||
| { NAME: "Disadvantage"; VAL: number }
|
||||
| { NAME: "SpecialAbility"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number };
|
||||
export type ActivatableAndSkillId = activatableAndSkillId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableSkillId =
|
||||
{ NAME: "Spell"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number };
|
||||
export type ActivatableSkillId = activatableSkillId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type skillId =
|
||||
{ NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number };
|
||||
export type SkillId = skillId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type selectOptionId =
|
||||
{ NAME: "Generic"; VAL: number }
|
||||
| { NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "Cantrip"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number }
|
||||
| { NAME: "Blessing"; VAL: number };
|
||||
export type SelectOptionId = selectOptionId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type hitZoneArmorZoneItemId =
|
||||
{ tag: "Template"; value: number }
|
||||
| { tag: "Custom"; value: number };
|
||||
export type HitZoneArmorZoneItemId = hitZoneArmorZoneItemId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Phase_t = "Outline" | "Definition" | "Advancement";
|
||||
export type Phase = Phase_t;
|
||||
|
||||
export const Phase_rcp: number = IdsBS.Phase.rcp;
|
||||
|
||||
export const Phase_creation: number = IdsBS.Phase.creation;
|
||||
|
||||
export const Phase_inGame: number = IdsBS.Phase.inGame;
|
||||
|
||||
export const ExperienceLevelId_inexperienced: string = IdsBS.ExperienceLevelId.inexperienced;
|
||||
|
||||
export const ExperienceLevelId_ordinary: string = IdsBS.ExperienceLevelId.ordinary;
|
||||
|
||||
export const ExperienceLevelId_experienced: string = IdsBS.ExperienceLevelId.experienced;
|
||||
|
||||
export const ExperienceLevelId_competent: string = IdsBS.ExperienceLevelId.competent;
|
||||
|
||||
export const ExperienceLevelId_masterly: string = IdsBS.ExperienceLevelId.masterly;
|
||||
|
||||
export const ExperienceLevelId_brilliant: string = IdsBS.ExperienceLevelId.brilliant;
|
||||
|
||||
export const ExperienceLevelId_legendary: string = IdsBS.ExperienceLevelId.legendary;
|
||||
|
||||
export const RaceId_humans: string = IdsBS.RaceId.humans;
|
||||
|
||||
export const RaceId_elves: string = IdsBS.RaceId.elves;
|
||||
|
||||
export const RaceId_halfElves: string = IdsBS.RaceId.halfElves;
|
||||
|
||||
export const RaceId_dwarves: string = IdsBS.RaceId.dwarves;
|
||||
|
||||
export const CultureId_gladeElves: string = IdsBS.CultureId.gladeElves;
|
||||
|
||||
export const CultureId_firnelves: string = IdsBS.CultureId.firnelves;
|
||||
|
||||
export const CultureId_woodElves: string = IdsBS.CultureId.woodElves;
|
||||
|
||||
export const CultureId_steppenelfen: string = IdsBS.CultureId.steppenelfen;
|
||||
|
||||
export const ProfessionId_customProfession: string = IdsBS.ProfessionId.customProfession;
|
||||
|
||||
export const AttrId_courage: string = IdsBS.AttrId.courage;
|
||||
|
||||
export const AttrId_sagacity: string = IdsBS.AttrId.sagacity;
|
||||
|
||||
export const AttrId_intuition: string = IdsBS.AttrId.intuition;
|
||||
|
||||
export const AttrId_charisma: string = IdsBS.AttrId.charisma;
|
||||
|
||||
export const AttrId_dexterity: string = IdsBS.AttrId.dexterity;
|
||||
|
||||
export const AttrId_agility: string = IdsBS.AttrId.agility;
|
||||
|
||||
export const AttrId_constitution: string = IdsBS.AttrId.constitution;
|
||||
|
||||
export const AttrId_strength: string = IdsBS.AttrId.strength;
|
||||
|
||||
export const DCId_lifePoints: string = IdsBS.DCId.lifePoints;
|
||||
|
||||
export const DCId_arcaneEnergy: string = IdsBS.DCId.arcaneEnergy;
|
||||
|
||||
export const DCId_karmaPoints: string = IdsBS.DCId.karmaPoints;
|
||||
|
||||
export const DCId_spirit: string = IdsBS.DCId.spirit;
|
||||
|
||||
export const DCId_toughness: string = IdsBS.DCId.toughness;
|
||||
|
||||
export const DCId_dodge: string = IdsBS.DCId.dodge;
|
||||
|
||||
export const DCId_initiative: string = IdsBS.DCId.initiative;
|
||||
|
||||
export const DCId_movement: string = IdsBS.DCId.movement;
|
||||
|
||||
export const DCId_woundThreshold: string = IdsBS.DCId.woundThreshold;
|
||||
|
||||
export const AdvantageId_aptitude: string = IdsBS.AdvantageId.aptitude;
|
||||
|
||||
export const AdvantageId_nimble: string = IdsBS.AdvantageId.nimble;
|
||||
|
||||
export const AdvantageId_blessed: string = IdsBS.AdvantageId.blessed;
|
||||
|
||||
export const AdvantageId_luck: string = IdsBS.AdvantageId.luck;
|
||||
|
||||
export const AdvantageId_exceptionalSkill: string = IdsBS.AdvantageId.exceptionalSkill;
|
||||
|
||||
export const AdvantageId_exceptionalCombatTechnique: string = IdsBS.AdvantageId.exceptionalCombatTechnique;
|
||||
|
||||
export const AdvantageId_increasedAstralPower: string = IdsBS.AdvantageId.increasedAstralPower;
|
||||
|
||||
export const AdvantageId_increasedKarmaPoints: string = IdsBS.AdvantageId.increasedKarmaPoints;
|
||||
|
||||
export const AdvantageId_increasedLifePoints: string = IdsBS.AdvantageId.increasedLifePoints;
|
||||
|
||||
export const AdvantageId_increasedSpirit: string = IdsBS.AdvantageId.increasedSpirit;
|
||||
|
||||
export const AdvantageId_increasedToughness: string = IdsBS.AdvantageId.increasedToughness;
|
||||
|
||||
export const AdvantageId_immunityToPoison: string = IdsBS.AdvantageId.immunityToPoison;
|
||||
|
||||
export const AdvantageId_immunityToDisease: string = IdsBS.AdvantageId.immunityToDisease;
|
||||
|
||||
export const AdvantageId_magicalAttunement: string = IdsBS.AdvantageId.magicalAttunement;
|
||||
|
||||
export const AdvantageId_rich: string = IdsBS.AdvantageId.rich;
|
||||
|
||||
export const AdvantageId_sociallyAdaptable: string = IdsBS.AdvantageId.sociallyAdaptable;
|
||||
|
||||
export const AdvantageId_inspireConfidence: string = IdsBS.AdvantageId.inspireConfidence;
|
||||
|
||||
export const AdvantageId_weaponAptitude: string = IdsBS.AdvantageId.weaponAptitude;
|
||||
|
||||
export const AdvantageId_spellcaster: string = IdsBS.AdvantageId.spellcaster;
|
||||
|
||||
export const AdvantageId_unyielding: string = IdsBS.AdvantageId.unyielding;
|
||||
|
||||
export const AdvantageId_largeSpellSelection: string = IdsBS.AdvantageId.largeSpellSelection;
|
||||
|
||||
export const AdvantageId_hatredOf: string = IdsBS.AdvantageId.hatredOf;
|
||||
|
||||
export const AdvantageId_prediger: string = IdsBS.AdvantageId.prediger;
|
||||
|
||||
export const AdvantageId_visionaer: string = IdsBS.AdvantageId.visionaer;
|
||||
|
||||
export const AdvantageId_zahlreichePredigten: string = IdsBS.AdvantageId.zahlreichePredigten;
|
||||
|
||||
export const AdvantageId_zahlreicheVisionen: string = IdsBS.AdvantageId.zahlreicheVisionen;
|
||||
|
||||
export const AdvantageId_leichterGang: string = IdsBS.AdvantageId.leichterGang;
|
||||
|
||||
export const AdvantageId_einkommen: string = IdsBS.AdvantageId.einkommen;
|
||||
|
||||
export const DisadvantageId_afraidOf: string = IdsBS.DisadvantageId.afraidOf;
|
||||
|
||||
export const DisadvantageId_poor: string = IdsBS.DisadvantageId.poor;
|
||||
|
||||
export const DisadvantageId_slow: string = IdsBS.DisadvantageId.slow;
|
||||
|
||||
export const DisadvantageId_noFlyingBalm: string = IdsBS.DisadvantageId.noFlyingBalm;
|
||||
|
||||
export const DisadvantageId_noFamiliar: string = IdsBS.DisadvantageId.noFamiliar;
|
||||
|
||||
export const DisadvantageId_magicalRestriction: string = IdsBS.DisadvantageId.magicalRestriction;
|
||||
|
||||
export const DisadvantageId_decreasedArcanePower: string = IdsBS.DisadvantageId.decreasedArcanePower;
|
||||
|
||||
export const DisadvantageId_decreasedKarmaPoints: string = IdsBS.DisadvantageId.decreasedKarmaPoints;
|
||||
|
||||
export const DisadvantageId_decreasedLifePoints: string = IdsBS.DisadvantageId.decreasedLifePoints;
|
||||
|
||||
export const DisadvantageId_decreasedSpirit: string = IdsBS.DisadvantageId.decreasedSpirit;
|
||||
|
||||
export const DisadvantageId_decreasedToughness: string = IdsBS.DisadvantageId.decreasedToughness;
|
||||
|
||||
export const DisadvantageId_badLuck: string = IdsBS.DisadvantageId.badLuck;
|
||||
|
||||
export const DisadvantageId_personalityFlaw: string = IdsBS.DisadvantageId.personalityFlaw;
|
||||
|
||||
export const DisadvantageId_principles: string = IdsBS.DisadvantageId.principles;
|
||||
|
||||
export const DisadvantageId_badHabit: string = IdsBS.DisadvantageId.badHabit;
|
||||
|
||||
export const DisadvantageId_negativeTrait: string = IdsBS.DisadvantageId.negativeTrait;
|
||||
|
||||
export const DisadvantageId_stigma: string = IdsBS.DisadvantageId.stigma;
|
||||
|
||||
export const DisadvantageId_deaf: string = IdsBS.DisadvantageId.deaf;
|
||||
|
||||
export const DisadvantageId_incompetent: string = IdsBS.DisadvantageId.incompetent;
|
||||
|
||||
export const DisadvantageId_obligations: string = IdsBS.DisadvantageId.obligations;
|
||||
|
||||
export const DisadvantageId_maimed: string = IdsBS.DisadvantageId.maimed;
|
||||
|
||||
export const DisadvantageId_brittleBones: string = IdsBS.DisadvantageId.brittleBones;
|
||||
|
||||
export const DisadvantageId_smallSpellSelection: string = IdsBS.DisadvantageId.smallSpellSelection;
|
||||
|
||||
export const DisadvantageId_wenigePredigten: string = IdsBS.DisadvantageId.wenigePredigten;
|
||||
|
||||
export const DisadvantageId_wenigeVisionen: string = IdsBS.DisadvantageId.wenigeVisionen;
|
||||
|
||||
export const SkillId_flying: string = IdsBS.SkillId.flying;
|
||||
|
||||
export const SkillId_gaukelei: string = IdsBS.SkillId.gaukelei;
|
||||
|
||||
export const SkillId_climbing: string = IdsBS.SkillId.climbing;
|
||||
|
||||
export const SkillId_bodyControl: string = IdsBS.SkillId.bodyControl;
|
||||
|
||||
export const SkillId_featOfStrength: string = IdsBS.SkillId.featOfStrength;
|
||||
|
||||
export const SkillId_riding: string = IdsBS.SkillId.riding;
|
||||
|
||||
export const SkillId_swimming: string = IdsBS.SkillId.swimming;
|
||||
|
||||
export const SkillId_selfControl: string = IdsBS.SkillId.selfControl;
|
||||
|
||||
export const SkillId_singing: string = IdsBS.SkillId.singing;
|
||||
|
||||
export const SkillId_perception: string = IdsBS.SkillId.perception;
|
||||
|
||||
export const SkillId_dancing: string = IdsBS.SkillId.dancing;
|
||||
|
||||
export const SkillId_pickpocket: string = IdsBS.SkillId.pickpocket;
|
||||
|
||||
export const SkillId_stealth: string = IdsBS.SkillId.stealth;
|
||||
|
||||
export const SkillId_carousing: string = IdsBS.SkillId.carousing;
|
||||
|
||||
export const SkillId_persuasion: string = IdsBS.SkillId.persuasion;
|
||||
|
||||
export const SkillId_seduction: string = IdsBS.SkillId.seduction;
|
||||
|
||||
export const SkillId_intimidation: string = IdsBS.SkillId.intimidation;
|
||||
|
||||
export const SkillId_etiquette: string = IdsBS.SkillId.etiquette;
|
||||
|
||||
export const SkillId_streetwise: string = IdsBS.SkillId.streetwise;
|
||||
|
||||
export const SkillId_empathy: string = IdsBS.SkillId.empathy;
|
||||
|
||||
export const SkillId_fastTalk: string = IdsBS.SkillId.fastTalk;
|
||||
|
||||
export const SkillId_disguise: string = IdsBS.SkillId.disguise;
|
||||
|
||||
export const SkillId_willpower: string = IdsBS.SkillId.willpower;
|
||||
|
||||
export const SkillId_tracking: string = IdsBS.SkillId.tracking;
|
||||
|
||||
export const SkillId_ropes: string = IdsBS.SkillId.ropes;
|
||||
|
||||
export const SkillId_fishing: string = IdsBS.SkillId.fishing;
|
||||
|
||||
export const SkillId_orienting: string = IdsBS.SkillId.orienting;
|
||||
|
||||
export const SkillId_plantLore: string = IdsBS.SkillId.plantLore;
|
||||
|
||||
export const SkillId_animalLore: string = IdsBS.SkillId.animalLore;
|
||||
|
||||
export const SkillId_survival: string = IdsBS.SkillId.survival;
|
||||
|
||||
export const SkillId_gambling: string = IdsBS.SkillId.gambling;
|
||||
|
||||
export const SkillId_geography: string = IdsBS.SkillId.geography;
|
||||
|
||||
export const SkillId_history: string = IdsBS.SkillId.history;
|
||||
|
||||
export const SkillId_religions: string = IdsBS.SkillId.religions;
|
||||
|
||||
export const SkillId_warfare: string = IdsBS.SkillId.warfare;
|
||||
|
||||
export const SkillId_magicalLore: string = IdsBS.SkillId.magicalLore;
|
||||
|
||||
export const SkillId_mechanics: string = IdsBS.SkillId.mechanics;
|
||||
|
||||
export const SkillId_math: string = IdsBS.SkillId.math;
|
||||
|
||||
export const SkillId_law: string = IdsBS.SkillId.law;
|
||||
|
||||
export const SkillId_mythsAndLegends: string = IdsBS.SkillId.mythsAndLegends;
|
||||
|
||||
export const SkillId_sphereLore: string = IdsBS.SkillId.sphereLore;
|
||||
|
||||
export const SkillId_astronomy: string = IdsBS.SkillId.astronomy;
|
||||
|
||||
export const SkillId_alchemy: string = IdsBS.SkillId.alchemy;
|
||||
|
||||
export const SkillId_sailing: string = IdsBS.SkillId.sailing;
|
||||
|
||||
export const SkillId_driving: string = IdsBS.SkillId.driving;
|
||||
|
||||
export const SkillId_commerce: string = IdsBS.SkillId.commerce;
|
||||
|
||||
export const SkillId_treatPoison: string = IdsBS.SkillId.treatPoison;
|
||||
|
||||
export const SkillId_treatDisease: string = IdsBS.SkillId.treatDisease;
|
||||
|
||||
export const SkillId_treatSoul: string = IdsBS.SkillId.treatSoul;
|
||||
|
||||
export const SkillId_treatWounds: string = IdsBS.SkillId.treatWounds;
|
||||
|
||||
export const SkillId_woodworking: string = IdsBS.SkillId.woodworking;
|
||||
|
||||
export const SkillId_prepareFood: string = IdsBS.SkillId.prepareFood;
|
||||
|
||||
export const SkillId_leatherworking: string = IdsBS.SkillId.leatherworking;
|
||||
|
||||
export const SkillId_artisticAbility: string = IdsBS.SkillId.artisticAbility;
|
||||
|
||||
export const SkillId_metalworking: string = IdsBS.SkillId.metalworking;
|
||||
|
||||
export const SkillId_music: string = IdsBS.SkillId.music;
|
||||
|
||||
export const SkillId_pickLocks: string = IdsBS.SkillId.pickLocks;
|
||||
|
||||
export const SkillId_earthencraft: string = IdsBS.SkillId.earthencraft;
|
||||
|
||||
export const SkillId_clothworking: string = IdsBS.SkillId.clothworking;
|
||||
|
||||
export const CombatTechniqueId_crossbows: string = IdsBS.CombatTechniqueId.crossbows;
|
||||
|
||||
export const CombatTechniqueId_bows: string = IdsBS.CombatTechniqueId.bows;
|
||||
|
||||
export const CombatTechniqueId_daggers: string = IdsBS.CombatTechniqueId.daggers;
|
||||
|
||||
export const CombatTechniqueId_fencingWeapons: string = IdsBS.CombatTechniqueId.fencingWeapons;
|
||||
|
||||
export const CombatTechniqueId_impactWeapons: string = IdsBS.CombatTechniqueId.impactWeapons;
|
||||
|
||||
export const CombatTechniqueId_chainWeapons: string = IdsBS.CombatTechniqueId.chainWeapons;
|
||||
|
||||
export const CombatTechniqueId_lances: string = IdsBS.CombatTechniqueId.lances;
|
||||
|
||||
export const CombatTechniqueId_brawling: string = IdsBS.CombatTechniqueId.brawling;
|
||||
|
||||
export const CombatTechniqueId_shields: string = IdsBS.CombatTechniqueId.shields;
|
||||
|
||||
export const CombatTechniqueId_slings: string = IdsBS.CombatTechniqueId.slings;
|
||||
|
||||
export const CombatTechniqueId_swords: string = IdsBS.CombatTechniqueId.swords;
|
||||
|
||||
export const CombatTechniqueId_polearms: string = IdsBS.CombatTechniqueId.polearms;
|
||||
|
||||
export const CombatTechniqueId_thrownWeapons: string = IdsBS.CombatTechniqueId.thrownWeapons;
|
||||
|
||||
export const CombatTechniqueId_twoHandedImpactWeapons: string = IdsBS.CombatTechniqueId.twoHandedImpactWeapons;
|
||||
|
||||
export const CombatTechniqueId_twoHandedSwords: string = IdsBS.CombatTechniqueId.twoHandedSwords;
|
||||
|
||||
export const CombatTechniqueId_spittingFire: string = IdsBS.CombatTechniqueId.spittingFire;
|
||||
|
||||
export const CombatTechniqueId_blowguns: string = IdsBS.CombatTechniqueId.blowguns;
|
||||
|
||||
export const CombatTechniqueId_discuses: string = IdsBS.CombatTechniqueId.discuses;
|
||||
|
||||
export const CombatTechniqueId_faecher: string = IdsBS.CombatTechniqueId.faecher;
|
||||
|
||||
export const CombatTechniqueId_spiesswaffen: string = IdsBS.CombatTechniqueId.spiesswaffen;
|
||||
|
||||
export const SpecialAbilityId_skillSpecialization: string = IdsBS.SpecialAbilityId.skillSpecialization;
|
||||
|
||||
export const SpecialAbilityId_terrainKnowledge: string = IdsBS.SpecialAbilityId.terrainKnowledge;
|
||||
|
||||
export const SpecialAbilityId_craftInstruments: string = IdsBS.SpecialAbilityId.craftInstruments;
|
||||
|
||||
export const SpecialAbilityId_hunter: string = IdsBS.SpecialAbilityId.hunter;
|
||||
|
||||
export const SpecialAbilityId_areaKnowledge: string = IdsBS.SpecialAbilityId.areaKnowledge;
|
||||
|
||||
export const SpecialAbilityId_literacy: string = IdsBS.SpecialAbilityId.literacy;
|
||||
|
||||
export const SpecialAbilityId_language: string = IdsBS.SpecialAbilityId.language;
|
||||
|
||||
export const SpecialAbilityId_combatReflexes: string = IdsBS.SpecialAbilityId.combatReflexes;
|
||||
|
||||
export const SpecialAbilityId_improvedDodge: string = IdsBS.SpecialAbilityId.improvedDodge;
|
||||
|
||||
export const SpecialAbilityId_traditionGuildMages: number = IdsBS.SpecialAbilityId.traditionGuildMages;
|
||||
|
||||
export const SpecialAbilityId_propertyKnowledge: string = IdsBS.SpecialAbilityId.propertyKnowledge;
|
||||
|
||||
export const SpecialAbilityId_propertyFocus: string = IdsBS.SpecialAbilityId.propertyFocus;
|
||||
|
||||
export const SpecialAbilityId_aspectKnowledge: string = IdsBS.SpecialAbilityId.aspectKnowledge;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfPraios: string = IdsBS.SpecialAbilityId.traditionChurchOfPraios;
|
||||
|
||||
export const SpecialAbilityId_feuerschlucker: string = IdsBS.SpecialAbilityId.feuerschlucker;
|
||||
|
||||
export const SpecialAbilityId_combatStyleCombination: string = IdsBS.SpecialAbilityId.combatStyleCombination;
|
||||
|
||||
export const SpecialAbilityId_adaptionZauber: string = IdsBS.SpecialAbilityId.adaptionZauber;
|
||||
|
||||
export const SpecialAbilityId_exorzist: string = IdsBS.SpecialAbilityId.exorzist;
|
||||
|
||||
export const SpecialAbilityId_favoriteSpellwork: string = IdsBS.SpecialAbilityId.favoriteSpellwork;
|
||||
|
||||
export const SpecialAbilityId_traditionWitches: string = IdsBS.SpecialAbilityId.traditionWitches;
|
||||
|
||||
export const SpecialAbilityId_magicStyleCombination: string = IdsBS.SpecialAbilityId.magicStyleCombination;
|
||||
|
||||
export const SpecialAbilityId_harmoniezauberei: string = IdsBS.SpecialAbilityId.harmoniezauberei;
|
||||
|
||||
export const SpecialAbilityId_matrixzauberei: string = IdsBS.SpecialAbilityId.matrixzauberei;
|
||||
|
||||
export const SpecialAbilityId_traditionElves: string = IdsBS.SpecialAbilityId.traditionElves;
|
||||
|
||||
export const SpecialAbilityId_traditionDruids: string = IdsBS.SpecialAbilityId.traditionDruids;
|
||||
|
||||
export const SpecialAbilityId_spellEnhancement: number = IdsBS.SpecialAbilityId.spellEnhancement;
|
||||
|
||||
export const SpecialAbilityId_forschungsgebiet: string = IdsBS.SpecialAbilityId.forschungsgebiet;
|
||||
|
||||
export const SpecialAbilityId_expertenwissen: string = IdsBS.SpecialAbilityId.expertenwissen;
|
||||
|
||||
export const SpecialAbilityId_wissensdurst: string = IdsBS.SpecialAbilityId.wissensdurst;
|
||||
|
||||
export const SpecialAbilityId_recherchegespuer: string = IdsBS.SpecialAbilityId.recherchegespuer;
|
||||
|
||||
export const SpecialAbilityId_predigtDerGemeinschaft: string = IdsBS.SpecialAbilityId.predigtDerGemeinschaft;
|
||||
|
||||
export const SpecialAbilityId_predigtDerZuversicht: string = IdsBS.SpecialAbilityId.predigtDerZuversicht;
|
||||
|
||||
export const SpecialAbilityId_predigtDesGottvertrauens: string = IdsBS.SpecialAbilityId.predigtDesGottvertrauens;
|
||||
|
||||
export const SpecialAbilityId_predigtDesWohlgefallens: string = IdsBS.SpecialAbilityId.predigtDesWohlgefallens;
|
||||
|
||||
export const SpecialAbilityId_predigtWiderMissgeschicke: string = IdsBS.SpecialAbilityId.predigtWiderMissgeschicke;
|
||||
|
||||
export const SpecialAbilityId_visionDerBestimmung: string = IdsBS.SpecialAbilityId.visionDerBestimmung;
|
||||
|
||||
export const SpecialAbilityId_visionDerEntrueckung: string = IdsBS.SpecialAbilityId.visionDerEntrueckung;
|
||||
|
||||
export const SpecialAbilityId_visionDerGottheit: string = IdsBS.SpecialAbilityId.visionDerGottheit;
|
||||
|
||||
export const SpecialAbilityId_visionDesSchicksals: string = IdsBS.SpecialAbilityId.visionDesSchicksals;
|
||||
|
||||
export const SpecialAbilityId_visionDesWahrenGlaubens: string = IdsBS.SpecialAbilityId.visionDesWahrenGlaubens;
|
||||
|
||||
export const SpecialAbilityId_hoheWeihe: string = IdsBS.SpecialAbilityId.hoheWeihe;
|
||||
|
||||
export const SpecialAbilityId_lieblingsliturgie: string = IdsBS.SpecialAbilityId.lieblingsliturgie;
|
||||
|
||||
export const SpecialAbilityId_zugvoegel: string = IdsBS.SpecialAbilityId.zugvoegel;
|
||||
|
||||
export const SpecialAbilityId_jaegerinnenDerWeissenMaid: string = IdsBS.SpecialAbilityId.jaegerinnenDerWeissenMaid;
|
||||
|
||||
export const SpecialAbilityId_anhaengerDesGueldenen: string = IdsBS.SpecialAbilityId.anhaengerDesGueldenen;
|
||||
|
||||
export const SpecialAbilityId_gebieterDesAspekts: string = IdsBS.SpecialAbilityId.gebieterDesAspekts;
|
||||
|
||||
export const SpecialAbilityId_chantEnhancement: number = IdsBS.SpecialAbilityId.chantEnhancement;
|
||||
|
||||
export const SpecialAbilityId_dunklesAbbildDerBuendnisgabe: string = IdsBS.SpecialAbilityId.dunklesAbbildDerBuendnisgabe;
|
||||
|
||||
export const SpecialAbilityId_traditionIllusionist: string = IdsBS.SpecialAbilityId.traditionIllusionist;
|
||||
|
||||
export const SpecialAbilityId_traditionArcaneBard: string = IdsBS.SpecialAbilityId.traditionArcaneBard;
|
||||
|
||||
export const SpecialAbilityId_traditionArcaneDancer: string = IdsBS.SpecialAbilityId.traditionArcaneDancer;
|
||||
|
||||
export const SpecialAbilityId_traditionIntuitiveMage: string = IdsBS.SpecialAbilityId.traditionIntuitiveMage;
|
||||
|
||||
export const SpecialAbilityId_traditionSavant: string = IdsBS.SpecialAbilityId.traditionSavant;
|
||||
|
||||
export const SpecialAbilityId_traditionQabalyaMage: string = IdsBS.SpecialAbilityId.traditionQabalyaMage;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfRondra: string = IdsBS.SpecialAbilityId.traditionChurchOfRondra;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfBoron: string = IdsBS.SpecialAbilityId.traditionChurchOfBoron;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfHesinde: string = IdsBS.SpecialAbilityId.traditionChurchOfHesinde;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfPhex: string = IdsBS.SpecialAbilityId.traditionChurchOfPhex;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfPeraine: string = IdsBS.SpecialAbilityId.traditionChurchOfPeraine;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfEfferd: string = IdsBS.SpecialAbilityId.traditionChurchOfEfferd;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfTravia: string = IdsBS.SpecialAbilityId.traditionChurchOfTravia;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfFirun: string = IdsBS.SpecialAbilityId.traditionChurchOfFirun;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfTsa: string = IdsBS.SpecialAbilityId.traditionChurchOfTsa;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfIngerimm: string = IdsBS.SpecialAbilityId.traditionChurchOfIngerimm;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfRahja: string = IdsBS.SpecialAbilityId.traditionChurchOfRahja;
|
||||
|
||||
export const SpecialAbilityId_traditionCultOfTheNamelessOne: string = IdsBS.SpecialAbilityId.traditionCultOfTheNamelessOne;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfAves: string = IdsBS.SpecialAbilityId.traditionChurchOfAves;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfIfirn: string = IdsBS.SpecialAbilityId.traditionChurchOfIfirn;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfKor: string = IdsBS.SpecialAbilityId.traditionChurchOfKor;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfNandus: string = IdsBS.SpecialAbilityId.traditionChurchOfNandus;
|
||||
|
||||
export const SpecialAbilityId_traditionChurchOfSwafnir: string = IdsBS.SpecialAbilityId.traditionChurchOfSwafnir;
|
||||
|
||||
export const SpecialAbilityId_languageSpecializations: string = IdsBS.SpecialAbilityId.languageSpecializations;
|
||||
|
||||
export const SpecialAbilityId_traditionSchelme: string = IdsBS.SpecialAbilityId.traditionSchelme;
|
||||
|
||||
export const SpecialAbilityId_traditionZauberalchimisten: string = IdsBS.SpecialAbilityId.traditionZauberalchimisten;
|
||||
|
||||
export const SpecialAbilityId_grosseMeditation: string = IdsBS.SpecialAbilityId.grosseMeditation;
|
||||
|
||||
export const SpecialAbilityId_imitationszauberei: string = IdsBS.SpecialAbilityId.imitationszauberei;
|
||||
|
||||
export const SpecialAbilityId_kraftliniennutzung: string = IdsBS.SpecialAbilityId.kraftliniennutzung;
|
||||
|
||||
export const SpecialAbilityId_scholarDerHalleDesLebensZuNorburg: string = IdsBS.SpecialAbilityId.scholarDerHalleDesLebensZuNorburg;
|
||||
|
||||
export const SpecialAbilityId_scholarDesKreisesDerEinfuehlung: string = IdsBS.SpecialAbilityId.scholarDesKreisesDerEinfuehlung;
|
||||
|
||||
export const SpecialAbilityId_madaschwesternStil: string = IdsBS.SpecialAbilityId.madaschwesternStil;
|
||||
|
||||
export const SpecialAbilityId_garetherGossenStil: string = IdsBS.SpecialAbilityId.garetherGossenStil;
|
||||
|
||||
export const SpecialAbilityId_wegDerGelehrten: string = IdsBS.SpecialAbilityId.wegDerGelehrten;
|
||||
|
||||
export const SpecialAbilityId_traditionCultOfNuminoru: string = IdsBS.SpecialAbilityId.traditionCultOfNuminoru;
|
||||
|
||||
export const SpecialAbilityId_wegDerKuenstlerin: string = IdsBS.SpecialAbilityId.wegDerKuenstlerin;
|
||||
|
||||
export const SpecialAbilityId_wegDerSchreiberin: string = IdsBS.SpecialAbilityId.wegDerSchreiberin;
|
||||
|
||||
export const SpecialAbilityId_fachwissen: string = IdsBS.SpecialAbilityId.fachwissen;
|
||||
|
||||
export const SpecialAbilityId_handwerkskunst: string = IdsBS.SpecialAbilityId.handwerkskunst;
|
||||
|
||||
export const SpecialAbilityId_kindDerNatur: string = IdsBS.SpecialAbilityId.kindDerNatur;
|
||||
|
||||
export const SpecialAbilityId_koerperlichesGeschick: string = IdsBS.SpecialAbilityId.koerperlichesGeschick;
|
||||
|
||||
export const SpecialAbilityId_sozialeKompetenz: string = IdsBS.SpecialAbilityId.sozialeKompetenz;
|
||||
|
||||
export const SpecialAbilityId_universalgenie: string = IdsBS.SpecialAbilityId.universalgenie;
|
||||
|
||||
export const SpecialAbilityId_scholarDesMagierkollegsZuHoningen: string = IdsBS.SpecialAbilityId.scholarDesMagierkollegsZuHoningen;
|
||||
|
||||
export const SpecialAbilityId_traditionAnimisten: string = IdsBS.SpecialAbilityId.traditionAnimisten;
|
||||
|
||||
export const SpecialAbilityId_traditionGeoden: string = IdsBS.SpecialAbilityId.traditionGeoden;
|
||||
|
||||
export const SpecialAbilityId_traditionZibilijas: string = IdsBS.SpecialAbilityId.traditionZibilijas;
|
||||
|
||||
export const SpecialAbilityId_zaubervariabilitaet: string = IdsBS.SpecialAbilityId.zaubervariabilitaet;
|
||||
|
||||
export const SpecialAbilityId_traditionBrobimGeoden: string = IdsBS.SpecialAbilityId.traditionBrobimGeoden;
|
||||
|
||||
export const SocialStatusId_notFree: number = IdsBS.SocialStatusId.notFree;
|
||||
|
||||
export const SocialStatusId_free: number = IdsBS.SocialStatusId.free;
|
||||
|
||||
export const SocialStatusId_lesserNoble: number = IdsBS.SocialStatusId.lesserNoble;
|
||||
|
||||
export const SocialStatusId_noble: number = IdsBS.SocialStatusId.noble;
|
||||
|
||||
export const SocialStatusId_aristocracy: number = IdsBS.SocialStatusId.aristocracy;
|
||||
|
||||
export const OptionalRuleId_maximumAttributeScores: string = IdsBS.OptionalRuleId.maximumAttributeScores;
|
||||
|
||||
export const OptionalRuleId_languageSpecialization: string = IdsBS.OptionalRuleId.languageSpecialization;
|
||||
|
||||
export const OptionalRuleId_higherDefenseStats: string = IdsBS.OptionalRuleId.higherDefenseStats;
|
||||
|
||||
export const ConditionId_sikaryanVerlust: string = IdsBS.ConditionId.sikaryanVerlust;
|
||||
|
||||
export const ConditionId_daemonischeAuszehrung: string = IdsBS.ConditionId.daemonischeAuszehrung;
|
||||
|
||||
export const ExperienceLevelId: {
|
||||
masterly: string;
|
||||
inexperienced: string;
|
||||
brilliant: string;
|
||||
ordinary: string;
|
||||
experienced: string;
|
||||
competent: string;
|
||||
legendary: string
|
||||
} = IdsBS.ExperienceLevelId
|
||||
|
||||
export const ProfessionId: { customProfession: string } = IdsBS.ProfessionId
|
||||
|
||||
export const DCId: {
|
||||
dodge: string;
|
||||
movement: string;
|
||||
initiative: string;
|
||||
woundThreshold: string;
|
||||
toughness: string;
|
||||
karmaPoints: string;
|
||||
arcaneEnergy: string;
|
||||
spirit: string;
|
||||
lifePoints: string
|
||||
} = IdsBS.DCId
|
||||
|
||||
export const SkillId: {
|
||||
sailing: string;
|
||||
treatPoison: string;
|
||||
metalworking: string;
|
||||
etiquette: string;
|
||||
commerce: string;
|
||||
treatSoul: string;
|
||||
prepareFood: string;
|
||||
music: string;
|
||||
plantLore: string;
|
||||
driving: string;
|
||||
pickLocks: string;
|
||||
flying: string;
|
||||
religions: string;
|
||||
riding: string;
|
||||
empathy: string;
|
||||
gambling: string;
|
||||
sphereLore: string;
|
||||
singing: string;
|
||||
stealth: string;
|
||||
gaukelei: string;
|
||||
dancing: string;
|
||||
persuasion: string;
|
||||
intimidation: string;
|
||||
carousing: string;
|
||||
animalLore: string;
|
||||
bodyControl: string;
|
||||
history: string;
|
||||
earthencraft: string;
|
||||
survival: string;
|
||||
astronomy: string;
|
||||
perception: string;
|
||||
treatWounds: string;
|
||||
seduction: string;
|
||||
selfControl: string;
|
||||
disguise: string;
|
||||
ropes: string;
|
||||
climbing: string;
|
||||
willpower: string;
|
||||
fastTalk: string;
|
||||
streetwise: string;
|
||||
fishing: string;
|
||||
geography: string;
|
||||
mechanics: string;
|
||||
treatDisease: string;
|
||||
orienting: string;
|
||||
law: string;
|
||||
warfare: string;
|
||||
pickpocket: string;
|
||||
artisticAbility: string;
|
||||
clothworking: string;
|
||||
featOfStrength: string;
|
||||
tracking: string;
|
||||
mythsAndLegends: string;
|
||||
math: string;
|
||||
leatherworking: string;
|
||||
swimming: string;
|
||||
magicalLore: string;
|
||||
woodworking: string;
|
||||
alchemy: string
|
||||
} = IdsBS.SkillId
|
||||
|
||||
export const CultureId: {
|
||||
woodElves: string;
|
||||
gladeElves: string;
|
||||
firnelves: string;
|
||||
steppenelfen: string
|
||||
} = IdsBS.CultureId
|
||||
|
||||
export const Phase: {
|
||||
creation: number;
|
||||
inGame: number;
|
||||
rcp: number
|
||||
} = IdsBS.Phase
|
||||
|
||||
export const AdvantageId: {
|
||||
luck: string;
|
||||
exceptionalSkill: string;
|
||||
weaponAptitude: string;
|
||||
largeSpellSelection: string;
|
||||
hatredOf: string;
|
||||
zahlreichePredigten: string;
|
||||
einkommen: string;
|
||||
aptitude: string;
|
||||
prediger: string;
|
||||
sociallyAdaptable: string;
|
||||
immunityToDisease: string;
|
||||
nimble: string;
|
||||
increasedKarmaPoints: string;
|
||||
visionaer: string;
|
||||
inspireConfidence: string;
|
||||
spellcaster: string;
|
||||
exceptionalCombatTechnique: string;
|
||||
increasedAstralPower: string;
|
||||
zahlreicheVisionen: string;
|
||||
leichterGang: string;
|
||||
increasedLifePoints: string;
|
||||
unyielding: string;
|
||||
rich: string;
|
||||
blessed: string;
|
||||
increasedSpirit: string;
|
||||
immunityToPoison: string;
|
||||
increasedToughness: string;
|
||||
magicalAttunement: string
|
||||
} = IdsBS.AdvantageId
|
||||
|
||||
export const CombatTechniqueId: {
|
||||
discuses: string;
|
||||
swords: string;
|
||||
faecher: string;
|
||||
chainWeapons: string;
|
||||
twoHandedSwords: string;
|
||||
daggers: string;
|
||||
crossbows: string;
|
||||
brawling: string;
|
||||
thrownWeapons: string;
|
||||
lances: string;
|
||||
impactWeapons: string;
|
||||
slings: string;
|
||||
spittingFire: string;
|
||||
blowguns: string;
|
||||
fencingWeapons: string;
|
||||
twoHandedImpactWeapons: string;
|
||||
spiesswaffen: string;
|
||||
bows: string;
|
||||
shields: string;
|
||||
polearms: string
|
||||
} = IdsBS.CombatTechniqueId
|
||||
|
||||
export const SocialStatusId: {
|
||||
free: number;
|
||||
aristocracy: number;
|
||||
lesserNoble: number;
|
||||
notFree: number;
|
||||
noble: number
|
||||
} = IdsBS.SocialStatusId
|
||||
|
||||
export const DisadvantageId: {
|
||||
obligations: string;
|
||||
slow: string;
|
||||
wenigeVisionen: string;
|
||||
badLuck: string;
|
||||
maimed: string;
|
||||
wenigePredigten: string;
|
||||
decreasedLifePoints: string;
|
||||
incompetent: string;
|
||||
afraidOf: string;
|
||||
deaf: string;
|
||||
magicalRestriction: string;
|
||||
decreasedSpirit: string;
|
||||
noFlyingBalm: string;
|
||||
poor: string;
|
||||
smallSpellSelection: string;
|
||||
noFamiliar: string;
|
||||
decreasedArcanePower: string;
|
||||
principles: string;
|
||||
negativeTrait: string;
|
||||
stigma: string;
|
||||
badHabit: string;
|
||||
decreasedKarmaPoints: string;
|
||||
brittleBones: string;
|
||||
decreasedToughness: string;
|
||||
personalityFlaw: string
|
||||
} = IdsBS.DisadvantageId
|
||||
|
||||
export const ConditionId: { sikaryanVerlust: string; daemonischeAuszehrung: string } = IdsBS.ConditionId
|
||||
|
||||
export const RaceId: {
|
||||
humans: string;
|
||||
elves: string;
|
||||
dwarves: string;
|
||||
halfElves: string
|
||||
} = IdsBS.RaceId
|
||||
|
||||
export const AttrId: {
|
||||
intuition: string;
|
||||
charisma: string;
|
||||
agility: string;
|
||||
courage: string;
|
||||
sagacity: string;
|
||||
constitution: string;
|
||||
dexterity: string;
|
||||
strength: string
|
||||
} = IdsBS.AttrId
|
||||
|
||||
export const SpecialAbilityId: {
|
||||
universalgenie: string;
|
||||
traditionChurchOfTravia: string;
|
||||
imitationszauberei: string;
|
||||
garetherGossenStil: string;
|
||||
magicStyleCombination: string;
|
||||
forschungsgebiet: string;
|
||||
anhaengerDesGueldenen: string;
|
||||
visionDerBestimmung: string;
|
||||
visionDerEntrueckung: string;
|
||||
languageSpecializations: string;
|
||||
chantEnhancement: number;
|
||||
traditionChurchOfPhex: string;
|
||||
traditionChurchOfFirun: string;
|
||||
traditionChurchOfNandus: string;
|
||||
harmoniezauberei: string;
|
||||
craftInstruments: string;
|
||||
hoheWeihe: string;
|
||||
wegDerKuenstlerin: string;
|
||||
jaegerinnenDerWeissenMaid: string;
|
||||
kraftliniennutzung: string;
|
||||
sozialeKompetenz: string;
|
||||
traditionDruids: string;
|
||||
madaschwesternStil: string;
|
||||
expertenwissen: string;
|
||||
terrainKnowledge: string;
|
||||
recherchegespuer: string;
|
||||
visionDerGottheit: string;
|
||||
traditionChurchOfBoron: string;
|
||||
traditionGuildMages: number;
|
||||
traditionGeoden: string;
|
||||
dunklesAbbildDerBuendnisgabe: string;
|
||||
grosseMeditation: string;
|
||||
propertyKnowledge: string;
|
||||
traditionCultOfTheNamelessOne: string;
|
||||
areaKnowledge: string;
|
||||
traditionArcaneDancer: string;
|
||||
zugvoegel: string;
|
||||
traditionChurchOfAves: string;
|
||||
gebieterDesAspekts: string;
|
||||
propertyFocus: string;
|
||||
fachwissen: string;
|
||||
adaptionZauber: string;
|
||||
favoriteSpellwork: string;
|
||||
traditionArcaneBard: string;
|
||||
traditionSavant: string;
|
||||
traditionZauberalchimisten: string;
|
||||
wissensdurst: string;
|
||||
language: string;
|
||||
wegDerGelehrten: string;
|
||||
feuerschlucker: string;
|
||||
predigtDesGottvertrauens: string;
|
||||
traditionChurchOfHesinde: string;
|
||||
traditionChurchOfRahja: string;
|
||||
traditionChurchOfIfirn: string;
|
||||
traditionAnimisten: string;
|
||||
lieblingsliturgie: string;
|
||||
zaubervariabilitaet: string;
|
||||
traditionChurchOfPraios: string;
|
||||
predigtWiderMissgeschicke: string;
|
||||
scholarDesKreisesDerEinfuehlung: string;
|
||||
matrixzauberei: string;
|
||||
predigtDesWohlgefallens: string;
|
||||
exorzist: string;
|
||||
predigtDerGemeinschaft: string;
|
||||
kindDerNatur: string;
|
||||
traditionBrobimGeoden: string;
|
||||
traditionChurchOfPeraine: string;
|
||||
traditionIntuitiveMage: string;
|
||||
traditionElves: string;
|
||||
visionDesWahrenGlaubens: string;
|
||||
traditionWitches: string;
|
||||
traditionChurchOfIngerimm: string;
|
||||
literacy: string;
|
||||
combatReflexes: string;
|
||||
combatStyleCombination: string;
|
||||
scholarDerHalleDesLebensZuNorburg: string;
|
||||
traditionChurchOfEfferd: string;
|
||||
traditionChurchOfSwafnir: string;
|
||||
wegDerSchreiberin: string;
|
||||
koerperlichesGeschick: string;
|
||||
hunter: string;
|
||||
visionDesSchicksals: string;
|
||||
traditionCultOfNuminoru: string;
|
||||
traditionZibilijas: string;
|
||||
improvedDodge: string;
|
||||
traditionQabalyaMage: string;
|
||||
aspectKnowledge: string;
|
||||
spellEnhancement: number;
|
||||
traditionSchelme: string;
|
||||
predigtDerZuversicht: string;
|
||||
traditionChurchOfTsa: string;
|
||||
scholarDesMagierkollegsZuHoningen: string;
|
||||
skillSpecialization: string;
|
||||
traditionChurchOfRondra: string;
|
||||
traditionChurchOfKor: string;
|
||||
traditionIllusionist: string;
|
||||
handwerkskunst: string
|
||||
} = IdsBS.SpecialAbilityId
|
||||
|
||||
export const OptionalRuleId: {
|
||||
higherDefenseStats: string;
|
||||
maximumAttributeScores: string;
|
||||
languageSpecialization: string
|
||||
} = IdsBS.OptionalRuleId
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,39 @@
|
||||
import { List } from "../../Data/List"
|
||||
|
||||
export type Id =
|
||||
| { tag: "ExperienceLevel"; value: number }
|
||||
| { tag: "Race"; value: number }
|
||||
| { tag: "Culture"; value: number }
|
||||
| { tag: "Profession"; value: number }
|
||||
| { tag: "Attribute"; value: number }
|
||||
| { tag: "Advantage"; value: number }
|
||||
| { tag: "Disadvantage"; value: number }
|
||||
| { tag: "Skill"; value: number }
|
||||
| { tag: "CombatTechnique"; value: number }
|
||||
| { tag: "Spell"; value: number }
|
||||
| { tag: "Curse"; value: number }
|
||||
| { tag: "ElvenMagicalSong"; value: number }
|
||||
| { tag: "DominationRitual"; value: number }
|
||||
| { tag: "MagicalMelody"; value: number }
|
||||
| { tag: "MagicalDance"; value: number }
|
||||
| { tag: "RogueSpell"; value: number }
|
||||
| { tag: "AnimistForce"; value: number }
|
||||
| { tag: "GeodeRitual"; value: number }
|
||||
| { tag: "ZibiljaRitual"; value: number }
|
||||
| { tag: "Cantrip"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number }
|
||||
| { tag: "Blessing"; value: number }
|
||||
| { tag: "SpecialAbility"; value: number }
|
||||
| { tag: "Item"; value: number }
|
||||
| { tag: "EquipmentPackage"; value: number }
|
||||
| { tag: "HitZoneArmor"; value: number }
|
||||
| { tag: "Familiar"; value: number }
|
||||
| { tag: "Animal"; value: number }
|
||||
| { tag: "FocusRule"; value: number }
|
||||
| { tag: "OptionalRule"; value: number }
|
||||
| { tag: "Condition"; value: number }
|
||||
| { tag: "State"; value: number }
|
||||
|
||||
/**
|
||||
* Please keep enum members sorted by value and not by key!
|
||||
*/
|
||||
@@ -108,7 +142,7 @@ export enum AdvantageId {
|
||||
/**
|
||||
* Lists advantage IDs that have no influence on the AP maximum for advantages.
|
||||
*/
|
||||
export const AdvantageIdsNoMaxInfl = List<AdvantageId> (AdvantageId.Einkommen)
|
||||
export const AdvantageIdsNoMaxInfl = List<string> (AdvantageId.Einkommen)
|
||||
|
||||
export enum DisadvantageId {
|
||||
CustomDisadvantage = "DISADV_0",
|
||||
@@ -268,6 +302,7 @@ export enum SpecialAbilityId {
|
||||
Hunter = "SA_18",
|
||||
AreaKnowledge = "SA_22",
|
||||
Literacy = "SA_27",
|
||||
Writing = "SA_28",
|
||||
Language = "SA_29",
|
||||
CombatReflexes = "SA_51",
|
||||
ImprovedDodge = "SA_64",
|
||||
@@ -277,6 +312,7 @@ export enum SpecialAbilityId {
|
||||
AspectKnowledge = "SA_87",
|
||||
TraditionChurchOfPraios = "SA_86",
|
||||
Feuerschlucker = "SA_109",
|
||||
SpeedWriting = "SA_136",
|
||||
CombatStyleCombination = "SA_164",
|
||||
AdaptionZauber = "SA_231",
|
||||
Exorzist = "SA_240",
|
||||
@@ -285,6 +321,8 @@ export enum SpecialAbilityId {
|
||||
FavoriteSpellwork = "SA_250",
|
||||
TraditionWitches = "SA_255",
|
||||
MagicStyleCombination = "SA_266",
|
||||
Harmoniezauberei = "SA_296",
|
||||
Matrixzauberei = "SA_303",
|
||||
TraditionElves = "SA_345",
|
||||
TraditionDruids = "SA_346",
|
||||
SpellEnhancement = "SA_414",
|
||||
@@ -298,14 +336,14 @@ export enum SpecialAbilityId {
|
||||
PredigtDesWohlgefallens = "SA_547",
|
||||
PredigtWiderMissgeschicke = "SA_548",
|
||||
VisionDerBestimmung = "SA_549",
|
||||
VisionDerEntrückung = "SA_550",
|
||||
VisionDerEntrueckung = "SA_550",
|
||||
VisionDerGottheit = "SA_551",
|
||||
VisionDesSchicksals = "SA_552",
|
||||
VisionDesWahrenGlaubens = "SA_553",
|
||||
HoheWeihe = "SA_563",
|
||||
Lieblingsliturgie = "SA_569",
|
||||
Zugvoegel = "SA_623",
|
||||
JaegerinnenDerWeißenMaid = "SA_625",
|
||||
JaegerinnenDerWeissenMaid = "SA_625",
|
||||
AnhaengerDesGueldenen = "SA_632",
|
||||
GebieterDesAspekts = "SA_639",
|
||||
ChantEnhancement = "SA_663",
|
||||
@@ -345,10 +383,14 @@ export enum SpecialAbilityId {
|
||||
TraditionSchelme = "SA_726",
|
||||
TraditionZauberalchimisten = "SA_750",
|
||||
GrosseMeditation = "SA_772",
|
||||
Imitationszauberei = "SA_775",
|
||||
Kraftliniennutzung = "SA_781",
|
||||
ScholarDerHalleDesLebensZuNorburg = "SA_802",
|
||||
ScholarDesKreisesDerEinfuehlung = "SA_808",
|
||||
MadaschwesternStil = "SA_821",
|
||||
GaretherGossenStil = "SA_901",
|
||||
Kryptographie = "SA_1013",
|
||||
Kurzschrift = "SA_1016",
|
||||
WegDerGelehrten = "SA_1040",
|
||||
TraditionCultOfNuminoru = "SA_1049",
|
||||
WegDerKuenstlerin = "SA_1069",
|
||||
@@ -360,6 +402,7 @@ export enum SpecialAbilityId {
|
||||
SozialeKompetenz = "SA_1123",
|
||||
Universalgenie = "SA_1127",
|
||||
ScholarDesMagierkollegsZuHoningen = "SA_1147",
|
||||
TraditionCultOfLevthan = "SA_1187",
|
||||
TraditionAnimisten = "SA_1221",
|
||||
TraditionGeoden = "SA_1255",
|
||||
TraditionZibilijas = "SA_1293",
|
||||
@@ -381,3 +424,8 @@ export enum OptionalRuleId {
|
||||
LanguageSpecialization = "OR_15",
|
||||
HigherDefenseStats = "OR_17",
|
||||
}
|
||||
|
||||
export enum ConditionId {
|
||||
SikaryanVerlust = "COND_11",
|
||||
DaemonischeAuszehrung = "COND_14",
|
||||
}
|
||||
|
||||
@@ -19,7 +19,8 @@ const mapDispatchToProps = (dispatch: Dispatch<Action>) => ({
|
||||
|
||||
const connectAlertsContainer =
|
||||
connect<AlertsStateProps, AlertsDispatchProps, AlertsOwnProps, AppStateRecord> (
|
||||
mapStateToProps, mapDispatchToProps
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)
|
||||
|
||||
export const AlertsContainer = connectAlertsContainer (Alerts)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ipcRenderer, remote } from "electron"
|
||||
import * as remote from "@electron/remote"
|
||||
import { ipcRenderer } from "electron"
|
||||
import { connect } from "react-redux"
|
||||
import { Action } from "redux"
|
||||
import { Nothing } from "../../Data/Maybe"
|
||||
|
||||
@@ -10,8 +10,8 @@ import { getInitialStartingWealth } from "../Selectors/activatableSelectors"
|
||||
import { getHasCurrentNoAddedAP } from "../Selectors/adventurePointsSelectors"
|
||||
import { getCarryingCapacity } from "../Selectors/attributeSelectors"
|
||||
import { getFilteredCombatTechniques } from "../Selectors/combatTechniquesSelectors"
|
||||
import { getAvailableSortedEquipmentGroups, getFilteredItems, getFilteredItemTemplates, getTotalPrice, getTotalWeight } from "../Selectors/equipmentSelectors"
|
||||
import { getEquipmentFilterText, getItemTemplatesFilterText, getPurse, getIsAddRemoveMoneyOpen } from "../Selectors/stateSelectors"
|
||||
import { getAvailableSortedEquipmentGroups, getFilteredItems, getFilteredSortedItemTemplates, getTotalPrice, getTotalWeight } from "../Selectors/equipmentSelectors"
|
||||
import { getEquipmentFilterText, getIsAddRemoveMoneyOpen, getItemTemplatesFilterText, getPurse } from "../Selectors/stateSelectors"
|
||||
import { getEquipmentSortOrder, getMeleeItemTemplateCombatTechniqueFilter, getRangedItemTemplateCombatTechniqueFilter } from "../Selectors/uisettingsSelectors"
|
||||
import { Equipment, EquipmentDispatchProps, EquipmentOwnProps, EquipmentStateProps } from "../Views/Equipment/Equipment"
|
||||
|
||||
@@ -24,7 +24,7 @@ const mapStateToProps =
|
||||
hasNoAddedAP: getHasCurrentNoAddedAP (state),
|
||||
purse: getPurse (state),
|
||||
sortOrder: getEquipmentSortOrder (state),
|
||||
templates: getFilteredItemTemplates (state, ownProps),
|
||||
templates: getFilteredSortedItemTemplates (state, ownProps),
|
||||
totalPrice: getTotalPrice (state),
|
||||
totalWeight: getTotalWeight (state),
|
||||
meleeItemTemplateCombatTechniqueFilter: getMeleeItemTemplateCombatTechniqueFilter (state),
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import { connect } from "react-redux"
|
||||
import { Action } from "redux"
|
||||
import { fromJust, isJust, Just, Maybe } from "../../Data/Maybe"
|
||||
import { fromJust, isJust, Maybe } from "../../Data/Maybe"
|
||||
import { OrderedSet } from "../../Data/OrderedSet"
|
||||
import { ReduxDispatch } from "../Actions/Actions"
|
||||
import * as HerolistActions from "../Actions/HerolistActions"
|
||||
import * as IOActions from "../Actions/IOActions"
|
||||
import * as LocationActions from "../Actions/LocationActions"
|
||||
import * as SubwindowsActions from "../Actions/SubwindowsActions"
|
||||
import { AppStateRecord } from "../Models/AppState"
|
||||
import { HeroListSortOptions, HeroListVisibilityFilter } from "../Models/Config"
|
||||
@@ -13,7 +12,6 @@ import { getSortedBooks } from "../Selectors/bookSelectors"
|
||||
import { getSortedHerolist, getUnsavedHeroesById } from "../Selectors/herolistSelectors"
|
||||
import { getCurrentHeroPresent, getHerolistFilterText, getIsCharacterCreatorOpen, getUsers, getWiki, getWikiExperienceLevels } from "../Selectors/stateSelectors"
|
||||
import { getHerolistSortOrder, getHerolistVisibilityFilter } from "../Selectors/uisettingsSelectors"
|
||||
import { TabId } from "../Utilities/LocationUtils"
|
||||
import { Herolist, HerolistDispatchProps, HerolistOwnProps, HerolistStateProps } from "../Views/Heroes/Herolist"
|
||||
|
||||
const mapStateToProps = (state: AppStateRecord) => ({
|
||||
@@ -30,25 +28,7 @@ const mapStateToProps = (state: AppStateRecord) => ({
|
||||
wiki: getWiki (state),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch<Action>) => ({
|
||||
loadHero (id: string) {
|
||||
dispatch (HerolistActions.loadHero (id))
|
||||
},
|
||||
showHero () {
|
||||
dispatch (LocationActions.setTab (TabId.Profile))
|
||||
},
|
||||
async saveHero (id: string) {
|
||||
await dispatch (HerolistActions.saveHero (Just (id)))
|
||||
},
|
||||
saveHeroAsJSON (id: string) {
|
||||
dispatch (HerolistActions.exportHeroValidate (id))
|
||||
},
|
||||
async deleteHero (id: string) {
|
||||
await dispatch (HerolistActions.deleteHeroValidate (id))
|
||||
},
|
||||
duplicateHero (id: string) {
|
||||
dispatch (HerolistActions.duplicateHero (id))
|
||||
},
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch<Action>): HerolistDispatchProps => ({
|
||||
createHero (
|
||||
name: string,
|
||||
sex: "m" | "f",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { connect } from "react-redux"
|
||||
import { Action } from "redux"
|
||||
import { join, Just } from "../../Data/Maybe"
|
||||
import { join } from "../../Data/Maybe"
|
||||
import { ReduxDispatch } from "../Actions/Actions"
|
||||
import * as HerolistActions from "../Actions/HerolistActions"
|
||||
import * as LocationActions from "../Actions/LocationActions"
|
||||
@@ -32,7 +32,7 @@ const mapDispatchToProps = (
|
||||
dispatch (LocationActions.setTab (TabId.Profile))
|
||||
},
|
||||
async saveHero () {
|
||||
await dispatch (HerolistActions.saveHero (Just (HA.id (hero))))
|
||||
await dispatch (HerolistActions.saveHero (HA.id (hero)))
|
||||
},
|
||||
saveHeroAsJSON () {
|
||||
dispatch (HerolistActions.exportHeroValidate (HA.id (hero)))
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
import { connect } from "react-redux"
|
||||
import { Maybe } from "../../Data/Maybe"
|
||||
import { Pair } from "../../Data/Tuple"
|
||||
import { ReduxDispatch } from "../Actions/Actions"
|
||||
import * as EquipmentActions from "../Actions/EquipmentActions"
|
||||
import { AttrId } from "../Constants/Ids"
|
||||
import { AppStateRecord } from "../Models/AppState"
|
||||
import { getSortedTemplates } from "../Selectors/equipmentSelectors"
|
||||
import { HeroModelRecord } from "../Models/Hero/HeroModel"
|
||||
import { Range } from "../Models/Hero/Item"
|
||||
import { getSortedItemTemplates } from "../Selectors/equipmentSelectors"
|
||||
import { getIsItemCreation, getItemEditorInstance, getWikiAttributes, getWikiCombatTechniques } from "../Selectors/stateSelectors"
|
||||
import { ItemEditor, ItemEditorDispatchProps, ItemEditorOwnProps, ItemEditorStateProps } from "../Views/Equipment/ItemEditor"
|
||||
|
||||
const mapStateToProps =
|
||||
(state: AppStateRecord): ItemEditorStateProps => ({
|
||||
(state: AppStateRecord, ownProps: { hero: HeroModelRecord }): ItemEditorStateProps => ({
|
||||
attributes: getWikiAttributes (state),
|
||||
combatTechniques: getWikiCombatTechniques (state),
|
||||
isInCreation: getIsItemCreation (state),
|
||||
item: getItemEditorInstance (state),
|
||||
templates: getSortedTemplates (state),
|
||||
templates: getSortedItemTemplates (state, ownProps),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch): ItemEditorDispatchProps => ({
|
||||
@@ -59,7 +63,7 @@ const mapDispatchToProps = (dispatch: ReduxDispatch): ItemEditorDispatchProps =>
|
||||
setDamageFlat (value: string): void {
|
||||
dispatch (EquipmentActions.setDamageFlat (value))
|
||||
},
|
||||
setPrimaryAttribute (primary: Maybe<string>): void {
|
||||
setPrimaryAttribute (primary: Maybe<AttrId | Pair<AttrId, AttrId>>): void {
|
||||
dispatch (EquipmentActions.setPrimaryAttribute (primary))
|
||||
},
|
||||
setDamageThreshold (value: string): void {
|
||||
@@ -89,8 +93,8 @@ const mapDispatchToProps = (dispatch: ReduxDispatch): ItemEditorDispatchProps =>
|
||||
setStructurePoints (value: string): void {
|
||||
dispatch (EquipmentActions.setStructurePoints (value))
|
||||
},
|
||||
setRange (index: 1 | 2 | 3): (value: string) => void {
|
||||
return value => dispatch (EquipmentActions.setRange (value, index))
|
||||
setRange (key: keyof Range): (value: string) => void {
|
||||
return value => dispatch (EquipmentActions.setRange (value, key))
|
||||
},
|
||||
setReloadTime (value: string): void {
|
||||
dispatch (EquipmentActions.setReloadTime (value))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { connect } from "react-redux"
|
||||
import { bind, join, Nothing } from "../../Data/Maybe"
|
||||
import { bind, join } from "../../Data/Maybe"
|
||||
import { ReduxDispatch } from "../Actions/Actions"
|
||||
import * as HerolistActions from "../Actions/HerolistActions"
|
||||
import * as HistoryActions from "../Actions/HistoryActions"
|
||||
@@ -16,6 +16,7 @@ import { getIsSpellsTabAvailable } from "../Selectors/spellsSelectors"
|
||||
import { getAvatar, getCurrentTab, getIsSettingsOpen } from "../Selectors/stateSelectors"
|
||||
import { getIsHeroSection, getSubtabs, getTabs } from "../Selectors/uilocationSelectors"
|
||||
import { TabId } from "../Utilities/LocationUtils"
|
||||
import { toNewMaybe } from "../Utilities/Maybe"
|
||||
import { NavigationBar, NavigationBarDispatchProps, NavigationBarOwnProps, NavigationBarStateProps } from "../Views/NavBar/NavigationBar"
|
||||
|
||||
const mapStateToProps =
|
||||
@@ -38,7 +39,7 @@ const mapStateToProps =
|
||||
isBlessedOne: getIsLiturgicalChantsTabAvailable (state, ownProps),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch, ownProps: NavigationBarOwnProps) => ({
|
||||
setTab (id: TabId) {
|
||||
dispatch (LocationActions.setTab (id))
|
||||
},
|
||||
@@ -49,7 +50,10 @@ const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
|
||||
dispatch (HistoryActions.redo ())
|
||||
},
|
||||
async saveHero () {
|
||||
await dispatch (HerolistActions.saveHero (Nothing))
|
||||
const mhero = toNewMaybe (ownProps.mhero)
|
||||
if (mhero.isJust) {
|
||||
await dispatch (HerolistActions.saveHero (HeroModel.A.id (mhero.value)))
|
||||
}
|
||||
},
|
||||
openSettings () {
|
||||
dispatch (SubwindowsActions.openSettings ())
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { ipcRenderer } from "electron"
|
||||
import { connect } from "react-redux"
|
||||
import { fromJust, isJust, Maybe } from "../../Data/Maybe"
|
||||
import { ReduxDispatch } from "../Actions/Actions"
|
||||
@@ -10,7 +11,7 @@ import { Locale, Theme } from "../Models/Config"
|
||||
import { getUserSelectableSupportedLanguages } from "../Selectors/localeSelectors"
|
||||
import { getFallbackLocaleId, getFallbackLocaleType, getLocaleId, getLocaleType } from "../Selectors/stateSelectors"
|
||||
import { areAnimationsEnabled, getIsEditingHeroAfterCreationPhaseEnabled, getTheme } from "../Selectors/uisettingsSelectors"
|
||||
import { isUpdaterEnabled } from "../Utilities/CheckForUpdatesRenderer"
|
||||
import { IPCChannels } from "../Utilities/IPCChannels"
|
||||
import { Settings, SettingsDispatchProps, SettingsOwnProps, SettingsStateProps } from "../Views/Settings/Settings"
|
||||
|
||||
const mapStateToProps = (state: AppStateRecord): SettingsStateProps => ({
|
||||
@@ -22,7 +23,7 @@ const mapStateToProps = (state: AppStateRecord): SettingsStateProps => ({
|
||||
areAnimationsEnabled: areAnimationsEnabled (state),
|
||||
theme: getTheme (state),
|
||||
languages: getUserSelectableSupportedLanguages (state),
|
||||
isCheckForUpdatesDisabled: !isUpdaterEnabled (),
|
||||
isCheckForUpdatesDisabled: !(ipcRenderer.sendSync (IPCChannels.IsUpdaterEnabled) as boolean),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch): SettingsDispatchProps => ({
|
||||
|
||||
@@ -23,6 +23,7 @@ import { getAllSkills } from "../Selectors/skillsSelectors"
|
||||
import { getCantripsForSheet, getSpellsForSheet } from "../Selectors/spellsSelectors"
|
||||
import { getAvatar, getCurrentHeroName, getCurrentSex, getProfile, getPurse, getSpecialAbilities, getWikiBooks, getWikiSpecialAbilities } from "../Selectors/stateSelectors"
|
||||
import { getSheetCheckAttributeValueVisibility, getSheetUseParchment, getSheetZoomFactor } from "../Selectors/uisettingsSelectors"
|
||||
import { requestExportHeroAsRptok } from "../Utilities/MapToolExporter"
|
||||
import { pipe } from "../Utilities/pipe"
|
||||
import { mapGetToMaybeSlice, mapGetToSlice } from "../Utilities/SelectorsUtils"
|
||||
import { Sheets, SheetsDispatchProps, SheetsOwnProps, SheetsStateProps } from "../Views/Sheets/Sheets"
|
||||
@@ -90,7 +91,7 @@ const mapStateToProps = (state: AppStateRecord, ownProps: SheetsOwnProps): Sheet
|
||||
skillsByGroup: getSkillsByGroup (state),
|
||||
})
|
||||
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
|
||||
const mapDispatchToProps = (dispatch: ReduxDispatch, ownProps: SheetsOwnProps) => ({
|
||||
switchAttributeValueVisibility () {
|
||||
dispatch (SheetActions.switchAttributeValueVisibility ())
|
||||
},
|
||||
@@ -103,6 +104,9 @@ const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
|
||||
async printToPDF () {
|
||||
await dispatch (requestPrintHeroToPDF ())
|
||||
},
|
||||
async exportAsRptok () {
|
||||
await dispatch (requestExportHeroAsRptok (ownProps.hero))
|
||||
},
|
||||
})
|
||||
|
||||
export const connectSheets =
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
'use strict';
|
||||
|
||||
var Json_decode = require("@glennsl/bs-json/src/Json_decode.bs.js");
|
||||
|
||||
function t(json) {
|
||||
var scope = Json_decode.string(json);
|
||||
switch (scope) {
|
||||
case "SPI" :
|
||||
Json_decode.$$int(json);
|
||||
return /* SPI */0;
|
||||
case "SPI/2" :
|
||||
Json_decode.$$int(json);
|
||||
return /* DOUBLE_SPI */1;
|
||||
case "SPI/TOU" :
|
||||
Json_decode.$$int(json);
|
||||
return /* MAX_SPI_TOU */3;
|
||||
case "TOU" :
|
||||
Json_decode.$$int(json);
|
||||
return /* TOU */2;
|
||||
default:
|
||||
throw {
|
||||
RE_EXN_ID: Json_decode.DecodeError,
|
||||
_1: "Unknown check modifier: " + scope,
|
||||
Error: new Error()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
var Decode = {
|
||||
t: t
|
||||
};
|
||||
|
||||
exports.Decode = Decode;
|
||||
/* No side effect */
|
||||
@@ -1,23 +0,0 @@
|
||||
type t =
|
||||
| SPI
|
||||
| DOUBLE_SPI
|
||||
| TOU
|
||||
| MAX_SPI_TOU;
|
||||
|
||||
module Decode = {
|
||||
open Json.Decode;
|
||||
|
||||
let t = json =>
|
||||
json
|
||||
|> string
|
||||
|> (
|
||||
scope =>
|
||||
switch (scope) {
|
||||
| "SPI" => json |> int |> (_ => SPI)
|
||||
| "SPI/2" => json |> int |> (_ => DOUBLE_SPI)
|
||||
| "TOU" => json |> int |> (_ => TOU)
|
||||
| "SPI/TOU" => json |> int |> (_ => MAX_SPI_TOU)
|
||||
| _ => raise(DecodeError("Unknown check modifier: " ++ scope))
|
||||
}
|
||||
);
|
||||
};
|
||||
@@ -1,32 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
'use strict';
|
||||
|
||||
|
||||
var Rules = {};
|
||||
|
||||
var Activatable = {};
|
||||
|
||||
var Attribute = {};
|
||||
|
||||
var Energies = {};
|
||||
|
||||
var ActivatableSkill = {};
|
||||
|
||||
var Skill = {};
|
||||
|
||||
var Item = {};
|
||||
|
||||
var Pact = {};
|
||||
|
||||
var TransferUnfamiliar = {};
|
||||
|
||||
exports.Rules = Rules;
|
||||
exports.Activatable = Activatable;
|
||||
exports.Attribute = Attribute;
|
||||
exports.Energies = Energies;
|
||||
exports.ActivatableSkill = ActivatableSkill;
|
||||
exports.Skill = Skill;
|
||||
exports.Item = Item;
|
||||
exports.Pact = Pact;
|
||||
exports.TransferUnfamiliar = TransferUnfamiliar;
|
||||
/* No side effect */
|
||||
@@ -1,407 +0,0 @@
|
||||
/* TypeScript file generated from Hero.re by genType. */
|
||||
/* eslint-disable import/first */
|
||||
|
||||
|
||||
import {activatableAndSkillId as Ids_activatableAndSkillId} from '../../../src/App/Constants/Ids.gen';
|
||||
|
||||
import {activatableId as Ids_activatableId} from '../../../src/App/Constants/Ids.gen';
|
||||
|
||||
import {hitZoneArmorZoneItemId as Ids_hitZoneArmorZoneItemId} from '../../../src/App/Constants/Ids.gen';
|
||||
|
||||
import {list} from '../../../src/shims/ReasonPervasives.shim';
|
||||
|
||||
import {maybe as Maybe_maybe} from '../../../src/Data/Maybe.gen';
|
||||
|
||||
import {oneOrMany as GenericHelpers_oneOrMany} from '../../../src/App/Utilities/GenericHelpers.gen';
|
||||
|
||||
import {selectOptionId as Ids_selectOptionId} from '../../../src/App/Constants/Ids.gen';
|
||||
|
||||
import {t as IntMap_t} from '../../../src/shims/IntMap.gen';
|
||||
|
||||
import {t as IntSet_t} from '../../../src/shims/IntSet.gen';
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type phase = "Outline" | "Definition" | "Advancement";
|
||||
export type Phase = phase;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type sex = "Male" | "Female";
|
||||
export type Sex = sex;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type baseOrWithVariant =
|
||||
{ tag: "Base"; value: number }
|
||||
| { tag: "WithVariant"; value: [number, number] };
|
||||
export type BaseOrWithVariant = baseOrWithVariant;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Rules_activeRule = { readonly id: number; readonly options: list<number> };
|
||||
export type ActiveRule = Rules_activeRule;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Rules_t = {
|
||||
readonly areAllPublicationsActive: boolean;
|
||||
readonly activePublications: list<string>;
|
||||
readonly activeFocusRules: list<Rules_activeRule>;
|
||||
readonly activeOptionalRules: list<Rules_activeRule>
|
||||
};
|
||||
export type Rules = Rules_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type personalData = {
|
||||
readonly family: Maybe_maybe<string>;
|
||||
readonly placeOfBirth: Maybe_maybe<string>;
|
||||
readonly dateOfBirth: Maybe_maybe<string>;
|
||||
readonly age: Maybe_maybe<string>;
|
||||
readonly hairColor: Maybe_maybe<number>;
|
||||
readonly eyeColor: Maybe_maybe<number>;
|
||||
readonly size: Maybe_maybe<string>;
|
||||
readonly weight: Maybe_maybe<string>;
|
||||
readonly title: Maybe_maybe<string>;
|
||||
readonly socialStatus: Maybe_maybe<number>;
|
||||
readonly characteristics: Maybe_maybe<string>;
|
||||
readonly otherInfo: Maybe_maybe<string>;
|
||||
readonly cultureAreaKnowledge: Maybe_maybe<string>
|
||||
};
|
||||
export type PersonalData = personalData;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Activatable_option =
|
||||
{ NAME: "Generic"; VAL: number }
|
||||
| { NAME: "Skill"; VAL: number }
|
||||
| { NAME: "CombatTechnique"; VAL: number }
|
||||
| { NAME: "Spell"; VAL: number }
|
||||
| { NAME: "Cantrip"; VAL: number }
|
||||
| { NAME: "LiturgicalChant"; VAL: number }
|
||||
| { NAME: "Blessing"; VAL: number }
|
||||
| { NAME: "CustomInput"; VAL: string };
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Activatable_single = {
|
||||
readonly options: list<Activatable_option>;
|
||||
readonly level: Maybe_maybe<number>;
|
||||
readonly customCost: Maybe_maybe<number>
|
||||
};
|
||||
export type ActivatableSingle = Activatable_single;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Activatable_dependency = {
|
||||
readonly source: Ids_activatableId;
|
||||
readonly target: GenericHelpers_oneOrMany<Ids_activatableId>;
|
||||
readonly active: boolean;
|
||||
readonly options: list<GenericHelpers_oneOrMany<Ids_selectOptionId>>;
|
||||
readonly level: Maybe_maybe<number>
|
||||
};
|
||||
export type ActivatableDependency = Activatable_dependency;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Activatable_t = {
|
||||
readonly id: number;
|
||||
readonly active: list<Activatable_single>;
|
||||
readonly dependencies: list<Activatable_dependency>
|
||||
};
|
||||
export type Activatable = Activatable_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Attribute_dependency = {
|
||||
readonly source: Ids_activatableId;
|
||||
readonly target: GenericHelpers_oneOrMany<number>;
|
||||
readonly value: Maybe_maybe<number>
|
||||
};
|
||||
export type AttributeDependency = Attribute_dependency;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Attribute_t = {
|
||||
readonly id: number;
|
||||
readonly value: number;
|
||||
readonly dependencies: list<Attribute_dependency>
|
||||
};
|
||||
export type Attribute = Attribute_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Energies_permanentEnergyLoss = { readonly lost: number };
|
||||
export type PermanentEnergyLoss = Energies_permanentEnergyLoss;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Energies_permanentEnergyLossAndBoughtBack = { readonly lost: number; readonly boughtBack: number };
|
||||
export type PermanentEnergyLossAndBoughtBack = Energies_permanentEnergyLossAndBoughtBack;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Energies_t = {
|
||||
readonly addedLifePoints: number;
|
||||
readonly addedArcaneEnergyPoints: number;
|
||||
readonly addedKarmaPoints: number;
|
||||
readonly permanentLifePoints: Energies_permanentEnergyLoss;
|
||||
readonly permanentArcaneEnergyPoints: Energies_permanentEnergyLossAndBoughtBack;
|
||||
readonly permanentKarmaPoints: Energies_permanentEnergyLossAndBoughtBack
|
||||
};
|
||||
export type Energies = Energies_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type ActivatableSkill_value =
|
||||
"Inactive"
|
||||
| { tag: "Active"; value: number };
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type ActivatableSkill_dependency = {
|
||||
readonly source: Ids_activatableAndSkillId;
|
||||
readonly target: GenericHelpers_oneOrMany<number>;
|
||||
readonly value: ActivatableSkill_value
|
||||
};
|
||||
export type ActivatableSkillDependency = ActivatableSkill_dependency;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type ActivatableSkill_t = {
|
||||
readonly id: number;
|
||||
readonly value: ActivatableSkill_value;
|
||||
readonly dependencies: list<ActivatableSkill_dependency>
|
||||
};
|
||||
export type ActivatableSkill = ActivatableSkill_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Skill_dependency = {
|
||||
readonly source: Ids_activatableId;
|
||||
readonly target: GenericHelpers_oneOrMany<number>;
|
||||
readonly value: number
|
||||
};
|
||||
export type SkillDependency = Skill_dependency;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Skill_t = {
|
||||
readonly id: number;
|
||||
readonly value: number;
|
||||
readonly dependencies: list<Skill_dependency>
|
||||
};
|
||||
export type Skill = Skill_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_mundaneItem = { readonly structurePoints: Maybe_maybe<GenericHelpers_oneOrMany<number>> };
|
||||
export type MundaneItem = Item_mundaneItem;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_primaryAttributeDamageThreshold =
|
||||
{ tag: "SameAttribute"; value: number }
|
||||
| { tag: "AgilityStrength"; value: [number, number] }
|
||||
| { tag: "DifferentAttribute"; value: [number, number] };
|
||||
export type PrimaryAttributeDamageThreshold = Item_primaryAttributeDamageThreshold;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_damage = {
|
||||
readonly amount: number;
|
||||
readonly sides: number;
|
||||
readonly flat: Maybe_maybe<number>
|
||||
};
|
||||
export type Damage = Item_damage;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_meleeWeapon = {
|
||||
readonly combatTechnique: number;
|
||||
readonly damage: Item_damage;
|
||||
readonly primaryAttributeDamageThreshold: Maybe_maybe<Item_primaryAttributeDamageThreshold>;
|
||||
readonly at: Maybe_maybe<number>;
|
||||
readonly pa: Maybe_maybe<number>;
|
||||
readonly reach: Maybe_maybe<number>;
|
||||
readonly length: Maybe_maybe<number>;
|
||||
readonly structurePoints: Maybe_maybe<GenericHelpers_oneOrMany<number>>;
|
||||
readonly breakingPointRatingMod: Maybe_maybe<number>;
|
||||
readonly isParryingWeapon: boolean;
|
||||
readonly isTwoHandedWeapon: boolean;
|
||||
readonly isImprovisedWeapon: boolean;
|
||||
readonly damaged: Maybe_maybe<number>
|
||||
};
|
||||
export type MeleeWeapon = Item_meleeWeapon;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_rangedWeapon = {
|
||||
readonly combatTechnique: number;
|
||||
readonly damage: Maybe_maybe<Item_damage>;
|
||||
readonly length: Maybe_maybe<number>;
|
||||
readonly range: [number, number, number];
|
||||
readonly reloadTime: GenericHelpers_oneOrMany<number>;
|
||||
readonly ammunition: Maybe_maybe<number>;
|
||||
readonly isImprovisedWeapon: boolean;
|
||||
readonly damaged: Maybe_maybe<number>
|
||||
};
|
||||
export type RangedWeapon = Item_rangedWeapon;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_armor = {
|
||||
readonly protection: number;
|
||||
readonly encumbrance: number;
|
||||
readonly hasAdditionalPenalties: boolean;
|
||||
readonly iniMod: Maybe_maybe<number>;
|
||||
readonly movMod: Maybe_maybe<number>;
|
||||
readonly sturdinessMod: Maybe_maybe<number>;
|
||||
readonly armorType: number;
|
||||
readonly wear: Maybe_maybe<number>;
|
||||
readonly isHitZoneArmorOnly: Maybe_maybe<boolean>
|
||||
};
|
||||
export type Armor = Item_armor;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_special =
|
||||
{ tag: "MundaneItem"; value: Item_mundaneItem }
|
||||
| { tag: "MeleeWeapon"; value: Item_meleeWeapon }
|
||||
| { tag: "RangedWeapon"; value: Item_rangedWeapon }
|
||||
| { tag: "CombinedWeapon"; value: [Item_meleeWeapon, Item_rangedWeapon] }
|
||||
| { tag: "Armor"; value: Item_armor };
|
||||
export type Special = Item_special;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Item_t = {
|
||||
readonly id: number;
|
||||
readonly amount: Maybe_maybe<number>;
|
||||
readonly price: Maybe_maybe<number>;
|
||||
readonly weight: Maybe_maybe<number>;
|
||||
readonly template: Maybe_maybe<number>;
|
||||
readonly isTemplateLocked: boolean;
|
||||
readonly carriedWhere: Maybe_maybe<string>;
|
||||
readonly special: Maybe_maybe<Item_special>;
|
||||
readonly gr: number
|
||||
};
|
||||
export type Item = Item_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type hitZoneArmor = {
|
||||
readonly id: number;
|
||||
readonly name: string;
|
||||
readonly head: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
|
||||
readonly headWear: Maybe_maybe<number>;
|
||||
readonly leftArm: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
|
||||
readonly leftArmWear: Maybe_maybe<number>;
|
||||
readonly rightArm: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
|
||||
readonly rightArmWear: Maybe_maybe<number>;
|
||||
readonly torso: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
|
||||
readonly torsoWear: Maybe_maybe<number>;
|
||||
readonly leftLeg: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
|
||||
readonly leftLegWear: Maybe_maybe<number>;
|
||||
readonly rightLeg: Maybe_maybe<Ids_hitZoneArmorZoneItemId>;
|
||||
readonly rightLegWear: Maybe_maybe<number>
|
||||
};
|
||||
export type HitZoneArmor = hitZoneArmor;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type purse = {
|
||||
readonly ducats: number;
|
||||
readonly silverthalers: number;
|
||||
readonly halers: number;
|
||||
readonly kreutzers: number
|
||||
};
|
||||
export type Purse = purse;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type pet = {
|
||||
readonly id: number;
|
||||
readonly name: string;
|
||||
readonly avatar: Maybe_maybe<string>;
|
||||
readonly size: Maybe_maybe<string>;
|
||||
readonly type: Maybe_maybe<string>;
|
||||
readonly attack: Maybe_maybe<string>;
|
||||
readonly dp: Maybe_maybe<string>;
|
||||
readonly reach: Maybe_maybe<string>;
|
||||
readonly actions: Maybe_maybe<string>;
|
||||
readonly skills: Maybe_maybe<string>;
|
||||
readonly abilities: Maybe_maybe<string>;
|
||||
readonly notes: Maybe_maybe<string>;
|
||||
readonly spentAp: Maybe_maybe<string>;
|
||||
readonly totalAp: Maybe_maybe<string>;
|
||||
readonly cou: Maybe_maybe<string>;
|
||||
readonly sgc: Maybe_maybe<string>;
|
||||
readonly int: Maybe_maybe<string>;
|
||||
readonly cha: Maybe_maybe<string>;
|
||||
readonly dex: Maybe_maybe<string>;
|
||||
readonly agi: Maybe_maybe<string>;
|
||||
readonly con: Maybe_maybe<string>;
|
||||
readonly str: Maybe_maybe<string>;
|
||||
readonly lp: Maybe_maybe<string>;
|
||||
readonly ae: Maybe_maybe<string>;
|
||||
readonly spi: Maybe_maybe<string>;
|
||||
readonly tou: Maybe_maybe<string>;
|
||||
readonly pro: Maybe_maybe<string>;
|
||||
readonly ini: Maybe_maybe<string>;
|
||||
readonly mov: Maybe_maybe<string>;
|
||||
readonly at: Maybe_maybe<string>;
|
||||
readonly pa: Maybe_maybe<string>
|
||||
};
|
||||
export type Pet = pet;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Pact_domain =
|
||||
{ tag: "Predefined"; value: number }
|
||||
| { tag: "Custom"; value: string };
|
||||
export type PactDomain = Pact_domain;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type Pact_t = {
|
||||
readonly category: number;
|
||||
readonly level: number;
|
||||
readonly type: number;
|
||||
readonly domain: Pact_domain;
|
||||
readonly name: string
|
||||
};
|
||||
export type Pact = Pact_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type styleDependency = {
|
||||
readonly id: GenericHelpers_oneOrMany<number>;
|
||||
readonly active: Maybe_maybe<number>;
|
||||
readonly origin: number
|
||||
};
|
||||
export type StyleDependency = styleDependency;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type TransferUnfamiliar_id =
|
||||
"Spells"
|
||||
| "LiturgicalChants"
|
||||
| { tag: "Spell"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number };
|
||||
export type TransferUnfamiliarId = TransferUnfamiliar_id;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type TransferUnfamiliar_t = { readonly id: TransferUnfamiliar_id; readonly srcId: number };
|
||||
export type TransferUnfamiliar = TransferUnfamiliar_t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type t = {
|
||||
readonly name: string;
|
||||
readonly dateCreated: Date;
|
||||
readonly dateModified: Date;
|
||||
readonly adventurePointsTotal: number;
|
||||
readonly experienceLevel: number;
|
||||
readonly sex: sex;
|
||||
readonly phase: phase;
|
||||
readonly locale: string;
|
||||
readonly avatar: Maybe_maybe<string>;
|
||||
readonly race: Maybe_maybe<number>;
|
||||
readonly raceVariant: Maybe_maybe<baseOrWithVariant>;
|
||||
readonly culture: Maybe_maybe<number>;
|
||||
readonly isCulturalPackageActive: boolean;
|
||||
readonly profession: Maybe_maybe<baseOrWithVariant>;
|
||||
readonly professionName: Maybe_maybe<string>;
|
||||
readonly rules: Rules_t;
|
||||
readonly personalData: personalData;
|
||||
readonly advantages: IntMap_t<Activatable_t>;
|
||||
readonly disadvantages: IntMap_t<Activatable_t>;
|
||||
readonly specialAbilities: IntMap_t<Activatable_t>;
|
||||
readonly attributes: IntMap_t<Attribute_t>;
|
||||
readonly attributeAdjustmentSelected: number;
|
||||
readonly energies: Energies_t;
|
||||
readonly skills: IntMap_t<Skill_t>;
|
||||
readonly combatTechniques: IntMap_t<Skill_t>;
|
||||
readonly spells: IntMap_t<ActivatableSkill_t>;
|
||||
readonly liturgicalChants: IntMap_t<ActivatableSkill_t>;
|
||||
readonly cantrips: IntSet_t;
|
||||
readonly blessings: IntSet_t;
|
||||
readonly items: list<Item_t>;
|
||||
readonly hitZoneArmors: list<hitZoneArmor>;
|
||||
readonly purse: purse;
|
||||
readonly pets: list<pet>;
|
||||
readonly pact: Maybe_maybe<Pact_t>;
|
||||
readonly combatStyleDependencies: list<styleDependency>;
|
||||
readonly magicalStyleDependencies: list<styleDependency>;
|
||||
readonly blessedStyleDependencies: list<styleDependency>;
|
||||
readonly skillStyleDependencies: list<styleDependency>;
|
||||
readonly socialStatusDependencies: list<number>;
|
||||
readonly transferredUnfamiliarSpells: list<TransferUnfamiliar_t>
|
||||
};
|
||||
export type Hero = t;
|
||||
@@ -1,449 +0,0 @@
|
||||
open Maybe;
|
||||
open GenericHelpers;
|
||||
|
||||
[@genType "Phase"]
|
||||
type phase =
|
||||
| Outline
|
||||
| Definition
|
||||
| Advancement;
|
||||
|
||||
[@genType "Sex"]
|
||||
type sex =
|
||||
| Male
|
||||
| Female;
|
||||
|
||||
[@genType "BaseOrWithVariant"]
|
||||
type baseOrWithVariant =
|
||||
| Base(int)
|
||||
| WithVariant(int, int);
|
||||
|
||||
module Rules = {
|
||||
[@genType "ActiveRule"]
|
||||
type activeRule = {
|
||||
id: int,
|
||||
options: list(int),
|
||||
};
|
||||
|
||||
[@genType "Rules"]
|
||||
type t = {
|
||||
areAllPublicationsActive: bool,
|
||||
activePublications: list(string),
|
||||
activeFocusRules: list(activeRule),
|
||||
activeOptionalRules: list(activeRule),
|
||||
};
|
||||
};
|
||||
|
||||
[@genType "PersonalData"]
|
||||
type personalData = {
|
||||
family: maybe(string),
|
||||
placeOfBirth: maybe(string),
|
||||
dateOfBirth: maybe(string),
|
||||
age: maybe(string),
|
||||
hairColor: maybe(int),
|
||||
eyeColor: maybe(int),
|
||||
size: maybe(string),
|
||||
weight: maybe(string),
|
||||
title: maybe(string),
|
||||
socialStatus: maybe(int),
|
||||
characteristics: maybe(string),
|
||||
otherInfo: maybe(string),
|
||||
cultureAreaKnowledge: maybe(string),
|
||||
};
|
||||
|
||||
module Activatable = {
|
||||
type option = [
|
||||
| `Generic(int)
|
||||
| `Skill(int)
|
||||
| `CombatTechnique(int)
|
||||
| `Spell(int)
|
||||
| `Cantrip(int)
|
||||
| `LiturgicalChant(int)
|
||||
| `Blessing(int)
|
||||
| `CustomInput(string)
|
||||
];
|
||||
|
||||
[@genType "ActivatableSingle"]
|
||||
type single = {
|
||||
options: list(option),
|
||||
level: maybe(int),
|
||||
customCost: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "ActivatableDependency"]
|
||||
type dependency = {
|
||||
source: Ids.activatableId,
|
||||
target: oneOrMany(Ids.activatableId),
|
||||
active: bool,
|
||||
options: list(oneOrMany(Ids.selectOptionId)),
|
||||
level: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "Activatable"]
|
||||
type t = {
|
||||
id: int,
|
||||
active: list(single),
|
||||
dependencies: list(dependency),
|
||||
};
|
||||
};
|
||||
|
||||
module Attribute = {
|
||||
[@genType "AttributeDependency"]
|
||||
type dependency = {
|
||||
source: Ids.activatableId,
|
||||
target: oneOrMany(int),
|
||||
value: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "Attribute"]
|
||||
type t = {
|
||||
id: int,
|
||||
value: int,
|
||||
dependencies: list(dependency),
|
||||
};
|
||||
};
|
||||
|
||||
module Energies = {
|
||||
[@genType "PermanentEnergyLoss"]
|
||||
type permanentEnergyLoss = {lost: int};
|
||||
|
||||
[@genType "PermanentEnergyLossAndBoughtBack"]
|
||||
type permanentEnergyLossAndBoughtBack = {
|
||||
lost: int,
|
||||
boughtBack: int,
|
||||
};
|
||||
|
||||
[@genType "Energies"]
|
||||
type t = {
|
||||
addedLifePoints: int,
|
||||
addedArcaneEnergyPoints: int,
|
||||
addedKarmaPoints: int,
|
||||
permanentLifePoints: permanentEnergyLoss,
|
||||
permanentArcaneEnergyPoints: permanentEnergyLossAndBoughtBack,
|
||||
permanentKarmaPoints: permanentEnergyLossAndBoughtBack,
|
||||
};
|
||||
};
|
||||
|
||||
module ActivatableSkill = {
|
||||
type value =
|
||||
| Inactive
|
||||
| Active(int);
|
||||
|
||||
[@genType "ActivatableSkillDependency"]
|
||||
type dependency = {
|
||||
source: Ids.activatableAndSkillId,
|
||||
target: oneOrMany(int),
|
||||
value,
|
||||
};
|
||||
|
||||
[@genType "ActivatableSkill"]
|
||||
type t = {
|
||||
id: int,
|
||||
value,
|
||||
dependencies: list(dependency),
|
||||
};
|
||||
};
|
||||
|
||||
module Skill = {
|
||||
[@genType "SkillDependency"]
|
||||
type dependency = {
|
||||
source: Ids.activatableId,
|
||||
target: oneOrMany(int),
|
||||
value: int,
|
||||
};
|
||||
|
||||
[@genType "Skill"]
|
||||
type t = {
|
||||
id: int,
|
||||
value: int,
|
||||
dependencies: list(dependency),
|
||||
};
|
||||
};
|
||||
|
||||
module Item = {
|
||||
[@genType "MundaneItem"]
|
||||
type mundaneItem = {structurePoints: maybe(oneOrMany(int))};
|
||||
|
||||
[@genType "PrimaryAttributeDamageThreshold"]
|
||||
type primaryAttributeDamageThreshold =
|
||||
| SameAttribute(int)
|
||||
| AgilityStrength(int, int)
|
||||
| DifferentAttribute(int, int);
|
||||
|
||||
[@genType "Damage"]
|
||||
type damage = {
|
||||
amount: int,
|
||||
sides: int,
|
||||
flat: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "MeleeWeapon"]
|
||||
type meleeWeapon = {
|
||||
combatTechnique: int,
|
||||
damage,
|
||||
primaryAttributeDamageThreshold: maybe(primaryAttributeDamageThreshold),
|
||||
at: maybe(int),
|
||||
pa: maybe(int),
|
||||
reach: maybe(int),
|
||||
length: maybe(int),
|
||||
structurePoints: maybe(oneOrMany(int)),
|
||||
breakingPointRatingMod: maybe(int),
|
||||
isParryingWeapon: bool,
|
||||
isTwoHandedWeapon: bool,
|
||||
isImprovisedWeapon: bool,
|
||||
damaged: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "RangedWeapon"]
|
||||
type rangedWeapon = {
|
||||
combatTechnique: int,
|
||||
damage: maybe(damage),
|
||||
length: maybe(int),
|
||||
range: (int, int, int),
|
||||
reloadTime: oneOrMany(int),
|
||||
ammunition: maybe(int),
|
||||
isImprovisedWeapon: bool,
|
||||
damaged: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "Armor"]
|
||||
type armor = {
|
||||
protection: int,
|
||||
encumbrance: int,
|
||||
hasAdditionalPenalties: bool,
|
||||
iniMod: maybe(int),
|
||||
movMod: maybe(int),
|
||||
sturdinessMod: maybe(int),
|
||||
armorType: int,
|
||||
wear: maybe(int),
|
||||
isHitZoneArmorOnly: maybe(bool),
|
||||
};
|
||||
|
||||
[@genType "Special"]
|
||||
type special =
|
||||
| MundaneItem(mundaneItem)
|
||||
| MeleeWeapon(meleeWeapon)
|
||||
| RangedWeapon(rangedWeapon)
|
||||
| CombinedWeapon(meleeWeapon, rangedWeapon)
|
||||
| Armor(armor);
|
||||
|
||||
[@genType "Item"]
|
||||
type t = {
|
||||
id: int,
|
||||
amount: maybe(int),
|
||||
price: maybe(int),
|
||||
weight: maybe(int),
|
||||
template: maybe(int),
|
||||
isTemplateLocked: bool,
|
||||
carriedWhere: maybe(string),
|
||||
special: maybe(special),
|
||||
gr: int,
|
||||
};
|
||||
};
|
||||
|
||||
[@genType "HitZoneArmor"]
|
||||
type hitZoneArmor = {
|
||||
/**
|
||||
* The hit zone armor's ID.
|
||||
*/
|
||||
id: int,
|
||||
/**
|
||||
* The name of the hit zone armor.
|
||||
*/
|
||||
name: string,
|
||||
/**
|
||||
* ID of the armor at zone *head*. Can be either a template ID or the ID of an
|
||||
* armor from `items`.
|
||||
*/
|
||||
head: maybe(Ids.hitZoneArmorZoneItemId),
|
||||
/**
|
||||
* The level of wear at zone *head*, if any. Ignores `wear` if custom armor is
|
||||
* used, even if `headWear` is not defined.
|
||||
*/
|
||||
headWear: maybe(int),
|
||||
/**
|
||||
* ID of the armor at zone *left arm*. Can be either a template ID or the ID
|
||||
* of an armor from `items`.
|
||||
*/
|
||||
leftArm: maybe(Ids.hitZoneArmorZoneItemId),
|
||||
/**
|
||||
* The level of wear at zone *left arm*, if any. Ignores `wear` if custom
|
||||
* armor is used, even if `leftArmWear` is not defined.
|
||||
*/
|
||||
leftArmWear: maybe(int),
|
||||
/**
|
||||
* ID of the armor at zone *right arm*. Can be either a template ID or the ID
|
||||
* of an item from `items`.
|
||||
*/
|
||||
rightArm: maybe(Ids.hitZoneArmorZoneItemId),
|
||||
/**
|
||||
* The level of wear at zone *right arm*, if any. Ignores `wear` if custom
|
||||
* armor is used, even if `rightArmWear` is not defined.
|
||||
*/
|
||||
rightArmWear: maybe(int),
|
||||
/**
|
||||
* ID of the armor at zone *torso*. Can be either a template ID or the ID of
|
||||
* an armor from `items`.
|
||||
*/
|
||||
torso: maybe(Ids.hitZoneArmorZoneItemId),
|
||||
/**
|
||||
* The level of wear at zone *torso*, if any. Ignores `wear` if custom armor
|
||||
* is used, even if `torsoWear` is not defined.
|
||||
*/
|
||||
torsoWear: maybe(int),
|
||||
/**
|
||||
* ID of the armor at zone *left leg*. Can be either a template ID or the ID
|
||||
* of an armor from `items`.
|
||||
*/
|
||||
leftLeg: maybe(Ids.hitZoneArmorZoneItemId),
|
||||
/**
|
||||
* The level of wear at zone *left leg*, if any. Ignores `wear` if custom
|
||||
* armor is used, even if `leftLegWear` is not defined.
|
||||
*/
|
||||
leftLegWear: maybe(int),
|
||||
/**
|
||||
* ID of the armor at zone *right leg*. Can be either a template ID or the ID
|
||||
* of an armor from `items`.
|
||||
*/
|
||||
rightLeg: maybe(Ids.hitZoneArmorZoneItemId),
|
||||
/**
|
||||
* The level of wear at zone *right leg*, if any. Ignores `wear` if custom
|
||||
* armor is used, even if `rightLegWear` is not defined.
|
||||
*/
|
||||
rightLegWear: maybe(int),
|
||||
};
|
||||
|
||||
[@genType "Purse"]
|
||||
type purse = {
|
||||
ducats: int,
|
||||
silverthalers: int,
|
||||
halers: int,
|
||||
kreutzers: int,
|
||||
};
|
||||
|
||||
[@genType "Pet"]
|
||||
type pet = {
|
||||
id: int,
|
||||
name: string,
|
||||
avatar: maybe(string),
|
||||
size: maybe(string),
|
||||
[@bs.as "type"]
|
||||
type_: maybe(string),
|
||||
attack: maybe(string),
|
||||
dp: maybe(string),
|
||||
reach: maybe(string),
|
||||
actions: maybe(string),
|
||||
skills: maybe(string),
|
||||
abilities: maybe(string),
|
||||
notes: maybe(string),
|
||||
spentAp: maybe(string),
|
||||
totalAp: maybe(string),
|
||||
cou: maybe(string),
|
||||
sgc: maybe(string),
|
||||
int: maybe(string),
|
||||
cha: maybe(string),
|
||||
dex: maybe(string),
|
||||
agi: maybe(string),
|
||||
con: maybe(string),
|
||||
str: maybe(string),
|
||||
lp: maybe(string),
|
||||
ae: maybe(string),
|
||||
spi: maybe(string),
|
||||
tou: maybe(string),
|
||||
pro: maybe(string),
|
||||
ini: maybe(string),
|
||||
mov: maybe(string),
|
||||
at: maybe(string),
|
||||
pa: maybe(string),
|
||||
};
|
||||
|
||||
module Pact = {
|
||||
[@genType "PactDomain"]
|
||||
type domain =
|
||||
| Predefined(int)
|
||||
| Custom(string);
|
||||
|
||||
[@genType "Pact"]
|
||||
type t = {
|
||||
category: int,
|
||||
level: int,
|
||||
[@bs.as "type"]
|
||||
type_: int,
|
||||
domain,
|
||||
name: string,
|
||||
};
|
||||
};
|
||||
|
||||
[@genType "StyleDependency"]
|
||||
type styleDependency = {
|
||||
/**
|
||||
* The extended special ability or list of available special abilities.
|
||||
*/
|
||||
id: oneOrMany(int),
|
||||
/**
|
||||
* If a ability meets a given id, then `Just id`, otherwise `Nothing`.
|
||||
*/
|
||||
active: maybe(int),
|
||||
/**
|
||||
* The style's id.
|
||||
*/
|
||||
origin: int,
|
||||
};
|
||||
|
||||
module TransferUnfamiliar = {
|
||||
[@genType "TransferUnfamiliarId"]
|
||||
type id =
|
||||
| Spell(int)
|
||||
| Spells
|
||||
| LiturgicalChant(int)
|
||||
| LiturgicalChants;
|
||||
|
||||
[@genType "TransferUnfamiliar"]
|
||||
type t = {
|
||||
id,
|
||||
srcId: int,
|
||||
};
|
||||
};
|
||||
|
||||
[@genType "Hero"]
|
||||
type t = {
|
||||
name: string,
|
||||
dateCreated: Js.Date.t,
|
||||
dateModified: Js.Date.t,
|
||||
adventurePointsTotal: int,
|
||||
experienceLevel: int,
|
||||
sex,
|
||||
phase,
|
||||
locale: string,
|
||||
avatar: maybe(string),
|
||||
race: maybe(int),
|
||||
raceVariant: maybe(baseOrWithVariant),
|
||||
culture: maybe(int),
|
||||
isCulturalPackageActive: bool,
|
||||
profession: maybe(baseOrWithVariant),
|
||||
professionName: maybe(string),
|
||||
rules: Rules.t,
|
||||
personalData,
|
||||
advantages: IntMap.t(Activatable.t),
|
||||
disadvantages: IntMap.t(Activatable.t),
|
||||
specialAbilities: IntMap.t(Activatable.t),
|
||||
attributes: IntMap.t(Attribute.t),
|
||||
attributeAdjustmentSelected: int,
|
||||
energies: Energies.t,
|
||||
skills: IntMap.t(Skill.t),
|
||||
combatTechniques: IntMap.t(Skill.t),
|
||||
spells: IntMap.t(ActivatableSkill.t),
|
||||
liturgicalChants: IntMap.t(ActivatableSkill.t),
|
||||
cantrips: IntSet.t,
|
||||
blessings: IntSet.t,
|
||||
items: list(Item.t),
|
||||
hitZoneArmors: list(hitZoneArmor),
|
||||
purse,
|
||||
pets: list(pet),
|
||||
pact: maybe(Pact.t),
|
||||
combatStyleDependencies: list(styleDependency),
|
||||
magicalStyleDependencies: list(styleDependency),
|
||||
blessedStyleDependencies: list(styleDependency),
|
||||
skillStyleDependencies: list(styleDependency),
|
||||
socialStatusDependencies: list(int),
|
||||
transferredUnfamiliarSpells: list(TransferUnfamiliar.t),
|
||||
};
|
||||
@@ -1,4 +1,3 @@
|
||||
import { List } from "../../../Data/List"
|
||||
import { isJust, Just, Nothing } from "../../../Data/Maybe"
|
||||
import { fromDefault, makeLenses, Record } from "../../../Data/Record"
|
||||
import { EditPrimaryAttributeDamageThreshold } from "./EditPrimaryAttributeDamageThreshold"
|
||||
@@ -46,7 +45,7 @@ export const EditItem =
|
||||
pa: "",
|
||||
price: "",
|
||||
pro: "",
|
||||
range: List ("", "", ""),
|
||||
range: { close: "", medium: "", far: "" },
|
||||
reloadTime: "",
|
||||
stp: "",
|
||||
weight: "",
|
||||
|
||||
@@ -72,6 +72,10 @@ export interface HeroModel {
|
||||
skillStyleDependencies: List<Record<StyleDependency>>
|
||||
socialStatusDependencies: List<SocialStatusId>
|
||||
transferredUnfamiliarSpells: List<Record<TransferUnfamiliar>>
|
||||
blessedPrimaryAttributeDependencies:
|
||||
readonly Readonly<{ sourceIdentifier: string; minValue: number }>[]
|
||||
magicalPrimaryAttributeDependencies:
|
||||
readonly Readonly<{ sourceIdentifier: string; minValue: number }>[]
|
||||
skillCheckAttributeCache: SkillCheckAttributeCache
|
||||
}
|
||||
|
||||
@@ -127,7 +131,9 @@ export const HeroModel: RecordCreator<HeroModel> =
|
||||
skillStyleDependencies: List (),
|
||||
socialStatusDependencies: List (),
|
||||
transferredUnfamiliarSpells: List (),
|
||||
skillCheckAttributeCache: OrderedMap.empty,
|
||||
blessedPrimaryAttributeDependencies: [],
|
||||
magicalPrimaryAttributeDependencies: [],
|
||||
skillCheckAttributeCache: new Map (),
|
||||
})
|
||||
|
||||
export const HeroModelL = makeLenses (HeroModel)
|
||||
@@ -186,5 +192,7 @@ export const getInitialHeroObject =
|
||||
skillStyleDependencies: Nothing,
|
||||
socialStatusDependencies: Nothing,
|
||||
transferredUnfamiliarSpells: Nothing,
|
||||
blessedPrimaryAttributeDependencies: [],
|
||||
magicalPrimaryAttributeDependencies: [],
|
||||
skillCheckAttributeCache: Nothing,
|
||||
})
|
||||
|
||||
@@ -26,6 +26,8 @@ export interface ItemBase {
|
||||
armorType: Maybe<number>
|
||||
}
|
||||
|
||||
export type Range = Readonly<{ close: number; medium: number; far: number }>
|
||||
|
||||
export interface Item extends ItemBase {
|
||||
"@@name": "Item"
|
||||
id: string
|
||||
@@ -41,7 +43,7 @@ export interface Item extends ItemBase {
|
||||
pa: Maybe<number>
|
||||
price: Maybe<number>
|
||||
pro: Maybe<number>
|
||||
range: Maybe<List<number>>
|
||||
range: Maybe<Range>
|
||||
reloadTime: Maybe<number | List<number>>
|
||||
stp: Maybe<number | List<number>>
|
||||
weight: Maybe<number>
|
||||
|
||||
@@ -102,6 +102,8 @@ export enum EntryRating {
|
||||
Essential = "Essential",
|
||||
}
|
||||
|
||||
export type EditRange = Readonly<{ close: string; medium: string; far: string }>
|
||||
|
||||
export interface ItemEditorSpecific {
|
||||
id: Maybe<string>
|
||||
at: string
|
||||
@@ -116,7 +118,7 @@ export interface ItemEditorSpecific {
|
||||
pa: string
|
||||
price: string
|
||||
pro: string
|
||||
range: List<string>
|
||||
range: EditRange
|
||||
reloadTime: string
|
||||
stp: string
|
||||
weight: string
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
/* TypeScript file generated from Sex.re by genType. */
|
||||
/* eslint-disable import/first */
|
||||
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type t = "Male" | "Female";
|
||||
export type Sex = t;
|
||||
@@ -1,125 +0,0 @@
|
||||
// Generated by ReScript, PLEASE EDIT WITH CARE
|
||||
'use strict';
|
||||
|
||||
|
||||
var SourceRef;
|
||||
|
||||
var Erratum;
|
||||
|
||||
var Prerequisites;
|
||||
|
||||
var Skill;
|
||||
|
||||
var SelectOption;
|
||||
|
||||
var Advantage;
|
||||
|
||||
var AnimistForce;
|
||||
|
||||
var Attribute;
|
||||
|
||||
var BlessedTradition;
|
||||
|
||||
var Blessing;
|
||||
|
||||
var Cantrip;
|
||||
|
||||
var CombatTechnique;
|
||||
|
||||
var Condition;
|
||||
|
||||
var Culture;
|
||||
|
||||
var Curse;
|
||||
|
||||
var DerivedCharacteristic;
|
||||
|
||||
var Disadvantage;
|
||||
|
||||
var DominationRitual;
|
||||
|
||||
var ElvenMagicalSong;
|
||||
|
||||
var EquipmentPackage;
|
||||
|
||||
var ExperienceLevel;
|
||||
|
||||
var FocusRule;
|
||||
|
||||
var GeodeRitual;
|
||||
|
||||
var Item;
|
||||
|
||||
var LiturgicalChant;
|
||||
|
||||
var MagicalDance;
|
||||
|
||||
var MagicalMelody;
|
||||
|
||||
var MagicalTradition;
|
||||
|
||||
var Messages;
|
||||
|
||||
var OptionalRule;
|
||||
|
||||
var PactCategory;
|
||||
|
||||
var Patron;
|
||||
|
||||
var Profession;
|
||||
|
||||
var Publication;
|
||||
|
||||
var Race;
|
||||
|
||||
var RogueSpell;
|
||||
|
||||
var SpecialAbility;
|
||||
|
||||
var Spell;
|
||||
|
||||
var State;
|
||||
|
||||
var ZibiljaRitual;
|
||||
|
||||
exports.SourceRef = SourceRef;
|
||||
exports.Erratum = Erratum;
|
||||
exports.Prerequisites = Prerequisites;
|
||||
exports.Skill = Skill;
|
||||
exports.SelectOption = SelectOption;
|
||||
exports.Advantage = Advantage;
|
||||
exports.AnimistForce = AnimistForce;
|
||||
exports.Attribute = Attribute;
|
||||
exports.BlessedTradition = BlessedTradition;
|
||||
exports.Blessing = Blessing;
|
||||
exports.Cantrip = Cantrip;
|
||||
exports.CombatTechnique = CombatTechnique;
|
||||
exports.Condition = Condition;
|
||||
exports.Culture = Culture;
|
||||
exports.Curse = Curse;
|
||||
exports.DerivedCharacteristic = DerivedCharacteristic;
|
||||
exports.Disadvantage = Disadvantage;
|
||||
exports.DominationRitual = DominationRitual;
|
||||
exports.ElvenMagicalSong = ElvenMagicalSong;
|
||||
exports.EquipmentPackage = EquipmentPackage;
|
||||
exports.ExperienceLevel = ExperienceLevel;
|
||||
exports.FocusRule = FocusRule;
|
||||
exports.GeodeRitual = GeodeRitual;
|
||||
exports.Item = Item;
|
||||
exports.LiturgicalChant = LiturgicalChant;
|
||||
exports.MagicalDance = MagicalDance;
|
||||
exports.MagicalMelody = MagicalMelody;
|
||||
exports.MagicalTradition = MagicalTradition;
|
||||
exports.Messages = Messages;
|
||||
exports.OptionalRule = OptionalRule;
|
||||
exports.PactCategory = PactCategory;
|
||||
exports.Patron = Patron;
|
||||
exports.Profession = Profession;
|
||||
exports.Publication = Publication;
|
||||
exports.Race = Race;
|
||||
exports.RogueSpell = RogueSpell;
|
||||
exports.SpecialAbility = SpecialAbility;
|
||||
exports.Spell = Spell;
|
||||
exports.State = State;
|
||||
exports.ZibiljaRitual = ZibiljaRitual;
|
||||
/* No side effect */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user