optolith-database-schema 0.24.3 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/gen/types.d.ts +49 -6
- package/lib/main.d.ts +7 -0
- package/lib/test.d.ts +1 -1
- package/lib/test.js +10 -1
- package/lib/types/Advantage.js +7 -0
- package/lib/types/AnimalDisease.js +6 -0
- package/lib/types/AnimalType.js +6 -0
- package/lib/types/ArcaneBardTradition.js +6 -0
- package/lib/types/ArcaneDancerTradition.js +6 -0
- package/lib/types/Aspect.js +6 -0
- package/lib/types/Attribute.js +10 -0
- package/lib/types/Blessing.js +6 -0
- package/lib/types/Cantrip.js +6 -0
- package/lib/types/Ceremony.js +6 -0
- package/lib/types/CombatTechnique.d.ts +79 -55
- package/lib/types/CombatTechnique.js +37 -7
- package/lib/types/Condition.js +6 -0
- package/lib/types/Continent.js +6 -0
- package/lib/types/Culture.js +6 -0
- package/lib/types/DerivedCharacteristic.js +10 -0
- package/lib/types/Disadvantage.js +7 -0
- package/lib/types/Disease.js +6 -0
- package/lib/types/Element.js +6 -0
- package/lib/types/ExperienceLevel.js +6 -0
- package/lib/types/EyeColor.js +6 -0
- package/lib/types/FamiliarsTrick.js +6 -0
- package/lib/types/HairColor.js +6 -0
- package/lib/types/Lessons.js +12 -0
- package/lib/types/LiturgicalChant.js +6 -0
- package/lib/types/Locale.js +10 -0
- package/lib/types/MetaCondition.js +6 -0
- package/lib/types/PactCategory.js +36 -0
- package/lib/types/Patron.js +6 -0
- package/lib/types/PatronCategory.js +6 -0
- package/lib/types/PersonalityTrait.js +6 -0
- package/lib/types/Profession.d.ts +25 -0
- package/lib/types/Profession.js +16 -0
- package/lib/types/Property.js +6 -0
- package/lib/types/Race.js +17 -0
- package/lib/types/Region.js +6 -0
- package/lib/types/Ritual.js +6 -0
- package/lib/types/Service.js +6 -0
- package/lib/types/SexPractice.js +6 -0
- package/lib/types/Skill.js +15 -0
- package/lib/types/SkillGroup.js +6 -0
- package/lib/types/SkillModificationLevel.js +8 -0
- package/lib/types/SocialStatus.js +7 -0
- package/lib/types/Spell.js +6 -0
- package/lib/types/State.js +6 -0
- package/lib/types/Talisman.js +6 -0
- package/lib/types/TargetCategory.js +6 -0
- package/lib/types/_ActivatableSelectOptions.js +11 -0
- package/lib/types/_Enhancements.js +11 -0
- package/lib/types/_Influence.js +6 -0
- package/lib/types/equipment/EquipmentPackage.js +6 -0
- package/lib/types/equipment/item/Ammunition.js +6 -0
- package/lib/types/equipment/item/Animal.js +6 -0
- package/lib/types/equipment/item/AnimalCare.js +6 -0
- package/lib/types/equipment/item/Armor.js +6 -0
- package/lib/types/equipment/item/BandageOrRemedy.js +16 -0
- package/lib/types/equipment/item/Book.js +6 -0
- package/lib/types/equipment/item/CeremonialItem.js +16 -0
- package/lib/types/equipment/item/Clothes.js +16 -0
- package/lib/types/equipment/item/Container.js +16 -0
- package/lib/types/equipment/item/Elixir.js +6 -0
- package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +16 -0
- package/lib/types/equipment/item/GemOrPreciousStone.js +6 -0
- package/lib/types/equipment/item/IlluminationLightSource.js +16 -0
- package/lib/types/equipment/item/IlluminationRefillOrSupply.js +16 -0
- package/lib/types/equipment/item/Jewelry.js +6 -0
- package/lib/types/equipment/item/Laboratory.js +6 -0
- package/lib/types/equipment/item/Liebesspielzeug.js +16 -0
- package/lib/types/equipment/item/LuxuryGood.js +16 -0
- package/lib/types/equipment/item/MagicalArtifact.js +16 -0
- package/lib/types/equipment/item/MusicalInstrument.js +16 -0
- package/lib/types/equipment/item/Newspaper.js +6 -0
- package/lib/types/equipment/item/Poison.js +6 -0
- package/lib/types/equipment/item/ToolOfTheTrade.js +6 -0
- package/lib/types/equipment/item/TravelGearOrTool.js +16 -0
- package/lib/types/equipment/item/Vehicle.js +6 -0
- package/lib/types/equipment/item/Weapon.d.ts +45 -45
- package/lib/types/equipment/item/Weapon.js +13 -5
- package/lib/types/equipment/item/WeaponAccessory.js +16 -0
- package/lib/types/equipment/item/_Item.js +19 -1
- package/lib/types/equipment/item/_Weapon.d.ts +13 -4
- package/lib/types/equipment/item/_Weapon.js +32 -4
- package/lib/types/equipment/item/sub/ArmorType.js +6 -0
- package/lib/types/equipment/item/sub/Reach.js +6 -0
- package/lib/types/magicalActions/AnimistPower.js +6 -0
- package/lib/types/magicalActions/AnimistPower_Tribe.js +6 -0
- package/lib/types/magicalActions/Curse.js +6 -0
- package/lib/types/magicalActions/DominationRitual.js +6 -0
- package/lib/types/magicalActions/ElvenMagicalSong.js +6 -0
- package/lib/types/magicalActions/GeodeRitual.js +6 -0
- package/lib/types/magicalActions/JesterTrick.js +6 -0
- package/lib/types/magicalActions/MagicalDance.js +6 -0
- package/lib/types/magicalActions/MagicalMelody.js +6 -0
- package/lib/types/magicalActions/MagicalRune.js +6 -0
- package/lib/types/magicalActions/ZibiljaRitual.js +6 -0
- package/lib/types/rule/AlternativeRule.js +6 -0
- package/lib/types/rule/CoreRule.js +6 -0
- package/lib/types/rule/FocusRule.js +6 -0
- package/lib/types/rule/FocusRule_Subject.js +6 -0
- package/lib/types/rule/OptionalRule.js +6 -0
- package/lib/types/source/Publication.js +6 -0
- package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +7 -0
- package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +7 -0
- package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +7 -0
- package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +7 -0
- package/lib/types/specialAbility/AncestorGlyph.js +7 -0
- package/lib/types/specialAbility/BlessedTradition.js +7 -0
- package/lib/types/specialAbility/BrawlingSpecialAbility.js +7 -0
- package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +12 -0
- package/lib/types/specialAbility/CombatSpecialAbility.js +7 -0
- package/lib/types/specialAbility/CombatStyleSpecialAbility.js +7 -0
- package/lib/types/specialAbility/CommandSpecialAbility.js +7 -0
- package/lib/types/specialAbility/FamiliarSpecialAbility.js +7 -0
- package/lib/types/specialAbility/FatePointSexSpecialAbility.js +7 -0
- package/lib/types/specialAbility/FatePointSpecialAbility.js +7 -0
- package/lib/types/specialAbility/GeneralSpecialAbility.js +7 -0
- package/lib/types/specialAbility/KarmaSpecialAbility.js +7 -0
- package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +7 -0
- package/lib/types/specialAbility/LycantropicGift.js +7 -0
- package/lib/types/specialAbility/MagicStyleSpecialAbility.js +7 -0
- package/lib/types/specialAbility/MagicalSign.js +7 -0
- package/lib/types/specialAbility/MagicalSpecialAbility.js +7 -0
- package/lib/types/specialAbility/MagicalTradition.js +7 -0
- package/lib/types/specialAbility/PactGift.js +7 -0
- package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +7 -0
- package/lib/types/specialAbility/Sermon.js +7 -0
- package/lib/types/specialAbility/SexSpecialAbility.js +7 -0
- package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +7 -0
- package/lib/types/specialAbility/SkillStyleSpecialAbility.js +7 -0
- package/lib/types/specialAbility/VampiricGift.js +7 -0
- package/lib/types/specialAbility/Vision.js +7 -0
- package/lib/types/specialAbility/sub/Language.js +6 -0
- package/lib/types/specialAbility/sub/Script.js +6 -0
- package/lib/types/specialAbility/sub/TradeSecret.js +6 -0
- package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/AttireEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/Beutelzauber.js +7 -0
- package/lib/types/traditionArtifacts/BowlEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/CauldronEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/ChronicleEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/DaggerRitual.js +7 -0
- package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/Haubenzauber.js +7 -0
- package/lib/types/traditionArtifacts/InstrumentEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/Krallenkettenzauber.js +7 -0
- package/lib/types/traditionArtifacts/Kristallkugelzauber.js +7 -0
- package/lib/types/traditionArtifacts/OrbEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/RingEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/SickleRitual.js +7 -0
- package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/StaffEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/ToyEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/Trinkhornzauber.js +7 -0
- package/lib/types/traditionArtifacts/WandEnchantment.js +7 -0
- package/lib/types/traditionArtifacts/WeaponEnchantment.js +7 -0
- package/package.json +2 -2
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Entity, IncludeIdentifier, NestedEntityMap,
|
|
1
|
+
import { Entity, IncludeIdentifier, NestedEntityMap, ObjectType, String, TypeAlias } from "tsondb/schema/def";
|
|
2
2
|
export declare const Weapon: Entity<"Weapon", {
|
|
3
3
|
cost: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Cost", {
|
|
4
4
|
Free: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
5
5
|
Various: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
6
6
|
Invaluable: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
7
|
-
Fixed: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"FixedCost",
|
|
7
|
+
Fixed: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"FixedCost", ObjectType<{
|
|
8
8
|
value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").FloatType, true>;
|
|
9
9
|
translations: import("tsondb/schema/def").MemberDecl<NestedEntityMap<"FixedCostTranslation", {
|
|
10
10
|
wrap_in_text: import("tsondb/schema/def").MemberDecl<String, true>;
|
|
11
11
|
}>, false>;
|
|
12
12
|
}>, []>>>;
|
|
13
|
-
Range: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"CostRange",
|
|
13
|
+
Range: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"CostRange", ObjectType<{
|
|
14
14
|
from: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").FloatType, true>;
|
|
15
15
|
to: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").FloatType, true>;
|
|
16
16
|
translations: import("tsondb/schema/def").MemberDecl<NestedEntityMap<"CostRangeTranslation", {
|
|
@@ -22,27 +22,27 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
22
22
|
complexity: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Complexity", {
|
|
23
23
|
Primitive: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
24
24
|
Simple: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
25
|
-
Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"ComplexComplexity",
|
|
25
|
+
Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"ComplexComplexity", ObjectType<{
|
|
26
26
|
ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
27
27
|
}>, []>>>;
|
|
28
28
|
}, []>>, false>;
|
|
29
|
-
structure_points: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"StructurePoints", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"StructurePointsComponent",
|
|
29
|
+
structure_points: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"StructurePoints", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"StructurePointsComponent", ObjectType<{
|
|
30
30
|
points: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
31
31
|
}>, []>>>, []>>, false>;
|
|
32
32
|
melee_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
|
|
33
|
-
damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage",
|
|
34
|
-
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice",
|
|
33
|
+
damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage", ObjectType<{
|
|
34
|
+
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
|
|
35
35
|
number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
36
36
|
sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
|
|
37
37
|
}>, []>>, true>;
|
|
38
38
|
flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
|
|
39
39
|
}>, []>>, true>;
|
|
40
40
|
damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"PrimaryAttributeDamageThreshold", {
|
|
41
|
-
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold",
|
|
41
|
+
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", ObjectType<{
|
|
42
42
|
threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
43
43
|
}>, []>>>;
|
|
44
|
-
List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList",
|
|
45
|
-
list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold",
|
|
44
|
+
List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", ObjectType<{
|
|
45
|
+
list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", ObjectType<{
|
|
46
46
|
attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
|
|
47
47
|
threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
48
48
|
}>, []>>>, true>;
|
|
@@ -55,7 +55,7 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
55
55
|
size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ShieldSize", {
|
|
56
56
|
Small: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
57
57
|
Medium: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
58
|
-
Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize",
|
|
58
|
+
Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize", ObjectType<{
|
|
59
59
|
attack_penalty: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
|
|
60
60
|
}>, []>>>;
|
|
61
61
|
}, []>>, false>;
|
|
@@ -65,8 +65,8 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
65
65
|
}>, false>;
|
|
66
66
|
ranged_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
|
|
67
67
|
damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RangedDamage", {
|
|
68
|
-
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage",
|
|
69
|
-
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice",
|
|
68
|
+
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage", ObjectType<{
|
|
69
|
+
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
|
|
70
70
|
number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
71
71
|
sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
|
|
72
72
|
}>, []>>, true>;
|
|
@@ -75,10 +75,10 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
75
75
|
NotApplicable: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
76
76
|
Special: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
77
77
|
}, []>>, true>;
|
|
78
|
-
reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime",
|
|
78
|
+
reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime", ObjectType<{
|
|
79
79
|
value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
80
80
|
}>, []>>>, true>;
|
|
81
|
-
range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets",
|
|
81
|
+
range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets", ObjectType<{
|
|
82
82
|
close: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
83
83
|
medium: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
84
84
|
far: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
@@ -87,20 +87,20 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
87
87
|
length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
|
|
88
88
|
is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
|
|
89
89
|
}>, false>;
|
|
90
|
-
restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo",
|
|
91
|
-
races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces",
|
|
90
|
+
restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", ObjectType<{
|
|
91
|
+
races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", ObjectType<{
|
|
92
92
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
93
93
|
}>, []>>, false>;
|
|
94
|
-
cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures",
|
|
94
|
+
cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", ObjectType<{
|
|
95
95
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
96
96
|
}>, []>>, false>;
|
|
97
|
-
professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions",
|
|
97
|
+
professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", ObjectType<{
|
|
98
98
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
99
99
|
}>, []>>, false>;
|
|
100
|
-
magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions",
|
|
100
|
+
magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", ObjectType<{
|
|
101
101
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
102
102
|
}>, []>>, false>;
|
|
103
|
-
blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions",
|
|
103
|
+
blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", ObjectType<{
|
|
104
104
|
scope: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RestrictedToBlessedTraditionsScope", {
|
|
105
105
|
Specific: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>>;
|
|
106
106
|
Church: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
@@ -109,12 +109,12 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
109
109
|
isSanctifiedBy: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
|
|
110
110
|
}>, []>>, false>;
|
|
111
111
|
}>, []>>, false>;
|
|
112
|
-
src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PublicationRef",
|
|
112
|
+
src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PublicationRef", ObjectType<{
|
|
113
113
|
id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
|
|
114
114
|
occurrences: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
|
|
115
|
-
initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"InitialOccurrence",
|
|
115
|
+
initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"InitialOccurrence", ObjectType<{
|
|
116
116
|
printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
|
|
117
|
-
pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange",
|
|
117
|
+
pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange", ObjectType<{
|
|
118
118
|
first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
|
|
119
119
|
InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
120
120
|
InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
@@ -128,9 +128,9 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
128
128
|
}>, []>>>, true>;
|
|
129
129
|
}>, []>>, true>;
|
|
130
130
|
revisions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Revision", {
|
|
131
|
-
Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Since",
|
|
131
|
+
Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Since", ObjectType<{
|
|
132
132
|
printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
133
|
-
pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange",
|
|
133
|
+
pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange", ObjectType<{
|
|
134
134
|
first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
|
|
135
135
|
InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
136
136
|
InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
@@ -143,7 +143,7 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
143
143
|
}, []>>, false>;
|
|
144
144
|
}>, []>>>, true>;
|
|
145
145
|
}>, []>>>;
|
|
146
|
-
Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Deprecation",
|
|
146
|
+
Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Deprecation", ObjectType<{
|
|
147
147
|
printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
148
148
|
}>, []>>>;
|
|
149
149
|
}, []>>>, false>;
|
|
@@ -156,27 +156,27 @@ export declare const Weapon: Entity<"Weapon", {
|
|
|
156
156
|
rules: import("tsondb/schema/def").MemberDecl<String, false>;
|
|
157
157
|
advantage: import("tsondb/schema/def").MemberDecl<String, false>;
|
|
158
158
|
disadvantage: import("tsondb/schema/def").MemberDecl<String, false>;
|
|
159
|
-
errata: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Errata", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"Erratum",
|
|
159
|
+
errata: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Errata", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"Erratum", ObjectType<{
|
|
160
160
|
date: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").DateType, true>;
|
|
161
161
|
description: import("tsondb/schema/def").MemberDecl<String, true>;
|
|
162
162
|
}>, []>>>, []>>, false>;
|
|
163
163
|
}>, true>;
|
|
164
164
|
}, undefined>;
|
|
165
|
-
export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon",
|
|
165
|
+
export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", ObjectType<{
|
|
166
166
|
melee_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
|
|
167
|
-
damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage",
|
|
168
|
-
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice",
|
|
167
|
+
damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage", ObjectType<{
|
|
168
|
+
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
|
|
169
169
|
number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
170
170
|
sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
|
|
171
171
|
}>, []>>, true>;
|
|
172
172
|
flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
|
|
173
173
|
}>, []>>, true>;
|
|
174
174
|
damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"PrimaryAttributeDamageThreshold", {
|
|
175
|
-
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold",
|
|
175
|
+
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", ObjectType<{
|
|
176
176
|
threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
177
177
|
}>, []>>>;
|
|
178
|
-
List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList",
|
|
179
|
-
list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold",
|
|
178
|
+
List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", ObjectType<{
|
|
179
|
+
list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", ObjectType<{
|
|
180
180
|
attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
|
|
181
181
|
threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
182
182
|
}>, []>>>, true>;
|
|
@@ -189,7 +189,7 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
|
|
|
189
189
|
size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ShieldSize", {
|
|
190
190
|
Small: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
191
191
|
Medium: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
192
|
-
Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize",
|
|
192
|
+
Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize", ObjectType<{
|
|
193
193
|
attack_penalty: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
|
|
194
194
|
}>, []>>>;
|
|
195
195
|
}, []>>, false>;
|
|
@@ -199,8 +199,8 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
|
|
|
199
199
|
}>, false>;
|
|
200
200
|
ranged_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
|
|
201
201
|
damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RangedDamage", {
|
|
202
|
-
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage",
|
|
203
|
-
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice",
|
|
202
|
+
Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage", ObjectType<{
|
|
203
|
+
dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
|
|
204
204
|
number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
205
205
|
sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
|
|
206
206
|
}>, []>>, true>;
|
|
@@ -209,10 +209,10 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
|
|
|
209
209
|
NotApplicable: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
210
210
|
Special: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
211
211
|
}, []>>, true>;
|
|
212
|
-
reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime",
|
|
212
|
+
reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime", ObjectType<{
|
|
213
213
|
value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
214
214
|
}>, []>>>, true>;
|
|
215
|
-
range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets",
|
|
215
|
+
range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets", ObjectType<{
|
|
216
216
|
close: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
217
217
|
medium: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
218
218
|
far: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
|
|
@@ -221,20 +221,20 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
|
|
|
221
221
|
length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
|
|
222
222
|
is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
|
|
223
223
|
}>, false>;
|
|
224
|
-
restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo",
|
|
225
|
-
races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces",
|
|
224
|
+
restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", ObjectType<{
|
|
225
|
+
races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", ObjectType<{
|
|
226
226
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
227
227
|
}>, []>>, false>;
|
|
228
|
-
cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures",
|
|
228
|
+
cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", ObjectType<{
|
|
229
229
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
230
230
|
}>, []>>, false>;
|
|
231
|
-
professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions",
|
|
231
|
+
professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", ObjectType<{
|
|
232
232
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
233
233
|
}>, []>>, false>;
|
|
234
|
-
magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions",
|
|
234
|
+
magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", ObjectType<{
|
|
235
235
|
scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
|
|
236
236
|
}>, []>>, false>;
|
|
237
|
-
blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions",
|
|
237
|
+
blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", ObjectType<{
|
|
238
238
|
scope: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RestrictedToBlessedTraditionsScope", {
|
|
239
239
|
Specific: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>>;
|
|
240
240
|
Church: import("tsondb/schema/def").EnumCaseDecl<null>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Entity, IncludeIdentifier, NestedEntityMap,
|
|
1
|
+
import { Entity, IncludeIdentifier, NestedEntityMap, ObjectType, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
|
|
2
2
|
import { CloseCombatTechnique, RangedCombatTechnique } from "../../CombatTechnique.js";
|
|
3
3
|
import { NestedTranslationMap } from "../../Locale.js";
|
|
4
4
|
import { Errata } from "../../source/_Erratum.js";
|
|
@@ -6,10 +6,11 @@ import { src } from "../../source/_PublicationRef.js";
|
|
|
6
6
|
import { Complexity, Cost, RestrictedTo, StructurePoints, Weight } from "./_Item.js";
|
|
7
7
|
import { MeleeWeapon } from "./_MeleeWeapon.js";
|
|
8
8
|
import { RangedWeapon } from "./_RangedWeapon.js";
|
|
9
|
+
import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
|
|
9
10
|
export const Weapon = Entity(import.meta.url, {
|
|
10
11
|
name: "Weapon",
|
|
11
12
|
namePlural: "Weapons",
|
|
12
|
-
type: () =>
|
|
13
|
+
type: () => ObjectType({
|
|
13
14
|
cost: Required({
|
|
14
15
|
comment: "The cost in silverthalers.",
|
|
15
16
|
type: IncludeIdentifier(Cost),
|
|
@@ -49,7 +50,7 @@ export const Weapon = Entity(import.meta.url, {
|
|
|
49
50
|
type: IncludeIdentifier(RestrictedTo),
|
|
50
51
|
}),
|
|
51
52
|
src,
|
|
52
|
-
translations: NestedTranslationMap(Required, "Weapon",
|
|
53
|
+
translations: NestedTranslationMap(Required, "Weapon", ObjectType({
|
|
53
54
|
name: Required({
|
|
54
55
|
comment: "The item’s name.",
|
|
55
56
|
type: String({ minLength: 1 }),
|
|
@@ -80,10 +81,17 @@ export const Weapon = Entity(import.meta.url, {
|
|
|
80
81
|
})),
|
|
81
82
|
}),
|
|
82
83
|
displayName: {},
|
|
84
|
+
uniqueConstraints: [
|
|
85
|
+
{
|
|
86
|
+
entityMapKeyPath: "translations",
|
|
87
|
+
keyPathInEntityMap: "name",
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
customConstraints: params => checkWeaponCombatTechniqueIntegrity(params, false),
|
|
83
91
|
});
|
|
84
92
|
export const ImprovisedWeapon = TypeAlias(import.meta.url, {
|
|
85
93
|
name: "ImprovisedWeapon",
|
|
86
|
-
type: () =>
|
|
94
|
+
type: () => ObjectType({
|
|
87
95
|
melee_uses: Optional({
|
|
88
96
|
comment: "A list of stat blocks for each close combat technique this weapon can be used with.",
|
|
89
97
|
type: NestedEntityMap({
|
|
@@ -106,7 +114,7 @@ export const ImprovisedWeapon = TypeAlias(import.meta.url, {
|
|
|
106
114
|
comment: "Define if during character creation this weapon can only be bought by a specific subset of characters.",
|
|
107
115
|
type: IncludeIdentifier(RestrictedTo),
|
|
108
116
|
}),
|
|
109
|
-
translations: NestedTranslationMap(Optional, "ImprovisedWeapon",
|
|
117
|
+
translations: NestedTranslationMap(Optional, "ImprovisedWeapon", ObjectType({
|
|
110
118
|
advantage: Optional({
|
|
111
119
|
comment: "The weapon advantage text.",
|
|
112
120
|
type: String({ minLength: 1, isMarkdown: true }),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
|
|
2
2
|
import { src } from "../../source/_PublicationRef.js";
|
|
3
3
|
import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
|
|
4
|
+
import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
|
|
4
5
|
export const WeaponAccessory = Entity(import.meta.url, {
|
|
5
6
|
name: "WeaponAccessory",
|
|
6
7
|
namePlural: "WeaponAccessories",
|
|
@@ -29,4 +30,19 @@ export const WeaponAccessory = Entity(import.meta.url, {
|
|
|
29
30
|
translations: DefaultItemTranslations("WeaponAccessory"),
|
|
30
31
|
}),
|
|
31
32
|
displayName: {},
|
|
33
|
+
uniqueConstraints: [
|
|
34
|
+
{
|
|
35
|
+
entityMapKeyPath: "translations",
|
|
36
|
+
keyPathInEntityMap: "name",
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
customConstraints: ({ instanceContent, ...rest }) => {
|
|
40
|
+
if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
|
|
41
|
+
return checkWeaponCombatTechniqueIntegrity({
|
|
42
|
+
...rest,
|
|
43
|
+
instanceContent: instanceContent.combat_use.Weapon,
|
|
44
|
+
}, true);
|
|
45
|
+
}
|
|
46
|
+
return [];
|
|
47
|
+
},
|
|
32
48
|
});
|
|
@@ -3,8 +3,10 @@ import { BlessedTraditionIdentifier, CultureIdentifier, MagicalTraditionIdentifi
|
|
|
3
3
|
import { NestedTranslationMap } from "../../Locale.js";
|
|
4
4
|
import { Errata } from "../../source/_Erratum.js";
|
|
5
5
|
import { src } from "../../source/_PublicationRef.js";
|
|
6
|
+
import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
|
|
6
7
|
import { SecondaryArmor } from "./Armor.js";
|
|
7
8
|
import { ImprovisedWeapon } from "./Weapon.js";
|
|
9
|
+
const COMBAT_USE = "combat_use";
|
|
8
10
|
export const DefaultItem = (sourceUrl, singularName, pluralName) => Entity(sourceUrl, {
|
|
9
11
|
name: singularName,
|
|
10
12
|
namePlural: pluralName ?? `${singularName}s`,
|
|
@@ -25,7 +27,7 @@ export const DefaultItem = (sourceUrl, singularName, pluralName) => Entity(sourc
|
|
|
25
27
|
comment: "The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.",
|
|
26
28
|
type: IncludeIdentifier(StructurePoints),
|
|
27
29
|
}),
|
|
28
|
-
|
|
30
|
+
[COMBAT_USE]: Optional({
|
|
29
31
|
comment: "The item can also be used either as an improvised weapon or as an armor, although this is not the primary use case of the item.",
|
|
30
32
|
type: IncludeIdentifier(CombatUse),
|
|
31
33
|
}),
|
|
@@ -33,6 +35,22 @@ export const DefaultItem = (sourceUrl, singularName, pluralName) => Entity(sourc
|
|
|
33
35
|
translations: DefaultItemTranslations(singularName),
|
|
34
36
|
}),
|
|
35
37
|
displayName: {},
|
|
38
|
+
uniqueConstraints: [
|
|
39
|
+
{
|
|
40
|
+
entityMapKeyPath: "translations",
|
|
41
|
+
keyPathInEntityMap: "name",
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
customConstraints: ({ instanceContent, ...rest }) => {
|
|
45
|
+
const combatUse = instanceContent.combat_use;
|
|
46
|
+
if (combatUse && combatUse.kind === "Weapon") {
|
|
47
|
+
return checkWeaponCombatTechniqueIntegrity({
|
|
48
|
+
...rest,
|
|
49
|
+
instanceContent: combatUse.Weapon,
|
|
50
|
+
}, true);
|
|
51
|
+
}
|
|
52
|
+
return [];
|
|
53
|
+
},
|
|
36
54
|
});
|
|
37
55
|
export const DefaultItemTranslations = (singularName) => NestedTranslationMap(Required, singularName, Object({
|
|
38
56
|
name: Required({
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
import { Array, Enum, EnumCase, IncludeIdentifier, Integer,
|
|
1
|
+
import { Array, Enum, EnumCase, IncludeIdentifier, Integer, ObjectType, TypeAlias, type GetDisplayNameWithId, type GetInstanceById } from "tsondb/schema/def";
|
|
2
|
+
import type { MeleeWeapon, RangedWeapon } from "../../../../gen/types.js";
|
|
2
3
|
export declare const PrimaryAttributeDamageThreshold: Enum<"PrimaryAttributeDamageThreshold", {
|
|
3
|
-
Default: EnumCase<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold",
|
|
4
|
+
Default: EnumCase<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", ObjectType<{
|
|
4
5
|
threshold: import("tsondb/schema/def").MemberDecl<Integer, true>;
|
|
5
6
|
}>, []>>>;
|
|
6
|
-
List: EnumCase<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList",
|
|
7
|
-
list: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold",
|
|
7
|
+
List: EnumCase<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", ObjectType<{
|
|
8
|
+
list: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", ObjectType<{
|
|
8
9
|
attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
|
|
9
10
|
threshold: import("tsondb/schema/def").MemberDecl<Integer, true>;
|
|
10
11
|
}>, []>>>, true>;
|
|
11
12
|
}>, []>>>;
|
|
12
13
|
}, []>;
|
|
13
14
|
export declare const Length: TypeAlias<"Length", Integer, []>;
|
|
15
|
+
export declare const checkWeaponCombatTechniqueIntegrity: ({ instanceContent, getInstanceById, getDisplayNameWithId, }: {
|
|
16
|
+
instanceContent: {
|
|
17
|
+
melee_uses?: Record<string, MeleeWeapon>;
|
|
18
|
+
ranged_uses?: Record<string, RangedWeapon>;
|
|
19
|
+
};
|
|
20
|
+
getInstanceById: GetInstanceById;
|
|
21
|
+
getDisplayNameWithId: GetDisplayNameWithId;
|
|
22
|
+
}, _secondary: boolean) => string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Array, Enum, EnumCase, IncludeIdentifier, Integer,
|
|
1
|
+
import { Array, Enum, EnumCase, IncludeIdentifier, Integer, ObjectType, Required, TypeAlias, } from "tsondb/schema/def";
|
|
2
2
|
import { AttributeIdentifier } from "../../_Identifier.js";
|
|
3
3
|
export const PrimaryAttributeDamageThreshold = Enum(import.meta.url, {
|
|
4
4
|
name: "PrimaryAttributeDamageThreshold",
|
|
@@ -10,7 +10,7 @@ export const PrimaryAttributeDamageThreshold = Enum(import.meta.url, {
|
|
|
10
10
|
});
|
|
11
11
|
const DefaultPrimaryAttributeDamageThreshold = TypeAlias(import.meta.url, {
|
|
12
12
|
name: "DefaultPrimaryAttributeDamageThreshold",
|
|
13
|
-
type: () =>
|
|
13
|
+
type: () => ObjectType({
|
|
14
14
|
threshold: Required({
|
|
15
15
|
comment: "The attribute value representing the damage threshold for the primary attribute of the item's combat technique.",
|
|
16
16
|
type: Integer({ minimum: 1 }),
|
|
@@ -19,7 +19,7 @@ const DefaultPrimaryAttributeDamageThreshold = TypeAlias(import.meta.url, {
|
|
|
19
19
|
});
|
|
20
20
|
const PrimaryAttributeDamageThresholdList = TypeAlias(import.meta.url, {
|
|
21
21
|
name: "PrimaryAttributeDamageThresholdList",
|
|
22
|
-
type: () =>
|
|
22
|
+
type: () => ObjectType({
|
|
23
23
|
list: Required({
|
|
24
24
|
comment: "A list of primary attributes with their associated threshold.",
|
|
25
25
|
type: Array(IncludeIdentifier(SinglePrimaryAttributeDamageThreshold), {
|
|
@@ -31,7 +31,7 @@ const PrimaryAttributeDamageThresholdList = TypeAlias(import.meta.url, {
|
|
|
31
31
|
});
|
|
32
32
|
const SinglePrimaryAttributeDamageThreshold = TypeAlias(import.meta.url, {
|
|
33
33
|
name: "SinglePrimaryAttributeDamageThreshold",
|
|
34
|
-
type: () =>
|
|
34
|
+
type: () => ObjectType({
|
|
35
35
|
attribute: Required({
|
|
36
36
|
comment: "The primary attribute.",
|
|
37
37
|
type: AttributeIdentifier(),
|
|
@@ -47,3 +47,31 @@ export const Length = TypeAlias(import.meta.url, {
|
|
|
47
47
|
comment: "The length of the weapon in cm/halffingers.",
|
|
48
48
|
type: () => Integer({ minimum: 1 }),
|
|
49
49
|
});
|
|
50
|
+
export const checkWeaponCombatTechniqueIntegrity = ({ instanceContent, getInstanceById, getDisplayNameWithId, }, _secondary) => {
|
|
51
|
+
const checkPart = (rule, value, name, type, id) => (rule.kind === "Prohibited") === (value === undefined) || rule.kind === "Optional"
|
|
52
|
+
? undefined
|
|
53
|
+
: `${name} must${rule.kind === "Required" ? "" : " not"} be provided for ${type} combat technique ${getDisplayNameWithId(type === "close" ? "CloseCombatTechnique" : "RangedCombatTechnique", id)}`;
|
|
54
|
+
return [
|
|
55
|
+
instanceContent.melee_uses === undefined && instanceContent.ranged_uses === undefined
|
|
56
|
+
? "either melee uses or ranged uses have to be provided"
|
|
57
|
+
: undefined,
|
|
58
|
+
...Object.entries(instanceContent.melee_uses ?? {}).flatMap(([ctId, meleeUse]) => {
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- integrity has been checked, it must be present
|
|
60
|
+
const ct = getInstanceById("CloseCombatTechnique", ctId);
|
|
61
|
+
return [
|
|
62
|
+
checkPart(ct.special.can_parry, meleeUse.parryModifier, "a parry modifier", "close", ctId),
|
|
63
|
+
checkPart(ct.special.has_damage_threshold, meleeUse.damage_threshold, "a damage threshold", "close", ctId),
|
|
64
|
+
checkPart(ct.special.has_length, meleeUse.length, "a length", "close", ctId),
|
|
65
|
+
checkPart(ct.special.has_reach, meleeUse.reach, "a reach", "close", ctId),
|
|
66
|
+
checkPart(ct.special.has_shield_size, meleeUse.size, "a shield size", "close", ctId),
|
|
67
|
+
].filter(v => v !== undefined);
|
|
68
|
+
}),
|
|
69
|
+
...Object.entries(instanceContent.ranged_uses ?? {}).flatMap(([ctId, rangedUse]) => {
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- integrity has been checked, it must be present
|
|
71
|
+
const ct = getInstanceById("RangedCombatTechnique", ctId);
|
|
72
|
+
return [
|
|
73
|
+
checkPart(ct.special.has_ammunition, rangedUse.ammunition, "an ammunition", "ranged", ctId),
|
|
74
|
+
].filter(v => v !== undefined);
|
|
75
|
+
}),
|
|
76
|
+
].filter(v => v !== undefined);
|
|
77
|
+
};
|
|
@@ -74,6 +74,12 @@ If no tribe tradition is given, the animist power is generally available to all
|
|
|
74
74
|
})),
|
|
75
75
|
}),
|
|
76
76
|
displayName: {},
|
|
77
|
+
uniqueConstraints: [
|
|
78
|
+
{
|
|
79
|
+
entityMapKeyPath: "translations",
|
|
80
|
+
keyPathInEntityMap: "name",
|
|
81
|
+
},
|
|
82
|
+
],
|
|
77
83
|
});
|
|
78
84
|
const AnimistPowerLevel = TypeAlias(import.meta.url, {
|
|
79
85
|
name: "AnimistPowerLevel",
|
|
@@ -53,6 +53,12 @@ export const Curse = Entity(import.meta.url, {
|
|
|
53
53
|
})),
|
|
54
54
|
}),
|
|
55
55
|
displayName: {},
|
|
56
|
+
uniqueConstraints: [
|
|
57
|
+
{
|
|
58
|
+
entityMapKeyPath: "translations",
|
|
59
|
+
keyPathInEntityMap: "name",
|
|
60
|
+
},
|
|
61
|
+
],
|
|
56
62
|
});
|
|
57
63
|
const CursePerformanceParameters = TypeAlias(import.meta.url, {
|
|
58
64
|
name: "CursePerformanceParameters",
|
|
@@ -52,6 +52,12 @@ export const DominationRitual = Entity(import.meta.url, {
|
|
|
52
52
|
})),
|
|
53
53
|
}),
|
|
54
54
|
displayName: {},
|
|
55
|
+
uniqueConstraints: [
|
|
56
|
+
{
|
|
57
|
+
entityMapKeyPath: "translations",
|
|
58
|
+
keyPathInEntityMap: "name",
|
|
59
|
+
},
|
|
60
|
+
],
|
|
55
61
|
});
|
|
56
62
|
const DominationRitualPerformanceParameters = TypeAlias(import.meta.url, {
|
|
57
63
|
name: "DominationRitualPerformanceParameters",
|
|
@@ -61,6 +61,12 @@ export const ElvenMagicalSong = Entity(import.meta.url, {
|
|
|
61
61
|
})),
|
|
62
62
|
}),
|
|
63
63
|
displayName: {},
|
|
64
|
+
uniqueConstraints: [
|
|
65
|
+
{
|
|
66
|
+
entityMapKeyPath: "translations",
|
|
67
|
+
keyPathInEntityMap: "name",
|
|
68
|
+
},
|
|
69
|
+
],
|
|
64
70
|
});
|
|
65
71
|
const ElvenMagicalSongPerformanceParameters = TypeAlias(import.meta.url, {
|
|
66
72
|
name: "ElvenMagicalSongPerformanceParameters",
|
|
@@ -71,6 +71,12 @@ export const GeodeRitual = Entity(import.meta.url, {
|
|
|
71
71
|
})),
|
|
72
72
|
}),
|
|
73
73
|
displayName: {},
|
|
74
|
+
uniqueConstraints: [
|
|
75
|
+
{
|
|
76
|
+
entityMapKeyPath: "translations",
|
|
77
|
+
keyPathInEntityMap: "name",
|
|
78
|
+
},
|
|
79
|
+
],
|
|
74
80
|
});
|
|
75
81
|
const GeodeRitualPerformanceParameters = TypeAlias(import.meta.url, {
|
|
76
82
|
name: "GeodeRitualPerformanceParameters",
|
|
@@ -73,6 +73,12 @@ export const JesterTrick = Entity(import.meta.url, {
|
|
|
73
73
|
})),
|
|
74
74
|
}),
|
|
75
75
|
displayName: {},
|
|
76
|
+
uniqueConstraints: [
|
|
77
|
+
{
|
|
78
|
+
entityMapKeyPath: "translations",
|
|
79
|
+
keyPathInEntityMap: "name",
|
|
80
|
+
},
|
|
81
|
+
],
|
|
76
82
|
});
|
|
77
83
|
export const JesterTrickPerformanceParameters = TypeAlias(import.meta.url, {
|
|
78
84
|
name: "JesterTrickPerformanceParameters",
|
|
@@ -60,6 +60,12 @@ export const MagicalDance = Entity(import.meta.url, {
|
|
|
60
60
|
})),
|
|
61
61
|
}),
|
|
62
62
|
displayName: {},
|
|
63
|
+
uniqueConstraints: [
|
|
64
|
+
{
|
|
65
|
+
entityMapKeyPath: "translations",
|
|
66
|
+
keyPathInEntityMap: "name",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
63
69
|
});
|
|
64
70
|
const MagicalDancePerformanceParameters = TypeAlias(import.meta.url, {
|
|
65
71
|
name: "MagicalDancePerformanceParameters",
|