@elite-dangerous-almanac/core 0.2.9 → 0.2.11
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/equipment/SOURCES.md +41 -27
- package/PROVENANCE/i18n/SOURCES.md +1 -1
- package/README.md +5 -3
- package/dist/chunk-36I5QLTL.js +1 -0
- package/dist/chunk-36I5QLTL.js.map +1 -0
- package/dist/chunk-4WC5NHBJ.js +1 -0
- package/dist/chunk-4WC5NHBJ.js.map +1 -0
- package/dist/{chunk-HIJR7DOC.js → chunk-53EBUFVU.js} +1 -1
- package/dist/{chunk-HIJR7DOC.js.map → chunk-53EBUFVU.js.map} +1 -1
- package/dist/chunk-A6QTYK2D.js +1 -0
- package/dist/chunk-A6QTYK2D.js.map +1 -0
- package/dist/chunk-C6G7IN74.js +1 -0
- package/dist/{chunk-UTWZZOSA.js.map → chunk-C6G7IN74.js.map} +1 -1
- package/dist/{chunk-5VWACBTN.js → chunk-DBJKLXLS.js} +1 -1
- package/dist/{chunk-5VWACBTN.js.map → chunk-DBJKLXLS.js.map} +1 -1
- package/dist/{chunk-X3MXPE7G.js → chunk-RA6SY445.js} +1 -1
- package/dist/chunk-YI5XKWW2.js +1 -0
- package/dist/{chunk-AC3U7LRK.js.map → chunk-YI5XKWW2.js.map} +1 -1
- package/dist/{chunk-G7WARJ3X.js → chunk-ZWT5Y3JR.js} +1 -1
- package/dist/chunk-ZWT5Y3JR.js.map +1 -0
- package/dist/equipment/index.d.ts +8 -1
- package/dist/equipment/index.js +1 -1
- package/dist/equipment/modifications.js +1 -1
- package/dist/equipment/suit-loadout.d.ts +284 -0
- package/dist/equipment/suit-loadout.js +1 -0
- package/dist/equipment/suit-loadout.js.map +1 -0
- package/dist/equipment/suits.d.ts +1 -1
- package/dist/equipment/suits.js +1 -1
- package/dist/equipment/upgrade-costs.d.ts +1 -1
- package/dist/equipment/upgrade-costs.js +1 -1
- package/dist/equipment/weapons.d.ts +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/suits.d.ts +1 -1
- package/dist/materials/index.js +1 -1
- package/dist/materials/micro-resources-all.js +1 -1
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/build-metrics.js +1 -1
- package/dist/ships/index.js +1 -1
- package/dist/ships/shields.d.ts +4 -1
- package/dist/ships/shields.js +1 -1
- package/dist/ships/ship-loadout.d.ts +5 -1
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/{suits-B37rAORs.d.ts → suits-B4sQMLFe.d.ts} +49 -13
- package/package.json +5 -1
- package/dist/chunk-AC3U7LRK.js +0 -1
- package/dist/chunk-G7WARJ3X.js.map +0 -1
- package/dist/chunk-GVNTKCVF.js +0 -1
- package/dist/chunk-GVNTKCVF.js.map +0 -1
- package/dist/chunk-UTWZZOSA.js +0 -1
- package/dist/chunk-ZBUTGTZ3.js +0 -1
- package/dist/chunk-ZBUTGTZ3.js.map +0 -1
- /package/dist/{chunk-X3MXPE7G.js.map → chunk-RA6SY445.js.map} +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Elite Dangerous personal equipment: Odyssey suits, handheld weapons, suit tools,
|
|
3
3
|
* Pioneer Supplies grade progression and engineer-applied modifications.
|
|
4
4
|
*
|
|
5
|
+
* **Reading a journal suit loadout? Start with {@link parseSuitLoadout}.** It takes a
|
|
6
|
+
* `SuitLoadout`, `SwitchSuitLoadout` or `CreateSuitLoadout` event and answers with the
|
|
7
|
+
* suit, its stats at the grade it states, its modifications and the weapon at each
|
|
8
|
+
* mount. The lookups below are what it resolves an event against, and what an outfitting
|
|
9
|
+
* screen browsing the catalogues calls directly.
|
|
10
|
+
*
|
|
5
11
|
* Material shopping lists are deliberately leaf-only: import grade-upgrade costs from
|
|
6
12
|
* `equipment/upgrade-costs` and modification costs from
|
|
7
13
|
* `equipment/modification-costs`. Keeping them off this barrel lets identity and stat
|
|
@@ -9,8 +15,9 @@
|
|
|
9
15
|
*
|
|
10
16
|
* @packageDocumentation
|
|
11
17
|
*/
|
|
12
|
-
export { E as EquipmentGrade, P as PERSONAL_WEAPONS, a as PersonalDamageType, b as PersonalFireMode, c as PersonalMount, d as PersonalMountKey, e as PersonalWeapon, f as PersonalWeaponClass, g as PersonalWeaponEngineeringType, h as PersonalWeaponGrade, i as PersonalWeaponMetrics, j as PersonalWeaponSlot, R as ReloadTime, S as SUITS, k as ScopeMagnification, l as Suit, m as SuitGrade, W as WeaponUpgradeGroup, n as getPersonalWeaponByName, o as getPersonalWeaponBySymbol, p as getPersonalWeaponGrade, q as getSuitByFamily, r as getSuitByName, s as getSuitBySymbol, t as getSuitGrade, u as personalWeaponMetrics } from '../suits-
|
|
18
|
+
export { E as EquipmentGrade, P as PERSONAL_WEAPONS, a as PersonalDamageType, b as PersonalFireMode, c as PersonalMount, d as PersonalMountKey, e as PersonalWeapon, f as PersonalWeaponClass, g as PersonalWeaponEngineeringType, h as PersonalWeaponGrade, i as PersonalWeaponMetrics, j as PersonalWeaponSlot, R as ReloadTime, S as SUITS, k as ScopeMagnification, l as Suit, m as SuitGrade, W as WeaponUpgradeGroup, n as getPersonalWeaponByName, o as getPersonalWeaponBySymbol, p as getPersonalWeaponGrade, q as getSuitByFamily, r as getSuitByName, s as getSuitBySymbol, t as getSuitGrade, u as personalWeaponMetrics } from '../suits-B4sQMLFe.js';
|
|
13
19
|
export { PERSONAL_TOOLS, PersonalTool, getPersonalToolById } from './tools.js';
|
|
14
20
|
export { PersonalEngineeringIngredient, PersonalModifier, applyPersonalModifiers, sumPersonalEngineeringIngredients } from './engineering.js';
|
|
15
21
|
export { PERSONAL_MODIFICATIONS, PersonalModification, PersonalModificationTarget, getPersonalModification } from './modifications.js';
|
|
16
22
|
export { resolvePersonalModificationForWeapon } from './modification-journal.js';
|
|
23
|
+
export { FittedPersonalModification, FittedPersonalWeapon, SuitLoadout, SuitLoadoutEvent, SuitLoadoutImportOutcome, SuitLoadoutModuleEvent, parseSuitLoadout } from './suit-loadout.js';
|
package/dist/equipment/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{resolvePersonalModificationForWeapon}from"../chunk-R2AEZYX7.js";export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-
|
|
1
|
+
export{parseSuitLoadout}from"../chunk-36I5QLTL.js";export{resolvePersonalModificationForWeapon}from"../chunk-R2AEZYX7.js";export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-YI5XKWW2.js";export{PERSONAL_TOOLS,getPersonalToolById}from"../chunk-CEF7SMB2.js";export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-C6G7IN74.js";export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade,personalWeaponMetrics}from"../chunk-PIU24HRN.js"; export{applyPersonalModifiers,sumPersonalEngineeringIngredients}from"../chunk-SIL356HB.js"; //# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-
|
|
1
|
+
export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-YI5XKWW2.js"; //# sourceMappingURL=modifications.js.map
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { PersonalModifier } from './engineering.js';
|
|
2
|
+
import { PersonalModification } from './modifications.js';
|
|
3
|
+
import { d as PersonalMountKey, e as PersonalWeapon, E as EquipmentGrade, i as PersonalWeaponMetrics, l as Suit, m as SuitGrade } from '../suits-B4sQMLFe.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Import a journal suit loadout: the suit a Commander wears, its grade, the permanent
|
|
7
|
+
* modifications on it, and the weapon at each mount with the modifications on that.
|
|
8
|
+
*
|
|
9
|
+
* The game writes the same payload under three event names — `SuitLoadout` when a
|
|
10
|
+
* session starts or a loadout changes, `SwitchSuitLoadout` when the Commander changes
|
|
11
|
+
* suit, and `CreateSuitLoadout` when they save a new one — so {@link parseSuitLoadout}
|
|
12
|
+
* takes any of the three.
|
|
13
|
+
*
|
|
14
|
+
* This is the personal-equipment counterpart of `ships/ship-loadout`, at the scale the
|
|
15
|
+
* domain needs: a suit has no editor, so an import is one frozen record rather than a
|
|
16
|
+
* mutable build. It carries the suit and weapon catalogues and the modification recipes,
|
|
17
|
+
* which is every catalogue an event names.
|
|
18
|
+
*
|
|
19
|
+
* @packageDocumentation
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/** One weapon entry in a journal suit-loadout event. */
|
|
23
|
+
interface SuitLoadoutModuleEvent {
|
|
24
|
+
/** The mount it occupies, e.g. `"PrimaryWeapon1"`. */
|
|
25
|
+
readonly SlotName: string;
|
|
26
|
+
/** The owned weapon instance's id. */
|
|
27
|
+
readonly SuitModuleID?: number;
|
|
28
|
+
/** The weapon's Frontier symbol, e.g. `"wpn_m_launcher_rocket_sauto"`. */
|
|
29
|
+
readonly ModuleName: string;
|
|
30
|
+
/** The weapon's display name, when the event states one. */
|
|
31
|
+
readonly ModuleName_Localised?: string;
|
|
32
|
+
/** The weapon's Pioneer Supplies grade, 1–5. */
|
|
33
|
+
readonly Class: number;
|
|
34
|
+
/** Each permanent modification on the weapon, in the game's own spelling. */
|
|
35
|
+
readonly WeaponMods?: readonly string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A journal `SuitLoadout`, `SwitchSuitLoadout` or `CreateSuitLoadout` event.
|
|
39
|
+
*
|
|
40
|
+
* @remarks
|
|
41
|
+
* `event` and `timestamp` name the journal line rather than the loadout, and the
|
|
42
|
+
* `_Localised` fields are the game's own display text for a locale. {@link
|
|
43
|
+
* parseSuitLoadout} drops all four; `i18n/suits`, `i18n/personal-weapons` and
|
|
44
|
+
* `i18n/personal-modifications` answer for display text in every stored locale.
|
|
45
|
+
*/
|
|
46
|
+
interface SuitLoadoutEvent {
|
|
47
|
+
/** The journal event name. Accepted on input, and not part of the loadout. */
|
|
48
|
+
readonly event?: string;
|
|
49
|
+
/** When the game wrote the line. */
|
|
50
|
+
readonly timestamp?: string;
|
|
51
|
+
/** The owned suit instance's id. */
|
|
52
|
+
readonly SuitID?: number;
|
|
53
|
+
/** The suit's grade-specific Frontier symbol, e.g. `"tacticalsuit_class5"`. */
|
|
54
|
+
readonly SuitName: string;
|
|
55
|
+
/** The suit's display name, when the event states one. */
|
|
56
|
+
readonly SuitName_Localised?: string;
|
|
57
|
+
/** Each permanent modification on the suit, in the game's own spelling. */
|
|
58
|
+
readonly SuitMods?: readonly string[];
|
|
59
|
+
/** The saved loadout's id. */
|
|
60
|
+
readonly LoadoutID?: number;
|
|
61
|
+
/** The player-given loadout name, e.g. `"Double Trouble"`. */
|
|
62
|
+
readonly LoadoutName?: string;
|
|
63
|
+
/** The weapon at each occupied mount. */
|
|
64
|
+
readonly Modules?: readonly SuitLoadoutModuleEvent[];
|
|
65
|
+
}
|
|
66
|
+
/** One modification an event states, resolved against the recipe catalogue. */
|
|
67
|
+
interface FittedPersonalModification {
|
|
68
|
+
/** The symbol the event wrote, e.g. `"weapon_range"`. */
|
|
69
|
+
readonly journalSymbol: string;
|
|
70
|
+
/**
|
|
71
|
+
* The recipe key, e.g. `"weapon_range_kinetic"`, ready to index
|
|
72
|
+
* `PERSONAL_MODIFICATIONS` and `PERSONAL_MODIFICATION_COSTS`.
|
|
73
|
+
*
|
|
74
|
+
* @remarks
|
|
75
|
+
* It is {@link journalSymbol} trimmed and lower-cased, which is how both catalogues
|
|
76
|
+
* key a recipe. Greater Range, Headshot Damage and Improved Hip Fire Accuracy carry
|
|
77
|
+
* a Kinetic, a Laser and a Plasma recipe each, and the journal writes one symbol for
|
|
78
|
+
* all three, so there the key also gains the suffix the weapon at the mount settles;
|
|
79
|
+
* `equipment/modification-journal` is that lookup.
|
|
80
|
+
*/
|
|
81
|
+
readonly symbol: string;
|
|
82
|
+
/** The recipe itself. */
|
|
83
|
+
readonly modification: PersonalModification;
|
|
84
|
+
}
|
|
85
|
+
/** One weapon an event puts on a suit mount, resolved against the weapon catalogue. */
|
|
86
|
+
interface FittedPersonalWeapon {
|
|
87
|
+
/** The mount, in the catalogue's spelling, whatever spelling the event used. */
|
|
88
|
+
readonly mount: PersonalMountKey;
|
|
89
|
+
/** The owned weapon instance's id, or `null` when the event states none. */
|
|
90
|
+
readonly moduleId: number | null;
|
|
91
|
+
/** The weapon. */
|
|
92
|
+
readonly weapon: PersonalWeapon;
|
|
93
|
+
/** The weapon's grade, from the event's `Class`. */
|
|
94
|
+
readonly grade: EquipmentGrade;
|
|
95
|
+
/**
|
|
96
|
+
* Each modification the catalogues resolved, in the order the event lists them.
|
|
97
|
+
* Anything the event stated and this leaves out is in
|
|
98
|
+
* {@link SuitLoadout.importOutcomes}.
|
|
99
|
+
*/
|
|
100
|
+
readonly modifications: readonly FittedPersonalModification[];
|
|
101
|
+
/**
|
|
102
|
+
* Every modifier that acts on this weapon, ready for `applyPersonalModifiers`.
|
|
103
|
+
*
|
|
104
|
+
* @remarks
|
|
105
|
+
* This includes the suit's own modifiers that name a stat the weapon carries: Extra
|
|
106
|
+
* Ammo Capacity is a suit modification and multiplies a *weapon's* `reserveAmmo`, so
|
|
107
|
+
* one list answers for the weapon and a consumer does not have to know which
|
|
108
|
+
* equipment the recipe sits on. That is also why nothing is ever concatenated onto
|
|
109
|
+
* it: adding {@link SuitLoadout.modifiers} multiplies those factors in a second time.
|
|
110
|
+
*/
|
|
111
|
+
readonly modifiers: readonly PersonalModifier[];
|
|
112
|
+
/** Whether Reload Speed is fitted, which selects `weapon.reloadTime.upgraded`. */
|
|
113
|
+
readonly reloadSpeed: boolean;
|
|
114
|
+
/** Whether Scope is fitted, which selects `weapon.scopeMagnification.upgraded`. */
|
|
115
|
+
readonly scope: boolean;
|
|
116
|
+
/** What the weapon does per second at this grade, with {@link modifiers} folded in. */
|
|
117
|
+
readonly metrics: PersonalWeaponMetrics;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Something an event states that the import could not use.
|
|
121
|
+
*
|
|
122
|
+
* @remarks
|
|
123
|
+
* An event is taken as far as the catalogues allow. Every outcome reports one entry the
|
|
124
|
+
* import left out — a weapon it does not fit, or a modification it does not apply — so
|
|
125
|
+
* the loadout holds what the catalogues answer for. The suit is the one identity a miss
|
|
126
|
+
* refuses outright, because nothing else in the event stands without it; a malformed
|
|
127
|
+
* event is refused too, and {@link parseSuitLoadout} states what it checks.
|
|
128
|
+
*/
|
|
129
|
+
interface SuitLoadoutImportOutcome {
|
|
130
|
+
/**
|
|
131
|
+
* Why the entry is left out:
|
|
132
|
+
*
|
|
133
|
+
* - `unknownWeapon` — no catalogue weapon answers to `ModuleName`.
|
|
134
|
+
* - `unknownMount` — the suit carries no mount by that `SlotName`.
|
|
135
|
+
* - `refusedMount` — the weapon resolves, and the mount does not take its kind: a
|
|
136
|
+
* primary weapon in the secondary mount, or the reverse.
|
|
137
|
+
* - `unknownGrade` — `Class` is not an integer from 1 through 5, so the weapon has
|
|
138
|
+
* no stats to report.
|
|
139
|
+
* - `unknownModification` — no recipe answers to the symbol.
|
|
140
|
+
* - `refusedModification` — the recipe resolves, and it belongs to the other
|
|
141
|
+
* equipment: a suit recipe under `WeaponMods`, or a weapon recipe under `SuitMods`.
|
|
142
|
+
*/
|
|
143
|
+
readonly action: 'unknownWeapon' | 'unknownMount' | 'refusedMount' | 'unknownGrade' | 'unknownModification' | 'refusedModification';
|
|
144
|
+
/**
|
|
145
|
+
* The mount the event named, in its own spelling, or `null` for a modification on
|
|
146
|
+
* the suit itself.
|
|
147
|
+
*/
|
|
148
|
+
readonly mount: string | null;
|
|
149
|
+
/** The weapon or recipe symbol the event stated. */
|
|
150
|
+
readonly sourceSymbol: string;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* One imported suit loadout: the suit, its modifications, and the weapon at each mount.
|
|
154
|
+
*
|
|
155
|
+
* @remarks
|
|
156
|
+
* Every field is a frozen fact the event stated or the catalogues resolved. Read a mount
|
|
157
|
+
* with `loadout.weapons.find((fitted) => fitted.mount === 'PrimaryWeapon1')`; an absent
|
|
158
|
+
* one holds no weapon, which is what the game writes for an empty mount.
|
|
159
|
+
*/
|
|
160
|
+
interface SuitLoadout {
|
|
161
|
+
/** The suit model. */
|
|
162
|
+
readonly suit: Suit;
|
|
163
|
+
/** The suit's grade, from its Frontier symbol. */
|
|
164
|
+
readonly grade: EquipmentGrade;
|
|
165
|
+
/** The suit's stats at {@link grade}. */
|
|
166
|
+
readonly stats: SuitGrade;
|
|
167
|
+
/** The owned suit instance's id, or `null` when the event states none. */
|
|
168
|
+
readonly suitId: number | null;
|
|
169
|
+
/** The saved loadout's id, or `null` when the event states none. */
|
|
170
|
+
readonly loadoutId: number | null;
|
|
171
|
+
/** The player-given loadout name, or `null` when the event states none. */
|
|
172
|
+
readonly name: string | null;
|
|
173
|
+
/**
|
|
174
|
+
* Each modification the catalogues resolved, in the order the event lists them.
|
|
175
|
+
* Anything the event stated and this leaves out is in {@link importOutcomes}.
|
|
176
|
+
*/
|
|
177
|
+
readonly modifications: readonly FittedPersonalModification[];
|
|
178
|
+
/**
|
|
179
|
+
* Every modifier the suit's modifications carry, ready for `applyPersonalModifiers`.
|
|
180
|
+
*
|
|
181
|
+
* @remarks
|
|
182
|
+
* A modifier here names a stat of whatever the recipe changes. Most name a suit
|
|
183
|
+
* stat; Extra Ammo Capacity names a weapon's `reserveAmmo` and Reduced Tool Battery
|
|
184
|
+
* Consumption names a tool's `toolEnergyDrain`. `applyPersonalModifiers` reads one
|
|
185
|
+
* stat at a time, so pass the base the stat belongs to and the rest are skipped.
|
|
186
|
+
*
|
|
187
|
+
* **Never concatenate this list with a weapon's own.**
|
|
188
|
+
* {@link FittedPersonalWeapon.modifiers} already carries the suit modifiers that act
|
|
189
|
+
* on that weapon, so a joined list multiplies them in twice: the reserve of a weapon
|
|
190
|
+
* behind Extra Ammo Capacity reads 1.5× from either list alone, and 2.25× from both.
|
|
191
|
+
* Use the weapon's list for a weapon stat, and this one for a suit or tool stat.
|
|
192
|
+
*/
|
|
193
|
+
readonly modifiers: readonly PersonalModifier[];
|
|
194
|
+
/** The weapon at each occupied mount, in the order the event lists them. */
|
|
195
|
+
readonly weapons: readonly FittedPersonalWeapon[];
|
|
196
|
+
/**
|
|
197
|
+
* Everything the event stated that the import left out, as
|
|
198
|
+
* `ships/ship-loadout` reports its own import changes.
|
|
199
|
+
*/
|
|
200
|
+
readonly importOutcomes: readonly SuitLoadoutImportOutcome[];
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Import a journal `SuitLoadout`, `SwitchSuitLoadout` or `CreateSuitLoadout` event.
|
|
204
|
+
*
|
|
205
|
+
* @param event - The event object, as the game wrote it.
|
|
206
|
+
* @returns The frozen {@link SuitLoadout}.
|
|
207
|
+
* @remarks
|
|
208
|
+
* A mount name is matched case-insensitively, with surrounding whitespace ignored, and
|
|
209
|
+
* the loadout reports the catalogue's own spelling — so `fitted.mount === 'PrimaryWeapon1'`
|
|
210
|
+
* holds whatever spelling the source used. Weapon and recipe symbols are matched the
|
|
211
|
+
* same way.
|
|
212
|
+
*
|
|
213
|
+
* The suit has to resolve: an unknown `SuitName` is a `TypeError`, because the grade,
|
|
214
|
+
* the mounts and every stat come from it. Everything else the catalogues cannot resolve
|
|
215
|
+
* is left out of the loadout and reported by {@link SuitLoadout.importOutcomes}, so one
|
|
216
|
+
* unknown weapon does not cost a caller the rest of the event.
|
|
217
|
+
*
|
|
218
|
+
* `SuitID`, `SuitModuleID`, `LoadoutID` and `LoadoutName` are kept: they name the items
|
|
219
|
+
* the Commander owns and the loadout slot they sit in, which is what a later
|
|
220
|
+
* `LoadoutEquipModule` event joins to. `event`, `timestamp` and the `_Localised` display
|
|
221
|
+
* text are dropped.
|
|
222
|
+
* @throws {TypeError} If `event` is not shaped like one. `event` must be an object whose
|
|
223
|
+
* `SuitName` is a string naming a catalogued suit; `Modules`, `SuitMods` and `WeaponMods`
|
|
224
|
+
* must be arrays whenever they are present; each module must be an object with a string
|
|
225
|
+
* `SlotName` and `ModuleName`, no two claiming the same mount; and each modification must
|
|
226
|
+
* be a string. Every other field is trusted.
|
|
227
|
+
* @example
|
|
228
|
+
* ```ts
|
|
229
|
+
* import { parseSuitLoadout } from '@elite-dangerous-almanac/core/equipment/suit-loadout';
|
|
230
|
+
*
|
|
231
|
+
* const loadout = parseSuitLoadout({
|
|
232
|
+
* event: 'SwitchSuitLoadout',
|
|
233
|
+
* SuitID: 1700482757598197,
|
|
234
|
+
* SuitName: 'tacticalsuit_class5',
|
|
235
|
+
* SuitMods: ['suit_nightvision', 'suit_increasedammoreserves'],
|
|
236
|
+
* LoadoutID: 4293000007,
|
|
237
|
+
* LoadoutName: 'Double Trouble',
|
|
238
|
+
* Modules: [
|
|
239
|
+
* {
|
|
240
|
+
* SlotName: 'PrimaryWeapon1',
|
|
241
|
+
* SuitModuleID: 1701103603778031,
|
|
242
|
+
* ModuleName: 'wpn_m_launcher_rocket_sauto',
|
|
243
|
+
* Class: 5,
|
|
244
|
+
* WeaponMods: ['weapon_clipsize'],
|
|
245
|
+
* },
|
|
246
|
+
* ],
|
|
247
|
+
* });
|
|
248
|
+
*
|
|
249
|
+
* loadout.suit.name; // -> 'Dominator Suit'
|
|
250
|
+
* loadout.grade; // -> 5
|
|
251
|
+
* loadout.name; // -> 'Double Trouble'
|
|
252
|
+
* loadout.weapons[0]?.weapon.name; // -> 'Karma L-6'
|
|
253
|
+
* loadout.weapons[0]?.metrics.damagePerSecond; // -> 119.2
|
|
254
|
+
* ```
|
|
255
|
+
* @example
|
|
256
|
+
* A stat the game shows on foot is the catalogue's base with the fitted modifiers folded
|
|
257
|
+
* onto it. The suit's Extra Ammo Capacity reaches the weapon that carries the reserve.
|
|
258
|
+
*
|
|
259
|
+
* ```ts
|
|
260
|
+
* import { applyPersonalModifiers } from '@elite-dangerous-almanac/core/equipment/engineering';
|
|
261
|
+
* import { parseSuitLoadout } from '@elite-dangerous-almanac/core/equipment/suit-loadout';
|
|
262
|
+
*
|
|
263
|
+
* const loadout = parseSuitLoadout({
|
|
264
|
+
* SuitName: 'tacticalsuit_class5',
|
|
265
|
+
* SuitMods: ['suit_increasedshieldregen', 'suit_increasedammoreserves'],
|
|
266
|
+
* Modules: [
|
|
267
|
+
* {
|
|
268
|
+
* SlotName: 'PrimaryWeapon1',
|
|
269
|
+
* ModuleName: 'wpn_m_launcher_rocket_sauto',
|
|
270
|
+
* Class: 5,
|
|
271
|
+
* WeaponMods: [],
|
|
272
|
+
* },
|
|
273
|
+
* ],
|
|
274
|
+
* });
|
|
275
|
+
*
|
|
276
|
+
* const fitted = loadout.weapons[0]!;
|
|
277
|
+
* applyPersonalModifiers('shieldRegeneration', loadout.stats.shieldRegeneration, loadout.modifiers);
|
|
278
|
+
* // -> 3.1
|
|
279
|
+
* applyPersonalModifiers('reserveAmmo', fitted.weapon.reserveAmmo, fitted.modifiers); // -> 12
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
declare function parseSuitLoadout(event: SuitLoadoutEvent): SuitLoadout;
|
|
283
|
+
|
|
284
|
+
export { type FittedPersonalModification, type FittedPersonalWeapon, type SuitLoadout, type SuitLoadoutEvent, type SuitLoadoutImportOutcome, type SuitLoadoutModuleEvent, parseSuitLoadout };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{parseSuitLoadout}from"../chunk-36I5QLTL.js"; //# sourceMappingURL=suit-loadout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"O"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { E as EquipmentGrade, c as PersonalMount, d as PersonalMountKey, S as SUITS, l as Suit, m as SuitGrade, q as getSuitByFamily, r as getSuitByName, s as getSuitBySymbol, t as getSuitGrade } from '../suits-
|
|
1
|
+
export { E as EquipmentGrade, c as PersonalMount, d as PersonalMountKey, S as SUITS, l as Suit, m as SuitGrade, q as getSuitByFamily, r as getSuitByName, s as getSuitBySymbol, t as getSuitGrade } from '../suits-B4sQMLFe.js';
|
|
2
2
|
import './engineering.js';
|
package/dist/equipment/suits.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-
|
|
1
|
+
export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-C6G7IN74.js"; //# sourceMappingURL=suits.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getSuitByFamily}from"../chunk-
|
|
1
|
+
import{getSuitByFamily}from"../chunk-C6G7IN74.js";import{getPersonalWeaponBySymbol}from"../chunk-PIU24HRN.js"; import{sumPersonalEngineeringIngredients}from"../chunk-SIL356HB.js"; import{deepFreeze}from"../chunk-DURKO7JU.js";var upgrade_costs_default={suits:{utilitysuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"carbonfibreplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"carbonfibreplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"carbonfibreplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"carbonfibreplating",count:12},{symbol:"graphene",count:12}]},tacticalsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"titaniumplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"titaniumplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"titaniumplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"titaniumplating",count:12},{symbol:"graphene",count:12}]},explorationsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"aerogel",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"aerogel",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"aerogel",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"aerogel",count:12},{symbol:"graphene",count:12}]}},weaponGroups:{takada:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"opticalfibre",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"opticalfibre",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"opticalfibre",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"opticalfibre",count:12}]},manticore:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"chemicalsuperbase",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"chemicalsuperbase",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"chemicalsuperbase",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"chemicalsuperbase",count:12}]},karma:{2:[{symbol:"weaponschematic",count:1},{symbol:"compressionliquefiedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"weaponcomponent",count:2},{symbol:"tungstencarbide",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"compressionliquefiedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"weaponcomponent",count:5},{symbol:"tungstencarbide",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"compressionliquefiedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"weaponcomponent",count:9},{symbol:"tungstencarbide",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"compressionliquefiedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"weaponcomponent",count:12},{symbol:"tungstencarbide",count:12}]}}};var PERSONAL_UPGRADE_COSTS=deepFreeze(upgrade_costs_default);function getSuitUpgradeStepCost(family,targetGrade){assertTargetGrade(targetGrade,"getSuitUpgradeStepCost");const costs=getSuitUpgradeCosts(family);return costs?.[String(targetGrade)]??null}function getSuitUpgradeCost(family,targetGrade,currentGrade=1){assertGrade(targetGrade,"getSuitUpgradeCost: targetGrade");assertGrade(currentGrade,"getSuitUpgradeCost: currentGrade");const costs=getSuitUpgradeCosts(family);if(!costs)return null;return totalCosts(costs,targetGrade,currentGrade)}function getPersonalWeaponUpgradeStepCost(symbol,targetGrade){assertTargetGrade(targetGrade,"getPersonalWeaponUpgradeStepCost");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup][String(targetGrade)]??null}function getPersonalWeaponUpgradeCost(symbol,targetGrade,currentGrade=1){assertGrade(targetGrade,"getPersonalWeaponUpgradeCost: targetGrade");assertGrade(currentGrade,"getPersonalWeaponUpgradeCost: currentGrade");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return totalCosts(PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup],targetGrade,currentGrade)}function totalCosts(costs,targetGrade,currentGrade){const steps=[];for(let grade=currentGrade+1;grade<=targetGrade;grade++){steps.push(costs[String(grade)])}return sumPersonalEngineeringIngredients(...steps)}function getSuitUpgradeCosts(family){const suit=getSuitByFamily(family);if(!suit||!Object.hasOwn(PERSONAL_UPGRADE_COSTS.suits,suit.family))return null;return PERSONAL_UPGRADE_COSTS.suits[suit.family]}function assertTargetGrade(grade,functionName){if(!Number.isInteger(grade)||grade<2||grade>5){throw new RangeError(`${functionName}: targetGrade must be an integer in [2, 5]`)}}function assertGrade(grade,label){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`${label} must be an integer in [1, 5]`)}}export{PERSONAL_UPGRADE_COSTS,getPersonalWeaponUpgradeCost,getPersonalWeaponUpgradeStepCost,getSuitUpgradeCost,getSuitUpgradeStepCost};//# sourceMappingURL=upgrade-costs.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import './engineering.js';
|
|
2
|
-
export { P as PERSONAL_WEAPONS, a as PersonalDamageType, b as PersonalFireMode, e as PersonalWeapon, f as PersonalWeaponClass, g as PersonalWeaponEngineeringType, h as PersonalWeaponGrade, i as PersonalWeaponMetrics, j as PersonalWeaponSlot, R as ReloadTime, k as ScopeMagnification, W as WeaponUpgradeGroup, n as getPersonalWeaponByName, o as getPersonalWeaponBySymbol, p as getPersonalWeaponGrade, u as personalWeaponMetrics } from '../suits-
|
|
2
|
+
export { P as PERSONAL_WEAPONS, a as PersonalDamageType, b as PersonalFireMode, e as PersonalWeapon, f as PersonalWeaponClass, g as PersonalWeaponEngineeringType, h as PersonalWeaponGrade, i as PersonalWeaponMetrics, j as PersonalWeaponSlot, R as ReloadTime, k as ScopeMagnification, W as WeaponUpgradeGroup, n as getPersonalWeaponByName, o as getPersonalWeaponBySymbol, p as getPersonalWeaponGrade, u as personalWeaponMetrics } from '../suits-B4sQMLFe.js';
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -90,7 +90,7 @@ export { getPersonalModificationDescription, getPersonalModificationName } from
|
|
|
90
90
|
export { getLoadoutSlotName, getSlotRestrictionLabel } from './slots.js';
|
|
91
91
|
export { getCalculationIssueMessage, getLoadoutEditErrorMessage, getLoadoutIssueMessage, getSlefDiagnosticMessage } from './diagnostics.js';
|
|
92
92
|
export { PreEngineeredVariantIdentity, getPreEngineeredVariantName } from './pre-engineered.js';
|
|
93
|
-
import '../suits-
|
|
93
|
+
import '../suits-B4sQMLFe.js';
|
|
94
94
|
import '../equipment/engineering.js';
|
|
95
95
|
import '../ships/slots.js';
|
|
96
96
|
import '../ships/loadout-calculations.js';
|
package/dist/i18n/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getPersonalModificationDescription,getPersonalModificationName}from"../chunk-SS7HVNP5.js";export{getPersonalToolName}from"../chunk-E2HDF6PJ.js";export{getPersonalWeaponDescription}from"../chunk-7C7NJWCF.js";export{getPreEngineeredVariantName}from"../chunk-T7IQHFQ2.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getPersonalMountName,getSuitDescription,getSuitName}from"../chunk-RA4YJBU5.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getExperimentalEffectDescription}from"../chunk-RJ3ZLQRB.js";export{getExperimentalEffectName}from"../chunk-QPT2WJYN.js";export{getMaterialName}from"../chunk-UE22QU7A.js";export{getMicroResourceName}from"../chunk-WZIBBJHA.js";export{getOutfittingFamilyName}from"../chunk-YBE5M27G.js";export{
|
|
1
|
+
export{getModuleName}from"../chunk-URRPEUIK.js";export{getPersonalModificationDescription,getPersonalModificationName}from"../chunk-SS7HVNP5.js";export{getPersonalToolName}from"../chunk-E2HDF6PJ.js";export{getPersonalWeaponDescription}from"../chunk-7C7NJWCF.js";export{getPreEngineeredVariantName}from"../chunk-T7IQHFQ2.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getPersonalMountName,getSuitDescription,getSuitName}from"../chunk-RA4YJBU5.js";export{getCommodityName}from"../chunk-TRGHPX2O.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getExperimentalEffectDescription}from"../chunk-RJ3ZLQRB.js";export{getExperimentalEffectName}from"../chunk-QPT2WJYN.js";export{getMaterialName}from"../chunk-UE22QU7A.js";export{getMicroResourceName}from"../chunk-WZIBBJHA.js";export{getOutfittingFamilyName}from"../chunk-YBE5M27G.js";export{getBlueprintName}from"../chunk-UI5RROGI.js"; //# sourceMappingURL=index.js.map
|
package/dist/i18n/suits.d.ts
CHANGED
package/dist/materials/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-
|
|
1
|
+
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-RA6SY445.js";export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine}from"../chunk-ETREYN5U.js";export{ALL_MATERIALS}from"../chunk-FP2TQJZP.js";export{ENCODED_MATERIALS}from"../chunk-A5TCT2AJ.js";export{MANUFACTURED_MATERIALS}from"../chunk-PF3HZ73R.js";export{RAW_MATERIALS}from"../chunk-GZLD7RTK.js"; export{ALL_MICRO_RESOURCES}from"../chunk-4WC5NHBJ.js";export{DATA_MICRO_RESOURCES}from"../chunk-GVLDFJEY.js";export{ITEM_MICRO_RESOURCES}from"../chunk-WHWFKHV3.js";export{COMPONENT_MICRO_RESOURCES}from"../chunk-HTB52N6S.js";export{CONSUMABLE_MICRO_RESOURCES}from"../chunk-K7L7SMIR.js"; //# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{ALL_MICRO_RESOURCES}from"../chunk-
|
|
1
|
+
export{ALL_MICRO_RESOURCES}from"../chunk-4WC5NHBJ.js"; //# sourceMappingURL=micro-resources-all.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-
|
|
1
|
+
export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-RA6SY445.js"; //# sourceMappingURL=micro-resources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{BuildMetrics}from"../chunk-
|
|
1
|
+
export{BuildMetrics}from"../chunk-ZWT5Y3JR.js"; //# sourceMappingURL=build-metrics.js.map
|
package/dist/ships/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LoadoutEditError,ShipLoadout}from"../chunk-
|
|
1
|
+
export{LoadoutEditError,ShipLoadout}from"../chunk-53EBUFVU.js";export{OUTFITTING_FAMILIES}from"../chunk-M6G3UDTX.js";export{validateLoadout}from"../chunk-3GNYPM6J.js";export{SHIP_MODULE_LIMITS,calculateModuleLimits}from"../chunk-KPETDYQX.js";export{hasFrameShiftDriveJumpStats,hasMassCurveStats,hasPowerDistributorStats,hasPowerGenerationStats,hasShieldRegenerationStats,hasWeaponDamageStats}from"../chunk-JTQVWIGL.js";export{BuildMetrics}from"../chunk-ZWT5Y3JR.js";export{weaponsCapacitorMetrics}from"../chunk-M4FZRDAH.js";export{powerBudget}from"../chunk-GGQMIQPC.js";export{shieldCapacitorMetrics}from"../chunk-XQJERZUS.js";export{cellBankSummary,shieldRecovery}from"../chunk-JMAXSXXQ.js"; export{SHIPS,getShipByName,getShipBySymbol,getShipSlots}from"../chunk-C4FUV6GF.js";export{getLoadoutModifier,inspectSlef,parseSlef,stringifySlef,toSlef}from"../chunk-T4MKUKYS.js";export{getSourceModuleValue,sourcePurchaseFromLoadout,sumSourceModuleValues}from"../chunk-NIURLW2F.js";export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics}from"../chunk-AAU7OM47.js";export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-C3YZ5KTA.js";export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-AUBV6S7V.js";export{shieldMassCurveMultiplier,shieldMetrics,shieldStrength}from"../chunk-DBJKLXLS.js";export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-OSMBAFRW.js"; export{OVERHEAT_HEAT_LEVEL,effectiveWeaponThermalLoad,equilibriumHeatLevel,heatLevelAtTime,heatMetrics,secondsToHeatLevel}from"../chunk-6HA2YIKW.js";export{frameShiftDriveMassFactor,fuelPerJump,singleJumpRange,totalRange}from"../chunk-VTMCSCXV.js";export{calculateCargoCapacity,calculateFuelCapacity,calculatePassengerCapacity,calculateUnladenMass}from"../chunk-C3LLPLLD.js"; export{mobilityCapacitorMetrics}from"../chunk-VEEBJFJ7.js";export{mobilityMetrics,thrusterMassCurveMultiplier}from"../chunk-A4QKXXZD.js"; export{distributorMetrics}from"../chunk-M2TCZKRT.js"; export{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"../chunk-77I24V6B.js";export{SHIP_GUNSIGHTS,getShipGunsight,projectGunsight}from"../chunk-XSN53F7W.js";export{ammunitionCapacity}from"../chunk-AA3K5XUE.js";export{armourMetrics}from"../chunk-Q5ALV3DI.js";export{effectiveHitPoints,mapDamageTypes,stackArmourResistance,stackShieldResistance,systemsResistance}from"../chunk-F44QX47A.js"; export{computeModifiers,sumMaterials}from"../chunk-U73MBQ45.js"; export{resolveBlueprintForModule}from"../chunk-2J6NNI3Y.js";export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-M4STXLXO.js";export{BLUEPRINTS,getBlueprint,getBlueprintGrade}from"../chunk-AYAKU4YA.js"; export{SLOT_RESTRICTION_LABELS,enumerateSlots,parseSlotName}from"../chunk-RAO35XDF.js"; //# sourceMappingURL=index.js.map
|
package/dist/ships/shields.d.ts
CHANGED
|
@@ -54,7 +54,10 @@ import { DamageResistances, DamageTypeValues, DamageResistanceParams } from './r
|
|
|
54
54
|
* An {@link OutfittingModule} record satisfies this as-is, so a catalogue entry can be
|
|
55
55
|
* passed straight in — the six curve fields and the resistances are exactly what a
|
|
56
56
|
* generator's record carries. `optMultiplier` is what a Reinforced/Thermic blueprint
|
|
57
|
-
* moves
|
|
57
|
+
* moves, and `optMass` what Enhanced Low Power moves. A recipe names those two alone and
|
|
58
|
+
* the four endpoints follow them, so pass the whole moved curve rather than a moved
|
|
59
|
+
* optimum on stock endpoints. `FittedModule.effectiveStats` carries it already.
|
|
60
|
+
* Every field is optional because the type accepts those records; a generator
|
|
58
61
|
* **missing** any of the six curve fields cannot be placed on the curve at all, and
|
|
59
62
|
* raises no shield ({@link shieldMassCurveMultiplier} returns `0`).
|
|
60
63
|
*
|
package/dist/ships/shields.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{shieldMassCurveMultiplier,shieldMetrics,shieldStrength}from"../chunk-
|
|
1
|
+
export{shieldMassCurveMultiplier,shieldMetrics,shieldStrength}from"../chunk-DBJKLXLS.js"; //# sourceMappingURL=shields.js.map
|
|
@@ -72,7 +72,11 @@ interface FittedModule {
|
|
|
72
72
|
* A module engineered through {@link ShipLoadout.applyBlueprint} also retains
|
|
73
73
|
* recipe-only burst values that its journal-shaped modifier block does not serialize.
|
|
74
74
|
* A festive variant fitted through {@link ShipLoadout.setPreEngineeredVariant} uses
|
|
75
|
-
* its fixed modifier block.
|
|
75
|
+
* its fixed modifier block. A thruster's or shield generator's mass curve moves as a
|
|
76
|
+
* whole. A recipe names the optimal mass and the optimal multiplier, and the four
|
|
77
|
+
* endpoints follow them. A generator's maximum mass is the exception: a lightened
|
|
78
|
+
* optimum leaves it where it was. So this record carries the curve the build's own
|
|
79
|
+
* metrics read.
|
|
76
80
|
*/
|
|
77
81
|
readonly effectiveStats: OutfittingModule | null;
|
|
78
82
|
/** Fully rearmed ammunition capacity, or `null` for modules without ammunition. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LoadoutEditError,ShipLoadout}from"../chunk-
|
|
1
|
+
export{LoadoutEditError,ShipLoadout}from"../chunk-53EBUFVU.js"; //# sourceMappingURL=ship-loadout.js.map
|
|
@@ -229,8 +229,9 @@ declare function personalWeaponMetrics(weapon: PersonalWeapon, grade: number, mo
|
|
|
229
229
|
}): PersonalWeaponMetrics | null;
|
|
230
230
|
|
|
231
231
|
/**
|
|
232
|
-
* Odyssey personal suits: their journal identifiers, the suit-wide
|
|
233
|
-
*
|
|
232
|
+
* Odyssey personal suits: their journal identifiers, the suit-wide stats every grade
|
|
233
|
+
* shares, including the shield resistances, and the grade-dependent armour resistances
|
|
234
|
+
* and shield figures.
|
|
234
235
|
*
|
|
235
236
|
* @packageDocumentation
|
|
236
237
|
*/
|
|
@@ -270,7 +271,24 @@ interface PersonalMount {
|
|
|
270
271
|
/** Which weapons the mount takes; a weapon whose `slot` equals it fits here. */
|
|
271
272
|
readonly kind: PersonalWeaponSlot;
|
|
272
273
|
}
|
|
273
|
-
/**
|
|
274
|
+
/**
|
|
275
|
+
* The stats of one suit at one equipment grade.
|
|
276
|
+
*
|
|
277
|
+
* @remarks
|
|
278
|
+
* A suit defends in two layers, and each layer has its own four resistances. The four
|
|
279
|
+
* here are the armour's: they apply to the {@link Suit.health} pool, and the Damage
|
|
280
|
+
* Resistance modification moves them. The shield's four sit on {@link Suit}, because a
|
|
281
|
+
* grade leaves them alone.
|
|
282
|
+
* @example
|
|
283
|
+
* ```ts
|
|
284
|
+
* import { getSuitByFamily, getSuitGrade } from '@elite-dangerous-almanac/core/equipment/suits';
|
|
285
|
+
*
|
|
286
|
+
* const suit = getSuitByFamily('tacticalsuit')!;
|
|
287
|
+
* // The shield is weak against a laser; the armour behind it is strong.
|
|
288
|
+
* suit.shieldThermalResistance; // -> -0.5
|
|
289
|
+
* getSuitGrade(suit, 5)!.armourThermalResistance; // -> 0.8
|
|
290
|
+
* ```
|
|
291
|
+
*/
|
|
274
292
|
interface SuitGrade {
|
|
275
293
|
/** Frontier item symbol for this exact suit and grade. */
|
|
276
294
|
readonly symbol: string;
|
|
@@ -280,14 +298,14 @@ interface SuitGrade {
|
|
|
280
298
|
readonly shieldStrength: number;
|
|
281
299
|
/** Shield points regenerated per second. */
|
|
282
300
|
readonly shieldRegeneration: number;
|
|
283
|
-
/**
|
|
284
|
-
readonly
|
|
285
|
-
/**
|
|
286
|
-
readonly
|
|
287
|
-
/**
|
|
288
|
-
readonly
|
|
289
|
-
/**
|
|
290
|
-
readonly
|
|
301
|
+
/** Armour kinetic damage resistance as a fraction; negative values increase damage. */
|
|
302
|
+
readonly armourKineticResistance: number;
|
|
303
|
+
/** Armour thermal damage resistance as a fraction. */
|
|
304
|
+
readonly armourThermalResistance: number;
|
|
305
|
+
/** Armour plasma damage resistance as a fraction; negative values increase damage. */
|
|
306
|
+
readonly armourPlasmaResistance: number;
|
|
307
|
+
/** Armour explosive damage resistance as a fraction. */
|
|
308
|
+
readonly armourExplosiveResistance: number;
|
|
291
309
|
}
|
|
292
310
|
/** One personal suit model sold by Pioneer Supplies. */
|
|
293
311
|
interface Suit {
|
|
@@ -306,6 +324,23 @@ interface Suit {
|
|
|
306
324
|
readonly mounts: readonly PersonalMount[];
|
|
307
325
|
/** Suit health in health points, the pool the shield protects. */
|
|
308
326
|
readonly health: number;
|
|
327
|
+
/**
|
|
328
|
+
* Shield kinetic damage resistance as a fraction.
|
|
329
|
+
*
|
|
330
|
+
* @remarks
|
|
331
|
+
* The shield takes the damage first, and the armour under it takes what gets
|
|
332
|
+
* through, so the two layers carry separate resistances. The four here are the same
|
|
333
|
+
* at every grade, so they are stored once per family, like every other stat a grade
|
|
334
|
+
* leaves alone. A grade changes the shield's strength and its regeneration, both on
|
|
335
|
+
* {@link SuitGrade}, and it changes the armour's four resistances there as well.
|
|
336
|
+
*/
|
|
337
|
+
readonly shieldKineticResistance: number;
|
|
338
|
+
/** Shield thermal damage resistance as a fraction; negative values increase damage. */
|
|
339
|
+
readonly shieldThermalResistance: number;
|
|
340
|
+
/** Shield plasma damage resistance as a fraction. */
|
|
341
|
+
readonly shieldPlasmaResistance: number;
|
|
342
|
+
/** Shield explosive damage resistance as a fraction. */
|
|
343
|
+
readonly shieldExplosiveResistance: number;
|
|
309
344
|
/** Suit mass in kilograms. */
|
|
310
345
|
readonly mass: number;
|
|
311
346
|
/** Battery capacity in energy units, the pool the suit's tools draw from. */
|
|
@@ -330,8 +365,9 @@ interface Suit {
|
|
|
330
365
|
* Available grade records, keyed by `"1"` through `"5"`.
|
|
331
366
|
*
|
|
332
367
|
* @remarks
|
|
333
|
-
* A grade changes exactly what {@link SuitGrade} carries — the four
|
|
334
|
-
* shield strength, shield regeneration, the modification slots and the
|
|
368
|
+
* A grade changes exactly what {@link SuitGrade} carries — the four armour
|
|
369
|
+
* resistances, shield strength, shield regeneration, the modification slots and the
|
|
370
|
+
* item symbol.
|
|
335
371
|
* Every stat above is a property of the suit family and is the same at all five.
|
|
336
372
|
*/
|
|
337
373
|
readonly grades: Readonly<Partial<Record<`${EquipmentGrade}`, SuitGrade>>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elite-dangerous-almanac/core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"description": "Elite Dangerous static data and calculations: astronomy, ships and outfitting, personal equipment and engineering, materials, and market commodities.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -186,6 +186,10 @@
|
|
|
186
186
|
"types": "./dist/equipment/modifications.d.ts",
|
|
187
187
|
"import": "./dist/equipment/modifications.js"
|
|
188
188
|
},
|
|
189
|
+
"./equipment/suit-loadout": {
|
|
190
|
+
"types": "./dist/equipment/suit-loadout.d.ts",
|
|
191
|
+
"import": "./dist/equipment/suit-loadout.js"
|
|
192
|
+
},
|
|
189
193
|
"./equipment/suits": {
|
|
190
194
|
"types": "./dist/equipment/suits.d.ts",
|
|
191
195
|
"import": "./dist/equipment/suits.js"
|