@elite-dangerous-almanac/core 0.2.7 → 0.2.9
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/PROVENANCE/astro/SOURCES.md +13 -12
- package/PROVENANCE/commodities/SOURCES.md +50 -6
- package/PROVENANCE/equipment/SOURCES.md +229 -29
- package/PROVENANCE/i18n/SOURCES.md +328 -73
- package/PROVENANCE/ships/SOURCES.md +352 -216
- package/README.md +30 -7
- package/THIRD_PARTY_NOTICES.md +12 -1
- package/dist/astro/body-rings.d.ts +2 -2
- package/dist/astro/codex-region-lookup.d.ts +1 -1
- package/dist/astro/codex-region-lookup.js +1 -1
- package/dist/astro/hand-authored-regions.d.ts +1 -1
- package/dist/astro/index.d.ts +1 -1
- package/dist/astro/index.js +1 -1
- package/dist/astro/naming-region-origins.d.ts +1 -1
- package/dist/astro/naming-region-origins.js +1 -1
- package/dist/astro/nebulae-all.d.ts +4 -6
- package/dist/astro/nebulae-all.js +1 -1
- package/dist/astro/nebulae-all.js.map +1 -1
- package/dist/astro/nebulae-planetary.d.ts +4 -5
- package/dist/astro/nebulae-planetary.js +1 -1
- package/dist/astro/nebulae-procgen.d.ts +3 -3
- package/dist/astro/nebulae-real.d.ts +3 -3
- package/dist/astro/nebulae.d.ts +8 -8
- package/dist/astro/permit-locked-regions.d.ts +2 -2
- package/dist/astro/permit-locked-systems.d.ts +1 -1
- package/dist/astro/permit-locks.d.ts +2 -2
- package/dist/astro/procedural-system.d.ts +3 -3
- package/dist/astro/procedural-system.js +1 -1
- package/dist/astro/system-address.d.ts +1 -1
- package/dist/astro/system-address.js +1 -1
- package/dist/astro/system-name.js +1 -1
- package/dist/{chunk-XSLPWM5N.js → chunk-2J6NNI3Y.js} +1 -1
- package/dist/{chunk-DWRNXUAX.js → chunk-2KIZN3BY.js} +1 -1
- package/dist/{chunk-J7BM5NGK.js → chunk-2TY42PTF.js} +1 -1
- package/dist/{chunk-MVBVXK3G.js → chunk-3GNYPM6J.js} +1 -1
- package/dist/{chunk-MVBVXK3G.js.map → chunk-3GNYPM6J.js.map} +1 -1
- package/dist/{chunk-773VO2GK.js → chunk-4T3TTYUT.js} +1 -1
- package/dist/{chunk-773VO2GK.js.map → chunk-4T3TTYUT.js.map} +1 -1
- package/dist/chunk-7C7NJWCF.js +1 -0
- package/dist/chunk-7C7NJWCF.js.map +1 -0
- package/dist/{chunk-FMA36V6A.js → chunk-7Y5EK2VO.js} +1 -1
- package/dist/{chunk-FMA36V6A.js.map → chunk-7Y5EK2VO.js.map} +1 -1
- package/dist/chunk-AC3U7LRK.js +1 -0
- package/dist/{chunk-MGRDB2BZ.js.map → chunk-AC3U7LRK.js.map} +1 -1
- package/dist/{chunk-BJU27V6C.js → chunk-AUBV6S7V.js} +1 -1
- package/dist/{chunk-BJU27V6C.js.map → chunk-AUBV6S7V.js.map} +1 -1
- package/dist/{chunk-DI5RXSJR.js → chunk-BVLBS2QY.js} +1 -1
- package/dist/{chunk-DI5RXSJR.js.map → chunk-BVLBS2QY.js.map} +1 -1
- package/dist/chunk-C3YZ5KTA.js +1 -0
- package/dist/chunk-C3YZ5KTA.js.map +1 -0
- package/dist/{chunk-6UNAD74Z.js → chunk-C4FUV6GF.js} +1 -1
- package/dist/{chunk-6UNAD74Z.js.map → chunk-C4FUV6GF.js.map} +1 -1
- package/dist/chunk-CEF7SMB2.js +1 -0
- package/dist/chunk-CEF7SMB2.js.map +1 -0
- package/dist/chunk-E2HDF6PJ.js +1 -0
- package/dist/chunk-E2HDF6PJ.js.map +1 -0
- package/dist/{chunk-OFZGNWBT.js → chunk-ETREYN5U.js} +1 -1
- package/dist/{chunk-OFZGNWBT.js.map → chunk-ETREYN5U.js.map} +1 -1
- package/dist/{chunk-KBCA4GEZ.js → chunk-FP2TQJZP.js} +1 -1
- package/dist/{chunk-F7VWRDSL.js → chunk-G7WARJ3X.js} +1 -1
- package/dist/chunk-G7WARJ3X.js.map +1 -0
- package/dist/{chunk-Z4OUB4SJ.js → chunk-GLTCCDN5.js} +1 -1
- package/dist/{chunk-Z4OUB4SJ.js.map → chunk-GLTCCDN5.js.map} +1 -1
- package/dist/chunk-GVNTKCVF.js +1 -0
- package/dist/chunk-GVNTKCVF.js.map +1 -0
- package/dist/{chunk-Q6YDPREF.js → chunk-GZLD7RTK.js} +1 -1
- package/dist/{chunk-Q6YDPREF.js.map → chunk-GZLD7RTK.js.map} +1 -1
- package/dist/chunk-HIJR7DOC.js +1 -0
- package/dist/chunk-HIJR7DOC.js.map +1 -0
- package/dist/{chunk-ETWMPMZP.js → chunk-K5JK3XQB.js} +1 -1
- package/dist/{chunk-GRIK3EDH.js → chunk-KY7KSPU6.js} +1 -1
- package/dist/{chunk-GRIK3EDH.js.map → chunk-KY7KSPU6.js.map} +1 -1
- package/dist/{chunk-EHFHRQEP.js → chunk-M4STXLXO.js} +1 -1
- package/dist/{chunk-EHFHRQEP.js.map → chunk-M4STXLXO.js.map} +1 -1
- package/dist/{chunk-NZXSIHAW.js → chunk-OSMBAFRW.js} +1 -1
- package/dist/{chunk-NZXSIHAW.js.map → chunk-OSMBAFRW.js.map} +1 -1
- package/dist/chunk-PIU24HRN.js +1 -0
- package/dist/chunk-PIU24HRN.js.map +1 -0
- package/dist/{chunk-ELT3FEA4.js → chunk-PKKBYBL4.js} +1 -1
- package/dist/{chunk-ELT3FEA4.js.map → chunk-PKKBYBL4.js.map} +1 -1
- package/dist/{chunk-6HMIF2RJ.js → chunk-Q647OXON.js} +1 -1
- package/dist/{chunk-6HMIF2RJ.js.map → chunk-Q647OXON.js.map} +1 -1
- package/dist/{chunk-BMQM4JBL.js → chunk-QPT2WJYN.js} +1 -1
- package/dist/{chunk-BMQM4JBL.js.map → chunk-QPT2WJYN.js.map} +1 -1
- package/dist/{chunk-A6OINYNP.js → chunk-R2AEZYX7.js} +1 -1
- package/dist/chunk-RA4YJBU5.js +1 -0
- package/dist/chunk-RA4YJBU5.js.map +1 -0
- package/dist/{chunk-MRLUWHGI.js → chunk-RJ3ZLQRB.js} +1 -1
- package/dist/{chunk-MRLUWHGI.js.map → chunk-RJ3ZLQRB.js.map} +1 -1
- package/dist/chunk-SFEQXUIA.js +1 -0
- package/dist/chunk-SIL356HB.js +1 -0
- package/dist/chunk-SIL356HB.js.map +1 -0
- package/dist/chunk-SS7HVNP5.js +1 -0
- package/dist/chunk-SS7HVNP5.js.map +1 -0
- package/dist/chunk-TRGHPX2O.js +1 -0
- package/dist/chunk-TRGHPX2O.js.map +1 -0
- package/dist/{chunk-GMTAFUAG.js → chunk-TYRH73MO.js} +1 -1
- package/dist/{chunk-GMTAFUAG.js.map → chunk-TYRH73MO.js.map} +1 -1
- package/dist/{chunk-7TVFV3VO.js → chunk-U3IRMXMR.js} +1 -1
- package/dist/{chunk-A7IVMYNF.js → chunk-U73MBQ45.js} +1 -1
- package/dist/{chunk-A7IVMYNF.js.map → chunk-U73MBQ45.js.map} +1 -1
- package/dist/{chunk-IZIIGK3W.js → chunk-UE22QU7A.js} +1 -1
- package/dist/{chunk-IZIIGK3W.js.map → chunk-UE22QU7A.js.map} +1 -1
- package/dist/{chunk-DBDCOHI4.js → chunk-UI5RROGI.js} +1 -1
- package/dist/{chunk-DBDCOHI4.js.map → chunk-UI5RROGI.js.map} +1 -1
- package/dist/chunk-URRPEUIK.js +1 -0
- package/dist/{chunk-QJECDMQQ.js.map → chunk-URRPEUIK.js.map} +1 -1
- package/dist/chunk-UTWZZOSA.js +1 -0
- package/dist/chunk-UTWZZOSA.js.map +1 -0
- package/dist/{chunk-ZEN5K3GE.js → chunk-UVX7RCMP.js} +1 -1
- package/dist/{chunk-ZEN5K3GE.js.map → chunk-UVX7RCMP.js.map} +1 -1
- package/dist/{chunk-7ATBEOVC.js → chunk-WG4DPXJI.js} +1 -1
- package/dist/{chunk-XFDMCPDW.js → chunk-WZIBBJHA.js} +1 -1
- package/dist/{chunk-XFDMCPDW.js.map → chunk-WZIBBJHA.js.map} +1 -1
- package/dist/{chunk-7S7ZTZZY.js → chunk-X3MXPE7G.js} +1 -1
- package/dist/{chunk-7S7ZTZZY.js.map → chunk-X3MXPE7G.js.map} +1 -1
- package/dist/{chunk-SD6GNFDX.js → chunk-YBE5M27G.js} +1 -1
- package/dist/{chunk-SD6GNFDX.js.map → chunk-YBE5M27G.js.map} +1 -1
- package/dist/chunk-ZBUTGTZ3.js +1 -0
- package/dist/chunk-ZBUTGTZ3.js.map +1 -0
- package/dist/commodities/commodities-all.d.ts +2 -2
- package/dist/commodities/commodities-all.js +1 -1
- package/dist/commodities/commodities-rare.d.ts +3 -4
- package/dist/commodities/commodities-rare.js +1 -1
- package/dist/commodities/commodities-standard.d.ts +7 -7
- package/dist/commodities/commodities-standard.js +1 -1
- package/dist/commodities/commodities.d.ts +12 -12
- package/dist/commodities/commodities.js +1 -1
- package/dist/commodities/index.js +1 -1
- package/dist/equipment/engineering.d.ts +58 -1
- package/dist/equipment/engineering.js +1 -1
- package/dist/equipment/index.d.ts +14 -3
- package/dist/equipment/index.js +1 -1
- package/dist/equipment/modification-journal.js +1 -1
- package/dist/equipment/modifications.d.ts +43 -11
- package/dist/equipment/modifications.js +1 -1
- package/dist/equipment/suits.d.ts +2 -115
- package/dist/equipment/suits.js +1 -1
- package/dist/equipment/tools.d.ts +102 -0
- package/dist/equipment/tools.js +1 -0
- package/dist/equipment/tools.js.map +1 -0
- package/dist/equipment/upgrade-costs.d.ts +2 -3
- package/dist/equipment/upgrade-costs.js +1 -1
- package/dist/equipment/weapons.d.ts +2 -121
- package/dist/equipment/weapons.js +1 -1
- package/dist/i18n/blueprints.d.ts +2 -3
- package/dist/i18n/blueprints.js +1 -1
- package/dist/i18n/commodities.d.ts +36 -0
- package/dist/i18n/commodities.js +1 -0
- package/dist/i18n/commodities.js.map +1 -0
- package/dist/i18n/experimental-effect-descriptions.d.ts +5 -6
- package/dist/i18n/experimental-effect-descriptions.js +1 -1
- package/dist/i18n/experimental-effects.d.ts +2 -3
- package/dist/i18n/experimental-effects.js +1 -1
- package/dist/i18n/index.d.ts +87 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/materials.d.ts +2 -4
- package/dist/i18n/materials.js +1 -1
- package/dist/i18n/micro-resources.d.ts +2 -4
- package/dist/i18n/micro-resources.js +1 -1
- package/dist/i18n/module-families.d.ts +3 -5
- package/dist/i18n/module-families.js +1 -1
- package/dist/i18n/modules.d.ts +3 -6
- package/dist/i18n/modules.js +1 -1
- package/dist/i18n/personal-modifications.d.ts +66 -0
- package/dist/i18n/personal-modifications.js +1 -0
- package/dist/i18n/personal-modifications.js.map +1 -0
- package/dist/i18n/personal-tools.d.ts +33 -0
- package/dist/i18n/personal-tools.js +1 -0
- package/dist/i18n/personal-tools.js.map +1 -0
- package/dist/i18n/personal-weapons.d.ts +32 -0
- package/dist/i18n/personal-weapons.js +1 -0
- package/dist/i18n/personal-weapons.js.map +1 -0
- package/dist/i18n/pre-engineered.d.ts +1 -1
- package/dist/i18n/slots.d.ts +2 -2
- package/dist/i18n/suits.d.ts +89 -0
- package/dist/i18n/suits.js +1 -0
- package/dist/i18n/suits.js.map +1 -0
- package/dist/materials/index.d.ts +4 -3
- package/dist/materials/index.js +1 -1
- package/dist/materials/materials-all.d.ts +2 -2
- package/dist/materials/materials-all.js +1 -1
- package/dist/materials/materials-raw.d.ts +3 -4
- package/dist/materials/materials-raw.js +1 -1
- package/dist/materials/materials.d.ts +18 -15
- package/dist/materials/materials.js +1 -1
- package/dist/materials/micro-resources-all.d.ts +2 -2
- package/dist/materials/micro-resources-all.js +1 -1
- package/dist/materials/micro-resources-component.d.ts +2 -2
- package/dist/materials/micro-resources-consumable.d.ts +2 -2
- package/dist/materials/micro-resources-data.d.ts +2 -2
- package/dist/materials/micro-resources-item.d.ts +2 -2
- package/dist/materials/micro-resources.d.ts +17 -14
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/ammunition.d.ts +4 -4
- package/dist/ships/blueprint-costs.d.ts +13 -13
- package/dist/ships/blueprint-costs.js +1 -1
- package/dist/ships/blueprint-journal.d.ts +3 -3
- package/dist/ships/blueprint-journal.js +1 -1
- package/dist/ships/blueprints.d.ts +3 -3
- package/dist/ships/build-metrics.d.ts +2 -1
- package/dist/ships/build-metrics.js +1 -1
- package/dist/ships/default-loadouts.d.ts +2 -3
- package/dist/ships/default-loadouts.js +1 -1
- package/dist/ships/engineering-options.d.ts +29 -32
- package/dist/ships/engineering-options.js +1 -1
- package/dist/ships/engineering.d.ts +1 -2
- package/dist/ships/engineering.js +1 -1
- package/dist/ships/experimental-effect-costs.d.ts +1 -1
- package/dist/ships/gunsights.d.ts +3 -3
- package/dist/ships/heat.d.ts +1 -1
- package/dist/ships/index.d.ts +4 -5
- package/dist/ships/index.js +1 -1
- package/dist/ships/loadout-validation.d.ts +8 -3
- package/dist/ships/loadout-validation.js +1 -1
- package/dist/ships/module-families.d.ts +1 -1
- package/dist/ships/modules-all.d.ts +2 -3
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-core.d.ts +3 -3
- package/dist/ships/modules-hardpoint.d.ts +4 -5
- package/dist/ships/modules-hardpoint.js +1 -1
- package/dist/ships/modules-internal.d.ts +19 -9
- package/dist/ships/modules-internal.js +1 -1
- package/dist/ships/modules-utility.d.ts +3 -4
- package/dist/ships/modules-utility.js +1 -1
- package/dist/ships/modules.d.ts +31 -25
- package/dist/ships/modules.js +1 -1
- package/dist/ships/pre-engineered-stats.d.ts +1 -1
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/pre-engineered.d.ts +9 -10
- package/dist/ships/pre-engineered.js +1 -1
- package/dist/ships/ship-loadout.d.ts +13 -7
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/ships.d.ts +1 -2
- package/dist/ships/ships.js +1 -1
- package/dist/ships/slots.d.ts +5 -5
- package/dist/suits-B37rAORs.d.ts +414 -0
- package/dist/{system-address-cyJaeZIS.d.ts → system-address-DmzXRD48.d.ts} +6 -4
- package/package.json +25 -1
- package/dist/chunk-4U7KYQGK.js +0 -1
- package/dist/chunk-4U7KYQGK.js.map +0 -1
- package/dist/chunk-6GJHUWMO.js +0 -1
- package/dist/chunk-6GJHUWMO.js.map +0 -1
- package/dist/chunk-77TT4K53.js +0 -1
- package/dist/chunk-B7EYTZRK.js +0 -1
- package/dist/chunk-B7EYTZRK.js.map +0 -1
- package/dist/chunk-C5HG4GJI.js +0 -1
- package/dist/chunk-C5HG4GJI.js.map +0 -1
- package/dist/chunk-F7VWRDSL.js.map +0 -1
- package/dist/chunk-KLC5XT6F.js +0 -1
- package/dist/chunk-KLC5XT6F.js.map +0 -1
- package/dist/chunk-MGRDB2BZ.js +0 -1
- package/dist/chunk-QJECDMQQ.js +0 -1
- package/dist/chunk-TSEDU73T.js +0 -1
- package/dist/chunk-TSEDU73T.js.map +0 -1
- package/dist/chunk-XRGECU7S.js +0 -1
- package/dist/chunk-XRGECU7S.js.map +0 -1
- /package/dist/{chunk-XSLPWM5N.js.map → chunk-2J6NNI3Y.js.map} +0 -0
- /package/dist/{chunk-DWRNXUAX.js.map → chunk-2KIZN3BY.js.map} +0 -0
- /package/dist/{chunk-J7BM5NGK.js.map → chunk-2TY42PTF.js.map} +0 -0
- /package/dist/{chunk-KBCA4GEZ.js.map → chunk-FP2TQJZP.js.map} +0 -0
- /package/dist/{chunk-ETWMPMZP.js.map → chunk-K5JK3XQB.js.map} +0 -0
- /package/dist/{chunk-A6OINYNP.js.map → chunk-R2AEZYX7.js.map} +0 -0
- /package/dist/{chunk-77TT4K53.js.map → chunk-SFEQXUIA.js.map} +0 -0
- /package/dist/{chunk-7TVFV3VO.js.map → chunk-U3IRMXMR.js.map} +0 -0
- /package/dist/{chunk-7ATBEOVC.js.map → chunk-WG4DPXJI.js.map} +0 -0
|
@@ -99,7 +99,7 @@ declare function getPreEngineeredJournalModifiers(variant: PreEngineeredVariant)
|
|
|
99
99
|
* The module symbol and blueprint therefore identify the purchase at grade 1 and after
|
|
100
100
|
* upgrading it through grades 2–5. The fitted grade and experimental effect remain the
|
|
101
101
|
* loadout's current engineering state; the returned variant carries the original purchase
|
|
102
|
-
* grade, Merc Coin price and
|
|
102
|
+
* grade, Merc Coin price and, on the rows sold with one, the effect the shop bakes
|
|
103
103
|
* in. So a capture that states a different effect, or none, still identifies the article
|
|
104
104
|
* it was bought as: read the capture for what is fitted now, the variant for what was
|
|
105
105
|
* bought.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-
|
|
1
|
+
export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-C3YZ5KTA.js"; //# sourceMappingURL=pre-engineered-stats.js.map
|
|
@@ -18,16 +18,16 @@
|
|
|
18
18
|
* grade already applied. Most blueprint ids join to `BLUEPRINTS`; the festive
|
|
19
19
|
* `Decorative_*` ids instead identify fixed grade-5 reward articles with no craftable
|
|
20
20
|
* recipe or material cost.
|
|
21
|
-
*
|
|
21
|
+
* Mercenary entries are bought at grade 1 and their bespoke recipes start at
|
|
22
22
|
* grade 2 — price the remaining upgrade with `getBlueprintCost(blueprint, target,
|
|
23
23
|
* grade)` from `ships/blueprint-costs`, which answers with the materials and the Merc
|
|
24
24
|
* Coin the climb costs.
|
|
25
25
|
* Community-goal and tech-broker entries instead identify fixed reward articles; their
|
|
26
26
|
* blueprint ids do not grant a recipe to the stock module.
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* One base module can appear more than once: the medium Seeker Missile Rack is sold or
|
|
29
|
+
* awarded in several pre-engineered flavours, so `Hpt_BasicMissileRack_Fixed_Medium` has
|
|
30
|
+
* one entry per flavour. Look variants up with
|
|
31
31
|
* {@link getPreEngineeredVariants} (plural) rather than assuming one.
|
|
32
32
|
*
|
|
33
33
|
* Most variants carry a `modifiers` block — the hand-set stat
|
|
@@ -35,19 +35,19 @@
|
|
|
35
35
|
* computed. Resolve them against the base module with `getPreEngineeredStats` from
|
|
36
36
|
* `./pre-engineered-stats.js`; it lives in its own module so that consumers who only
|
|
37
37
|
* want the catalogue do not bundle the module and engineering tables.
|
|
38
|
-
* Final articles carry {@link PreEngineeredVariant.engineeringLocked}. These are the
|
|
38
|
+
* Final articles carry {@link PreEngineeredVariant.engineeringLocked}. These are the
|
|
39
39
|
* pre-engineered Guardian weapons, whose stock counterparts can take Anti-Guardian Zone
|
|
40
|
-
* Resistance, and
|
|
40
|
+
* Resistance, and the fixed Enzyme/AX rewards whose stock modules have no engineering menu.
|
|
41
41
|
*
|
|
42
42
|
* @packageDocumentation
|
|
43
43
|
*/
|
|
44
44
|
/**
|
|
45
45
|
* Where a pre-engineered variant is obtained.
|
|
46
46
|
*
|
|
47
|
-
* - `mercenary` — bought from the Merc-Coin shop; always arrives at grade 1,
|
|
47
|
+
* - `mercenary` — bought from the Merc-Coin shop; always arrives at grade 1, some of them
|
|
48
48
|
* with an experimental effect already applied beside that grade-1 blueprint.
|
|
49
|
-
* - `communityGoal` — awarded for taking part in a community goal; mostly grade 5,
|
|
50
|
-
*
|
|
49
|
+
* - `communityGoal` — awarded for taking part in a community goal; mostly grade 5, a
|
|
50
|
+
* minority carrying an experimental effect.
|
|
51
51
|
* - `techBroker` — unlocked at a tech broker. Records the route stated by the source.
|
|
52
52
|
* - `eventReward` — awarded already transformed by an event; the festive articles are grade 5.
|
|
53
53
|
*/
|
|
@@ -150,7 +150,6 @@ interface PreEngineeredVariant {
|
|
|
150
150
|
* ```ts
|
|
151
151
|
* import { PRE_ENGINEERED_MODULES } from '@elite-dangerous-almanac/core/ships/pre-engineered';
|
|
152
152
|
*
|
|
153
|
-
* PRE_ENGINEERED_MODULES.length; // -> 76
|
|
154
153
|
* PRE_ENGINEERED_MODULES[0];
|
|
155
154
|
* // -> { symbol: 'Hpt_Mining_AbrBlstr_Fixed_Small', name: 'Abrasion Blaster',
|
|
156
155
|
* // blueprintSymbol: 'AbrasionBlaster_FarReaching', grade: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-
|
|
1
|
+
export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-AUBV6S7V.js"; //# sourceMappingURL=pre-engineered.js.map
|
|
@@ -314,8 +314,8 @@ type LoadoutEditErrorCode = 'immutableSlot' | 'requiredSlot' | 'incompatibleModu
|
|
|
314
314
|
* An editor request that the current hull or build constraints cannot accept.
|
|
315
315
|
*
|
|
316
316
|
* @remarks
|
|
317
|
-
*
|
|
318
|
-
*
|
|
317
|
+
* It is a `TypeError`, so `instanceof TypeError` handling catches it. Localized editors
|
|
318
|
+
* should switch on {@link code}, then use {@link constraint}
|
|
319
319
|
* and {@link params} instead of parsing the English fallback in `message`.
|
|
320
320
|
*
|
|
321
321
|
* @example
|
|
@@ -990,12 +990,18 @@ declare class ShipLoadout {
|
|
|
990
990
|
* omitted.
|
|
991
991
|
*
|
|
992
992
|
* @remarks
|
|
993
|
-
* This is the outfitting *offer*, so the
|
|
993
|
+
* This is the outfitting *offer*, so the {@link ships!OutfittingModule.grantOnly | grantOnly}
|
|
994
994
|
* articles are never in it: each is a second identity for a module the game already
|
|
995
995
|
* sells — `Int_Engine_Size2_Class1_free` is the 2E Thrusters — and listing both puts
|
|
996
996
|
* the same article on the screen twice, once with no price. A build that already
|
|
997
997
|
* carries one keeps it; only the choices are filtered.
|
|
998
998
|
*
|
|
999
|
+
* The Cargo Hatch is absent for the same reason it cannot be removed: it is part of
|
|
1000
|
+
* the hull. The source registry files it under the `internal` category — which is
|
|
1001
|
+
* why {@link ships/modules-internal!INTERNAL_MODULES | INTERNAL_MODULES} carries it
|
|
1002
|
+
* — but the hull is built with one and the fixed `CargoHatch` mount is the only
|
|
1003
|
+
* place it goes, so no mount this method describes accepts it.
|
|
1004
|
+
*
|
|
999
1005
|
* @param slotKey - The slot key to fit, matched case-insensitively (journal spelling).
|
|
1000
1006
|
* @returns The fitting modules, in complete-catalogue order.
|
|
1001
1007
|
* @throws {RangeError} If the hull has no slot with that key.
|
|
@@ -1156,7 +1162,7 @@ declare class ShipLoadout {
|
|
|
1156
1162
|
* leave the build unchanged and return stable structured data.
|
|
1157
1163
|
*
|
|
1158
1164
|
* A Mercenary article is recomputed rather than composed, and that limits what can be
|
|
1159
|
-
* done to the effect
|
|
1165
|
+
* done to the effect some of those rows are sold carrying. At its purchase grade there
|
|
1160
1166
|
* is no recipe to recompute from — the bespoke recipe starts at grade 2 — so every
|
|
1161
1167
|
* edit is refused with `unsupportedEngineering`. Once engineered to grade 2 or above
|
|
1162
1168
|
* an edit recomputes normally, but only to an effect the module's own menu offers:
|
|
@@ -1292,9 +1298,9 @@ declare class ShipLoadout {
|
|
|
1292
1298
|
* Set a fitted module's power-priority group.
|
|
1293
1299
|
*
|
|
1294
1300
|
* @param slotKey - The slot's journal key, matched case-insensitively.
|
|
1295
|
-
* @param priority - The journal's **zero-based** group, `0`–`4`.
|
|
1296
|
-
*
|
|
1297
|
-
* five groups `1`–`5`.
|
|
1301
|
+
* @param priority - The journal's **zero-based** group, `0`–`4`. The outfitting
|
|
1302
|
+
* panel, and {@link ships!BuildMetrics.powerBudget | BuildMetrics.powerBudget}'s
|
|
1303
|
+
* `bands[].priority`, number the same five groups `1`–`5`.
|
|
1298
1304
|
* @returns `this`, for chaining.
|
|
1299
1305
|
* @throws {RangeError} If the slot is empty, or `priority` is not an integer in `[0, 4]`.
|
|
1300
1306
|
* @throws {TypeError} If `slotKey` is not a string.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LoadoutEditError,ShipLoadout}from"../chunk-
|
|
1
|
+
export{LoadoutEditError,ShipLoadout}from"../chunk-HIJR7DOC.js"; //# sourceMappingURL=ship-loadout.js.map
|
package/dist/ships/ships.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { CoreSlots, HardpointSlotSpec, OptionalSlotSpec, ShipSlots } from './slo
|
|
|
5
5
|
* stats, and its slot layout in one record**, with the lookups an app needs to turn
|
|
6
6
|
* an internal symbol or a display name into a {@link Ship}.
|
|
7
7
|
*
|
|
8
|
-
* There is only one list of ships and it is
|
|
8
|
+
* There is only one list of ships and it is small, so the lookups here
|
|
9
9
|
* take no catalogue argument at all — they always search {@link SHIPS}. Importing one
|
|
10
10
|
* bundles the whole ship list, which is what you wanted anyway. Stock module identities
|
|
11
11
|
* live in `./default-loadouts`, keeping this small hull catalogue independent of them.
|
|
@@ -143,7 +143,6 @@ interface Ship {
|
|
|
143
143
|
* ```ts
|
|
144
144
|
* import { SHIPS } from '@elite-dangerous-almanac/core/ships/ships';
|
|
145
145
|
*
|
|
146
|
-
* SHIPS.length; // -> 48
|
|
147
146
|
* SHIPS.find((s) => s.symbol === 'Anaconda')?.name; // -> 'Anaconda'
|
|
148
147
|
* ```
|
|
149
148
|
*/
|
package/dist/ships/ships.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{SHIPS,getShipByName,getShipBySymbol,getShipSlots}from"../chunk-
|
|
1
|
+
export{SHIPS,getShipByName,getShipBySymbol,getShipSlots}from"../chunk-C4FUV6GF.js"; //# sourceMappingURL=ships.js.map
|
package/dist/ships/slots.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* A hull offers a fixed set of mounts: seven core internals, a handful of weapon
|
|
6
6
|
* hardpoints, some tiny utility mounts, and a column of optional internals. Some of
|
|
7
7
|
* those mounts are **restricted** to one family of modules — military and
|
|
8
|
-
* planetary-approach optionals on most hulls, and, on
|
|
8
|
+
* planetary-approach optionals on most hulls, and, on a few hulls, cargo-only,
|
|
9
9
|
* limpet-controller-only, vessel-hangar-only and passenger-cabin-only optionals and
|
|
10
10
|
* mining-only hardpoints (see {@link SlotRestriction}). This module gives
|
|
11
11
|
* each mount a stable **slot key** and a {@link BuildSlot} descriptor, and
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* It holds no data; {@link enumerateSlots} takes a {@link ShipSlots} layout (from a
|
|
17
17
|
* hull's `Ship` record via `getShipSlots` in `./ships`) and expands it into keyed
|
|
18
|
-
* {@link BuildSlot}s. Most hulls number their mounts by rule; on
|
|
18
|
+
* {@link BuildSlot}s. Most hulls number their mounts by rule; on some the game does
|
|
19
19
|
* not, and a mount there carries its own `name` — see {@link enumerateSlots}.
|
|
20
20
|
*
|
|
21
21
|
* @packageDocumentation
|
|
@@ -149,7 +149,7 @@ interface BuildSlotBase {
|
|
|
149
149
|
* `core` function name is a *different* string (`thrusters` vs the key
|
|
150
150
|
* `MainEngines`); see {@link CoreSlotType}.
|
|
151
151
|
*
|
|
152
|
-
* **Do not compute one.** The numbering looks regular and on
|
|
152
|
+
* **Do not compute one.** The numbering looks regular and on some hulls is
|
|
153
153
|
* not: the Anaconda's smallest optionals are `Slot13_Size2` and `Slot14_Size1`
|
|
154
154
|
* with no slots 11 or 12, the Type-9 Heavy starts at `Slot00_Size8`, the Type-7
|
|
155
155
|
* Transporter uses the number `09` twice, and the Keelback's `Slot03_Size3` sits
|
|
@@ -341,7 +341,7 @@ interface ParsedSlot {
|
|
|
341
341
|
* @returns Every mount the hull offers, as {@link BuildSlot}s.
|
|
342
342
|
* @remarks
|
|
343
343
|
* Unrestricted optionals are numbered `Slot01_SizeN`, `Slot02_SizeN`, … with no gaps,
|
|
344
|
-
* and hardpoints `1, 2, 3` within each size class. **
|
|
344
|
+
* and hardpoints `1, 2, 3` within each size class. **Some hulls disagree**, and no
|
|
345
345
|
* rule derives what they do instead, so a mount on one of them carries its own
|
|
346
346
|
* {@link OptionalSlotSpec.name} / {@link HardpointSlotSpec.name} and that wins:
|
|
347
347
|
*
|
|
@@ -394,7 +394,7 @@ declare function enumerateSlots(layout: ShipSlots): BuildSlot[];
|
|
|
394
394
|
* mount. The returned `core` and `restriction` values keep this library's own
|
|
395
395
|
* camelCase spelling whatever the input looked like.
|
|
396
396
|
*
|
|
397
|
-
* **A `_SizeN` suffix is what the name says, not what the mount is.** On
|
|
397
|
+
* **A `_SizeN` suffix is what the name says, not what the mount is.** On some hulls
|
|
398
398
|
* the game's own key disagrees with the mount it names — the Keelback's
|
|
399
399
|
* `Slot03_Size3` is a size-4 mount, the Asp Scout's `Slot01_Size4` a size-5 one, and
|
|
400
400
|
* five of the Type-7 Transporter's ten are off. To size a mount, find it in the hull's
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { PersonalModifier } from './equipment/engineering.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Odyssey handheld weapons: their journal identifiers, combat stats, sight
|
|
5
|
+
* magnification, reload time, grade-dependent damage, and the damage per second those
|
|
6
|
+
* stats resolve to.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** A weapon manufacturer's shared Pioneer grade-upgrade recipe. */
|
|
12
|
+
type WeaponUpgradeGroup = 'karma' | 'takada' | 'manticore';
|
|
13
|
+
/** Technology suffix used to disambiguate personal-weapon modification recipes. */
|
|
14
|
+
type PersonalWeaponEngineeringType = 'kinetic' | 'laser' | 'plasma';
|
|
15
|
+
/** A handheld weapon's form factor. */
|
|
16
|
+
type PersonalWeaponClass = 'pistol' | 'carbine' | 'rifle' | 'shotgun' | 'sniper' | 'launcher';
|
|
17
|
+
/** Which suit weapon slot accepts the weapon. */
|
|
18
|
+
type PersonalWeaponSlot = 'primary' | 'secondary';
|
|
19
|
+
/** The damage family relevant to resistances and some modification recipes. */
|
|
20
|
+
type PersonalDamageType = 'kinetic' | 'thermal' | 'plasma' | 'explosive';
|
|
21
|
+
/** A handheld weapon firing cycle. */
|
|
22
|
+
type PersonalFireMode = 'automatic' | 'semi-automatic' | 'burst';
|
|
23
|
+
/** A weapon's aim-down-sights magnification, before and after the Scope modification. */
|
|
24
|
+
interface ScopeMagnification {
|
|
25
|
+
/** Magnification of the sight the weapon ships with, e.g. `1.12` for 1.12x. */
|
|
26
|
+
readonly default: number;
|
|
27
|
+
/** Magnification of the sight the Scope modification fits, e.g. `1.41` for 1.41x. */
|
|
28
|
+
readonly upgraded: number;
|
|
29
|
+
}
|
|
30
|
+
/** A weapon's magazine reload time, before and after the Reload Speed modification. */
|
|
31
|
+
interface ReloadTime {
|
|
32
|
+
/** Seconds to reload the weapon as it ships, e.g. `2.7` for 2.7 s. */
|
|
33
|
+
readonly default: number;
|
|
34
|
+
/** Seconds to reload with the Reload Speed modification fitted, e.g. `2.16` for 2.16 s. */
|
|
35
|
+
readonly upgraded: number;
|
|
36
|
+
}
|
|
37
|
+
/** Grade-dependent stats for one handheld weapon. */
|
|
38
|
+
interface PersonalWeaponGrade {
|
|
39
|
+
/** Damage per projectile or pellet. */
|
|
40
|
+
readonly damage: number;
|
|
41
|
+
/** Permanent engineering-modification slots available, from `0` through `4`. */
|
|
42
|
+
readonly modificationSlots: number;
|
|
43
|
+
}
|
|
44
|
+
/** One handheld weapon sold by Pioneer Supplies. */
|
|
45
|
+
interface PersonalWeapon {
|
|
46
|
+
/** Frontier item id reported by journal loadout events. */
|
|
47
|
+
readonly symbol: string;
|
|
48
|
+
/** English display name. */
|
|
49
|
+
readonly name: string;
|
|
50
|
+
/** Manufacturer recipe family used for grade upgrades. */
|
|
51
|
+
readonly upgradeGroup: WeaponUpgradeGroup;
|
|
52
|
+
/** Recipe suffix used when the journal omits a modification's weapon technology. */
|
|
53
|
+
readonly engineeringType: PersonalWeaponEngineeringType;
|
|
54
|
+
/** Weapon form factor. */
|
|
55
|
+
readonly class: PersonalWeaponClass;
|
|
56
|
+
/** Suit slot this weapon occupies. */
|
|
57
|
+
readonly slot: PersonalWeaponSlot;
|
|
58
|
+
/** Base damage family. */
|
|
59
|
+
readonly damageType: PersonalDamageType;
|
|
60
|
+
/** Firing cycle. */
|
|
61
|
+
readonly fireMode: PersonalFireMode;
|
|
62
|
+
/** Trigger pulls per second, so bursts per second on a burst weapon. */
|
|
63
|
+
readonly rateOfFire: number;
|
|
64
|
+
/**
|
|
65
|
+
* Projectiles one round fires, each doing the full
|
|
66
|
+
* {@link PersonalWeaponGrade.damage}. Absent on every weapon that fires a single
|
|
67
|
+
* projectile — only the Manticore Intimidator, a shotgun, carries it.
|
|
68
|
+
*/
|
|
69
|
+
readonly projectiles?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Rounds one trigger pull fires, spent from the magazine. Present only when
|
|
72
|
+
* {@link PersonalWeapon.fireMode} is `"burst"`, together with
|
|
73
|
+
* {@link PersonalWeapon.burstRateOfFire}.
|
|
74
|
+
*/
|
|
75
|
+
readonly burstRounds?: number;
|
|
76
|
+
/** Rounds per second within one burst. Absent whenever `burstRounds` is. */
|
|
77
|
+
readonly burstRateOfFire?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Rounds loaded in one magazine. A burst weapon spends
|
|
80
|
+
* {@link PersonalWeapon.burstRounds} of them per trigger pull.
|
|
81
|
+
*/
|
|
82
|
+
readonly magazineSize: number;
|
|
83
|
+
/** Spare rounds carried before suit-capacity changes. */
|
|
84
|
+
readonly reserveAmmo: number;
|
|
85
|
+
/** Headshot damage multiplier (`2` means 200%). */
|
|
86
|
+
readonly headshotMultiplier: number;
|
|
87
|
+
/** Nominal effective range in metres. */
|
|
88
|
+
readonly effectiveRange: number;
|
|
89
|
+
/**
|
|
90
|
+
* Aim-down-sights magnification with the stock sight and with the one the Scope
|
|
91
|
+
* modification fits. Scope carries no modifier of its own: this pair is its whole
|
|
92
|
+
* numeric effect, and it differs per weapon.
|
|
93
|
+
*/
|
|
94
|
+
readonly scopeMagnification: ScopeMagnification;
|
|
95
|
+
/**
|
|
96
|
+
* Seconds to reload the magazine with the stock weapon and with the Reload Speed
|
|
97
|
+
* modification fitted. Reload Speed carries no modifier of its own: this pair is its
|
|
98
|
+
* whole numeric effect, and it differs per weapon.
|
|
99
|
+
*/
|
|
100
|
+
readonly reloadTime: ReloadTime;
|
|
101
|
+
/**
|
|
102
|
+
* Grade records keyed by `"1"` through `"5"` — every weapon carries all five,
|
|
103
|
+
* unlike {@link Suit.grades}. Read one through
|
|
104
|
+
* {@link getPersonalWeaponGrade} to get the same nullable answer suits give.
|
|
105
|
+
*/
|
|
106
|
+
readonly grades: Readonly<Record<`${EquipmentGrade}`, PersonalWeaponGrade>>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Every handheld weapon, in catalogue order.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* import { PERSONAL_WEAPONS } from '@elite-dangerous-almanac/core/equipment/weapons';
|
|
114
|
+
* PERSONAL_WEAPONS[0]?.symbol; // -> 'wpn_s_pistol_kinetic_sauto'
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
declare const PERSONAL_WEAPONS: readonly PersonalWeapon[];
|
|
118
|
+
/**
|
|
119
|
+
* Look up a handheld weapon by its Frontier journal symbol, case-insensitively.
|
|
120
|
+
*
|
|
121
|
+
* @param symbol - Journal item id such as `"wpn_m_assaultrifle_kinetic_fauto"`,
|
|
122
|
+
* matched case-insensitively after trimming surrounding whitespace.
|
|
123
|
+
* @returns The frozen weapon record, or `null` when unknown.
|
|
124
|
+
* @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
|
|
125
|
+
* miss, answered like an unrecognised one.
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* import { getPersonalWeaponBySymbol } from '@elite-dangerous-almanac/core/equipment/weapons';
|
|
129
|
+
* getPersonalWeaponBySymbol('wpn_m_assaultrifle_kinetic_fauto')?.name; // -> 'Karma AR-50'
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
declare function getPersonalWeaponBySymbol(symbol: string): PersonalWeapon | null;
|
|
133
|
+
/**
|
|
134
|
+
* Look up a handheld weapon by display name, case-insensitively.
|
|
135
|
+
*
|
|
136
|
+
* @param name - English display name such as `"Karma AR-50"`; surrounding
|
|
137
|
+
* whitespace is ignored.
|
|
138
|
+
* @returns The frozen weapon record, or `null` when unknown.
|
|
139
|
+
* @throws {TypeError} If `name` is present and not a string. A nullish name is a miss,
|
|
140
|
+
* answered like an unrecognised one.
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* import { getPersonalWeaponByName } from '@elite-dangerous-almanac/core/equipment/weapons';
|
|
144
|
+
* getPersonalWeaponByName('Karma AR-50')?.symbol; // -> 'wpn_m_assaultrifle_kinetic_fauto'
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
declare function getPersonalWeaponByName(name: string): PersonalWeapon | null;
|
|
148
|
+
/**
|
|
149
|
+
* Read one handheld weapon's stats at a grade.
|
|
150
|
+
*
|
|
151
|
+
* @param weapon - A catalogue weapon record.
|
|
152
|
+
* @param grade - Integer grade `1`–`5`.
|
|
153
|
+
* @returns The frozen grade record, or `null` when the record carries no such grade.
|
|
154
|
+
* Every catalogued weapon carries all five, so the `null` is the same promise
|
|
155
|
+
* {@link getSuitGrade} makes rather than an outcome the shipped catalogue produces —
|
|
156
|
+
* write the two the same way and neither can surprise you.
|
|
157
|
+
* @throws {RangeError} If `grade` is not an integer from 1 through 5.
|
|
158
|
+
* @example
|
|
159
|
+
* ```ts
|
|
160
|
+
* import { PERSONAL_WEAPONS, getPersonalWeaponGrade } from '@elite-dangerous-almanac/core/equipment/weapons';
|
|
161
|
+
* getPersonalWeaponGrade(PERSONAL_WEAPONS[0]!, 5)?.modificationSlots; // -> 4
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
declare function getPersonalWeaponGrade(weapon: PersonalWeapon, grade: number): PersonalWeaponGrade | null;
|
|
165
|
+
/**
|
|
166
|
+
* What one handheld weapon does per second at a grade, sustained and unsustained.
|
|
167
|
+
*
|
|
168
|
+
* @remarks
|
|
169
|
+
* Frozen, so a result can be held and shared without a defensive copy.
|
|
170
|
+
*/
|
|
171
|
+
interface PersonalWeaponMetrics {
|
|
172
|
+
/** Damage of one trigger pull — every projectile of every round in it. */
|
|
173
|
+
readonly damagePerShot: number;
|
|
174
|
+
/** {@link PersonalWeaponMetrics.damagePerShot} with every projectile hitting the head. */
|
|
175
|
+
readonly headshotDamagePerShot: number;
|
|
176
|
+
/** Trigger pulls per second. */
|
|
177
|
+
readonly rateOfFire: number;
|
|
178
|
+
/** Trigger pulls per second averaged over reloads. */
|
|
179
|
+
readonly sustainedRateOfFire: number;
|
|
180
|
+
/** Damage per second while firing, reloads ignored. */
|
|
181
|
+
readonly damagePerSecond: number;
|
|
182
|
+
/** Damage per second averaged over reloads — the figure a long fight sees. */
|
|
183
|
+
readonly sustainedDamagePerSecond: number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Everything the on-foot damage arithmetic gives you for one weapon: damage per trigger
|
|
187
|
+
* pull, per second, and per second once reloads are counted.
|
|
188
|
+
*
|
|
189
|
+
* A grade record states damage **per projectile**, so a shot is that damage times the
|
|
190
|
+
* projectiles a round carries times the rounds one trigger pull fires. The sustained
|
|
191
|
+
* figures then average in the reload: a magazine's worth of fire takes the shots after
|
|
192
|
+
* the first, plus the tail of the last burst, plus the reload.
|
|
193
|
+
*
|
|
194
|
+
* ```text
|
|
195
|
+
* damagePerShot = damage × projectiles × burstRounds
|
|
196
|
+
* DPS = damagePerShot × rateOfFire
|
|
197
|
+
* SDPS = damagePerShot × (magazine's shots / one magazine-and-reload cycle)
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @param weapon - A catalogue weapon record.
|
|
201
|
+
* @param grade - Integer grade `1`–`5`.
|
|
202
|
+
* @param modifiers - Fitted modification modifiers, folded per stat the way
|
|
203
|
+
* {@link applyPersonalModifiers} does. `magazineSize` and `headshotMultiplier` are the
|
|
204
|
+
* two this arithmetic reads; modifiers naming other stats are ignored. A Reload Speed
|
|
205
|
+
* modification carries no modifier at all, so it arrives through `options` instead. A
|
|
206
|
+
* fractional magazine is held to whole rounds, rounding **up**, as `ships/weapons` does.
|
|
207
|
+
* @param options - `reloadSpeed` takes the reload from
|
|
208
|
+
* {@link PersonalWeapon.reloadTime | reloadTime.upgraded} rather than `.default`,
|
|
209
|
+
* because Reload Speed carries its magnitude as that pair rather than as a modifier.
|
|
210
|
+
* @returns The frozen {@link PersonalWeaponMetrics}, or `null` when the record carries
|
|
211
|
+
* no such grade — the same nullable answer {@link getPersonalWeaponGrade} gives. A
|
|
212
|
+
* magazine that modifiers empty to zero rounds or fewer reports no sustained fire.
|
|
213
|
+
* @throws {RangeError} If `grade` is not an integer from 1 through 5.
|
|
214
|
+
* @example
|
|
215
|
+
* ```ts
|
|
216
|
+
* import {
|
|
217
|
+
* getPersonalWeaponByName,
|
|
218
|
+
* personalWeaponMetrics,
|
|
219
|
+
* } from '@elite-dangerous-almanac/core/equipment/weapons';
|
|
220
|
+
*
|
|
221
|
+
* const shotgun = getPersonalWeaponByName('Manticore Intimidator')!;
|
|
222
|
+
* personalWeaponMetrics(shotgun, 5)?.damagePerShot; // -> 52.15 (ten pellets of 5.215)
|
|
223
|
+
* personalWeaponMetrics(shotgun, 5)?.damagePerSecond; // -> 65.19
|
|
224
|
+
* personalWeaponMetrics(shotgun, 5)?.sustainedDamagePerSecond; // -> 31.6 (with the 2.5 s reload)
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
declare function personalWeaponMetrics(weapon: PersonalWeapon, grade: number, modifiers?: readonly PersonalModifier[], options?: {
|
|
228
|
+
readonly reloadSpeed?: boolean;
|
|
229
|
+
}): PersonalWeaponMetrics | null;
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Odyssey personal suits: their journal identifiers, the suit-wide component stats every
|
|
233
|
+
* grade shares, and the grade-dependent defensive stats.
|
|
234
|
+
*
|
|
235
|
+
* @packageDocumentation
|
|
236
|
+
*/
|
|
237
|
+
|
|
238
|
+
/** A Pioneer Supplies equipment grade, from the stock grade 1 through grade 5. */
|
|
239
|
+
type EquipmentGrade = 1 | 2 | 3 | 4 | 5;
|
|
240
|
+
/**
|
|
241
|
+
* Frontier's own `SlotName` for a suit weapon mount, exactly as the journal spells it.
|
|
242
|
+
*
|
|
243
|
+
* @remarks
|
|
244
|
+
* The `SuitLoadout`, `CreateSuitLoadout`, `SwitchSuitLoadout`, `LoadoutEquipModule` and
|
|
245
|
+
* `LoadoutRemoveModule` events all write one of these three strings. The secondary mount
|
|
246
|
+
* carries no number, because the game gives it none. Compare a key with `===`; it is
|
|
247
|
+
* case-sensitive, like every other journal key.
|
|
248
|
+
*/
|
|
249
|
+
type PersonalMountKey = 'PrimaryWeapon1' | 'PrimaryWeapon2' | 'SecondaryWeapon';
|
|
250
|
+
/**
|
|
251
|
+
* One weapon mount on a suit.
|
|
252
|
+
*
|
|
253
|
+
* @remarks
|
|
254
|
+
* {@link PersonalMount.key} is Frontier's journal `SlotName`, so a `SuitLoadout`
|
|
255
|
+
* module joins straight onto a mount without a positional index.
|
|
256
|
+
* @example
|
|
257
|
+
* ```ts
|
|
258
|
+
* import { getSuitByFamily } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
259
|
+
*
|
|
260
|
+
* const suit = getSuitByFamily('tacticalsuit')!;
|
|
261
|
+
* suit.mounts.map((mount) => mount.key);
|
|
262
|
+
* // -> ['PrimaryWeapon1', 'PrimaryWeapon2', 'SecondaryWeapon']
|
|
263
|
+
* suit.mounts.filter((mount) => mount.kind === 'primary').map((mount) => mount.key);
|
|
264
|
+
* // -> ['PrimaryWeapon1', 'PrimaryWeapon2']
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
interface PersonalMount {
|
|
268
|
+
/** Frontier journal `SlotName`, e.g. `"PrimaryWeapon1"`. */
|
|
269
|
+
readonly key: PersonalMountKey;
|
|
270
|
+
/** Which weapons the mount takes; a weapon whose `slot` equals it fits here. */
|
|
271
|
+
readonly kind: PersonalWeaponSlot;
|
|
272
|
+
}
|
|
273
|
+
/** The stats of one suit at one equipment grade. */
|
|
274
|
+
interface SuitGrade {
|
|
275
|
+
/** Frontier item symbol for this exact suit and grade. */
|
|
276
|
+
readonly symbol: string;
|
|
277
|
+
/** Permanent engineering-modification slots available, from `0` through `4`. */
|
|
278
|
+
readonly modificationSlots: number;
|
|
279
|
+
/** Base shield strength in shield points. */
|
|
280
|
+
readonly shieldStrength: number;
|
|
281
|
+
/** Shield points regenerated per second. */
|
|
282
|
+
readonly shieldRegeneration: number;
|
|
283
|
+
/** Kinetic damage resistance as a fraction; negative values increase damage. */
|
|
284
|
+
readonly kineticResistance: number;
|
|
285
|
+
/** Thermal damage resistance as a fraction. */
|
|
286
|
+
readonly thermalResistance: number;
|
|
287
|
+
/** Plasma damage resistance as a fraction; negative values increase damage. */
|
|
288
|
+
readonly plasmaResistance: number;
|
|
289
|
+
/** Explosive damage resistance as a fraction. */
|
|
290
|
+
readonly explosiveResistance: number;
|
|
291
|
+
}
|
|
292
|
+
/** One personal suit model sold by Pioneer Supplies. */
|
|
293
|
+
interface Suit {
|
|
294
|
+
/** Suit family without a grade suffix, e.g. `"utilitysuit"`. */
|
|
295
|
+
readonly family: string;
|
|
296
|
+
/** English display name, e.g. `"Maverick Suit"`. */
|
|
297
|
+
readonly name: string;
|
|
298
|
+
/**
|
|
299
|
+
* Every weapon mount the suit carries, in the order the game lists them: the
|
|
300
|
+
* primary mounts by their number, then the secondary mount.
|
|
301
|
+
*
|
|
302
|
+
* @remarks
|
|
303
|
+
* Count a kind by filtering:
|
|
304
|
+
* `suit.mounts.filter((mount) => mount.kind === 'primary').length`.
|
|
305
|
+
*/
|
|
306
|
+
readonly mounts: readonly PersonalMount[];
|
|
307
|
+
/** Suit health in health points, the pool the shield protects. */
|
|
308
|
+
readonly health: number;
|
|
309
|
+
/** Suit mass in kilograms. */
|
|
310
|
+
readonly mass: number;
|
|
311
|
+
/** Battery capacity in energy units, the pool the suit's tools draw from. */
|
|
312
|
+
readonly batteryCapacity: number;
|
|
313
|
+
/** Emergency air, in seconds of life support. */
|
|
314
|
+
readonly oxygenTime: number;
|
|
315
|
+
/** Jump-assist boost acceleration, the bare figure the panel shows, which has no unit. */
|
|
316
|
+
readonly boostAcceleration: number;
|
|
317
|
+
/** Backpack goods capacity in items. */
|
|
318
|
+
readonly goodsCapacity: number;
|
|
319
|
+
/** Backpack assets capacity in components. */
|
|
320
|
+
readonly assetsCapacity: number;
|
|
321
|
+
/** Backpack data capacity in items. */
|
|
322
|
+
readonly dataCapacity: number;
|
|
323
|
+
/** How far footsteps carry, as a multiplier of the base audible range. */
|
|
324
|
+
readonly footstepAudibleRange: number;
|
|
325
|
+
/** Line-of-sight analysis range in metres. */
|
|
326
|
+
readonly losAnalysisRange: number;
|
|
327
|
+
/** Seconds of line of sight the suit needs to complete an analysis. */
|
|
328
|
+
readonly losAnalysisTime: number;
|
|
329
|
+
/**
|
|
330
|
+
* Available grade records, keyed by `"1"` through `"5"`.
|
|
331
|
+
*
|
|
332
|
+
* @remarks
|
|
333
|
+
* A grade changes exactly what {@link SuitGrade} carries — the four resistances,
|
|
334
|
+
* shield strength, shield regeneration, the modification slots and the item symbol.
|
|
335
|
+
* Every stat above is a property of the suit family and is the same at all five.
|
|
336
|
+
*/
|
|
337
|
+
readonly grades: Readonly<Partial<Record<`${EquipmentGrade}`, SuitGrade>>>;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Every personal suit, including the non-upgradeable Flight Suit.
|
|
341
|
+
*
|
|
342
|
+
* @example
|
|
343
|
+
* ```ts
|
|
344
|
+
* import { SUITS } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
345
|
+
* SUITS.find((suit) => suit.family === 'utilitysuit')?.name; // -> 'Maverick Suit'
|
|
346
|
+
* ```
|
|
347
|
+
*/
|
|
348
|
+
declare const SUITS: readonly Suit[];
|
|
349
|
+
/**
|
|
350
|
+
* Look up a suit model by its grade-independent family, case-insensitively.
|
|
351
|
+
*
|
|
352
|
+
* @param family - Family such as `"utilitysuit"`, matched case-insensitively after
|
|
353
|
+
* trimming surrounding whitespace.
|
|
354
|
+
* @returns The frozen suit record, or `null` when unknown.
|
|
355
|
+
* @throws {TypeError} If `family` is present and not a string. A nullish family is a
|
|
356
|
+
* miss, answered like an unrecognised one.
|
|
357
|
+
* @example
|
|
358
|
+
* ```ts
|
|
359
|
+
* import { getSuitByFamily } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
360
|
+
* getSuitByFamily('utilitysuit')?.name; // -> 'Maverick Suit'
|
|
361
|
+
* ```
|
|
362
|
+
*/
|
|
363
|
+
declare function getSuitByFamily(family: string): Suit | null;
|
|
364
|
+
/**
|
|
365
|
+
* Look up a suit by its display name, case-insensitively.
|
|
366
|
+
*
|
|
367
|
+
* @param name - Display name such as `"Maverick Suit"`, matched case-insensitively
|
|
368
|
+
* after trimming surrounding whitespace.
|
|
369
|
+
* @returns The frozen suit record, or `null` when unknown.
|
|
370
|
+
* @throws {TypeError} If `name` is present and not a string. A nullish name is a miss,
|
|
371
|
+
* answered like an unrecognised one.
|
|
372
|
+
* @example
|
|
373
|
+
* ```ts
|
|
374
|
+
* import { getSuitByName } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
375
|
+
* getSuitByName('Maverick Suit')?.family; // -> 'utilitysuit'
|
|
376
|
+
* ```
|
|
377
|
+
*/
|
|
378
|
+
declare function getSuitByName(name: string): Suit | null;
|
|
379
|
+
/**
|
|
380
|
+
* Resolve the grade-specific Frontier item symbol reported by journal suit events.
|
|
381
|
+
*
|
|
382
|
+
* @param symbol - Item symbol such as `"utilitysuit_class3"`, matched
|
|
383
|
+
* case-insensitively after trimming surrounding whitespace.
|
|
384
|
+
* @returns The owning suit and its numeric grade, or `null` when unknown.
|
|
385
|
+
* @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
|
|
386
|
+
* miss, answered like an unrecognised one.
|
|
387
|
+
* @example
|
|
388
|
+
* ```ts
|
|
389
|
+
* import { getSuitBySymbol } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
390
|
+
* getSuitBySymbol('utilitysuit_class3')?.grade; // -> 3
|
|
391
|
+
* ```
|
|
392
|
+
*/
|
|
393
|
+
declare function getSuitBySymbol(symbol: string): Readonly<{
|
|
394
|
+
suit: Suit;
|
|
395
|
+
grade: EquipmentGrade;
|
|
396
|
+
}> | null;
|
|
397
|
+
/**
|
|
398
|
+
* Read a suit's stats at one grade.
|
|
399
|
+
*
|
|
400
|
+
* @param suit - A catalogue suit record.
|
|
401
|
+
* @param grade - Integer grade `1`–`5`.
|
|
402
|
+
* @returns The frozen grade record, or `null` when that suit has no such grade.
|
|
403
|
+
* @throws {RangeError} If `grade` is not an integer from 1 through 5.
|
|
404
|
+
* @example
|
|
405
|
+
* ```ts
|
|
406
|
+
* import { getSuitByFamily, getSuitGrade } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
407
|
+
* const suit = getSuitByFamily('utilitysuit');
|
|
408
|
+
* if (!suit) throw new Error('Maverick Suit is missing');
|
|
409
|
+
* getSuitGrade(suit, 5)?.modificationSlots; // -> 4
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
declare function getSuitGrade(suit: Suit, grade: number): SuitGrade | null;
|
|
413
|
+
|
|
414
|
+
export { type EquipmentGrade as E, PERSONAL_WEAPONS as P, type ReloadTime as R, SUITS as S, type WeaponUpgradeGroup as W, type PersonalDamageType as a, type PersonalFireMode as b, type PersonalMount as c, type PersonalMountKey as d, type PersonalWeapon as e, type PersonalWeaponClass as f, type PersonalWeaponEngineeringType as g, type PersonalWeaponGrade as h, type PersonalWeaponMetrics as i, type PersonalWeaponSlot as j, type ScopeMagnification as k, type Suit as l, type SuitGrade as m, getPersonalWeaponByName as n, getPersonalWeaponBySymbol as o, getPersonalWeaponGrade as p, getSuitByFamily as q, getSuitByName as r, getSuitBySymbol as s, getSuitGrade as t, personalWeaponMetrics as u };
|
|
@@ -271,8 +271,9 @@ declare function decodeModSystemAddress(id64: SystemAddressInput): DecodedAddres
|
|
|
271
271
|
* `resolveNamingRegionOrigin` in `./naming-region-origins`.
|
|
272
272
|
* @returns The 64-bit system address.
|
|
273
273
|
* @throws {RangeError} If the mass code is outside 0–7, a letter is outside 0–25, `n1`
|
|
274
|
-
* is not one the boxel packer accepts, the origin has a negative coordinate, the name's
|
|
275
|
-
* address layout, or the sequence does not fit
|
|
274
|
+
* is not one the boxel packer accepts, the origin has a negative coordinate, the name's
|
|
275
|
+
* boxel code or sector falls outside the address layout, or the sequence does not fit
|
|
276
|
+
* its size-class-dependent field.
|
|
276
277
|
* @example
|
|
277
278
|
* ```ts
|
|
278
279
|
* import { resolveNamingRegionOrigin } from '@elite-dangerous-almanac/core/astro/naming-region-origins';
|
|
@@ -297,8 +298,9 @@ declare function encodeSystemAddress(parts: SystemNameParts, origin: NamingRegio
|
|
|
297
298
|
* @returns The 64-bit modulated system address. These routinely exceed `2^53`, so
|
|
298
299
|
* keep them as `bigint` (or a decimal string) rather than a JS `number`.
|
|
299
300
|
* @throws {RangeError} If the mass code is outside 0–7, a letter is outside 0–25, `n1`
|
|
300
|
-
* is not one the boxel packer accepts, the origin has a negative coordinate, the name's
|
|
301
|
-
* address layout, or the sequence does not fit
|
|
301
|
+
* is not one the boxel packer accepts, the origin has a negative coordinate, the name's
|
|
302
|
+
* boxel code or sector falls outside the address layout, or the sequence does not fit
|
|
303
|
+
* the 15-bit modulated field.
|
|
302
304
|
* @example
|
|
303
305
|
* ```ts
|
|
304
306
|
* import { resolveNamingRegionOrigin } from '@elite-dangerous-almanac/core/astro/naming-region-origins';
|