Compare commits
628
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7ef05d683 | ||
|
|
3706a4f78e | ||
|
|
f4cf03966c | ||
|
|
630ec88c7e | ||
|
|
8484265c2a | ||
|
|
dbdb75a888 | ||
|
|
0dc6316b5b | ||
|
|
c7d1735e4b | ||
|
|
aa93dab7fd | ||
|
|
5a9ae86cf9 | ||
|
|
7f5f94491e | ||
|
|
a2979650f2 | ||
|
|
3e2f55b9a2 | ||
|
|
8d02399238 | ||
|
|
f0d46a9d73 | ||
|
|
c3f7f4faa8 | ||
|
|
ed97c55c4e | ||
|
|
bc80b0479a | ||
|
|
fdd391b849 | ||
|
|
057edce846 | ||
|
|
c52fc26a1b | ||
|
|
d28667a935 | ||
|
|
b92e47cd13 | ||
|
|
87a21b6fc4 | ||
|
|
ccd0898f4e | ||
|
|
c162931e74 | ||
|
|
b578254d75 | ||
|
|
7b57aca991 | ||
|
|
282467e4af | ||
|
|
e6d1b8d3fd | ||
|
|
f09be7d54b | ||
|
|
3397ed8cee | ||
|
|
7b6a0980b9 | ||
|
|
7b245b989b | ||
|
|
32058f76c2 | ||
|
|
a6576bb8ab | ||
|
|
7c6e377692 | ||
|
|
fe7c5e68ed | ||
|
|
531530e763 | ||
|
|
e1befd1383 | ||
|
|
2eb87c8f4c | ||
|
|
531715f171 | ||
|
|
4c9096b3d5 | ||
|
|
7c3d722d7e | ||
|
|
c4b995e046 | ||
|
|
c987847c9b | ||
|
|
e99828f1cc | ||
|
|
8e8932cd83 | ||
|
|
246b3d5c1d | ||
|
|
c15505062d | ||
|
|
8d54177cac | ||
|
|
96c7b54fce | ||
|
|
5c7ffd0660 | ||
|
|
d24fae03b7 | ||
|
|
8102bb1a9a | ||
|
|
07d336dbb3 | ||
|
|
d40bdac744 | ||
|
|
d3926aff86 | ||
|
|
80fdffb373 | ||
|
|
92bfcb96b0 | ||
|
|
afd32c9827 | ||
|
|
3f87dca910 | ||
|
|
2c9332c37f | ||
|
|
9e9a1139d3 | ||
|
|
c5d2b0a7a4 | ||
|
|
f1e16d5c39 | ||
|
|
449f8c7bb2 | ||
|
|
53ab0e704e | ||
|
|
5b7f223211 | ||
|
|
5bb9c8ca7b | ||
|
|
ef84a38cf6 | ||
|
|
d2eca82ea5 | ||
|
|
854995cb3b | ||
|
|
659ab5f8db | ||
|
|
8777b9a0cd | ||
|
|
27cbd7abd7 | ||
|
|
e4672041db | ||
|
|
fc8c837008 | ||
|
|
a3c269dd35 | ||
|
|
8753a4656e | ||
|
|
bdb3eb7804 | ||
|
|
c0dbb3fbcb | ||
|
|
06eac93221 | ||
|
|
d2d3445928 | ||
|
|
c0d799c057 | ||
|
|
b1942216e5 | ||
|
|
1e21b6bcd4 | ||
|
|
8b18b26361 | ||
|
|
923b7605fe | ||
|
|
589338fe74 | ||
|
|
5f1e1f8148 | ||
|
|
1f090605a4 | ||
|
|
e558c1d80d | ||
|
|
232795d129 | ||
|
|
a49048d468 | ||
|
|
1ce2db9cfb | ||
|
|
7e31136083 | ||
|
|
4c9a1f9bc5 | ||
|
|
2a62e4231d | ||
|
|
41ee35ba76 | ||
|
|
cad0f26042 | ||
|
|
7a9da8f65e | ||
|
|
e36099d812 | ||
|
|
8e66f9b83a | ||
|
|
f1024868ff | ||
|
|
a24ff8082a | ||
|
|
1ed0c64b0d | ||
|
|
83b534d3f9 | ||
|
|
4dabbdbcd2 | ||
|
|
0ab65e869c | ||
|
|
f2e61386ab | ||
|
|
e70a8b9d34 | ||
|
|
c3985275bb | ||
|
|
8b060b6002 | ||
|
|
ac0cdc3778 | ||
|
|
8b5eedeb37 | ||
|
|
06b57c9d15 | ||
|
|
03f26214ae | ||
|
|
d66afba3c1 | ||
|
|
3574d1ba46 | ||
|
|
dcfba14df7 | ||
|
|
6669352d06 | ||
|
|
9cb26586f3 | ||
|
|
cd16e5314a | ||
|
|
6ba99f2f46 | ||
|
|
bd9fc1badc | ||
|
|
47e66d6546 | ||
|
|
bba9b92e5d | ||
|
|
fb0a0bbbfb | ||
|
|
8bcae62f2f | ||
|
|
383a9c166c | ||
|
|
94e751fda1 | ||
|
|
36c643f04a | ||
|
|
0143c28b0c | ||
|
|
793ad447b4 | ||
|
|
9f3e52b5da | ||
|
|
a7ff9fc901 | ||
|
|
3ea0d6ee10 | ||
|
|
83d9bd40dd | ||
|
|
8fb5f28dd0 | ||
|
|
85eba763ac | ||
|
|
a6417ff1de | ||
|
|
fe85d2d79a | ||
|
|
4850363119 | ||
|
|
e0f3d5b1a3 | ||
|
|
a26b4094c2 | ||
|
|
47028ab470 | ||
|
|
d8c9f52542 | ||
|
|
29c7b4bc39 | ||
|
|
6b93c15aa0 | ||
|
|
0620ff2ab8 | ||
|
|
10582541e0 | ||
|
|
c13b557dd7 | ||
|
|
bf9d29a6dc | ||
|
|
4699d38a1a | ||
|
|
b2fb0353a9 | ||
|
|
66077430d8 | ||
|
|
08e7817597 | ||
|
|
87cec15ba9 | ||
|
|
63ac0abbe3 | ||
|
|
41278f8316 | ||
|
|
5d45a6084e | ||
|
|
f8114c2f43 | ||
|
|
e40f995e34 | ||
|
|
ed74170865 | ||
|
|
8297455ddb | ||
|
|
42891f070c | ||
|
|
a5df7c863c | ||
|
|
ec9bd71e10 | ||
|
|
21146eb2ab | ||
|
|
16bd668313 | ||
|
|
6eeb430e83 | ||
|
|
ae2fbad1c7 | ||
|
|
d647cf5f4e | ||
|
|
e334e51685 | ||
|
|
092343f45d | ||
|
|
7ac4773b05 | ||
|
|
0b5713d6fd | ||
|
|
6357b2c4b4 | ||
|
|
ea86624560 | ||
|
|
fe34bedc54 | ||
|
|
c8094f5ef1 | ||
|
|
a02700eecc | ||
|
|
fdde329de5 | ||
|
|
c1b2e267cb | ||
|
|
eb5a06884d | ||
|
|
0a59d9e5e5 | ||
|
|
3ceeadbdf7 | ||
|
|
28f260a2c4 | ||
|
|
5b6a4c8301 | ||
|
|
cc5ecd6f09 | ||
|
|
9179bb9ff6 | ||
|
|
6c63ab1b50 | ||
|
|
3f9fae30a2 | ||
|
|
2ad037ecbc | ||
|
|
3d755eb408 | ||
|
|
2c6da7bd75 | ||
|
|
ccd7decc83 | ||
|
|
397abe2b4a | ||
|
|
3b05e69e27 | ||
|
|
723e9106eb | ||
|
|
eef960f496 | ||
|
|
6b706d3adb | ||
|
|
d3a6df526d | ||
|
|
a098a97509 | ||
|
|
093a726cf2 | ||
|
|
9d033d23df | ||
|
|
912642a5ee | ||
|
|
b92c19a3c8 | ||
|
|
c2afd39946 | ||
|
|
444cb12892 | ||
|
|
b1d7ad9ae1 | ||
|
|
f16a8fe249 | ||
|
|
764731d02f | ||
|
|
02f24b24bc | ||
|
|
ee30c4eaea | ||
|
|
8de7b51895 | ||
|
|
2c1cea9ef8 | ||
|
|
f0e8ce17ab | ||
|
|
b6112666b8 | ||
|
|
99123d5ec0 | ||
|
|
17424878e7 | ||
|
|
e44e6f8832 | ||
|
|
c33e4f1821 | ||
|
|
c1dab5b312 | ||
|
|
31cf5d6c54 | ||
|
|
63243a2e9d | ||
|
|
9017dff1fc | ||
|
|
6a479949e7 | ||
|
|
228c401666 | ||
|
|
052b5bbf2f | ||
|
|
f30efc84ce | ||
|
|
9a2902c9e9 | ||
|
|
9b44e29738 | ||
|
|
096af99794 | ||
|
|
073064c030 | ||
|
|
1ff11d6e9a | ||
|
|
fa1c527381 | ||
|
|
272095d0b9 | ||
|
|
f416587e33 | ||
|
|
cb3a4a24f2 | ||
|
|
20a0c7a055 | ||
|
|
2ec6fd0ab5 | ||
|
|
bea154d6e6 | ||
|
|
728c7e15a8 | ||
|
|
182cb92a20 | ||
|
|
0531ffb657 | ||
|
|
f9b4ab6ce4 | ||
|
|
20242a117d | ||
|
|
0cf4c70b5c | ||
|
|
a577f6b783 | ||
|
|
d445a3a378 | ||
|
|
c58279cc95 | ||
|
|
d63a494305 | ||
|
|
1df5ac8fee | ||
|
|
3edf16d8be | ||
|
|
e63713687e | ||
|
|
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 | ||
|
|
8ce525e3ab | ||
|
|
8ff055276e | ||
|
|
dbcfcdfdcb | ||
|
|
daf95e35b3 | ||
|
|
f6c16227df | ||
|
|
a6ee74dfd8 | ||
|
|
66d76426a7 | ||
|
|
6b281c4057 | ||
|
|
c01d91c187 | ||
|
|
22da727071 | ||
|
|
11ffa12eb7 | ||
|
|
2b5b87f820 | ||
|
|
b0f7feca02 | ||
|
|
d223d380cb | ||
|
|
4130eb180d | ||
|
|
549b98b67f | ||
|
|
56c83ee4b5 | ||
|
|
eeb94be654 | ||
|
|
bc77542759 | ||
|
|
aa66e9cab6 | ||
|
|
637e8965d3 | ||
|
|
151370fb77 | ||
|
|
1fd8caaafc | ||
|
|
2b36e78fcd | ||
|
|
0d4f6d3a36 | ||
|
|
074f75a033 | ||
|
|
d9b8223ade | ||
|
|
875fe0e948 | ||
|
|
655658c59a | ||
|
|
872728bb35 | ||
|
|
286c0babc5 | ||
|
|
88204a54a1 | ||
|
|
76b2183954 | ||
|
|
43bdc12cb7 | ||
|
|
3cef003549 | ||
|
|
9cbb70ba52 | ||
|
|
bd7161062c | ||
|
|
080670ced1 | ||
|
|
aec0cac9ac | ||
|
|
815f4e6344 | ||
|
|
cf4b44b5b0 | ||
|
|
a61fa495b3 | ||
|
|
fde91bdcab | ||
|
|
16e39566cc | ||
|
|
7ac849be21 | ||
|
|
fab2c017b8 | ||
|
|
a608e925df | ||
|
|
49dd8ab6be | ||
|
|
6a422fa528 | ||
|
|
35e63a40b1 | ||
|
|
31522b85b4 | ||
|
|
d0960fa4f8 | ||
|
|
a46bdd7fff | ||
|
|
5276dea8c4 | ||
|
|
526a80d168 | ||
|
|
06d175904a | ||
|
|
b3ea4e62b0 | ||
|
|
82baf13397 | ||
|
|
152e2a133f | ||
|
|
445f67fd06 | ||
|
|
dcdbd15118 | ||
|
|
b086de5066 | ||
|
|
666c729e43 | ||
|
|
e5aed52707 | ||
|
|
669ce2057d | ||
|
|
7fd7d277c7 | ||
|
|
3d750ce323 | ||
|
|
4bc8bb8ebf | ||
|
|
f9a13d56bc | ||
|
|
34c72bf6ac | ||
|
|
e4bb5385f0 | ||
|
|
25cddaddc5 | ||
|
|
78f10da735 | ||
|
|
3403502004 | ||
|
|
910a006c28 | ||
|
|
8b4cb2b95d | ||
|
|
ad4f2ecf16 | ||
|
|
c04ce290ec | ||
|
|
cfc8dc65fb | ||
|
|
dad8ffe2b7 | ||
|
|
99031a2200 | ||
|
|
174f4d9cc2 | ||
|
|
5e6ec3290c | ||
|
|
8995884070 | ||
|
|
f48ff3bec8 | ||
|
|
8a25ff9177 | ||
|
|
b3d9ad082e | ||
|
|
ea995f4b85 | ||
|
|
7cf2c253db | ||
|
|
8de2e4287f | ||
|
|
9f8e8f4ac3 | ||
|
|
6467d0bdfb | ||
|
|
b3a3476d66 | ||
|
|
2c102af348 | ||
|
|
e21280f809 | ||
|
|
3038efe55d | ||
|
|
5fd969f0f6 | ||
|
|
8231129cd8 | ||
|
|
57f087f8e0 | ||
|
|
5a094efd31 | ||
|
|
3d60a25f3a | ||
|
|
c68634b3ef | ||
|
|
07d4cb5cfe | ||
|
|
69658b361b | ||
|
|
facf25cf2a | ||
|
|
05fef37a1a | ||
|
|
3bd8ed015d | ||
|
|
8b4a632ee4 | ||
|
|
f01ab59b67 | ||
|
|
1b5c718295 | ||
|
|
6162e811c5 | ||
|
|
4383b420ac | ||
|
|
d9e89d294d | ||
|
|
aa83244e85 | ||
|
|
c71641c7b1 | ||
|
|
07efadfbf9 | ||
|
|
714a3c8d7a | ||
|
|
b7cd6d8050 | ||
|
|
2572d8991f | ||
|
|
ac900abad8 | ||
|
|
56452f154b | ||
|
|
46f08abf04 | ||
|
|
c63c30d5e6 | ||
|
|
4511ece3b8 | ||
|
|
06217988bd | ||
|
|
f409358015 | ||
|
|
080e760600 | ||
|
|
2772154352 | ||
|
|
d03fd862d4 | ||
|
|
86d3a6aa13 | ||
|
|
0b3deba653 | ||
|
|
d5d205dde2 | ||
|
|
9e547f1ac3 | ||
|
|
757160f909 | ||
|
|
039bdca0e8 | ||
|
|
4057e26102 | ||
|
|
7f76f236bc | ||
|
|
fbcebdf8bb | ||
|
|
1f3e613d0c | ||
|
|
0ae1f835c0 | ||
|
|
e018df7afd | ||
|
|
ee2b2b3a29 | ||
|
|
225e05deb6 | ||
|
|
b39408a218 | ||
|
|
cda6d2322d | ||
|
|
61d8e9e112 | ||
|
|
b254798d9e | ||
|
|
ee2e354c17 | ||
|
|
a2f457e545 | ||
|
|
bf4e8d68c1 | ||
|
|
eb2248c82e | ||
|
|
2f4fac35a1 | ||
|
|
f8cf46f699 | ||
|
|
f890961114 | ||
|
|
06ae8991cd | ||
|
|
23065c93f6 | ||
|
|
51a63a3f08 | ||
|
|
8072ee399f | ||
|
|
ad6e2d6f83 | ||
|
|
d861f80d20 | ||
|
|
5abbbac935 | ||
|
|
5347ddec4f | ||
|
|
2cad1dd6b6 | ||
|
|
505a6718ba | ||
|
|
856c7da6cf | ||
|
|
5218562b53 | ||
|
|
0e04abec01 | ||
|
|
f54ddee6d6 | ||
|
|
d2814197b7 | ||
|
|
5b6b88c7e7 | ||
|
|
1d9b64eafc | ||
|
|
4773d98216 | ||
|
|
a5fd560998 | ||
|
|
0adf7d86a1 | ||
|
|
b41cee0ff1 | ||
|
|
c11fb747cd | ||
|
|
18fbade7c6 | ||
|
|
8f9f627a30 | ||
|
|
bc1619b231 | ||
|
|
1342977583 | ||
|
|
bb17ed75e1 | ||
|
|
c5f68a4a1d | ||
|
|
8fbdf55e51 | ||
|
|
57b8c82a17 | ||
|
|
a3df7d264b | ||
|
|
be4ef2344d | ||
|
|
86aee2b6e7 | ||
|
|
a78a0a8bd4 | ||
|
|
af1d47627c | ||
|
|
0f44de3812 | ||
|
|
3cb2beb740 | ||
|
|
098b658c70 | ||
|
|
dbb7bf4296 | ||
|
|
f6ee17b6cb | ||
|
|
702bb95615 | ||
|
|
dfe297ae4e | ||
|
|
e9b6fb16b1 | ||
|
|
8c0300ea6c | ||
|
|
51e731c37a | ||
|
|
568386363e | ||
|
|
64533686ce | ||
|
|
63073329f9 | ||
|
|
fbbf493f3e | ||
|
|
2d78190baa | ||
|
|
3e08cbb778 | ||
|
|
c1c04def86 | ||
|
|
a1f7e61c6f | ||
|
|
7ca9e44634 | ||
|
|
45d9a6f934 | ||
|
|
6c5ad44c3f | ||
|
|
ba65734345 | ||
|
|
bf097a7546 | ||
|
|
ff99b20219 | ||
|
|
afec30cb94 | ||
|
|
f535ec532d | ||
|
|
16d590c6e2 | ||
|
|
185514e141 | ||
|
|
717dd96c3d | ||
|
|
8779e84713 | ||
|
|
479659e871 | ||
|
|
8f03ae5694 | ||
|
|
aaa7f547ce | ||
|
|
2532cc1de9 | ||
|
|
2897742661 | ||
|
|
3195e06eb5 | ||
|
|
2405a095de | ||
|
|
50551e04a5 | ||
|
|
55c4da857e | ||
|
|
b1086ea312 | ||
|
|
79548077ac | ||
|
|
2e22db6fcb | ||
|
|
9860293db5 | ||
|
|
72051f32d2 | ||
|
|
dd3077164e | ||
|
|
eacfbf9e6f | ||
|
|
bfd8609dac | ||
|
|
7daa67e72d | ||
|
|
5dbf47af8e | ||
|
|
7eeee2cbb2 | ||
|
|
6825436119 | ||
|
|
f1ab40bf8f | ||
|
|
9d3f0f1425 | ||
|
|
f3c2043066 | ||
|
|
e0b9833ee0 | ||
|
|
9bdf3560b5 | ||
|
|
bc05cea0fb | ||
|
|
9afd9c6e1b | ||
|
|
22ae4648e5 | ||
|
|
0f08b0aad2 | ||
|
|
2e4d9cdd4b | ||
|
|
379b238650 | ||
|
|
748af56ae6 | ||
|
|
fd564c5129 | ||
|
|
16fc4fffcb | ||
|
|
cae1327290 | ||
|
|
f6f70ad8c8 | ||
|
|
897fae58e1 | ||
|
|
288a9f561a | ||
|
|
fbc1ecd631 | ||
|
|
4d7629fd02 | ||
|
|
9e34166128 | ||
|
|
02d33f4026 | ||
|
|
f60e93dd52 | ||
|
|
204a65afd3 | ||
|
|
4d910e2d75 | ||
|
|
f08b6ca18c | ||
|
|
b55574b7e0 | ||
|
|
3e1bfb3768 | ||
|
|
449584bc33 | ||
|
|
b23ed96733 | ||
|
|
0c74414f8e | ||
|
|
70b87f85be | ||
|
|
28c7e041a1 | ||
|
|
dcf96ef74e | ||
|
|
c70210efab | ||
|
|
9258853659 | ||
|
|
931e759c8f | ||
|
|
3d213dabde | ||
|
|
61ffce110b | ||
|
|
d78cf48702 | ||
|
|
a1008a82a1 | ||
|
|
b377c10b07 | ||
|
|
04bf908f08 | ||
|
|
f0470673e1 | ||
|
|
de4e46a4f2 | ||
|
|
6f810dfb6c | ||
|
|
9c4e7bd695 | ||
|
|
a05eb917d4 | ||
|
|
327e74d30f | ||
|
|
b2cb6488d9 | ||
|
|
c4118daa38 | ||
|
|
f6e86833f1 | ||
|
|
29fd661fa7 | ||
|
|
89d38c4cb5 | ||
|
|
6bf7bc8aca | ||
|
|
0882b76b42 | ||
|
|
a3fe6c13c3 |
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"]
|
||||
}
|
||||
@@ -1,3 +1,6 @@
|
||||
src/App/Utilities/YAML/Schema/
|
||||
*.js
|
||||
*.gen.tsx
|
||||
node_modules
|
||||
/app
|
||||
/deploy
|
||||
|
||||
+32
-11
@@ -1,12 +1,15 @@
|
||||
root: true
|
||||
parser: "@typescript-eslint/parser"
|
||||
plugins:
|
||||
- "@typescript-eslint"
|
||||
- eslint-plugin-react
|
||||
- eslint-plugin-react-hooks
|
||||
parser: "@typescript-eslint/parser"
|
||||
- eslint-plugin-tsdoc
|
||||
parserOptions:
|
||||
ecmaVersion: 2020
|
||||
ecmaVersion: latest
|
||||
sourceType: module
|
||||
project: ./tsconfig.json
|
||||
project:
|
||||
- ./tsconfig.json
|
||||
ecmaFeatures:
|
||||
jsx: true
|
||||
env:
|
||||
@@ -68,7 +71,12 @@ rules:
|
||||
no-empty-pattern: 2
|
||||
no-eq-null: 2
|
||||
no-eval: 2
|
||||
no-extend-native: 2
|
||||
no-extend-native:
|
||||
- 2
|
||||
- exceptions:
|
||||
- "Array"
|
||||
- "Map"
|
||||
- "Set"
|
||||
no-extra-bind: 2
|
||||
no-extra-label: 2
|
||||
no-fallthrough: 2
|
||||
@@ -93,7 +101,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 +128,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,7 +162,7 @@ rules:
|
||||
- consistent
|
||||
function-paren-newline:
|
||||
- 2
|
||||
- consistent
|
||||
- multiline-arguments
|
||||
jsx-quotes: 2
|
||||
key-spacing: 2
|
||||
keyword-spacing: 2
|
||||
@@ -192,7 +200,7 @@ rules:
|
||||
- code: 100
|
||||
ignoreComments: true
|
||||
ignoreTemplateLiterals: true
|
||||
ignorePattern: "^import |^export \\{(.*?)\\}|^ \\* "
|
||||
ignorePattern: "^import |^export \\{(.*?)\\}|^ \\* |^ *it ?\\(\"\\w+"
|
||||
max-statements-per-line: [2, { max: 2 }]
|
||||
multiline-ternary:
|
||||
- 2
|
||||
@@ -307,7 +315,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 +322,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
|
||||
@@ -361,10 +376,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
|
||||
@@ -470,6 +488,9 @@ rules:
|
||||
# React Hooks
|
||||
react-hooks/rules-of-hooks: 2
|
||||
react-hooks/exhaustive-deps: 2
|
||||
|
||||
# TSDoc
|
||||
tsdoc/syntax: warn
|
||||
settings:
|
||||
react:
|
||||
version: detect
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: optolith # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: Bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Environment (please complete the following information):**
|
||||
|
||||
- OS: [e.g. Windows 10]
|
||||
- Version: [e.g. 1.1.0, 1.3.0-alpha.5]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,73 @@
|
||||
name: Bug report
|
||||
description: Create a report to help improve Optolith
|
||||
labels:
|
||||
- Bug
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: agreements
|
||||
attributes:
|
||||
label: Please confirm the following
|
||||
options:
|
||||
- label: I checked the [current issues](https://github.com/elyukai/optolith-client/issues) for duplicate problems.
|
||||
required: true
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
description: A clear and concise description of what the bug is.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: to-reproduce
|
||||
attributes:
|
||||
label: To Reproduce
|
||||
description: |
|
||||
Steps to reproduce the behavior.
|
||||
placeholder: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: A clear and concise description of what you expected to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: If applicable, add screenshots to help explain your problem.
|
||||
validations:
|
||||
required: false
|
||||
- type: dropdown
|
||||
id: operating-system
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: Which operating systems have you used? You may select more than one.
|
||||
multiple: true
|
||||
options:
|
||||
- macOS
|
||||
- Windows
|
||||
- Linux
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: Which Optolith version have you used?
|
||||
placeholder: 1.1.0, 1.3.0-alpha.5, …
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add any other context about the problem here.
|
||||
validations:
|
||||
required: false
|
||||
@@ -7,14 +7,24 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
## Is your feature request related to a problem?
|
||||
|
||||
A clear and concise description of what the problem is. E.g. _I'm always frustrated when [...]_
|
||||
|
||||
|
||||
|
||||
## Describe the solution you'd like
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
|
||||
## Describe alternatives
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
|
||||
## Additional context
|
||||
|
||||
> Add any other context or screenshots about the feature request here.
|
||||
|
||||
@@ -7,21 +7,40 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Sources**
|
||||
> List here what is included in this part of the book to implement. E.g., for special abilities, you need to list every source of entries from the book. Example (in German):
|
||||
>
|
||||
> - [ ] S. 133 (Berufsgeheimnisse)
|
||||
> - [ ] S. 165-170 (Zauber- und Liturgiestile)
|
||||
> - [ ] S. 183 (Stabzauber)
|
||||
> - [ ] S. 195 (Zeremonialgegenstand Widderkeule)
|
||||
## Sources
|
||||
|
||||
**Tables**
|
||||
> Delete Univ and change locale if necessary. Add specific entries if they could not be resolved.
|
||||
<!-- List here what is included in this part of the book to implement. E.g., for special abilities, you need to list every source of entries from the book. Use page ranges if entries span multiple pages. Example:
|
||||
|
||||
- [ ] Univ
|
||||
- [ ] L10n de-DE
|
||||
- [ ] S. 133 (Entry A)
|
||||
- [ ] S. 133–134 (Entry B)
|
||||
|
||||
**Code**
|
||||
> List here what cannot be solved only using the tables. Example (in German):
|
||||
>
|
||||
> - [ ] Voraussetzungen Vorliebe I-II
|
||||
Alternatively, provide an overview of the different sections in the book where one or more relevant entries occur. Example (in German):
|
||||
|
||||
- [ ] S. 133–150 (Berufsgeheimnisse)
|
||||
|
||||
-->
|
||||
|
||||
- [ ] S. X (Entry/Section/Chapter Name)
|
||||
|
||||
## Special Notes
|
||||
|
||||
<!-- List here any special hints to implement the sources listed above. Example:
|
||||
|
||||
- All entries are already present, only add source references
|
||||
- Pay attention to the layout of entry A, there is a gap that should not be in Optolith
|
||||
|
||||
Replace the dash below this comment if there are any notes. -->
|
||||
|
||||
—
|
||||
|
||||
|
||||
|
||||
## Special Implementations
|
||||
|
||||
<!-- List issues that track what cannot be solved only using the database. Example:
|
||||
|
||||
- #123
|
||||
|
||||
Replace the dash below this comment if there are any notes. -->
|
||||
|
||||
—
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Publication ambiguity
|
||||
about: An ambiguity in an official publication
|
||||
title: ''
|
||||
labels: 'Ulisses: Question'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Source(s)
|
||||
|
||||
Please complete the following information:
|
||||
|
||||
- Book: [e.g. Magic of Aventuria I]
|
||||
- Printing: [e.g. 1st]
|
||||
- Page(s): [e.g. 199]
|
||||
- Area: [e.g. Profession Black Mage (Demirion Ophenos's Student), AP value]
|
||||
|
||||
|
||||
|
||||
## Describe the ambiguity
|
||||
|
||||
A clear and concise description of what the ambiguity is.
|
||||
@@ -7,21 +7,33 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Source (please complete the following information):**
|
||||
## Source (please complete the following information):
|
||||
|
||||
- Book: [e.g. Magic of Aventuria I]
|
||||
- Printing: [e.g. 1st]
|
||||
- Page(s): [e.g. 199]
|
||||
- Area: [e.g. Profession Black Mage (Demirion Ophenos's Student), AP value]
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
|
||||
## Describe the bug
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected text**
|
||||
|
||||
|
||||
## Expected text
|
||||
|
||||
A clear and concise description of what the text *should* be instead.
|
||||
|
||||
**Optolith Version:**
|
||||
|
||||
|
||||
## Optolith Version:
|
||||
|
||||
If applicable, the exact version of Optolith where you experience the bug, e.g. 1.2.0, 1.3.0-alpha.5.
|
||||
|
||||
**Additional context**
|
||||
|
||||
|
||||
## Additional context
|
||||
|
||||
If needed, add any other context about the problem here.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
name: Question
|
||||
about: I have a question.
|
||||
title: ''
|
||||
labels: Question
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,66 @@
|
||||
name: Prerelease Builds
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ matrix.osName }} Prerelease
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macOS-latest
|
||||
include:
|
||||
- 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 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Compile JavaScript files
|
||||
run: npm run js:build
|
||||
- name: Compile Sass files
|
||||
run: npm run css:build
|
||||
- name: Build macOS application
|
||||
if: runner.os == 'macOS'
|
||||
run: node ./deploy/build.mjs prerelease
|
||||
env:
|
||||
APPLEID: ${{ secrets.APPLEID }}
|
||||
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
|
||||
TEAMID: ${{ secrets.TEAMID }}
|
||||
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Linux application
|
||||
if: runner.os == 'Linux'
|
||||
run: node ./deploy/build.mjs prerelease
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Windows application
|
||||
if: runner.os == 'Windows'
|
||||
run: node ./deploy/build.mjs prerelease
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Deploy
|
||||
run: node ./deploy/deploy.mjs prerelease
|
||||
env:
|
||||
HOST: ${{ secrets.HOST }}
|
||||
USERNAME: ${{ secrets.USERNAME }}
|
||||
PASSWORD: ${{ secrets.PASSWORD }}
|
||||
ROOT: ${{ secrets.ROOT }}
|
||||
@@ -0,0 +1,66 @@
|
||||
name: Stable Builds
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ matrix.osName }} Stable
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macOS-latest
|
||||
include:
|
||||
- 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 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Compile JavaScript files
|
||||
run: npm run js:build
|
||||
- name: Compile Sass files
|
||||
run: npm run css:build
|
||||
- name: Build macOS application
|
||||
if: runner.os == 'macOS'
|
||||
run: node ./deploy/build.mjs stable
|
||||
env:
|
||||
APPLEID: ${{ secrets.APPLEID }}
|
||||
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
|
||||
TEAMID: ${{ secrets.TEAMID }}
|
||||
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Linux application
|
||||
if: runner.os == 'Linux'
|
||||
run: node ./deploy/build.mjs stable
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Build Windows application
|
||||
if: runner.os == 'Windows'
|
||||
run: node ./deploy/build.mjs stable
|
||||
env:
|
||||
UPDATE_URL: ${{ secrets.UPDATE_URL }}
|
||||
- name: Deploy
|
||||
run: node ./deploy/deploy.mjs stable
|
||||
env:
|
||||
HOST: ${{ secrets.HOST }}
|
||||
USERNAME: ${{ secrets.USERNAME }}
|
||||
PASSWORD: ${{ secrets.PASSWORD }}
|
||||
ROOT: ${{ secrets.ROOT }}
|
||||
@@ -0,0 +1,49 @@
|
||||
name: Integration
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Compile TypeScript files
|
||||
run: npm run ts:build
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
submodules: true
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
- name: Run linter
|
||||
run: npm run lint
|
||||
+3
-2
@@ -6,13 +6,15 @@ npm-debug.log*
|
||||
/dist/
|
||||
.rpt2_cache
|
||||
.esm-cache
|
||||
app/index.html
|
||||
app/main.css
|
||||
app/**/*.js
|
||||
app/**/*.js.map
|
||||
!app/index.js
|
||||
!app/esmPreload.js
|
||||
/installer/
|
||||
electron-builder.env
|
||||
*.map
|
||||
app/Database
|
||||
publishSettings.json
|
||||
|
||||
.env*
|
||||
@@ -20,7 +22,6 @@ publishSettings.json
|
||||
Tables.zip
|
||||
tables/
|
||||
deploy/tablesSrc.json
|
||||
src/App/Utilities/YAML/Schema/
|
||||
/lib/bs/
|
||||
.merlin
|
||||
.bsb.lock
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[submodule "app/Database"]
|
||||
path = app/Database
|
||||
url = https://github.com/elyukai/optolith-data.git
|
||||
-94
@@ -1,94 +0,0 @@
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- node
|
||||
|
||||
sudo: required
|
||||
|
||||
stages:
|
||||
- Test
|
||||
- name: Build
|
||||
if: tag ~= /^v\d+\.\d+\.\d+$/
|
||||
# if: branch = master
|
||||
- name: Build Insider
|
||||
if: tag ~= /^v\d+\.\d+\.\d+\-\w+\.\d+$/
|
||||
# if: branch = develop
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# Test stage
|
||||
- stage: Test
|
||||
os: linux
|
||||
install:
|
||||
- sh ./.travis/InstallLinux.sh
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm test
|
||||
- npm run lint
|
||||
|
||||
# Normal build stage
|
||||
- stage: Build
|
||||
name: Build Windows
|
||||
os: windows
|
||||
install:
|
||||
- ./.travis/InstallWin.bat
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm run ts:build
|
||||
- npm run release:win
|
||||
|
||||
- name: Build Linux
|
||||
os: linux
|
||||
install:
|
||||
- sh ./.travis/InstallLinux.sh
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm run ts:build
|
||||
- npm run release:linux
|
||||
|
||||
- name: Build OSX
|
||||
os: osx
|
||||
osx_image: xcode11.2
|
||||
install:
|
||||
- sh ./.travis/InstallMac.sh
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm run ts:build
|
||||
- npm run release:osx
|
||||
|
||||
# Insider build stage
|
||||
- stage: Build Insider
|
||||
name: Build Windows Insider
|
||||
os: windows
|
||||
install:
|
||||
- ./.travis/InstallWin.bat
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm run ts:build
|
||||
- npm run prerelease:win
|
||||
|
||||
- name: Build Linux Insider
|
||||
os: linux
|
||||
install:
|
||||
- sh ./.travis/InstallLinux.sh
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm run ts:build
|
||||
- npm run prerelease:linux
|
||||
|
||||
- name: Build OSX Insider
|
||||
os: osx
|
||||
osx_image: xcode11.2
|
||||
install:
|
||||
- sh ./.travis/InstallMac.sh
|
||||
script:
|
||||
- npm run ci:copyschemes
|
||||
- npm run re:build
|
||||
- npm run ts:build
|
||||
- npm run prerelease:osx
|
||||
@@ -1,15 +0,0 @@
|
||||
# Updated local cache
|
||||
echo apt update
|
||||
sudo apt update
|
||||
# Install python and pip
|
||||
echo apt install -y python3 python3-pip python3-setuptools python3-dev build-essential libssl-dev libffi-dev
|
||||
sudo apt install -y python3 python3-pip python3-setuptools python3-dev build-essential libssl-dev libffi-dev
|
||||
# Install needed package
|
||||
echo python3 -m pip install cryptography
|
||||
python3 -m pip install cryptography
|
||||
# Decrypt tables
|
||||
echo python3 prepareTables.py
|
||||
python3 prepareTables.py
|
||||
# Prepare node
|
||||
echo npm ci
|
||||
npm ci
|
||||
@@ -1,9 +0,0 @@
|
||||
# Install python from homebrew
|
||||
# Not necessary. Python already installed!
|
||||
# brew install python
|
||||
# Install neded packages
|
||||
python3 -m pip install cryptography
|
||||
# Decrypt tables
|
||||
python3 prepareTables.py
|
||||
# Prepare node
|
||||
npm ci
|
||||
@@ -1,12 +0,0 @@
|
||||
REM Install python
|
||||
choco install python --version 3.7.2
|
||||
REM Install pip
|
||||
choco install pip
|
||||
REM Install OpenSSL
|
||||
choco install openssl.light
|
||||
REM Install needed packages
|
||||
C:/Python37/python.exe -m pip install cryptography
|
||||
REM Decrypt tables
|
||||
C:/Python37/python.exe prepareTables.py
|
||||
REM Prepare node
|
||||
npm ci
|
||||
@@ -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
+23
-3
@@ -2,16 +2,36 @@
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug Main Process",
|
||||
"type": "node",
|
||||
"name": "Electron: Debug Main",
|
||||
"type": "pwa-node",
|
||||
"request": "launch",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
|
||||
"windows": {
|
||||
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
|
||||
},
|
||||
"args" : ["."],
|
||||
"runtimeArgs": [
|
||||
"--remote-debugging-port=9223",
|
||||
"."
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"name": "Electron: Attach Renderer",
|
||||
"type": "chrome",
|
||||
"request": "attach",
|
||||
"port": 9223,
|
||||
"webRoot": "${workspaceFolder}",
|
||||
"timeout": 30000
|
||||
}
|
||||
],
|
||||
"compounds": [
|
||||
{
|
||||
"name": "Electron: Debug All",
|
||||
"configurations": [
|
||||
"Electron: Debug Main",
|
||||
"Electron: Attach Renderer"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"typescript.tsdk": "node_modules\\typescript\\lib",
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"typescript.preferences.quoteStyle": "double",
|
||||
"javascript.preferences.quoteStyle": "double",
|
||||
"files.exclude": {
|
||||
|
||||
Vendored
+47
-53
@@ -8,64 +8,19 @@
|
||||
"type": "shell",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "build",
|
||||
"command": "npm run build",
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "buildTest",
|
||||
"command": "npm run buildTest"
|
||||
},
|
||||
{
|
||||
"label": "buildMac",
|
||||
"command": "npm run buildMac"
|
||||
},
|
||||
{
|
||||
"label": "buildMacTest",
|
||||
"command": "npm run buildMacTest"
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"command": "npm run watch"
|
||||
},
|
||||
{
|
||||
"label": "bundle",
|
||||
"command": "npm run bundle",
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "run",
|
||||
"label": "start",
|
||||
"command": "npm start"
|
||||
},
|
||||
{
|
||||
"label": "bundle_l10ns",
|
||||
"command": "npm run bundle_l10ns"
|
||||
},
|
||||
{
|
||||
"label": "bundle_data",
|
||||
"command": "npm run bundle_data"
|
||||
},
|
||||
{
|
||||
"label": "bundle_css",
|
||||
"command": "npm run bundle_css"
|
||||
},
|
||||
{
|
||||
"type": "typescript",
|
||||
"tsconfig": "tsconfig.json",
|
||||
"isBackground": true,
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
],
|
||||
"label": "jest",
|
||||
"command": "npm test",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "tsc watch",
|
||||
"type": "typescript",
|
||||
"tsconfig": "tsconfig.json",
|
||||
"option": "watch",
|
||||
@@ -73,11 +28,50 @@
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
],
|
||||
"group": "build"
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"group": "watch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "buildWin",
|
||||
"label": "webpack watch",
|
||||
"command": "npm run js:watch",
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"group": "watch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "sass watch",
|
||||
"command": "npm run css:watch",
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"group": "watch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"dependsOn": ["tsc watch", "webpack watch", "sass watch"],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "create prerelease",
|
||||
"command": "npm run release:pre",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "create release",
|
||||
"command": "npm run release:main",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "git push --follow-tags",
|
||||
"command": "git push --follow-tags",
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
Lukas Obermann <lukas.obermann@outlook.de>
|
||||
Lukas Obermann <lukas.obermann@icloud.com>
|
||||
Philipp Borucki <p.borucki@icloud.com>
|
||||
|
||||
+1073
File diff suppressed because it is too large
Load Diff
+38
-38
@@ -28,76 +28,76 @@ 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
|
||||
|
||||
Clone the repo.
|
||||
Clone the repo, including the private submodule.
|
||||
|
||||
```
|
||||
git clone https://github.com/elyukai/optolith-client.git
|
||||
```sh
|
||||
git clone --recurse-submodules https://github.com/elyukai/optolith-client.git
|
||||
```
|
||||
|
||||
Make sure Node.js (lastest version) is installed and run
|
||||
|
||||
```
|
||||
```sh
|
||||
npm i
|
||||
```
|
||||
|
||||
This installs all necessary packages.
|
||||
|
||||
Create a `tablesSrc.json` in the `/deploy` folder. The JSON consists of an object that has the following interface:
|
||||
|
||||
```ts
|
||||
{
|
||||
repository: string[];
|
||||
}
|
||||
```
|
||||
|
||||
The array is consumed by `path.join` from Node.js and represents the relative path from the optolith client root folder to the root folder of the private repo with the YAMl database.
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
{
|
||||
"repository": ["..", "optolith-data"]
|
||||
}
|
||||
```
|
||||
|
||||
### First run
|
||||
|
||||
Compile the source code. `ts:` is for TypeScript, `re:` for Reason/OCaml.
|
||||
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 ts:build
|
||||
npm run re:build
|
||||
npm run css:build
|
||||
npm run js:build
|
||||
```
|
||||
|
||||
…or watch it for better performance for subsequent compiling on save.
|
||||
(There's also a shorthand for that:)
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
npm run ts:watch
|
||||
|
||||
…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
|
||||
```
|
||||
|
||||
Import YAML files.
|
||||
To check the TypeScript validity, either check once or watch for changes (I'd always recommend to do the latter one).
|
||||
|
||||
```
|
||||
npm run getstatic
|
||||
```sh
|
||||
npm run ts:build
|
||||
npm run ts:watch
|
||||
```
|
||||
|
||||
Run the app:
|
||||
|
||||
```
|
||||
```sh
|
||||
npm start
|
||||
```
|
||||
|
||||
@@ -105,20 +105,20 @@ npm start
|
||||
|
||||
To compile the SCSS files, use
|
||||
|
||||
```
|
||||
```sh
|
||||
npm run css:build
|
||||
```
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
Clean the files built by the Reason compiler.
|
||||
Clean the files built by the Reason compiler, if there are any issue with it.
|
||||
|
||||
```
|
||||
```sh
|
||||
npm run re:clean
|
||||
```
|
||||
|
||||
Lint all project TS files using ESLint.
|
||||
|
||||
```
|
||||
```sh
|
||||
npm run lint
|
||||
```
|
||||
|
||||
File diff suppressed because one or more lines are too long
Submodule
+1
Submodule app/Database added at a43a1789d8
@@ -1,7 +1,220 @@
|
||||
## 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
|
||||
|
||||
- **Havena – Versunkene Geheimnisse** [#460](https://github.com/elyukai/optolith-client/issues/460)
|
||||
- **Unendlichkeit & Tiefenrausch** [#461](https://github.com/elyukai/optolith-client/issues/461)
|
||||
- **Katakomben & Ruinen** [#462](https://github.com/elyukai/optolith-client/issues/462)
|
||||
- Italienische Übersetzung [#667](https://github.com/elyukai/optolith-client/issues/667) [#610](https://github.com/elyukai/optolith-client/issues/610)
|
||||
- Optionaler Charakterbogenhintergrund in Papieroptik. [#36](https://github.com/elyukai/optolith-client/issues/36)
|
||||
- Zoom-Option für Charakterbogen-Ansicht. [#665](https://github.com/elyukai/optolith-client/issues/665)
|
||||
- Geld zum Geldbeutel hinzufügen oder davon abziehen. [#666](https://github.com/elyukai/optolith-client/issues/666)
|
||||
- Eigene Vorteile, Nachteile und Sonderfertigkeiten mit eigenem Namen und AP-Wert erstellen (temporäre Lösung). [#632](https://github.com/elyukai/optolith-client/issues/632)
|
||||
|
||||
### Verbesserungen
|
||||
|
||||
- Im Ausrüstungstab wird das Gewicht nun in einer eigenen Spalte angezeigt. [#305](https://github.com/elyukai/optolith-client/issues/305)
|
||||
- Unnötige Kampfbögen werden jetzt nicht mehr angezeigt und exportiert, stattdessen basiert die Anzeige nun darauf, welche Rüstungen der jeweilige Charakter besitzt. Der Kampfbogen für Komplettrüstungen wird angezeigt, wenn der Charakter keine Rüstung besitzt. [#407](https://github.com/elyukai/optolith-client/issues/407)
|
||||
- Der Name eines Eintrags zeigt nun, wie der Info-Button am Ende, den Regeltext des Eintrags an. [#556](https://github.com/elyukai/optolith-client/issues/556)
|
||||
|
||||
### Fehlerbehebungen
|
||||
|
||||
- Waffen aus **Aventurische Magie I** wurden nicht angezeigt. [#617](https://github.com/elyukai/optolith-client/issues/617)
|
||||
- Gegenstände aus **Aventurische Magie II** wurden nicht angezeigt. [#659](https://github.com/elyukai/optolith-client/issues/659)
|
||||
- In der Beschreibung der SF *Metessa Galora-Stil* war ein Schreibfehler. [#635](https://github.com/elyukai/optolith-client/issues/635)
|
||||
- SF *Tannhaus-Stil* hatte eine falsche Kampftechniken-Angabe. [#634](https://github.com/elyukai/optolith-client/issues/634)
|
||||
- SF *Sippenkrieger-Stil* hatte falsche erweiterte Sonderfertigkeiten. [#587](https://github.com/elyukai/optolith-client/issues/587)
|
||||
- Bei der Profession *Golgarit* und dessen Variante *Untotenjäger* fehlte die SF *Berittener Kampf*. [#597](https://github.com/elyukai/optolith-client/issues/597)
|
||||
- Die Profession *Ingerimmgeweihter* hatte falsche AP-Kosten und ihr fehlte eine Liturgie. [#574](https://github.com/elyukai/optolith-client/issues/574)
|
||||
- Die Varianten der Profession *Borongeweihter* hatten falsche Talentmodifikationen. [#548](https://github.com/elyukai/optolith-client/issues/548)
|
||||
- SF *Rabenschwestern (Seherin von Heute und Morgen)* hatte falsche erweiterte Sonderfertigkeiten. [#639](https://github.com/elyukai/optolith-client/issues/639)
|
||||
- Profession *Kammerdiener (Zofe)* hatte einen Bonus auf das falsche Talent. [#614](https://github.com/elyukai/optolith-client/issues/614)
|
||||
- SF *Elfenfreund* hatte Errata, die aber noch nicht eingepflegt waren. [#621](https://github.com/elyukai/optolith-client/issues/621)
|
||||
- Profession *Weißmagier (Schwert & Stab zu Gareth)* hatte einen falschen AP-Wert und eine zusätzliche Talentmodifikation. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Der Name der Variante *Pfad der Wächterin* der Profession *Gildenlose Magierin (Bannakademie von Fasar)* hatte einen Schreibfehler. [#566](https://github.com/elyukai/optolith-client/issues/566)
|
||||
- Zauber *Skelettarius* hatte die Zauberweiterung *Längere Dienste* statt *Längerer Dienst* und auch einen falschen Beschreibungstext. [#602](https://github.com/elyukai/optolith-client/issues/602)
|
||||
- Spezifisch definierte übliche Professionen einer Kultur werden nun auch dann angezeigt, wenn sie nicht aus dem **Regelwerk** stammen. [#563](https://github.com/elyukai/optolith-client/issues/563)
|
||||
- SF *Balboram-Stil* hatte Lanzenangriff I statt Beidhändiger Kampf I als Voraussetzung. [#563](https://github.com/elyukai/optolith-client/issues/563)
|
||||
- Der Erfahrungsgrad *Brillant* wurde zuvor Brilliant geschrieben. Das gleiche Problem gab es auch bei anderen Einträgen. [#567](https://github.com/elyukai/optolith-client/issues/567)
|
||||
- Zauber *Halluzination* hatte als Verbreitung Elfen, obwohl es Druiden hätte sein müssen. [#564](https://github.com/elyukai/optolith-client/issues/564)
|
||||
- Das Interface konnte kleiner skaliert werden. [#487](https://github.com/elyukai/optolith-client/issues/487)
|
||||
- Schelmenstreiche zeigten keine Wirkungsdauer an, obwohl sie eine besitzen. [#663](https://github.com/elyukai/optolith-client/issues/663)
|
||||
- Waffen der Kampftechnik *Lanzen* wurden nicht auf dem Heldenbogen abgezeigt. [#662](https://github.com/elyukai/optolith-client/issues/662)
|
||||
- Eigenschaften ignorierten das Minimum, welches durch höhere Fertigkeitswerte entsteht. Das Maximum für Fertigkeitswerte ist die höchste an der Probe beteiligte Eigenschaft + 2, wodurch die höchste Eigenschaft mindestens FW − 2 sein muss. [#630](https://github.com/elyukai/optolith-client/issues/630)
|
||||
- Das neue Anwendungsgebiet *Fachpublikationen* für das Talent *Rechtskunde* hatte eine falsche Sonderfertigkeitsvoraussetzung. [#680](https://github.com/elyukai/optolith-client/issues/680)
|
||||
- Geweihte des Namenlosen konnten keine Segnungen kaufen. [#657](https://github.com/elyukai/optolith-client/issues/657)
|
||||
- Einige Listeneinträge waren breiter als die eigentliche Liste. [#683](https://github.com/elyukai/optolith-client/pull/683)
|
||||
- SF *Kind der Natur* und ähnliche SFs erlaubten nur ein Talent. [#649](https://github.com/elyukai/optolith-client/issues/649)
|
||||
- Listenüberschriften waren standardmäßig nicht zentriert. [#637](https://github.com/elyukai/optolith-client/issues/637)
|
||||
- SF *Fachwissen* hatte unerwartete Zeichen im generierten Namen. [#611](https://github.com/elyukai/optolith-client/issues/611)
|
||||
- Permanent ausgegebene LE verbot den Kauf weiterer LeP. [#606](https://github.com/elyukai/optolith-client/issues/606)
|
||||
- Wenn KO auf 8 war und keine Einträge von ihr abhingen, konnten keine weiteren LeP gekauft werden. [#694](https://github.com/elyukai/optolith-client/issues/694)
|
||||
- *Aspektkenntnis*-SFs konnten trotz des Minimums von mindestens drei Liturgien des Aspekts auf FW 10 oder höher nicht gekauft werden. [#591](https://github.com/elyukai/optolith-client/issues/591)
|
||||
- Der Zaubertrick *Hexenblick* konnte von allen Zauberern gekauft werden. [#377](https://github.com/elyukai/optolith-client/issues/377)
|
||||
- Zaubertänzer konnten keine Zaubertänze kaufen. [#594](https://github.com/elyukai/optolith-client/issues/594)
|
||||
- Die Varianten der Zaubertänzer und -barden berücksichtigten ihre jeweiligen Kultur- und ggf. Geschlechtsvoraussetzungen nicht. [#565](https://github.com/elyukai/optolith-client/issues/565)
|
||||
- Wenn bei einer Profession neben der Auswahl einer oder mehrerer Kampftechniken für einen bestimmten KtW eine oder mehrere weitere Kampftechniken für einen niedrigeren KtW ausgewählt werden sollen (z. B. bei der Profession *Soldat*), war dies nicht möglich. [#647](https://github.com/elyukai/optolith-client/issues/647)
|
||||
- Die SFs *Gift melken (...)* beschrieben ein neues Einsatzgebiet, gemeint ist eine *Einsatzmöglichkeit*. [#651](https://github.com/elyukai/optolith-client/issues/651)
|
||||
- Die Beschreibung des Zaubers *Gletscherform* entsprach nicht dem Text aus **Aventurische Magie II**. [#654](https://github.com/elyukai/optolith-client/issues/654)
|
||||
- Meldungen des Updaters sowie der Suche-nach-Updates-Button sind nun auf macOS deaktiviert, da dort aktuell keine automatischen Updates möglich sind. [#589](https://github.com/elyukai/optolith-client/issues/589)
|
||||
- Die SF *Feindgespür* nannte falsche Kampftechniken, für die die SF gilt. [#658](https://github.com/elyukai/optolith-client/issues/658)
|
||||
- Auto-Update-Warnungen wurden auf Linux gezeigt selbst wenn keine direkten Auto-Updates möglich waren. [#573](https://github.com/elyukai/optolith-client/issues/573)
|
||||
- Bei der SF *Zugvögel* und SFs mit vergleichbaren Effekten wurden die zusätzlich ermöglichten Liturgieplätze durch passende aktive Liturgien, die allerdings auch für die eigentliche Tradition der Geweihten verfügbar waren, blockiert. [#677](https://github.com/elyukai/optolith-client/issues/677)
|
||||
- Die SF *Giftverstärkung* hatte einen falschen Regeltext. [#713](https://github.com/elyukai/optolith-client/issues/713)
|
||||
- Beim Exportieren eines Charakters als JSON wurde im Speichern-Dialog die Dateiendung nicht an den vorgeschlagenen Dateinamen angefügt. [#718](https://github.com/elyukai/optolith-client/issues/718)
|
||||
|
||||
### API
|
||||
|
||||
Die nächste Release wird wichtige und mit vorherigen Versionen inkompatible Änderungen mit sich bringen, wenn du also Optolith-Quelldateien oder -Speicherdateien nutzt, würde ich dir empfehlen, mal auf [Discord](https://discord.gg/wfdgB9g) vorbeizuschauen, da kann ich dir dann alles im Detail erläutern. Da mehr und mehr Menschen von der Optolith-Datenbasis abhängen, werde ich ab jetzt Semantic Versioning strikt folgen, sodass du dich allein auf Basis der Version darauf verlassen kannst, dass du mit deiner Software immer noch damit arbeiten kannst. Es wird ein neues Format für Charaktere, aber auch für sämtliche Wikieinträge geben. Du kannst mir auch immer noch Feedback zukommen lassen, da noch nicht alles bis ins letzte Detail fertig ist – aber ich denke, es macht immer noch Sinn, sich diese Änderungen recht früh anzusehen. Die nächste major Version ist immer noch ein gutes Stück entfernt, sodass noch mehr als genug Zeit ist, um deine Software anzupassen.
|
||||
|
||||
### Danke
|
||||
|
||||
Zu guter Letzt ein großes **Danke** an die folgenden Menschen auf GitHub, die an dieser Version mitgewirkt haben!
|
||||
|
||||
- [Jonas (@Rahjenaos)](https://github.com/Rahjenaos)
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [manuelstengelberger (@manuelstengelberger)](https://github.com/manuelstengelberger)
|
||||
- [Philipp A. (@flying-sheep)](https://github.com/flying-sheep)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.3.2
|
||||
|
||||
### Fehlerbehebungen
|
||||
|
||||
- SF Wege der Gelehrten: Es fehlten einige Auswahlmöglichkeiten. #517
|
||||
- Neue Kampftechniken aus Büchern abseits des Regelwerks fehlten im Kampftechniken-Tab. #543
|
||||
- Die Beschreibung der Kampftechnikauswahl bei Professionsvarianten wurde nicht richtig angezeigt.
|
||||
- Die Sozialstatusvoraussetzung für *Herrschaftsanspruch* funktionierte nicht.
|
||||
- Profession *Lanisto*: Die Fertigkeitsspezialisierung galt für das falsche Talent.
|
||||
|
||||
+32
-4
@@ -1,4 +1,10 @@
|
||||
## Ich kann keine Zauber oder Liturgien hinzufügen!
|
||||
## Gibt es einen Charakterbogen und wenn ja, wo finde ich den?
|
||||
|
||||
Ja, es gibt einen Charakterbogen, den du als PDF exportieren kannst! Dazu musst du erst im Profil die Heldenerschaffung beenden. Damit das geht, darfst du maximal 10 AP übrig haben – und natürlich auch nicht zu viele ausgegeben haben. Wenn du sie dann beendest, findest du oben den Tab *Heldenbogen*. In diesem Tab findest du eine Vorschau deines Bogens und kannst diesen über den Button oben links als PDF speichern.
|
||||
|
||||
Für englischsprachige Nutzer eventuell relevant: Es gibt aktuell nur eine A4-Variante des Charakterbogens!
|
||||
|
||||
## Ich kann keine Zauber oder Liturgien kaufen!
|
||||
|
||||
Es wird daran liegen, dass du die Voraussetzungen dafür nicht erfüllst!
|
||||
Folgende Voraussetzungen gelten:
|
||||
@@ -13,9 +19,9 @@ Folgende Voraussetzungen gelten:
|
||||
* Wähle den Vorteil *Geweihter*.
|
||||
* Wähle eine karmale *Traditions*-SF.
|
||||
|
||||
## Ich kann einen der folgenden Zauber nicht hinzufügen: Invocatio Minor, Invocatio Maior, Elementarer Diener, Dschinnenruf!
|
||||
## Ich kann stärkere Beschwörungs-/Herbeirufungszauber nicht kaufen!
|
||||
|
||||
Diese vier Zauber haben Voraussetzungen, die im Regelwerk auf Seite 263 genannt sind.
|
||||
Diese Zauber haben Voraussetzungen, die im **Regelwerk** auf Seite **263** genannt sind.
|
||||
Demnach haben diese Zauber folgende Voraussetzungen und können erst nach Erfüllung dieser gewählt werden:
|
||||
|
||||
* Invocatio Minor: Invocatio Minima 10
|
||||
@@ -23,9 +29,31 @@ Demnach haben diese Zauber folgende Voraussetzungen und können erst nach Erfül
|
||||
* Elementarer Diener: Manifesto 10
|
||||
* Dschinnenruf: Elementarer Diener 12
|
||||
|
||||
## Warum gibt es den Kampfbogen zweimal?!
|
||||
|
||||
Der erste listet unter *Rüstungen* die Einträge der normalen Rüstungen (Komplettrüstungen) aus dem RGW. Der zweite listet dort stattdessen die Trefferzonenrüstungen mit ihren unterschiedlichen Rüstungswerten pro Zone. Du hast in diesem Fall also wohl mindestens eine Komplettrüstung und eine Trefferzonenrüstung deinem Charakter hinzugefügt.
|
||||
|
||||
## Wie kann ich mir mehr LE/AE/KE kaufen?
|
||||
|
||||
Das hängt davon ab, ob du dich noch in der Heldenerstellung befindest oder diese abgeschlossen hast.
|
||||
|
||||
* *Während der Heldenerstellung* kannst du zusätzliche LE/AE/KE über die Vorteile *Hohe Lebenskraft/Astralenergie/Karmaenergie I-VII* kaufen. Das solltest du auch nutzen, wenn es dir auf hohe Werte in diesen Bereichen ankommt, da du Vorteile in der Regel nicht nachträglich kaufen kannst!
|
||||
* *Nach der Heldenerstellung* kannst du zusätzliche LE/AE/KE im *Eigenschaften*-Tab über den »+«-Button bei der jeweiligen Energie kaufen. Die Maxima dafür entsprechen den dafür definierten laut **Regelwerk S. 350–352**.
|
||||
* *Nach der Heldenerstellung* kannst du zusätzliche LE/AE/KE im *Eigenschaften*-Tab über den »+«-Button bei der jeweiligen Energie kaufen. Die Maxima dafür entsprechen den dafür definierten laut **Regelwerk** S. **350–352**.
|
||||
|
||||
## Wo finde ich meine gespeicherten Charaktere?
|
||||
|
||||
Die Charaktere und auch andere Dateien wie die Konfiguration findest du – je nach Betriebssystem – unter folgenden Orten:
|
||||
|
||||
- *Windows:* `C:/Users/<Benutzer>/AppData/Roaming/Optolith`, wobei `<Benutzer>` der Name deines Benutzerordners ist
|
||||
- *Linux:* `$XDG_CONFIG_HOME/Optolith` oder `~/.config/Optolith`
|
||||
- *macOS:* `~/Library/Application Support/Optolith`
|
||||
|
||||
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.
|
||||
*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,7 +1,188 @@
|
||||
## 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
|
||||
|
||||
- **Gods of Aventuria I** [#656](https://github.com/elyukai/optolith-client/issues/656)
|
||||
- Italian translation [#667](https://github.com/elyukai/optolith-client/issues/667) [#610](https://github.com/elyukai/optolith-client/issues/610)
|
||||
- Optional paper-style background for character sheet. [#36](https://github.com/elyukai/optolith-client/issues/36)
|
||||
- Character Sheet view zoom option. [#665](https://github.com/elyukai/optolith-client/issues/665)
|
||||
- Add/Subtract money from purse. [#666](https://github.com/elyukai/optolith-client/issues/666)
|
||||
- Create custom advantages, disadvantages and special abilities with custom name and AP value (temporary solution). [#632](https://github.com/elyukai/optolith-client/issues/632)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Weight is now shown in an own column in equipment tab. [#305](https://github.com/elyukai/optolith-client/issues/305)
|
||||
- Unnecessary combat sheets are not used anymore, it now depends on which armor the character has. It defaults to the normal armor if no armor is present. [#407](https://github.com/elyukai/optolith-client/issues/407)
|
||||
- You can now click on entry names as well to show it's rules text. [#556](https://github.com/elyukai/optolith-client/issues/556)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Variants of profession *Blessed One of Boron* had wrong skill modifications. [#548](https://github.com/elyukai/optolith-client/issues/548)
|
||||
- Profession *White Mage (Sword & Staff)* had a wrong AP value and an additional skill modification. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Fixed common professions of a culture will now be shown even if they are not from the **Core Rules**. [#563](https://github.com/elyukai/optolith-client/issues/563)
|
||||
- The interface could be scaled down. [#487](https://github.com/elyukai/optolith-client/issues/487)
|
||||
- Weapons of the combat technique *Lances* were not shown on character sheet. [#662](https://github.com/elyukai/optolith-client/issues/662)
|
||||
- Attributes ignored the minimum caused by high skill ratings. The maximum of skill rating is the highest linked attribute + 2, so the highest attribute is required to have a minimum value of SR − 2. [#630](https://github.com/elyukai/optolith-client/issues/630)
|
||||
- The new application *Professional Publications* for skill *Law* had a wrong special ability prerequisite. [#680](https://github.com/elyukai/optolith-client/issues/680)
|
||||
- Some list items were wider than the actual list. [#683](https://github.com/elyukai/optolith-client/pull/683)
|
||||
- List headers were not centered by default. [#637](https://github.com/elyukai/optolith-client/issues/637)
|
||||
- Permanently spent LP did not allow additional LP to be bought. [#606](https://github.com/elyukai/optolith-client/issues/606)
|
||||
- Additional LP could not be added if CON is 8 and nothing depends on it. [#694](https://github.com/elyukai/optolith-client/issues/694)
|
||||
- SA *Aspect Knowledge* did not show up even with three chants on SR 10 or higher. [#591](https://github.com/elyukai/optolith-client/issues/591)
|
||||
- Cantrip Witch's Gaze was selectable by all spell casters. [#377](https://github.com/elyukai/optolith-client/issues/377)
|
||||
- Arcane Dancers could not add magical dances. [#594](https://github.com/elyukai/optolith-client/issues/594)
|
||||
- Select options of traditions Arcane Bard and Arcane Dancer did not require their respective culture and possible sex. [#565](https://github.com/elyukai/optolith-client/issues/565)
|
||||
- If, in addition to the selection of one or more fighting techniques for a certain CtR, one or more other fighting techniques should be selected for a lower CtR (e.g. in the profession *Soldier*), it was not possible. [#647](https://github.com/elyukai/optolith-client/issues/647)
|
||||
- Certain values on character sheet were not floored. [#655](https://github.com/elyukai/optolith-client/issues/655)
|
||||
- Chain Mail was available twice. [#570](https://github.com/elyukai/optolith-client/issues/570)
|
||||
- Scale Mail was available twice and had a typo. [#569](https://github.com/elyukai/optolith-client/issues/569)
|
||||
- Updater checks and the check for updates button are now disabled on macOS since updates are not possible on macOS currently. [#589](https://github.com/elyukai/optolith-client/issues/589)
|
||||
- Wrong applicable combat techniques for SA *Enemy Sense*. [#658](https://github.com/elyukai/optolith-client/issues/658)
|
||||
- Auto-update alerts were enabled on Linux even when there were no direct auto-updates available. [#573](https://github.com/elyukai/optolith-client/issues/573)
|
||||
- The save dialog for exporting a character as JSON did not add the file extension to the suggested file name. [#718](https://github.com/elyukai/optolith-client/issues/718)
|
||||
|
||||
### API
|
||||
|
||||
There are important and breaking changes coming with the next release, so if you use the Optolith source or save data, I'd recommend to come over to [Discord](https://discord.gg/wfdgB9g) so that I can tell you what is going to be changed in detail. Since more and more people depend on Optolith's data I will now follow semantic versioning strictly so that you can rely on the compatibility of source files just by checking out the version number. There will be a new format for heroes as well as for the source data. You can also give feedback on the changes, since they are not *completely* done yet – but I still think it would make sense to check out the changes as early as possible. The next major version is still a bit away, so you'll have plenty of time to adjust your software.
|
||||
|
||||
### Thank you
|
||||
|
||||
Last but definitely not least a big **Thank You** to the following people on GitHub who contributed to this release!
|
||||
|
||||
- [Jonas (@Rahjenaos)](https://github.com/Rahjenaos)
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [manuelstengelberger (@manuelstengelberger)](https://github.com/manuelstengelberger)
|
||||
- [Philipp A. (@flying-sheep)](https://github.com/flying-sheep)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.3.2
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Combat Techniques from books other than Core Rules were missing in combat techniques tab. #543
|
||||
- Description of combat technique selection for profession variants does not render properly. #539
|
||||
- Profession *Lanisto*: Skill Specialization selection referenced the wrong skill. #537
|
||||
- Professions did not react to dependencies. #507
|
||||
|
||||
+41
-4
@@ -1,20 +1,57 @@
|
||||
## I can't add spells or liturgical chants! That's a bug, isn't it?
|
||||
## Is there a character sheet and where can I find it?
|
||||
|
||||
It's likely because you do not meet the (following) requirements for adding spells or liturgical chants:
|
||||
Yes, there is a character sheet you can export as a PDF! To do that, you have to end hero creation in the character's profile first. To do *that*, you need to have a maximum of 10 AP left – and you can't have too much AP spent, obviously. If you end it, you'll see the new tab *Character Sheet* above. In that tab you'll get a preview of your sheet and then you can export it via the button in the top left corner!
|
||||
|
||||
Might be relevant: There's only an DIN A4 version available!
|
||||
|
||||
## I can't add spells or liturgical chants!
|
||||
|
||||
It's likely you do not meet the prerequisites for adding spells or liturgical chants:
|
||||
|
||||
### Spells:
|
||||
|
||||
- Buy advantage *Spellcaster*.
|
||||
- Buy the magical special ability *Tradition*.
|
||||
|
||||
### Liturgien:
|
||||
### Liturgical Chants:
|
||||
|
||||
* Buy advantage *Blessed One*.
|
||||
* Buy the blessed special ability *Tradition*.
|
||||
|
||||
## I can't buy stronger invocations!
|
||||
|
||||
Stronger invocation rituals have prerequisites that you can find in the **Core Rules** on page **263**:
|
||||
|
||||
* Invocatio Minor: Invocatio Minima 10
|
||||
* Invocatio Maior: Invocatio Minor 12
|
||||
* Elemental Servant: Manifesto 10
|
||||
* Call Djinn: Elemental Servant 12
|
||||
|
||||
## Why do I have the combat sheet twice?!
|
||||
|
||||
The first lists the default armor from the CR below *Armor* on the sheet. The second lists the hit zone armor with their different PRO values per hit zone there instead. If you have both sheets it's likely you have both default armor and hit zone armor for your character.
|
||||
|
||||
## How can I buy additional LP/AE/KP?
|
||||
|
||||
That depends on whether you are still in hero creation phase or have completed that.
|
||||
|
||||
* *During hero creation* you can add additional LP/AE/KP via the advantages *Increased Life Points/Arcane Power/Karma Points I-VII*. You should use them if you are interested in higher values because you can usually not buy advantages afterwards!
|
||||
* *After hero creation*, to add additional LP/AE/KP, use the »+« button below the respective energy in the *Attributes* tab. The maximum values for these are calculated by using the rules from the **Core Rules p. 350–352**.
|
||||
* *After hero creation*, to add additional LP/AE/KP, use the »+« button below the respective energy in the *Attributes* tab. The maximum values for these are calculated by using the rules from the **Core Rules** p. **350–352**.
|
||||
|
||||
## Where do I find my saved characters?
|
||||
|
||||
Characters and other files such as the application configuration can be found at the following locations, depending on the OS you use:
|
||||
|
||||
- *Windows:* `C:/Users/<User>/AppData/Roaming/Optolith`, where `<User>` is the name of your user folder
|
||||
- *Linux:* `$XDG_CONFIG_HOME/Optolith` or `~/.config/Optolith`
|
||||
- *macOS:* `~/Library/Application Support/Optolith`
|
||||
|
||||
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*.
|
||||
|
||||
## 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`.
|
||||
|
||||
+168
-16
@@ -1,18 +1,170 @@
|
||||
## 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.
|
||||
|
||||
### Fonctionnalités
|
||||
|
||||
- Traduction italienne [#667](https://github.com/elyukai/optolith-client/issues/667) [#610](https://github.com/elyukai/optolith-client/issues/610)
|
||||
- Fond de papier facultatif pour la feuille de personnages. [#36](https://github.com/elyukai/optolith-client/issues/36)
|
||||
- Option de zoom de la vue sur la feuille de personnages. [#665](https://github.com/elyukai/optolith-client/issues/665)
|
||||
- Ajouter/Soustraire de l'argent du porte-monnaie. [#666](https://github.com/elyukai/optolith-client/issues/666)
|
||||
- Créez des avantages, des inconvénients et des capacités spéciales sur mesure avec un nom et une valeur en PAV (solution temporaire). [#632](https://github.com/elyukai/optolith-client/issues/632)
|
||||
|
||||
### Améliorations
|
||||
|
||||
- Le poids est maintenant indiqué dans une colonne spécifique dans l'onglet équipement. [#305](https://github.com/elyukai/optolith-client/issues/305)
|
||||
- Les feuilles de combat inutiles ne sont plus utilisées, cela dépend maintenant de l'armure dont dispose le personnage. Par défaut, l'armure normale est utilisée si aucune armure n'est présente. [#407](https://github.com/elyukai/optolith-client/issues/407)
|
||||
- Vous pouvez maintenant cliquer sur les noms des entrées pour afficher le texte de leurs règles. [#556](https://github.com/elyukai/optolith-client/issues/556)
|
||||
|
||||
### Bugs rectifiés
|
||||
|
||||
- Les variantes de la profession de *Prêtre de Boron* ont eu de mauvaises modifications de compétences. [#548](https://github.com/elyukai/optolith-client/issues/548)
|
||||
- La profession *Magicien blanc (Epée & Bâton)* avait une valeur en PAV erronée et une modification de compétence supplémentaire. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Les professions communes fixes d'une culture seront désormais affichées même si elles ne sont pas issues des **règles de base**. [#563](https://github.com/elyukai/optolith-client/issues/563)
|
||||
- L'interface peut être réduite. [#487](https://github.com/elyukai/optolith-client/issues/487)
|
||||
- Les armes de la technique de combat *Lances* n'étaient pas indiquées sur la fiche de personnage. [#662](https://github.com/elyukai/optolith-client/issues/662)
|
||||
- Les valeurs d'attributs minimum étaient ignorées pour les valeurs de compétence élevées. Le maximum de la valeur de compétence est l'attribut lié le plus élevé + 2, donc l'attribut le plus élevé doit avoir une valeur minimale de VC − 2. [#630](https://github.com/elyukai/optolith-client/issues/630)
|
||||
- Les noms des CS *Intuition tactique* et *Détection des embuscades* ont été échangés. [#636](https://github.com/elyukai/optolith-client/issues/636)
|
||||
- Le nouveau domaine d'application *Publications professionnelles* pour le talent *Droit* avait un prérequis de capacité spéciale erronée. [#680](https://github.com/elyukai/optolith-client/issues/680)
|
||||
- Certains éléments de la liste étaient plus larges que la liste actuelle. [#683](https://github.com/elyukai/optolith-client/pull/683)
|
||||
- Les en-têtes de liste n'étaient pas centrés par défaut. [#637](https://github.com/elyukai/optolith-client/issues/637)
|
||||
- Les PV dépensés de façon permanente ne permettaient pas d'acheter des PV supplémentaires. [#606](https://github.com/elyukai/optolith-client/issues/606)
|
||||
- On ne pouvait pas ajouter de PV supplémentaire si la CON est de 8 et que rien n'en dépend. [#694](https://github.com/elyukai/optolith-client/issues/694)
|
||||
- La CS *Maîtrise de l'aspect* n'apparait pas même avec trois liturgies de VC 10 ou plus. [#591](https://github.com/elyukai/optolith-client/issues/591)
|
||||
- La vérification des mises à jour et le bouton de vérification des mises à jour sont maintenant désactivés sur macOS, car les mises à jour ne sont pas possibles sur macOS actuellement. [#589](https://github.com/elyukai/optolith-client/issues/589)
|
||||
- Techniques de combat mal applicables pour la CS *détection des embuscades*. [#658](https://github.com/elyukai/optolith-client/issues/658)
|
||||
- Les alertes de mise à jour automatique étaient activées sur Linux même lorsqu'il n'y avait pas de mises à jour automatiques directes disponibles. [#573](https://github.com/elyukai/optolith-client/issues/573)
|
||||
- Le dialogue de sauvegarde pour l'exportation d'un caractère en JSON n'a pas ajouté l'extension de fichier au nom de fichier suggéré. [#718](https://github.com/elyukai/optolith-client/issues/718)
|
||||
|
||||
### API
|
||||
|
||||
Il y a des changements importants et radicaux à venir avec la prochaine version, donc si vous utilisez la source Optolith ou enregistrez des données, je vous recommande de venir sur [Discord](https://discord.gg/wfdgB9g) afin que je puisse vous dire ce qui va être changé en détail. Puisque de plus en plus de personnes dépendent des données d'Optolith, je vais maintenant suivre strictement le versionnement sémantique afin que vous puissiez vous fier à la compatibilité des fichiers sources en vérifiant simplement le numéro de version. Il y aura un nouveau format pour les héros ainsi que pour les données sources. Vous pouvez également donner votre avis sur les changements, puisqu'ils ne sont pas encore complètement terminés – mais je pense qu'il serait quand même judicieux de vérifier les changements le plus tôt possible. La prochaine version majeure est encore un peu loin, vous aurez donc tout le temps d'ajuster votre logiciel.
|
||||
|
||||
### Remerciements
|
||||
|
||||
Enfin, un grand **merci** aux personnes suivantes sur GitHub qui ont contribué à cette publication !
|
||||
|
||||
- [Jonas (@Rahjenaos)](https://github.com/Rahjenaos)
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [manuelstengelberger (@manuelstengelberger)](https://github.com/manuelstengelberger)
|
||||
- [Philipp A. (@flying-sheep)](https://github.com/flying-sheep)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.3.2
|
||||
|
||||
### Bug Fixes
|
||||
### Bugs rectifiés
|
||||
|
||||
- Description of combat technique selection for profession variants does not render properly. #539
|
||||
- Professions did not react to dependencies. #507
|
||||
- Textfield „Title“ in personal data had wrong label. #492
|
||||
- *Religion* was on SR 6 for most of the Blessed One professions. #475
|
||||
- States were overflowing on character sheet PDF but not in Optolith. #473
|
||||
- The `config.json` has still thrown errors for many users. The problem should be fixed, finally. #476
|
||||
- In very rare situations parts of the heroes file or the whole heroes file have been deleted. Because of this, saving heroes has been completely rewritten and condensed to prevent further issues. #477
|
||||
- Added missing Garethi dialect *Nostrian*. #480
|
||||
- Fixed prerequisites for SA Energy Control. #471
|
||||
- Fixed third-party licenses. #471
|
||||
- Fixed disadvantages with select options could not be bought. #470
|
||||
- La description de la sélection des techniques de combat pour les variantes de professions n'est pas rendue correctement. #539
|
||||
- Les professions ne tenaient pas compte des conditions prérequises. #507
|
||||
- Le champ de texte "Titre" des données personnelles était mal renseigné. #492
|
||||
- *Religion* avait une VC 6 pour la plupart des professions cléricales. #475
|
||||
- Les États débordaient de la feuille de personnage en PDF mais pas dans Optolith. #473
|
||||
- Le `config.json` a encore provoqué des erreurs pour de nombreux utilisateurs. Le problème devrait être réglé, finalement. #476
|
||||
- Dans de très rares cas, des parties d'un fichier de héros ou la totalité d'un fichier de héros ont été effacées. C'est pour cette raison que la sauvegarde des héros a été complètement réécrite et condensée pour éviter d'autres problèmes. #477
|
||||
- Rajout du dialecte Garethi manquant *Nostrien*. #480
|
||||
- Rectification des licences tierces. #471
|
||||
- Rectification des désavantages avec des options à choisir qui ne pouvaient pas être achetés. #470
|
||||
|
||||
### Known Issues
|
||||
|
||||
@@ -20,11 +172,11 @@
|
||||
|
||||
## 1.3.1
|
||||
|
||||
### Bug Fixes
|
||||
### Bugs rectifiés
|
||||
|
||||
- In the French version, you were not able to create characters, because you could not choose any publication, race, ... #449
|
||||
- There was an error thrown by "unknown keys" in the config. #450
|
||||
- On character sheet, states were only displayed in one column if the amount of states was even. #448
|
||||
- Dans la version française, vous ne pouviez pas créer de personnages, car vous ne pouviez choisir aucune publication, aucune race, ... #449
|
||||
- Il y a eu une erreur due à des "clés inconnues" dans la configuration. #450
|
||||
- Sur la feuille de personnage, les états n'étaient affichés dans une seule colonne que si le nombre d'états était pair. #448
|
||||
|
||||
## 1.3.0
|
||||
|
||||
|
||||
+43
-12
@@ -1,20 +1,51 @@
|
||||
## I can't add spells or liturgical chants! That's a bug, isn't it?
|
||||
## Y a-t-il une feuille de personnage et si oui, où puis-je la trouver ?
|
||||
|
||||
It's likely because you do not meet the (following) requirements for adding spells or liturgical chants:
|
||||
Oui, il existe une feuille de personnage que vous pouvez exporter au format PDF ! Pour ce faire, vous devez d'abord terminer la création de votre héros dans votre profil. Pour que cela fonctionne, vous devez avoir un maximum de 10 points d’aventure (PAV) non dépensés — et bien sûr ne pas en avoir dépensé trop. Lorsque vous l’avez terminé, un nouvel onglet *FEUILLE DE PERSONNAGE* apparaîtra en haut. Dans cet onglet, vous trouverez un aperçu de votre feuille et vous pourrez l'enregistrer au format PDF à l'aide du bouton en haut à gauche. Pour les utilisateurs anglophones: il n'existe actuellement qu'une seule version A4 de la feuille de personnage !
|
||||
|
||||
### Spells:
|
||||
## Je ne peux pas acheter de sorts ou de liturgies !
|
||||
|
||||
- Buy advantage *Spellcaster*.
|
||||
- Buy the magical special ability *Tradition*.
|
||||
C’est sans doute parce que votre personnage ne remplit pas les conditions nécessaires ! Celles-ci sont les suivantes :
|
||||
|
||||
### Liturgien:
|
||||
### Sorts :
|
||||
|
||||
* Buy advantage *Blessed One*.
|
||||
* Buy the blessed special ability *Tradition*.
|
||||
- choisissez l'avantage *pouvoir magique*
|
||||
- choisissez une *tradition magique* comme capacité spéciale
|
||||
|
||||
## How can I buy additional LP/AE/KP?
|
||||
### Liturgies :
|
||||
|
||||
That depends on whether you are still in hero creation phase or have completed that.
|
||||
- choisissez l'avantage *pouvoir divin*
|
||||
- choisissez une *tradition cléricale* comme capacité spéciale
|
||||
|
||||
* *During hero creation* you can add additional LP/AE/KP via the advantages *Increased Life Points/Arcane Power/Karma Points I-VII*. You should use them if you are interested in higher values because you can usually not buy advantages afterwards!
|
||||
* *After hero creation*, to add additional LP/AE/KP, use the »+« button below the respective energy in the *Attributes* tab. The maximum values for these are calculated by using the rules from the **Core Rules p. 350—352**.
|
||||
## Je ne peux pas acheter de sorts d'invocation / de conjuration plus puissants !
|
||||
|
||||
Ces sorts ont des conditions présentées à la page 262 et 263 du *Livre des règles*. En conséquence, les sorts de la liste ci-dessous ne peuvent être sélectionnés que si le personnage remplit les conditions indiquées :
|
||||
|
||||
- Invocatio minor : invocatio minima 10
|
||||
- Invocatio maior : invocatio minor 12
|
||||
- Serviteur élémentaire : manifesto 10
|
||||
- Appel de djinn : serviteur élémentaire 12
|
||||
|
||||
## Pourquoi la page de combat apparaît-elle deux fois dans la feuille de personnage ?!
|
||||
|
||||
La première liste les entrées pour les protections normales (armure complète) du *Livre des règles*. La seconde liste à la place les différentes pièces d’armure et leur valeur en fonction de la zone touchée. Dans ce cas, cela signifie que vous avez au moins ajouté une armure complète et une pièce d’armure spécifique à une zone de frappe sur votre feuille de personnage.
|
||||
|
||||
## Comment puis-je acheter plus de points de vie (PV)/astraux (PA)/de karma (PK) et améliorer ainsi mon énergie vitale (EV)/astrale (EA)/karmique (EK) ?
|
||||
|
||||
Cela dépend si vous êtes toujours dans le processus de *création du héros* ou si vous l'avez terminé.
|
||||
|
||||
- Lors de la *création du héros*, vous pouvez acheter des PV/PA/PK supplémentaires via les avantages Grande énergie vitale / astrale / karmique I–VII. Si vous souhaitez des valeurs élevées dans ces domaines pour votre personnage, faites-le pendant la création car vous ne pouvez généralement pas acheter d'avantages par la suite !
|
||||
- Après la *création du héros*, vous pouvez acheter des PV/PA/PK supplémentaires dans l'onglet *QUALITÉS* en utilisant le bouton « + » pour chaque énergie. Les valeurs maximales correspondantes correspondent à celles définies dans le *Livre des règles* pages 350–352.
|
||||
|
||||
## Où puis-je trouver mes personnages enregistrés ?
|
||||
|
||||
Les personnages et autres fichiers tels que la configuration se trouvent — selon le système d'exploitation — aux emplacements suivants:
|
||||
|
||||
- *Windows* : `C:/Utilisateurs/<utilisateur>/AppData/Roaming/Optolith`, où <utilisateur> est le nom de votre dossier utilisateur
|
||||
- *Linux* : `$XDG_CONFIG_HOME/Optolith` ou `~/.config/Optolith`
|
||||
- *macOS* : `~/Library/Application Support/Optolith`
|
||||
|
||||
On peut y retrouver divers fichiers pertinents :
|
||||
|
||||
- `heroes.json` contient tous les héros actuellement dans Optolith
|
||||
- `config.json` contient la configuration de votre application Optolith. Ne contient aucune donnée importante, juste des éléments comme le jeu de couleurs, la langue (si vous en avez une particulière) et quelques autres choses.
|
||||
Une note sur *Windows* : `AppData` est un dossier caché. Pour le voir, vous devez activer le paramètre *Éléments masqués* dans l'Explorateur Windows sous *Affichage*.
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
## 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.
|
||||
|
||||
### API
|
||||
|
||||
Ci sono importanti modifiche in questa nuova versione, che cambiano anche il modo in cui sono memorizzati i dati. Se fai uso dei file memorizzati da Optolith, è possibile fare un salto su [Discord](https://discord.gg/wfdgB9g) in modo da avere più informazioni sulle modifiche nel dettaglio.
|
||||
Siccome sempre più persone fanno uso dei dati di Optolith, da questa versione in poi seguiremo le regole del *versionamento semantico*, in modo da permettere agli utenti di fare affidamento alla compatibilità dei file sorgente e dei file dei dati, verificandone soltanto il numero di versione.
|
||||
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.
|
||||
|
||||
### Ringraziamenti
|
||||
|
||||
Come ultimo punto, ma non per importanza, un grandissimo **grazie** alle seguenti persone su GitHub che hanno contribuito a questa versione!
|
||||
|
||||
- [Jonas (@Rahjenaos)](https://github.com/Rahjenaos)
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [manuelstengelberger (@manuelstengelberger)](https://github.com/manuelstengelberger)
|
||||
- [Philipp A. (@flying-sheep)](https://github.com/flying-sheep)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
@@ -0,0 +1,51 @@
|
||||
## C’è una scheda del personaggio e dove posso trovarla?
|
||||
|
||||
Sì, c’è un Foglio d’Identità pronto da esportare come PDF!
|
||||
Per farlo dovrai prima terminare la fase di creazione del personaggio del tuo eroe. Per poterlo fare, dovrai innanzitutto accertarti di avere *al più* 10 Punti Avventura rimasti e di non averne spesi troppi per il tuo livello di esperienza. Una volta terminata la creazione del personaggio, comparirà la scheda *Foglio d’identità* in alto, che ti permetterà di accedere all’anteprima del foglio e di esportarlo come PDF usando il pulsante in alto a sinistra.
|
||||
|
||||
Al momento il PDF è disponibile soltanto in formato DIN A4.
|
||||
|
||||
## Non riesco ad aggiungere incantesimi e liturgie!
|
||||
|
||||
Niente paura, è probabile che semplicemente il tuo eroe non soddisfi i prerequisiti per avere accesso a magia e opere divine.
|
||||
|
||||
### Magia:
|
||||
|
||||
- Acquista il vantaggio *Dono della magia*.
|
||||
- Acquista una qualsiasi *Tradizione* di magia come abilità speciale.
|
||||
|
||||
### Opere divine:
|
||||
|
||||
* Acquista il vantaggio *Grazia divina*.
|
||||
* Acquista una qualsiasi *Tradizione* divina come abilità speciale.
|
||||
|
||||
## Non riesco ad acquistare incantesimi di invocazione/evocazione più forti!
|
||||
|
||||
Incantesimi e rituali di invocazione/evocazione più forti hanno dei prerequisiti speciali, come indicati nel **Regolamento** a pagina **263**:
|
||||
|
||||
* Invocatio Minor: Invocatio Minima 10
|
||||
* Invocatio Maior: Invocatio Minor 12
|
||||
* Servitore elementale: Manifesto 10
|
||||
* Richiamo del genio: Servitore elementale 12
|
||||
|
||||
## Come posso acquistare altri PV/PA/PK?
|
||||
|
||||
Dipende. Il meccanismo cambia se sei ancora nella fase di creazione del personaggio oppure se il personaggio è già stato creato.
|
||||
|
||||
* *Durante la fase di creazione* è possibile acquistare altri PV/PA/PK tramite i vantaggi *Elevata energia vitale/astrale/karmica* (con livello da I a VII). È bene sceglierli in questa fase se si punta ad avere un numero elevato di PV/PA/PK, perché non è possibile acquistare vantaggi dopo aver creato l’eroe!
|
||||
* *Dopo la fase di creazione*, è possibile acquistare PV/PA/PK aggiuntivi usando il pulsante **»+«** sotto al rispettivo indicatore dei punti nella scheda degli *Attributi*. Il valore massimo impostabile in questo modo è calcolato usando le regole del **Regolamento** a pag. **350–352**.
|
||||
|
||||
## Dove trovo i miei personaggi memorizzati?
|
||||
|
||||
Personaggi ed altri file, come la configurazione dell’applicazione, si trovano ai seguenti percorsi in base al sistema operativo utilizzato:
|
||||
|
||||
- *Windows:* `C:/Users/<User>/AppData/Roaming/Optolith`, dove `<User>` è il tuo nome utente.
|
||||
- *Linux:* `$XDG_CONFIG_HOME/Optolith` oppure `~/.config/Optolith`.
|
||||
- *macOS:* `~/Library/Application Support/Optolith`.
|
||||
|
||||
Una lista dei file che possono essere rilevanti:
|
||||
|
||||
- `heroes.json` contiene tutti gli eroi memorizzati da Optolith.
|
||||
- `config.json` contiene la configurazione utilizzata dall’applicazione. Non contiene dati di natura critica, ma informazioni come il colore del tema, la lingua attiva e così via.
|
||||
|
||||
*Nota bene per utenti Windows:* `AppData` è una cartella *nascosta*. Per visualizzarla in Esplora Risorse, è necessario accedere alla scheda *Visualizza* e attivare la visualizzazione degli *Elementi nascosti*.
|
||||
+166
-15
@@ -1,29 +1,180 @@
|
||||
## 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)
|
||||
- Onnodige gevechtsdocumenten worden niet meer gebruikt, het hangt nu af van welke wapenrusting de held heeft. Het gaat standaard naar de normale wapenrusting als er geen wapenrusting aanwezig is. [#407](https://github.com/elyukai/optolith-client/issues/407)
|
||||
- Je kan nu ook klikken op namen om de regeltekst te zien. [#556](https://github.com/elyukai/optolith-client/issues/556)
|
||||
|
||||
### Probleemoplossingen
|
||||
|
||||
- Varianten van het beroep *Gewijde van Boron* had verkeerde talent aanpassingen. [#548](https://github.com/elyukai/optolith-client/issues/548)
|
||||
- Beroep *Witte Tovenaar (Zwaard & Staf)* had een verkeerde AP waarde and een extra talent aanpassing. [#568](https://github.com/elyukai/optolith-client/issues/568)
|
||||
- Vaste veelvoorkomende beroepen van een kultuur zullen nu getoond worden zelfs al zijn de ze niet van de **Basis Regels**. [#563](https://github.com/elyukai/optolith-client/issues/563)
|
||||
- The interface kon kleiner gemaakt worden. [#487](https://github.com/elyukai/optolith-client/issues/487)
|
||||
- Wapens van de gevechtscompetentie *Lans* werden niet getoond op het helden document. [#662](https://github.com/elyukai/optolith-client/issues/662)
|
||||
- Goede Eigenschappen negeerden het minimum veroorzaakt door hoge talent waarden. De maximum van een talent waarde is het hoogste gerelateerde goede eigenschap + 2, dus een goede eigenschap moet een minimum waarde hebben van de hoogste talent waarde  − 2. [#630](https://github.com/elyukai/optolith-client/issues/630)
|
||||
- Het nieuwe toepassingsgebeird *Professionele Publicaties* voor het talent *Wet* had een verkeerde Competentie vereiste. [#680](https://github.com/elyukai/optolith-client/issues/680)
|
||||
- Sommige lijst elementen werden breder dan de eigenlijke lijst. [#683](https://github.com/elyukai/optolith-client/pull/683)
|
||||
- Lijst hoofdingen werden niet automatisch gecentreerd. [#637](https://github.com/elyukai/optolith-client/issues/637)
|
||||
- Permantent gespendeerde LP lieten niet toe om extra LP te kopen. [#606](https://github.com/elyukai/optolith-client/issues/606)
|
||||
- Extra LP konden niet worden gekocht als CO 8 was en er niets van afhing. [#694](https://github.com/elyukai/optolith-client/issues/694)
|
||||
- Competentie *Aspect Kennis* verscheen niet, zelfs met drie liturgieen op talent waarde 10 of hoger. [#591](https://github.com/elyukai/optolith-client/issues/591)
|
||||
- Tovertruuk Heksenblik kon worden geselecteerd door alle Tovenaars. [#377](https://github.com/elyukai/optolith-client/issues/377)
|
||||
- Updater tests en de test voor de update knop zijn nu uitgeschakeld op MacOS want updates zijn momenteel niet mogelijk op MacOS. [#589](https://github.com/elyukai/optolith-client/issues/589)
|
||||
- Verkeerde toegepaste gevechtscompetentie voor Competentie Vijand Waarnemen. [#658](https://github.com/elyukai/optolith-client/issues/658)
|
||||
- Auto-update waarschuwingen werden aangezet op Linux, zelfs al was er geen direct auto-update beschikbaar. [#573](https://github.com/elyukai/optolith-client/issues/573)
|
||||
- Het dialoogvenster voor het exporteren van een teken, omdat JSON de bestandsextensie niet heeft toegevoegd aan de voorgestelde bestandsnaam. [#718](https://github.com/elyukai/optolith-client/issues/718)
|
||||
|
||||
### API
|
||||
|
||||
Er komen belangijke en brekende veranderingen aan met de volgende release, dus als je Optolith source of data gebruikt, raad ik je aan om naar de [Discord](https://discord.gg/wfdgB9g) te komen zodat ik je in detail kan uitleggen wat er gaat veranderen. Vermits meer en meer mensen afhankelijk zijn van Optolith's data zal ik nu strict versiebeheer volgen zodat je op de compatibiliteit van de sources kan rekenen door het versie nummer te controleren. Er zal een nieuw formaat komen voor de helden en de bron data. Je kan ook feedback geven op de veranderingen, vermits ze nog niet *helemaal* volledig zijn – maar ik denk dat het zinnig zou zijn om de verandering zo snel mogelijk na te kijken. De volgende versie duurt nog wel even, zodat je voldoende tijd hebt om je software aan te passen.
|
||||
|
||||
### Thank you
|
||||
|
||||
Tenslotte, maar zeker niet tenminste, een dikke **Dankuwel** voor de volgende mensen op GitHub die bijgedragen hebben tot deze release!
|
||||
|
||||
- [Jonas (@Rahjenaos)](https://github.com/Rahjenaos)
|
||||
- [Jordok (@Jordok)](https://github.com/Jordok)
|
||||
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
|
||||
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
|
||||
- [manuelstengelberger (@manuelstengelberger)](https://github.com/manuelstengelberger)
|
||||
- [Philipp A. (@flying-sheep)](https://github.com/flying-sheep)
|
||||
- [ZeSandman (@ZeSandman)](https://github.com/ZeSandman)
|
||||
|
||||
## 1.3.2
|
||||
|
||||
### Probleemoplossingen
|
||||
|
||||
- Description of combat technique selection for profession variants does not render properly. #539
|
||||
- Professions did not react to dependencies. #507
|
||||
- Textfield „Title“ in personal data had wrong label. #492
|
||||
- *Religion* was on SR 6 for most of the Blessed One professions. #475
|
||||
- States were overflowing on character sheet PDF but not in Optolith. #473
|
||||
- The `config.json` has still thrown errors for many users. The problem should be fixed, finally. #476
|
||||
- In very rare situations parts of the heroes file or the whole heroes file have been deleted. Because of this, saving heroes has been completely rewritten and condensed to prevent further issues. #477
|
||||
- Added missing Garethi dialect *Nostrian*. #480
|
||||
- Fixed prerequisites for SA Energy Control. #471
|
||||
- Fixed third-party licenses. #471
|
||||
- Beschrijving van gevechtstechnieken selectie voor beroepsvarianten wordt niet correct getoond. #539
|
||||
- Beroepen reageerden niet correct op vereisten. #507
|
||||
- Het tekstveld "Titel" in de persoonlijk data had een verkeerd label. #492
|
||||
- *Goden & Kulten* was 6 voor de meeste Gewijde beroepen. #475
|
||||
- Statussen waren te lang op je helden dokument PDF maar niet in Optolith. #473
|
||||
- De `config.json` had nog altijd fouten voor veel gebruikers. Het probleem zou eindelijk opgelost moeten zijn. #476
|
||||
- In hele zeldzame situaties werd de helden file geheel of gedeeltelijk verwijderd. Het saven van helden is geheel herschreven en compacter gemaakt om verdere problemen te voorkomen. #477
|
||||
- Voeg het ontbrekende Garethi dialect *Nostrian* toe. #480
|
||||
- Vereisten van de Competentie Energie Controle zijn aangepast. #471
|
||||
- Derde parij licenties zijn aangepast. #471
|
||||
|
||||
### Known Issues
|
||||
### Bekende problemen
|
||||
|
||||
- Some of the entries with more complex prerequisites might *display* them wrong but *handle* them correct.
|
||||
- Sommige elementen met complexe vereisten worden verkeerd getoont maar wel correct behandeld.
|
||||
|
||||
## 1.3.1
|
||||
|
||||
### Probleemoplossingen
|
||||
|
||||
- In the French version, you were not able to create characters, because you could not choose any publication, race, ... #449
|
||||
- There was an error thrown by "unknown keys" in the config. #450
|
||||
- On character sheet, states were only displayed in one column if the amount of states was even. #448
|
||||
- In de franse versie kon je geen helden maken, want je kon geen publicaties, ras, ... kiezen #449
|
||||
- Er werd een error gemeld voor "unknown keys" in de config. #450
|
||||
- Op je helden document werden staten enkel getoond in een enkele kolom als het aantal staten even was. #448
|
||||
|
||||
## 1.3.0
|
||||
|
||||
|
||||
+45
-13
@@ -1,21 +1,53 @@
|
||||
## Ich kann keine Zauber oder Liturgien hinzufügen! Ist das ein Bug?
|
||||
## Is er een heldendocument en waar vind ik het?
|
||||
|
||||
Es wird daran liegen, dass du die Voraussetungen dafür nicht erfüllst!
|
||||
Folgende Voraussetungen gelten:
|
||||
Ja, er is een heldendocument en je kan het exporteren als PDF! Om dat te doen, moet je eerst je held creatie afmaken. Daarvoor mag je maximum 10 AP overhouden – en je kan natuurlijk ook niet te veel AP hebben uitgegeven. Als je de helden creatie succesvol beëindigd hebt, zie je een nieuwe tab "Heldendocument" bovenaan. In die tab vind je een preview van je heldendocument en je kan dat exporteren met de knop in de linker boven hoek, "Als PDF bewaren".
|
||||
|
||||
### Zauber:
|
||||
Er is enkel een DIN A4 formaat beschikbaar!
|
||||
|
||||
- Wähle den Vorteil *Zauberer*.
|
||||
- Wähle die magische SF *Tradition*.
|
||||
## Ik kan geen spreuken of liturgieën toevoegen!
|
||||
|
||||
### Liturgien:
|
||||
Je mist waarschijnlijk de vereisten om spreuken of liturgieën toe te voegen:
|
||||
|
||||
* Wähle den Vorteil *Geweihter*.
|
||||
* Wähle die karmale SF *Tradition*.
|
||||
### Spreuken:
|
||||
|
||||
## Wie kann ich mir mehr LE/AE/KE kaufen?
|
||||
- Koop het voordeel *Tovenaar*.
|
||||
- Koop de magische Competentie *Traditie*
|
||||
|
||||
Das hängt davon ab, ob du dich noch in der Heldenerstellung befindest oder diese abgeschlossen hast.
|
||||
### Liturgieën:
|
||||
|
||||
* *Während der Heldenerstellung* kannst du zusätzliche LE/AE/KE über die Vorteile *Hohe Lebenskraft/Astralenergie/Karmaenergie I-VII* kaufen. Das solltest du auch nutzen, wenn es dir auf hohe Werte in diesen Bereichen ankommt, da du Vorteile in der Regel nicht nachträglich kaufen kannst!
|
||||
* *Nach der Heldenerstellung* kannst du zusätzliche LE/AE/KE im *Eigenschaften*-Tab über den »+«-Button bei der jeweiligen Energie kaufen. Die Maxima dafür entsprechen den dafür definierten laut **Regelwerk S. 350–352**.
|
||||
* Koop het voordeel *Gewijde*.
|
||||
* Koop de gewijde Competentie *Tradition*.
|
||||
|
||||
## Ik kan geen hogere invocaties kopen!
|
||||
|
||||
Hogere invocatie rituelen hebben vereisten die je in de **Basis regels** kan vinden op pagina **263**:
|
||||
|
||||
* Invocatio Minor: Invocatio Minima 10
|
||||
* Invocatio Maior: Invocatio Minor 12
|
||||
* Elementale Dienaar: Manifesto 10
|
||||
* Djinnenroep: Elementale Dienaar 12
|
||||
|
||||
## Hoe kan ik extra LP/AE/KP kopen?
|
||||
|
||||
Dat hangt er vanaf of je nog in de creatie fase bent of die al beeindigd hebt:
|
||||
|
||||
* *Tijdens helden creatie* kan je extra LP/AE/KP kopen via de voordelen *Hoge Levenskracht/Astrale Kracht/Karmale Kracht I-VII*. Als je daarin geïnteresseerd bent, kan je die best nu nemen want je kan normaal geen Voordelen bijkopen als deze fase beëindigd is.
|
||||
* *Na de helden creatie*, om extra LP/AE/KP toe te voegen, gebruik je de »+« knop onder de respectivelijk energie in the *Eigenschappen* tab. De maximale waarden hiervoor worden berekend volgens de regels van de **Basis Regels** p. **350–352**.
|
||||
|
||||
## Waar vind ik mijn opgeslagen helden?
|
||||
|
||||
Helden en andere files zoals de configuratie kan je vinden in de volgende locatie, afhankelijk van je OS:
|
||||
|
||||
- *Windows:* `C:/Users/<User>/AppData/Roaming/Optolith`, met `<User>` de naam van je gebruiker
|
||||
- *Linux:* `$XDG_CONFIG_HOME/Optolith` of `~/.config/Optolith`
|
||||
- *macOS:* `~/Library/Application Support/Optolith`
|
||||
|
||||
Een lijst met relevante files:
|
||||
|
||||
- `heroes.json ` bevat alle helden opgeslagen in Optolith
|
||||
- `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`.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
## 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))
|
||||
* 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
|
||||
|
||||
Lançamento inicial.
|
||||
@@ -0,0 +1,49 @@
|
||||
## Is there a character sheet and where can I find it?
|
||||
|
||||
Yes, there is a character sheet you can export as a PDF! To do that, you have to end hero creation in the character's profile first. To do *that*, you need to have a maximum of 10 AP left – and you can't have too much AP spent, obviously. If you end it, you'll see the new tab *Character Sheet* above. In that tab you'll get a preview of your sheet and then you can export it via the button in the top left corner!
|
||||
|
||||
Might be relevant: There's only an DIN A4 version available!
|
||||
|
||||
## I can't add spells or liturgical chants!
|
||||
|
||||
It's likely you do not meet the prerequisites for adding spells or liturgical chants:
|
||||
|
||||
### Spells:
|
||||
|
||||
- Buy advantage *Spellcaster*.
|
||||
- Buy the magical special ability *Tradition*.
|
||||
|
||||
### Liturgical Chants:
|
||||
|
||||
* Buy advantage *Blessed One*.
|
||||
* Buy the blessed special ability *Tradition*.
|
||||
|
||||
## I can't buy stronger invocations!
|
||||
|
||||
Stronger invocation rituals have prerequisites that you can find in the **Core Rules** on page **263**:
|
||||
|
||||
* Invocatio Minor: Invocatio Minima 10
|
||||
* Invocatio Maior: Invocatio Minor 12
|
||||
* Elemental Servant: Manifesto 10
|
||||
* Call Djinn: Elemental Servant 12
|
||||
|
||||
## How can I buy additional LP/AE/KP?
|
||||
|
||||
That depends on whether you are still in hero creation phase or have completed that.
|
||||
|
||||
* *During hero creation* you can add additional LP/AE/KP via the advantages *Increased Life Points/Arcane Power/Karma Points I-VII*. You should use them if you are interested in higher values because you can usually not buy advantages afterwards!
|
||||
* *After hero creation*, to add additional LP/AE/KP, use the »+« button below the respective energy in the *Attributes* tab. The maximum values for these are calculated by using the rules from the **Core Rules** p. **350–352**.
|
||||
|
||||
## Where do I find my saved characters?
|
||||
|
||||
Characters and other files such as the application configuration can be found at the following locations, depending on the OS you use:
|
||||
|
||||
- *Windows:* `C:/Users/<User>/AppData/Roaming/Optolith`, where `<User>` is the name of your user folder
|
||||
- *Linux:* `$XDG_CONFIG_HOME/Optolith` or `~/.config/Optolith`
|
||||
- *macOS:* `~/Library/Application Support/Optolith`
|
||||
|
||||
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*.
|
||||
Vendored
+4
@@ -21,8 +21,12 @@ export interface RawConfig {
|
||||
equipmentSortOrder: "name" | "groupname" | "where" | "weight"
|
||||
equipmentGroupVisibilityFilter: number
|
||||
sheetCheckAttributeValueVisibility?: boolean
|
||||
sheetUseParchment?: boolean
|
||||
sheetShowRules?: boolean
|
||||
sheetZoomFactor?: number
|
||||
enableActiveItemHints: boolean
|
||||
locale?: string
|
||||
fallbackLocale?: string
|
||||
theme?: "light" | "dark"
|
||||
enableEditingHeroAfterCreationPhase?: boolean
|
||||
meleeItemTemplatesCombatTechniqueFilter?: string
|
||||
|
||||
@@ -73,12 +73,24 @@
|
||||
"sheetCheckAttributeValueVisibility": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sheetUseParchment": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sheetShowRules": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"sheetZoomFactor": {
|
||||
"type": "number"
|
||||
},
|
||||
"enableActiveItemHints": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"locale": {
|
||||
"type": "string"
|
||||
},
|
||||
"fallbackLocale": {
|
||||
"type": "string"
|
||||
},
|
||||
"theme": {
|
||||
"enum": ["light", "dark"]
|
||||
},
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 265 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 640 B |
@@ -1,2 +0,0 @@
|
||||
require = require('esm')(module)
|
||||
require('./main.js')
|
||||
File diff suppressed because one or more lines are too long
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
-133
@@ -1,133 +0,0 @@
|
||||
// @ts-check
|
||||
|
||||
const builder = require ("electron-builder")
|
||||
const { publishToServer } = require ("./publishToServer.js")
|
||||
|
||||
process.on ('unhandledRejection', error => {
|
||||
throw new Error (`Unhandled promise rejection: ${error .toString ()}`);
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
buildWindows:
|
||||
async () => {
|
||||
// console.log ("Deleting macOS env variables")
|
||||
// delete process.env.CSC_LINK
|
||||
// delete process.env.CSC_KEY_PASSWORD
|
||||
// delete process.env.APPLEID
|
||||
// delete process.env.APPLEIDPASS
|
||||
|
||||
// console.log ("Copy tables to directories...")
|
||||
// await copyTables ()
|
||||
|
||||
console.log ("Building Optolith for Windows...")
|
||||
await builder.build ({ config, targets: builder.Platform.WINDOWS.createTarget () })
|
||||
console.log ("Optolith Build for Windows successful.")
|
||||
|
||||
await publishToServer ("stable", "win")
|
||||
console.log ("Optolith Build for Windows deployed.")
|
||||
},
|
||||
buildLinux:
|
||||
async () => {
|
||||
// console.log ("Deleting macOS env variables")
|
||||
// delete process.env.CSC_LINK
|
||||
// delete process.env.CSC_KEY_PASSWORD
|
||||
// delete process.env.APPLEID
|
||||
// delete process.env.APPLEIDPASS
|
||||
|
||||
// console.log ("Copy tables to directories...")
|
||||
// await copyTables ()
|
||||
|
||||
console.log ("Building Optolith for Linux...")
|
||||
await builder.build ({ config, targets: builder.Platform.LINUX.createTarget () })
|
||||
console.log ("Optolith Build for Linux successful.")
|
||||
|
||||
await publishToServer ("stable", "linux")
|
||||
console.log ("Optolith Build for Linux deployed.")
|
||||
},
|
||||
buildMac:
|
||||
async () => {
|
||||
// console.log ("Copy tables to directories...")
|
||||
// await copyTables ()
|
||||
|
||||
console.log ("Building Optolith for OSX...")
|
||||
await builder.build ({ config, targets: builder.Platform.MAC.createTarget () })
|
||||
console.log ("Optolith Build for OSX successful.")
|
||||
|
||||
await publishToServer ("stable", "osx")
|
||||
console.log ("Optolith Build for OSX deployed.")
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {import ("electron-builder") .Configuration}
|
||||
*/
|
||||
const config = {
|
||||
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.PUBLISH_URL,
|
||||
"channel": "latest"
|
||||
},
|
||||
// afterSign: notarize,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// @ts-check
|
||||
import builder from "electron-builder"
|
||||
import { getSystem } from "./platform.mjs"
|
||||
|
||||
const [channel] = process.argv.slice(2)
|
||||
|
||||
if (channel !== "stable" && channel !== "prerelease") {
|
||||
throw new TypeError (`publishToServer requires a specified channel ("stable" or "prerelease"), but it received ${channel}`)
|
||||
}
|
||||
|
||||
const config =
|
||||
channel === "prerelease"
|
||||
? (await import("./build.prerelease.config.mjs")).default
|
||||
: (await import("./build.config.mjs")).default
|
||||
|
||||
process.on ('unhandledRejection', error => {
|
||||
throw new Error(`Unhandled promise rejection: ${/** @type {Error} */ (error).toString ()}`)
|
||||
})
|
||||
|
||||
const os = getSystem()
|
||||
|
||||
const plaformKey = os === "linux" ? "LINUX" : os === "mac" ? "MAC" : "WINDOWS"
|
||||
|
||||
await builder.build({
|
||||
config,
|
||||
targets: builder.Platform[plaformKey].createTarget(),
|
||||
})
|
||||
@@ -0,0 +1,84 @@
|
||||
// @ts-check
|
||||
import { notarize } from "./notarize.mjs"
|
||||
|
||||
/**
|
||||
* @type {import ("electron-builder") .Configuration}
|
||||
*/
|
||||
const config = {
|
||||
appId: "com.lukasobermann.optolithinsider",
|
||||
productName: "Optolith Insider",
|
||||
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"
|
||||
},
|
||||
files: [
|
||||
"app/**/*",
|
||||
"LICENSE"
|
||||
],
|
||||
asarUnpack: "app/Database/**/*",
|
||||
win: {
|
||||
target: [
|
||||
{
|
||||
target: "nsis",
|
||||
arch: [
|
||||
"x64",
|
||||
"ia32"
|
||||
]
|
||||
}
|
||||
],
|
||||
icon: "app/icon.ico",
|
||||
artifactName: "OptolithInsiderSetup_${version}.${ext}"
|
||||
},
|
||||
nsis: {
|
||||
perMachine: true,
|
||||
differentialPackage: true,
|
||||
deleteAppDataOnUninstall: false,
|
||||
},
|
||||
linux: {
|
||||
category: "RolePlaying",
|
||||
executableName: "OptolithInsider",
|
||||
icon: "app",
|
||||
target: [
|
||||
{
|
||||
target: "AppImage",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
},
|
||||
{
|
||||
target: "tar.gz",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
],
|
||||
artifactName: "OptolithInsider_${version}.${ext}"
|
||||
},
|
||||
mac: {
|
||||
category: "public.app-category.role-playing-games",
|
||||
type: "distribution",
|
||||
icon: "app/icon.icns",
|
||||
target: [
|
||||
{
|
||||
target: "default",
|
||||
arch: "universal"
|
||||
}
|
||||
],
|
||||
artifactName: "OptolithInsider_${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}/insider/\${os}`,
|
||||
"channel": "latest"
|
||||
},
|
||||
afterSign: notarize,
|
||||
}
|
||||
|
||||
export default config
|
||||
@@ -1,134 +0,0 @@
|
||||
// @ts-check
|
||||
|
||||
const builder = require ("electron-builder")
|
||||
const { publishToServer } = require ("./publishToServer.js")
|
||||
|
||||
process.on ('unhandledRejection', error => {
|
||||
throw new Error (`Unhandled promise rejection: ${error .toString ()}`);
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
buildWindows:
|
||||
async () => {
|
||||
// console.log ("Deleting macOS env variables")
|
||||
// delete process.env.CSC_LINK
|
||||
// delete process.env.CSC_KEY_PASSWORD
|
||||
// delete process.env.APPLEID
|
||||
// delete process.env.APPLEIDPASS
|
||||
|
||||
// console.log ("Copy tables to directories...")
|
||||
// await copyTables ()
|
||||
|
||||
console.log ("Building Optolith Insider for Windows...")
|
||||
await builder.build ({ config, targets: builder.Platform.WINDOWS.createTarget () })
|
||||
console.log ("Optolith Insider Build for Windows successful.")
|
||||
|
||||
await publishToServer ("insider", "win")
|
||||
console.log ("Optolith Insider Build for Windows deployed.")
|
||||
},
|
||||
buildLinux:
|
||||
async () => {
|
||||
// console.log ("Deleting macOS env variables")
|
||||
// delete process.env.CSC_LINK
|
||||
// delete process.env.CSC_KEY_PASSWORD
|
||||
// delete process.env.APPLEID
|
||||
// delete process.env.APPLEIDPASS
|
||||
|
||||
// console.log ("Copy tables to directories...")
|
||||
// await copyTables ()
|
||||
|
||||
console.log ("Building Optolith Insider for Linux...")
|
||||
await builder.build ({ config, targets: builder.Platform.LINUX.createTarget () })
|
||||
console.log ("Optolith Insider Build for Linux successful.")
|
||||
|
||||
await publishToServer ("insider", "linux")
|
||||
console.log ("Optolith Insider Build for Linux deployed.")
|
||||
},
|
||||
buildMac:
|
||||
async () => {
|
||||
// console.log ("Copy tables to directories...")
|
||||
// await copyTables ()
|
||||
|
||||
console.log ("Building Optolith Insider for OSX...")
|
||||
await builder.build ({ config, targets: builder.Platform.MAC.createTarget () })
|
||||
console.log ("Optolith Insider Build for OSX successful.")
|
||||
|
||||
await publishToServer ("insider", "osx")
|
||||
console.log ("Optolith Insider Build for OSX deployed.")
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {import ("electron-builder") .Configuration}
|
||||
*/
|
||||
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.",
|
||||
directories: {
|
||||
output: "dist/insider"
|
||||
},
|
||||
files: [
|
||||
"app/**/*",
|
||||
"LICENSE"
|
||||
],
|
||||
asarUnpack: "app/Database/**/*",
|
||||
win: {
|
||||
target: [
|
||||
{
|
||||
target: "nsis",
|
||||
arch: [
|
||||
"x64",
|
||||
"ia32"
|
||||
]
|
||||
}
|
||||
],
|
||||
icon: "app/icon.ico",
|
||||
artifactName: "OptolithInsiderSetup_${version}.${ext}"
|
||||
},
|
||||
nsis: {
|
||||
perMachine: true,
|
||||
differentialPackage: true,
|
||||
deleteAppDataOnUninstall: false,
|
||||
},
|
||||
linux: {
|
||||
category: "RolePlaying",
|
||||
executableName: "OptolithInsider",
|
||||
icon: "app",
|
||||
target: [
|
||||
{
|
||||
target: "AppImage",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
},
|
||||
{
|
||||
target: "tar.gz",
|
||||
arch: [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
],
|
||||
artifactName: "OptolithInsider_${version}.${ext}"
|
||||
},
|
||||
mac: {
|
||||
category: "public.app-category.role-playing-games",
|
||||
type: "distribution",
|
||||
icon: "app/icon.icns",
|
||||
target: "default",
|
||||
artifactName: "OptolithInsider_${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.PUBLISH_URL_INSIDER,
|
||||
"channel": "latest"
|
||||
},
|
||||
// afterSign: notarize,
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
require ("./buildInsider.js") .buildLinux ()
|
||||
@@ -1 +0,0 @@
|
||||
require ("./buildInsider.js") .buildMac ()
|
||||
@@ -1 +0,0 @@
|
||||
require ("./buildInsider.js") .buildWindows ()
|
||||
@@ -1 +0,0 @@
|
||||
require ("./build.js") .buildLinux ()
|
||||
@@ -1 +0,0 @@
|
||||
require ("./build.js") .buildMac ()
|
||||
@@ -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 +0,0 @@
|
||||
require ("./build.js") .buildWindows ()
|
||||
@@ -1,4 +0,0 @@
|
||||
const { copySchema } = require ("./getStaticData")
|
||||
const { join } = require ("path")
|
||||
|
||||
copySchema (join ("app", "Database", "Schema"), join ("src", "App", "Utilities", "YAML", "Schema"))
|
||||
@@ -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>
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
// @ts-check
|
||||
const { copy, remove, pathExists } = require ("fs-extra")
|
||||
const { join, resolve } = require ("path")
|
||||
|
||||
|
||||
/**
|
||||
* Copy schemes from one directory to another.
|
||||
*
|
||||
* @param {string} src_dir Source directory containing all schemes
|
||||
* @param {string} dest_dir Destination directory where the contents will be
|
||||
* copied to
|
||||
*/
|
||||
const copySchema =
|
||||
async (src_dir, dest_dir) => {
|
||||
if (await pathExists (src_dir)) {
|
||||
await remove (dest_dir)
|
||||
await copy (src_dir, dest_dir)
|
||||
|
||||
console.log (`"${src_dir}" contents copied to "${dest_dir}"!`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const copyData =
|
||||
async (src_dir) => {
|
||||
if (await pathExists (src_dir)) {
|
||||
const dest_dir = join ("app", "Database")
|
||||
|
||||
await remove (dest_dir)
|
||||
await copy (src_dir, dest_dir)
|
||||
|
||||
console.log (`"${src_dir}" contents copied to "${dest_dir}"!`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const getStaticData = async () => {
|
||||
// @ts-ignore
|
||||
const { repository } = require ("./tablesSrc.json")
|
||||
const data_src_dir = join (...repository, "Data")
|
||||
const schema_src_dir = join (...repository, "Schema")
|
||||
console.log ("Copying most recent static data files...")
|
||||
|
||||
await copyData (data_src_dir)
|
||||
await copySchema (schema_src_dir, join ("app", "Database", "Schema"))
|
||||
await copySchema (schema_src_dir, join ("src", "App", "Utilities", "YAML", "Schema"))
|
||||
|
||||
console.log ("All files copied!")
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
getStaticData,
|
||||
copySchema
|
||||
}
|
||||
|
||||
|
||||
// @ts-ignore
|
||||
if (require.main === module) {
|
||||
getStaticData ()
|
||||
}
|
||||
@@ -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`)
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -1,141 +0,0 @@
|
||||
// @ts-check
|
||||
|
||||
require("dotenv").config()
|
||||
const Client = require ("ssh2-sftp-client")
|
||||
const fs = require ("fs")
|
||||
const path = require ("path")
|
||||
const semver = require ("semver");
|
||||
|
||||
/**
|
||||
* Needed env variables:
|
||||
* - `HOST`
|
||||
* - `USERNAME`
|
||||
* - `PASSWORD`
|
||||
*
|
||||
* Needed command line args:
|
||||
*
|
||||
* `channel os`
|
||||
*
|
||||
* `channel = stable | insider`
|
||||
*
|
||||
* `os = win | osx | linux`
|
||||
*
|
||||
* @param channel {"stable" | "insider"}
|
||||
* @param os {"win" | "osx" | "linux"}
|
||||
*/
|
||||
const publishToServer =
|
||||
async (channel, os) => {
|
||||
if (channel !== "stable" && channel !== "insider") {
|
||||
throw new TypeError (`publishToServer requires a specified channel ("stable" or "insider"), but it received ${channel}`)
|
||||
}
|
||||
|
||||
if (os !== "win" && os !== "osx" && os !== "linux") {
|
||||
throw new TypeError (`publishToServer requires a specified OS ("win", "osx" or "linux"), but it received ${os}`)
|
||||
}
|
||||
|
||||
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 === "insider" ? ["dist", "insider"] : ["dist"]
|
||||
|
||||
const serverPath = `./update.optolith.app/${channel === "insider" ? "insider/" : ""}${subFolder}`
|
||||
|
||||
const regex =
|
||||
channel === "insider"
|
||||
? 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 === "insider"
|
||||
? 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}.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}.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.exports = {
|
||||
publishToServer
|
||||
}
|
||||
@@ -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))
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"appId": "com.lukasobermann.optolith",
|
||||
"productName": "Optolith",
|
||||
"directories": { "output": "dist" },
|
||||
"files": ["app/**/*", "LICENSE"],
|
||||
"npmRebuild": false,
|
||||
"mac": {
|
||||
"category": "public.app-category.role-playing-games",
|
||||
"icon": "app/icon.icns",
|
||||
"target": [
|
||||
{ "target": "dmg", "arch": ["arm64", "x64"] },
|
||||
{ "target": "zip", "arch": ["arm64", "x64"] }
|
||||
],
|
||||
"artifactName": "Optolith_${version}_${arch}.${ext}",
|
||||
"identity": null
|
||||
},
|
||||
"dmg": { "sign": false }
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"appId": "com.lukasobermann.optolith",
|
||||
"productName": "Optolith",
|
||||
"directories": {
|
||||
"output": "dist"
|
||||
},
|
||||
"files": [
|
||||
"app/**/*",
|
||||
"LICENSE"
|
||||
],
|
||||
"npmRebuild": false,
|
||||
"win": {
|
||||
"target": [
|
||||
{
|
||||
"target": "nsis",
|
||||
"arch": [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
],
|
||||
"icon": "app/icon.ico",
|
||||
"artifactName": "OptolithSetup_${version}.${ext}"
|
||||
},
|
||||
"nsis": {
|
||||
"perMachine": false,
|
||||
"deleteAppDataOnUninstall": false
|
||||
},
|
||||
"linux": {
|
||||
"category": "RolePlaying",
|
||||
"executableName": "Optolith",
|
||||
"icon": "app",
|
||||
"target": [
|
||||
{
|
||||
"target": "AppImage",
|
||||
"arch": [
|
||||
"x64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"target": "tar.gz",
|
||||
"arch": [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
],
|
||||
"artifactName": "Optolith_${version}.${ext}"
|
||||
},
|
||||
"publish": null
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
param([switch]$insider)
|
||||
|
||||
$source = ".\app\Database"
|
||||
|
||||
Write-Output "Source: $(Resolve-Path -Path $source)"
|
||||
|
||||
python .\encryptTables.py $source
|
||||
|
||||
Write-Output "Table encryption succeeded!"
|
||||
@@ -1,58 +0,0 @@
|
||||
import base64
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
import cryptography
|
||||
from cryptography.fernet import Fernet
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives import hashes
|
||||
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
|
||||
|
||||
|
||||
def encryptTables(tableFolder):
|
||||
# Zip files into project
|
||||
zipf = zipfile.ZipFile('Tables.zip', 'w', zipfile.ZIP_DEFLATED)
|
||||
zipdir(tableFolder, zipf)
|
||||
zipf.close()
|
||||
|
||||
# Obtain key from enviroment variable
|
||||
key = os.environ['OPTOLITH_KEY']
|
||||
|
||||
# Create encryption key
|
||||
salt = b'optolithSalt'
|
||||
kdf = PBKDF2HMAC(
|
||||
algorithm=hashes.SHA256(),
|
||||
length=32,
|
||||
salt=salt,
|
||||
iterations=100000,
|
||||
backend=default_backend())
|
||||
cryptoKey = base64.urlsafe_b64encode(kdf.derive(key.encode(encoding='UTF-8')))
|
||||
|
||||
# Encrypt file
|
||||
f = Fernet(cryptoKey)
|
||||
with open("Tables.zip", "rb") as sourceFile:
|
||||
with open("Tables.crypto", "wb") as targetFile:
|
||||
encrypted = f.encrypt(sourceFile.read()) # For now. This creates larger files then necessary
|
||||
# encryptedBytes = base64.decodebytes(encrypted)
|
||||
targetFile.write(encrypted)
|
||||
|
||||
# Delete old table zip
|
||||
os.remove("Tables.zip")
|
||||
|
||||
|
||||
def zipdir(path, ziph):
|
||||
# ziph is zipfile handle
|
||||
for root, dirs, files in os.walk(path):
|
||||
for file in files:
|
||||
(p, extension) = os.path.splitext(file)
|
||||
if extension == ".yaml" or extension == ".json" or extension == ".ts":
|
||||
ziph.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), path))
|
||||
|
||||
if __name__ == "__main__":
|
||||
if(len(sys.argv)) == 1:
|
||||
path = input("Bitte Pfad zu den Tabellen eingeben:\n> ")
|
||||
else:
|
||||
path = sys.argv[1]
|
||||
encryptTables(path)
|
||||
@@ -0,0 +1,11 @@
|
||||
// @ts-check
|
||||
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
|
||||
module.exports = {
|
||||
preset: "ts-jest",
|
||||
testEnvironment: "node",
|
||||
globals: {
|
||||
"ts-jest": {
|
||||
tsconfig: "tsconfig.test.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
Generated
+23491
-5937
File diff suppressed because it is too large
Load Diff
+70
-72
@@ -1,108 +1,106 @@
|
||||
{
|
||||
"name": "optolith",
|
||||
"productName": "Optolith",
|
||||
"version": "1.4.0-alpha.5",
|
||||
"version": "1.6.0",
|
||||
"description": "A generator for heroes for the P&P-RPG 'The Dark Eye'.",
|
||||
"author": {
|
||||
"name": "Lukas Obermann",
|
||||
"email": "support@optolith.app"
|
||||
},
|
||||
"homepage": "https://github.com/elyukai/optolith-client",
|
||||
"homepage": "https://optolith.app",
|
||||
"license": "MPL-2.0",
|
||||
"main": "app/main.js",
|
||||
"dependencies": {
|
||||
"@glennsl/bs-json": "5.0.2",
|
||||
"ajv": "6.12.0",
|
||||
"bs-platform": "7.2.2",
|
||||
"electron-log": "4.1.1",
|
||||
"electron-updater": "4.2.5",
|
||||
"@electron/remote": "^2.0.8",
|
||||
"adm-zip": "^0.5.1",
|
||||
"ajv": "6.12.6",
|
||||
"electron-devtools-installer": "^3.2.1",
|
||||
"electron-log": "^4.4.8",
|
||||
"electron-updater": "^5.0.5",
|
||||
"electron-window-state": "5.0.3",
|
||||
"moment": "2.24.0",
|
||||
"moment": "^2.29.4",
|
||||
"mousetrap": "1.6.5",
|
||||
"react": "16.13.1",
|
||||
"react-custom-scrollbars": "4.2.1",
|
||||
"react-dom": "16.13.1",
|
||||
"react-markdown": "4.3.1",
|
||||
"react-markdown": "^8.0.0",
|
||||
"react-portal": "4.2.1",
|
||||
"react-redux": "7.2.0",
|
||||
"react-redux": "7.2.1",
|
||||
"react-textfit": "1.1.0",
|
||||
"reason-react": "0.7.0",
|
||||
"redux": "4.0.5",
|
||||
"redux-devtools-extension": "2.13.8",
|
||||
"redux-thunk": "2.3.0",
|
||||
"remark-breaks": "1.0.5",
|
||||
"rehype-raw": "^5.1.0",
|
||||
"remark-breaks": "^2.0.2",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"reselect": "4.0.0",
|
||||
"semver": "7.1.3",
|
||||
"ssh2-sftp-client": "5.1.2",
|
||||
"tslib": "1.11.1",
|
||||
"yaml": "1.8.3"
|
||||
"semver": "7.3.2",
|
||||
"tslib": "^2.3.1",
|
||||
"yaml": "1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@glennsl/bs-jest": "0.5.1",
|
||||
"@types/classnames": "2.2.10",
|
||||
"@types/jest": "25.1.5",
|
||||
"@types/mousetrap": "1.6.3",
|
||||
"@types/node": "13.11.0",
|
||||
"@types/react": "16.9.32",
|
||||
"@types/react-custom-scrollbars": "4.0.6",
|
||||
"@types/react-dom": "16.9.6",
|
||||
"@commitlint/cli": "11.0.0",
|
||||
"@commitlint/config-conventional": "11.0.0",
|
||||
"@types/classnames": "2.2.11",
|
||||
"@types/jest": "26.0.15",
|
||||
"@types/mousetrap": "1.6.4",
|
||||
"@types/node": "14.14.7",
|
||||
"@types/react": "16.9.56",
|
||||
"@types/react-custom-scrollbars": "4.0.7",
|
||||
"@types/react-dom": "16.9.9",
|
||||
"@types/react-portal": "4.0.2",
|
||||
"@types/react-redux": "7.1.7",
|
||||
"@types/semver": "7.1.0",
|
||||
"@types/styled-components": "5.0.1",
|
||||
"@types/yaml": "1.2.0",
|
||||
"@typescript-eslint/eslint-plugin": "2.26.0",
|
||||
"@typescript-eslint/parser": "2.26.0",
|
||||
"@types/react-redux": "7.1.11",
|
||||
"@types/semver": "7.3.4",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.0",
|
||||
"@typescript-eslint/parser": "^5.10.0",
|
||||
"custom-env": "2.0.1",
|
||||
"electron": "8.2.0",
|
||||
"electron-builder": "22.4.1",
|
||||
"electron-notarize": "0.3.0",
|
||||
"eslint": "6.8.0",
|
||||
"eslint-plugin-react": "7.19.0",
|
||||
"eslint-plugin-react-hooks": "3.0.0",
|
||||
"fs-extra": "9.0.0",
|
||||
"gentype": "3.18.0",
|
||||
"jest": "25.2.7",
|
||||
"madge": "3.8.0",
|
||||
"sass": "1.26.3",
|
||||
"ts-jest": "25.3.1",
|
||||
"typescript": "3.8.3"
|
||||
"dotenv": "8.2.0",
|
||||
"electron": "^19.0.8",
|
||||
"electron-builder": "^23.1.0",
|
||||
"electron-notarize": "^1.2.1",
|
||||
"eslint": "^8.7.0",
|
||||
"eslint-plugin-react": "^7.28.0",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"eslint-plugin-tsdoc": "^0.2.14",
|
||||
"fs-extra": "9.0.1",
|
||||
"gentype": "3.38.0",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"husky": "^4.3.8",
|
||||
"jest": "^26.6.3",
|
||||
"sass": "1.29.0",
|
||||
"ssh2-sftp-client": "^9.0.1",
|
||||
"standard-version": "^9.3.1",
|
||||
"ts-jest": "^26.5.6",
|
||||
"ts-loader": "^9.2.6",
|
||||
"typescript": "^4.5.5",
|
||||
"webpack": "^5.67.0",
|
||||
"webpack-cli": "^4.9.2"
|
||||
},
|
||||
"scripts": {
|
||||
"prerelease:win": "set NODE_ENV=development && node ./deploy/buildInsiderWin.js",
|
||||
"prerelease:linux": "NODE_ENV=development node ./deploy/buildInsiderLinux.js",
|
||||
"prerelease:osx": "NODE_ENV=development node ./deploy/buildInsiderMac.js",
|
||||
"release:win": "set NODE_ENV=production && node ./deploy/buildWin.js",
|
||||
"release:linux": "NODE_ENV=production node ./deploy/buildLinux.js",
|
||||
"release:osx": "NODE_ENV=production node ./deploy/buildMac.js",
|
||||
"css:build": "node --experimental-modules ./deploy/buildSass.mjs",
|
||||
"prerelease:linux": "NODE_ENV=development node -r dotenv/config ./deploy/buildInsiderLinux.js",
|
||||
"prerelease:mac": "NODE_ENV=development node ./deploy/buildInsiderMac.js",
|
||||
"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": "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",
|
||||
"getstatic": "node ./deploy/getStaticData.js",
|
||||
"yaml:encrypt": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./encryptTables.ps1",
|
||||
"yaml:decrypt": "py ./prepareTables.py",
|
||||
"ci:copyschemes": "node ./deploy/copySchemaCI.js",
|
||||
"ts:watch": "tsc -w",
|
||||
"lint": "eslint \"src/\" --ext \".ts\" --ext \".tsx\"",
|
||||
"start": "electron .",
|
||||
"test": "jest",
|
||||
"circ": "madge -c ./src"
|
||||
"circ": "madge -c ./src",
|
||||
"release:main": "standard-version --skip.commit --skip.tag",
|
||||
"release:pre": "standard-version --prerelease=alpha"
|
||||
},
|
||||
"repository": "github:elyukai/optolith-client",
|
||||
"jest": {
|
||||
"transform": {
|
||||
"^.+\\.tsx?$": "ts-jest"
|
||||
},
|
||||
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
|
||||
"moduleFileExtensions": [
|
||||
"ts",
|
||||
"tsx",
|
||||
"js",
|
||||
"jsx",
|
||||
"json",
|
||||
"node"
|
||||
],
|
||||
"testEnvironment": "node"
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
import base64
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
import cryptography
|
||||
from cryptography.fernet import Fernet
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives import hashes
|
||||
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
|
||||
|
||||
|
||||
def decryptTables():
|
||||
print("Decrypting tables")
|
||||
# Obtain key from enviroment variable
|
||||
key = os.environ['OPTOLITH_KEY']
|
||||
|
||||
# Create encryption key
|
||||
salt = b'optolithSalt'
|
||||
kdf = PBKDF2HMAC(
|
||||
algorithm=hashes.SHA256(),
|
||||
length=32,
|
||||
salt=salt,
|
||||
iterations=100000,
|
||||
backend=default_backend())
|
||||
cryptoKey = base64.urlsafe_b64encode(kdf.derive(key.encode(encoding='UTF-8')))
|
||||
|
||||
# Encrypt file
|
||||
f = Fernet(cryptoKey)
|
||||
with open("Tables.crypto", "rb") as sourceFile:
|
||||
with open("Tables.zip", "wb") as targetFile:
|
||||
# encrypted = base64.encodebytes(sourceFile.read())
|
||||
decrypted = f.decrypt(sourceFile.read())
|
||||
targetFile.write(decrypted)
|
||||
print("Tables decrypted")
|
||||
|
||||
def prepareTables():
|
||||
print("Unpacking tables")
|
||||
# Unpack zip file
|
||||
os.mkdir("app/Database")
|
||||
with zipfile.ZipFile("Tables.zip", 'r') as zip_ref:
|
||||
zip_ref.extractall("app/Database")
|
||||
print("Tables unpacked")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Start to prepare tables...")
|
||||
decryptTables()
|
||||
prepareTables()
|
||||
print("Preparing tables finished")
|
||||
@@ -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,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> ({
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -34,6 +34,7 @@ import { translate, translateP } from "../Utilities/I18n"
|
||||
import { pipe, pipe_ } from "../Utilities/pipe"
|
||||
import { misNumberM } from "../Utilities/typeCheckUtils"
|
||||
import { getWikiEntry } from "../Utilities/WikiUtils"
|
||||
import { WikiInfoSelector } from "../Views/InlineWiki/WikiInfo"
|
||||
import { ReduxAction, ReduxDispatch } from "./Actions"
|
||||
import { addAlert, addNotEnoughAPAlert, AlertOptions } from "./AlertActions"
|
||||
|
||||
@@ -284,14 +285,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)
|
||||
)
|
||||
@@ -466,6 +467,14 @@ export const switchRatingVisibility = (): SwitchDisAdvRatingVisibilityAction =>
|
||||
type: ActionTypes.SWITCH_DISADV_RATING_VISIBILITY,
|
||||
})
|
||||
|
||||
export const setRule = (selector: WikiInfoSelector, rule: string): SaveRuleAction => ({
|
||||
type: ActionTypes.SET_CUSTOM_RULE,
|
||||
payload: {
|
||||
rule,
|
||||
selector,
|
||||
},
|
||||
})
|
||||
|
||||
export interface SetActiveAdvantagesFilterTextAction {
|
||||
type: ActionTypes.SET_ADVANTAGES_FILTER_TEXT
|
||||
payload: {
|
||||
@@ -525,3 +534,11 @@ export const setInactiveDisadvantagesFilterText =
|
||||
filterText,
|
||||
},
|
||||
})
|
||||
|
||||
export interface SaveRuleAction {
|
||||
type: ActionTypes.SET_CUSTOM_RULE
|
||||
payload: {
|
||||
rule: string
|
||||
selector: WikiInfoSelector
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -76,6 +77,26 @@ export const addTemplateToList =
|
||||
return undefined
|
||||
}
|
||||
|
||||
export interface SetMoneyAction {
|
||||
type: ActionTypes.SET_MONEY
|
||||
payload: {
|
||||
d: number
|
||||
s: number
|
||||
h: number
|
||||
k: number
|
||||
}
|
||||
}
|
||||
|
||||
export const setMoney = (d: number, s: number, h: number, k: number): SetMoneyAction => ({
|
||||
type: ActionTypes.SET_MONEY,
|
||||
payload: {
|
||||
d,
|
||||
s,
|
||||
h,
|
||||
k,
|
||||
},
|
||||
})
|
||||
|
||||
export interface CreateItemAction {
|
||||
type: ActionTypes.CREATE_ITEM
|
||||
}
|
||||
@@ -355,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
|
||||
@@ -490,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,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -696,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,
|
||||
},
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -719,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,
|
||||
},
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import { fromMaybe, isNothing, Maybe } from "../../Data/Maybe"
|
||||
import { SET_FALLBACK_LOCALE } from "../Constants/ActionTypes"
|
||||
import { Locale } from "../Models/Config"
|
||||
import { getSystemLocale } from "../Utilities/IOUtils"
|
||||
|
||||
export interface SetFallbackLocaleAction {
|
||||
type: SET_FALLBACK_LOCALE
|
||||
payload: {
|
||||
locale: string
|
||||
localeType: "default" | "set"
|
||||
}
|
||||
}
|
||||
|
||||
export const setFallbackLocale =
|
||||
(locale: Maybe<Locale>): SetFallbackLocaleAction => ({
|
||||
type: SET_FALLBACK_LOCALE,
|
||||
payload: {
|
||||
locale: fromMaybe (getSystemLocale ()) (locale),
|
||||
localeType: isNothing (locale) ? "default" : "set",
|
||||
},
|
||||
})
|
||||
@@ -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, 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>> =
|
||||
@@ -50,11 +51,18 @@ export const requestConfigSave: ReduxAction<Promise<boolean>> =
|
||||
...toObject (uiSettingsState),
|
||||
sheetCheckAttributeValueVisibility:
|
||||
Just (UISSA.sheetCheckAttributeValueVisibility (uiSettingsState)),
|
||||
sheetUseParchment:
|
||||
Just (UISSA.sheetUseParchment (uiSettingsState)),
|
||||
sheetShowRules:
|
||||
Just (UISSA.sheetShowRules (uiSettingsState)),
|
||||
sheetZoomFactor:
|
||||
UISSA.sheetZoomFactor (uiSettingsState),
|
||||
theme: Just (UISSA.theme (uiSettingsState)),
|
||||
enableEditingHeroAfterCreationPhase:
|
||||
Just (UISSA.enableEditingHeroAfterCreationPhase (uiSettingsState)),
|
||||
enableAnimations: Just (UISSA.enableAnimations (uiSettingsState)),
|
||||
locale: getLocaleId (state),
|
||||
fallbackLocale: getFallbackLocaleId (state),
|
||||
})
|
||||
|
||||
return pipe_ (
|
||||
@@ -64,13 +72,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,
|
||||
@@ -114,7 +122,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,
|
||||
@@ -139,6 +147,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
|
||||
@@ -163,20 +172,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)) {
|
||||
@@ -189,7 +190,7 @@ export const requestHeroSave =
|
||||
const message = getErrorMsg (static_data)
|
||||
(translate (static_data)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(fromLeft_ (res))
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -205,13 +206,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,
|
||||
@@ -263,7 +264,7 @@ export const requestHeroDeletion =
|
||||
const message = getErrorMsg (staticData)
|
||||
(translate (staticData)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(fromLeft_ (res))
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -285,7 +286,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")
|
||||
|
||||
@@ -298,6 +303,7 @@ export const imgPathToBase64 =
|
||||
return Just (path)
|
||||
}
|
||||
|
||||
|
||||
export const requestHeroExport =
|
||||
(id: string): ReduxAction =>
|
||||
async (dispatch, getState) => {
|
||||
@@ -325,7 +331,7 @@ export const requestHeroExport =
|
||||
filters: [
|
||||
{ name: "JSON", extensions: [ "json" ] },
|
||||
],
|
||||
defaultPath: hero.name.replace (/\//u, "/"),
|
||||
defaultPath: `${hero.name.replace (/\//u, "/")}.json`,
|
||||
})
|
||||
|
||||
if (isJust (pmfilepath)) {
|
||||
@@ -333,7 +339,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"),
|
||||
})))
|
||||
@@ -344,7 +350,7 @@ export const requestHeroExport =
|
||||
const message = getErrorMsg (staticData)
|
||||
(translate (staticData)
|
||||
("header.dialogs.saveheroeserror.message"))
|
||||
(res)
|
||||
(res.value)
|
||||
|
||||
await dispatch (addErrorAlert (AlertOptions ({
|
||||
title,
|
||||
@@ -386,14 +392,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))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -428,16 +434,14 @@ const close = (
|
||||
if (isJust (f)) {
|
||||
fromJust (f) ()
|
||||
}
|
||||
|
||||
remote .getCurrentWindow () .close ()
|
||||
}
|
||||
else {
|
||||
console.log ("!(all_saved && save_heroes)")
|
||||
|
||||
await dispatch (requestSaveCache (false))
|
||||
|
||||
remote .getCurrentWindow () .close ()
|
||||
}
|
||||
|
||||
remote .getCurrentWindow () .close ()
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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,14 +142,17 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
fromLeft_,
|
||||
parseErrorsToPairStr,
|
||||
pairStrErrorToAlertOptions,
|
||||
Left,
|
||||
dispatchErrorAlertOptions
|
||||
)
|
||||
}
|
||||
|
||||
const available_langs = fromRight_ (eavailable_langs)
|
||||
|
||||
const estatic_data = await parseStaticData (fromMaybe (defaultLocale) (Config.A.locale (config)))
|
||||
const estatic_data =
|
||||
await parseStaticData (
|
||||
fromMaybe (defaultLocale) (Config.A.locale (config.value)),
|
||||
Config.A.fallbackLocale (config.value)
|
||||
)
|
||||
|
||||
if (isLeft (estatic_data)) {
|
||||
return pipe_ (
|
||||
@@ -157,7 +160,6 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
|
||||
fromLeft_,
|
||||
parseErrorsToPairStr,
|
||||
pairStrErrorToAlertOptions,
|
||||
Left,
|
||||
dispatchErrorAlertOptions
|
||||
)
|
||||
}
|
||||
@@ -166,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,
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { fmapF } from "../../Data/Functor"
|
||||
import { bind, bindF, fromJust, isNothing, join, liftM2 } from "../../Data/Maybe"
|
||||
import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Data/Maybe"
|
||||
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,9 +9,9 @@ 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, pipe_ } from "../Utilities/pipe"
|
||||
import { pipe_ } from "../Utilities/pipe"
|
||||
import { ReduxAction } from "./Actions"
|
||||
import { addNotEnoughAPAlert } from "./AlertActions"
|
||||
|
||||
@@ -20,6 +19,7 @@ export interface ActivateLiturgicalChantAction {
|
||||
type: ActionTypes.ACTIVATE_LITURGY
|
||||
payload: {
|
||||
id: string
|
||||
staticEntry: Record<LiturgicalChant>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,27 +30,36 @@ export const addLiturgicalChant =
|
||||
const wiki_liturgical_chants = getWikiLiturgicalChants (state)
|
||||
const mhero = getCurrentHeroPresent (state)
|
||||
|
||||
const missingAPForInc =
|
||||
pipe_ (
|
||||
mhero,
|
||||
bindF (hero => getAvailableAPMap (HeroModel.A.id (hero)) (state, { hero })),
|
||||
join,
|
||||
liftM2 (getMissingAP (getIsInCharacterCreation (state)))
|
||||
(fmapF (lookup (id) (wiki_liturgical_chants))
|
||||
(pipe (LiturgicalChant.A.ic, icFromJs, getAPForActivatation))),
|
||||
join
|
||||
)
|
||||
const maybeStaticLiturgicalChant = lookup (id) (wiki_liturgical_chants)
|
||||
|
||||
if (isNothing (missingAPForInc)) {
|
||||
dispatch<ActivateLiturgicalChantAction> ({
|
||||
type: ActionTypes.ACTIVATE_LITURGY,
|
||||
payload: {
|
||||
id,
|
||||
},
|
||||
})
|
||||
}
|
||||
else {
|
||||
await dispatch (addNotEnoughAPAlert (fromJust (missingAPForInc)))
|
||||
if (isJust (maybeStaticLiturgicalChant)) {
|
||||
const staticLiturgicalChant = fromJust (maybeStaticLiturgicalChant)
|
||||
|
||||
const missingAPForInc =
|
||||
pipe_ (
|
||||
mhero,
|
||||
bindF (hero => getAvailableAPMap (HeroModel.A.id (hero)) (state, { hero })),
|
||||
join,
|
||||
bindF (getMissingAP (getIsInCharacterCreation (state))
|
||||
(pipe_ (
|
||||
staticLiturgicalChant,
|
||||
LiturgicalChant.A.ic,
|
||||
getAPForActivatation
|
||||
)))
|
||||
)
|
||||
|
||||
if (isNothing (missingAPForInc)) {
|
||||
dispatch<ActivateLiturgicalChantAction> ({
|
||||
type: ActionTypes.ACTIVATE_LITURGY,
|
||||
payload: {
|
||||
id,
|
||||
staticEntry: staticLiturgicalChant,
|
||||
},
|
||||
})
|
||||
}
|
||||
else {
|
||||
await dispatch (addNotEnoughAPAlert (fromJust (missingAPForInc)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,15 +102,30 @@ export interface DeactivateLiturgyAction {
|
||||
type: ActionTypes.DEACTIVATE_LITURGY
|
||||
payload: {
|
||||
id: string
|
||||
staticEntry: Record<LiturgicalChant>
|
||||
}
|
||||
}
|
||||
|
||||
export const removeLiturgicalChant = (id: string): DeactivateLiturgyAction => ({
|
||||
type: ActionTypes.DEACTIVATE_LITURGY,
|
||||
payload: {
|
||||
id,
|
||||
},
|
||||
})
|
||||
export const removeLiturgicalChant =
|
||||
(id: string): ReduxAction =>
|
||||
(dispatch, getState) => {
|
||||
const state = getState ()
|
||||
const staticLiturgicalChants = getWikiLiturgicalChants (state)
|
||||
|
||||
const maybeStaticLiturgicalChant = lookup (id) (staticLiturgicalChants)
|
||||
|
||||
if (isJust (maybeStaticLiturgicalChant)) {
|
||||
const staticLiturgicalChant = fromJust (maybeStaticLiturgicalChant)
|
||||
|
||||
dispatch<DeactivateLiturgyAction> ({
|
||||
type: ActionTypes.DEACTIVATE_LITURGY,
|
||||
payload: {
|
||||
id,
|
||||
staticEntry: staticLiturgicalChant,
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export interface DeactivateBlessingAction {
|
||||
type: ActionTypes.DEACTIVATE_BLESSING
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import { SWITCH_SHEET_ATTR_VALUE_VISIBILITY } from "../Constants/ActionTypes"
|
||||
import {
|
||||
SWITCH_SHEET_ATTR_VALUE_VISIBILITY,
|
||||
SWITCH_SHEET_USE_PARCHMENT,
|
||||
SET_SHEET_ZOOM_FACTOR,
|
||||
SWITCH_SHEET_SHOW_RULES
|
||||
} from "../Constants/ActionTypes"
|
||||
|
||||
export interface SwitchSheetAttributeValueVisibilityAction {
|
||||
type: SWITCH_SHEET_ATTR_VALUE_VISIBILITY
|
||||
@@ -7,3 +12,32 @@ export interface SwitchSheetAttributeValueVisibilityAction {
|
||||
export const switchAttributeValueVisibility = (): SwitchSheetAttributeValueVisibilityAction => ({
|
||||
type: SWITCH_SHEET_ATTR_VALUE_VISIBILITY,
|
||||
})
|
||||
|
||||
export interface SwitchSheetUseParchmentAction {
|
||||
type: SWITCH_SHEET_USE_PARCHMENT
|
||||
}
|
||||
|
||||
export const switchUseParchment = (): SwitchSheetUseParchmentAction => ({
|
||||
type: SWITCH_SHEET_USE_PARCHMENT,
|
||||
})
|
||||
|
||||
export interface SwitchSheetShowRules {
|
||||
type: SWITCH_SHEET_SHOW_RULES
|
||||
}
|
||||
export const switchShowRules = (): SwitchSheetShowRules => ({
|
||||
type: SWITCH_SHEET_SHOW_RULES,
|
||||
})
|
||||
|
||||
export interface SetSheetZoomFactor {
|
||||
type: SET_SHEET_ZOOM_FACTOR
|
||||
payload: {
|
||||
zoomFactor: number
|
||||
}
|
||||
}
|
||||
|
||||
export const setSheetZoomFactor = (zoomFactor: number): SetSheetZoomFactor => ({
|
||||
type: SET_SHEET_ZOOM_FACTOR,
|
||||
payload: {
|
||||
zoomFactor,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -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"
|
||||
@@ -21,7 +20,7 @@ export interface ActivateSpellAction {
|
||||
type: ActionTypes.ACTIVATE_SPELL
|
||||
payload: {
|
||||
id: string
|
||||
wikiEntry: Record<Spell>
|
||||
staticEntry: Record<Spell>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,10 +31,10 @@ export const addSpell =
|
||||
const wiki_spells = getWikiSpells (state)
|
||||
const mhero = getCurrentHeroPresent (state)
|
||||
|
||||
const mwiki_spell = lookup (id) (wiki_spells)
|
||||
const maybeStaticSpell = lookup (id) (wiki_spells)
|
||||
|
||||
if (isJust (mwiki_spell)) {
|
||||
const wiki_entry = fromJust (mwiki_spell)
|
||||
if (isJust (maybeStaticSpell)) {
|
||||
const staticSpell = fromJust (maybeStaticSpell)
|
||||
|
||||
const missingAPForInc =
|
||||
pipe_ (
|
||||
@@ -43,7 +42,7 @@ export const addSpell =
|
||||
bindF (hero => getAvailableAPMap (HeroModel.A.id (hero)) (state, { hero })),
|
||||
join,
|
||||
bindF (getMissingAP (getIsInCharacterCreation (state))
|
||||
(pipe_ (wiki_entry, Spell.A.ic, icFromJs, getAPForActivatation)))
|
||||
(pipe_ (staticSpell, Spell.A.ic, getAPForActivatation)))
|
||||
)
|
||||
|
||||
if (isNothing (missingAPForInc)) {
|
||||
@@ -51,7 +50,7 @@ export const addSpell =
|
||||
type: ActionTypes.ACTIVATE_SPELL,
|
||||
payload: {
|
||||
id,
|
||||
wikiEntry: wiki_entry,
|
||||
staticEntry: staticSpell,
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -65,7 +64,7 @@ export interface ActivateCantripAction {
|
||||
type: ActionTypes.ACTIVATE_CANTRIP
|
||||
payload: {
|
||||
id: string
|
||||
wikiEntry: Record<Cantrip>
|
||||
staticEntry: Record<Cantrip>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +92,7 @@ export const addCantrip =
|
||||
type: ActionTypes.ACTIVATE_CANTRIP,
|
||||
payload: {
|
||||
id,
|
||||
wikiEntry: fromJust (mwiki_cantrip),
|
||||
staticEntry: fromJust (mwiki_cantrip),
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -107,7 +106,7 @@ export interface DeactivateSpellAction {
|
||||
type: ActionTypes.DEACTIVATE_SPELL
|
||||
payload: {
|
||||
id: string
|
||||
wikiEntry: Record<Spell>
|
||||
staticEntry: Record<Spell>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,7 +125,7 @@ export const removeSpell =
|
||||
type: ActionTypes.DEACTIVATE_SPELL,
|
||||
payload: {
|
||||
id,
|
||||
wikiEntry: wiki_entry,
|
||||
staticEntry: wiki_entry,
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -136,7 +135,7 @@ export interface DeactivateCantripAction {
|
||||
type: ActionTypes.DEACTIVATE_CANTRIP
|
||||
payload: {
|
||||
id: string
|
||||
wikiEntry: Record<Cantrip>
|
||||
staticEntry: Record<Cantrip>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,7 +154,7 @@ export const removeCantrip =
|
||||
type: ActionTypes.DEACTIVATE_CANTRIP,
|
||||
payload: {
|
||||
id,
|
||||
wikiEntry: wiki_entry,
|
||||
staticEntry: wiki_entry,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -126,3 +126,19 @@ export interface CloseEditPetAvatarAction {
|
||||
export const closeEditPetAvatar = (): CloseEditPetAvatarAction => ({
|
||||
type: ActionTypes.CLOSE_EDIT_PET_AVATAR,
|
||||
})
|
||||
|
||||
export interface OpenAddRemoveMoneyAction {
|
||||
type: ActionTypes.OPEN_ADD_REMOVE_MONEY
|
||||
}
|
||||
|
||||
export const openAddRemoveMoney = (): OpenAddRemoveMoneyAction => ({
|
||||
type: ActionTypes.OPEN_ADD_REMOVE_MONEY,
|
||||
})
|
||||
|
||||
export interface CloseAddRemoveMoneyAction {
|
||||
type: ActionTypes.CLOSE_ADD_REMOVE_MONEY
|
||||
}
|
||||
|
||||
export const closeAddRemoveMoney = (): CloseAddRemoveMoneyAction => ({
|
||||
type: ActionTypes.CLOSE_ADD_REMOVE_MONEY,
|
||||
})
|
||||
|
||||
@@ -24,7 +24,7 @@ export const setUpdateDownloadProgress =
|
||||
})
|
||||
|
||||
enum UpdateAvailableResponse {
|
||||
UpdateAndRestart, Cancel
|
||||
UpdateAndRestart, Cancel
|
||||
}
|
||||
|
||||
export const updateAvailable =
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
/* eslint-disable @typescript-eslint/no-redeclare */
|
||||
|
||||
export const SET_LOCALE = "SET_LOCALE"
|
||||
export type SET_LOCALE = "SET_LOCALE"
|
||||
|
||||
export const SET_FALLBACK_LOCALE = "SET_FALLBACK_LOCALE"
|
||||
export type SET_FALLBACK_LOCALE = "SET_FALLBACK_LOCALE"
|
||||
|
||||
export const RECEIVE_DATA_TABLES = "RECEIVE_DATA_TABLES"
|
||||
export type RECEIVE_DATA_TABLES = "RECEIVE_DATA_TABLES"
|
||||
|
||||
@@ -167,6 +172,10 @@ export const OPEN_EDIT_PET_AVATAR = "OPEN_EDIT_PET_AVATAR"
|
||||
export type OPEN_EDIT_PET_AVATAR = "OPEN_EDIT_PET_AVATAR"
|
||||
export const CLOSE_EDIT_PET_AVATAR = "CLOSE_EDIT_PET_AVATAR"
|
||||
export type CLOSE_EDIT_PET_AVATAR = "CLOSE_EDIT_PET_AVATAR"
|
||||
export const OPEN_ADD_REMOVE_MONEY = "OPEN_ADD_REMOVE_MONEY"
|
||||
export type OPEN_ADD_REMOVE_MONEY = "OPEN_ADD_REMOVE_MONEY"
|
||||
export const CLOSE_ADD_REMOVE_MONEY = "CLOSE_ADD_REMOVE_MONEY"
|
||||
export type CLOSE_ADD_REMOVE_MONEY = "CLOSE_ADD_REMOVE_MONEY"
|
||||
|
||||
export const SET_HIGHER_PARADE_VALUES = "SET_HIGHER_PARADE_VALUES"
|
||||
export type SET_HIGHER_PARADE_VALUES = "SET_HIGHER_PARADE_VALUES"
|
||||
@@ -312,6 +321,9 @@ export type SET_DISADV_TIER = "SET_DISADV_TIER"
|
||||
export const SWITCH_DISADV_RATING_VISIBILITY = "SWITCH_DISADV_RATING_VISIBILITY"
|
||||
export type SWITCH_DISADV_RATING_VISIBILITY = "SWITCH_DISADV_RATING_VISIBILITY"
|
||||
|
||||
export const SET_CUSTOM_RULE = "SET_CUSTOM_RULE"
|
||||
export type SET_CUSTOM_RULE = "SET_CUSTOM_RULE"
|
||||
|
||||
export const ADD_TALENT_POINT = "ADD_TALENT_POINT"
|
||||
export type ADD_TALENT_POINT = "ADD_TALENT_POINT"
|
||||
export const REMOVE_TALENT_POINT = "REMOVE_TALENT_POINT"
|
||||
@@ -383,8 +395,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"
|
||||
@@ -395,6 +405,8 @@ export const SET_HELLERS = "SET_HELLERS"
|
||||
export type SET_HELLERS = "SET_HELLERS"
|
||||
export const SET_KREUTZERS = "SET_KREUTZERS"
|
||||
export type SET_KREUTZERS = "SET_KREUTZERS"
|
||||
export const SET_MONEY = "SET_MONEY"
|
||||
export type SET_MONEY = "SET_MONEY"
|
||||
|
||||
export const SET_ITEM_NAME = "SET_ITEM_NAME"
|
||||
export type SET_ITEM_NAME = "SET_ITEM_NAME"
|
||||
@@ -603,6 +615,15 @@ export type SET_PET_NOTES = "SET_PET_NOTES"
|
||||
export const SWITCH_SHEET_ATTR_VALUE_VISIBILITY = "SWITCH_SHEET_ATTR_VALUE_VISIBILITY"
|
||||
export type SWITCH_SHEET_ATTR_VALUE_VISIBILITY = "SWITCH_SHEET_ATTR_VALUE_VISIBILITY"
|
||||
|
||||
export const SWITCH_SHEET_USE_PARCHMENT = "SWITCH_SHEET_USE_PARCHMENT"
|
||||
export type SWITCH_SHEET_USE_PARCHMENT = "SWITCH_SHEET_USE_PARCHMENT"
|
||||
|
||||
export const SWITCH_SHEET_SHOW_RULES = "SWITCH_SHEET_SHOW_RULES"
|
||||
export type SWITCH_SHEET_SHOW_RULES = "SWITCH_SHEET_SHOW_RULES"
|
||||
|
||||
export const SET_SHEET_ZOOM_FACTOR = "SET_SHEET_ZOOM_FACTOR"
|
||||
export type SET_SHEET_ZOOM_FACTOR = "SET_SHEET_ZOOM_FACTOR"
|
||||
|
||||
export const SWITCH_ENABLE_ACTIVE_ITEM_HINTS = "SWITCH_ENABLE_ACTIVE_ITEM_HINTS"
|
||||
export type SWITCH_ENABLE_ACTIVE_ITEM_HINTS = "SWITCH_ENABLE_ACTIVE_ITEM_HINTS"
|
||||
export const SET_THEME = "SET_THEME"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user