Compare commits
345
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da6c2657e1 | ||
|
|
eb6a6f1950 | ||
|
|
553324bc1c | ||
|
|
982827a00f | ||
|
|
0c0ceeb0fa | ||
|
|
24d5352f04 | ||
|
|
5b9df3748b | ||
|
|
5c4d058e72 | ||
|
|
39486a3f29 | ||
|
|
a09a321a7a | ||
|
|
dca99eae08 | ||
|
|
fbc753b467 | ||
|
|
e86b2559d6 | ||
|
|
a83b1bd9bd | ||
|
|
6decdd580a | ||
|
|
41f32f8af9 | ||
|
|
0620d76d8d | ||
|
|
dd8a91d0f8 | ||
|
|
977841899f | ||
|
|
81aee53e4f | ||
|
|
992f026662 | ||
|
|
44d4c83030 | ||
|
|
a88dfc4c37 | ||
|
|
40733ed679 | ||
|
|
e2ca8d5df3 | ||
|
|
20536d4f69 | ||
|
|
0cad4919a9 | ||
|
|
f85f52a7e5 | ||
|
|
24933a677d | ||
|
|
fcc96c0460 | ||
|
|
a4f55d9455 | ||
|
|
f7fdc3a8a0 | ||
|
|
aa639a0139 | ||
|
|
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 | ||
|
|
246b3d5c1d | ||
|
|
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 | ||
|
|
a35611b4d9 | ||
|
|
390dcb616a | ||
|
|
8055218c8f | ||
|
|
2cb392e511 | ||
|
|
8392e368ff | ||
|
|
692e4011b5 | ||
|
|
bcd3bd0a64 | ||
|
|
93f95c76be | ||
|
|
1af9bf192f | ||
|
|
53fbaad5c1 | ||
|
|
4c9caef67a | ||
|
|
ae652e2e60 | ||
|
|
f18a032ce6 | ||
|
|
09f98bc094 | ||
|
|
dd77fc95dd | ||
|
|
f63ea3c2d9 | ||
|
|
32aa20a890 | ||
|
|
4bbe18092c | ||
|
|
acc58c37b0 | ||
|
|
ad1c78ea58 | ||
|
|
b4b477ec73 | ||
|
|
e11cbd6c52 | ||
|
|
b3f9010ef0 | ||
|
|
030a3270c3 | ||
|
|
6b9d974db9 | ||
|
|
fdbdb24dee | ||
|
|
42787b8912 | ||
|
|
7be6ffdd71 | ||
|
|
9ac3fed26e | ||
|
|
f366309fb6 | ||
|
|
21b5a4d568 | ||
|
|
9baac1a58e | ||
|
|
c35f238fd7 | ||
|
|
a40e825f36 | ||
|
|
96ef705585 | ||
|
|
c441e1696b | ||
|
|
2a4a2bcf8f | ||
|
|
c21a48866c | ||
|
|
349c83b6e4 | ||
|
|
8d566f5bd1 | ||
|
|
775d35377f | ||
|
|
b24742206c | ||
|
|
f630a28797 | ||
|
|
c6ee377057 | ||
|
|
5ea3820113 | ||
|
|
acb6177317 | ||
|
|
8c143fe12f | ||
|
|
51abcdad5f | ||
|
|
7e459970cc | ||
|
|
88f03e0e21 | ||
|
|
b70c94358c | ||
|
|
28ac73c7cb | ||
|
|
3078f1f465 | ||
|
|
941acabc7d | ||
|
|
c6e36ed96b | ||
|
|
23e413b53f | ||
|
|
d8a809bf92 | ||
|
|
7e7c468dca | ||
|
|
5c3f0c27f9 | ||
|
|
ee8033b62c | ||
|
|
b5c9ede02a | ||
|
|
63c93204ac | ||
|
|
95d6994c65 | ||
|
|
8ce6767b58 | ||
|
|
5da07d8638 | ||
|
|
48bd37ae3e | ||
|
|
c52d5a4897 | ||
|
|
4123cc66e3 | ||
|
|
0cbde7c3cc | ||
|
|
13921f06c3 | ||
|
|
ab8e5ed632 | ||
|
|
ab1cf43a37 | ||
|
|
d63375084a | ||
|
|
1289d95391 |
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"]
|
||||
}
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
src/App/Utilities/YAML/Schema/
|
||||
*.cjs
|
||||
*.js
|
||||
*.gen.tsx
|
||||
node_modules
|
||||
|
||||
+37
-26
@@ -1,10 +1,12 @@
|
||||
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
|
||||
ecmaFeatures:
|
||||
@@ -68,7 +70,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
|
||||
@@ -93,7 +100,7 @@ rules:
|
||||
no-octal-escape: 2
|
||||
no-param-reassign: 2
|
||||
no-proto: 2
|
||||
no-redeclare: 2
|
||||
no-redeclare: 0
|
||||
no-return-assign: 2
|
||||
no-script-url: 2
|
||||
no-self-assign: 2
|
||||
@@ -120,7 +127,7 @@ rules:
|
||||
init-declarations: 2
|
||||
no-delete-var: 2
|
||||
no-label-var: 2
|
||||
no-shadow: 2
|
||||
no-shadow: 0
|
||||
no-shadow-restricted-names: 2
|
||||
# no-undef: 2
|
||||
|
||||
@@ -154,11 +161,10 @@ rules:
|
||||
- consistent
|
||||
function-paren-newline:
|
||||
- 2
|
||||
- consistent
|
||||
- multiline-arguments
|
||||
jsx-quotes: 2
|
||||
key-spacing: 2
|
||||
keyword-spacing: 2
|
||||
line-comment-position: 2
|
||||
lines-around-comment:
|
||||
- 0
|
||||
# requires an empty line before block comments
|
||||
@@ -203,7 +209,6 @@ rules:
|
||||
- ignoreChainWithDepth: 2
|
||||
no-bitwise: 2
|
||||
no-continue: 2
|
||||
no-inline-comments: 2
|
||||
no-lonely-if: 2
|
||||
no-mixed-operators:
|
||||
- 2
|
||||
@@ -239,11 +244,6 @@ rules:
|
||||
- blocks: never
|
||||
classes: never
|
||||
switches: never
|
||||
padding-line-between-statements:
|
||||
- 2
|
||||
- blankLine: always
|
||||
prev: "*"
|
||||
next: return
|
||||
prefer-object-spread: 2
|
||||
quote-props:
|
||||
- 2
|
||||
@@ -283,8 +283,12 @@ rules:
|
||||
prefer-const: 2
|
||||
prefer-destructuring:
|
||||
- 2
|
||||
- object: true
|
||||
array: false
|
||||
- VariableDeclarator:
|
||||
array: true
|
||||
object: true
|
||||
AssignmentExpression:
|
||||
array: false
|
||||
object: false
|
||||
prefer-numeric-literals: 2
|
||||
prefer-rest-params: 2
|
||||
prefer-spread: 2
|
||||
@@ -307,7 +311,6 @@ rules:
|
||||
"@typescript-eslint/await-thenable": 2
|
||||
# "@typescript-eslint/class-name-casing": 2
|
||||
"@typescript-eslint/consistent-type-assertions": 2
|
||||
"@typescript-eslint/interface-name-prefix": 2
|
||||
"@typescript-eslint/member-delimiter-style":
|
||||
- 2
|
||||
- multiline:
|
||||
@@ -315,6 +318,14 @@ rules:
|
||||
singleline:
|
||||
delimiter: semi
|
||||
requireLast: false
|
||||
"@typescript-eslint/naming-convention":
|
||||
- error
|
||||
- selector: interface
|
||||
format:
|
||||
- PascalCase
|
||||
custom:
|
||||
regex: "^I[A-Z]"
|
||||
match: false
|
||||
"@typescript-eslint/no-floating-promises": 2
|
||||
"@typescript-eslint/no-for-in-array": 2
|
||||
"@typescript-eslint/no-inferrable-types": 2
|
||||
@@ -326,7 +337,6 @@ rules:
|
||||
"@typescript-eslint/prefer-for-of": 2
|
||||
"@typescript-eslint/prefer-includes": 2
|
||||
"@typescript-eslint/prefer-readonly": 2
|
||||
"@typescript-eslint/promise-function-async": 2
|
||||
# "@typescript-eslint/quotes": 2
|
||||
"@typescript-eslint/require-array-sort-compare": 2
|
||||
"@typescript-eslint/require-await": 2
|
||||
@@ -348,10 +358,7 @@ rules:
|
||||
comma-spacing: 0
|
||||
"@typescript-eslint/comma-spacing": 2
|
||||
func-call-spacing: 0
|
||||
"@typescript-eslint/func-call-spacing":
|
||||
- 2
|
||||
- always
|
||||
- allowNewlines: true
|
||||
"@typescript-eslint/func-call-spacing": 2
|
||||
indent: 0
|
||||
"@typescript-eslint/indent": 0
|
||||
no-array-constructor: 0
|
||||
@@ -361,10 +368,13 @@ rules:
|
||||
no-extra-semi: 0
|
||||
"@typescript-eslint/no-extra-semi": 2
|
||||
no-unused-expressions: 0
|
||||
"@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
|
||||
@@ -381,8 +391,6 @@ rules:
|
||||
- 2
|
||||
- never
|
||||
- beforeStatementContinuationChars: never
|
||||
space-before-function-paren: 0
|
||||
"@typescript-eslint/space-before-function-paren": 2
|
||||
|
||||
# React
|
||||
react/boolean-prop-naming: 2
|
||||
@@ -411,7 +419,7 @@ rules:
|
||||
react/no-will-update-set-state: 2
|
||||
react/prefer-es6-class: 2
|
||||
react/prefer-stateless-function: 2
|
||||
react/react-in-jsx-scope: 2
|
||||
react/react-in-jsx-scope: 0
|
||||
react/require-render-return: 2
|
||||
react/self-closing-comp: 2
|
||||
react/state-in-constructor:
|
||||
@@ -470,6 +478,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,30 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Sources**
|
||||
## 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)
|
||||
> - S. 133–150 (Berufsgeheimnisse)
|
||||
|
||||
**Tables**
|
||||
> Delete Univ and change locale if necessary. Add specific entries if they could not be resolved.
|
||||
- S. X (Section/Chapter Name)
|
||||
|
||||
- [ ] Univ
|
||||
- [ ] L10n de-DE
|
||||
|
||||
**Code**
|
||||
> List here what cannot be solved only using the tables. Example (in German):
|
||||
|
||||
## Special Notes
|
||||
|
||||
> List here any special hints to implement the sources listed above.
|
||||
>
|
||||
> - …
|
||||
|
||||
—
|
||||
|
||||
|
||||
|
||||
## Special Implementations
|
||||
|
||||
> List here what cannot be solved only using the database. Example (in German):
|
||||
>
|
||||
> - [ ] Voraussetzungen Vorliebe I-II
|
||||
|
||||
—
|
||||
|
||||
@@ -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: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
name: Commitlint
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
commitlint:
|
||||
name: Lint commit messages
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: wagoid/commitlint-github-action@v2
|
||||
with:
|
||||
configFile: .commitlintrc.json
|
||||
@@ -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 ts: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 20
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
- 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 ts: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 20
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
- 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 }}
|
||||
|
||||
+31
-30
@@ -2,10 +2,13 @@ name: Integration
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -13,36 +16,34 @@ jobs:
|
||||
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 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 20
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
- 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 20
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 20
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Run linter
|
||||
run: npm run lint
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
.DS_Store
|
||||
node_modules/
|
||||
/.webpack/**/*
|
||||
!/.webpack/package.json
|
||||
npm-debug.log*
|
||||
.vs/
|
||||
/data/
|
||||
@@ -6,6 +9,7 @@ npm-debug.log*
|
||||
/dist/
|
||||
.rpt2_cache
|
||||
.esm-cache
|
||||
app/index.html
|
||||
app/main.css
|
||||
app/**/*.js
|
||||
app/**/*.js.map
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
[submodule "app/Database"]
|
||||
path = app/Database
|
||||
path = src/database/contents
|
||||
url = https://github.com/elyukai/optolith-data.git
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"types": [
|
||||
{ "type": "feat", "section": "Features" },
|
||||
{ "type": "fix", "section": "Bug Fixes" },
|
||||
{ "type": "build", "hidden": true },
|
||||
{ "type": "chore", "hidden": true },
|
||||
{ "type": "ci", "hidden": true },
|
||||
{ "type": "docs", "hidden": true },
|
||||
{ "type": "style", "hidden": true },
|
||||
{ "type": "refactor", "hidden": true },
|
||||
{ "type": "perf", "hidden": true },
|
||||
{ "type": "test", "hidden": true }
|
||||
],
|
||||
"releaseCommitMessageFormat": "build(release): {{currentTag}}"
|
||||
}
|
||||
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": []
|
||||
}
|
||||
]
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "commonjs"
|
||||
}
|
||||
@@ -1 +1,2 @@
|
||||
Lukas Obermann <lukas.obermann@outlook.de>
|
||||
Lukas Obermann <lukas.obermann@icloud.com>
|
||||
Philipp Borucki <p.borucki@icloud.com>
|
||||
|
||||
+1066
File diff suppressed because it is too large
Load Diff
+21
-7
@@ -28,16 +28,23 @@ 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
|
||||
|
||||
- Branches (mostly) follow Git Flow. Please try to follow Git Flow as well if you edit this repository. But if it's possible, please fork this repo and create PRs.
|
||||
- Branches follow Git Flow. Please try to follow Git Flow as well if you edit this repository. But if it's possible, please fork this repo and create PRs.
|
||||
- Commits need to follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), which is enforced by the CI and Git Hooks locally.
|
||||
- Please check out the [Style Guide](https://github.com/elyukai/optolith-client/wiki/Code-Style-Guide) for more information on that topic! Sadly, TSLint cannot ensure the whole style so you partially need to take care of that on your own!
|
||||
- There is a page covering [Naming Conventions](https://github.com/elyukai/optolith-client/wiki/Naming-Conventions) as well!
|
||||
- The key criteria for the project are mentioned in the [README](README.md). They also apply to pull requests. A feature usually does not consist of the technical part only. Much more important is how the feature presents itself to the user. And that must be planned and discussed.
|
||||
- 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!
|
||||
- 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
|
||||
|
||||
@@ -57,14 +64,14 @@ This installs all necessary packages.
|
||||
|
||||
### First run
|
||||
|
||||
Compile the source code. `ts:` is for TypeScript, `re:` for Reason/OCaml and `css:` for CSS/Sass.
|
||||
Compile the source code. `js:` is for TypeScript/Webpack, `re:` for Reason/OCaml and `css:` for CSS/Sass. Webpack does not check the TypeScript validity, to check this, use `ts:` commands.
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
(There's also a shorthand for that:)
|
||||
@@ -73,12 +80,19 @@ npm run css:build
|
||||
npm run build
|
||||
```
|
||||
|
||||
…or watch it for better performance for subsequent compiling on save (you need to use separate terminal instances then). There is no watcher for CSS/Sass currently.
|
||||
…or watch it for better performance for subsequent compiling on save (you need to use separate terminal instances then).
|
||||
|
||||
```sh
|
||||
npm run re:watch
|
||||
npm run css:watch
|
||||
npm run js:watch
|
||||
```
|
||||
|
||||
To check the TypeScript validity, either check once or watch for changes (I'd always recommend to do the latter one).
|
||||
|
||||
```sh
|
||||
npm run ts:build
|
||||
npm run ts:watch
|
||||
npm run css:build
|
||||
```
|
||||
|
||||
Run the app:
|
||||
|
||||
+1
-1
Submodule app/Database updated: 6dbf361507...fe41061524
@@ -1,3 +1,133 @@
|
||||
## 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
|
||||
|
||||
- Der Start der Anwendung war viel langsamer als in Version 1.3.2. [#751](https://github.com/elyukai/optolith-client/issues/751)
|
||||
|
||||
### Fehlerbehebungen
|
||||
|
||||
- Das Maximum von Kampftechniken konnte höher sein als es die Regeln eigentlich erlauben. [#749](https://github.com/elyukai/optolith-client/issues/749)
|
||||
- Der Abstand von Overlays – also z. B. wenn Vorteile hinzugefügt werden – nach oben war zu klein. [#727](https://github.com/elyukai/optolith-client/issues/727)
|
||||
- Wenn eine Profession es erlaubt hat, aus einer Menge an Kampftechniken eine zweite für einen niedrigeren Bonus als den der ersten auszuwählen, wurde dieser niedrigere Bonus nicht auf den Charakter angewandt. [#647](https://github.com/elyukai/optolith-client/issues/647)
|
||||
- Die *Fackel* hatte als L+S KK 15 statt KK 14. [#752](https://github.com/elyukai/optolith-client/issues/752) [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- Der Schadensbonus durch L+S wurde bei Waffen, die keinen festen Schaden hatten, nicht berücksichtigt. [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- Es konnte nur ein Talentstil zur gleichen Zeit aktiv sein, obwohl es keine Einschränkung diesbezüglich gibt. [#665](https://github.com/elyukai/optolith-client/issues/665)
|
||||
- Die Profession *Weißmagier (Akademie Schwert und Stab zu Gareth)* aus dem **Regelwerk** hatte falsche AP-Kosten und *Sternkunde 4* statt *Alchemie 4*. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Das Talentefeld für Tierbegleiter auf dem Charakterbogen was zu klein, um alle relevanten Talente aufnehmen zu können. [#733](https://github.com/elyukai/optolith-client/issues/733)
|
||||
- Im Regeltext für das *Großzelt, 12 Personen* fehlte ein Wort. [#739](https://github.com/elyukai/optolith-client/issues/739)
|
||||
- SF *Anhänger des Güldenen* erlaubte Liturgien bis Steigerungsfaktor C, obwohl nur welche bis B erlaubt sind. [#754](https://github.com/elyukai/optolith-client/issues/754)
|
||||
- SF *Scholar des Magierkollegs zu Honingen* fehlte. [#726](https://github.com/elyukai/optolith-client/issues/726)
|
||||
- SF *Havena-Stil* fehlte. [#740](https://github.com/elyukai/optolith-client/issues/740)
|
||||
- Der Name des Feenpaktgeschenks *Ruf des Waldes* hatte einen Schreibfehler. [#755](https://github.com/elyukai/optolith-client/issues/755)
|
||||
- Profession *Gildenloser Magier nach Vadif sal Karim* hatte eine Bonus auf den falschen *Hagelschlag*-Zauber. [#772](https://github.com/elyukai/optolith-client/issues/772)
|
||||
- Der Text der dritten Erweiterung des Zaubers *Klarheit des Eises* hatte eine falsche Zeiteinheit in der Zeitangabe. [#766](https://github.com/elyukai/optolith-client/issues/766)
|
||||
- Der SF *Spiritualistinnen* hatte falsche erweiterte Sonderfertigkeiten. [#763](https://github.com/elyukai/optolith-client/issues/763)
|
||||
- SF *Klingensturm* hatte falsche Kampftechniken angegeben. [#768](https://github.com/elyukai/optolith-client/issues/768)
|
||||
- Bilder mit großgeschriebenen Dateiendungen wurden als Portraits nicht akzeptiert. [#762](https://github.com/elyukai/optolith-client/issues/762)
|
||||
- Wenn ein Portrait fehlte, wurde auf dem Charakterbogen das Upload-Icon angezeigt. [#759](https://github.com/elyukai/optolith-client/issues/759)
|
||||
- Auf dem Mac wurden, wenn eine Papiertextur für den Charakterbogen ausgewählt wurde, zusätzliche leere Seiten generiert. [#748](https://github.com/elyukai/optolith-client/issues/748)
|
||||
- Der Effekttext der SF *Bindung des Dolches* hatte einen Schreibfehler. [#773](https://github.com/elyukai/optolith-client/issues/773)
|
||||
|
||||
### 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!
|
||||
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.4.1
|
||||
|
||||
### Fehlerbehebungen
|
||||
|
||||
- Italienisch war nicht verfügbar.
|
||||
|
||||
## 1.4.0
|
||||
|
||||
### Features
|
||||
|
||||
@@ -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,124 @@
|
||||
## 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
|
||||
|
||||
- Start-up was way slower than in 1.3.2. [#751](https://github.com/elyukai/optolith-client/issues/751)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Added some missing UI translations. [#723](https://github.com/elyukai/optolith-client/issues/723)
|
||||
- Added missing aspects for **Gods of Aventuria I**. [#724](https://github.com/elyukai/optolith-client/issues/724)
|
||||
- Added missing special ability groups for **Gods of Aventuria I**. [#725](https://github.com/elyukai/optolith-client/issues/725)
|
||||
- SA *Two Blessings at Once* had the wrong rules text. [#750](https://github.com/elyukai/optolith-client/issues/750)
|
||||
- Combat Techniques maximum CtR could be higher that allowed by rules. [#749](https://github.com/elyukai/optolith-client/issues/749)
|
||||
- The top margin of overlay windows – like when adding advantages – was too small. [#727](https://github.com/elyukai/optolith-client/issues/727)
|
||||
- If a profession allowed to select a second combat technique from a set of combat techniques where the bonus was lower than the bonus for the first combat technique, the selected lower bonus was not applied to the character. [#647](https://github.com/elyukai/optolith-client/issues/647)
|
||||
- The *Torch* had P+T STR 15 instead of STR 14. [#752](https://github.com/elyukai/optolith-client/issues/752) [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- The P+T damage bonus was not added to weapons without flat damage. [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- Profession *White Mage (Gareth Academy of Sword and Staff)* from the **Core Rules** had a wrong AP value and *Astronomy 4* instead of *Alchemy 4*. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Creature skills text field on PDF export was too short to fit all relevant skills of a creature. [#733](https://github.com/elyukai/optolith-client/issues/733)
|
||||
- SA *Followers of the Golden One* allowed liturgical chants up to improvement cost C instead of up to B. [#754](https://github.com/elyukai/optolith-client/issues/754)
|
||||
- Profession *Guildless Mage (Vadif sal Karim’s Student)* had a bonus on the wrong *Hailstorm and Roar of Thunder* spellwork. [#772](https://github.com/elyukai/optolith-client/issues/772)
|
||||
- SA *Bladestorm* had wrong applicable combat techniques. [#768](https://github.com/elyukai/optolith-client/issues/768)
|
||||
- Some books were missing the weight. [#760](https://github.com/elyukai/optolith-client/issues/760)
|
||||
- Images with uppercase file endings have not been accepted as portrait images. [#762](https://github.com/elyukai/optolith-client/issues/762)
|
||||
- The upload icon was shown in place of the portrait image on the character sheet if no portrait was defined. [#759](https://github.com/elyukai/optolith-client/issues/759)
|
||||
- On the Mac, if paper background was activated, additional blank pages were generated for the PDF output. [#748](https://github.com/elyukai/optolith-client/issues/748)
|
||||
|
||||
### 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!
|
||||
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.4.1
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Italian was not available.
|
||||
|
||||
## 1.4.0
|
||||
|
||||
### Features
|
||||
|
||||
@@ -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,102 @@
|
||||
## 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
|
||||
|
||||
- Suppression des *N/D* dans les tableaux des sorts et des liturgies sur la feuille de personnage afin que les valeurs puissent être ajoutées à la main. [#747](https://github.com/elyukai/optolith-client/issues/747)
|
||||
- Le démarrage était beaucoup plus lent qu'en 1.3.2. [#751](https://github.com/elyukai/optolith-client/issues/751)
|
||||
|
||||
### Bugs rectifiés
|
||||
|
||||
- La VTC maximale des techniques de combat pourrait être supérieure à celle autorisée par les règles. [#749](https://github.com/elyukai/optolith-client/issues/749)
|
||||
- La marge supérieure des fenêtres superposées – comme lors de l'ajout d'avantages – était trop petite. [#727](https://github.com/elyukai/optolith-client/issues/727)
|
||||
- Le bonus de dommages Q+SD n'était pas ajouté aux armes sans dommages fixes. [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- La profession *Magicien blanc (Académie de Gareth de l'épée et du bâton)* des **règles de base** avait une mauvaise valeur de PAV et *Astronomie 4* au lieu de *l'Alchimie 4*. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- La zone de texte "compétences de la créature" sur l'export PDF était trop courte pour correspondre à toutes les compétences pertinentes d'une créature. [#733](https://github.com/elyukai/optolith-client/issues/733)
|
||||
- Les images dont la fin de fichier était en majuscules n'étaient pas acceptées comme images de portrait. [#762](https://github.com/elyukai/optolith-client/issues/762)
|
||||
- L'icône de téléchargement était affichée à la place de l'image du portrait sur la fiche de personnage si aucun portrait n'était défini. [#759](https://github.com/elyukai/optolith-client/issues/759)
|
||||
- Sur Mac, si le fond papier était activé, des pages vierges supplémentaires étaient générées pour la sortie PDF. [#748](https://github.com/elyukai/optolith-client/issues/748)
|
||||
|
||||
### 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 !
|
||||
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.4.1
|
||||
|
||||
### Bugs rectifiés
|
||||
|
||||
- L'italien n'était pas disponible.
|
||||
|
||||
## 1.4.0
|
||||
|
||||
Veuillez vérifier les personnages pour lesquels vous avez ajouté la CS *intuition tactique* ou la CS *détection des embuscades*. Vous remarquerez qu'elle n'a pas son ancien nom. Ceci est dû à une erreur (mentionnée ci-dessous) où les noms de ces deux capacités spéciales ont été échangés. La représentation interne ne peut pas être modifiée et les entrées doivent donc être "renommées". Cela devrait également corriger les prérequis "incorrects" des deux entrées.
|
||||
|
||||
+108
-1
@@ -1,3 +1,110 @@
|
||||
## 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
|
||||
|
||||
- Ridotto il tempo di avvio. [#751](https://github.com/elyukai/optolith-client/issues/751)
|
||||
|
||||
### Correzioni
|
||||
|
||||
- Le formule della caratteristiche derivate occupano troppo spazio sul foglio d’identità. [#729](https://github.com/elyukai/optolith-client/issues/729)
|
||||
- Rimozione dei requisiti doppi in alcune abilità speciali. [#730](https://github.com/elyukai/optolith-client/issues/730)
|
||||
- Correzioni minori della localizzazione italiana. [#731](https://github.com/elyukai/optolith-client/issues/731)
|
||||
- Alcune tecniche di combattimento possono essere impostate a valori più elevati di quanto ammesso dal regolamento. [#749](https://github.com/elyukai/optolith-client/issues/749)
|
||||
- Il margine superiore delle finestre in sovrimpressione, come nell’inserimento dei vantaggi, è troppo stretto. [#727](https://github.com/elyukai/optolith-client/issues/727)
|
||||
- Il bonus di impatto non viene calcolato per alcune armi. [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- La professione *Mago bianco (Accademia Garetiana di Spada e Bastone)* dal **Regolamento** ha un valore di PAvv sbagliato e *Astronomia 4* invece di *Alchimia 4*. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Campo di testo delle abilità degli animali nel foglio d’identità è troppo piccolo per contenere tutte le abilità. [#733](https://github.com/elyukai/optolith-client/issues/733)
|
||||
- L’abilità speciale *Bladestorm* si applica alle tecniche di combattimento sbagliate. [#768](https://github.com/elyukai/optolith-client/issues/768)
|
||||
- Immagini con estensione in maiuscoletto non vengono accettate come ritratto. [#762](https://github.com/elyukai/optolith-client/issues/762)
|
||||
- Viene mostrata l’icona di caricamento invece del ritratto su fogli d’identità di personaggi senza ritratto. [#759](https://github.com/elyukai/optolith-client/issues/759)
|
||||
- Su Mac, con lo sfondo pergamenato attivato, vengono generate pagine bianche di troppo nel PDF finale. [#748](https://github.com/elyukai/optolith-client/issues/748)
|
||||
|
||||
### 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!
|
||||
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.4.1
|
||||
|
||||
### Correzioni
|
||||
|
||||
- La localizzazione italiana non era disponibile.
|
||||
|
||||
## 1.4.0
|
||||
|
||||
Primo rilascio della versione italiana.
|
||||
@@ -9,7 +116,7 @@ Siccome sempre più persone fanno uso dei dati di Optolith, da questa versione i
|
||||
Ci sarà un nuovo formato di dati sia per gli eroi memorizzati che per i dati sorgente.
|
||||
Le modifiche non sono ancora finalizzate e la nuova versione maggiore è ancora lontana, ma è consigliato aggiornarsi al nuovo formato di dati il prima possibile.
|
||||
|
||||
### Thank you
|
||||
### Ringraziamenti
|
||||
|
||||
Come ultimo punto, ma non per importanza, un grandissimo **grazie** alle seguenti persone su GitHub che hanno contribuito a questa versione!
|
||||
|
||||
|
||||
@@ -1,15 +1,112 @@
|
||||
## 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
|
||||
|
||||
- Start-up was trager dan in 1.3.2. [#751](https://github.com/elyukai/optolith-client/issues/751)
|
||||
|
||||
### Probleemoplossingen
|
||||
|
||||
- Gevechtstechnieken maximum GtR kon hoger zijn dan toegelaten. [#749](https://github.com/elyukai/optolith-client/issues/749)
|
||||
- The top margin van overlay venters – zoals bij het toevoegen van Voordelen – was te klein. [#727](https://github.com/elyukai/optolith-client/issues/727)
|
||||
- De P+T schade bonus werd niet toegevoegd aan wapens zonder extra schade. [#737](https://github.com/elyukai/optolith-client/issues/737)
|
||||
- Beroep *Witte Magier (Gareth Academy van Zwaard en Staf)* van de **Basis regels** had een verkeerde AP waarde en *Astronomie 4* in plaats van *Alchemie 4*. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Dier vaardigheids tekst veld op de PDF export was te kort om alle relevante vaardigheden van een dier te bevatten. [#733](https://github.com/elyukai/optolith-client/issues/733)
|
||||
- Afbeeldingen met uppercase file extensies werden niet aanvaard asl portret afbeeldingen. [#762](https://github.com/elyukai/optolith-client/issues/762)
|
||||
- Het upload icon werd getoont in plaats van de portret afbeelding op het helden document als er geen portret opgeven was. [#759](https://github.com/elyukai/optolith-client/issues/759)
|
||||
- Op de Mac, als de papier achtergrond aan stond, werden er additionele lege paginas toegevoegd aan de PDF output. [#748](https://github.com/elyukai/optolith-client/issues/748)
|
||||
|
||||
### Thank you
|
||||
|
||||
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!
|
||||
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.4.1
|
||||
|
||||
### Probleemoplossingen
|
||||
|
||||
- Italiaans was niet beschikbaar.
|
||||
|
||||
## 1.4.0
|
||||
|
||||
### Nieuwe features
|
||||
|
||||
|
||||
- Italiaanse vertaling [#667](https://github.com/elyukai/optolith-client/issues/667) [#610](https://github.com/elyukai/optolith-client/issues/610)
|
||||
- Optionele papier-stijl achtergrond voor helden document. [#36](https://github.com/elyukai/optolith-client/issues/36)
|
||||
- helden document zoom optie. [#665](https://github.com/elyukai/optolith-client/issues/665)
|
||||
- Geld toevoegen/aftrekken. [#666](https://github.com/elyukai/optolith-client/issues/666)
|
||||
- Voeg Voordelen, Nadelen en Competenties op maat toe met gekozen naam en AP waarde (tijdelijke oplossing) [#632](https://github.com/elyukai/optolith-client/issues/632)
|
||||
|
||||
|
||||
### Verbeteringen
|
||||
|
||||
- Gewicht wordt nu in zijn eigen kolom getoond in de uitrusting tab. [#305](https://github.com/elyukai/optolith-client/issues/305)
|
||||
|
||||
@@ -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,131 +0,0 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema",
|
||||
"$id": "Schema/Config/Config.l10n.schema.json",
|
||||
"$ref": "#/definitions/Config",
|
||||
"definitions": {
|
||||
"Config": {
|
||||
"title": "RawConfig",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"herolistSortOrder": {
|
||||
"enum": ["name", "datemodified", "dateModified"]
|
||||
},
|
||||
"herolistVisibilityFilter": {
|
||||
"enum": ["all", "own", "shared"]
|
||||
},
|
||||
"racesSortOrder": {
|
||||
"enum": ["name", "cost"]
|
||||
},
|
||||
"racesValueVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"culturesSortOrder": {
|
||||
"enum": ["name", "cost"]
|
||||
},
|
||||
"culturesVisibilityFilter": {
|
||||
"enum": ["all", "common"]
|
||||
},
|
||||
"culturesValueVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"professionsSortOrder": {
|
||||
"enum": ["name", "cost"]
|
||||
},
|
||||
"professionsVisibilityFilter": {
|
||||
"enum": ["all", "common"]
|
||||
},
|
||||
"professionsFromExpansionsVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"professionsGroupVisibilityFilter": {
|
||||
"enum": [0, 1, 2, 3]
|
||||
},
|
||||
"advantagesDisadvantagesCultureRatingVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"talentsSortOrder": {
|
||||
"enum": ["name", "group", "ic"]
|
||||
},
|
||||
"talentsCultureRatingVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"combatTechniquesSortOrder": {
|
||||
"enum": ["name", "group", "ic"]
|
||||
},
|
||||
"specialAbilitiesSortOrder": {
|
||||
"enum": ["name", "group", "groupname"]
|
||||
},
|
||||
"spellsSortOrder": {
|
||||
"enum": ["name", "group", "property", "ic"]
|
||||
},
|
||||
"spellsUnfamiliarVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"liturgiesSortOrder": {
|
||||
"enum": ["name", "group", "ic"]
|
||||
},
|
||||
"equipmentSortOrder": {
|
||||
"enum": ["name", "groupname", "where", "weight"]
|
||||
},
|
||||
"equipmentGroupVisibilityFilter": {
|
||||
"type": "integer"
|
||||
},
|
||||
"sheetCheckAttributeValueVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sheetUseParchment": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sheetZoomFactor": {
|
||||
"type": "number"
|
||||
},
|
||||
"enableActiveItemHints": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"locale": {
|
||||
"type": "string"
|
||||
},
|
||||
"fallbackLocale": {
|
||||
"type": "string"
|
||||
},
|
||||
"theme": {
|
||||
"enum": ["light", "dark"]
|
||||
},
|
||||
"enableEditingHeroAfterCreationPhase": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"meleeItemTemplatesCombatTechniqueFilter": {
|
||||
"type": "string"
|
||||
},
|
||||
"rangedItemTemplatesCombatTechniqueFilter": {
|
||||
"type": "string"
|
||||
},
|
||||
"enableAnimations": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"herolistSortOrder",
|
||||
"herolistVisibilityFilter",
|
||||
"racesSortOrder",
|
||||
"culturesSortOrder",
|
||||
"culturesVisibilityFilter",
|
||||
"professionsSortOrder",
|
||||
"professionsVisibilityFilter",
|
||||
"professionsGroupVisibilityFilter",
|
||||
"advantagesDisadvantagesCultureRatingVisibility",
|
||||
"talentsSortOrder",
|
||||
"talentsCultureRatingVisibility",
|
||||
"combatTechniquesSortOrder",
|
||||
"specialAbilitiesSortOrder",
|
||||
"spellsSortOrder",
|
||||
"spellsUnfamiliarVisibility",
|
||||
"liturgiesSortOrder",
|
||||
"equipmentSortOrder",
|
||||
"equipmentGroupVisibilityFilter",
|
||||
"enableActiveItemHints"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
const _require = require("esm")(module)
|
||||
|
||||
process.once('loaded', () => {
|
||||
global.require = _require
|
||||
})
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.1 MiB |
@@ -1,28 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Optolith</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
|
||||
<meta
|
||||
http-equiv="Content-Security-Policy"
|
||||
content="
|
||||
default-src 'self' 'unsafe-inline' 'unsafe-eval';
|
||||
img-src 'self' data:;
|
||||
">
|
||||
|
||||
<link href="main.css" rel="stylesheet">
|
||||
<link href="favicon.png" rel="icon" type="image/png" size="267x267">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="bodywrapper"></div>
|
||||
<div id="modals-root"></div>
|
||||
<script>
|
||||
// require = require('esm')(module)
|
||||
require('./entry.js')
|
||||
</script>
|
||||
<!-- <script src="./testmodule.js" type="module"></script> -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,2 +0,0 @@
|
||||
require = require('esm')(module)
|
||||
require('./main.js')
|
||||
@@ -1,25 +0,0 @@
|
||||
// Generated by BUCKLESCRIPT, 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,18 +0,0 @@
|
||||
import { writeFile } from 'fs';
|
||||
import sass from 'sass';
|
||||
|
||||
sass .render (
|
||||
{ file: 'src/Main.scss', outputStyle: 'compressed' },
|
||||
(err, result) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
writeFile ('app/main.css', result.css, err => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
console.log('SCSS successfully bundled!');
|
||||
})
|
||||
})
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
// @ts-check
|
||||
import { join } from "node:path"
|
||||
import { jsonSchema } from "optolith-tsjsonschemamd/renderers"
|
||||
|
||||
/** @type {import("optolith-tsjsonschemamd").GeneratorOptions} */
|
||||
export default {
|
||||
sourceDir: join("src", "shared", "schema"),
|
||||
outputs: [
|
||||
{
|
||||
targetDir: join("src", "assets", "schema"),
|
||||
renderer: jsonSchema({ spec: "Draft_07" }),
|
||||
}
|
||||
],
|
||||
clean: true,
|
||||
verbose: false
|
||||
}
|
||||
Generated
+24488
-8632
File diff suppressed because it is too large
Load Diff
+69
-65
@@ -1,74 +1,74 @@
|
||||
{
|
||||
"name": "optolith",
|
||||
"productName": "Optolith",
|
||||
"version": "1.4.1",
|
||||
"version": "2.0.0-alpha.1",
|
||||
"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/index.js",
|
||||
"main": ".webpack/main.js",
|
||||
"dependencies": {
|
||||
"@glennsl/bs-json": "5.0.2",
|
||||
"ajv": "6.12.0",
|
||||
"bs-platform": "7.3.2",
|
||||
"electron-devtools-installer": "^3.0.0",
|
||||
"electron-log": "4.1.2",
|
||||
"electron-updater": "4.3.1",
|
||||
"@reduxjs/toolkit": "^1.9.5",
|
||||
"adm-zip": "^0.5.1",
|
||||
"ajv": "^8.12.0",
|
||||
"ajv-formats": "^2.1.1",
|
||||
"electron-extension-installer": "^1.2.0",
|
||||
"electron-log": "^4.4.8",
|
||||
"electron-updater": "^5.0.5",
|
||||
"electron-window-state": "5.0.3",
|
||||
"esm": "^3.2.25",
|
||||
"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-portal": "4.2.1",
|
||||
"react-redux": "7.2.0",
|
||||
"react-textfit": "1.1.0",
|
||||
"reason-react": "0.8.0",
|
||||
"reductive": "2.0.1",
|
||||
"redux": "4.0.5",
|
||||
"redux-devtools-extension": "^2.13.8",
|
||||
"redux-thunk": "2.3.0",
|
||||
"remark-breaks": "1.0.5",
|
||||
"reselect": "4.0.0",
|
||||
"optolith-database-schema": "^0.12.0",
|
||||
"react": "^18.2.0",
|
||||
"react-custom-scrollbars-2": "^4.5.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-markdown": "^8.0.0",
|
||||
"react-redux": "^8.0.7",
|
||||
"redux-devtools-extension": "2.13.8",
|
||||
"rehype-raw": "^5.1.0",
|
||||
"remark-breaks": "^2.0.2",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"semver": "7.3.2",
|
||||
"ssh2-sftp-client": "5.1.2",
|
||||
"tslib": "1.11.2",
|
||||
"yaml": "1.9.2"
|
||||
"tslib": "^2.3.1",
|
||||
"yaml": "1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@glennsl/bs-jest": "0.5.1",
|
||||
"@types/classnames": "2.2.10",
|
||||
"@types/jest": "25.2.1",
|
||||
"@types/mousetrap": "1.6.3",
|
||||
"@types/node": "13.13.5",
|
||||
"@types/react": "16.9.34",
|
||||
"@types/react-custom-scrollbars": "4.0.6",
|
||||
"@types/react-dom": "16.9.7",
|
||||
"@types/react-portal": "4.0.2",
|
||||
"@types/react-redux": "7.1.8",
|
||||
"@types/semver": "7.1.0",
|
||||
"@typescript-eslint/eslint-plugin": "2.31.0",
|
||||
"@typescript-eslint/parser": "2.31.0",
|
||||
"custom-env": "2.0.1",
|
||||
"dotenv": "8.2.0",
|
||||
"electron": "8.2.5",
|
||||
"electron-builder": "22.8.0",
|
||||
"electron-notarize": "0.3.0",
|
||||
"eslint": "6.8.0",
|
||||
"eslint-plugin-react": "7.19.0",
|
||||
"eslint-plugin-react-hooks": "4.0.0",
|
||||
"fs-extra": "9.0.0",
|
||||
"gentype": "3.22.0",
|
||||
"jest": "26.4.2",
|
||||
"qusly-core": "2.5.2",
|
||||
"sass": "1.26.5",
|
||||
"ts-jest": "26.3.0",
|
||||
"typescript": "3.8.3"
|
||||
"@commitlint/cli": "11.0.0",
|
||||
"@commitlint/config-conventional": "11.0.0",
|
||||
"@types/mousetrap": "1.6.4",
|
||||
"@types/node": "^20.2.5",
|
||||
"@types/react": "^18.2.7",
|
||||
"@types/react-dom": "^18.2.4",
|
||||
"@types/react-redux": "7.1.11",
|
||||
"@types/semver": "7.3.4",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.0",
|
||||
"@typescript-eslint/parser": "^5.10.0",
|
||||
"css-loader": "^6.8.1",
|
||||
"electron": "^24.1.3",
|
||||
"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",
|
||||
"glob": "^10.2.6",
|
||||
"html-webpack-plugin": "^5.5.1",
|
||||
"mini-css-extract-plugin": "^2.7.6",
|
||||
"optolith-tsjsonschemamd": "^0.9.3",
|
||||
"resolve-url-loader": "^5.0.0",
|
||||
"sass": "^1.62.1",
|
||||
"sass-loader": "^13.3.1",
|
||||
"ssh2-sftp-client": "^9.0.1",
|
||||
"standard-version": "^9.3.1",
|
||||
"ts-jest": "^29.1.0",
|
||||
"ts-loader": "^9.4.2",
|
||||
"tsx": "^3.12.7",
|
||||
"typescript": "^5.0.4",
|
||||
"webpack": "^5.84.1",
|
||||
"webpack-cli": "^5.1.1"
|
||||
},
|
||||
"scripts": {
|
||||
"prerelease:win": "set NODE_ENV=development && node ./deploy/buildInsiderWin.js",
|
||||
@@ -77,17 +77,21 @@
|
||||
"stable:win": "set NODE_ENV=production && node ./deploy/buildWin.js",
|
||||
"stable:linux": "NODE_ENV=production node ./deploy/buildLinux.js",
|
||||
"stable:mac": "NODE_ENV=production node ./deploy/buildMac.js",
|
||||
"css:build": "node --experimental-modules ./deploy/buildSass.mjs",
|
||||
"build": "npm run re:build && npm run css:build && npm run ts:build",
|
||||
"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 ts:build && npm run css:build && npm run js:build",
|
||||
"js:build": "webpack",
|
||||
"js:watch": "webpack -w",
|
||||
"ts:build": "tsc",
|
||||
"ts:watch": "tsc --watch",
|
||||
"re:build": "bsb -make-world",
|
||||
"re:watch": "bsb -make-world -w",
|
||||
"re:clean": "bsb -clean-world",
|
||||
"ts:watch": "tsc -w",
|
||||
"createschemas": "otjsmd",
|
||||
"lint": "eslint \"src/\" --ext \".ts\" --ext \".tsx\"",
|
||||
"start": "electron .",
|
||||
"test": "jest",
|
||||
"circ": "madge -c ./src"
|
||||
"test": "glob -c \"node --loader tsx --test\" \"./src/shared/**/*.test.ts\"",
|
||||
"circ": "madge -c ./src",
|
||||
"release:main": "standard-version --skip.commit --skip.tag",
|
||||
"release:pre": "standard-version --prerelease=alpha"
|
||||
},
|
||||
"repository": "github:elyukai/optolith-client"
|
||||
"repository": "github:elyukai/optolith-client",
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
@@ -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 BUCKLESCRIPT, 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"
|
||||
@@ -25,6 +24,7 @@ interface PromptOptionsCreator extends RecordCreator<PromptOptions<any>> {
|
||||
<A> (x: PartialMaybeOrNothing<OmitName<PromptOptions<A>>>): Record<PromptOptions<A>>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const PromptOptions: PromptOptionsCreator =
|
||||
fromDefault ("PromptOptions")
|
||||
<PromptOptions<any>> ({
|
||||
@@ -45,6 +45,7 @@ interface PromptButtonCreator extends RecordCreator<PromptButton<any>> {
|
||||
<A> (x: PartialMaybeOrNothing<OmitName<PromptButton<A>>>): Record<PromptButton<A>>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const PromptButton: PromptButtonCreator =
|
||||
fromDefault ("PromptButton")
|
||||
<PromptButton<any>> ({
|
||||
@@ -72,6 +73,7 @@ interface CustomPromptOptionsCreator extends RecordCreator<CustomPromptOptions<a
|
||||
<A> (x: PartialMaybeOrNothing<OmitName<CustomPromptOptions<A>>>): Record<CustomPromptOptions<A>>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const CustomPromptOptions: CustomPromptOptionsCreator =
|
||||
fromDefault ("CustomPromptOptions")
|
||||
<CustomPromptOptions<any>> ({
|
||||
@@ -104,6 +106,7 @@ export interface AlertOptions {
|
||||
message: string
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const AlertOptions =
|
||||
fromDefault ("AlertOptions")
|
||||
<AlertOptions> ({
|
||||
@@ -176,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")),
|
||||
@@ -192,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),
|
||||
@@ -212,6 +215,7 @@ export interface ConfirmOptions {
|
||||
useYesNo: boolean
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const ConfirmOptions =
|
||||
fromDefault ("ConfirmOptions")
|
||||
<ConfirmOptions> ({
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// Generated by BUCKLESCRIPT, 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,
|
||||
@@ -290,7 +284,11 @@ export const imgPathToBase64 =
|
||||
(path: string): Maybe<string> => {
|
||||
if (path.length > 0 && !isBase64Image (path)) {
|
||||
if (fs.existsSync (path)) {
|
||||
const prefix = `data:image/${extname (path).slice (1)};base64,`
|
||||
const ext = extname (path)
|
||||
.slice (1)
|
||||
.toLowerCase ()
|
||||
|
||||
const prefix = `data:image/${ext};base64,`
|
||||
const file = fs.readFileSync (path)
|
||||
const fileString = file.toString ("base64")
|
||||
|
||||
@@ -303,6 +301,7 @@ export const imgPathToBase64 =
|
||||
return Just (path)
|
||||
}
|
||||
|
||||
|
||||
export const requestHeroExport =
|
||||
(id: string): ReduxAction =>
|
||||
async (dispatch, getState) => {
|
||||
@@ -338,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"),
|
||||
})))
|
||||
@@ -349,7 +348,7 @@ export const requestHeroExport =
|
||||
const message = getErrorMsg (staticData)
|
||||
(translate (staticData)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(res.value)
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -391,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 =
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
/* eslint-disable @typescript-eslint/no-redeclare */
|
||||
|
||||
export const SET_LOCALE = "SET_LOCALE"
|
||||
export type SET_LOCALE = "SET_LOCALE"
|
||||
|
||||
@@ -390,8 +392,6 @@ export const EDIT_ITEM = "EDIT_ITEM"
|
||||
export type EDIT_ITEM = "EDIT_ITEM"
|
||||
export const REMOVE_ITEM = "REMOVE_ITEM"
|
||||
export type REMOVE_ITEM = "REMOVE_ITEM"
|
||||
export const SET_ITEM = "SET_ITEM"
|
||||
export type SET_ITEM = "SET_ITEM"
|
||||
export const SET_ITEMS_SORT_ORDER = "SET_ITEMS_SORT_ORDER"
|
||||
export type SET_ITEMS_SORT_ORDER = "SET_ITEMS_SORT_ORDER"
|
||||
export const SET_DUCATES = "SET_DUCATES"
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// Generated by BUCKLESCRIPT, 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 =
|
||||
{ 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 };
|
||||
export type Id = t;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatable =
|
||||
{ tag: "Advantage"; value: number }
|
||||
| { tag: "Disadvantage"; value: number }
|
||||
| { tag: "SpecialAbility"; value: number };
|
||||
export type ActivatableId = activatable;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableAndSkill =
|
||||
{ tag: "Advantage"; value: number }
|
||||
| { tag: "Disadvantage"; value: number }
|
||||
| { tag: "SpecialAbility"; value: number }
|
||||
| { tag: "Spell"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number };
|
||||
export type ActivatableAndSkillId = activatableAndSkill;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableSkill =
|
||||
{ tag: "Spell"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number };
|
||||
export type ActivatableSkillId = activatableSkill;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type permanentSkill =
|
||||
{ tag: "Skill"; value: number }
|
||||
| { tag: "CombatTechnique"; value: number };
|
||||
export type PermanentSkillId = permanentSkill;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type selectOption =
|
||||
{ tag: "Generic"; value: number }
|
||||
| { tag: "Skill"; value: number }
|
||||
| { tag: "CombatTechnique"; value: number }
|
||||
| { tag: "Spell"; value: number }
|
||||
| { tag: "Cantrip"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number }
|
||||
| { tag: "Blessing"; value: 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
@@ -34,6 +34,7 @@ type IdPrefixesByCategory = {
|
||||
[K in Category]: IdPrefixes
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const IdPrefixesByCategory = Object.freeze<IdPrefixesByCategory> ({
|
||||
[Category.ADVANTAGES]: IdPrefixes.ADVANTAGES,
|
||||
[Category.ATTRIBUTES]: IdPrefixes.ATTRIBUTES,
|
||||
|
||||
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 =
|
||||
{ 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 };
|
||||
export type Id = id;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableId =
|
||||
{ tag: "Advantage"; value: number }
|
||||
| { tag: "Disadvantage"; value: number }
|
||||
| { tag: "SpecialAbility"; value: number };
|
||||
export type ActivatableId = activatableId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableAndSkillId =
|
||||
{ tag: "Advantage"; value: number }
|
||||
| { tag: "Disadvantage"; value: number }
|
||||
| { tag: "SpecialAbility"; value: number }
|
||||
| { tag: "Spell"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number };
|
||||
export type ActivatableAndSkillId = activatableAndSkillId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type activatableSkillId =
|
||||
{ tag: "Spell"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number };
|
||||
export type ActivatableSkillId = activatableSkillId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type skillId =
|
||||
{ tag: "Skill"; value: number }
|
||||
| { tag: "CombatTechnique"; value: number };
|
||||
export type SkillId = skillId;
|
||||
|
||||
// tslint:disable-next-line:interface-over-type-literal
|
||||
export type selectOptionId =
|
||||
{ tag: "Generic"; value: number }
|
||||
| { tag: "Skill"; value: number }
|
||||
| { tag: "CombatTechnique"; value: number }
|
||||
| { tag: "Spell"; value: number }
|
||||
| { tag: "Cantrip"; value: number }
|
||||
| { tag: "LiturgicalChant"; value: number }
|
||||
| { tag: "Blessing"; value: 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 =
|
||||
|
||||
@@ -15,6 +15,7 @@ export interface ActivatableActivationEntryType {
|
||||
wikiEntry: Record<Advantage> | Record<Disadvantage>
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const ActivatableActivationEntryType =
|
||||
fromDefault ("ActivatableActivationEntryType")
|
||||
<ActivatableActivationEntryType> ({
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user