Compare commits

...
290 Commits
Author SHA1 Message Date
Melina Preuß da6c2657e1 list changes 2023-06-06 22:16:12 +02:00
Lukas Obermann eb6a6f1950 refactor: migrate List component 2023-06-06 12:57:34 +02:00
Lukas Obermann 553324bc1c feat: increase root font size 2023-06-05 22:38:51 +02:00
Lukas Obermann 982827a00f refactor: rename preloadApi to ExternalAPI in renderer contexts 2023-06-05 22:25:57 +02:00
Lukas Obermann 0c0ceeb0fa refactor: scrolling page frame 2023-06-05 22:19:04 +02:00
Lukas Obermann 24d5352f04 refactor: restructure src folder to easily differenciate between processes 2023-06-05 18:13:48 +02:00
Lukas Obermann 5b9df3748b refactor!: migrate basic navigation bar 2023-06-03 22:30:19 +02:00
Lukas Obermann 5c4d058e72 refactor!: adjust titlebar for macos 2023-06-03 13:15:50 +02:00
Lukas Obermann 39486a3f29 test: switch from jest to native node test runner 2023-06-03 12:04:35 +02:00
Lukas Obermann a09a321a7a ci: use node version 20 2023-06-03 11:43:41 +02:00
Lukas Obermann dca99eae08 build(deps): remove unnecessary packages 2023-06-03 11:39:53 +02:00
Lukas Obermann fbc753b467 build(deps): prune typings where its associated packages are not included anymore 2023-06-03 11:29:07 +02:00
Lukas Obermann e86b2559d6 build(deps): remove explicit listing of packages included with @reduxjs/toolkit 2023-06-03 10:10:44 +02:00
Lukas Obermann a83b1bd9bd build(deps): remove packages conflicting with recent versions of react and redux 2023-06-03 10:09:26 +02:00
Lukas Obermann 6decdd580a build(deps): remove insecure @electron/remote package 2023-06-03 10:08:21 +02:00
Lukas Obermann 41f32f8af9 refactor: move base styles and styles for all migrated components 2023-06-03 00:15:06 +02:00
Lukas Obermann 0620d76d8d build(webpack): use webpack for bundling scss files 2023-06-03 00:09:58 +02:00
Lukas Obermann dd8a91d0f8 refactor!: adjust title bar to plain js and register window events via preload script 2023-06-02 23:59:52 +02:00
Lukas Obermann 977841899f refactor!: adjust root view to plain js 2023-06-02 23:57:47 +02:00
Lukas Obermann 81aee53e4f refactor!: put initial database into redux store 2023-06-02 23:36:22 +02:00
Lukas Obermann 992f026662 refactor!: upgrade react and redux root 2023-06-02 23:26:22 +02:00
Lukas Obermann 44d4c83030 build(ts): ignore old files 2023-06-01 10:30:11 +02:00
Lukas Obermann a88dfc4c37 build(deps): upgrade redux packages 2023-06-01 10:22:38 +02:00
Lukas Obermann 40733ed679 refactor: move assets into src folder 2023-05-31 14:45:03 +02:00
Lukas Obermann e2ca8d5df3 feat!: adjust root processes to recent security and parallelization recommendations
This commit contains multiple changes at once.
- It migrates everything to new APIs.
- It uses a separate window for interacting with updates.
- It uses preload scripts for IPC.
- It integrates the database via a separate utility process.
2023-05-31 14:44:39 +02:00
Lukas Obermann 20536d4f69 build(gen): migrate config schema building to generator 2023-05-31 14:40:22 +02:00
Lukas Obermann 0cad4919a9 build(ts): upgrade typescript config 2023-05-31 14:38:52 +02:00
Lukas Obermann f85f52a7e5 build(webpack): upgrade webpack config 2023-05-31 14:38:39 +02:00
Lukas Obermann 24933a677d build(deps): upgrade core packages 2023-05-31 14:38:01 +02:00
Lukas Obermann fcc96c0460 style(config): adjust some uncommon eslint configurations 2023-05-31 14:37:40 +02:00
Lukas Obermann a4f55d9455 build(git): ignore mac meta files and new .webpack output folder 2023-05-31 14:37:10 +02:00
Lukas Obermann f7fdc3a8a0 refactor: remove outdated reasonml bridging helpers 2023-05-31 14:35:28 +02:00
Lukas Obermann aa639a0139 build(git): change database module path 2023-05-31 14:35:15 +02:00
Lukas Obermann bc80b0479a docs: add easier option to receive the database for contribution purposes 2023-01-24 18:52:20 +01:00
cziermannandChristian Ziermann fdd391b849 docs: correct build command for ts
Refs: #1592
Co-authored-by: Christian Ziermann <christian.ziermann@contabo.de>
2023-01-07 13:09:25 +01:00
Lukas Obermann 057edce846 build(release): 1.5.2-alpha.4 2022-07-22 23:31:27 +02:00
Lukas Obermann c52fc26a1b fix: improvement cost handling for some traditions
The refactoring resulted in no spells being available to intuitive mages.

In general, comparing improvement costs directly did not work.
2022-07-22 23:30:16 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> d28667a935 build(deps): bump terser from 5.10.0 to 5.14.2
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Refs: #1382

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-22 21:03:23 +02:00
Lukas Obermann b92e47cd13 ci: update and streamline test workflow 2022-07-14 13:17:09 +02:00
Lukas Obermann 87a21b6fc4 style(ci): indent lists by two spaces 2022-07-14 13:07:31 +02:00
Lukas Obermann ccd0898f4e ci: provide apple csc env variables to macOS build only 2022-07-14 13:06:40 +02:00
Lukas Obermann c162931e74 fix: show improvement cost in tabular list 2022-07-12 22:16:27 +02:00
Lukas Obermann b578254d75 refactor: remove inconsistent and wrong usage of prefix functions 2022-07-12 10:23:26 +02:00
Lukas Obermann 7b57aca991 build(release): 1.5.2-alpha.3 2022-07-12 10:05:12 +02:00
Lukas Obermann 282467e4af refactor: disallow use of improvement cost as simple number 2022-07-12 10:04:54 +02:00
Lukas Obermann e6d1b8d3fd build(release): 1.5.2-alpha.2 2022-07-11 15:45:53 +02:00
Lukas Obermann f09be7d54b ci: fix package named import 2022-07-11 15:45:39 +02:00
Lukas Obermann 3397ed8cee ci: forward code signing certificates for macos 2022-07-11 15:37:48 +02:00
Lukas Obermann 7b6a0980b9 ci: fix package import 2022-07-11 15:24:55 +02:00
Lukas Obermann 7b245b989b ci: remove reasonml build from test 2022-07-11 15:23:04 +02:00
Lukas Obermann 32058f76c2 build(notarization): adjust plist for notarization 2022-07-11 15:14:23 +02:00
Lukas Obermann a6576bb8ab refactor: remove reasonml from project 2022-07-11 12:12:19 +02:00
Lukas Obermann 7c6e377692 feat: enable auto-update for macOS 2022-07-11 10:00:09 +02:00
Lukas Obermann fe7c5e68ed build: integrate notarization 2022-07-10 23:17:46 +02:00
Lukas Obermann 531530e763 build(deps): upgrade electron to 19.0.4 2022-06-19 12:37:51 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e1befd1383 build(deps): bump semver-regex from 3.1.3 to 3.1.4 (#1375)
Bumps [semver-regex](https://github.com/sindresorhus/semver-regex) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/sindresorhus/semver-regex/releases)
- [Commits](https://github.com/sindresorhus/semver-regex/commits/v3.1.4)

---
updated-dependencies:
- dependency-name: semver-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-08 09:40:18 +02:00
Lukas Obermann 2eb87c8f4c build(deps): bump packages with vulnerabilities
- bump ejs from 3.1.6 to 3.1.7
- bump async from 0.9.2 to 3.2.3
- bump filelist from 1.0.2 to 1.0.3
- bump jake from 10.8.2 to 10.8.5
2022-04-29 11:17:10 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Lukas Obermann
531715f171 build(deps): bump plist from 3.0.4 to 3.0.5
Refs: #1371
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lukas Obermann <lukas.obermann@icloud.com>
2022-04-29 11:11:33 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4c9096b3d5 build(deps): bump minimist from 1.2.5 to 1.2.6
Refs: #1365
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-29 11:10:27 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7c3d722d7e build(deps): bump moment from 2.25.3 to 2.29.2
Refs: #1364
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-29 11:09:26 +02:00
Lukas Obermann c4b995e046 build(release): 1.5.2-alpha.1 2022-04-29 11:01:20 +02:00
Lukas Obermann c987847c9b feat: add krallenkettenzauber as placeholder 2022-04-29 10:54:57 +02:00
Lukas Obermann e99828f1cc docs(changelog): add general changelog for 1.5.1 2022-03-21 11:33:42 +01:00
Lukas Obermann 246b3d5c1d build(release): 1.5.1
Refs: #1361
2022-03-20 15:26:41 +01:00
Lukas Obermann 8d54177cac Merge branch 'master' into release/1.5.1 2022-03-20 15:21:54 +01:00
Lukas Obermann 96c7b54fce docs(changelog): add Dutch changelogs für 1.5.1 2022-03-20 15:18:38 +01:00
Lukas Obermann 5c7ffd0660 docs(changelog): add initial 1.5.1 changelogs 2022-02-25 08:29:51 +01:00
Lukas Obermann d24fae03b7 build(release): 1.5.1-alpha.2 2022-02-22 11:16:20 +01:00
Lukas Obermann 8102bb1a9a fix: advantage Inspire Confidence could be bought with social Incompetence
Fixes #1351
2022-02-22 11:14:09 +01:00
Lukas Obermann 07d336dbb3 feat(maptool): add project links 2022-02-22 10:51:37 +01:00
Lukas Obermann d40bdac744 refactor(maptool): resolve most TODOs 2022-02-21 15:20:30 +01:00
Lukas Obermann d3926aff86 build(release): 1.5.1-alpha.1 2022-02-21 09:36:44 +01:00
Lukas Obermann 80fdffb373 fix(maptool): no export possible without an avatar
Fixes #1348
2022-02-21 09:36:25 +01:00
Lukas Obermann 92bfcb96b0 build(ide): disable output scanning for release tasks 2022-02-18 11:50:28 +01:00
Lukas Obermann afd32c9827 build(release): 1.5.1-alpha.0 2022-02-18 11:48:57 +01:00
Lukas Obermann 3f87dca910 fix: add missing Italian translations for MapTool export
Fixes #1350
2022-02-18 11:16:14 +01:00
Lukas Obermann 2c9332c37f fix: markdown parser ignores strikethrough
The GFM plugin was missing.

Fixes #1349
2022-02-18 11:06:44 +01:00
Lukas ObermannandLector 9e9a1139d3 fix(maptool): format change for 1.11.4
Since MapTool v1.11.14 a sizeMap needs to be included, otherwise the import does
not work. Maybe the format changed happend earlier.

Co-authored-by: Lector <dragonsfire@gmx.de>
2022-02-10 18:47:31 +01:00
Lukas Obermann c5d2b0a7a4 docs(changelog): add French changelog for 1.5.0 2022-02-09 12:51:33 +01:00
Lukas Obermann f1e16d5c39 docs(changelog): remove unreleased feature
(cherry picked from commit 449f8c7bb2)
2022-02-09 12:10:05 +01:00
Lukas Obermann 449f8c7bb2 docs(changelog): remove unreleased feature 2022-02-09 11:51:59 +01:00
Lukas Obermann 53ab0e704e build(release): merge 1.5.0 2022-02-09 11:41:31 +01:00
Lukas Obermann 5b7f223211 build(release): 1.5.0 2022-02-09 11:33:17 +01:00
Lukas Obermann 5bb9c8ca7b docs(changelog): add Italian changelog translation for 1.5.0 2022-02-07 22:42:36 +01:00
Lukas Obermann ef84a38cf6 docs(changelog): add French, Italian and Dutch changelogs for 1.5.0 in English 2022-02-07 10:36:48 +01:00
Lukas Obermann d2eca82ea5 fix: add more action types that should be ignored for undo history 2022-02-06 22:31:13 +01:00
Lukas Obermann 854995cb3b docs(changelog): add German changelog for 1.5.0 2022-02-06 20:18:46 +01:00
Lukas Obermann 659ab5f8db docs(changelog): remove unnecessary issue prefixes 2022-02-06 18:39:37 +01:00
Lukas Obermann 8777b9a0cd docs(changelog): add Portuguese changelog for initial release 2022-02-06 18:39:14 +01:00
Lukas Obermann 27cbd7abd7 docs(changelog): add English changelog for 1.5.0 2022-02-06 18:38:50 +01:00
Lukas Obermann e4672041db docs(issues): fix more bug report issue form ids 2022-02-06 16:18:02 +01:00
Lukas Obermann fc8c837008 docs(issues): fix bug report issue form ids 2022-02-06 16:17:14 +01:00
Lukas Obermann a3c269dd35 docs(issues): use issue form for bug reports 2022-02-06 16:15:35 +01:00
Lukas Obermann 8753a4656e build(release): 1.5.0-alpha.9 2022-02-06 12:51:39 +01:00
Lukas Obermann bdb3eb7804 fix: typo in German name of Tradition (Illusionist)
Fixes #1239
2022-02-05 23:55:44 +01:00
Lukas Obermann c0dbb3fbcb refactor: use native array in inactive spells list 2022-02-05 17:01:31 +01:00
Lukas Obermann 06eac93221 fix: active animist powers occurred multiple times in addition list
The issue apparently only applied to animist powers, no other spellworks.

Fixes #794
2022-02-05 16:52:02 +01:00
Lukas Obermann d2d3445928 docs(changelog): add explicit MapTool export notice 2022-02-04 23:46:58 +01:00
Lukas Obermann c0d799c057 ci: hide upload progress logging for deployment 2022-02-04 20:35:02 +01:00
Lukas Obermann b1942216e5 build(release): 1.5.0-alpha.8 2022-02-04 20:17:20 +01:00
Lukas Obermann 1e21b6bcd4 refactor: remove unused action type 2022-02-04 17:51:28 +01:00
Lukas Obermann 8b18b26361 feat(logs): add small logging utility function 2022-02-04 17:35:09 +01:00
Lukas Obermann 923b7605fe fix: saving a hero clears the undo history of multiple characters
The current hero identifier was not cleared if leaving a hero view, which lead
to the action clearing the history of both the hero that actually should be
saved as well as the most recently opened character in this session.

Fixes #811
2022-02-04 17:34:14 +01:00
Lukas Obermann 589338fe74 refactor(datatypes): move predicate properties to prototype
This prevents them from showing up in console logs, which makes them less
cluttered.
2022-02-04 17:28:22 +01:00
Lukas Obermann 5f1e1f8148 style: disable redeclaration ESLint rule for the entire file 2022-02-04 17:10:06 +01:00
Lukas Obermann 1f090605a4 fix(prerelease): cult of Levtan not registered as blessed tradition 2022-02-04 16:21:28 +01:00
Lukas Obermann e558c1d80d fix: spells converted by Imitationszauberei cannot use spell enhancements
Fixes #828
2022-02-04 15:37:09 +01:00
Lukas Obermann 232795d129 fix(datatypes): find might return an existing value that is undefined 2022-02-04 13:49:52 +01:00
Lukas Obermann a49048d468 build(ide): use node debugger preview in VSCode 2022-02-04 13:25:46 +01:00
Lukas Obermann 1ce2db9cfb fix: attribute minimum must include combat techniques
The allowed maximum of combat techniques depends on the value of its highest
primary attribute. The reverse dependency - the then-required minimum - was not
applied.

Fixes #836
2022-02-04 00:03:14 +01:00
Lukas Obermann 7e31136083 fix: wrong combat type of special ability Blattschuss
Fixes #1331
2022-02-03 21:09:26 +01:00
Lukas Obermann 4c9a1f9bc5 build(ide): add css build task 2022-02-03 18:05:10 +01:00
Lukas Obermann 2a62e4231d ci: switch to ssh2-sftp-client for deployment
This fixes the unfixed vulnerability in qusly-core.
2022-02-03 15:39:50 +01:00
Lukas Obermann 41ee35ba76 fix: widened rows in seconds column of skills table on character sheet
Fixes #1342
2022-02-03 14:42:36 +01:00
Lukas Obermann cad0f26042 build(deps): upgrade electron to 17 2022-02-03 13:46:55 +01:00
Lukas Obermann 7a9da8f65e docs(changelog): remove unnecessary issue prefix 2022-02-03 13:33:18 +01:00
Lukas Obermann e36099d812 build(ide): add git push --follow-tags for use after release creation 2022-02-03 13:26:56 +01:00
Lukas Obermann 8e66f9b83a build(release): 1.5.0-alpha.7 2022-02-03 13:18:35 +01:00
Lukas Obermann f1024868ff build(ide): add tasks for creating release commits 2022-02-03 13:18:16 +01:00
Lukas Obermann a24ff8082a fix: auto-updater not working in AppImage
Fixes #753
2022-02-03 13:15:04 +01:00
Lukas Obermann 1ed0c64b0d fix: scripts do not require an active matching language
Fixes #1344
2022-02-03 12:02:41 +01:00
Lukas Obermann 83b534d3f9 fix: cannot activate special ability Weg der Schreiberin
Fixes #1233
2022-02-03 11:41:06 +01:00
Lukas Obermann 4dabbdbcd2 fix: requiring one matching languages and script requires all of them
Fixes #1343
2022-02-03 11:40:07 +01:00
Lukas Obermann 0ab65e869c fix: range brackets input influences other bracket fields
Fixes #1251
2022-02-02 13:22:55 +01:00
Lukas Obermann f2e61386ab fix: some item properties were not saved
Fixes #1252
2022-02-02 12:25:14 +01:00
Lukas Obermann e70a8b9d34 build(ide): create useful VSCode tasks 2022-02-02 12:19:47 +01:00
Lukas Obermann c3985275bb refactor: rename misleading variable 2022-02-02 12:18:05 +01:00
Lukas Obermann 8b060b6002 refactor(datatypes): add immutable methods to arrays 2022-02-02 01:38:40 +01:00
Lukas Obermann ac0cdc3778 fix: primary attribute prerequisites may not have been added as dependencies
The previous implementation relied on the tradition being added to the hero
object before the entry having the prerequisite was added, since the dependency
has been added statically, depending on the then-known traditions. But there are
situations where this is not the case, resulting in no prerequisite being added.
The new implementation does not bind the dependencies to a specific attribute,
but instead dynamically infers which is the primary attribute to then apply the
registered primary dependencies. This makes the dependencies independent of
the presence of tradition entries in the initialization phase.

Fixes #1260
2022-02-01 23:55:42 +01:00
Lukas Obermann 8b5eedeb37 fix: typo in German name of Tarnele
Fixes #1330
2022-02-01 22:05:14 +01:00
Lukas Obermann 06b57c9d15 fix: use Brawling Points in special ability Knuckle Storm description
Fixes #1340
2022-02-01 22:02:54 +01:00
Lukas Obermann 03f26214ae docs: change Apple M1 support text 2022-02-01 21:59:08 +01:00
Lukas Obermann d66afba3c1 docs: add Apple M1 native support note 2022-02-01 18:00:47 +01:00
Lukas Obermann 3574d1ba46 fix: unfamiliar spell selection in profession was optional
The selection of an unfamiliar spell for Tradition (Guild Mage), which is
included in a profession package, was not required to apply race, culture and
profession.

Fixes #1315
2022-02-01 17:51:02 +01:00
Lukas Obermann dcfba14df7 build(release): 1.5.0-alpha.6 2022-02-01 17:22:50 +01:00
Lukas Obermann 6669352d06 fix: special ability Tradition (Tsatuara-Anhängerinnen) is in wrong group
Fixes #1137
2022-02-01 17:16:09 +01:00
Lukas Obermann 9cb26586f3 fix: too large PDF output when using a sheet background
Fixes #1094
2022-02-01 17:08:30 +01:00
Lukas Obermann cd16e5314a fix: profession Sharisad gets Earthencraft bonus instead of Clothworking bonus
Fixes #1341
2022-02-01 16:53:49 +01:00
Lukas Obermann 6ba99f2f46 fix: weight column in inventory shows wrong weight in English
Fixes elyukai/optolith-client#1329
2022-02-01 16:33:52 +01:00
Lukas Obermann bd9fc1badc feat: add kilogram hint to English item dialog 2022-02-01 16:32:39 +01:00
Lukas Obermann 47e66d6546 fix: attributes on minimum value do not allow CtR over 6
Fixes elyukai/optolith-client#835
2022-02-01 16:10:31 +01:00
Lukas Obermann bba9b92e5d feat: add utilities for working with tagged unions 2022-02-01 16:02:12 +01:00
Lukas Obermann fb0a0bbbfb test: check TSDoc comments format with ESLint 2022-02-01 16:01:36 +01:00
Lukas Obermann 8bcae62f2f refactor: remove unused ESM preload module 2022-02-01 15:54:46 +01:00
Lukas Obermann 383a9c166c fix: show Hit Zone Armor tab for English Armory
Fixes elyukai/optolith-client#1328
2022-02-01 15:44:57 +01:00
Lukas Obermann 94e751fda1 build: add macOS builds for M1 2022-01-31 18:55:32 +01:00
Lukas Obermann 36c643f04a build(release): 1.5.0-alpha.5 2022-01-27 21:28:57 +01:00
Lukas Obermann 0143c28b0c ci: upgrade all workflows to Node 16 2022-01-27 21:19:54 +01:00
Lukas Obermann 793ad447b4 build(release): 1.5.0-alpha.8 2022-01-27 21:10:16 +01:00
Lukas Obermann 9f3e52b5da ci: update release workflow to use Node 14 2022-01-27 21:08:59 +01:00
Lukas Obermann a7ff9fc901 ci: update prerelease workflow to use Node 14 2022-01-27 21:08:30 +01:00
Lukas Obermann 3ea0d6ee10 build(release): 1.5.0-alpha.7 2022-01-27 21:03:58 +01:00
Lukas Obermann 83d9bd40dd build: upgrade to Electron 16 2022-01-27 21:02:50 +01:00
Lukas Obermann 8fb5f28dd0 build(release): 1.5.0-alpha.6 2022-01-27 20:26:01 +01:00
Lukas Obermann 85eba763ac test: revert to Jest 26 2022-01-27 20:21:48 +01:00
Lukas Obermann a6417ff1de test: use ts-jest preset in Jest config 2022-01-27 19:32:06 +01:00
Lukas Obermann fe85d2d79a ci: upgrade linting to Node 14 2022-01-27 19:22:43 +01:00
Lukas Obermann 4850363119 build: optimize Webpack RAM usage and build times 2022-01-27 19:12:23 +01:00
Lukas Obermann e0f3d5b1a3 style: fix all ESLint errors 2022-01-27 12:09:12 +01:00
Lukas Obermann a26b4094c2 build(release): 1.5.0-alpha.5 2022-01-27 11:23:28 +01:00
Lukas Obermann 47028ab470 Merge branch 'develop' of github.com:elyukai/optolith-client into develop 2022-01-27 11:22:00 +01:00
Lukas Obermann d8c9f52542 feat: portuguese translations 2022-01-27 11:21:49 +01:00
Lukas Obermann 29c7b4bc39 fix: missing import 2022-01-27 11:21:01 +01:00
Lukas Obermann 6b93c15aa0 fix: latest TypeScript compilation errors 2022-01-27 11:07:57 +01:00
Lukas Obermann 0620ff2ab8 Create FUNDING.yml 2022-01-23 21:36:10 +01:00
Lukas Obermann 10582541e0 build(deps): fix vulnerabilities 2021-12-13 00:11:16 +01:00
Lukas Obermann c13b557dd7 ci: linter requires database submodule
Revert: bf9d29a6dc
2021-08-03 13:37:09 +02:00
Lukas Obermann bf9d29a6dc ci: linter does not require database submodule 2021-08-03 13:31:59 +02:00
Lukas Obermann 4699d38a1a build(release): 1.5.0-alpha.4 2021-08-03 13:00:45 +02:00
Lukas Obermann b2fb0353a9 fix: maptools should provide user interface strings 2021-08-03 13:00:33 +02:00
Lukas Obermann 66077430d8 build(release): 1.5.0-alpha.3 2021-08-03 12:46:55 +02:00
Lukas Obermann 08e7817597 build(deps): fix security vulnerabilities 2021-08-03 12:46:08 +02:00
Lukas Obermann 87cec15ba9 Merge pull request #815 from elyukai/maptools_export
Maptools export
2021-08-03 12:42:56 +02:00
Lukas Obermann 63ac0abbe3 Merge branch 'develop' into maptools_export 2021-08-03 12:41:28 +02:00
Lukas Obermann 41278f8316 docs: fix changelog 2021-05-28 16:24:10 +02:00
Lukas Obermann 5d45a6084e build(release): 1.5.0-alpha.2 2021-05-28 16:23:01 +02:00
Lukas Obermann f8114c2f43 fix: "Tradition (Druid)" has invalid prerequisite in data
Fixes #1237
2021-05-28 14:57:47 +02:00
Lukas Obermann e40f995e34 fix: "Physiostabilis" name typo
Fixes #1234
2021-05-28 14:53:41 +02:00
Lukas Obermann ed74170865 fix: hook dagger is not marked as a parrying weapon
Fixes #1232
2021-05-28 14:42:15 +02:00
Lukas Obermann 8297455ddb fix: weapon advantage of Kriegsbogen has wrong DP bonus
Fixes #1074
2021-05-28 14:23:56 +02:00
Lukas Obermann 42891f070c fix: "Gaze into the Essence" spell is misspelled as "Gase into the Essence"
Fixes #1180
2021-05-28 14:19:54 +02:00
Lukas Obermann a5df7c863c fix: wrong English names for spell enhancements of Heptagramma
Fixes #848
2021-05-28 14:18:35 +02:00
Lukas Obermann ec9bd71e10 fix: special ability Deadly Thrust has SA Crossblock's rules text
Fixes #841
2021-05-28 14:16:57 +02:00
Lukas Obermann 21146eb2ab fix: wrong negative prerequisite for Aspect Knowledge entry
Fixes #1243
2021-05-28 14:12:46 +02:00
Lukas Obermann 16bd668313 fix: multiple database fixes
Fixes #854
Fixes #855
Fixes #1136
Fixes #1213
Fixes #1236
Fixes #1242
2021-05-28 14:06:52 +02:00
Lukas Obermann 6eeb430e83 build(release): 1.5.0-alpha.1 2021-05-27 22:23:05 +02:00
Lukas Obermann ae2fbad1c7 fix: equipment info crash 2021-05-27 17:49:34 +02:00
Lukas Obermann d647cf5f4e refactor: tried to reduce character sheet file size but did not work
See #1094
2021-05-26 23:11:15 +02:00
Lector e334e51685 Bugfix in MapToolExporter.ts: MD5 Hashes of the avatar is now based on the image.
Heros without Image are now exported with a stick-figure
2021-05-26 22:53:18 +02:00
Lukas Obermann 092343f45d fix: cannot remove dependent entry with multiple activations
Fixes #1097
2021-05-26 22:25:38 +02:00
Lukas Obermann 7ac4773b05 build(deps): upgrade to electron 13 and fix react-markdown integration 2021-05-26 22:24:27 +02:00
Lector 0b5713d6fd Removed Aspects. This feature is cancelled.
Finished all the rest. I think this version can be merged into the main-branch.
2021-05-26 05:09:12 +02:00
Lukas Obermann 6357b2c4b4 docs: port refactored issue templates from master branch 2021-05-24 12:20:15 +02:00
Lukas Obermann ea86624560 build(deps): fix vulnerabilities 2021-05-22 16:07:59 +02:00
Lector fe34bedc54 Added Spell-Property and Avatar-Export 2021-05-21 23:10:17 +02:00
Lukas Obermann c8094f5ef1 fix: filter professions with CTs higher than EL allows
Closes #1244
2021-05-11 11:06:54 +02:00
Lukas Obermann a02700eecc fix: brawling weapons have no parry on character sheet
Fixes #1229
2021-05-09 00:35:10 +02:00
Lukas Obermann fdde329de5 fix: profession with due to EL impossible attribute values can be selected
Fixes #1109
2021-05-09 00:26:38 +02:00
Lukas Obermann c1b2e267cb fix: spellworks from professions do not register dependencies
Fixes #1240
2021-05-08 23:19:24 +02:00
Lukas Obermann eb5a06884d fix: ini/mov modifiers on armor are handled as penalties
Fixes #1091
2021-05-08 22:06:34 +02:00
Lukas Obermann 0a59d9e5e5 fix: language specializations always cost 1 AP and are multi-buyable
Fixes #1082
2021-05-08 01:04:16 +02:00
Lukas Obermann 3ceeadbdf7 refactor: remove unnecessary logs 2021-05-07 23:46:08 +02:00
Lukas Obermann 28f260a2c4 fix: enhancements on transferred unfamiliar spells as dependency
Fixes #827
2021-05-07 23:42:49 +02:00
Lukas Obermann 5b6a4c8301 build(db): update database submodule 2021-05-06 20:22:43 +02:00
Lukas Obermann cc5ecd6f09 fix: portraits with transparency have black background
Fixes #800
2021-05-06 20:04:19 +02:00
Lukas Obermann 9179bb9ff6 perf: sort template list after filter 2021-05-06 15:34:18 +02:00
Lukas Obermann 6c63ab1b50 fix: primary attribute dropdown does not handle data correctly
Fixes #798
2021-05-06 15:00:26 +02:00
Lukas Obermann 3f9fae30a2 fix: 2H and i weapon settings missing on character sheet
Fixes #797
2021-05-06 14:42:32 +02:00
Lukas Obermann 2ad037ecbc fix: large spell selection and restrictions for Animists
Fixes #803
2021-05-06 12:38:57 +02:00
Lukas Obermann 3d755eb408 build(deps): upgrade to Electron 12 2021-05-06 12:17:30 +02:00
Lukas Obermann 2c6da7bd75 build: package-lock.json update 2021-05-06 01:29:24 +02:00
Lukas Obermann ccd7decc83 fix: include latest database changes 2021-05-06 01:28:26 +02:00
elyukai 397abe2b4a fix: previous database fixes
See #792, #824, #832, #850, #851, #1139, #1224
2021-05-05 23:06:54 +02:00
elyukai 3b05e69e27 fix: weight of Elves is not generated correctly
Fixes #813
2021-05-05 22:57:22 +02:00
elyukai 723e9106eb fix: patch security vulnerabilities 2021-05-05 22:55:57 +02:00
elyukai eef960f496 docs: add UI scaling hint for Linux 2021-05-04 11:03:19 +02:00
Lukas Obermann 6b706d3adb docs: improve sort order for ambiguity template 2021-03-24 15:05:03 +01:00
Lukas Obermann d3a6df526d docs: fix publication ambiguity name 2021-03-24 15:04:02 +01:00
Lukas Obermann a098a97509 docs: update question issue template
Update question issue template to be for questions to Ulisses only, since standard questions can be created as discussion instead.
2021-03-24 13:51:44 +01:00
Lukas Obermann 093a726cf2 Merge pull request #1125 from elyukai/Race-prerequisite-does-not-display-race-required-#1093
Race prerequisite does not display race required #1093
2021-03-24 12:15:34 +01:00
Pepelios 9d033d23df Update WikiActivatableInfo.tsx
remove prefixRace import as never used anymore
2021-03-24 09:02:25 +01:00
Lukas Obermann 912642a5ee Merge pull request #1135 from elyukai/issue-template/publication-bug-report
Update: issue template publication-bug-report.md
2021-03-23 21:56:29 +01:00
Lukas Obermann b92c19a3c8 Merge branch 'master' into issue-template/publication-bug-report 2021-03-23 21:52:45 +01:00
Lukas Obermann c2afd39946 Merge pull request #1134 from elyukai/issue-template/new-book-data
Update: issue template new-book-data.md
2021-03-23 21:45:17 +01:00
Lukas Obermann 444cb12892 Merge branch 'master' into issue-template/new-book-data 2021-03-23 21:42:51 +01:00
Lukas Obermann b1d7ad9ae1 Merge pull request #1133 from elyukai/issue-template/feature_request
Update: issue template feature_request.md
2021-03-23 21:42:35 +01:00
Lukas Obermann f16a8fe249 Merge branch 'master' into issue-template/feature_request 2021-03-23 21:35:02 +01:00
Käthe 764731d02f Implement Markdown Style Guidelines
... and small text changes
2021-03-23 21:34:15 +01:00
Lukas Obermann 02f24b24bc Merge pull request #1132 from elyukai/issue-template/bug-report
Update: issue template bug_report.md
2021-03-23 21:33:30 +01:00
Käthe ee30c4eaea Implement Markdown Style Guidelines 2021-03-23 21:29:49 +01:00
Käthe 8de7b51895 Shorten caption 2021-03-23 21:28:18 +01:00
Käthe 2c1cea9ef8 Implement Markdown Style Guidelines 2021-03-23 21:26:31 +01:00
Käthe f0e8ce17ab Implement Markdown Style Guide 2021-03-23 21:24:27 +01:00
Käthe b6112666b8 Update: issue template publication-bug-report.md
Better readability.
2021-03-23 21:00:50 +01:00
Käthe 99123d5ec0 Update: issue template new-book-data.md
Better readability.
2021-03-23 20:59:35 +01:00
Käthe 17424878e7 Update: issue template feature_request.md
For better readability after filling out the form.
2021-03-23 20:53:48 +01:00
Käthe e44e6f8832 Update: issue template bug_report.md
For better readability after filling out the form.
2021-03-23 20:51:44 +01:00
Pepelios c33e4f1821 Race prerequisite does not display race required #1093
removed "prefixRace" because it added an additional R_ to the lookup value for the races. e.g. value was R_4 (for dwarfs) but after the wrong additional prefixRace, the lookupvalue was R_R_4, which never could be found in any lookup table.
2021-03-22 18:15:54 +01:00
Lukas Obermann c1dab5b312 docs: add required software section 2021-03-19 21:15:24 +01:00
elyukai 31cf5d6c54 docs: add Philipp to imprint 2021-03-18 19:55:21 +01:00
elyukai 63243a2e9d docs: updated AUTHORS 2021-03-18 13:06:28 +01:00
Lukas Obermann 9017dff1fc Changes and prefilled spaces 2021-02-15 20:16:29 +01:00
Lukas Obermann 6a479949e7 docs: database rework issue template adjustments 2021-02-09 12:59:10 +01:00
Lector 228c401666 Money export now works. Tryed to fix attributes. 2021-02-08 12:25:03 +01:00
Lukas Obermann 052b5bbf2f Merge pull request #845 from elyukai/dependabot/npm_and_yarn/electron-10.2.0 2021-01-29 11:46:20 +01:00
dependabot[bot] f30efc84ce build(deps-dev): Bump electron from 10.1.3 to 10.2.0
Bumps [electron](https://github.com/electron/electron) from 10.1.3 to 10.2.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v10.1.3...v10.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-28 19:45:23 +00:00
Lector 9a2902c9e9 First semi-functioning Version of MapToolExporter.ts 2021-01-17 16:15:30 +01:00
Lector 9b44e29738 Continued work on MapToolExporter.ts 2021-01-12 22:05:55 +01:00
Lector 096af99794 Continued work on MapToolExporter.ts 2021-01-12 07:40:19 +01:00
Lector 073064c030 Continued work on MapToolExporter.ts
Added Strings for MapToolExporter.ts
2021-01-09 14:50:03 +01:00
LectorandLukas Obermann 1ff11d6e9a Update src/App/Utilities/MapToolExporter.ts
Co-authored-by: Lukas Obermann <lukas.obermann@icloud.com>
2021-01-03 21:45:56 +01:00
Lector fa1c527381 Merge branch 'develop' into maptools_export
# Conflicts:
#	app/Database

Added maptools-Export-Button to PDF-Export (not finished yet)
2021-01-03 11:53:51 +01:00
elyukai 272095d0b9 build(submodule): bug fixes, mainly for Dutch
See #805
See #814
2020-12-23 16:03:17 +01:00
Lector f416587e33 work on compilable version 2020-12-23 14:42:26 +01:00
Lector cb3a4a24f2 Bugfixes in MapToolExporter.ts 2020-12-21 16:16:04 +01:00
Lector 20a0c7a055 Merge branch 'develop' into maptools_export
# Conflicts:
#	app/Database
#	package-lock.json
#	src/App/Views/Profile/PersonalData.tsx

Also continued work on MapToolExporter.ts
2020-12-18 13:58:59 +01:00
Lector 2ec6fd0ab5 Small changes for bugfix 2020-12-17 12:55:05 +01:00
Lector bea154d6e6 Added Zip-Library.
Worked on MapToolExporter.ts
Changed UI of the Export-Button
2020-12-09 09:15:30 +01:00
Lector 728c7e15a8 Continued work on MapToolExporter.ts 2020-12-08 10:49:47 +01:00
LectorandLukas Obermann 182cb92a20 Update src/App/Utilities/MapToolExporter.ts
Co-authored-by: Lukas Obermann <lukas.obermann@icloud.com>
2020-12-07 20:03:49 +01:00
LectorandLukas Obermann 0531ffb657 Update src/App/Utilities/MapToolExporter.ts
Co-authored-by: Lukas Obermann <lukas.obermann@icloud.com>
2020-12-07 19:47:43 +01:00
Lukas Obermann f9b4ab6ce4 refactor: added properties to weapon models 2020-12-07 17:55:41 +01:00
Lector 20242a117d misc improvements.
still doesnt work and i need some more advice in MapToolExporter.ts
2020-12-07 17:00:46 +01:00
LectorandLukas Obermann 0cf4c70b5c Update src/App/Actions/HerolistActions.ts
Co-authored-by: Lukas Obermann <lukas.obermann@icloud.com>
2020-12-02 23:54:34 +01:00
Lector a577f6b783 Code-Style teilweise angepasst 2020-12-02 22:56:35 +01:00
Lector d445a3a378 First prototype of the MapToolExporter.ts. There is only the content-xml exported right now. A lot of values need to be determined correctly. Right now there are a lot of dummy-values to check the XML-Output. 2020-11-29 01:23:07 +01:00
Lukas Obermann c58279cc95 fix: typo in effect of Bliksemblind spell (Dutch)
See #805.
2020-11-24 15:28:31 +01:00
Lukas Obermann d63a494305 build: fixed last version in changelog 2020-11-13 17:44:35 +01:00
Lukas Obermann 1df5ac8fee build: added missing prerelease changelog 2020-11-13 17:43:04 +01:00
Lukas Obermann 3edf16d8be build(release): 1.4.3-alpha.1 2020-11-13 17:06:25 +01:00
Lukas Obermann e63713687e fix(sheets): removed margin of hit zone sheet
Closes #788.
2020-11-13 17:06:01 +01:00
Lukas Obermann a35611b4d9 docs(release): added missing old German changelogs 2020-11-13 13:48:47 +01:00
Lukas Obermann 390dcb616a fix: adding LE should affect CON
It affected the STR minimum instead of the CON minimum.

Closes #787.
2020-11-13 12:29:26 +01:00
Lukas Obermann 8055218c8f build(release): added previous changelogs 2020-11-13 00:42:06 +01:00
Lukas Obermann 2cb392e511 build: automate excluding unfinished content
Automate removing unfinished languages and books from stable releases.
2020-11-12 18:19:43 +01:00
Lukas Obermann 8392e368ff Merge pull request #786 from elyukai/feature/restrict-ci-runs
ci: restrict push/pull_request events
2020-11-12 17:02:29 +01:00
Lukas Obermann 692e4011b5 build: fixed release scripts
They used the  --dry-run flag before.
2020-11-12 17:01:57 +01:00
Lukas Obermann bcd3bd0a64 ci: restrict push/pull_request events
This way, push events should not be triggered if pull_requests are made
towards on of the main branches.
2020-11-12 16:58:21 +01:00
Lukas Obermann 93f95c76be Merge pull request #785 from elyukai/feature/automatic-versioning
build: automatic versioning
2020-11-12 16:55:24 +01:00
Lukas Obermann 1af9bf192f build: finished standard-version config 2020-11-12 16:50:30 +01:00
Lukas Obermann 53fbaad5c1 build: added standard-version scripts 2020-11-12 04:04:14 +01:00
Lukas Obermann 4c9caef67a build: added standard-version with basic config 2020-11-12 04:01:21 +01:00
Lukas Obermann ae652e2e60 Merge pull request #782 from elyukai/feature/semantic-commits
feat: semantic commits
2020-11-12 00:51:13 +01:00
Lukas Obermann f18a032ce6 build: fixed TS errors due to bucklescript upgrade 2020-11-12 00:45:15 +01:00
Lukas Obermann 09f98bc094 style: fixed import issues due to last style fixes 2020-11-12 00:24:16 +01:00
Lukas Obermann dd77fc95dd style: fixed dependency upgrade errors
The typescript-eslint upgrade caused errors. Because some types and
values need to be named the same, ignore comments were added to fix
those cases. Remaining style issues due to the upgrade were fixed.
2020-11-12 00:17:57 +01:00
Lukas Obermann f63ea3c2d9 docs: added conventional commits note 2020-11-10 14:29:33 +01:00
Lukas Obermann 32aa20a890 ci: added commitlint workflow 2020-11-10 13:44:08 +01:00
Lukas Obermann 4bbe18092c build: added commitlint 2020-11-10 13:11:30 +01:00
Lukas Obermann acc58c37b0 build: Updated version and database 2020-11-08 22:48:36 +01:00
840 changed files with 33328 additions and 69866 deletions
+3
View File
@@ -0,0 +1,3 @@
{
"extends": ["@commitlint/config-conventional"]
}
+2 -2
View File
@@ -1,3 +1,3 @@
src/App/Utilities/YAML/Schema/
*.cjs
*.js
*.gen.tsx
node_modules
+37 -26
View File
@@ -1,10 +1,12 @@
root: true
parser: "@typescript-eslint/parser"
plugins:
- "@typescript-eslint"
- eslint-plugin-react
- eslint-plugin-react-hooks
parser: "@typescript-eslint/parser"
- eslint-plugin-tsdoc
parserOptions:
ecmaVersion: 2020
ecmaVersion: latest
sourceType: module
project: ./tsconfig.json
ecmaFeatures:
@@ -68,7 +70,12 @@ rules:
no-empty-pattern: 2
no-eq-null: 2
no-eval: 2
no-extend-native: 2
no-extend-native:
- 2
- exceptions:
- "Array"
- "Map"
- "Set"
no-extra-bind: 2
no-extra-label: 2
no-fallthrough: 2
@@ -93,7 +100,7 @@ rules:
no-octal-escape: 2
no-param-reassign: 2
no-proto: 2
no-redeclare: 2
no-redeclare: 0
no-return-assign: 2
no-script-url: 2
no-self-assign: 2
@@ -120,7 +127,7 @@ rules:
init-declarations: 2
no-delete-var: 2
no-label-var: 2
no-shadow: 2
no-shadow: 0
no-shadow-restricted-names: 2
# no-undef: 2
@@ -154,11 +161,10 @@ rules:
- consistent
function-paren-newline:
- 2
- consistent
- multiline-arguments
jsx-quotes: 2
key-spacing: 2
keyword-spacing: 2
line-comment-position: 2
lines-around-comment:
- 0
# requires an empty line before block comments
@@ -203,7 +209,6 @@ rules:
- ignoreChainWithDepth: 2
no-bitwise: 2
no-continue: 2
no-inline-comments: 2
no-lonely-if: 2
no-mixed-operators:
- 2
@@ -239,11 +244,6 @@ rules:
- blocks: never
classes: never
switches: never
padding-line-between-statements:
- 2
- blankLine: always
prev: "*"
next: return
prefer-object-spread: 2
quote-props:
- 2
@@ -283,8 +283,12 @@ rules:
prefer-const: 2
prefer-destructuring:
- 2
- object: true
array: false
- VariableDeclarator:
array: true
object: true
AssignmentExpression:
array: false
object: false
prefer-numeric-literals: 2
prefer-rest-params: 2
prefer-spread: 2
@@ -307,7 +311,6 @@ rules:
"@typescript-eslint/await-thenable": 2
# "@typescript-eslint/class-name-casing": 2
"@typescript-eslint/consistent-type-assertions": 2
"@typescript-eslint/interface-name-prefix": 2
"@typescript-eslint/member-delimiter-style":
- 2
- multiline:
@@ -315,6 +318,14 @@ rules:
singleline:
delimiter: semi
requireLast: false
"@typescript-eslint/naming-convention":
- error
- selector: interface
format:
- PascalCase
custom:
regex: "^I[A-Z]"
match: false
"@typescript-eslint/no-floating-promises": 2
"@typescript-eslint/no-for-in-array": 2
"@typescript-eslint/no-inferrable-types": 2
@@ -326,7 +337,6 @@ rules:
"@typescript-eslint/prefer-for-of": 2
"@typescript-eslint/prefer-includes": 2
"@typescript-eslint/prefer-readonly": 2
"@typescript-eslint/promise-function-async": 2
# "@typescript-eslint/quotes": 2
"@typescript-eslint/require-array-sort-compare": 2
"@typescript-eslint/require-await": 2
@@ -348,10 +358,7 @@ rules:
comma-spacing: 0
"@typescript-eslint/comma-spacing": 2
func-call-spacing: 0
"@typescript-eslint/func-call-spacing":
- 2
- always
- allowNewlines: true
"@typescript-eslint/func-call-spacing": 2
indent: 0
"@typescript-eslint/indent": 0
no-array-constructor: 0
@@ -361,10 +368,13 @@ rules:
no-extra-semi: 0
"@typescript-eslint/no-extra-semi": 2
no-unused-expressions: 0
"@typescript-eslint/no-redeclare": 2
"@typescript-eslint/no-shadow": 2
"@typescript-eslint/no-unused-expressions": 2
"@typescript-eslint/no-unused-vars-experimental":
"@typescript-eslint/no-unused-vars":
- 2
- ignoredNamesRegex: "^_"
- argsIgnorePattern: "^_"
varsIgnorePattern: "^_"
"@typescript-eslint/no-use-before-define": 2
no-useless-constructor: 0
"@typescript-eslint/no-useless-constructor": 2
@@ -381,8 +391,6 @@ rules:
- 2
- never
- beforeStatementContinuationChars: never
space-before-function-paren: 0
"@typescript-eslint/space-before-function-paren": 2
# React
react/boolean-prop-naming: 2
@@ -411,7 +419,7 @@ rules:
react/no-will-update-set-state: 2
react/prefer-es6-class: 2
react/prefer-stateless-function: 2
react/react-in-jsx-scope: 2
react/react-in-jsx-scope: 0
react/require-render-return: 2
react/self-closing-comp: 2
react/state-in-constructor:
@@ -470,6 +478,9 @@ rules:
# React Hooks
react-hooks/rules-of-hooks: 2
react-hooks/exhaustive-deps: 2
# TSDoc
tsdoc/syntax: warn
settings:
react:
version: detect
+13
View File
@@ -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']
-33
View File
@@ -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.
+73
View File
@@ -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
+15 -5
View File
@@ -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.
+20 -11
View File
@@ -7,21 +7,30 @@ assignees: ''
---
**Sources**
## Sources
> List here what is included in this part of the book to implement. E.g., for special abilities, you need to list every source of entries from the book. Example (in German):
>
> - [ ] S. 133 (Berufsgeheimnisse)
> - [ ] S. 165-170 (Zauber- und Liturgiestile)
> - [ ] S. 183 (Stabzauber)
> - [ ] S. 195 (Zeremonialgegenstand Widderkeule)
> - S. 133150 (Berufsgeheimnisse)
**Tables**
> Delete Univ and change locale if necessary. Add specific entries if they could not be resolved.
- S. X (Section/Chapter Name)
- [ ] Univ
- [ ] L10n de-DE
**Code**
> List here what cannot be solved only using the tables. Example (in German):
## Special Notes
> List here any special hints to implement the sources listed above.
>
> - …
## Special Implementations
> List here what cannot be solved only using the database. Example (in German):
>
> - [ ] Voraussetzungen Vorliebe I-II
@@ -0,0 +1,23 @@
---
name: Publication ambiguity
about: An ambiguity in an official publication
title: ''
labels: 'Ulisses: Question'
assignees: ''
---
## Source(s)
Please complete the following information:
- Book: [e.g. Magic of Aventuria I]
- Printing: [e.g. 1st]
- Page(s): [e.g. 199]
- Area: [e.g. Profession Black Mage (Demirion Ophenos's Student), AP value]
## Describe the ambiguity
A clear and concise description of what the ambiguity is.
@@ -7,21 +7,33 @@ assignees: ''
---
**Source (please complete the following information):**
## Source (please complete the following information):
- Book: [e.g. Magic of Aventuria I]
- Printing: [e.g. 1st]
- Page(s): [e.g. 199]
- Area: [e.g. Profession Black Mage (Demirion Ophenos's Student), AP value]
**Describe the bug**
## Describe the bug
A clear and concise description of what the bug is.
**Expected text**
## Expected text
A clear and concise description of what the text *should* be instead.
**Optolith Version:**
## Optolith Version:
If applicable, the exact version of Optolith where you experience the bug, e.g. 1.2.0, 1.3.0-alpha.5.
**Additional context**
## Additional context
If needed, add any other context about the problem here.
-10
View File
@@ -1,10 +0,0 @@
---
name: Question
about: I have a question.
title: ''
labels: Question
assignees: ''
---
+15
View File
@@ -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
+51 -37
View File
@@ -3,7 +3,7 @@ name: Prerelease Builds
on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+-[a-z]+.[0-9]+
jobs:
build:
@@ -12,41 +12,55 @@ jobs:
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macOS-latest
- ubuntu-latest
- windows-latest
- macOS-latest
include:
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install Node.js dependencies
run: npm ci
- name: Build ReasonML files
run: npm run re:build
- name: Build TypeScript files
run: npm run js:build
- name: Build Sass files
run: npm run css:build
- name: Build
run: node ./deploy/build.js prerelease
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.js prerelease
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Compile JavaScript files
run: npm run js:build
- name: Compile Sass files
run: npm run css:build
- name: Build macOS application
if: runner.os == 'macOS'
run: node ./deploy/build.mjs prerelease
env:
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
TEAMID: ${{ secrets.TEAMID }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Linux application
if: runner.os == 'Linux'
run: node ./deploy/build.mjs prerelease
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Windows application
if: runner.os == 'Windows'
run: node ./deploy/build.mjs prerelease
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.mjs prerelease
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
+51 -37
View File
@@ -3,7 +3,7 @@ name: Stable Builds
on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+
jobs:
build:
@@ -12,41 +12,55 @@ jobs:
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macOS-latest
- ubuntu-latest
- windows-latest
- macOS-latest
include:
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
- os: ubuntu-latest
osName: Linux
- os: windows-latest
osName: Windows
- os: macOS-latest
osName: macOS
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install Node.js dependencies
run: npm ci
- name: Build ReasonML files
run: npm run re:build
- name: Build TypeScript files
run: npm run js:build
- name: Build Sass files
run: npm run css:build
- name: Build
run: node ./deploy/build.js stable
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.js stable
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Compile JavaScript files
run: npm run js:build
- name: Compile Sass files
run: npm run css:build
- name: Build macOS application
if: runner.os == 'macOS'
run: node ./deploy/build.mjs stable
env:
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
TEAMID: ${{ secrets.TEAMID }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Linux application
if: runner.os == 'Linux'
run: node ./deploy/build.mjs stable
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Build Windows application
if: runner.os == 'Windows'
run: node ./deploy/build.mjs stable
env:
UPDATE_URL: ${{ secrets.UPDATE_URL }}
- name: Deploy
run: node ./deploy/deploy.mjs stable
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
ROOT: ${{ secrets.ROOT }}
+31 -30
View File
@@ -2,10 +2,13 @@ name: Integration
on:
push:
branches:
- master
- develop
pull_request:
branches:
- master
- develop
- master
- develop
jobs:
test:
@@ -13,36 +16,34 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install Node.js dependencies
run: npm ci
- run: npm run re:build
- run: npm run ts:build
- run: npm test
env:
CI: true
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Compile TypeScript files
run: npm run ts:build
- name: Run tests
run: npm test
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install Node.js dependencies
run: npm ci
- run: npm run lint
env:
CI: true
- uses: actions/checkout@v2
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: true
- name: Use Node.js 20
uses: actions/setup-node@v1
with:
node-version: 20
- name: Install Node.js dependencies
run: npm ci
- name: Run linter
run: npm run lint
+3
View File
@@ -1,4 +1,7 @@
.DS_Store
node_modules/
/.webpack/**/*
!/.webpack/package.json
npm-debug.log*
.vs/
/data/
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "app/Database"]
path = app/Database
path = src/database/contents
url = https://github.com/elyukai/optolith-data.git
+15
View File
@@ -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}}"
}
+1 -1
View File
@@ -3,7 +3,7 @@
"configurations": [
{
"name": "Electron: Debug Main",
"type": "node",
"type": "pwa-node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
+1 -1
View File
@@ -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": {
+47 -53
View File
@@ -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": []
}
]
+3
View File
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
+2 -1
View File
@@ -1 +1,2 @@
Lukas Obermann <lukas.obermann@outlook.de>
Lukas Obermann <lukas.obermann@icloud.com>
Philipp Borucki <p.borucki@icloud.com>
+1066
View File
File diff suppressed because it is too large Load Diff
+11 -4
View File
@@ -28,16 +28,23 @@ You can suggest features either in the issues tracker or in one of the [listed f
### Important note
Due to licensing, the YAML files containing the crunch elements from the books are **not** included in this repository but in a separate private one. Please join my [Discord Server](https://discord.gg/uDyR4yr) if you want to contribute and thus need to access them. Just text me in a channel on the server or PN me (@elyukai).
Due to licensing, the YAML files containing the crunch elements from the books are **not** included in this repository but in a separate private one. If you only plan to contribute something independent of the database, you can just get the database from an alpha installation. On Windows, for example, the database is available under `Resources/app.asar.unpacked/app/Data` inside the installation folder. If you plan to contribute anything to the database itself and thus need to access its source, please join my [Discord Server](https://discord.gg/uDyR4yr) and text me in a channel on the server or PN me (@elyukai).
### Basic development rules
- Branches (mostly) follow Git Flow. Please try to follow Git Flow as well if you edit this repository. But if it's possible, please fork this repo and create PRs.
- Branches follow Git Flow. Please try to follow Git Flow as well if you edit this repository. But if it's possible, please fork this repo and create PRs.
- Commits need to follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), which is enforced by the CI and Git Hooks locally.
- Please check out the [Style Guide](https://github.com/elyukai/optolith-client/wiki/Code-Style-Guide) for more information on that topic! Sadly, TSLint cannot ensure the whole style so you partially need to take care of that on your own!
- There is a page covering [Naming Conventions](https://github.com/elyukai/optolith-client/wiki/Naming-Conventions) as well!
- The key criteria for the project are mentioned in the [README](README.md). They also apply to pull requests. A feature usually does not consist of the technical part only. Much more important is how the feature presents itself to the user. And that must be planned and discussed.
- Code should follow functional programming practices while maintaining readablilty &ndash; 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** &mdash; <https://git-scm.com/downloads> or via a package manager
- **Node.js** with **npm** &mdash; <https://nodejs.org/en/> or via [`nvm`](https://github.com/nvm-sh/nvm)
- *Optional:* **Visual Studio Code** &mdash; <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
@@ -62,7 +69,7 @@ Compile the source code. `js:` is for TypeScript/Webpack, `re:` for Reason/OCaml
You have to run the Reason build first as it generates TypeScript files...
```sh
npm run re:build
npm run ts:build
npm run css:build
npm run js:build
```
Submodule app/Database updated: 74899f07a3...fe41061524
+85
View File
@@ -1,3 +1,88 @@
## 1.5.1
### Verbesserungen
* **MapTool:** unter dem Exportbutton sind nun Links zu der MapTool-Erweiterung ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Fehlerbehebungen
* **MapTool:** ohne Avatar konnte nicht exportiert werden ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), schließt [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** für MapTool Version 1.11.4 wurde das Exportformat angepasst ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* Vorteil *Vertrauenerweckend* konnte selbst mit einem aktiven Nachteil *Inkompetent* in einem Gesellschaftstalent gekauft werden ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), schließt [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Voraussetzungen, die hätten durchgestrichen werden sollen, wurden stattdessen mit umgebenen Tilden dargestellt ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), schließt [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
* MapTool-Export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
* Portugiesische Übersetzung ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
* Native Unterstützung für Apples M1 ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
### Verbesserungen
* Sicherheit ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
### Fehlerbehebungen
* Der Trefferzonenrüstungscharakterbogen hatte einen höheren Abstand nach links als die anderen Bögen ([e637136](https://github.com/elyukai/optolith-client/commit/e63713687eff9b825a79d159fb8b44dc26f64ffe), [#788](https://github.com/elyukai/optolith-client/issues/788))
* Bei hinzugekaufter LE wurde nicht für KO ein entsprechendes Minimum gesetzt, sondern für KK ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
* Waffenindikatoren für zweihändig (2H) und improvisiert (i) fehlten auf dem Charakterbogen ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
* Waffen der Kampftechnik Raufen hatten auf dem Charakterbogen keinen Paradewert ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
* Ein Eintrag, der von einer einzelnen Aktivierung eines anderen Eintrags abhängt, hat die Möglichkeit, die Aktivierung zu entfernen, auch bei mehreren Aktivierungen dieses anderen Eintrags nicht bereitgestellt ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
* Einträge, die Fremdzauber in die eigenen Tradition überführen, konnten entfernt werden, wenn für diese Zauber Zaubererweiterungen gekauft worden waren ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
* Der Infobereich für Gegenstände hat manchmal nur Fehler angezeigt ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
* Professionen, die höhere Kampftechnikwerte geben als durch den Erfahrungsgrad erlaubt, wurden nicht ausgeblendet ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
* Bei der Sonderfertigkeit Kernschuss war unter Erschwernis ein Minuszeichen falsch platziert ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#1080](https://github.com/elyukai/optolith-client/issues/1080))
* In der Beschreibung von Albernisches Entermesser und Harbener Säbel war die Seitenzahl falsch ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#1081](https://github.com/elyukai/optolith-client/issues/1081))
* In der Beschreibung des Zaubers Zauberschnurren waren die QS-Beschreibungen vertauscht ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#846](https://github.com/elyukai/optolith-client/issues/846) [#1122](https://github.com/elyukai/optolith-client/issues/1122))
* Schlachtermesser und Fleischerbeil waren nicht als improvisierte Waffen markiert ([ccd7dec](https://github.com/elyukai/optolith-client/commit/ccd7decc8314ca476b6a15932ed9b3fb1c22a1f7), [#808](https://github.com/elyukai/optolith-client/issues/808))
* INI/GS-Modifikatoren von Rüstungen wurden negativ eingerechnet ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
* Sprachspezialisierungen kosteten nicht immer 1 AP und konnten zudem pro Sprache nicht mehrfach aktiviert werden ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
* Portraits mit transparenten Flächen hatten einen schwarzen Hintergrund ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
* Bei Profession Garether Krieger fehlte Schwerter auf 12 und Orientierung sollte 3 statt 2 betragen ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#792](https://github.com/elyukai/optolith-client/issues/792))
* Das bornländische Kulturpaket führte Lederbearbeitung statt Lebensmittelbearbeitung auf ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
* Zauber Wirbelform hatte die falsche Tradition und eine falsche Reihenfolge bei den Zaubererweiterungen ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1139](https://github.com/elyukai/optolith-client/issues/1139))
* Kleine Fehler bei den Maßangaben in der Beschreibung des Zaubers Invocatio Minima ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1224](https://github.com/elyukai/optolith-client/issues/1224))
* Leiteigenschaftsänderungen bei Gegenständen wurden auf dem Charakterbogen geändert, aber nicht direkt im Editierfenster des Gegenstands ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
* Bestimmte Professionen waren trotz eines für vorausgesetzte Eigenschaften zu niedrigen Erfahrungsgrads auswählbar ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
* Herbeirufende und beschwörende Zauber aus Professionen haben nicht direkt die Abhängigkeiten für ihre Voraussetzungen registriert ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
* Das Gewicht bei Elfen wurde nicht korrekt zufällig generiert ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
* Schreibfehler bei Physiostabilis ([e40f995](https://github.com/elyukai/optolith-client/commit/e40f995e341dc7fbcb1d9688c4b82a9187c180de), [#1234](https://github.com/elyukai/optolith-client/issues/1234))
* Tradition (Druide) referenzierte einen nicht existierenden Nachteil statt des Vorteils Eisenaffine Aura ([f8114c2](https://github.com/elyukai/optolith-client/commit/f8114c2f4318967631b71ea3614bf647e7826fa2), [#1237](https://github.com/elyukai/optolith-client/issues/1237))
* Der Hakendolch war nicht als Parierwaffe markiert ([ed74170](https://github.com/elyukai/optolith-client/commit/ed74170865b2caad8008a345db5c1705e0376bc5), [#1232](https://github.com/elyukai/optolith-client/issues/1232))
* Der Waffenvorteil des Kriegsbogens hatte einen falschen Schadensbonus ([8297455](https://github.com/elyukai/optolith-client/commit/8297455ddbd360035428a4ed244a684e6f1c7e7a), [#1074](https://github.com/elyukai/optolith-client/issues/1074))
* Profession Spinnenhexe hatte einen falschen Tierkunde-Wert ([#1250](https://github.com/elyukai/optolith-client/issues/1250))
* Eigenschaften auf dem niedrigsten möglichen Wert (8) erlaubten Kampftechniken, dessen Leiteigenschaften sie waren, keinen Kampftechnikwert über 6 ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
* Profession Sharisad bekam einen Bonus auf Steinbearbeitung statt auf Stoffbearbeitung ([cd16e53](https://github.com/elyukai/optolith-client/commit/cd16e5314a7f579a5f5f916bb204a15df3220bda), [#1341](https://github.com/elyukai/optolith-client/issues/1341))
* Die PDF-Datei war zu groß, wenn die Hintergrundtextur verwendet wurde ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
* Bei AppImages funktionierte der Auto-Updater nicht ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
* SF Weg der Schreiberin konnte nicht aktiviert werden ([83b534d](https://github.com/elyukai/optolith-client/commit/83b534d3f9fcd5e63ef7cf482d9dd26f06b5a1a2), [#1233](https://github.com/elyukai/optolith-client/issues/1233))
* Einige Leiteigenschaftsvoraussetzungen wurden ignoriert ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
* Die Texteingabefehler für die Reichweite von Fernkampfwaffen beeinflussten ihre Inhalte gegenseitig ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
* Wenn eine einzige Sprache und dazu passende Schrift vorausgesetzt wurden, wurden stattdessen alle Sprachen und Schriften vorausgesetzt ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
* Schriften erforderten keine aktive passende Sprache ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
* Einige Gegenstandswerte wurden nicht gespeichert ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
* Schreibfeler bei Tarnele ([8b5eede](https://github.com/elyukai/optolith-client/commit/8b5eedeb372622761480f2511935e8b74bdfcdcd), [#1330](https://github.com/elyukai/optolith-client/issues/1330))
* Die Auswahl eines Fremdzaubers für eine gildenmagische Profession war optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
* Kampftechniken haben nicht das Minimum ihrer Leiteigenschaften beeinflusst ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
* Das Speichern eines Charakters hat manchmal die Änderungshistorie von mehreren Charakteren gelöscht ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
* Zauber, die durch Imitationszauberei in Schelmenstreiche konvertiert wurden, konnten Zaubererweiterungen nutzen ([e558c1d](https://github.com/elyukai/optolith-client/commit/e558c1d80d1c668f926e4a56049029f989081a45), [#828](https://github.com/elyukai/optolith-client/issues/828))
* Dickere Zeilen in der zweiten Spalte der Talenttabelle auf dem Charakterbogen ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
* Sonderfertigkeit Blattschuss zeigte den falschen Kampfsonderfertigkeitstyp an ([7e31136](https://github.com/elyukai/optolith-client/commit/7e31136083ae62e26c5017f3af2376938bd264c3), [#1331](https://github.com/elyukai/optolith-client/issues/1331))
* Schreibfehler bei Tradition (Scharlatane) ([bdb3eb7](https://github.com/elyukai/optolith-client/commit/bdb3eb7804f8464689172f39d5bd8c229140c891), [#1239](https://github.com/elyukai/optolith-client/issues/1239))
### Danke
Zu guter Letzt ein großes **Danke** an alle, die über verschiedeste Kanäle Feedback geben und helfen, sowie an die folgenden Menschen auf GitHub, die an dieser Version mitgewirkt haben!
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
- [Lector (@Lector)](https://github.com/Lector)
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
## 1.4.2
### Enhancements
+5 -1
View File
@@ -51,5 +51,9 @@ Die Charaktere und auch andere Dateien wie die Konfiguration findest du je n
Hier finden sich verschiedene relevante Dateien:
- `heroes.json` enthält alle Helden, die aktuell in Optolith sind
- `config.json` enthält die Konfiguration deiner Optolith-Anwendung. Enthält keine wichtigen Daten, nur Dinge wie Farbschema, Sprache (falls man eine spezielle eingestellt hat), und ein paar andere Sachen.
- `config.json` enthält die Konfiguration deiner Optolith-Anwendung. Enthält keine wichtigen Daten, nur Dinge wie Farbschema, Sprache (falls man eine spezielle eingestellt hat), und ein paar andere Sachen.
*Ein Hinweis zu Windows:* `AppData` ist ein versteckter Ordner. Um ihn zu sehen, müsst ihr im Windows Explorer unter *Ansicht* die Einstellung *Ausgeblendete Elemente* aktivieren.
## Wie skaliere ich die Benutzeroberfläche von Optolith auf meinem Linux-System?
Wenn du die `tar.gz` heruntergeladen hast, kannst du in den entpackten Ordner navigieren und dort `GDK_DPI_SCALE=<Scale> ./Optolith` in der Kommandozeile ausführen. Dabei muss `<Scale>` mit dem gewünschten Skalierungsfaktor ersetzt werden, also z. B. `1.5`.
+79
View File
@@ -1,3 +1,82 @@
## 1.5.1
### Enhancements
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
<!-- * **MapTool:** Add missing Italian translations for export ([3f87dca](https://github.com/elyukai/optolith-client/commit/3f87dca910ce5229c7fd5378ba5f4177cbf431ac)), closes [#1350](https://github.com/elyukai/optolith-client/issues/1350) -->
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
* MapTool export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
* Portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
* Native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
### Enhancements
* Kilogram input hint for weight in item dialog ([bd9fc1b](https://github.com/elyukai/optolith-client/commit/bd9fc1badc8a408495bd7c1594338b1a5fe6df11))
* Security ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
### Bug Fixes
* Hit Zone Armor character sheet had left margin ([e637136](https://github.com/elyukai/optolith-client/commit/e63713687eff9b825a79d159fb8b44dc26f64ffe), [#788](https://github.com/elyukai/optolith-client/issues/788))
* Additional LE set a minimum required value of STR instead of CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
* Two-handed (2H) and improvised (i) weapon indicators were missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
* Brawling weapons had no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
* An entry that depends on a single activation of another entry disables removing of all activations of that entry if multiple activations are present ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
* Entries affecting spells to not be unfamiliar could be removed if Spell Enhancements were bought ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
* The equipment info area may have crashed ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
* Professions that granted higher Combat Technique Ratings than what the selected Experience Level allowed were not filtered ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
* INI/MOV modifiers on armor were handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
* Language specializations did not always cost 1 AP and could not be activated multiple times for a single language ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
* Portraits with transparency had a black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
* Bornlander cultural package had Leatherworking instead of Prepare Food ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
* Spell Wind Shaping had the wrong traditions and wrong spell enhancements order ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#1139](https://github.com/elyukai/optolith-client/issues/1139))
* Primary attribute changes for items were not applied in edit window, only on character sheet ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
* Professions with due to EL impossible attribute values could be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
* Summoning spellworks from professions did not register dependencies from prerequisites ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
* Weight of Elves was not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
* Gaze into the Essence spell was misspelled as Gase into the Essence ([42891f0](https://github.com/elyukai/optolith-client/commit/42891f070c35b74c49bb2c9e16152789cc8cc7df), [#1180](https://github.com/elyukai/optolith-client/issues/1180))
* Tradition (Druid) referenced a non-existent disadvantage instead of advantage Iron-Attuned Aura ([f8114c2](https://github.com/elyukai/optolith-client/commit/f8114c2f4318967631b71ea3614bf647e7826fa2), [#1237](https://github.com/elyukai/optolith-client/issues/1237))
* Hook Dagger was not marked as a parrying weapon ([ed74170](https://github.com/elyukai/optolith-client/commit/ed74170865b2caad8008a345db5c1705e0376bc5), [#1232](https://github.com/elyukai/optolith-client/issues/1232))
* Special ability Deadly Thrust had special ability Crossblock's rules text ([ec9bd71](https://github.com/elyukai/optolith-client/commit/ec9bd71e101abcaf61e84e3da340890e161896ea), [#841](https://github.com/elyukai/optolith-client/issues/841))
* Missing translations for spell enhancements of Heptagramma ([a5df7c8](https://github.com/elyukai/optolith-client/commit/a5df7c863cded391609950fa5b8bf8474ffe2dfd), [#848](https://github.com/elyukai/optolith-client/issues/848))
* Attributes on minimum value (8) did not allow a combat technique rating over 6 if the attribute was the combat technique's primary attribute ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
* Profession Sharisad got Earthencraft bonus instead of Clothworking bonus ([cd16e53](https://github.com/elyukai/optolith-client/commit/cd16e5314a7f579a5f5f916bb204a15df3220bda), [#1341](https://github.com/elyukai/optolith-client/issues/1341))
* The Hit Zone Armor tab in Belongings was not available, even with Aventuria Armory activated ([383a9c1](https://github.com/elyukai/optolith-client/commit/383a9c166c6d8c5d713f4852f40999c5d8c00efc), [#1328](https://github.com/elyukai/optolith-client/issues/1328))
* Too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
* Weight column in inventory showed wrong weight ([6ba99f2](https://github.com/elyukai/optolith-client/commit/6ba99f2f4610e8a26d1703d978738a907f26bd92), [#1329](https://github.com/elyukai/optolith-client/issues/1329))
* Auto-updater did not work in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
* Some primary attribute prerequisites were not enforced ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
* Range brackets input fields influenced other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
* Requiring only one matching languages and script required all of them instead ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
* Scripts did not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
* Some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
* Unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
* special ability Knuckle Storm's description used Damage Points instead of Brawling Points ([06b57c9](https://github.com/elyukai/optolith-client/commit/06b57c9d15e1ef6f35da69ea46512bb790119b0a), [#1340](https://github.com/elyukai/optolith-client/issues/1340))
* Combat techniques did not influence the minimum of their primary attributes ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
* Saving a hero cleared the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
* Widened rows in second column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
### Thank you
Last but definitely not least a big **Thank You** to all of you who give feedback and help out on various channels as well as to the following people on GitHub who contributed to this release!
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
- [Lector (@Lector)](https://github.com/Lector)
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
## 1.4.2
### Enhancements
+5 -1
View File
@@ -50,4 +50,8 @@ A list of relevant files:
- `heroes.json ` contains all heroes saved in Optolith
- `config.json` contains the configuration of your Optolith. It does not contain critical data but things like color theme, language (only if you selected a specific one) and alike.
*A note on Windows:* `AppData` is a *hidden* folder. To be able to see it, check out the Windows Explorer, go to the *View* tab and activate the setting *Hidden elements*.
*A note on Windows:* `AppData` is a *hidden* folder. To be able to see it, check out the Windows Explorer, go to the *View* tab and activate the setting *Hidden elements*.
## How do I scale the UI for Optolith on Linux?
If you have the `tar.gz`, you can go into the extracted folder and then run `GDK_DPI_SCALE=<Scale> ./Optolith`, where `<Scale>` needs to be replaced with the desired scale, e.g. `1.5`.
+66
View File
@@ -1,3 +1,69 @@
## 1.5.1
### Améliorations
* **MapTool:** ajout de liens vers l'extension près du bouton d'export ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bugs corrigés
* **MapTool:** sans avatar aucun export n'était possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), fermeture [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** modification du format d'export pour MapTool en version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* L'avantage *Rassurant* pouvait être acheté malgré un désavantage *Incompétent* dans un des talents sociaux ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), fermeture [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Les prérequis à ne pas remplir étaient affichés avec des tirets autour au lieu d'être rayés ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), fermeture [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Fonctionnalités
* Export MapTool ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
* Traductions en portugais ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
* Support natif Apple M1 ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
### Améliorations
* Sécurité ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
### Bugs corrigés
* Des PV supplémentaires fixaient une valeur minimale requise de FO au lieu de CN. ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
* Les indicateurs d'armes à deux mains (2M) et d'armes improvisées (i) manquaient sur la feuille de personnage. ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
* Les armes de bagarre n'avaient pas de parade sur la feuille de personnage. ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
* Une entrée qui dépend d'une seule activation d'une autre entrée désactive la suppression de toutes les activations de cette entrée si des activations multiples sont présentes. ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
* Les entrées affectant les sorts de façon à ce qu'ils ne soient pas "non familiers" pouvaient être supprimées si des améliorations de sorts étaient achetées. ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
* La zone d'information sur l'équipement pouvait planter ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
* Les professions qui accordaient une valeur de technique de combat supérieure à celle autorisée par le niveau d'expérience sélectionné n'étaient pas filtrées. ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
* Les modificateurs INI/VIT sur les armures étaient traités comme des pénalités. ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
* Les spécialisations linguistiques ne coûtaient pas toujours 1 PA et ne pouvaient pas être activées plusieurs fois pour une même langue. ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
* Les portraits en transparence avaient un fond noir ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
* Le bagage culturel Sourcelandais avait Cuisine au lieu de Travail du cuir. ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
* Les changements d'attributs primaires des objets n'étaient pas appliqués dans la fenêtre d'édition, mais uniquement sur la feuille de personnage. ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
* Les professions avec des valeurs d'attributs impossibles à sélectionner en raison du niveau d'expérience peuvent être sélectionnées. ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
* Les sorts d'invocation des professions n'enregistraient pas les dépendances des prérequis. ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
* Le poids des Elfes n'était pas généré correctement ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
* Les attributs ayant une valeur minimale (8) ne permettaient pas d'obtenir une valeur de technique de combat supérieure à 6 si l'attribut était l'attribut principal de la technique de combat. ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
* Sortie PDF trop grande lors de l'utilisation d'un fond de feuille. ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
* Auto-updater ne fonctionne pas dans AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
* Certains prérequis d'attributs primaires n'étaient pas appliqués. ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
* Les champs de saisie entre parenthèses influençaient les autres champs entre parenthèses. ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
* L'exigence d'une seule langue et d'une seule écriture correspondante exigeait toutes les langues à la place ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
* Les écritures ne requièrent pas qu'une langue correspondante soit active. ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
* Certaines propriétés d'objets n'étaient pas sauvegardées ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
* La sélection des sorts non familiers dans la profession était facultative. ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
* Les techniques de combat n'influencent pas le minimum de leurs attributs primaires. ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
* La sauvegarde d'un héros efface l'historique d'annulation de plusieurs personnages. ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
* Les lignes de la deuxième colonne du tableau des compétences de la fiche de personnage ont été élargies. ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
### Remerciements
Enfin et surtout, un grand **merci** à tous ceux qui font des retours et donnent leur aide sur les différents canaux ainsi qu'aux personnes ci-dessous sur GitHub qui ont contribué à cette version !
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
- [Lector (@Lector)](https://github.com/Lector)
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
## 1.4.2
### Améliorations
+71
View File
@@ -1,3 +1,74 @@
## 1.5.1
### Miglioramenti
* **MapTool:** aggiunto collegamento allestensione 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 lesportazione ([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 didentità ([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 didentità ([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 sullequipaggiamento ([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 dEsperienza 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 didentità ([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 dEsperienza) 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 didentità ([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
+67
View File
@@ -1,3 +1,70 @@
## 1.5.1
### Enhancements
* **MapTool:** voeg links toe naar extensie naast export knop ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
* **MapTool:** zonder avatar kon je niet exporteren ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), sluit [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** export formaat voor MapTool versie 1.11.4 is aangepast ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* Voordeel *Inspireer Vertrouwen* kon gekocht worden met een actieve *incompetent* in een sociale vaardigheid ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), sluit [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Doorstreepte vereisten werden gerenderd met omsluitende tildes ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), sluit [#1349](https://github.com/elyukai/optolith-client/issues/1349)
## 1.5.0
### Features
* MapTool export ([87cec15](https://github.com/elyukai/optolith-client/commit/87cec15ba9751c329ee39719dc654895b9f4f193))
* Portuguese translations ([d8c9f52](https://github.com/elyukai/optolith-client/commit/d8c9f52542120f9e5fa569728b3f11cb79102365), [#676](https://github.com/elyukai/optolith-client/issues/676))
* Native Apple M1 support ([94e751f](https://github.com/elyukai/optolith-client/commit/94e751fda169c4de90cdb82346d3d864cf697300))
### Verbeteringen
* Security ([723e910](https://github.com/elyukai/optolith-client/commit/723e9106ebb178db6a7cccec2a022b3edaed5b98) and others)
### Probleemoplossingen
* Additional LE set a minimum required value of STR instead of CON ([390dcb6](https://github.com/elyukai/optolith-client/commit/390dcb616aaa68e5b103bb49dd75d1529c4e7e3a), [#787](https://github.com/elyukai/optolith-client/issues/787))
* Two-handed (2H) and improvised (i) weapon indicators were missing on character sheet ([3f9fae3](https://github.com/elyukai/optolith-client/commit/3f9fae30a2291b8e53486a74dae8cc1533741b94), [#797](https://github.com/elyukai/optolith-client/issues/797))
* Brawling weapons had no parry on character sheet ([a02700e](https://github.com/elyukai/optolith-client/commit/a02700eeccbd95a75f778d4d9e78ad7a2447dad8), [#1229](https://github.com/elyukai/optolith-client/issues/1229))
* An entry that depends on a single activation of another entry disables removing of all activations of that entry if multiple activations are present ([092343f](https://github.com/elyukai/optolith-client/commit/092343f45da566a45b13b275899a458fed720a76), [#1097](https://github.com/elyukai/optolith-client/issues/1097))
* Entries affecting spells to not be unfamiliar could be removed if Spell Enhancements were bought ([28f260a](https://github.com/elyukai/optolith-client/commit/28f260a2c4a96adb0d36585a478676f95c304414), [#827](https://github.com/elyukai/optolith-client/issues/827))
* The equipment info area may have crashed ([ae2fbad](https://github.com/elyukai/optolith-client/commit/ae2fbad1c738354dd468c1b36b06eda729a879e5))
* Professions that granted higher Combat Technique Ratings than what the selected Experience Level allowed were not filtered ([c8094f5](https://github.com/elyukai/optolith-client/commit/c8094f5ef15f62f69088386b9fc6c64f7d8bfd02), [#1244](https://github.com/elyukai/optolith-client/issues/1244))
* INI/MOV modifiers on armor were handled as penalties ([eb5a068](https://github.com/elyukai/optolith-client/commit/eb5a06884db1894e1a9f2b4b040b114cb4dc85cb), [#1091](https://github.com/elyukai/optolith-client/issues/1091))
* Language specializations did not always cost 1 AP and could not be activated multiple times for a single language ([0a59d9e](https://github.com/elyukai/optolith-client/commit/0a59d9e5e571e87525b18d0b25035e73f7cd87bf), [#1082](https://github.com/elyukai/optolith-client/issues/1082))
* Portraits with transparency had a black background ([cc5ecd6](https://github.com/elyukai/optolith-client/commit/cc5ecd6f098ae6c080eeb3b306887727a99c1220), [#800](https://github.com/elyukai/optolith-client/issues/800))
* Bornlander cultural package had Leatherworking instead of Prepare Food ([397abe2](https://github.com/elyukai/optolith-client/commit/397abe2b4a69582dc49422add1700807272c32d6), [#824](https://github.com/elyukai/optolith-client/issues/824))
* Primary attribute changes for items were not applied in edit window, only on character sheet ([6c63ab1](https://github.com/elyukai/optolith-client/commit/6c63ab1b5051882ace71f15740c3a69fff4a267f), [#798](https://github.com/elyukai/optolith-client/issues/798))
* Professions with due to EL impossible attribute values could be selected ([fdde329](https://github.com/elyukai/optolith-client/commit/fdde329de591319df3f6da11404dd7523d800c3e), [#1109](https://github.com/elyukai/optolith-client/issues/1109))
* Summoning spellworks from professions did not register dependencies from prerequisites ([c1b2e26](https://github.com/elyukai/optolith-client/commit/c1b2e267cb3f02d2d18812415c39c58739ad99ec), [#1240](https://github.com/elyukai/optolith-client/issues/1240))
* Typo in effect of Bliksemblind spell ([c58279c](https://github.com/elyukai/optolith-client/commit/c58279cc95aba5506824510d83aa6ffbc410107a), [#805](https://github.com/elyukai/optolith-client/issues/805))
* Weight of Elves was not generated correctly ([3b05e69](https://github.com/elyukai/optolith-client/commit/3b05e69e27f7faa1634b50eb134000fe1a2c3a21), [#813](https://github.com/elyukai/optolith-client/issues/813))
* Attributes on minimum value (8) did not allow a combat technique rating over 6 if the attribute was the combat technique's primary attribute ([47e66d6](https://github.com/elyukai/optolith-client/commit/47e66d65467999e2661eaac30a97b5a1ebfece94), [#835](https://github.com/elyukai/optolith-client/issues/835))
* Too large PDF output when using a sheet background ([9cb2658](https://github.com/elyukai/optolith-client/commit/9cb26586f3a5026d06f41801d4bbf714631d06a4), [#1094](https://github.com/elyukai/optolith-client/issues/1094))
* Auto-updater did not work in AppImage ([a24ff80](https://github.com/elyukai/optolith-client/commit/a24ff8082a5556fc07af05f113bacfd9c84428a4), [#753](https://github.com/elyukai/optolith-client/issues/753))
* Some primary attribute prerequisites were not enforced ([ac0cdc3](https://github.com/elyukai/optolith-client/commit/ac0cdc377800a1eb380993dbb7914fa88b8f254e), [#1260](https://github.com/elyukai/optolith-client/issues/1260))
* Range brackets input fields influenced other bracket fields ([0ab65e8](https://github.com/elyukai/optolith-client/commit/0ab65e869c26536127b386753db110f2e26b33af), [#1251](https://github.com/elyukai/optolith-client/issues/1251))
* Requiring only one matching languages and script required all of them instead ([4dabbdb](https://github.com/elyukai/optolith-client/commit/4dabbdbcd23c1ffeff18a8b1f9497a4a8315aa6a), [#1343](https://github.com/elyukai/optolith-client/issues/1343))
* Scripts did not require an active matching language ([1ed0c64](https://github.com/elyukai/optolith-client/commit/1ed0c64b0dd9873593169bd9994082d49299fa3e), [#1344](https://github.com/elyukai/optolith-client/issues/1344))
* Some item properties were not saved ([f2e6138](https://github.com/elyukai/optolith-client/commit/f2e61386abe444aa76f0211469d50c30fde99a0c), [#1252](https://github.com/elyukai/optolith-client/issues/1252))
* Unfamiliar spell selection in profession was optional ([3574d1b](https://github.com/elyukai/optolith-client/commit/3574d1ba46725d04a83286cd1055c080fe1de95f), [#1315](https://github.com/elyukai/optolith-client/issues/1315))
* Combat techniques did not influence the minimum of their primary attributes ([1ce2db9](https://github.com/elyukai/optolith-client/commit/1ce2db9cfbb06b1ca8a549957b8225af71de9185), [#836](https://github.com/elyukai/optolith-client/issues/836))
* Saving a hero cleared the undo history of multiple characters ([923b760](https://github.com/elyukai/optolith-client/commit/923b7605fee4c4288dc743e962728308f7254ca9), [#811](https://github.com/elyukai/optolith-client/issues/811))
* Widened rows in second column of skills table on character sheet ([41ee35b](https://github.com/elyukai/optolith-client/commit/41ee35ba76af42ad837daa6c45a940406b0c5daa), [#1342](https://github.com/elyukai/optolith-client/issues/1342))
### Dank u
Ten laatste maar zeker niet ten minste een dikke **Dank u** voor iedereen die feedback en help geeft in de verschillende kanalen alsook de volgende mensen op GitHub die bijgedragen hebben tot deze release!
- [Elidia (@FloraMayr)](https://github.com/FloraMayr)
- [JoveToo (@JoveToo)](https://github.com/JoveToo)
- [Lector (@Lector)](https://github.com/Lector)
- [Lorenz Cuno Klopfenstein (@LorenzCK)](https://github.com/LorenzCK)
- [Marc Schwering (@m4rcsch)](https://github.com/m4rcsch)
- [Pepelios (@Pepelios)](https://github.com/Pepelios)
## 1.4.2
### Verbeteringen
+3 -1
View File
@@ -48,4 +48,6 @@ Een lijst met relevante files:
- `config.json` bevat de configuratie van Optolith. Het bevat geen kritieke data maar dingen zoals theme, taal (alleen als je een specifieke taal gekozen hebt) en zoverder.
*Een noot voor Windows:* `AppData` is een *verborgen* folder. Om die te kunnen zien, open Windows Explorere, ga naar de "View" tab en activeer de setting "Hidden elements".
## Hoe schaal ik de UI voor Optolith in Linux?
Als je de `.tar.gz` hebt gedownload, ga je naar de uitgepakte folder en start je `GDK_DPI_SCALE=<Scale> ./Optolith` in je terminal, waarbij je `<scale>` moet vervangen met de gewenste schaal, e.g. `1.5`.
+9 -8
View File
@@ -1,15 +1,16 @@
## 1.5.0
Initial release.
### Features
## 1.5.1
### Enhancements
* **MapTool:** add links to extension next to export button ([07d336d](https://github.com/elyukai/optolith-client/commit/07d336dbb3ceba9818185a9b8c0cdffa6283afb3))
### Bug Fixes
### Thank you
* **MapTool:** without an avatar no export was possible ([80fdffb](https://github.com/elyukai/optolith-client/commit/80fdffb373fccc467383cf6d98c1f07a92168ee4)), closes [#1348](https://github.com/elyukai/optolith-client/issues/1348)
* **MapTool:** changed export format for MapTool version 1.11.4 ([9e9a113](https://github.com/elyukai/optolith-client/commit/9e9a1139d3821bb5a36fbaa973236319026d996a))
* Advantage *Inspire Confidence* could be bought with an active *Incompetent* in a social skill ([8102bb1](https://github.com/elyukai/optolith-client/commit/8102bb1a9adac4849499380bf3bc2270aa7dd2c6)), closes [#1351](https://github.com/elyukai/optolith-client/issues/1351)
* Strikethrough prerequisites were rendered with surrounding tildes instead ([2c9332c](https://github.com/elyukai/optolith-client/commit/2c9332c37f9b2d8d9e0359a9e4dadf0a40beeba1)), closes [#1349](https://github.com/elyukai/optolith-client/issues/1349)
Last but definitely not least a big **Thank You** to the following people on GitHub who contributed to this release!
## 1.5.0
- [TBD (@tbd)](https://github.com/tbd)
Lançamento inicial.
-131
View File
@@ -1,131 +0,0 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "Schema/Config/Config.l10n.schema.json",
"$ref": "#/definitions/Config",
"definitions": {
"Config": {
"title": "RawConfig",
"type": "object",
"properties": {
"herolistSortOrder": {
"enum": ["name", "datemodified", "dateModified"]
},
"herolistVisibilityFilter": {
"enum": ["all", "own", "shared"]
},
"racesSortOrder": {
"enum": ["name", "cost"]
},
"racesValueVisibility": {
"type": "boolean"
},
"culturesSortOrder": {
"enum": ["name", "cost"]
},
"culturesVisibilityFilter": {
"enum": ["all", "common"]
},
"culturesValueVisibility": {
"type": "boolean"
},
"professionsSortOrder": {
"enum": ["name", "cost"]
},
"professionsVisibilityFilter": {
"enum": ["all", "common"]
},
"professionsFromExpansionsVisibility": {
"type": "boolean"
},
"professionsGroupVisibilityFilter": {
"enum": [0, 1, 2, 3]
},
"advantagesDisadvantagesCultureRatingVisibility": {
"type": "boolean"
},
"talentsSortOrder": {
"enum": ["name", "group", "ic"]
},
"talentsCultureRatingVisibility": {
"type": "boolean"
},
"combatTechniquesSortOrder": {
"enum": ["name", "group", "ic"]
},
"specialAbilitiesSortOrder": {
"enum": ["name", "group", "groupname"]
},
"spellsSortOrder": {
"enum": ["name", "group", "property", "ic"]
},
"spellsUnfamiliarVisibility": {
"type": "boolean"
},
"liturgiesSortOrder": {
"enum": ["name", "group", "ic"]
},
"equipmentSortOrder": {
"enum": ["name", "groupname", "where", "weight"]
},
"equipmentGroupVisibilityFilter": {
"type": "integer"
},
"sheetCheckAttributeValueVisibility": {
"type": "boolean"
},
"sheetUseParchment": {
"type": "boolean"
},
"sheetZoomFactor": {
"type": "number"
},
"enableActiveItemHints": {
"type": "boolean"
},
"locale": {
"type": "string"
},
"fallbackLocale": {
"type": "string"
},
"theme": {
"enum": ["light", "dark"]
},
"enableEditingHeroAfterCreationPhase": {
"type": "boolean"
},
"meleeItemTemplatesCombatTechniqueFilter": {
"type": "string"
},
"rangedItemTemplatesCombatTechniqueFilter": {
"type": "string"
},
"enableAnimations": {
"type": "boolean"
}
},
"required": [
"herolistSortOrder",
"herolistVisibilityFilter",
"racesSortOrder",
"culturesSortOrder",
"culturesVisibilityFilter",
"professionsSortOrder",
"professionsVisibilityFilter",
"professionsGroupVisibilityFilter",
"advantagesDisadvantagesCultureRatingVisibility",
"talentsSortOrder",
"talentsCultureRatingVisibility",
"combatTechniquesSortOrder",
"specialAbilitiesSortOrder",
"spellsSortOrder",
"spellsUnfamiliarVisibility",
"liturgiesSortOrder",
"equipmentSortOrder",
"equipmentGroupVisibilityFilter",
"enableActiveItemHints"
],
"additionalProperties": false
}
}
}
-5
View File
@@ -1,5 +0,0 @@
const _require = require("esm")(module)
process.once('loaded', () => {
global.require = _require
})
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 MiB

-25
View File
@@ -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 */
-361
View File
@@ -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();
// });
// };
// };
+52
View File
@@ -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"
}
}
-73
View File
@@ -1,73 +0,0 @@
/**
* @type {import ("electron-builder") .Configuration}
*/
module.exports = {
appId: "com.lukasobermann.optolith",
productName: "Optolith",
copyright: "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
directories: {
output: "dist"
},
files: [
"app/**/*",
"LICENSE"
],
win: {
target: [
{
target: "nsis",
arch: [
"x64",
"ia32"
]
}
],
icon: "app/icon.ico",
artifactName: "OptolithSetup_${version}.${ext}"
},
nsis: {
perMachine: true,
differentialPackage: true,
deleteAppDataOnUninstall: false,
},
linux: {
category: "RolePlaying",
executableName: "Optolith",
icon: "app",
target: [
{
target: "AppImage",
arch: [
"x64"
]
},
{
target: "tar.gz",
arch: [
"x64"
]
}
],
artifactName: "Optolith_${version}.${ext}"
},
mac: {
category: "public.app-category.role-playing-games",
type: "distribution",
icon: "app/icon.icns",
target: "default",
artifactName: "Optolith_${version}.${ext}",
hardenedRuntime: true,
// entitlements: "deploy/entitlements.mac.plist",
// entitlementsInherit: "deploy/entitlements.mac.plist",
gatekeeperAssess: false,
},
dmg: {
sign: false,
},
publish: {
"provider": "generic",
"url": `${process.env.UPDATE_URL}/\${os}`,
"channel": "latest"
},
// afterSign: notarize,
}
+83
View File
@@ -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: "© 2017present 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
+10 -7
View File
@@ -1,6 +1,6 @@
// @ts-check
const builder = require("electron-builder")
const { getSystem } = require("./platform")
import builder from "electron-builder"
import { getSystem } from "./platform.mjs"
const [channel] = process.argv.slice(2)
@@ -10,15 +10,18 @@ if (channel !== "stable" && channel !== "prerelease") {
const config =
channel === "prerelease"
? require("./build.prerelease.config.js")
: require("./build.config.js")
? (await import("./build.prerelease.config.mjs")).default
: (await import("./build.config.mjs")).default
process.on ('unhandledRejection', error => {
throw new Error (`Unhandled promise rejection: ${error .toString ()}`);
});
throw new Error(`Unhandled promise rejection: ${/** @type {Error} */ (error).toString ()}`)
})
const os = getSystem()
const plaformKey = os === "linux" ? "LINUX" : os === "mac" ? "MAC" : "WINDOWS"
builder.build ({ config, targets: builder.Platform[plaformKey].createTarget () })
await builder.build({
config,
targets: builder.Platform[plaformKey].createTarget(),
})
@@ -1,10 +1,13 @@
// @ts-check
import { notarize } from "./notarize.mjs"
/**
* @type {import ("electron-builder") .Configuration}
*/
module.exports = {
const config = {
appId: "com.lukasobermann.optolithinsider",
productName: "Optolith Insider",
copyright: "This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
copyright: "© 2017present Lukas Obermann. This product was created under a license. Das Schwarze Auge and its logo as well as Aventuria, Dere, Myranor, Riesland, Tharun and Uthuria and their logos are trademarks of Significant GbR. The title and contents of this book are protected under the copyright laws of the United States of America. No part of this publication may be reproduced, stored in retrieval systems or transmitted, in any form or by any means, whether electronic, mechanical, photocopy, recording, or otherwise, without prior written consent by Ulisses Spiele GmbH, Waldems. This publication includes material that is protected under copyright laws by Ulisses Spiele and/or other authors. Such material is used under the Community Content Agreement for the SCRIPTORIUM AVENTURIS. All other original materials in this work is copyright 2017-present by Lukas Obermann and published under the Community Content Agreement for the SCRIPTORIUM AVENTURIS.",
directories: {
output: "dist/insider"
},
@@ -55,20 +58,27 @@ module.exports = {
category: "public.app-category.role-playing-games",
type: "distribution",
icon: "app/icon.icns",
target: "default",
target: [
{
target: "default",
arch: "universal"
}
],
artifactName: "OptolithInsider_${version}.${ext}",
entitlements: "deploy/entitlements.mac.plist",
entitlementsInherit: "deploy/entitlements.mac.plist",
hardenedRuntime: true,
// entitlements: "deploy/entitlements.mac.plist",
// entitlementsInherit: "deploy/entitlements.mac.plist",
gatekeeperAssess: false,
},
dmg: {
sign: false,
sign: false
},
publish: {
"provider": "generic",
"url": `${process.env.UPDATE_URL}/insider/\${os}`,
"channel": "latest"
},
// afterSign: notarize,
afterSign: notarize,
}
export default config
-150
View File
@@ -1,150 +0,0 @@
// @ts-check
require("dotenv").config()
const { Client } = require ("qusly-core")
const readline = require ("readline")
const fs = require ("fs")
const path = require ("path")
const semver = require ("semver");
const { getSystem, getSystemName } = require("./platform");
const [channel] = process.argv.slice(2)
const os = getSystem()
if (channel !== "stable" && channel !== "prerelease") {
throw new TypeError (`publishToServer requires a specified channel ("stable" or "prerelease"), but it received ${channel}`)
}
if (os !== "win" && os !== "mac" && os !== "linux") {
throw new TypeError (`publishToServer requires a specified OS ("win", "mac" or "linux"), but it received ${os}`)
}
/**
* Needed env variables:
* - `HOST`
* - `USERNAME`
* - `PASSWORD`
* - `ROOT`
*/
const uploadToServer = async () => {
console.log (`Preparing to upload update files for "${getSystemName(os)}" on "${channel}" channel...`)
const subFolder = os === "win" ? "win" : os === "linux" ? "linux" : "mac"
const updateYmlName =
os === "win"
? "latest.yml"
: os === "linux"
? "latest-linux.yml"
: "latest-mac.yml"
const distPath = channel === "prerelease" ? ["dist", "insider"] : ["dist"]
const serverPath = `${process.env.ROOT}${channel === "prerelease" ? "/insider" : ""}/${subFolder}`
const regex =
channel === "prerelease"
? os === "win"
? /^OptolithInsiderSetup_(.+)\.exe$/
: os === "linux"
? /^OptolithInsider_(.+)\.(?:AppImage|tar\.gz)$/
: /^OptolithInsider_(.+)\.(?:zip|dmg)$/
: os === "win"
? /^OptolithSetup_(.+)\.exe$/
: os === "linux"
? /^Optolith_(.+)\.(?:AppImage|tar\.gz)$/
: /^Optolith_(.+)\.(?:zip|dmg)$/
const recreateFileNames =
channel === "prerelease"
? os === "win"
? /**
* @param {string} v Version
*/ v => [`OptolithInsiderSetup_${v}.exe`, `OptolithInsiderSetup_${v}.exe.blockmap`]
: os === "linux"
? /**
* @param {string} v Version
*/ v => [`OptolithInsider_${v}.AppImage`, `OptolithInsider_${v}.tar.gz`]
: /**
* @param {string} v Version
*/ v => [`OptolithInsider_${v}.dmg`, `OptolithInsider_${v}.dmg.blockmap`, `OptolithInsider_${v}.zip`]
: os === "win"
? /**
* @param {string} v Version
*/ v => [`OptolithSetup_${v}.exe`, `OptolithSetup_${v}.exe.blockmap`]
: os === "linux"
? /**
* @param {string} v Version
*/ v => [`Optolith_${v}.AppImage`, `Optolith_${v}.tar.gz`]
: /**
* @param {string} v Version
*/ v => [`Optolith_${v}.dmg`, `Optolith_${v}.dmg.blockmap`, `Optolith_${v}.zip`]
const allFiles = await fs.promises.readdir (path.join (...distPath))
const allInstallerNames = allFiles .filter (fileName => regex .test (fileName))
const allInstallerVersionsSorted =
allInstallerNames .map (fileName => regex .exec (fileName) [1])
.sort (semver .rcompare)
if (allInstallerVersionsSorted .length < 1) {
throw new RangeError ("Array of sorted installer versions is empty")
}
const latestFileNames = recreateFileNames (allInstallerVersionsSorted [0])
console.log(`Files to upload: ${[updateYmlName, ...latestFileNames] .join (", ")}.`);
// Actual server connection
const client = new Client ()
console.log("Connecting to server...");
await client.connect ({
protocol: "sftp",
host: process.env.HOST,
user: process.env.USERNAME,
password: process.env.PASSWORD,
})
let loggedProgress = false
client.addListener("progress", (progress, info) => {
if (loggedProgress) {
readline.clearLine(process.stdout, 1);
readline.cursorTo(process.stdout, 0);
}
else {
loggedProgress = true
}
process.stdout.write(`Progress: ${progress.percent}%`);
})
console.log(`Server connection established.`);
for (const fileName of latestFileNames) {
console.log(`Uploading ${fileName}`);
loggedProgress = false
const stream = fs.createReadStream (path.join (...distPath, fileName))
await client.upload (`${serverPath}/${fileName}`, stream)
console.log(`\nUpload done: ${fileName}.`);
}
console.log(`Uploading ${updateYmlName}...`);
loggedProgress = false
const updateYml = fs.createReadStream (path.join (...distPath, updateYmlName))
await client.upload (`${serverPath}/${updateYmlName}`, updateYml)
console.log(`\nUpload done: ${updateYmlName}.`);
await client.disconnect ()
console.log("Closed server connection.");
}
uploadToServer()
+52
View File
@@ -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.`)
+3 -1
View File
@@ -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>
+12
View File
@@ -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")
}
}
-29
View File
@@ -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
}
+25
View File
@@ -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`)
}
}
-32
View File
@@ -1,32 +0,0 @@
// @ts-check
const os = require ("os")
module.exports = {
/**
* @typedef {"win" | "mac" | "linux"} System
* @returns {System}
*/
getSystem: () => {
switch (os.platform()) {
case "win32":
return "win"
case "darwin":
return "mac"
default:
return "linux"
}
},
/**
* @param {System} system
*/
getSystemName: system => {
switch (system) {
case "win":
return "Windows"
case "mac":
return "macOS"
case "linux":
return "Linux"
}
}
}
+25
View File
@@ -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"
}
}
+41
View File
@@ -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}.`);
}
+31
View File
@@ -0,0 +1,31 @@
// @ts-check
import { join } from "path/posix"
/**
* @param {"prerelease" | "stable"} channel
*/
const remoteChannelPath = channel => {
switch (channel) {
case "prerelease": return "insider"
case "stable": return "."
}
}
/**
* @param {import("./platform.mjs").System} os
*/
const remoteOsPath = os => {
switch (os) {
case "win": return "win"
case "linux": return "linux"
default: return "mac"
}
}
/**
* @param {string} root
* @param {"prerelease" | "stable"} channel
* @param {import("./platform.mjs").System} os
*/
export const getRemotePath = (root, channel, os) =>
join(root, remoteChannelPath(channel), remoteOsPath(os))
+3 -17
View File
@@ -1,25 +1,11 @@
// @ts-check
/**
* @typedef {import('ts-jest')}
* @type {import('@jest/types').Config.InitialOptions}
*/
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
transform: {
"^.+\\.tsx?$": "ts-jest"
},
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
moduleFileExtensions: [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
preset: "ts-jest",
testEnvironment: "node",
globals: {
"ts-jest": {
tsConfig: "tsconfig.test.json"
tsconfig: "tsconfig.test.json"
}
}
}
+16
View File
@@ -0,0 +1,16 @@
// @ts-check
import { join } from "node:path"
import { jsonSchema } from "optolith-tsjsonschemamd/renderers"
/** @type {import("optolith-tsjsonschemamd").GeneratorOptions} */
export default {
sourceDir: join("src", "shared", "schema"),
outputs: [
{
targetDir: join("src", "assets", "schema"),
renderer: jsonSchema({ spec: "Draft_07" }),
}
],
clean: true,
verbose: false
}
+19923 -18902
View File
File diff suppressed because it is too large Load Diff
+64 -67
View File
@@ -1,78 +1,74 @@
{
"name": "optolith",
"productName": "Optolith",
"version": "1.4.2",
"version": "2.0.0-alpha.1",
"description": "A generator for heroes for the P&P-RPG 'The Dark Eye'.",
"author": {
"name": "Lukas Obermann",
"email": "support@optolith.app"
},
"homepage": "https://github.com/elyukai/optolith-client",
"homepage": "https://optolith.app",
"license": "MPL-2.0",
"main": "app/main.js",
"main": ".webpack/main.js",
"dependencies": {
"@glennsl/bs-json": "5.0.2",
"ajv": "6.12.6",
"bs-platform": "7.3.2",
"electron-devtools-installer": "3.1.1",
"electron-log": "4.2.4",
"electron-updater": "4.3.1",
"@reduxjs/toolkit": "^1.9.5",
"adm-zip": "^0.5.1",
"ajv": "^8.12.0",
"ajv-formats": "^2.1.1",
"electron-extension-installer": "^1.2.0",
"electron-log": "^4.4.8",
"electron-updater": "^5.0.5",
"electron-window-state": "5.0.3",
"esm": "^3.2.25",
"moment": "2.25.3",
"moment": "^2.29.4",
"mousetrap": "1.6.5",
"react": "16.13.1",
"react-custom-scrollbars": "4.2.1",
"react-dom": "16.13.1",
"react-markdown": "4.3.1",
"react-portal": "4.2.1",
"react-redux": "7.2.1",
"react-textfit": "1.1.0",
"reason-react": "0.8.0",
"reductive": "2.0.1",
"redux": "4.0.5",
"optolith-database-schema": "^0.12.0",
"react": "^18.2.0",
"react-custom-scrollbars-2": "^4.5.0",
"react-dom": "^18.2.0",
"react-markdown": "^8.0.0",
"react-redux": "^8.0.7",
"redux-devtools-extension": "2.13.8",
"redux-thunk": "2.3.0",
"remark-breaks": "1.0.5",
"reselect": "4.0.0",
"rehype-raw": "^5.1.0",
"remark-breaks": "^2.0.2",
"remark-gfm": "^3.0.1",
"semver": "7.3.2",
"ssh2-sftp-client": "5.3.1",
"tslib": "1.11.2",
"tslib": "^2.3.1",
"yaml": "1.10.0"
},
"devDependencies": {
"@glennsl/bs-jest": "0.5.1",
"@types/classnames": "2.2.10",
"@types/jest": "25.2.1",
"@types/mousetrap": "1.6.3",
"@types/node": "13.13.5",
"@types/react": "16.9.34",
"@types/react-custom-scrollbars": "4.0.6",
"@types/react-dom": "16.9.7",
"@types/react-portal": "4.0.2",
"@types/react-redux": "7.1.8",
"@types/semver": "7.1.0",
"@typescript-eslint/eslint-plugin": "2.31.0",
"@typescript-eslint/parser": "2.31.0",
"custom-env": "2.0.1",
"dotenv": "8.2.0",
"electron": "10.1.3",
"electron-builder": "22.9.1",
"electron-notarize": "0.3.0",
"eslint": "6.8.0",
"eslint-plugin-react": "7.19.0",
"eslint-plugin-react-hooks": "4.0.0",
"fs-extra": "9.0.0",
"gentype": "3.22.0",
"html-webpack-plugin": "4.5.0",
"jest": "26.4.2",
"qusly-core": "2.5.2",
"sass": "1.28.0",
"ts-jest": "26.3.0",
"ts-loader": "8.0.7",
"typescript": "3.8.3",
"webpack": "5.3.1",
"webpack-cli": "4.1.0"
"@commitlint/cli": "11.0.0",
"@commitlint/config-conventional": "11.0.0",
"@types/mousetrap": "1.6.4",
"@types/node": "^20.2.5",
"@types/react": "^18.2.7",
"@types/react-dom": "^18.2.4",
"@types/react-redux": "7.1.11",
"@types/semver": "7.3.4",
"@typescript-eslint/eslint-plugin": "^5.10.0",
"@typescript-eslint/parser": "^5.10.0",
"css-loader": "^6.8.1",
"electron": "^24.1.3",
"electron-builder": "^23.1.0",
"electron-notarize": "^1.2.1",
"eslint": "^8.7.0",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-tsdoc": "^0.2.14",
"glob": "^10.2.6",
"html-webpack-plugin": "^5.5.1",
"mini-css-extract-plugin": "^2.7.6",
"optolith-tsjsonschemamd": "^0.9.3",
"resolve-url-loader": "^5.0.0",
"sass": "^1.62.1",
"sass-loader": "^13.3.1",
"ssh2-sftp-client": "^9.0.1",
"standard-version": "^9.3.1",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.2",
"tsx": "^3.12.7",
"typescript": "^5.0.4",
"webpack": "^5.84.1",
"webpack-cli": "^5.1.1"
},
"scripts": {
"prerelease:win": "set NODE_ENV=development && node ./deploy/buildInsiderWin.js",
@@ -83,18 +79,19 @@
"stable:mac": "NODE_ENV=production node ./deploy/buildMac.js",
"css:build": "sass --style=compressed src/Main.scss app/main.css",
"css:watch": "sass --watch --style=compressed src/Main.scss app/main.css",
"build": "npm run re:build && npm run css:build && npm run js:build",
"js:build": "webpack --config ./webpack.config.js",
"js:watch": "webpack -w --config ./webpack.config.js",
"build": "npm run ts:build && npm run css:build && npm run js:build",
"js:build": "webpack",
"js:watch": "webpack -w",
"ts:build": "tsc",
"ts:watch": "tsc -w",
"re:build": "bsb -make-world",
"re:watch": "bsb -make-world -w",
"re:clean": "bsb -clean-world",
"createschemas": "otjsmd",
"lint": "eslint \"src/\" --ext \".ts\" --ext \".tsx\"",
"start": "electron .",
"test": "jest",
"circ": "madge -c ./src"
"test": "glob -c \"node --loader tsx --test\" \"./src/shared/**/*.test.ts\"",
"circ": "madge -c ./src",
"release:main": "standard-version --skip.commit --skip.tag",
"release:pre": "standard-version --prerelease=alpha"
},
"repository": "github:elyukai/optolith-client"
"repository": "github:elyukai/optolith-client",
"type": "module"
}
+7 -4
View File
@@ -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))
}
}
-2
View File
@@ -1,2 +0,0 @@
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
-120
View File
@@ -1,120 +0,0 @@
type action =
| SetLocale(Either.t(string, string))
| SwitchActiveItemHints
| SetTheme(FilterOptions.theme)
| SwitchEditingHeroAfterCreationPhase
| SwitchAnimations
| SetTab(FilterOptions.tab)
| SetHeroListSortOrder(FilterOptions.heroListSortOptions)
| SetHeroListVisibilityFilter(FilterOptions.heroListVisibilityFilter)
| SetHeroListFilterText(string)
| CreateHero(Hero.t)
| OpenHero(int)
| SaveHero(int)
| DeleteHero(int)
| DuplicateHero(int)
| UndoHeroAction
| RedoHeroAction
| SetHeroName(string)
| SetCustomProfessionName(string)
| SetFamily(string)
| SetPlaceOfBirth(string)
| SetDateOfBirth(string)
| SetAge(string)
| SetHairColor(int)
| SetEyeColor(int)
| SetSize(string)
| SetWeight(string)
| SetTitle(string)
| SetSocialStatus(int)
| SetCharacteristics(string)
| SetOtherInfo(string)
| SetCultureAreaKnowledge(string)
| AddAdventurePoints(int)
| EndHeroCreation
| SetPactCategory(Maybe.t(int))
| SetPactLevel(int)
| SetPactTargetType(int)
| SetTargetDomain(int)
| SetCustomTargetDomain(string)
| SetTargetName(string)
| SetRace(int)
| SetRaceVariant(int)
| SetRacesSortOrder(FilterOptions.racesSortOptions)
| SetRacesFilterText(string)
| SetCulture(int)
| SetCulturesSortOrder(FilterOptions.culturesSortOptions)
| SetCulturesVisibilityFilter(FilterOptions.culturesVisibilityFilter)
| SetCulturesFilterText(string)
| SetProfession(int)
| SetProfessionVariant(int)
| SetProfessionsSortOrder(FilterOptions.professionsSortOptions)
| SetProfessionsVisibilityFilter(FilterOptions.professionsVisibilityFilter)
| SetProfessionsGroupVisibilityFilter(
FilterOptions.professionsGroupVisibilityFilter,
)
| SetProfessionsFilterText(string)
| AddAttributePoint(int)
| RemoveAttributePoint(int)
| AddLifePoint
| RemoveLifePoint
| AddArcaneEnergyPoint
| RemoveArcaneEnergyPoint
| AddKarmaPoint
| RemoveKarmaPoint
| AddLostLifePoint
| RemoveLostLifePoint
| AddLostLifePoints(int)
| AddBoughtBackArcaneEnergyPoint
| RemoveBoughtBackArcaneEnergyPoint
| AddLostArcaneEnergyPoint
| RemoveLostArcaneEnergyPoint
| AddLostArcaneEnergyPoints(int)
| AddBoughtBackKarmaPoint
| RemoveBoughtBackKarmaPoint
| AddLostKarmaPoint
| RemoveLostKarmaPoint
| AddLostKarmaPoints(int)
| SetAttributeAdjustment(int)
| AddCombatTechniquePoint(int)
| RemoveCombatTechniquePoint(int)
| SetCombatTechniquesSortOrder(FilterOptions.combatTechniquesSortOptions)
| SetCombatTechniquesFilterText(string)
| AddLiturgicalChant(int)
| RemoveLiturgicalChant(int)
| AddLiturgicalChantPoint(int)
| RemoveLiturgicalChantPoint(int)
| AddBlessing(int)
| RemoveBlessing(int)
| SetLiturgicalChantsSortOrder(FilterOptions.liturgicalChantsSortOptions)
| SetActiveLiturgicalChantsFilterText(string)
| SetInactiveLiturgicalChantsFilterText(string)
| SetPetName(string)
| SetPetSize(string)
| SetPetType(string)
| SetPetSpentAp(string)
| SetPetTotalAp(string)
| SetPetCourage(string)
| SetPetSagacity(string)
| SetPetIntuition(string)
| SetPetCharisma(string)
| SetPetDexterity(string)
| SetPetAgility(string)
| SetPetConstitution(string)
| SetPetStrength(string)
| SetPetLp(string)
| SetPetAe(string)
| SetPetSpi(string)
| SetPetTou(string)
| SetPetPro(string)
| SetPetIni(string)
| SetPetMov(string)
| SetPetAttack(string)
| SetPetAt(string)
| SetPetPa(string)
| SetPetDp(string)
| SetPetReach(string)
| SetPetActions(string)
| SetPetSkills(string)
| SetPetAbilities(string)
| SetPetNotes(string);
+9 -5
View File
@@ -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> ({
-2
View File
@@ -1,2 +0,0 @@
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
-23
View File
@@ -1,23 +0,0 @@
type action =
| AddAttributePoint(int)
| RemoveAttributePoint(int)
| AddLifePoint
| RemoveLifePoint
| AddArcaneEnergyPoint
| RemoveArcaneEnergyPoint
| AddKarmaPoint
| RemoveKarmaPoint
| AddLostLifePoint
| RemoveLostLifePoint
| AddLostLifePoints(int)
| AddBoughtBackArcaneEnergyPoint
| RemoveBoughtBackArcaneEnergyPoint
| AddLostArcaneEnergyPoint
| RemoveLostArcaneEnergyPoint
| AddLostArcaneEnergyPoints(int)
| AddBoughtBackKarmaPoint
| RemoveBoughtBackKarmaPoint
| AddLostKarmaPoint
| RemoveLostKarmaPoint
| AddLostKarmaPoints(int)
| SetAttributeAdjustment(int);
+4 -4
View File
@@ -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))
+2 -2
View File
@@ -284,14 +284,14 @@ export const removeDisAdvantage =
Race.A.eyeColors,
altF_ (() => fmapF (mrace_var) (RaceVariant.A.eyeColors)),
bindF (uncons),
fmap (fst)
fmap<Pair<number, List<number>>, number> (fst)
)
(race),
pipe (
Race.A.hairColors,
altF_ (() => fmapF (mrace_var) (RaceVariant.A.hairColors)),
bindF (uncons),
fmap (fst)
fmap<Pair<number, List<number>>, number> (fst)
)
(race)
)
+28 -24
View File
@@ -2,13 +2,14 @@ import { fmap } from "../../Data/Functor"
import { bindF, fromJust, isJust, Just, Maybe } from "../../Data/Maybe"
import { keys, lookup, lookupF, OrderedMap } from "../../Data/OrderedMap"
import { Record } from "../../Data/Record"
import { Pair } from "../../Data/Tuple"
import * as ActionTypes from "../Constants/ActionTypes"
import { IdPrefixes } from "../Constants/IdPrefixes"
import { MeleeCombatTechniqueId, RangedCombatTechniqueId } from "../Constants/Ids"
import { AttrId, MeleeCombatTechniqueId, RangedCombatTechniqueId } from "../Constants/Ids"
import { EquipmentSortOptions } from "../Models/Config"
import { EditItem } from "../Models/Hero/EditItem"
import { HitZoneArmor } from "../Models/Hero/HitZoneArmor"
import { Item } from "../Models/Hero/Item"
import { Item, Range } from "../Models/Hero/Item"
import { ItemTemplate } from "../Models/Wiki/ItemTemplate"
import { getHitZoneArmorsState, getItemEditorInstance, getItemsState, getWikiItemTemplates } from "../Selectors/stateSelectors"
import { getNewId, prefixId } from "../Utilities/IDUtils"
@@ -375,16 +376,17 @@ export const setDamageFlat = (value: string): SetDamageFlatAction => ({
export interface SetPrimaryAttributeAction {
type: ActionTypes.SET_ITEM_PRIMARY_ATTRIBUTE
payload: {
primary: Maybe<string>
primary: Maybe<AttrId | Pair<AttrId, AttrId>>
}
}
export const setPrimaryAttribute = (primary: Maybe<string>): SetPrimaryAttributeAction => ({
type: ActionTypes.SET_ITEM_PRIMARY_ATTRIBUTE,
payload: {
primary,
},
})
export const setPrimaryAttribute =
(primary: Maybe<AttrId | Pair<AttrId, AttrId>>): SetPrimaryAttributeAction => ({
type: ActionTypes.SET_ITEM_PRIMARY_ATTRIBUTE,
payload: {
primary,
},
})
export interface SetDamageThresholdAction {
type: ActionTypes.SET_ITEM_DAMAGE_THRESHOLD
@@ -510,15 +512,15 @@ export interface SetRangeAction {
type: ActionTypes.SET_ITEM_RANGE
payload: {
value: string
index: number
key: keyof Range
}
}
export const setRange = (value: string, index: number): SetRangeAction => ({
export const setRange = (value: string, key: keyof Range): SetRangeAction => ({
type: ActionTypes.SET_ITEM_RANGE,
payload: {
value,
index,
key,
},
})
@@ -716,12 +718,13 @@ export const applyItemTemplate: ReduxAction =
getItemEditorInstance,
bindF (EditItem.A.template),
bindF (lookupF (getWikiItemTemplates (getState ()))),
fmap (template => dispatch<ApplyItemTemplateAction> ({
type: ActionTypes.APPLY_ITEM_TEMPLATE,
payload: {
template,
},
}))
fmap ((template: Record<ItemTemplate>) =>
dispatch<ApplyItemTemplateAction> ({
type: ActionTypes.APPLY_ITEM_TEMPLATE,
payload: {
template,
},
}))
)
}
@@ -739,12 +742,13 @@ export const lockItemTemplate: ReduxAction =
getItemEditorInstance,
bindF (EditItem.A.template),
bindF (lookupF (getWikiItemTemplates (getState ()))),
fmap (template => dispatch<LockItemTemplateAction> ({
type: ActionTypes.LOCK_ITEM_TEMPLATE,
payload: {
template,
},
}))
fmap ((template: Record<ItemTemplate>) =>
dispatch<LockItemTemplateAction> ({
type: ActionTypes.LOCK_ITEM_TEMPLATE,
payload: {
template,
},
}))
)
}
+7 -8
View File
@@ -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,
+21 -26
View File
@@ -1,13 +1,13 @@
import { remote } from "electron"
import * as remote from "@electron/remote"
import * as fs from "fs"
import { extname, join } from "path"
import { handleE } from "../../Control/Exception"
import { Either, fromLeft_, fromRight_, isLeft, isRight } from "../../Data/Either"
import { Either, fromLeft_, fromRight_, isLeft } from "../../Data/Either"
import { flip } from "../../Data/Function"
import { fmap } from "../../Data/Functor"
import { over } from "../../Data/Lens"
import { List, notNull } from "../../Data/List"
import { alt_, bindF, elem, ensure, fromJust, isJust, isNothing, Just, listToMaybe, Maybe, maybe, Nothing } from "../../Data/Maybe"
import { bindF, elem, ensure, fromJust, isJust, Just, listToMaybe, Maybe, maybe, Nothing } from "../../Data/Maybe"
import { any, lookup, OrderedMap } from "../../Data/OrderedMap"
import { toObject } from "../../Data/Record"
import * as IO from "../../System/IO"
@@ -23,7 +23,7 @@ import { UISettingsState } from "../Models/UISettingsState"
import { StaticDataRecord } from "../Models/Wiki/WikiModel"
import { heroReducer } from "../Reducers/heroReducer"
import { user_data_path } from "../Selectors/envSelectors"
import { getCurrentHeroId, getFallbackLocaleId, getHeroes, getLocaleId, getWiki } from "../Selectors/stateSelectors"
import { getFallbackLocaleId, getHeroes, getLocaleId, getWiki } from "../Selectors/stateSelectors"
import { getUISettingsState } from "../Selectors/uisettingsSelectors"
import { prepareAPCache, prepareAPCacheForHero, writeCache } from "../Utilities/Cache"
import { translate } from "../Utilities/I18n"
@@ -37,6 +37,7 @@ import { deleteHeroFromFile, saveAllHeroesToFile, saveHeroToFile } from "../Util
import { ReduxAction } from "./Actions"
import { addAlert, addErrorAlert, addPrompt, AlertOptions, CustomPromptOptions, getErrorMsg, PromptButton } from "./AlertActions"
const UISSA = UISettingsState.A
export const requestConfigSave: ReduxAction<Promise<boolean>> =
@@ -69,13 +70,13 @@ export const requestConfigSave: ReduxAction<Promise<boolean>> =
IO.bindF (async res => {
console.log (res)
if (isLeft (res)) {
if (res.isLeft) {
const title = Just (translate (static_data) ("header.dialogs.saveconfigerror.title"))
const message = getErrorMsg (static_data)
(translate (static_data)
("header.dialogs.saveconfigerror.message"))
(res)
(res.value)
await dispatch (addErrorAlert (AlertOptions ({
title,
@@ -119,7 +120,7 @@ export const requestAllHeroesSave: ReduxAction<Promise<boolean>> =
const message = getErrorMsg (static_data)
(translate (static_data)
("header.dialogs.saveheroeserror.message"))
(res)
(fromLeft_ (res))
await dispatch (addErrorAlert (AlertOptions ({
title,
@@ -144,6 +145,7 @@ export const requestSaveCache = (all_saved: boolean): ReduxAction<Promise<Either
prepareAPCache (all_saved),
writeCache
)
.then (e => e.toOldEither ())
export interface ReceiveHeroSaveAction {
type: ActionTypes.RECEIVE_HERO_SAVE
@@ -168,20 +170,12 @@ const receiveHeroSave = (
})
export const requestHeroSave =
(mcurrent_id: Maybe<string>): ReduxAction<Promise<Maybe<string>>> =>
(id: string): ReduxAction<Promise<Maybe<string>>> =>
async (dispatch, getState) => {
const state = getState ()
const static_data = getWiki (state)
const heroes = getHeroes (state)
const mcurrent_id_alt = alt_ (mcurrent_id) (() => getCurrentHeroId (getState ()))
if (isNothing (mcurrent_id_alt)) {
return Promise.resolve (Nothing)
}
const id = fromJust (mcurrent_id_alt)
const mcache = prepareAPCacheForHero (state, id)
if (isJust (mcache)) {
@@ -194,7 +188,7 @@ export const requestHeroSave =
const message = getErrorMsg (static_data)
(translate (static_data)
("header.dialogs.saveheroeserror.message"))
(res)
(fromLeft_ (res))
await dispatch (addErrorAlert (AlertOptions ({
title,
@@ -210,13 +204,13 @@ export const requestHeroSave =
await dispatch (async (_, getState2) => writeCache (prepareAPCache (false)
(getState2 ())))
if (isLeft (cacheRes)) {
if (cacheRes.isLeft) {
const title = Just (translate (static_data) ("header.dialogs.saveheroeserror.title"))
const message = getErrorMsg (static_data)
(translate (static_data)
("header.dialogs.saveheroeserror.message"))
(cacheRes)
(cacheRes.value)
await dispatch (addErrorAlert (AlertOptions ({
title,
@@ -268,7 +262,7 @@ export const requestHeroDeletion =
const message = getErrorMsg (staticData)
(translate (staticData)
("header.dialogs.saveheroeserror.message"))
(res)
(fromLeft_ (res))
await dispatch (addErrorAlert (AlertOptions ({
title,
@@ -307,6 +301,7 @@ export const imgPathToBase64 =
return Just (path)
}
export const requestHeroExport =
(id: string): ReduxAction =>
async (dispatch, getState) => {
@@ -342,7 +337,7 @@ export const requestHeroExport =
(flip (IO.writeFile) (JSON.stringify (hero)))
(pmfilepath))
if (isRight (res)) {
if (res.isRight) {
await dispatch (addAlert (AlertOptions ({
message: translate (staticData) ("heroes.dialogs.herosaved"),
})))
@@ -353,7 +348,7 @@ export const requestHeroExport =
const message = getErrorMsg (staticData)
(translate (staticData)
("header.dialogs.saveheroeserror.message"))
(res)
(res.value)
await dispatch (addErrorAlert (AlertOptions ({
title,
@@ -395,14 +390,14 @@ export const requestHeroImport: ReduxAction<Promise<void>> =
if (isJust (mfile_path)) {
const staticData = getWiki (getState ())
const ehero = await parseHero (staticData)
const hero = await parseHero (staticData)
(fromJust (mfile_path))
if (isLeft (ehero)) {
await dispatch (addErrorAlert (fromLeft_ (ehero)))
if (hero.isLeft) {
await dispatch (addErrorAlert (hero.value))
}
else {
dispatch (receiveHeroImport (fromRight_ (ehero)))
dispatch (receiveHeroImport (hero.value))
}
}
}
+26 -28
View File
@@ -1,10 +1,9 @@
import { join } from "path"
import { handleE, toMsg } from "../../Control/Exception"
import { eitherToMaybe, fromLeft_, fromRight_, isLeft, Left } from "../../Data/Either"
import { fromLeft_, fromRight_, isLeft } from "../../Data/Either"
import { flip } from "../../Data/Function"
import { fmap } from "../../Data/Functor"
import { fromArray, intercalate, map } from "../../Data/List"
import { bindF, fromJust, fromMaybe, isJust, Just, Maybe } from "../../Data/Maybe"
import { fromJust, fromMaybe, isJust, Just, Maybe } from "../../Data/Maybe"
import { filter, keysSet, OrderedMap } from "../../Data/OrderedMap"
import { notMember } from "../../Data/OrderedSet"
import { Record } from "../../Data/Record"
@@ -23,6 +22,7 @@ import { user_data_path } from "../Selectors/envSelectors"
import { getHeroes } from "../Selectors/stateSelectors"
import { deleteCache, forceCacheIsAvailable, insertAppStateCache, insertCacheMap, insertHeroesCache, readCache } from "../Utilities/Cache"
import { getSystemLocale } from "../Utilities/IOUtils"
import { Maybe as NewMaybe } from "../Utilities/Maybe"
import { pipe, pipe_ } from "../Utilities/pipe"
import { parseConfig } from "../Utilities/Raw/JSON/Config"
import { RawHerolist } from "../Utilities/Raw/RawData"
@@ -85,17 +85,17 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
const did_update = await readUpdate ()
const dispatchErrorAlertOptions = async (options: Left<Record<AlertOptions>>) => {
await dispatch (addErrorAlert (fromLeft_ (options)))
const dispatchErrorAlertOptions = async (options: Record<AlertOptions>) => {
await dispatch (addErrorAlert (options))
dispatch (setLoadingDoneWithError ())
}
const dispatchError = async (err: Left<Error>) =>
dispatchErrorAlertOptions (Left (AlertOptions ({
title: Just ("Error"),
message: toMsg (fromLeft_ (err)),
})))
const dispatchError = async (err: Error) =>
dispatchErrorAlertOptions (AlertOptions ({
title: Just ("Error"),
message: toMsg (err),
}))
console.log (did_update)
@@ -103,7 +103,7 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
const deleted = await deleteCache ()
if (isLeft (deleted)) {
return dispatchError (deleted)
return dispatchError (fromLeft_ (deleted))
}
}
@@ -111,26 +111,26 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
console.log (show (update_written))
if (isLeft (update_written)) {
return dispatchError (update_written)
if (update_written.isLeft) {
return dispatchError (update_written.value)
}
const econfig = await parseConfig ()
const config = await parseConfig ()
if (isLeft (econfig)) {
return dispatchErrorAlertOptions (econfig)
if (config.isLeft) {
return dispatchErrorAlertOptions (config.value)
}
const config = fromRight_ (econfig)
console.log (show (config.value))
console.log (show (config))
const mheroes = await pipe_ (
const mheroes = (await pipe_ (
join (user_data_path, "heroes.json"),
IO.readFile,
handleE,
fmap (pipe (eitherToMaybe, bindF (parseJSON as (x: string) => Maybe<RawHerolist>)))
)
handleE
))
.toMaybe ()
.bind (x => parseJSON (x) as NewMaybe<RawHerolist>)
.toOldMaybe ()
const mcache = await readCache ()
@@ -142,7 +142,6 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
fromLeft_,
parseErrorsToPairStr,
pairStrErrorToAlertOptions,
Left,
dispatchErrorAlertOptions
)
}
@@ -151,8 +150,8 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
const estatic_data =
await parseStaticData (
fromMaybe (defaultLocale) (Config.A.locale (config)),
Config.A.fallbackLocale (config)
fromMaybe (defaultLocale) (Config.A.locale (config.value)),
Config.A.fallbackLocale (config.value)
)
if (isLeft (estatic_data)) {
@@ -161,7 +160,6 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
fromLeft_,
parseErrorsToPairStr,
pairStrErrorToAlertOptions,
Left,
dispatchErrorAlertOptions
)
}
@@ -170,7 +168,7 @@ export const requestInitialData: ReduxAction<Promise<void>> = async (dispatch, g
staticData: fromRight_ (estatic_data),
heroes: mheroes,
defaultLocale,
config: Just (config),
config: Just (config.value),
cache: mcache,
availableLangs: available_langs,
}
+1 -3
View File
@@ -2,7 +2,6 @@ import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Da
import { lookup } from "../../Data/OrderedMap"
import { Record } from "../../Data/Record"
import * as ActionTypes from "../Constants/ActionTypes"
import { icFromJs } from "../Constants/Groups"
import { ChantsSortOptions } from "../Models/Config"
import { HeroModel } from "../Models/Hero/HeroModel"
import { LiturgicalChant } from "../Models/Wiki/LiturgicalChant"
@@ -10,7 +9,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
import { getCurrentHeroPresent, getLiturgicalChants, getWikiLiturgicalChants } from "../Selectors/stateSelectors"
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
import { getAPForActivatation } from "../Utilities/IC.gen"
import { getAPForActivatation } from "../Utilities/ImprovementCost"
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
import { pipe_ } from "../Utilities/pipe"
import { ReduxAction } from "./Actions"
@@ -45,7 +44,6 @@ export const addLiturgicalChant =
(pipe_ (
staticLiturgicalChant,
LiturgicalChant.A.ic,
icFromJs,
getAPForActivatation
)))
)
+4 -4
View File
@@ -1,11 +1,11 @@
import { PrintToPDFOptions } from "electron"
import { handleE } from "../../Control/Exception"
import { Either, isLeft, isRight, Right } from "../../Data/Either"
import { flip } from "../../Data/Function"
import { appendStr } from "../../Data/List"
import { isJust, maybe } from "../../Data/Maybe"
import * as IO from "../../System/IO"
import { getCurrentHeroName, getWiki } from "../Selectors/stateSelectors"
import { Either, Right } from "../Utilities/Either"
import { translate } from "../Utilities/I18n"
import { showSaveDialog, windowPrintToPDF } from "../Utilities/IOUtils"
import { pipe } from "../Utilities/pipe"
@@ -42,15 +42,15 @@ export const requestPrintHeroToPDF = (): ReduxAction<Promise<void>> =>
(pipe (flip (IO.writeFile) (data), handleE))
(path)
if (isRight (res) && isJust (path)) {
if (res.isRight && isJust (path)) {
await dispatch (addAlert (AlertOptions ({
message: translate (staticData) ("sheets.dialogs.pdfsaved"),
})))
}
else if (isLeft (res)) {
else if (res.isLeft) {
await dispatch (addDefaultErrorAlert (staticData)
(translate (staticData)
("sheets.dialogs.pdfsaveerror.title"))
(res))
(res.value))
}
}
+2 -3
View File
@@ -2,7 +2,6 @@ import { bind, bindF, fromJust, isJust, isNothing, join, liftM2 } from "../../Da
import { lookup } from "../../Data/OrderedMap"
import { Record } from "../../Data/Record"
import * as ActionTypes from "../Constants/ActionTypes"
import { icFromJs } from "../Constants/Groups"
import { SpellsSortOptions } from "../Models/Config"
import { HeroModel } from "../Models/Hero/HeroModel"
import { Cantrip } from "../Models/Wiki/Cantrip"
@@ -11,7 +10,7 @@ import { getAvailableAPMap } from "../Selectors/adventurePointsSelectors"
import { getIsInCharacterCreation } from "../Selectors/phaseSelectors"
import { getCurrentHeroPresent, getSpells, getWikiCantrips, getWikiSpells } from "../Selectors/stateSelectors"
import { getMissingAP } from "../Utilities/AdventurePoints/adventurePointsUtils"
import { getAPForActivatation } from "../Utilities/IC.gen"
import { getAPForActivatation } from "../Utilities/ImprovementCost"
import { getAreSufficientAPAvailableForIncrease } from "../Utilities/Increasable/increasableUtils"
import { pipe_ } from "../Utilities/pipe"
import { ReduxAction } from "./Actions"
@@ -43,7 +42,7 @@ export const addSpell =
bindF (hero => getAvailableAPMap (HeroModel.A.id (hero)) (state, { hero })),
join,
bindF (getMissingAP (getIsInCharacterCreation (state))
(pipe_ (staticSpell, Spell.A.ic, icFromJs, getAPForActivatation)))
(pipe_ (staticSpell, Spell.A.ic, getAPForActivatation)))
)
if (isNothing (missingAPForInc)) {
+1 -1
View File
@@ -24,7 +24,7 @@ export const setUpdateDownloadProgress =
})
enum UpdateAvailableResponse {
UpdateAndRestart, Cancel
UpdateAndRestart, Cancel
}
export const updateAvailable =
+2 -2
View File
@@ -1,3 +1,5 @@
/* eslint-disable @typescript-eslint/no-redeclare */
export const SET_LOCALE = "SET_LOCALE"
export type SET_LOCALE = "SET_LOCALE"
@@ -390,8 +392,6 @@ export const EDIT_ITEM = "EDIT_ITEM"
export type EDIT_ITEM = "EDIT_ITEM"
export const REMOVE_ITEM = "REMOVE_ITEM"
export type REMOVE_ITEM = "REMOVE_ITEM"
export const SET_ITEM = "SET_ITEM"
export type SET_ITEM = "SET_ITEM"
export const SET_ITEMS_SORT_ORDER = "SET_ITEMS_SORT_ORDER"
export type SET_ITEMS_SORT_ORDER = "SET_ITEMS_SORT_ORDER"
export const SET_DUCATES = "SET_DUCATES"
-2
View File
@@ -1,2 +0,0 @@
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */
-97
View File
@@ -1,97 +0,0 @@
type heroListSortOptions =
| Name
| DateModified;
type heroListVisibilityFilter =
| All
| Own
| Shared;
type racesSortOptions =
| Name
| Cost;
type culturesSortOptions =
| Name
| Cost;
type culturesVisibilityFilter =
| All
| Common;
type professionsSortOptions =
| Name
| Cost;
type professionsVisibilityFilter =
| All
| Common;
type professionsGroupVisibilityFilter =
| All
| Mundane
| Magical
| Blessed;
type skillsSortOptions =
| Name
| Group
| IC;
type specialAbilitiesSortOptions =
| Name
| Group;
type combatTechniquesSortOptions =
| Name
| Group
| IC;
type spellsSortOptions =
| Name
| Group
| Property
| IC;
type liturgicalChantsSortOptions =
| Name
| Group
| IC;
type equipmentSortOptions =
| Name
| Group
| Where
| Weight;
type theme =
| Dark
| Light;
type tab =
| Herolist
| Grouplist
| Wiki
| Faq
| Imprint
| ThirdPartyLicenses
| LastChanges
| Profile
| PersonalData
| CharacterSheet
| Pact
| Rules
| Races
| Cultures
| Professions
| Attributes
| Advantages
| Disadvantages
| Skills
| CombatTechniques
| SpecialAbilities
| Spells
| LiturgicalChants
| Equipment
| ZoneArmor
| Pets;
-31
View File
@@ -1,4 +1,3 @@
import { t as _IC } from "../Utilities/IC.gen"
export enum ProfessionGroup {
Mundane = 1,
@@ -26,36 +25,6 @@ export enum ProfessionSubGroup {
BlessedOnesOfTheTwelveGods = 1,
}
export enum IC {
A = 1,
B,
C,
D,
E,
}
export const icFromJs = (x: IC): _IC => {
switch (x) {
case IC.A: return "A"
case IC.B: return "B"
case IC.C: return "C"
case IC.D: return "D"
case IC.E: return "E"
default: throw new TypeError (`icFromJs: ${x} is not an IC`)
}
}
export const icToJs = (x: _IC): IC => {
switch (x) {
case "A": return IC.A
case "B": return IC.B
case "C": return IC.C
case "D": return IC.D
case "E": return IC.E
default: throw new TypeError (`icToJs: ${x} is not an IC`)
}
}
export enum SkillGroup {
Physical = 1,
Social = 2,
File diff suppressed because it is too large Load Diff
-88
View File
@@ -1,88 +0,0 @@
/* TypeScript file generated from Id.re by genType. */
/* eslint-disable import/first */
// tslint:disable-next-line:interface-over-type-literal
export type t =
{ tag: "ExperienceLevel"; value: number }
| { tag: "Race"; value: number }
| { tag: "Culture"; value: number }
| { tag: "Profession"; value: number }
| { tag: "Attribute"; value: number }
| { tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number }
| { tag: "Spell"; value: number }
| { tag: "Curse"; value: number }
| { tag: "ElvenMagicalSong"; value: number }
| { tag: "DominationRitual"; value: number }
| { tag: "MagicalMelody"; value: number }
| { tag: "MagicalDance"; value: number }
| { tag: "RogueSpell"; value: number }
| { tag: "AnimistForce"; value: number }
| { tag: "GeodeRitual"; value: number }
| { tag: "ZibiljaRitual"; value: number }
| { tag: "Cantrip"; value: number }
| { tag: "LiturgicalChant"; value: number }
| { tag: "Blessing"; value: number }
| { tag: "SpecialAbility"; value: number }
| { tag: "Item"; value: number }
| { tag: "EquipmentPackage"; value: number }
| { tag: "HitZoneArmor"; value: number }
| { tag: "Familiar"; value: number }
| { tag: "Animal"; value: number }
| { tag: "FocusRule"; value: number }
| { tag: "OptionalRule"; value: number }
| { tag: "Condition"; value: number }
| { tag: "State"; value: number };
export type Id = t;
// tslint:disable-next-line:interface-over-type-literal
export type activatable =
{ tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "SpecialAbility"; value: number };
export type ActivatableId = activatable;
// tslint:disable-next-line:interface-over-type-literal
export type activatableAndSkill =
{ tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "SpecialAbility"; value: number }
| { tag: "Spell"; value: number }
| { tag: "LiturgicalChant"; value: number };
export type ActivatableAndSkillId = activatableAndSkill;
// tslint:disable-next-line:interface-over-type-literal
export type activatableSkill =
{ tag: "Spell"; value: number }
| { tag: "LiturgicalChant"; value: number };
export type ActivatableSkillId = activatableSkill;
// tslint:disable-next-line:interface-over-type-literal
export type permanentSkill =
{ tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number };
export type PermanentSkillId = permanentSkill;
// tslint:disable-next-line:interface-over-type-literal
export type selectOption =
{ tag: "Generic"; value: number }
| { tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number }
| { tag: "Spell"; value: number }
| { tag: "Cantrip"; value: number }
| { tag: "LiturgicalChant"; value: number }
| { tag: "Blessing"; value: number };
export type SelectOptionId = selectOption;
// tslint:disable-next-line:interface-over-type-literal
export type hitZoneArmorZoneItem =
{ tag: "Template"; value: number }
| { tag: "Custom"; value: number };
export type HitZoneArmorZoneItemId = hitZoneArmorZoneItem;
// tslint:disable-next-line:interface-over-type-literal
export type phase = "Outline" | "Definition" | "Advancement";
export type Phase = phase;
File diff suppressed because it is too large Load Diff
+1
View File
@@ -34,6 +34,7 @@ type IdPrefixesByCategory = {
[K in Category]: IdPrefixes
}
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const IdPrefixesByCategory = Object.freeze<IdPrefixesByCategory> ({
[Category.ADVANTAGES]: IdPrefixes.ADVANTAGES,
[Category.ATTRIBUTES]: IdPrefixes.ATTRIBUTES,
File diff suppressed because it is too large Load Diff
-956
View File
@@ -1,956 +0,0 @@
/* TypeScript file generated from Ids.re by genType. */
/* eslint-disable import/first */
// tslint:disable-next-line:no-var-requires
const IdsBS = require('./Ids.bs');
// tslint:disable-next-line:interface-over-type-literal
export type id =
{ tag: "ExperienceLevel"; value: number }
| { tag: "Race"; value: number }
| { tag: "Culture"; value: number }
| { tag: "Profession"; value: number }
| { tag: "Attribute"; value: number }
| { tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number }
| { tag: "Spell"; value: number }
| { tag: "Curse"; value: number }
| { tag: "ElvenMagicalSong"; value: number }
| { tag: "DominationRitual"; value: number }
| { tag: "MagicalMelody"; value: number }
| { tag: "MagicalDance"; value: number }
| { tag: "RogueSpell"; value: number }
| { tag: "AnimistForce"; value: number }
| { tag: "GeodeRitual"; value: number }
| { tag: "ZibiljaRitual"; value: number }
| { tag: "Cantrip"; value: number }
| { tag: "LiturgicalChant"; value: number }
| { tag: "Blessing"; value: number }
| { tag: "SpecialAbility"; value: number }
| { tag: "Item"; value: number }
| { tag: "EquipmentPackage"; value: number }
| { tag: "HitZoneArmor"; value: number }
| { tag: "Familiar"; value: number }
| { tag: "Animal"; value: number }
| { tag: "FocusRule"; value: number }
| { tag: "OptionalRule"; value: number }
| { tag: "Condition"; value: number }
| { tag: "State"; value: number };
export type Id = id;
// tslint:disable-next-line:interface-over-type-literal
export type activatableId =
{ tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "SpecialAbility"; value: number };
export type ActivatableId = activatableId;
// tslint:disable-next-line:interface-over-type-literal
export type activatableAndSkillId =
{ tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "SpecialAbility"; value: number }
| { tag: "Spell"; value: number }
| { tag: "LiturgicalChant"; value: number };
export type ActivatableAndSkillId = activatableAndSkillId;
// tslint:disable-next-line:interface-over-type-literal
export type activatableSkillId =
{ tag: "Spell"; value: number }
| { tag: "LiturgicalChant"; value: number };
export type ActivatableSkillId = activatableSkillId;
// tslint:disable-next-line:interface-over-type-literal
export type skillId =
{ tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number };
export type SkillId = skillId;
// tslint:disable-next-line:interface-over-type-literal
export type selectOptionId =
{ tag: "Generic"; value: number }
| { tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number }
| { tag: "Spell"; value: number }
| { tag: "Cantrip"; value: number }
| { tag: "LiturgicalChant"; value: number }
| { tag: "Blessing"; value: number };
export type SelectOptionId = selectOptionId;
// tslint:disable-next-line:interface-over-type-literal
export type hitZoneArmorZoneItemId =
{ tag: "Template"; value: number }
| { tag: "Custom"; value: number };
export type HitZoneArmorZoneItemId = hitZoneArmorZoneItemId;
// tslint:disable-next-line:interface-over-type-literal
export type Phase_t = "Outline" | "Definition" | "Advancement";
export type Phase = Phase_t;
export const Phase_rcp: number = IdsBS.Phase.rcp;
export const Phase_creation: number = IdsBS.Phase.creation;
export const Phase_inGame: number = IdsBS.Phase.inGame;
export const ExperienceLevelId_inexperienced: string = IdsBS.ExperienceLevelId.inexperienced;
export const ExperienceLevelId_ordinary: string = IdsBS.ExperienceLevelId.ordinary;
export const ExperienceLevelId_experienced: string = IdsBS.ExperienceLevelId.experienced;
export const ExperienceLevelId_competent: string = IdsBS.ExperienceLevelId.competent;
export const ExperienceLevelId_masterly: string = IdsBS.ExperienceLevelId.masterly;
export const ExperienceLevelId_brilliant: string = IdsBS.ExperienceLevelId.brilliant;
export const ExperienceLevelId_legendary: string = IdsBS.ExperienceLevelId.legendary;
export const RaceId_humans: string = IdsBS.RaceId.humans;
export const RaceId_elves: string = IdsBS.RaceId.elves;
export const RaceId_halfElves: string = IdsBS.RaceId.halfElves;
export const RaceId_dwarves: string = IdsBS.RaceId.dwarves;
export const CultureId_gladeElves: string = IdsBS.CultureId.gladeElves;
export const CultureId_firnelves: string = IdsBS.CultureId.firnelves;
export const CultureId_woodElves: string = IdsBS.CultureId.woodElves;
export const CultureId_steppenelfen: string = IdsBS.CultureId.steppenelfen;
export const ProfessionId_customProfession: string = IdsBS.ProfessionId.customProfession;
export const AttrId_courage: string = IdsBS.AttrId.courage;
export const AttrId_sagacity: string = IdsBS.AttrId.sagacity;
export const AttrId_intuition: string = IdsBS.AttrId.intuition;
export const AttrId_charisma: string = IdsBS.AttrId.charisma;
export const AttrId_dexterity: string = IdsBS.AttrId.dexterity;
export const AttrId_agility: string = IdsBS.AttrId.agility;
export const AttrId_constitution: string = IdsBS.AttrId.constitution;
export const AttrId_strength: string = IdsBS.AttrId.strength;
export const DCId_lifePoints: string = IdsBS.DCId.lifePoints;
export const DCId_arcaneEnergy: string = IdsBS.DCId.arcaneEnergy;
export const DCId_karmaPoints: string = IdsBS.DCId.karmaPoints;
export const DCId_spirit: string = IdsBS.DCId.spirit;
export const DCId_toughness: string = IdsBS.DCId.toughness;
export const DCId_dodge: string = IdsBS.DCId.dodge;
export const DCId_initiative: string = IdsBS.DCId.initiative;
export const DCId_movement: string = IdsBS.DCId.movement;
export const DCId_woundThreshold: string = IdsBS.DCId.woundThreshold;
export const AdvantageId_aptitude: string = IdsBS.AdvantageId.aptitude;
export const AdvantageId_nimble: string = IdsBS.AdvantageId.nimble;
export const AdvantageId_blessed: string = IdsBS.AdvantageId.blessed;
export const AdvantageId_luck: string = IdsBS.AdvantageId.luck;
export const AdvantageId_exceptionalSkill: string = IdsBS.AdvantageId.exceptionalSkill;
export const AdvantageId_exceptionalCombatTechnique: string = IdsBS.AdvantageId.exceptionalCombatTechnique;
export const AdvantageId_increasedAstralPower: string = IdsBS.AdvantageId.increasedAstralPower;
export const AdvantageId_increasedKarmaPoints: string = IdsBS.AdvantageId.increasedKarmaPoints;
export const AdvantageId_increasedLifePoints: string = IdsBS.AdvantageId.increasedLifePoints;
export const AdvantageId_increasedSpirit: string = IdsBS.AdvantageId.increasedSpirit;
export const AdvantageId_increasedToughness: string = IdsBS.AdvantageId.increasedToughness;
export const AdvantageId_immunityToPoison: string = IdsBS.AdvantageId.immunityToPoison;
export const AdvantageId_immunityToDisease: string = IdsBS.AdvantageId.immunityToDisease;
export const AdvantageId_magicalAttunement: string = IdsBS.AdvantageId.magicalAttunement;
export const AdvantageId_rich: string = IdsBS.AdvantageId.rich;
export const AdvantageId_sociallyAdaptable: string = IdsBS.AdvantageId.sociallyAdaptable;
export const AdvantageId_inspireConfidence: string = IdsBS.AdvantageId.inspireConfidence;
export const AdvantageId_weaponAptitude: string = IdsBS.AdvantageId.weaponAptitude;
export const AdvantageId_spellcaster: string = IdsBS.AdvantageId.spellcaster;
export const AdvantageId_unyielding: string = IdsBS.AdvantageId.unyielding;
export const AdvantageId_largeSpellSelection: string = IdsBS.AdvantageId.largeSpellSelection;
export const AdvantageId_hatredOf: string = IdsBS.AdvantageId.hatredOf;
export const AdvantageId_prediger: string = IdsBS.AdvantageId.prediger;
export const AdvantageId_visionaer: string = IdsBS.AdvantageId.visionaer;
export const AdvantageId_zahlreichePredigten: string = IdsBS.AdvantageId.zahlreichePredigten;
export const AdvantageId_zahlreicheVisionen: string = IdsBS.AdvantageId.zahlreicheVisionen;
export const AdvantageId_leichterGang: string = IdsBS.AdvantageId.leichterGang;
export const AdvantageId_einkommen: string = IdsBS.AdvantageId.einkommen;
export const DisadvantageId_afraidOf: string = IdsBS.DisadvantageId.afraidOf;
export const DisadvantageId_poor: string = IdsBS.DisadvantageId.poor;
export const DisadvantageId_slow: string = IdsBS.DisadvantageId.slow;
export const DisadvantageId_noFlyingBalm: string = IdsBS.DisadvantageId.noFlyingBalm;
export const DisadvantageId_noFamiliar: string = IdsBS.DisadvantageId.noFamiliar;
export const DisadvantageId_magicalRestriction: string = IdsBS.DisadvantageId.magicalRestriction;
export const DisadvantageId_decreasedArcanePower: string = IdsBS.DisadvantageId.decreasedArcanePower;
export const DisadvantageId_decreasedKarmaPoints: string = IdsBS.DisadvantageId.decreasedKarmaPoints;
export const DisadvantageId_decreasedLifePoints: string = IdsBS.DisadvantageId.decreasedLifePoints;
export const DisadvantageId_decreasedSpirit: string = IdsBS.DisadvantageId.decreasedSpirit;
export const DisadvantageId_decreasedToughness: string = IdsBS.DisadvantageId.decreasedToughness;
export const DisadvantageId_badLuck: string = IdsBS.DisadvantageId.badLuck;
export const DisadvantageId_personalityFlaw: string = IdsBS.DisadvantageId.personalityFlaw;
export const DisadvantageId_principles: string = IdsBS.DisadvantageId.principles;
export const DisadvantageId_badHabit: string = IdsBS.DisadvantageId.badHabit;
export const DisadvantageId_negativeTrait: string = IdsBS.DisadvantageId.negativeTrait;
export const DisadvantageId_stigma: string = IdsBS.DisadvantageId.stigma;
export const DisadvantageId_deaf: string = IdsBS.DisadvantageId.deaf;
export const DisadvantageId_incompetent: string = IdsBS.DisadvantageId.incompetent;
export const DisadvantageId_obligations: string = IdsBS.DisadvantageId.obligations;
export const DisadvantageId_maimed: string = IdsBS.DisadvantageId.maimed;
export const DisadvantageId_brittleBones: string = IdsBS.DisadvantageId.brittleBones;
export const DisadvantageId_smallSpellSelection: string = IdsBS.DisadvantageId.smallSpellSelection;
export const DisadvantageId_wenigePredigten: string = IdsBS.DisadvantageId.wenigePredigten;
export const DisadvantageId_wenigeVisionen: string = IdsBS.DisadvantageId.wenigeVisionen;
export const SkillId_flying: string = IdsBS.SkillId.flying;
export const SkillId_gaukelei: string = IdsBS.SkillId.gaukelei;
export const SkillId_climbing: string = IdsBS.SkillId.climbing;
export const SkillId_bodyControl: string = IdsBS.SkillId.bodyControl;
export const SkillId_featOfStrength: string = IdsBS.SkillId.featOfStrength;
export const SkillId_riding: string = IdsBS.SkillId.riding;
export const SkillId_swimming: string = IdsBS.SkillId.swimming;
export const SkillId_selfControl: string = IdsBS.SkillId.selfControl;
export const SkillId_singing: string = IdsBS.SkillId.singing;
export const SkillId_perception: string = IdsBS.SkillId.perception;
export const SkillId_dancing: string = IdsBS.SkillId.dancing;
export const SkillId_pickpocket: string = IdsBS.SkillId.pickpocket;
export const SkillId_stealth: string = IdsBS.SkillId.stealth;
export const SkillId_carousing: string = IdsBS.SkillId.carousing;
export const SkillId_persuasion: string = IdsBS.SkillId.persuasion;
export const SkillId_seduction: string = IdsBS.SkillId.seduction;
export const SkillId_intimidation: string = IdsBS.SkillId.intimidation;
export const SkillId_etiquette: string = IdsBS.SkillId.etiquette;
export const SkillId_streetwise: string = IdsBS.SkillId.streetwise;
export const SkillId_empathy: string = IdsBS.SkillId.empathy;
export const SkillId_fastTalk: string = IdsBS.SkillId.fastTalk;
export const SkillId_disguise: string = IdsBS.SkillId.disguise;
export const SkillId_willpower: string = IdsBS.SkillId.willpower;
export const SkillId_tracking: string = IdsBS.SkillId.tracking;
export const SkillId_ropes: string = IdsBS.SkillId.ropes;
export const SkillId_fishing: string = IdsBS.SkillId.fishing;
export const SkillId_orienting: string = IdsBS.SkillId.orienting;
export const SkillId_plantLore: string = IdsBS.SkillId.plantLore;
export const SkillId_animalLore: string = IdsBS.SkillId.animalLore;
export const SkillId_survival: string = IdsBS.SkillId.survival;
export const SkillId_gambling: string = IdsBS.SkillId.gambling;
export const SkillId_geography: string = IdsBS.SkillId.geography;
export const SkillId_history: string = IdsBS.SkillId.history;
export const SkillId_religions: string = IdsBS.SkillId.religions;
export const SkillId_warfare: string = IdsBS.SkillId.warfare;
export const SkillId_magicalLore: string = IdsBS.SkillId.magicalLore;
export const SkillId_mechanics: string = IdsBS.SkillId.mechanics;
export const SkillId_math: string = IdsBS.SkillId.math;
export const SkillId_law: string = IdsBS.SkillId.law;
export const SkillId_mythsAndLegends: string = IdsBS.SkillId.mythsAndLegends;
export const SkillId_sphereLore: string = IdsBS.SkillId.sphereLore;
export const SkillId_astronomy: string = IdsBS.SkillId.astronomy;
export const SkillId_alchemy: string = IdsBS.SkillId.alchemy;
export const SkillId_sailing: string = IdsBS.SkillId.sailing;
export const SkillId_driving: string = IdsBS.SkillId.driving;
export const SkillId_commerce: string = IdsBS.SkillId.commerce;
export const SkillId_treatPoison: string = IdsBS.SkillId.treatPoison;
export const SkillId_treatDisease: string = IdsBS.SkillId.treatDisease;
export const SkillId_treatSoul: string = IdsBS.SkillId.treatSoul;
export const SkillId_treatWounds: string = IdsBS.SkillId.treatWounds;
export const SkillId_woodworking: string = IdsBS.SkillId.woodworking;
export const SkillId_prepareFood: string = IdsBS.SkillId.prepareFood;
export const SkillId_leatherworking: string = IdsBS.SkillId.leatherworking;
export const SkillId_artisticAbility: string = IdsBS.SkillId.artisticAbility;
export const SkillId_metalworking: string = IdsBS.SkillId.metalworking;
export const SkillId_music: string = IdsBS.SkillId.music;
export const SkillId_pickLocks: string = IdsBS.SkillId.pickLocks;
export const SkillId_earthencraft: string = IdsBS.SkillId.earthencraft;
export const SkillId_clothworking: string = IdsBS.SkillId.clothworking;
export const CombatTechniqueId_crossbows: string = IdsBS.CombatTechniqueId.crossbows;
export const CombatTechniqueId_bows: string = IdsBS.CombatTechniqueId.bows;
export const CombatTechniqueId_daggers: string = IdsBS.CombatTechniqueId.daggers;
export const CombatTechniqueId_fencingWeapons: string = IdsBS.CombatTechniqueId.fencingWeapons;
export const CombatTechniqueId_impactWeapons: string = IdsBS.CombatTechniqueId.impactWeapons;
export const CombatTechniqueId_chainWeapons: string = IdsBS.CombatTechniqueId.chainWeapons;
export const CombatTechniqueId_lances: string = IdsBS.CombatTechniqueId.lances;
export const CombatTechniqueId_brawling: string = IdsBS.CombatTechniqueId.brawling;
export const CombatTechniqueId_shields: string = IdsBS.CombatTechniqueId.shields;
export const CombatTechniqueId_slings: string = IdsBS.CombatTechniqueId.slings;
export const CombatTechniqueId_swords: string = IdsBS.CombatTechniqueId.swords;
export const CombatTechniqueId_polearms: string = IdsBS.CombatTechniqueId.polearms;
export const CombatTechniqueId_thrownWeapons: string = IdsBS.CombatTechniqueId.thrownWeapons;
export const CombatTechniqueId_twoHandedImpactWeapons: string = IdsBS.CombatTechniqueId.twoHandedImpactWeapons;
export const CombatTechniqueId_twoHandedSwords: string = IdsBS.CombatTechniqueId.twoHandedSwords;
export const CombatTechniqueId_spittingFire: string = IdsBS.CombatTechniqueId.spittingFire;
export const CombatTechniqueId_blowguns: string = IdsBS.CombatTechniqueId.blowguns;
export const CombatTechniqueId_discuses: string = IdsBS.CombatTechniqueId.discuses;
export const CombatTechniqueId_faecher: string = IdsBS.CombatTechniqueId.faecher;
export const CombatTechniqueId_spiesswaffen: string = IdsBS.CombatTechniqueId.spiesswaffen;
export const SpecialAbilityId_skillSpecialization: string = IdsBS.SpecialAbilityId.skillSpecialization;
export const SpecialAbilityId_terrainKnowledge: string = IdsBS.SpecialAbilityId.terrainKnowledge;
export const SpecialAbilityId_craftInstruments: string = IdsBS.SpecialAbilityId.craftInstruments;
export const SpecialAbilityId_hunter: string = IdsBS.SpecialAbilityId.hunter;
export const SpecialAbilityId_areaKnowledge: string = IdsBS.SpecialAbilityId.areaKnowledge;
export const SpecialAbilityId_literacy: string = IdsBS.SpecialAbilityId.literacy;
export const SpecialAbilityId_language: string = IdsBS.SpecialAbilityId.language;
export const SpecialAbilityId_combatReflexes: string = IdsBS.SpecialAbilityId.combatReflexes;
export const SpecialAbilityId_improvedDodge: string = IdsBS.SpecialAbilityId.improvedDodge;
export const SpecialAbilityId_traditionGuildMages: number = IdsBS.SpecialAbilityId.traditionGuildMages;
export const SpecialAbilityId_propertyKnowledge: string = IdsBS.SpecialAbilityId.propertyKnowledge;
export const SpecialAbilityId_propertyFocus: string = IdsBS.SpecialAbilityId.propertyFocus;
export const SpecialAbilityId_aspectKnowledge: string = IdsBS.SpecialAbilityId.aspectKnowledge;
export const SpecialAbilityId_traditionChurchOfPraios: string = IdsBS.SpecialAbilityId.traditionChurchOfPraios;
export const SpecialAbilityId_feuerschlucker: string = IdsBS.SpecialAbilityId.feuerschlucker;
export const SpecialAbilityId_combatStyleCombination: string = IdsBS.SpecialAbilityId.combatStyleCombination;
export const SpecialAbilityId_adaptionZauber: string = IdsBS.SpecialAbilityId.adaptionZauber;
export const SpecialAbilityId_exorzist: string = IdsBS.SpecialAbilityId.exorzist;
export const SpecialAbilityId_favoriteSpellwork: string = IdsBS.SpecialAbilityId.favoriteSpellwork;
export const SpecialAbilityId_traditionWitches: string = IdsBS.SpecialAbilityId.traditionWitches;
export const SpecialAbilityId_magicStyleCombination: string = IdsBS.SpecialAbilityId.magicStyleCombination;
export const SpecialAbilityId_harmoniezauberei: string = IdsBS.SpecialAbilityId.harmoniezauberei;
export const SpecialAbilityId_matrixzauberei: string = IdsBS.SpecialAbilityId.matrixzauberei;
export const SpecialAbilityId_traditionElves: string = IdsBS.SpecialAbilityId.traditionElves;
export const SpecialAbilityId_traditionDruids: string = IdsBS.SpecialAbilityId.traditionDruids;
export const SpecialAbilityId_spellEnhancement: number = IdsBS.SpecialAbilityId.spellEnhancement;
export const SpecialAbilityId_forschungsgebiet: string = IdsBS.SpecialAbilityId.forschungsgebiet;
export const SpecialAbilityId_expertenwissen: string = IdsBS.SpecialAbilityId.expertenwissen;
export const SpecialAbilityId_wissensdurst: string = IdsBS.SpecialAbilityId.wissensdurst;
export const SpecialAbilityId_recherchegespuer: string = IdsBS.SpecialAbilityId.recherchegespuer;
export const SpecialAbilityId_predigtDerGemeinschaft: string = IdsBS.SpecialAbilityId.predigtDerGemeinschaft;
export const SpecialAbilityId_predigtDerZuversicht: string = IdsBS.SpecialAbilityId.predigtDerZuversicht;
export const SpecialAbilityId_predigtDesGottvertrauens: string = IdsBS.SpecialAbilityId.predigtDesGottvertrauens;
export const SpecialAbilityId_predigtDesWohlgefallens: string = IdsBS.SpecialAbilityId.predigtDesWohlgefallens;
export const SpecialAbilityId_predigtWiderMissgeschicke: string = IdsBS.SpecialAbilityId.predigtWiderMissgeschicke;
export const SpecialAbilityId_visionDerBestimmung: string = IdsBS.SpecialAbilityId.visionDerBestimmung;
export const SpecialAbilityId_visionDerEntrueckung: string = IdsBS.SpecialAbilityId.visionDerEntrueckung;
export const SpecialAbilityId_visionDerGottheit: string = IdsBS.SpecialAbilityId.visionDerGottheit;
export const SpecialAbilityId_visionDesSchicksals: string = IdsBS.SpecialAbilityId.visionDesSchicksals;
export const SpecialAbilityId_visionDesWahrenGlaubens: string = IdsBS.SpecialAbilityId.visionDesWahrenGlaubens;
export const SpecialAbilityId_hoheWeihe: string = IdsBS.SpecialAbilityId.hoheWeihe;
export const SpecialAbilityId_lieblingsliturgie: string = IdsBS.SpecialAbilityId.lieblingsliturgie;
export const SpecialAbilityId_zugvoegel: string = IdsBS.SpecialAbilityId.zugvoegel;
export const SpecialAbilityId_jaegerinnenDerWeissenMaid: string = IdsBS.SpecialAbilityId.jaegerinnenDerWeissenMaid;
export const SpecialAbilityId_anhaengerDesGueldenen: string = IdsBS.SpecialAbilityId.anhaengerDesGueldenen;
export const SpecialAbilityId_gebieterDesAspekts: string = IdsBS.SpecialAbilityId.gebieterDesAspekts;
export const SpecialAbilityId_chantEnhancement: number = IdsBS.SpecialAbilityId.chantEnhancement;
export const SpecialAbilityId_dunklesAbbildDerBuendnisgabe: string = IdsBS.SpecialAbilityId.dunklesAbbildDerBuendnisgabe;
export const SpecialAbilityId_traditionIllusionist: string = IdsBS.SpecialAbilityId.traditionIllusionist;
export const SpecialAbilityId_traditionArcaneBard: string = IdsBS.SpecialAbilityId.traditionArcaneBard;
export const SpecialAbilityId_traditionArcaneDancer: string = IdsBS.SpecialAbilityId.traditionArcaneDancer;
export const SpecialAbilityId_traditionIntuitiveMage: string = IdsBS.SpecialAbilityId.traditionIntuitiveMage;
export const SpecialAbilityId_traditionSavant: string = IdsBS.SpecialAbilityId.traditionSavant;
export const SpecialAbilityId_traditionQabalyaMage: string = IdsBS.SpecialAbilityId.traditionQabalyaMage;
export const SpecialAbilityId_traditionChurchOfRondra: string = IdsBS.SpecialAbilityId.traditionChurchOfRondra;
export const SpecialAbilityId_traditionChurchOfBoron: string = IdsBS.SpecialAbilityId.traditionChurchOfBoron;
export const SpecialAbilityId_traditionChurchOfHesinde: string = IdsBS.SpecialAbilityId.traditionChurchOfHesinde;
export const SpecialAbilityId_traditionChurchOfPhex: string = IdsBS.SpecialAbilityId.traditionChurchOfPhex;
export const SpecialAbilityId_traditionChurchOfPeraine: string = IdsBS.SpecialAbilityId.traditionChurchOfPeraine;
export const SpecialAbilityId_traditionChurchOfEfferd: string = IdsBS.SpecialAbilityId.traditionChurchOfEfferd;
export const SpecialAbilityId_traditionChurchOfTravia: string = IdsBS.SpecialAbilityId.traditionChurchOfTravia;
export const SpecialAbilityId_traditionChurchOfFirun: string = IdsBS.SpecialAbilityId.traditionChurchOfFirun;
export const SpecialAbilityId_traditionChurchOfTsa: string = IdsBS.SpecialAbilityId.traditionChurchOfTsa;
export const SpecialAbilityId_traditionChurchOfIngerimm: string = IdsBS.SpecialAbilityId.traditionChurchOfIngerimm;
export const SpecialAbilityId_traditionChurchOfRahja: string = IdsBS.SpecialAbilityId.traditionChurchOfRahja;
export const SpecialAbilityId_traditionCultOfTheNamelessOne: string = IdsBS.SpecialAbilityId.traditionCultOfTheNamelessOne;
export const SpecialAbilityId_traditionChurchOfAves: string = IdsBS.SpecialAbilityId.traditionChurchOfAves;
export const SpecialAbilityId_traditionChurchOfIfirn: string = IdsBS.SpecialAbilityId.traditionChurchOfIfirn;
export const SpecialAbilityId_traditionChurchOfKor: string = IdsBS.SpecialAbilityId.traditionChurchOfKor;
export const SpecialAbilityId_traditionChurchOfNandus: string = IdsBS.SpecialAbilityId.traditionChurchOfNandus;
export const SpecialAbilityId_traditionChurchOfSwafnir: string = IdsBS.SpecialAbilityId.traditionChurchOfSwafnir;
export const SpecialAbilityId_languageSpecializations: string = IdsBS.SpecialAbilityId.languageSpecializations;
export const SpecialAbilityId_traditionSchelme: string = IdsBS.SpecialAbilityId.traditionSchelme;
export const SpecialAbilityId_traditionZauberalchimisten: string = IdsBS.SpecialAbilityId.traditionZauberalchimisten;
export const SpecialAbilityId_grosseMeditation: string = IdsBS.SpecialAbilityId.grosseMeditation;
export const SpecialAbilityId_imitationszauberei: string = IdsBS.SpecialAbilityId.imitationszauberei;
export const SpecialAbilityId_kraftliniennutzung: string = IdsBS.SpecialAbilityId.kraftliniennutzung;
export const SpecialAbilityId_scholarDerHalleDesLebensZuNorburg: string = IdsBS.SpecialAbilityId.scholarDerHalleDesLebensZuNorburg;
export const SpecialAbilityId_scholarDesKreisesDerEinfuehlung: string = IdsBS.SpecialAbilityId.scholarDesKreisesDerEinfuehlung;
export const SpecialAbilityId_madaschwesternStil: string = IdsBS.SpecialAbilityId.madaschwesternStil;
export const SpecialAbilityId_garetherGossenStil: string = IdsBS.SpecialAbilityId.garetherGossenStil;
export const SpecialAbilityId_wegDerGelehrten: string = IdsBS.SpecialAbilityId.wegDerGelehrten;
export const SpecialAbilityId_traditionCultOfNuminoru: string = IdsBS.SpecialAbilityId.traditionCultOfNuminoru;
export const SpecialAbilityId_wegDerKuenstlerin: string = IdsBS.SpecialAbilityId.wegDerKuenstlerin;
export const SpecialAbilityId_wegDerSchreiberin: string = IdsBS.SpecialAbilityId.wegDerSchreiberin;
export const SpecialAbilityId_fachwissen: string = IdsBS.SpecialAbilityId.fachwissen;
export const SpecialAbilityId_handwerkskunst: string = IdsBS.SpecialAbilityId.handwerkskunst;
export const SpecialAbilityId_kindDerNatur: string = IdsBS.SpecialAbilityId.kindDerNatur;
export const SpecialAbilityId_koerperlichesGeschick: string = IdsBS.SpecialAbilityId.koerperlichesGeschick;
export const SpecialAbilityId_sozialeKompetenz: string = IdsBS.SpecialAbilityId.sozialeKompetenz;
export const SpecialAbilityId_universalgenie: string = IdsBS.SpecialAbilityId.universalgenie;
export const SpecialAbilityId_scholarDesMagierkollegsZuHoningen: string = IdsBS.SpecialAbilityId.scholarDesMagierkollegsZuHoningen;
export const SpecialAbilityId_traditionAnimisten: string = IdsBS.SpecialAbilityId.traditionAnimisten;
export const SpecialAbilityId_traditionGeoden: string = IdsBS.SpecialAbilityId.traditionGeoden;
export const SpecialAbilityId_traditionZibilijas: string = IdsBS.SpecialAbilityId.traditionZibilijas;
export const SpecialAbilityId_zaubervariabilitaet: string = IdsBS.SpecialAbilityId.zaubervariabilitaet;
export const SpecialAbilityId_traditionBrobimGeoden: string = IdsBS.SpecialAbilityId.traditionBrobimGeoden;
export const SocialStatusId_notFree: number = IdsBS.SocialStatusId.notFree;
export const SocialStatusId_free: number = IdsBS.SocialStatusId.free;
export const SocialStatusId_lesserNoble: number = IdsBS.SocialStatusId.lesserNoble;
export const SocialStatusId_noble: number = IdsBS.SocialStatusId.noble;
export const SocialStatusId_aristocracy: number = IdsBS.SocialStatusId.aristocracy;
export const OptionalRuleId_maximumAttributeScores: string = IdsBS.OptionalRuleId.maximumAttributeScores;
export const OptionalRuleId_languageSpecialization: string = IdsBS.OptionalRuleId.languageSpecialization;
export const OptionalRuleId_higherDefenseStats: string = IdsBS.OptionalRuleId.higherDefenseStats;
export const ConditionId_sikaryanVerlust: string = IdsBS.ConditionId.sikaryanVerlust;
export const ConditionId_daemonischeAuszehrung: string = IdsBS.ConditionId.daemonischeAuszehrung;
export const ExperienceLevelId: {
masterly: string;
inexperienced: string;
brilliant: string;
ordinary: string;
experienced: string;
competent: string;
legendary: string
} = IdsBS.ExperienceLevelId
export const ProfessionId: { customProfession: string } = IdsBS.ProfessionId
export const DCId: {
dodge: string;
movement: string;
initiative: string;
woundThreshold: string;
toughness: string;
karmaPoints: string;
arcaneEnergy: string;
spirit: string;
lifePoints: string
} = IdsBS.DCId
export const SkillId: {
sailing: string;
treatPoison: string;
metalworking: string;
etiquette: string;
commerce: string;
treatSoul: string;
prepareFood: string;
music: string;
plantLore: string;
driving: string;
pickLocks: string;
flying: string;
religions: string;
riding: string;
empathy: string;
gambling: string;
sphereLore: string;
singing: string;
stealth: string;
gaukelei: string;
dancing: string;
persuasion: string;
intimidation: string;
carousing: string;
animalLore: string;
bodyControl: string;
history: string;
earthencraft: string;
survival: string;
astronomy: string;
perception: string;
treatWounds: string;
seduction: string;
selfControl: string;
disguise: string;
ropes: string;
climbing: string;
willpower: string;
fastTalk: string;
streetwise: string;
fishing: string;
geography: string;
mechanics: string;
treatDisease: string;
orienting: string;
law: string;
warfare: string;
pickpocket: string;
artisticAbility: string;
clothworking: string;
featOfStrength: string;
tracking: string;
mythsAndLegends: string;
math: string;
leatherworking: string;
swimming: string;
magicalLore: string;
woodworking: string;
alchemy: string
} = IdsBS.SkillId
export const CultureId: {
woodElves: string;
gladeElves: string;
firnelves: string;
steppenelfen: string
} = IdsBS.CultureId
export const Phase: {
creation: number;
inGame: number;
rcp: number
} = IdsBS.Phase
export const AdvantageId: {
luck: string;
exceptionalSkill: string;
weaponAptitude: string;
largeSpellSelection: string;
hatredOf: string;
zahlreichePredigten: string;
einkommen: string;
aptitude: string;
prediger: string;
sociallyAdaptable: string;
immunityToDisease: string;
nimble: string;
increasedKarmaPoints: string;
visionaer: string;
inspireConfidence: string;
spellcaster: string;
exceptionalCombatTechnique: string;
increasedAstralPower: string;
zahlreicheVisionen: string;
leichterGang: string;
increasedLifePoints: string;
unyielding: string;
rich: string;
blessed: string;
increasedSpirit: string;
immunityToPoison: string;
increasedToughness: string;
magicalAttunement: string
} = IdsBS.AdvantageId
export const CombatTechniqueId: {
discuses: string;
swords: string;
faecher: string;
chainWeapons: string;
twoHandedSwords: string;
daggers: string;
crossbows: string;
brawling: string;
thrownWeapons: string;
lances: string;
impactWeapons: string;
slings: string;
spittingFire: string;
blowguns: string;
fencingWeapons: string;
twoHandedImpactWeapons: string;
spiesswaffen: string;
bows: string;
shields: string;
polearms: string
} = IdsBS.CombatTechniqueId
export const SocialStatusId: {
free: number;
aristocracy: number;
lesserNoble: number;
notFree: number;
noble: number
} = IdsBS.SocialStatusId
export const DisadvantageId: {
obligations: string;
slow: string;
wenigeVisionen: string;
badLuck: string;
maimed: string;
wenigePredigten: string;
decreasedLifePoints: string;
incompetent: string;
afraidOf: string;
deaf: string;
magicalRestriction: string;
decreasedSpirit: string;
noFlyingBalm: string;
poor: string;
smallSpellSelection: string;
noFamiliar: string;
decreasedArcanePower: string;
principles: string;
negativeTrait: string;
stigma: string;
badHabit: string;
decreasedKarmaPoints: string;
brittleBones: string;
decreasedToughness: string;
personalityFlaw: string
} = IdsBS.DisadvantageId
export const ConditionId: { sikaryanVerlust: string; daemonischeAuszehrung: string } = IdsBS.ConditionId
export const RaceId: {
humans: string;
elves: string;
dwarves: string;
halfElves: string
} = IdsBS.RaceId
export const AttrId: {
intuition: string;
charisma: string;
agility: string;
courage: string;
sagacity: string;
constitution: string;
dexterity: string;
strength: string
} = IdsBS.AttrId
export const SpecialAbilityId: {
universalgenie: string;
traditionChurchOfTravia: string;
imitationszauberei: string;
garetherGossenStil: string;
magicStyleCombination: string;
forschungsgebiet: string;
anhaengerDesGueldenen: string;
visionDerBestimmung: string;
visionDerEntrueckung: string;
languageSpecializations: string;
chantEnhancement: number;
traditionChurchOfPhex: string;
traditionChurchOfFirun: string;
traditionChurchOfNandus: string;
harmoniezauberei: string;
craftInstruments: string;
hoheWeihe: string;
wegDerKuenstlerin: string;
jaegerinnenDerWeissenMaid: string;
kraftliniennutzung: string;
sozialeKompetenz: string;
traditionDruids: string;
madaschwesternStil: string;
expertenwissen: string;
terrainKnowledge: string;
recherchegespuer: string;
visionDerGottheit: string;
traditionChurchOfBoron: string;
traditionGuildMages: number;
traditionGeoden: string;
dunklesAbbildDerBuendnisgabe: string;
grosseMeditation: string;
propertyKnowledge: string;
traditionCultOfTheNamelessOne: string;
areaKnowledge: string;
traditionArcaneDancer: string;
zugvoegel: string;
traditionChurchOfAves: string;
gebieterDesAspekts: string;
propertyFocus: string;
fachwissen: string;
adaptionZauber: string;
favoriteSpellwork: string;
traditionArcaneBard: string;
traditionSavant: string;
traditionZauberalchimisten: string;
wissensdurst: string;
language: string;
wegDerGelehrten: string;
feuerschlucker: string;
predigtDesGottvertrauens: string;
traditionChurchOfHesinde: string;
traditionChurchOfRahja: string;
traditionChurchOfIfirn: string;
traditionAnimisten: string;
lieblingsliturgie: string;
zaubervariabilitaet: string;
traditionChurchOfPraios: string;
predigtWiderMissgeschicke: string;
scholarDesKreisesDerEinfuehlung: string;
matrixzauberei: string;
predigtDesWohlgefallens: string;
exorzist: string;
predigtDerGemeinschaft: string;
kindDerNatur: string;
traditionBrobimGeoden: string;
traditionChurchOfPeraine: string;
traditionIntuitiveMage: string;
traditionElves: string;
visionDesWahrenGlaubens: string;
traditionWitches: string;
traditionChurchOfIngerimm: string;
literacy: string;
combatReflexes: string;
combatStyleCombination: string;
scholarDerHalleDesLebensZuNorburg: string;
traditionChurchOfEfferd: string;
traditionChurchOfSwafnir: string;
wegDerSchreiberin: string;
koerperlichesGeschick: string;
hunter: string;
visionDesSchicksals: string;
traditionCultOfNuminoru: string;
traditionZibilijas: string;
improvedDodge: string;
traditionQabalyaMage: string;
aspectKnowledge: string;
spellEnhancement: number;
traditionSchelme: string;
predigtDerZuversicht: string;
traditionChurchOfTsa: string;
scholarDesMagierkollegsZuHoningen: string;
skillSpecialization: string;
traditionChurchOfRondra: string;
traditionChurchOfKor: string;
traditionIllusionist: string;
handwerkskunst: string
} = IdsBS.SpecialAbilityId
export const OptionalRuleId: {
higherDefenseStats: string;
maximumAttributeScores: string;
languageSpecialization: string
} = IdsBS.OptionalRuleId
File diff suppressed because it is too large Load Diff
+51 -3
View File
@@ -1,5 +1,39 @@
import { List } from "../../Data/List"
export type Id =
| { tag: "ExperienceLevel"; value: number }
| { tag: "Race"; value: number }
| { tag: "Culture"; value: number }
| { tag: "Profession"; value: number }
| { tag: "Attribute"; value: number }
| { tag: "Advantage"; value: number }
| { tag: "Disadvantage"; value: number }
| { tag: "Skill"; value: number }
| { tag: "CombatTechnique"; value: number }
| { tag: "Spell"; value: number }
| { tag: "Curse"; value: number }
| { tag: "ElvenMagicalSong"; value: number }
| { tag: "DominationRitual"; value: number }
| { tag: "MagicalMelody"; value: number }
| { tag: "MagicalDance"; value: number }
| { tag: "RogueSpell"; value: number }
| { tag: "AnimistForce"; value: number }
| { tag: "GeodeRitual"; value: number }
| { tag: "ZibiljaRitual"; value: number }
| { tag: "Cantrip"; value: number }
| { tag: "LiturgicalChant"; value: number }
| { tag: "Blessing"; value: number }
| { tag: "SpecialAbility"; value: number }
| { tag: "Item"; value: number }
| { tag: "EquipmentPackage"; value: number }
| { tag: "HitZoneArmor"; value: number }
| { tag: "Familiar"; value: number }
| { tag: "Animal"; value: number }
| { tag: "FocusRule"; value: number }
| { tag: "OptionalRule"; value: number }
| { tag: "Condition"; value: number }
| { tag: "State"; value: number }
/**
* Please keep enum members sorted by value and not by key!
*/
@@ -108,7 +142,7 @@ export enum AdvantageId {
/**
* Lists advantage IDs that have no influence on the AP maximum for advantages.
*/
export const AdvantageIdsNoMaxInfl = List<AdvantageId> (AdvantageId.Einkommen)
export const AdvantageIdsNoMaxInfl = List<string> (AdvantageId.Einkommen)
export enum DisadvantageId {
CustomDisadvantage = "DISADV_0",
@@ -268,6 +302,7 @@ export enum SpecialAbilityId {
Hunter = "SA_18",
AreaKnowledge = "SA_22",
Literacy = "SA_27",
Writing = "SA_28",
Language = "SA_29",
CombatReflexes = "SA_51",
ImprovedDodge = "SA_64",
@@ -277,6 +312,7 @@ export enum SpecialAbilityId {
AspectKnowledge = "SA_87",
TraditionChurchOfPraios = "SA_86",
Feuerschlucker = "SA_109",
SpeedWriting = "SA_136",
CombatStyleCombination = "SA_164",
AdaptionZauber = "SA_231",
Exorzist = "SA_240",
@@ -285,6 +321,8 @@ export enum SpecialAbilityId {
FavoriteSpellwork = "SA_250",
TraditionWitches = "SA_255",
MagicStyleCombination = "SA_266",
Harmoniezauberei = "SA_296",
Matrixzauberei = "SA_303",
TraditionElves = "SA_345",
TraditionDruids = "SA_346",
SpellEnhancement = "SA_414",
@@ -298,14 +336,14 @@ export enum SpecialAbilityId {
PredigtDesWohlgefallens = "SA_547",
PredigtWiderMissgeschicke = "SA_548",
VisionDerBestimmung = "SA_549",
VisionDerEntrückung = "SA_550",
VisionDerEntrueckung = "SA_550",
VisionDerGottheit = "SA_551",
VisionDesSchicksals = "SA_552",
VisionDesWahrenGlaubens = "SA_553",
HoheWeihe = "SA_563",
Lieblingsliturgie = "SA_569",
Zugvoegel = "SA_623",
JaegerinnenDerWeißenMaid = "SA_625",
JaegerinnenDerWeissenMaid = "SA_625",
AnhaengerDesGueldenen = "SA_632",
GebieterDesAspekts = "SA_639",
ChantEnhancement = "SA_663",
@@ -345,10 +383,14 @@ export enum SpecialAbilityId {
TraditionSchelme = "SA_726",
TraditionZauberalchimisten = "SA_750",
GrosseMeditation = "SA_772",
Imitationszauberei = "SA_775",
Kraftliniennutzung = "SA_781",
ScholarDerHalleDesLebensZuNorburg = "SA_802",
ScholarDesKreisesDerEinfuehlung = "SA_808",
MadaschwesternStil = "SA_821",
GaretherGossenStil = "SA_901",
Kryptographie = "SA_1013",
Kurzschrift = "SA_1016",
WegDerGelehrten = "SA_1040",
TraditionCultOfNuminoru = "SA_1049",
WegDerKuenstlerin = "SA_1069",
@@ -360,6 +402,7 @@ export enum SpecialAbilityId {
SozialeKompetenz = "SA_1123",
Universalgenie = "SA_1127",
ScholarDesMagierkollegsZuHoningen = "SA_1147",
TraditionCultOfLevthan = "SA_1187",
TraditionAnimisten = "SA_1221",
TraditionGeoden = "SA_1255",
TraditionZibilijas = "SA_1293",
@@ -381,3 +424,8 @@ export enum OptionalRuleId {
LanguageSpecialization = "OR_15",
HigherDefenseStats = "OR_17",
}
export enum ConditionId {
SikaryanVerlust = "COND_11",
DaemonischeAuszehrung = "COND_14",
}
+2 -1
View File
@@ -19,7 +19,8 @@ const mapDispatchToProps = (dispatch: Dispatch<Action>) => ({
const connectAlertsContainer =
connect<AlertsStateProps, AlertsDispatchProps, AlertsOwnProps, AppStateRecord> (
mapStateToProps, mapDispatchToProps
mapStateToProps,
mapDispatchToProps
)
export const AlertsContainer = connectAlertsContainer (Alerts)
+2 -1
View File
@@ -1,4 +1,5 @@
import { ipcRenderer, remote } from "electron"
import * as remote from "@electron/remote"
import { ipcRenderer } from "electron"
import { connect } from "react-redux"
import { Action } from "redux"
import { Nothing } from "../../Data/Maybe"
+3 -3
View File
@@ -10,8 +10,8 @@ import { getInitialStartingWealth } from "../Selectors/activatableSelectors"
import { getHasCurrentNoAddedAP } from "../Selectors/adventurePointsSelectors"
import { getCarryingCapacity } from "../Selectors/attributeSelectors"
import { getFilteredCombatTechniques } from "../Selectors/combatTechniquesSelectors"
import { getAvailableSortedEquipmentGroups, getFilteredItems, getFilteredItemTemplates, getTotalPrice, getTotalWeight } from "../Selectors/equipmentSelectors"
import { getEquipmentFilterText, getItemTemplatesFilterText, getPurse, getIsAddRemoveMoneyOpen } from "../Selectors/stateSelectors"
import { getAvailableSortedEquipmentGroups, getFilteredItems, getFilteredSortedItemTemplates, getTotalPrice, getTotalWeight } from "../Selectors/equipmentSelectors"
import { getEquipmentFilterText, getIsAddRemoveMoneyOpen, getItemTemplatesFilterText, getPurse } from "../Selectors/stateSelectors"
import { getEquipmentSortOrder, getMeleeItemTemplateCombatTechniqueFilter, getRangedItemTemplateCombatTechniqueFilter } from "../Selectors/uisettingsSelectors"
import { Equipment, EquipmentDispatchProps, EquipmentOwnProps, EquipmentStateProps } from "../Views/Equipment/Equipment"
@@ -24,7 +24,7 @@ const mapStateToProps =
hasNoAddedAP: getHasCurrentNoAddedAP (state),
purse: getPurse (state),
sortOrder: getEquipmentSortOrder (state),
templates: getFilteredItemTemplates (state, ownProps),
templates: getFilteredSortedItemTemplates (state, ownProps),
totalPrice: getTotalPrice (state),
totalWeight: getTotalWeight (state),
meleeItemTemplateCombatTechniqueFilter: getMeleeItemTemplateCombatTechniqueFilter (state),
+2 -22
View File
@@ -1,11 +1,10 @@
import { connect } from "react-redux"
import { Action } from "redux"
import { fromJust, isJust, Just, Maybe } from "../../Data/Maybe"
import { fromJust, isJust, Maybe } from "../../Data/Maybe"
import { OrderedSet } from "../../Data/OrderedSet"
import { ReduxDispatch } from "../Actions/Actions"
import * as HerolistActions from "../Actions/HerolistActions"
import * as IOActions from "../Actions/IOActions"
import * as LocationActions from "../Actions/LocationActions"
import * as SubwindowsActions from "../Actions/SubwindowsActions"
import { AppStateRecord } from "../Models/AppState"
import { HeroListSortOptions, HeroListVisibilityFilter } from "../Models/Config"
@@ -13,7 +12,6 @@ import { getSortedBooks } from "../Selectors/bookSelectors"
import { getSortedHerolist, getUnsavedHeroesById } from "../Selectors/herolistSelectors"
import { getCurrentHeroPresent, getHerolistFilterText, getIsCharacterCreatorOpen, getUsers, getWiki, getWikiExperienceLevels } from "../Selectors/stateSelectors"
import { getHerolistSortOrder, getHerolistVisibilityFilter } from "../Selectors/uisettingsSelectors"
import { TabId } from "../Utilities/LocationUtils"
import { Herolist, HerolistDispatchProps, HerolistOwnProps, HerolistStateProps } from "../Views/Heroes/Herolist"
const mapStateToProps = (state: AppStateRecord) => ({
@@ -30,25 +28,7 @@ const mapStateToProps = (state: AppStateRecord) => ({
wiki: getWiki (state),
})
const mapDispatchToProps = (dispatch: ReduxDispatch<Action>) => ({
loadHero (id: string) {
dispatch (HerolistActions.loadHero (id))
},
showHero () {
dispatch (LocationActions.setTab (TabId.Profile))
},
async saveHero (id: string) {
await dispatch (HerolistActions.saveHero (Just (id)))
},
saveHeroAsJSON (id: string) {
dispatch (HerolistActions.exportHeroValidate (id))
},
async deleteHero (id: string) {
await dispatch (HerolistActions.deleteHeroValidate (id))
},
duplicateHero (id: string) {
dispatch (HerolistActions.duplicateHero (id))
},
const mapDispatchToProps = (dispatch: ReduxDispatch<Action>): HerolistDispatchProps => ({
createHero (
name: string,
sex: "m" | "f",
+2 -2
View File
@@ -1,6 +1,6 @@
import { connect } from "react-redux"
import { Action } from "redux"
import { join, Just } from "../../Data/Maybe"
import { join } from "../../Data/Maybe"
import { ReduxDispatch } from "../Actions/Actions"
import * as HerolistActions from "../Actions/HerolistActions"
import * as LocationActions from "../Actions/LocationActions"
@@ -32,7 +32,7 @@ const mapDispatchToProps = (
dispatch (LocationActions.setTab (TabId.Profile))
},
async saveHero () {
await dispatch (HerolistActions.saveHero (Just (HA.id (hero))))
await dispatch (HerolistActions.saveHero (HA.id (hero)))
},
saveHeroAsJSON () {
dispatch (HerolistActions.exportHeroValidate (HA.id (hero)))
+10 -6
View File
@@ -1,19 +1,23 @@
import { connect } from "react-redux"
import { Maybe } from "../../Data/Maybe"
import { Pair } from "../../Data/Tuple"
import { ReduxDispatch } from "../Actions/Actions"
import * as EquipmentActions from "../Actions/EquipmentActions"
import { AttrId } from "../Constants/Ids"
import { AppStateRecord } from "../Models/AppState"
import { getSortedTemplates } from "../Selectors/equipmentSelectors"
import { HeroModelRecord } from "../Models/Hero/HeroModel"
import { Range } from "../Models/Hero/Item"
import { getSortedItemTemplates } from "../Selectors/equipmentSelectors"
import { getIsItemCreation, getItemEditorInstance, getWikiAttributes, getWikiCombatTechniques } from "../Selectors/stateSelectors"
import { ItemEditor, ItemEditorDispatchProps, ItemEditorOwnProps, ItemEditorStateProps } from "../Views/Equipment/ItemEditor"
const mapStateToProps =
(state: AppStateRecord): ItemEditorStateProps => ({
(state: AppStateRecord, ownProps: { hero: HeroModelRecord }): ItemEditorStateProps => ({
attributes: getWikiAttributes (state),
combatTechniques: getWikiCombatTechniques (state),
isInCreation: getIsItemCreation (state),
item: getItemEditorInstance (state),
templates: getSortedTemplates (state),
templates: getSortedItemTemplates (state, ownProps),
})
const mapDispatchToProps = (dispatch: ReduxDispatch): ItemEditorDispatchProps => ({
@@ -59,7 +63,7 @@ const mapDispatchToProps = (dispatch: ReduxDispatch): ItemEditorDispatchProps =>
setDamageFlat (value: string): void {
dispatch (EquipmentActions.setDamageFlat (value))
},
setPrimaryAttribute (primary: Maybe<string>): void {
setPrimaryAttribute (primary: Maybe<AttrId | Pair<AttrId, AttrId>>): void {
dispatch (EquipmentActions.setPrimaryAttribute (primary))
},
setDamageThreshold (value: string): void {
@@ -89,8 +93,8 @@ const mapDispatchToProps = (dispatch: ReduxDispatch): ItemEditorDispatchProps =>
setStructurePoints (value: string): void {
dispatch (EquipmentActions.setStructurePoints (value))
},
setRange (index: 1 | 2 | 3): (value: string) => void {
return value => dispatch (EquipmentActions.setRange (value, index))
setRange (key: keyof Range): (value: string) => void {
return value => dispatch (EquipmentActions.setRange (value, key))
},
setReloadTime (value: string): void {
dispatch (EquipmentActions.setReloadTime (value))
+7 -3
View File
@@ -1,5 +1,5 @@
import { connect } from "react-redux"
import { bind, join, Nothing } from "../../Data/Maybe"
import { bind, join } from "../../Data/Maybe"
import { ReduxDispatch } from "../Actions/Actions"
import * as HerolistActions from "../Actions/HerolistActions"
import * as HistoryActions from "../Actions/HistoryActions"
@@ -16,6 +16,7 @@ import { getIsSpellsTabAvailable } from "../Selectors/spellsSelectors"
import { getAvatar, getCurrentTab, getIsSettingsOpen } from "../Selectors/stateSelectors"
import { getIsHeroSection, getSubtabs, getTabs } from "../Selectors/uilocationSelectors"
import { TabId } from "../Utilities/LocationUtils"
import { toNewMaybe } from "../Utilities/Maybe"
import { NavigationBar, NavigationBarDispatchProps, NavigationBarOwnProps, NavigationBarStateProps } from "../Views/NavBar/NavigationBar"
const mapStateToProps =
@@ -38,7 +39,7 @@ const mapStateToProps =
isBlessedOne: getIsLiturgicalChantsTabAvailable (state, ownProps),
})
const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
const mapDispatchToProps = (dispatch: ReduxDispatch, ownProps: NavigationBarOwnProps) => ({
setTab (id: TabId) {
dispatch (LocationActions.setTab (id))
},
@@ -49,7 +50,10 @@ const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
dispatch (HistoryActions.redo ())
},
async saveHero () {
await dispatch (HerolistActions.saveHero (Nothing))
const mhero = toNewMaybe (ownProps.mhero)
if (mhero.isJust) {
await dispatch (HerolistActions.saveHero (HeroModel.A.id (mhero.value)))
}
},
openSettings () {
dispatch (SubwindowsActions.openSettings ())
+3 -2
View File
@@ -1,3 +1,4 @@
import { ipcRenderer } from "electron"
import { connect } from "react-redux"
import { fromJust, isJust, Maybe } from "../../Data/Maybe"
import { ReduxDispatch } from "../Actions/Actions"
@@ -10,7 +11,7 @@ import { Locale, Theme } from "../Models/Config"
import { getUserSelectableSupportedLanguages } from "../Selectors/localeSelectors"
import { getFallbackLocaleId, getFallbackLocaleType, getLocaleId, getLocaleType } from "../Selectors/stateSelectors"
import { areAnimationsEnabled, getIsEditingHeroAfterCreationPhaseEnabled, getTheme } from "../Selectors/uisettingsSelectors"
import { isUpdaterEnabled } from "../Utilities/CheckForUpdatesRenderer"
import { IPCChannels } from "../Utilities/IPCChannels"
import { Settings, SettingsDispatchProps, SettingsOwnProps, SettingsStateProps } from "../Views/Settings/Settings"
const mapStateToProps = (state: AppStateRecord): SettingsStateProps => ({
@@ -22,7 +23,7 @@ const mapStateToProps = (state: AppStateRecord): SettingsStateProps => ({
areAnimationsEnabled: areAnimationsEnabled (state),
theme: getTheme (state),
languages: getUserSelectableSupportedLanguages (state),
isCheckForUpdatesDisabled: !isUpdaterEnabled (),
isCheckForUpdatesDisabled: !(ipcRenderer.sendSync (IPCChannels.IsUpdaterEnabled) as boolean),
})
const mapDispatchToProps = (dispatch: ReduxDispatch): SettingsDispatchProps => ({
+5 -1
View File
@@ -23,6 +23,7 @@ import { getAllSkills } from "../Selectors/skillsSelectors"
import { getCantripsForSheet, getSpellsForSheet } from "../Selectors/spellsSelectors"
import { getAvatar, getCurrentHeroName, getCurrentSex, getProfile, getPurse, getSpecialAbilities, getWikiBooks, getWikiSpecialAbilities } from "../Selectors/stateSelectors"
import { getSheetCheckAttributeValueVisibility, getSheetUseParchment, getSheetZoomFactor } from "../Selectors/uisettingsSelectors"
import { requestExportHeroAsRptok } from "../Utilities/MapToolExporter"
import { pipe } from "../Utilities/pipe"
import { mapGetToMaybeSlice, mapGetToSlice } from "../Utilities/SelectorsUtils"
import { Sheets, SheetsDispatchProps, SheetsOwnProps, SheetsStateProps } from "../Views/Sheets/Sheets"
@@ -90,7 +91,7 @@ const mapStateToProps = (state: AppStateRecord, ownProps: SheetsOwnProps): Sheet
skillsByGroup: getSkillsByGroup (state),
})
const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
const mapDispatchToProps = (dispatch: ReduxDispatch, ownProps: SheetsOwnProps) => ({
switchAttributeValueVisibility () {
dispatch (SheetActions.switchAttributeValueVisibility ())
},
@@ -103,6 +104,9 @@ const mapDispatchToProps = (dispatch: ReduxDispatch) => ({
async printToPDF () {
await dispatch (requestPrintHeroToPDF ())
},
async exportAsRptok () {
await dispatch (requestExportHeroAsRptok (ownProps.hero))
},
})
export const connectSheets =
@@ -15,6 +15,7 @@ export interface ActivatableActivationEntryType {
wikiEntry: Record<Advantage> | Record<Disadvantage>
}
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ActivatableActivationEntryType =
fromDefault ("ActivatableActivationEntryType")
<ActivatableActivationEntryType> ({
@@ -13,6 +13,7 @@ export interface ActivatableActivationOptions {
customCost: Maybe<number>
}
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ActivatableActivationOptions =
fromDefault ("ActivatableActivationOptions")
<ActivatableActivationOptions> ({
@@ -15,6 +15,7 @@ export interface ActivatableDeactivationEntryType {
wikiEntry: Record<Advantage> | Record<Disadvantage>
}
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ActivatableDeactivationEntryType =
fromDefault ("ActivatableDeactivationEntryType")
<ActivatableDeactivationEntryType> ({
@@ -7,6 +7,7 @@ export interface ActivatableDeactivationOptions {
cost: number
}
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ActivatableDeactivationOptions =
fromDefault ("ActivatableDeactivationOptions")
<ActivatableDeactivationOptions> ({

Some files were not shown because too many files have changed in this diff Show More