@elite-dangerous-almanac/core 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROVENANCE/i18n/SOURCES.md +2 -2
- package/PROVENANCE/ships/SOURCES.md +29 -9
- package/README.md +54 -40
- package/dist/astro/galaxy-grid.js +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.d.ts +2 -2
- package/dist/astro/permit-locks.d.ts +2 -1
- package/dist/astro/permit-locks.js +1 -1
- package/dist/astro/procedural-system.d.ts +2 -1
- package/dist/astro/procedural-system.js +1 -1
- package/dist/astro/sector-name.d.ts +2 -1
- package/dist/astro/sector-name.js +1 -1
- package/dist/astro/system-address.d.ts +1 -1
- package/dist/astro/system-name.d.ts +14 -9
- package/dist/astro/system-name.js +1 -1
- package/dist/chunk-2W5MW376.js +1 -0
- package/dist/chunk-2W5MW376.js.map +1 -0
- package/dist/{chunk-VZZUNSDF.js → chunk-4KJ7CR74.js} +1 -1
- package/dist/{chunk-VZZUNSDF.js.map → chunk-4KJ7CR74.js.map} +1 -1
- package/dist/{chunk-6EUVIZAS.js → chunk-4QYTVSNR.js} +1 -1
- package/dist/{chunk-EKQCVCMK.js → chunk-5ZVYRX6Z.js} +1 -1
- package/dist/{chunk-EKQCVCMK.js.map → chunk-5ZVYRX6Z.js.map} +1 -1
- package/dist/chunk-6GJHUWMO.js +1 -0
- package/dist/chunk-6GJHUWMO.js.map +1 -0
- package/dist/chunk-6L56LWTT.js +1 -0
- package/dist/chunk-6L56LWTT.js.map +1 -0
- package/dist/{chunk-GQ5GX5TB.js → chunk-6O4NRRSB.js} +1 -1
- package/dist/chunk-6O4NRRSB.js.map +1 -0
- package/dist/{chunk-WNGQ3IAM.js → chunk-6UNAD74Z.js} +1 -1
- package/dist/{chunk-WNGQ3IAM.js.map → chunk-6UNAD74Z.js.map} +1 -1
- package/dist/{chunk-JPBMRJFC.js → chunk-77I24V6B.js} +1 -1
- package/dist/chunk-77I24V6B.js.map +1 -0
- package/dist/chunk-7ATBEOVC.js +1 -0
- package/dist/chunk-7ATBEOVC.js.map +1 -0
- package/dist/chunk-7TQ2X6Q3.js +1 -0
- package/dist/chunk-7TQ2X6Q3.js.map +1 -0
- package/dist/{chunk-6EPYVBAX.js → chunk-A6OINYNP.js} +1 -1
- package/dist/{chunk-Q3QCLNVG.js → chunk-AYAKU4YA.js} +1 -1
- package/dist/chunk-AYAKU4YA.js.map +1 -0
- package/dist/chunk-B7EYTZRK.js +1 -0
- package/dist/chunk-B7EYTZRK.js.map +1 -0
- package/dist/{chunk-EBAHNZ36.js → chunk-CIULJH3G.js} +1 -1
- package/dist/{chunk-EBAHNZ36.js.map → chunk-CIULJH3G.js.map} +1 -1
- package/dist/{chunk-SNADUQSJ.js → chunk-CJK2IBI2.js} +1 -1
- package/dist/{chunk-SNADUQSJ.js.map → chunk-CJK2IBI2.js.map} +1 -1
- package/dist/{chunk-DYPOL3CI.js → chunk-CJQ37JII.js} +1 -1
- package/dist/chunk-CJQ37JII.js.map +1 -0
- package/dist/chunk-D6YEHR5S.js +1 -0
- package/dist/chunk-D6YEHR5S.js.map +1 -0
- package/dist/{chunk-Z6XMXMVI.js → chunk-DBDCOHI4.js} +1 -1
- package/dist/chunk-DBDCOHI4.js.map +1 -0
- package/dist/{chunk-AFVYCQWL.js → chunk-DCB4COCL.js} +1 -1
- package/dist/{chunk-AFVYCQWL.js.map → chunk-DCB4COCL.js.map} +1 -1
- package/dist/{chunk-CJWFY6OX.js → chunk-DSMLYA2M.js} +1 -1
- package/dist/{chunk-CJWFY6OX.js.map → chunk-DSMLYA2M.js.map} +1 -1
- package/dist/{chunk-UXBCLFGU.js → chunk-DWRNXUAX.js} +1 -1
- package/dist/{chunk-UXBCLFGU.js.map → chunk-DWRNXUAX.js.map} +1 -1
- package/dist/{chunk-UHSNB5SV.js → chunk-EVJ32UF3.js} +1 -1
- package/dist/{chunk-UHSNB5SV.js.map → chunk-EVJ32UF3.js.map} +1 -1
- package/dist/chunk-EVW4Z4CB.js +1 -0
- package/dist/chunk-EVW4Z4CB.js.map +1 -0
- package/dist/{chunk-4S6WB7QR.js → chunk-FF2X4K5P.js} +1 -1
- package/dist/chunk-FF2X4K5P.js.map +1 -0
- package/dist/chunk-FYVPZBXN.js +1 -0
- package/dist/chunk-FYVPZBXN.js.map +1 -0
- package/dist/{chunk-QTZPA2FR.js → chunk-GLWPSVFV.js} +1 -1
- package/dist/chunk-GLWPSVFV.js.map +1 -0
- package/dist/chunk-GZYPQIO2.js +1 -0
- package/dist/chunk-GZYPQIO2.js.map +1 -0
- package/dist/chunk-H47K3UWG.js +1 -0
- package/dist/chunk-H47K3UWG.js.map +1 -0
- package/dist/chunk-JGOAQLYW.js +1 -0
- package/dist/chunk-JGOAQLYW.js.map +1 -0
- package/dist/{chunk-JWWYAMGD.js → chunk-MGRDB2BZ.js} +1 -1
- package/dist/{chunk-JWWYAMGD.js.map → chunk-MGRDB2BZ.js.map} +1 -1
- package/dist/{chunk-MKGJPVPS.js → chunk-MRTTQYT5.js} +1 -1
- package/dist/{chunk-MKGJPVPS.js.map → chunk-MRTTQYT5.js.map} +1 -1
- package/dist/chunk-MTJ4MS7W.js +1 -0
- package/dist/chunk-MTJ4MS7W.js.map +1 -0
- package/dist/chunk-NIURLW2F.js +1 -0
- package/dist/chunk-NIURLW2F.js.map +1 -0
- package/dist/chunk-OLKNYGGT.js +1 -0
- package/dist/chunk-OLKNYGGT.js.map +1 -0
- package/dist/{chunk-UXFMVZAY.js → chunk-OVUHQEH5.js} +1 -1
- package/dist/{chunk-UXFMVZAY.js.map → chunk-OVUHQEH5.js.map} +1 -1
- package/dist/chunk-OYFMHDYT.js +1 -0
- package/dist/chunk-OYFMHDYT.js.map +1 -0
- package/dist/chunk-OYR5HUQZ.js +1 -0
- package/dist/chunk-OYR5HUQZ.js.map +1 -0
- package/dist/{chunk-LLHGSBPI.js → chunk-PA5EITW5.js} +1 -1
- package/dist/{chunk-LLHGSBPI.js.map → chunk-PA5EITW5.js.map} +1 -1
- package/dist/chunk-PL75RTA2.js +1 -0
- package/dist/{chunk-2VPVZELZ.js.map → chunk-PL75RTA2.js.map} +1 -1
- package/dist/chunk-PY5L6WC5.js +1 -0
- package/dist/chunk-PY5L6WC5.js.map +1 -0
- package/dist/{chunk-W6EPHHTS.js → chunk-Q2L75GSI.js} +1 -1
- package/dist/chunk-Q2L75GSI.js.map +1 -0
- package/dist/chunk-QJ7GB6FF.js +1 -0
- package/dist/chunk-QJ7GB6FF.js.map +1 -0
- package/dist/chunk-QTAMQ6ME.js +1 -0
- package/dist/chunk-QTAMQ6ME.js.map +1 -0
- package/dist/{chunk-VDVFJXX5.js → chunk-QY3L5BKN.js} +1 -1
- package/dist/{chunk-FMPRCYKY.js → chunk-RRYBSAPX.js} +1 -1
- package/dist/chunk-RRYBSAPX.js.map +1 -0
- package/dist/{chunk-J42ZXLBL.js → chunk-T62GO4AA.js} +1 -1
- package/dist/chunk-T62GO4AA.js.map +1 -0
- package/dist/{chunk-E3BRVGJJ.js → chunk-TBZJIQ5P.js} +1 -1
- package/dist/{chunk-E3BRVGJJ.js.map → chunk-TBZJIQ5P.js.map} +1 -1
- package/dist/chunk-V3AEUBHV.js +1 -0
- package/dist/chunk-V3AEUBHV.js.map +1 -0
- package/dist/chunk-VYDQHPY2.js +1 -0
- package/dist/chunk-VYDQHPY2.js.map +1 -0
- package/dist/chunk-XUHAPOM6.js +1 -0
- package/dist/chunk-XUHAPOM6.js.map +1 -0
- package/dist/chunk-Y6KJJMIM.js +1 -0
- package/dist/chunk-Y6KJJMIM.js.map +1 -0
- package/dist/chunk-YXPZ7QQB.js +1 -0
- package/dist/chunk-YXPZ7QQB.js.map +1 -0
- package/dist/{chunk-Y6UZWNP4.js → chunk-ZCEAPJDH.js} +1 -1
- package/dist/{chunk-Y6UZWNP4.js.map → chunk-ZCEAPJDH.js.map} +1 -1
- package/dist/commodities/commodities.d.ts +20 -10
- package/dist/commodities/commodities.js +1 -1
- package/dist/commodities/index.d.ts +15 -4
- package/dist/commodities/index.js +1 -1
- package/dist/equipment/index.js +1 -1
- package/dist/equipment/modification-costs.d.ts +2 -1
- package/dist/equipment/modification-costs.js.map +1 -1
- package/dist/equipment/modification-journal.js +1 -1
- package/dist/equipment/modifications.d.ts +2 -1
- package/dist/equipment/modifications.js +1 -1
- package/dist/equipment/suits.d.ts +6 -3
- package/dist/equipment/suits.js +1 -1
- package/dist/equipment/upgrade-costs.d.ts +8 -4
- package/dist/equipment/upgrade-costs.js +1 -1
- package/dist/equipment/upgrade-costs.js.map +1 -1
- package/dist/equipment/weapons.d.ts +13 -5
- package/dist/equipment/weapons.js +1 -1
- package/dist/i18n/blueprints.d.ts +6 -6
- package/dist/i18n/blueprints.js +1 -1
- package/dist/i18n/diagnostics.d.ts +1 -13
- package/dist/i18n/engineering-groups.d.ts +1 -0
- package/dist/i18n/engineering-groups.js +1 -1
- package/dist/i18n/experimental-effect-descriptions.d.ts +4 -3
- package/dist/i18n/experimental-effect-descriptions.js +1 -1
- package/dist/i18n/experimental-effects.d.ts +5 -4
- package/dist/i18n/experimental-effects.js +1 -1
- package/dist/i18n/index.d.ts +1 -13
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/pre-engineered.d.ts +7 -6
- package/dist/i18n/pre-engineered.js +1 -1
- package/dist/materials/index.d.ts +16 -4
- package/dist/materials/index.js +1 -1
- package/dist/materials/materials.d.ts +36 -19
- package/dist/materials/materials.js +1 -1
- package/dist/materials/micro-resources.d.ts +18 -7
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/armour.d.ts +20 -4
- package/dist/ships/armour.js +1 -1
- package/dist/ships/blueprint-costs.d.ts +20 -17
- package/dist/ships/blueprint-costs.js +1 -1
- package/dist/ships/blueprint-journal.d.ts +9 -8
- package/dist/ships/blueprint-journal.js +1 -1
- package/dist/ships/blueprints.d.ts +14 -12
- package/dist/ships/blueprints.js +1 -1
- package/dist/ships/build-metrics.d.ts +1061 -0
- package/dist/ships/build-metrics.js +1 -0
- package/dist/ships/build-metrics.js.map +1 -0
- package/dist/ships/distributor.d.ts +10 -3
- package/dist/ships/distributor.js +1 -1
- package/dist/ships/engineering-options.d.ts +8 -6
- package/dist/ships/engineering-options.js +1 -1
- package/dist/ships/engineering.d.ts +2 -16
- package/dist/ships/engineering.js +1 -1
- package/dist/ships/experimental-effect-costs.d.ts +5 -5
- package/dist/ships/experimental-effect-costs.js +1 -1
- package/dist/ships/experimental-effects.d.ts +9 -8
- package/dist/ships/experimental-effects.js +1 -1
- package/dist/ships/heat.d.ts +7 -2
- package/dist/ships/heat.js +1 -1
- package/dist/ships/index.d.ts +34 -22
- package/dist/ships/index.js +1 -1
- package/dist/ships/jump-range.d.ts +10 -3
- package/dist/ships/jump-range.js +1 -1
- package/dist/ships/loadout-calculations.d.ts +1 -1
- package/dist/ships/loadout-calculations.js +1 -1
- package/dist/ships/mobility-capacitor.d.ts +90 -0
- package/dist/ships/mobility-capacitor.js +1 -0
- package/dist/ships/mobility-capacitor.js.map +1 -0
- package/dist/ships/mobility.d.ts +41 -17
- package/dist/ships/mobility.js +1 -1
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-core.js +1 -1
- package/dist/ships/modules.d.ts +27 -1
- package/dist/ships/modules.js +1 -1
- package/dist/ships/power.d.ts +12 -5
- package/dist/ships/power.js +1 -1
- package/dist/ships/pre-engineered-stats.d.ts +10 -8
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/pre-engineered.d.ts +6 -6
- package/dist/ships/pre-engineered.js +1 -1
- package/dist/ships/resistances.d.ts +2 -2
- package/dist/ships/resistances.js +1 -1
- package/dist/ships/shield-capacitor.d.ts +133 -0
- package/dist/ships/shield-capacitor.js +1 -0
- package/dist/ships/shield-capacitor.js.map +1 -0
- package/dist/ships/shield-recovery.d.ts +16 -2
- package/dist/ships/shield-recovery.js +1 -1
- package/dist/ships/shields.d.ts +86 -28
- package/dist/ships/shields.js +1 -1
- package/dist/ships/ship-loadout.d.ts +100 -671
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/ships.d.ts +7 -6
- package/dist/ships/ships.js +1 -1
- package/dist/ships/slef.d.ts +11 -9
- package/dist/ships/slef.js +1 -1
- package/dist/ships/source-purchase.d.ts +2 -1
- package/dist/ships/source-purchase.js +1 -1
- package/dist/ships/weapons-capacitor.d.ts +10 -3
- package/dist/ships/weapons-capacitor.js +1 -1
- package/dist/ships/weapons.d.ts +22 -6
- package/dist/ships/weapons.js +1 -1
- package/dist/{system-address-DYsN1qOT.d.ts → system-address-cyJaeZIS.d.ts} +2 -1
- package/package.json +17 -2
- package/dist/chunk-24INI4U7.js +0 -1
- package/dist/chunk-24INI4U7.js.map +0 -1
- package/dist/chunk-2FHHMYDC.js +0 -1
- package/dist/chunk-2FHHMYDC.js.map +0 -1
- package/dist/chunk-2TW4ZBI3.js +0 -1
- package/dist/chunk-2TW4ZBI3.js.map +0 -1
- package/dist/chunk-2VPVZELZ.js +0 -1
- package/dist/chunk-4S6WB7QR.js.map +0 -1
- package/dist/chunk-DVL5RBKX.js +0 -1
- package/dist/chunk-DVL5RBKX.js.map +0 -1
- package/dist/chunk-DYPOL3CI.js.map +0 -1
- package/dist/chunk-EXVCRIDP.js +0 -1
- package/dist/chunk-EXVCRIDP.js.map +0 -1
- package/dist/chunk-FGXWVFN6.js +0 -1
- package/dist/chunk-FGXWVFN6.js.map +0 -1
- package/dist/chunk-FMPRCYKY.js.map +0 -1
- package/dist/chunk-G3265B27.js +0 -1
- package/dist/chunk-G3265B27.js.map +0 -1
- package/dist/chunk-GQ5GX5TB.js.map +0 -1
- package/dist/chunk-IOJXLDJN.js +0 -1
- package/dist/chunk-IOJXLDJN.js.map +0 -1
- package/dist/chunk-IYU4WLFM.js +0 -1
- package/dist/chunk-IYU4WLFM.js.map +0 -1
- package/dist/chunk-J42ZXLBL.js.map +0 -1
- package/dist/chunk-JPBMRJFC.js.map +0 -1
- package/dist/chunk-LJI7VXJD.js +0 -1
- package/dist/chunk-LJI7VXJD.js.map +0 -1
- package/dist/chunk-OCND33TO.js +0 -1
- package/dist/chunk-OCND33TO.js.map +0 -1
- package/dist/chunk-P2QOL63K.js +0 -1
- package/dist/chunk-P2QOL63K.js.map +0 -1
- package/dist/chunk-Q3QCLNVG.js.map +0 -1
- package/dist/chunk-QTZPA2FR.js.map +0 -1
- package/dist/chunk-RLUS76LZ.js +0 -1
- package/dist/chunk-RLUS76LZ.js.map +0 -1
- package/dist/chunk-TEOJCBSG.js +0 -1
- package/dist/chunk-TEOJCBSG.js.map +0 -1
- package/dist/chunk-TMMGS6TC.js +0 -1
- package/dist/chunk-TMMGS6TC.js.map +0 -1
- package/dist/chunk-W6EPHHTS.js.map +0 -1
- package/dist/chunk-Z6XMXMVI.js.map +0 -1
- package/dist/chunk-ZNCXENNB.js +0 -1
- package/dist/chunk-ZNCXENNB.js.map +0 -1
- package/dist/chunk-ZZT2PQZ5.js +0 -1
- package/dist/chunk-ZZT2PQZ5.js.map +0 -1
- /package/dist/{chunk-6EUVIZAS.js.map → chunk-4QYTVSNR.js.map} +0 -0
- /package/dist/{chunk-6EPYVBAX.js.map → chunk-A6OINYNP.js.map} +0 -0
- /package/dist/{chunk-VDVFJXX5.js.map → chunk-QY3L5BKN.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getLocalizedName,createDeduplicatedLocalizedNameIndex}from"./chunk-RVIYOHYF.js";import{requireObject,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";var pre_engineered_variant_names_default={nameKeys:{"Hpt_Mining_AbrBlstr_Fixed_Small|AbrasionBlaster_FarReaching||mercenary":"Far-Reaching Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|EnzymeMissileRack_HighYield||mercenary":"High-Yield Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|FragmentCannonSmall_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_Slugshot_Gimbal_Large|FragmentCannonLarge_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_MiningLaser_Fixed_Small|MiningLaser_LongRange||mercenary":"Long Range Mining Laser","Hpt_MultiCannon_Fixed_Medium|MultiCannon_Rapid||mercenary":"Rapid Phase Multi-Cannon","Hpt_Railgun_Fixed_Medium|RailGun_LongShot||mercenary":"Enduring Feedback Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_LightWeightThermal||mercenary":"Lightweight Thermal Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRackMedium_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRackLarge_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Int_CargoRack_Size5_Class1|CargoRackS5C1_Extended||mercenary":"Extended Cargo Rack","Int_CargoRack_Size6_Class1|CargoRackS6C1_Extended||mercenary":"Extended Cargo Rack","Int_DetailedSurfaceScanner_Tiny|DetailedSurfaceScanner_LongRange||mercenary":"Long Range Detailed Surface Scanner","Int_ModuleReinforcement_Size5_Class2|ModuleReinforcement_HeavyDuty||mercenary":"Heavy Duty Module Reinforcement Package","Int_PowerDistributor_Size3_Class2|PowerDistributorS3C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size3_Class5|PowerDistributorS3C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributorS4C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributorS4C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size5_Class5|PowerDistributor_Balanced||mercenary":"Balanced Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributorS6C5_SupportFocused||mercenary":"Support Focused Power Distributor","Hpt_Mining_AbrBlstr_Fixed_Small|Weapon_LongRange||communityGoal":"Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|Weapon_HighCapacity||communityGoal":"Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Slugshot_Gimbal_Large|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||communityGoal":"Guardian Shard Cannon","Hpt_MultiCannon_Fixed_Medium|Weapon_RapidFire|special_phasing_sequence|communityGoal":"Multi-Cannon","Hpt_Railgun_Fixed_Medium|Weapon_HighCapacity|special_feedback_cascade_cooled|communityGoal":"Rail Gun","Hpt_Railgun_Fixed_Medium_Burst|Weapon_HighCapacity|special_super_penetrator|communityGoal":"Imperial Hammer Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_drag_munitions|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_ElectronicCountermeasure_Tiny|Misc_LightWeight||communityGoal":"Electronic Countermeasure","Hpt_CrimeScanner_Size0_Class5|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_CrimeScanner_Size0_Class3|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_PlasmaPointDefence_Turret_Tiny|Misc_LightWeight||communityGoal":"Point Defence","Int_PowerDistributor_Size3_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size3_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_Powerplant_Size3_Class5|PowerPlant_Armoured||communityGoal":"Power Plant","Int_Powerplant_Size3_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size4_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size5_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Hyperdrive_Size3_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size4_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size6_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_CargoRack_Size5_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_CargoRack_Size6_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_ShieldGenerator_Size3_Class5|ShieldGenerator_Kinetic||communityGoal":"Shield Generator","Hpt_ATDumbfireMissile_Fixed_Medium|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATDumbfireMissile_Fixed_Large|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATMultiCannon_Gimbal_Medium|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_ATMultiCannon_Gimbal_Large|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_Guardian_GaussCannon_Fixed_Small|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_GaussCannon_Fixed_Medium|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_PlasmaLauncher_Fixed_Small|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_PlasmaLauncher_Fixed_Medium|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_ShardCannon_Fixed_Small|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_MiningLaser_Fixed_Small|Weapon_LongRange|special_incendiary_rounds|techBroker":"Mining Laser","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_thermal_cascade|techBroker":"Seeker Missile Rack","Hpt_HeatSinkLauncher_Turret_Tiny|Misc_HeatSinkCapacity||techBroker":"Heat Sink Launcher","Int_Hyperdrive_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive","Int_Hyperdrive_Overcharge_Size2_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size3_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size4_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size6_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size7_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_DetailedSurfaceScanner_Tiny|Sensor_Expanded||techBroker":"Detailed Surface Scanner","Hpt_FlakMortar_Turret_Medium|Decorative_Green||eventReward":"Festive Green Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Red||eventReward":"Festive Red Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Yellow||eventReward":"Festive Yellow Remote Release Flak Launcher"},names:{"Far-Reaching Abrasion Blaster":{en:"Far-Reaching Abrasion Blaster",de:"Abrasionsblaster mit großer Reichweite",es:"Destructor de abrasión de largo alcance",fr:"Surfaceur abrasif longue portée",ru:"Абразивный бластер с увеличенной дальностью"},"High-Yield Enzyme Missile Rack":{en:"High-Yield Enzyme Missile Rack",de:"Enzymraketenrampe mit hohen Erträgen",es:"Lanzamisiles de enzimas de alto rendimiento",fr:"Batterie de missiles enzymatiques à hauts rendements",ru:"Блок энзимных ракет высокой мощности"},"Double Screaming Fragment Cannon":{en:"Double Screaming Fragment Cannon",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",ru:"Залповое орудие «Двойной вой»"},"Long Range Mining Laser":{en:"Long Range Mining Laser",de:"Ferndistanz-Abbaulaser",es:"Láser de minería de largo alcance",fr:"Laser minier longue portée",ru:"Проходочный лазер с увеличенной дальностью"},"Rapid Phase Multi-Cannon":{en:"Rapid Phase Multi-Cannon",de:"Schnellfeuer-Mehrfachgeschütz",es:"Multicañón de fase con disparo rápido",fr:"Multi-canon à phase rapide",ru:"Скорострельное фазовое многоствольное орудие"},"Enduring Feedback Rail Gun":{en:"Enduring Feedback Rail Gun",de:"Robuste Feedback-Schienenkanone",es:"Cañón de riel Retroalimentación Soportable",fr:"Canon électrique énergétique résistant",ru:"Электромагнитная пушка с постоянным откликом"},"Drag Seeker Missile Rack":{en:"Drag Seeker Missile Rack",de:"Suchraketenrampe ziehen",es:"Lanzamisiles guiado con lastre",fr:"Batterie de missiles TC à inertie",ru:"Блок ракет с самонаведением и замедляющими боеприпасами"},"Lightweight Thermal Seeker Missile Rack":{en:"Lightweight Thermal Seeker Missile Rack",de:"Leichte thermische Suchraketenrampe",es:"Lanzamisiles guiado térmico ligero",fr:"Batterie de missiles TC thermiques légers",ru:"Легкий блок тепловых ракет с самонаведением"},"Lockdown Seeker Missile Rack":{en:"Lockdown Seeker Missile Rack",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",ru:"Блок ракет с самонаведением и блокировкой"},"Extended Cargo Rack":{en:"Extended Cargo Rack",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",ru:"Увеличенный грузовой стеллаж"},"Long Range Detailed Surface Scanner":{en:"Long Range Detailed Surface Scanner",de:"Ferndistanz-Detail-Oberflächenscanner",es:"Escáner de análisis de superficie detallado de largo alcance",fr:"Détecteur de surface détaillé longue portée",ru:"Подробный сканер поверхностей с увеличенной дальностью"},"Heavy Duty Module Reinforcement Package":{en:"Heavy Duty Module Reinforcement Package",de:"Schwere Modulverstärkung (Paket)",es:"Paquete de refuerzo de módulo de alta resistencia",fr:"Pack de renforcement de modules lourds",ru:"Укрепленный набор для усиления модуля"},"Support Focused Power Distributor":{en:"Support Focused Power Distributor",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",ru:"Вспомогательный распределитель питания"},"Balanced Power Distributor":{en:"Balanced Power Distributor",de:"Abgeglichener Energieverteiler",es:"Distribuidor de energía equilibrado",fr:"Répartiteur de puissance équilibré",ru:"Сбалансированный распределитель энергии"},"Abrasion Blaster":{en:"Abrasion Blaster",de:"Abrasionsblaster",es:"Destructor de abrasión",fr:"Surfaceur abrasif",pt:"Detonador de Abrasão",ru:"Шлифовальный бластер"},"Enzyme Missile Rack":{en:"Enzyme Missile Rack",de:"Enzymraketenwerfer",es:"Lanzamisiles de Enzimas",fr:"Batterie de missile enzymatique",pt:"Estante de Míssel Enzimático",ru:"Пусковая энзимных ракет"},"Fragment Cannon":{en:"Fragment Cannon",de:"Splitterkanone",es:"Cañón de fragmentación",fr:"Canon à fragmentation",pt:"Canhão de Fragmentação",ru:"Залповое орудие"},"Mining Laser":{en:"Mining Laser",de:"Abbaulaser",es:"Láser de minería",fr:"Laser Minier",pt:"Laser de Mineração",ru:"Проходочный лазер"},"Multi-Cannon":{en:"Multi-Cannon",de:"Mehrfachgeschütz",es:"Multicañón",fr:"Multi-canon",pt:"Canhão de Repetição",ru:"Многоствольное орудие"},"Rail Gun":{en:"Rail Gun",de:"Schienenkanone",es:"Cañón de riel",fr:"Canon électrique",pt:"Canhão Elétrico",ru:"Электромагнитная пушка"},"Seeker Missile Rack":{en:"Seeker Missile Rack",de:"Suchraketenrampe",es:"Lanzamisiles guiados",fr:"Missiles TC",pt:"Estante de Míssil Guiado",ru:"Блок ракет с самонаведением"},"Cargo Rack":{en:"Cargo Rack",de:"Frachtgestell",es:"Bodega de carga",fr:"Compartiment de soute",pt:"Estante de Carga",ru:"Грузовой стеллаж"},"Detailed Surface Scanner":{en:"Detailed Surface Scanner",de:"Detail-Oberflächenscanner",es:"Escáner de superficie detallado",fr:"Détecteur de surface détaillé",pt:"Scanner de Superfície",ru:"Сканер поверхностей"},"Power Distributor":{en:"Power Distributor",de:"Energieverteiler",es:"Distribuidor de energía",fr:"Répartiteur de puissance",pt:"Distribuidor de Energia",ru:"Распределитель питания"},"Guardian Shard Cannon":{en:"Guardian Shard Cannon",de:"Fragmentkanone",es:"Cañón de esquirlas",fr:"Canon à éclats",pt:"Canhão de fragmentos",ru:"Осколочное орудие"},"Imperial Hammer Rail Gun":{en:"Imperial Hammer Rail Gun",de:"Hammer",es:"Martillo",fr:"Marteleur",pt:"Martelo",ru:"«Молот»"},"Electronic Countermeasure":{en:"Electronic Countermeasure",de:"Elektronische Gegenmaßnahme",es:"Contramedidas electrónicas",fr:"Contre-mesures électroniques",pt:"Contramedida Eletrônica",ru:"Электр. противодействие"},"Kill Warrant Scanner":{en:"Kill Warrant Scanner",de:"Tötungsbefehl-Scanner",es:"Escáner de recompensas",fr:"Détecteur d'avis de recherche",pt:"Scanner de Registro Criminal",ru:"Сканер преступников"},"Point Defence":{en:"Point Defence",de:"Punktverteidigung",es:"Defensa de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},"Power Plant":{en:"Power Plant",de:"Kraftwerk",es:"Núcleo de energía",fr:"Générateur",pt:"Gerador de Energia",ru:"Силовая установка"},"Frame Shift Drive":{en:"Frame Shift Drive",de:"Frameshiftantrieb",es:"Motor de salto",fr:"Réacteur FSD",pt:"Motor de Distorção de Fase",ru:"Рамочно Сместительный двигатель"},"Shield Generator":{en:"Shield Generator",de:"Schildgenerator",es:"Generador de escudos",fr:"Générateur de bouclier",pt:"Gerador de Escudo",ru:"Щитогенератор"},"AX Missile Rack":{en:"AX Missile Rack",de:"AX-Raketenrampe",es:"Lanzamisiles AX",fr:"Batterie de missiles AX",pt:"Estante de Mísseis AX",ru:"Блок ракет АИ"},"Enhanced AX Multi-Cannon":{en:"Enhanced AX Multi-Cannon",de:"Fortschrittliches AX Mehrfachgeschütz",pt:"Canhão de Repetição AX Melhorado",ru:"Улучш. многоствольное орудие АИ"},"Guardian Gauss Cannon":{en:"Guardian Gauss Cannon",de:"Guardian-Gausskanone",es:"Cañón Gauss Guardián",fr:"Canon de Gauss - Guardians",pt:"Canhão Gauss Guardian",ru:"Пушка Гаусса"},"Guardian Plasma Charger":{en:"Guardian Plasma Charger",de:"Guardian-Plasmalader",es:"Cargador de Plasma Guardián",fr:"Chargeur à Plasma - Guardians",pt:"Carregador de Plasma Guardian",ru:"Плазменная пушка"},"Heat Sink Launcher":{en:"Heat Sink Launcher",de:"Kühlkörperabwurf",es:"Eyector térmico",fr:"Éjecteur de dissipateur thermique",pt:"Lançador de Dissipador Térmico",ru:"Теплоотводная катапульта"},"Frame Shift Drive (SCO)":{en:"Frame Shift Drive (SCO)",pt:"Motor de Distorção de Fase (SSV)",ru:"Двигатель FSD (ПГР)"},"Festive Green Remote Release Flak Launcher":{en:"Festive Green Remote Release Flak Launcher"},"Festive Red Remote Release Flak Launcher":{en:"Festive Red Remote Release Flak Launcher"},"Festive Yellow Remote Release Flak Launcher":{en:"Festive Yellow Remote Release Flak Launcher"}}};var NAMES=/* @__PURE__ */createDeduplicatedLocalizedNameIndex(pre_engineered_variant_names_default);function identityKey(identity){const prefix="getPreEngineeredVariantName: variant";requireObject(identity,prefix);const symbol=requireString(identity.symbol,`${prefix}.symbol`).trim();const blueprint=requireString(identity.blueprint,`${prefix}.blueprint`).trim();requireStringIfPresent(identity.experimental,`${prefix}.experimental`);const experimental=identity.experimental?.trim()??"";const acquisition=requireString(identity.acquisition,`${prefix}.acquisition`).trim();return`${symbol}|${blueprint}|${experimental}|${acquisition}`}function getPreEngineeredVariantName(variant,locale){return getLocalizedName(NAMES,identityKey(variant),locale,"getPreEngineeredVariantName","variant")}export{getPreEngineeredVariantName};//# sourceMappingURL=chunk-J42ZXLBL.js.map
|
|
1
|
+
import{getLocalizedName,createDeduplicatedLocalizedNameIndex}from"./chunk-RVIYOHYF.js";import{requireObject,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";var pre_engineered_variant_names_default={nameKeys:{"Hpt_Mining_AbrBlstr_Fixed_Small|AbrasionBlaster_FarReaching||mercenary":"Far-Reaching Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|EnzymeMissileRack_HighYield||mercenary":"High-Yield Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|FragmentCannonSmall_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_Slugshot_Gimbal_Large|FragmentCannonLarge_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_MiningLaser_Fixed_Small|MiningLaser_LongRange||mercenary":"Long Range Mining Laser","Hpt_MultiCannon_Fixed_Medium|MultiCannon_Rapid||mercenary":"Rapid Phase Multi-Cannon","Hpt_Railgun_Fixed_Medium|RailGun_LongShot||mercenary":"Enduring Feedback Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_LightWeightThermal||mercenary":"Lightweight Thermal Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRackMedium_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRackLarge_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Int_CargoRack_Size5_Class1|CargoRackS5C1_Extended||mercenary":"Extended Cargo Rack","Int_CargoRack_Size6_Class1|CargoRackS6C1_Extended||mercenary":"Extended Cargo Rack","Int_DetailedSurfaceScanner_Tiny|DetailedSurfaceScanner_LongRange||mercenary":"Long Range Detailed Surface Scanner","Int_ModuleReinforcement_Size5_Class2|ModuleReinforcement_HeavyDuty||mercenary":"Heavy Duty Module Reinforcement Package","Int_PowerDistributor_Size3_Class2|PowerDistributorS3C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size3_Class5|PowerDistributorS3C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributorS4C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributorS4C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size5_Class5|PowerDistributor_Balanced||mercenary":"Balanced Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributorS6C5_SupportFocused||mercenary":"Support Focused Power Distributor","Hpt_Mining_AbrBlstr_Fixed_Small|Weapon_LongRange||communityGoal":"Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|Weapon_HighCapacity||communityGoal":"Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Slugshot_Gimbal_Large|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||communityGoal":"Guardian Shard Cannon","Hpt_MultiCannon_Fixed_Medium|Weapon_RapidFire|special_phasing_sequence|communityGoal":"Multi-Cannon","Hpt_Railgun_Fixed_Medium|Weapon_HighCapacity|special_feedback_cascade_cooled|communityGoal":"Rail Gun","Hpt_Railgun_Fixed_Medium_Burst|Weapon_HighCapacity|special_super_penetrator|communityGoal":"Imperial Hammer Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_drag_munitions|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_ElectronicCountermeasure_Tiny|Misc_LightWeight||communityGoal":"Electronic Countermeasure","Hpt_CrimeScanner_Size0_Class5|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_CrimeScanner_Size0_Class3|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_PlasmaPointDefence_Turret_Tiny|Misc_LightWeight||communityGoal":"Point Defence","Int_PowerDistributor_Size3_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size3_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_Powerplant_Size3_Class5|PowerPlant_Armoured||communityGoal":"Power Plant","Int_Powerplant_Size3_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size4_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size5_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Hyperdrive_Size3_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size4_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size6_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_CargoRack_Size5_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_CargoRack_Size6_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_ShieldGenerator_Size3_Class5|ShieldGenerator_Kinetic||communityGoal":"Shield Generator","Hpt_ATDumbfireMissile_Fixed_Medium|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATDumbfireMissile_Fixed_Large|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATMultiCannon_Gimbal_Medium|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_ATMultiCannon_Gimbal_Large|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_Guardian_GaussCannon_Fixed_Small|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_GaussCannon_Fixed_Medium|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_PlasmaLauncher_Fixed_Small|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_PlasmaLauncher_Fixed_Medium|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_ShardCannon_Fixed_Small|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_MiningLaser_Fixed_Small|Weapon_LongRange|special_incendiary_rounds|techBroker":"Mining Laser","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_thermal_cascade|techBroker":"Seeker Missile Rack","Hpt_HeatSinkLauncher_Turret_Tiny|Misc_HeatSinkCapacity||techBroker":"Heat Sink Launcher","Int_Hyperdrive_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive","Int_Hyperdrive_Overcharge_Size2_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size3_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size4_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size6_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size7_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_DetailedSurfaceScanner_Tiny|Sensor_Expanded||techBroker":"Detailed Surface Scanner","Hpt_FlakMortar_Turret_Medium|Decorative_Green||eventReward":"Festive Green Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Red||eventReward":"Festive Red Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Yellow||eventReward":"Festive Yellow Remote Release Flak Launcher"},names:{"Far-Reaching Abrasion Blaster":{en:"Far-Reaching Abrasion Blaster",de:"Abrasionsblaster mit großer Reichweite",es:"Destructor de abrasión de largo alcance",fr:"Surfaceur abrasif longue portée",ru:"Абразивный бластер с увеличенной дальностью"},"High-Yield Enzyme Missile Rack":{en:"High-Yield Enzyme Missile Rack",de:"Enzymraketenrampe mit hohen Erträgen",es:"Lanzamisiles de enzimas de alto rendimiento",fr:"Batterie de missiles enzymatiques à hauts rendements",ru:"Блок энзимных ракет высокой мощности"},"Double Screaming Fragment Cannon":{en:"Double Screaming Fragment Cannon",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",ru:"Залповое орудие «Двойной вой»"},"Long Range Mining Laser":{en:"Long Range Mining Laser",de:"Ferndistanz-Abbaulaser",es:"Láser de minería de largo alcance",fr:"Laser minier longue portée",ru:"Проходочный лазер с увеличенной дальностью"},"Rapid Phase Multi-Cannon":{en:"Rapid Phase Multi-Cannon",de:"Schnellfeuer-Mehrfachgeschütz",es:"Multicañón de fase con disparo rápido",fr:"Multi-canon à phase rapide",ru:"Скорострельное фазовое многоствольное орудие"},"Enduring Feedback Rail Gun":{en:"Enduring Feedback Rail Gun",de:"Robuste Feedback-Schienenkanone",es:"Cañón de riel Retroalimentación Soportable",fr:"Canon électrique énergétique résistant",ru:"Электромагнитная пушка с постоянным откликом"},"Drag Seeker Missile Rack":{en:"Drag Seeker Missile Rack",de:"Suchraketenrampe ziehen",es:"Lanzamisiles guiado con lastre",fr:"Batterie de missiles TC à inertie",ru:"Блок ракет с самонаведением и замедляющими боеприпасами"},"Lightweight Thermal Seeker Missile Rack":{en:"Lightweight Thermal Seeker Missile Rack",de:"Leichte thermische Suchraketenrampe",es:"Lanzamisiles guiado térmico ligero",fr:"Batterie de missiles TC thermiques légers",ru:"Легкий блок тепловых ракет с самонаведением"},"Lockdown Seeker Missile Rack":{en:"Lockdown Seeker Missile Rack",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",ru:"Блок ракет с самонаведением и блокировкой"},"Extended Cargo Rack":{en:"Extended Cargo Rack",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",ru:"Увеличенный грузовой стеллаж"},"Long Range Detailed Surface Scanner":{en:"Long Range Detailed Surface Scanner",de:"Ferndistanz-Detail-Oberflächenscanner",es:"Escáner de análisis de superficie detallado de largo alcance",fr:"Détecteur de surface détaillé longue portée",ru:"Подробный сканер поверхностей с увеличенной дальностью"},"Heavy Duty Module Reinforcement Package":{en:"Heavy Duty Module Reinforcement Package",de:"Schwere Modulverstärkung (Paket)",es:"Paquete de refuerzo de módulo de alta resistencia",fr:"Pack de renforcement de modules lourds",ru:"Укрепленный набор для усиления модуля"},"Support Focused Power Distributor":{en:"Support Focused Power Distributor",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",ru:"Вспомогательный распределитель питания"},"Balanced Power Distributor":{en:"Balanced Power Distributor",de:"Abgeglichener Energieverteiler",es:"Distribuidor de energía equilibrado",fr:"Répartiteur de puissance équilibré",ru:"Сбалансированный распределитель энергии"},"Abrasion Blaster":{en:"Abrasion Blaster",de:"Abrasionsblaster",es:"Destructor de abrasión",fr:"Surfaceur abrasif",pt:"Detonador de Abrasão",ru:"Шлифовальный бластер"},"Enzyme Missile Rack":{en:"Enzyme Missile Rack",de:"Enzymraketenwerfer",es:"Lanzamisiles de Enzimas",fr:"Batterie de missile enzymatique",pt:"Estante de Míssel Enzimático",ru:"Пусковая энзимных ракет"},"Fragment Cannon":{en:"Fragment Cannon",de:"Splitterkanone",es:"Cañón de fragmentación",fr:"Canon à fragmentation",pt:"Canhão de Fragmentação",ru:"Залповое орудие"},"Mining Laser":{en:"Mining Laser",de:"Abbaulaser",es:"Láser de minería",fr:"Laser Minier",pt:"Laser de Mineração",ru:"Проходочный лазер"},"Multi-Cannon":{en:"Multi-Cannon",de:"Mehrfachgeschütz",es:"Multicañón",fr:"Multi-canon",pt:"Canhão de Repetição",ru:"Многоствольное орудие"},"Rail Gun":{en:"Rail Gun",de:"Schienenkanone",es:"Cañón de riel",fr:"Canon électrique",pt:"Canhão Elétrico",ru:"Электромагнитная пушка"},"Seeker Missile Rack":{en:"Seeker Missile Rack",de:"Suchraketenrampe",es:"Lanzamisiles guiados",fr:"Missiles TC",pt:"Estante de Míssil Guiado",ru:"Блок ракет с самонаведением"},"Cargo Rack":{en:"Cargo Rack",de:"Frachtgestell",es:"Bodega de carga",fr:"Compartiment de soute",pt:"Estante de Carga",ru:"Грузовой стеллаж"},"Detailed Surface Scanner":{en:"Detailed Surface Scanner",de:"Detail-Oberflächenscanner",es:"Escáner de superficie detallado",fr:"Détecteur de surface détaillé",pt:"Scanner de Superfície",ru:"Сканер поверхностей"},"Power Distributor":{en:"Power Distributor",de:"Energieverteiler",es:"Distribuidor de energía",fr:"Répartiteur de puissance",pt:"Distribuidor de Energia",ru:"Распределитель питания"},"Guardian Shard Cannon":{en:"Guardian Shard Cannon",de:"Fragmentkanone",es:"Cañón de esquirlas",fr:"Canon à éclats",pt:"Canhão de fragmentos",ru:"Осколочное орудие"},"Imperial Hammer Rail Gun":{en:"Imperial Hammer Rail Gun",de:"Hammer",es:"Martillo",fr:"Marteleur",pt:"Martelo",ru:"«Молот»"},"Electronic Countermeasure":{en:"Electronic Countermeasure",de:"Elektronische Gegenmaßnahme",es:"Contramedidas electrónicas",fr:"Contre-mesures électroniques",pt:"Contramedida Eletrônica",ru:"Электр. противодействие"},"Kill Warrant Scanner":{en:"Kill Warrant Scanner",de:"Tötungsbefehl-Scanner",es:"Escáner de recompensas",fr:"Détecteur d'avis de recherche",pt:"Scanner de Registro Criminal",ru:"Сканер преступников"},"Point Defence":{en:"Point Defence",de:"Punktverteidigung",es:"Defensa de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},"Power Plant":{en:"Power Plant",de:"Kraftwerk",es:"Núcleo de energía",fr:"Générateur",pt:"Gerador de Energia",ru:"Силовая установка"},"Frame Shift Drive":{en:"Frame Shift Drive",de:"Frameshiftantrieb",es:"Motor de salto",fr:"Réacteur FSD",pt:"Motor de Distorção de Fase",ru:"Рамочно Сместительный двигатель"},"Shield Generator":{en:"Shield Generator",de:"Schildgenerator",es:"Generador de escudos",fr:"Générateur de bouclier",pt:"Gerador de Escudo",ru:"Щитогенератор"},"AX Missile Rack":{en:"AX Missile Rack",de:"AX-Raketenrampe",es:"Lanzamisiles AX",fr:"Batterie de missiles AX",pt:"Estante de Mísseis AX",ru:"Блок ракет АИ"},"Enhanced AX Multi-Cannon":{en:"Enhanced AX Multi-Cannon",de:"Fortschrittliches AX Mehrfachgeschütz",pt:"Canhão de Repetição AX Melhorado",ru:"Улучш. многоствольное орудие АИ"},"Guardian Gauss Cannon":{en:"Guardian Gauss Cannon",de:"Guardian-Gausskanone",es:"Cañón Gauss Guardián",fr:"Canon de Gauss - Guardians",pt:"Canhão Gauss Guardian",ru:"Пушка Гаусса"},"Guardian Plasma Charger":{en:"Guardian Plasma Charger",de:"Guardian-Plasmalader",es:"Cargador de Plasma Guardián",fr:"Chargeur à Plasma - Guardians",pt:"Carregador de Plasma Guardian",ru:"Плазменная пушка"},"Heat Sink Launcher":{en:"Heat Sink Launcher",de:"Kühlkörperabwurf",es:"Eyector térmico",fr:"Éjecteur de dissipateur thermique",pt:"Lançador de Dissipador Térmico",ru:"Теплоотводная катапульта"},"Frame Shift Drive (SCO)":{en:"Frame Shift Drive (SCO)",pt:"Motor de Distorção de Fase (SSV)",ru:"Двигатель FSD (ПГР)"},"Festive Green Remote Release Flak Launcher":{en:"Festive Green Remote Release Flak Launcher"},"Festive Red Remote Release Flak Launcher":{en:"Festive Red Remote Release Flak Launcher"},"Festive Yellow Remote Release Flak Launcher":{en:"Festive Yellow Remote Release Flak Launcher"}}};var NAMES=/* @__PURE__ */createDeduplicatedLocalizedNameIndex(pre_engineered_variant_names_default);function identityKey(identity){const prefix="getPreEngineeredVariantName: variant";requireObject(identity,prefix);const symbol=requireString(identity.symbol,`${prefix}.symbol`).trim();const blueprint=requireString(identity.blueprintSymbol,`${prefix}.blueprintSymbol`).trim();requireStringIfPresent(identity.experimentalEffectSymbol,`${prefix}.experimentalEffectSymbol`);const experimental=identity.experimentalEffectSymbol?.trim()??"";const acquisition=requireString(identity.acquisition,`${prefix}.acquisition`).trim();return`${symbol}|${blueprint}|${experimental}|${acquisition}`}function getPreEngineeredVariantName(variant,locale){return getLocalizedName(NAMES,identityKey(variant),locale,"getPreEngineeredVariantName","variant")}export{getPreEngineeredVariantName};//# sourceMappingURL=chunk-T62GO4AA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/pre-engineered.ts"],"names":["getLocalizedName","createDeduplicatedLocalizedNameIndex","requireObject","requireString","requireStringIfPresent","pre_engineered_variant_names_default","NAMES","identityKey","identity","prefix","symbol","trim","blueprint","blueprintSymbol","experimentalEffectSymbol","experimental","acquisition","getPreEngineeredVariantName","variant","locale"],"mappings":"O,wheAeA,IAAMM,qBAAwBL,qCAC1BI,sCAeJ,SAASE,YAAYC,UACjB,MAAMC,OAAS,uCACfP,cAAcM,SAAUC,QACxB,MAAMC,OAASP,cAAcK,SAASE,OAAQ,GAAGD,iBAAiBE,OAClE,MAAMC,UAAYT,cAAcK,SAASK,gBAAiB,GAAGJ,0BAA0BE,OACvFP,uBAAuBI,SAASM,yBAA0B,GAAGL,mCAC7D,MAAMM,aAAeP,SAASM,0BAA0BH,QAAU,GAClE,MAAMK,YAAcb,cAAcK,SAASQ,YAAa,GAAGP,sBAAsBE,OACjF,MAAO,GAAGD,UAAUE,aAAaG,gBAAgBC,aACrD,CAwBO,SAASC,4BACZC,QACAC,QAEA,OAAOnB,iBACHM,MACAC,YAAYW,SACZC,OACA,8BACA,UAER,QAAAF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{parseSystemName,boxelCodeToLetters,formatSystemName}from"./chunk-
|
|
1
|
+
import{parseSystemName,boxelCodeToLetters,formatSystemName}from"./chunk-7ATBEOVC.js";import{isPermitLockedRegionName}from"./chunk-NLBUKXNV.js";import{findHandAuthoredRegionAt}from"./chunk-AVZI6VKA.js";import{sizeClassToMassCode}from"./chunk-POZTXBSN.js";import{getHandAuthoredRegionOrigin,resolveNamingRegionOrigin}from"./chunk-DWRNXUAX.js";import{encodeSystemAddress,decodeSystemAddress,decodeModSystemAddress,encodeModSystemAddress,absoluteBoxelToBoxelCode}from"./chunk-DI5RXSJR.js";import{toSystemAddress}from"./chunk-NEEFT7WH.js";import{sectorGridPositionFromName,sectorNameFromGridPosition}from"./chunk-H47K3UWG.js";import{requireString,truncate}from"./chunk-PKWVG2JY.js";function tryEncodeModAddress(parts){const origin=resolveNamingRegionOrigin(parts.regionName);if(!origin)return null;try{return encodeModSystemAddress(parts,origin)}catch(error){if(error instanceof RangeError)return null;throw error}}function applyHaOverride(parts,decoded,position){if(!position)return{parts:parts,handAuthored:false,requiresPermit:false};const region=findHandAuthoredRegionAt(position);if(!region)return{parts:parts,handAuthored:false,requiresPermit:false};const origin=resolveNamingRegionOrigin(region.name);if(!origin||origin.x0<0||origin.y0<0||origin.z0<0){return{parts:parts,handAuthored:false,requiresPermit:false}}const boxelCode=absoluteBoxelToBoxelCode(decoded.sizeClass,decoded.absoluteBoxel,origin);if(boxelCode===null)return{parts:parts,handAuthored:false,requiresPermit:false};const{l1:l1,l2:l2,l3:l3,n1:n1}=boxelCodeToLetters(boxelCode);return{parts:{...parts,regionName:region.name,l1:l1,l2:l2,l3:l3,n1:n1},handAuthored:true,requiresPermit:isPermitLockedRegionName(region.name)}}var ProceduralSystem=class _ProceduralSystem{#parts;#position;#id64;#modId64;usesHandAuthoredRegion;requiresRegionPermit;constructor(parts,opts){this.#parts={...parts};this.#position=opts.position?{...opts.position}:void 0;this.#id64=opts.id64;this.#modId64=opts.modId64;this.usesHandAuthoredRegion=opts.handAuthored;this.requiresRegionPermit=opts.requiresPermit}static fromName(name){const parts=parseSystemName(requireString(name,"ProceduralSystem.fromName: name"));if(!parts)return null;const sectorPosition=sectorGridPositionFromName(parts.regionName);const namedOrigin=sectorPosition?null:getHandAuthoredRegionOrigin(parts.regionName);const named=namedOrigin!==null;const regionName=sectorPosition?sectorNameFromGridPosition(sectorPosition):namedOrigin?.name??parts.regionName;const canonicalParts={...parts,regionName:regionName};const origin=resolveNamingRegionOrigin(regionName);if(!origin)throw new RangeError(`Unknown sector: ${truncate(regionName)}`);return new _ProceduralSystem(canonicalParts,{id64:encodeSystemAddress(canonicalParts,origin),modId64:tryEncodeModAddress(canonicalParts),handAuthored:named,requiresPermit:named&&isPermitLockedRegionName(regionName)})}static fromSystemAddress(id64,position){const address=toSystemAddress(id64);return _ProceduralSystem.#fromDecoded(decodeSystemAddress(address),address,position)}static fromModSystemAddress(id64,position){const address=toSystemAddress(id64);return _ProceduralSystem.#fromDecoded(decodeModSystemAddress(address),void 0,position,address)}static#fromDecoded(decoded,id64,position,modId64){const{l1:l1,l2:l2,l3:l3,n1:n1}=boxelCodeToLetters(decoded.boxelCode);const base={regionName:sectorNameFromGridPosition(decoded.sectorGridPosition),l1:l1,l2:l2,l3:l3,massCode:decoded.sizeClass,n1:n1,n2:decoded.sequence};const overridden=applyHaOverride(base,decoded,position);const origin=resolveNamingRegionOrigin(overridden.parts.regionName);if(!origin){throw new RangeError(`Unknown sector: ${truncate(overridden.parts.regionName)}`)}const normalAddress=id64??encodeSystemAddress(overridden.parts,origin);const opts={id64:normalAddress,modId64:modId64??tryEncodeModAddress(overridden.parts),handAuthored:overridden.handAuthored,requiresPermit:overridden.requiresPermit,...position?{position:position}:{}};return new _ProceduralSystem(overridden.parts,opts)}get name(){return formatSystemName(this.#parts)}get namingRegionName(){return this.#parts.regionName}get massCode(){return sizeClassToMassCode(this.#parts.massCode)}get sequence(){return this.#parts.n2}get position(){return this.#position?{...this.#position}:null}get parts(){return{...this.#parts}}get systemAddress(){return this.#id64}get modSystemAddress(){return this.#modId64}};export{ProceduralSystem};//# sourceMappingURL=chunk-TBZJIQ5P.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/astro/procedural-system.ts"],"names":["parseSystemName","boxelCodeToLetters","formatSystemName","isPermitLockedRegionName","findHandAuthoredRegionAt","sizeClassToMassCode","getHandAuthoredRegionOrigin","resolveNamingRegionOrigin","encodeSystemAddress","decodeSystemAddress","decodeModSystemAddress","encodeModSystemAddress","absoluteBoxelToBoxelCode","toSystemAddress","sectorGridPositionFromName","sectorNameFromGridPosition","requireString","truncate","tryEncodeModAddress","parts","origin","regionName","error","RangeError","applyHaOverride","decoded","position","handAuthored","requiresPermit","region","name","x0","y0","z0","boxelCode","sizeClass","absoluteBoxel","l1","l2","l3","n1","ProceduralSystem","_ProceduralSystem","id64","modId64","usesHandAuthoredRegion","requiresRegionPermit","constructor","opts","this","fromName","sectorPosition","namedOrigin","named","canonicalParts","fromSystemAddress","address","fromDecoded","fromModSystemAddress","base","sectorGridPosition","massCode","n2","sequence","overridden","normalAddress","namingRegionName","systemAddress","modSystemAddress"],"mappings":"O,8pBA+CA,SAASkB,oBAAoBC,OACzB,MAAMC,OAASb,0BAA0BY,MAAME,YAC/C,IAAKD,OAAQ,OAAO,KACpB,IACI,OAAOT,uBAAuBQ,MAAOC,OACzC,CAAA,MAASE,OAQL,GAAIA,iBAAiBC,WAAY,OAAO,KACxC,MAAMD,KACV,CACJ,CAOA,SAASE,gBACLL,MACAM,QACAC,UAEA,IAAKA,SAAU,MAAO,CAAEP,YAAOQ,aAAc,MAAOC,eAAgB,OAEpE,MAAMC,OAASzB,yBAAyBsB,UACxC,IAAKG,OAAQ,MAAO,CAAEV,YAAOQ,aAAc,MAAOC,eAAgB,OAElE,MAAMR,OAASb,0BAA0BsB,OAAOC,MAChD,IAAKV,QAAUA,OAAOW,GAAK,GAAKX,OAAOY,GAAK,GAAKZ,OAAOa,GAAK,EAAG,CAC5D,MAAO,CAAEd,YAAOQ,aAAc,MAAOC,eAAgB,MACzD,CAEA,MAAMM,UAAYtB,yBAAyBa,QAAQU,UAAWV,QAAQW,cAAehB,QACrF,GAAIc,YAAc,KAAM,MAAO,CAAEf,YAAOQ,aAAc,MAAOC,eAAgB,OAE7E,MAAMS,GAAEA,GAAAC,GAAIA,GAAAC,GAAIA,GAAAC,GAAIA,IAAOvC,mBAAmBiC,WAC9C,MAAO,CACHf,MAAO,IAAKA,MAAOE,WAAYQ,OAAOC,KAAMO,MAAIC,MAAIC,MAAIC,OACxDb,aAAc,KACdC,eAAgBzB,yBAAyB0B,OAAOC,MAExD,CAiDO,IAAMW,iBAAN,MAAMC,kBACAvB,OACAO,UACAiB,MACAC,SAGAC,uBAYAC,qBAED,WAAAC,CACJ5B,MACA6B,MAQAC,MAAK9B,MAAS,IAAKA,OACnB8B,MAAKvB,SAAYsB,KAAKtB,SAAW,IAAKsB,KAAKtB,eAAa,EACxDuB,MAAKN,KAAQK,KAAKL,KAClBM,MAAKL,QAAWI,KAAKJ,QACrBK,KAAKJ,uBAAyBG,KAAKrB,aACnCsB,KAAKH,qBAAuBE,KAAKpB,cACrC,
|
|
1
|
+
{"version":3,"sources":["../src/astro/procedural-system.ts"],"names":["parseSystemName","boxelCodeToLetters","formatSystemName","isPermitLockedRegionName","findHandAuthoredRegionAt","sizeClassToMassCode","getHandAuthoredRegionOrigin","resolveNamingRegionOrigin","encodeSystemAddress","decodeSystemAddress","decodeModSystemAddress","encodeModSystemAddress","absoluteBoxelToBoxelCode","toSystemAddress","sectorGridPositionFromName","sectorNameFromGridPosition","requireString","truncate","tryEncodeModAddress","parts","origin","regionName","error","RangeError","applyHaOverride","decoded","position","handAuthored","requiresPermit","region","name","x0","y0","z0","boxelCode","sizeClass","absoluteBoxel","l1","l2","l3","n1","ProceduralSystem","_ProceduralSystem","id64","modId64","usesHandAuthoredRegion","requiresRegionPermit","constructor","opts","this","fromName","sectorPosition","namedOrigin","named","canonicalParts","fromSystemAddress","address","fromDecoded","fromModSystemAddress","base","sectorGridPosition","massCode","n2","sequence","overridden","normalAddress","namingRegionName","systemAddress","modSystemAddress"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{massCurveMultiplier,requireFiniteNonNegative,validateMassCurve}from"./chunk-EVW4Z4CB.js";var requireFiniteRange=(scope,name,value,minimum,maximum)=>{if(!Number.isFinite(value)||value<minimum||value>maximum){throw new RangeError(`${scope}: ${name} must be a finite number from ${minimum} to ${maximum}`)}};var curveMultiplier=(scope,mass,thrusters)=>massCurveMultiplier({scope:scope,mass:"mass",curve:"thrusters"},mass,thrusters);function resolveMobilityCurves(scope,input){for(const field of["minimumSpeed","maximumSpeed","boost","pitch","roll","yaw","mass"]){requireFiniteNonNegative(scope,field,input[field])}if(input.minimumSpeed>input.maximumSpeed){throw new RangeError(`${scope}: minimumSpeed must not exceed maximumSpeed`)}for(const[minimum,maximum]of[["minPitch","pitch"],["minRoll","roll"],["minYaw","yaw"]]){requireFiniteRange(scope,minimum,input[minimum],0,input[maximum])}if(!input.thrusters)return null;validateMassCurve(`${scope}: thrusters`,input.thrusters);return{massCurveMultiplier:curveMultiplier(`${scope}: speed curve`,input.mass,input.thrusters.speedCurve??input.thrusters),rotationMassCurveMultiplier:curveMultiplier(`${scope}: rotation curve`,input.mass,input.thrusters.rotationCurve??input.thrusters)}}export{curveMultiplier,resolveMobilityCurves};//# sourceMappingURL=chunk-V3AEUBHV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/internal/mobility-core.ts"],"names":["massCurveMultiplier","requireFiniteNonNegative","validateMassCurve","requireFiniteRange","scope","name","value","minimum","maximum","Number","isFinite","RangeError","curveMultiplier","mass","thrusters","curve","resolveMobilityCurves","input","field","minimumSpeed","maximumSpeed","speedCurve","rotationMassCurveMultiplier","rotationCurve"],"mappings":"O,yFAwBO,IAAMG,mBAAqB,CAC9BC,MACAC,KACAC,MACAC,QACAC,WAEA,IAAKC,OAAOC,SAASJ,QAAUA,MAAQC,SAAWD,MAAQE,QAAS,CAC/D,MAAM,IAAIG,WACN,GAAGP,UAAUC,qCAAqCE,cAAcC,UAExE,GAGG,IAAMI,gBAAkB,CAC3BR,MACAS,KACAC,YACSd,oBAAoB,CAAEI,YAAOS,KAAM,OAAQE,MAAO,aAAeF,KAAMC,WAY7E,SAASE,sBAAsBZ,MAAea,OACjD,IAAA,MAAWC,QAAS,CAChB,eACA,eACA,QACA,QACA,OACA,MACA,QACQ,CACRjB,yBAAyBG,MAAOc,MAAOD,MAAMC,OACjD,CACA,GAAID,MAAME,aAAeF,MAAMG,aAAc,CACzC,MAAM,IAAIT,WAAW,GAAGP,mDAC5B,CACA,IAAA,MAAYG,QAASC,UAAY,CAC7B,CAAC,WAAY,SACb,CAAC,UAAW,QACZ,CAAC,SAAU,QACH,CACRL,mBAAmBC,MAAOG,QAASU,MAAMV,SAAU,EAAGU,MAAMT,SAChE,CACA,IAAKS,MAAMH,UAAW,OAAO,KAC7BZ,kBAAkB,GAAGE,mBAAoBa,MAAMH,WAC/C,MAAO,CACHd,oBAAqBY,gBACjB,GAAGR,qBACHa,MAAMJ,KACNI,MAAMH,UAAUO,YAAcJ,MAAMH,WAExCQ,4BAA6BV,gBACzB,GAAGR,wBACHa,MAAMJ,KACNI,MAAMH,UAAUS,eAAiBN,MAAMH,WAGnD,QAAAF,gBAAAI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getLoadoutModifier}from"./chunk-OVUHQEH5.js";import{scaleDamageComponents}from"./chunk-GZYPQIO2.js";import{weaponMetrics,combinedRateOfFire}from"./chunk-7TQ2X6Q3.js";import{shieldMetrics}from"./chunk-QTAMQ6ME.js";import{getBulkheadsForShip}from"./chunk-PA5EITW5.js";import{CORE_MODULES}from"./chunk-EVJ32UF3.js";import{getExperimentalEffect}from"./chunk-77I24V6B.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{fieldForLabel,scaleForLabel,labelsForField,capabilityValueForLabel,damageTypeForLabel}from"./chunk-CJQ37JII.js";import{parseSlotName}from"./chunk-RAO35XDF.js";import{describeValue,truncate}from"./chunk-PKWVG2JY.js";var NO_ISSUES=Object.freeze([]);function completeResult(value){return Object.freeze({value:value,complete:true,issues:NO_ISSUES})}function incompleteResult(issues){return Object.freeze({value:null,complete:false,issues:Object.freeze(issues.map(issue=>Object.freeze({...issue,...issue.params?{params:Object.freeze({...issue.params})}:{}})))})}var PREFIX={powerPlant:["int_powerplant","int_guardianpowerplant"],thrusters:["int_engine","int_mkiiagileboost_engine"],frameShiftDrive:["int_hyperdrive"],powerDistributor:["int_powerdistributor","int_guardianpowerdistributor"],shieldGenerator:["int_shieldgenerator"],shieldCellBank:["int_shieldcellbank"],shieldBooster:["hpt_shieldbooster"],shieldReinforcement:["int_guardianshieldreinforcement"],hullReinforcement:["int_hullreinforcement","int_guardianhullreinforcement","int_metaalloyhullreinforcement"],moduleReinforcement:["int_modulereinforcement","int_guardianmodulereinforcement"]};var startsWithAny=(symbol,prefixes)=>prefixes.some(prefix=>symbol.toLowerCase().startsWith(prefix));function isPowerDistributor(module,stats){return stats?.slot?stats.slot==="powerDistributor":startsWithAny(module.Item,PREFIX.powerDistributor)}function isPowerPlant(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="powerPlant")return true;return stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant)}function isThruster(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="thrusters")return true;return stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters)}function isFrameShiftDrive(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="frameShiftDrive")return true;return stats?.slot?stats.slot==="frameShiftDrive":startsWithAny(module.Item,PREFIX.frameShiftDrive)}function isEnabled(module){return module.On!==false}function priorityOf(module){return(module.Priority??0)+1}function effectiveStat(module,field,stats){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base:void 0}function statedModifier(module,field){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)!==null)continue;const modified=getLoadoutModifier(module,label);if(modified!==null)return modified/scaleForLabel(label)}return void 0}function effectiveCapability(module,field,stats){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)===null)continue;if(module.Engineering?.Modifiers?.some(modifier=>modifier.Label.toLowerCase()===label.toLowerCase())){return true}}const base=stats[field];return typeof base==="boolean"?base:void 0}function effectiveDamageDistribution(module,stats){const fromEffect=module.Engineering?.ExperimentalEffect?getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution:void 0;const distribution={...fromEffect??stats.damageDistribution};let resolved=fromEffect!==void 0||stats.damageDistribution!==void 0;const seen=/* @__PURE__ */new Set;for(const modifier of module.Engineering?.Modifiers??[]){const type=damageTypeForLabel(modifier.Label);if(type===null||seen.has(type))continue;seen.add(type);if(modifier.Value===void 0)continue;distribution[type]=modifier.Value/scaleForLabel(modifier.Label);resolved=true}return resolved?distribution:void 0}function convertsDamage(module){if(module.Engineering?.ExperimentalEffect&&getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution){return true}return(module.Engineering?.Modifiers??[]).some(modifier=>damageTypeForLabel(modifier.Label)!==null)}function modifierRatio(module,stats,field){const base=stats?.[field];if(typeof base!=="number"||base===0)return 1;const effective=effectiveStat(module,field,stats);return effective===void 0?1:effective/base}function relatedStat(module,stats,field,ratio){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base*ratio:void 0}function effectiveModule(module,stats){if(!stats||!module.Engineering)return stats;const merged={...stats};const fields=new Set(Object.keys(stats));for(const modifier of module.Engineering.Modifiers??[]){const field=fieldForLabel(modifier.Label,stats);if(field)fields.add(field)}for(const key of fields){const capability=effectiveCapability(module,key,stats);if(capability!==void 0){merged[key]=capability;continue}const value=effectiveStat(module,key,stats);if(value!==void 0)merged[key]=value}if(stats.engineeringGroup==="thrusters"){const massRatio=modifierRatio(module,stats,"optMass");const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",massRatio);if(minMass!==void 0)merged.minMass=minMass;if(maxMass!==void 0)merged.maxMass=maxMass}if(stats.engineeringGroup==="thrusters"||stats.engineeringGroup==="shieldGenerators"){const performanceRatio=modifierRatio(module,stats,"optMultiplier");const minMultiplier=relatedStat(module,stats,"minMultiplier",performanceRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",performanceRatio);if(minMultiplier!==void 0)merged.minMultiplier=minMultiplier;if(maxMultiplier!==void 0)merged.maxMultiplier=maxMultiplier;if(stats.engineeringGroup==="thrusters"){for(const field of["minSpeedMultiplier","optSpeedMultiplier","maxSpeedMultiplier","minRotationMultiplier","optRotationMultiplier","maxRotationMultiplier"]){const value=stats[field];if(value!==void 0)merged[field]=value*performanceRatio}}}const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)merged.damageDistribution=damageDistribution;if(stats.category==="hardpoint")normalizeEffectiveWeapon(module,merged);if(convertsDamage(module)){delete merged.damageComponents}else if(stats.damageComponents){merged.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof merged.damage==="number"?merged.damage:void 0)}return merged}function powerConsumerFor(module,stats){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return null;const mounted=stats?.category==="hardpoint"||stats?.category==="utility";return{draw:draw,priority:priorityOf(module),enabled:isEnabled(module),deployedOnly:mounted&&stats?.alwaysPowered!==true,label:module.Slot,symbol:module.Item}}function powerAvailable(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(!isPowerPlant(module,stats))continue;if(!isEnabled(module))return 0;return effectiveStat(module,"powerCapacity",stats)??0}return 0}var DEFAULT_SLOT={powerCapacity:"PowerPlant",heatEfficiency:"PowerPlant",thrusters:"MainEngines",powerDistributor:"PowerDistributor"};var UNRESOLVED_FACT={thrusters:"thruster stats",shieldGenerator:"shield-generator stats",powerCapacity:"power capacity",heatEfficiency:"heat efficiency",powerDistributor:"power-distributor stats"};var NOTHING_FITTED={powerCapacity:"PowerPlant: no power plant is fitted",heatEfficiency:"PowerPlant: no power plant is fitted",thrusters:"MainEngines: no thrusters are fitted",powerDistributor:"PowerDistributor: no power distributor is fitted"};function metricIssue(field,reason,module){const defaultSlot=DEFAULT_SLOT[field];const slot=module?.Slot??defaultSlot;const symbol=module?.Item;const params={field:field,reason:reason,...slot===void 0?{}:{slot:slot},...symbol===void 0?{}:{symbol:symbol}};let message;if(reason==="missing"){message=NOTHING_FITTED[field]??"no shield generator is fitted"}else if(reason==="unresolved"){const unavailable=UNRESOLVED_FACT[field]??field;message=`${truncate(slot??field)}: ${unavailable} unavailable for ${truncate(symbol??field)}`}else if(reason==="disabled"){message=`${truncate(slot??field)}: ${truncate(symbol??field)} is switched off`}else if(reason==="invalid"){message=`${truncate(slot??field)}: ${truncate(symbol??field)} has invalid ${field}`}else{message=`${truncate(slot??field)}: ${truncate(symbol??field)} is not powered with hardpoints retracted`}return{field:field,reason:reason,...slot===void 0?{}:{slot:slot},...symbol===void 0?{}:{symbol:symbol},message:message,params:params}}function powerPlantIssueFor(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(!isPowerPlant(module,stats))continue;if(!isEnabled(module))return metricIssue("powerCapacity","disabled",module);const capacity=effectiveStat(module,"powerCapacity",stats);if(capacity===void 0)return metricIssue("powerCapacity","unresolved",module);return!Number.isFinite(capacity)||capacity<=0?metricIssue("powerCapacity","invalid",module):null}return metricIssue("powerCapacity","missing")}function powerDrawIssueFor(modules,statsFor){for(const module of modules){const consumer=powerConsumerFor(module,statsFor(module));if(consumer&&(!Number.isFinite(consumer.draw)||consumer.draw<0)){return metricIssue("powerDraw","invalid",module)}}return null}function poweredMetricBudgetFor(field,module,stats,modules,getBudget,statsFor){if(!isEnabled(module))return incompleteResult([metricIssue(field,"disabled",module)]);const plantIssue=powerPlantIssueFor(modules,statsFor);if(plantIssue)return incompleteResult([plantIssue]);const drawIssue=powerDrawIssueFor(modules,statsFor);if(drawIssue)return incompleteResult([drawIssue]);const budget=getBudget();return budget.available>0&&poweredStates(module,stats,budget).retracted?completeResult(budget):incompleteResult([metricIssue(field,"shed",module)])}function poweredShieldGeneratorResultFor(modules,getBudget,statsFor){for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldGenerator))continue;const stats=statsFor(module);const powered=poweredMetricBudgetFor("shieldGenerator",module,stats,modules,getBudget,statsFor);if(!powered.complete)return powered;return stats===null?incompleteResult([metricIssue("shieldGenerator","unresolved",module)]):completeResult({module:module,budget:powered.value})}return incompleteResult([metricIssue("shieldGenerator","missing")])}function mapResistanceFields(read){return{kineticResistance:read("kineticResistance")??0,thermalResistance:read("thermalResistance")??0,explosiveResistance:read("explosiveResistance")??0,causticResistance:read("causticResistance")??0}}function resistancesOf(module,stats){return mapResistanceFields(field=>effectiveStat(module,field,stats))}function shieldInputFor(ship,modules,budget,statsFor){let generator=null;const boosters=[];let reinforcement=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!(budget.available>0&&poweredStates(module,stats,budget).retracted))continue;if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){const massRatio=modifierRatio(module,stats,"optMass");const strengthRatio=modifierRatio(module,stats,"optMultiplier");const optMass=effectiveStat(module,"optMass",stats);const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",Math.max(1,massRatio));const optMultiplier=effectiveStat(module,"optMultiplier",stats);const minMultiplier=relatedStat(module,stats,"minMultiplier",strengthRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",strengthRatio);generator={...optMass===void 0?{}:{optMass:optMass},...minMass===void 0?{}:{minMass:minMass},...maxMass===void 0?{}:{maxMass:maxMass},...optMultiplier===void 0?{}:{optMultiplier:optMultiplier},...minMultiplier===void 0?{}:{minMultiplier:minMultiplier},...maxMultiplier===void 0?{}:{maxMultiplier:maxMultiplier},...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.shieldBooster)){boosters.push({shieldBoost:effectiveStat(module,"shieldBoost",stats)??0,...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.shieldReinforcement)){reinforcement+=effectiveStat(module,"shieldAddition",stats)??0}}return{hullMass:ship.hullMass,baseShieldStrength:ship.baseShieldStrength,generator:generator,boosters:boosters,reinforcement:reinforcement}}function shieldInputResultFor(ship,modules,getBudget,statsFor){const fitted=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!fitted.complete)return fitted;return completeResult(shieldInputFor(ship,modules,fitted.value.budget,statsFor))}function shieldCapacitorInputResultFor(ship,modules,getBudget,systemsPips,statsFor){const fitted=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!fitted.complete)return fitted;const budget=fitted.value.budget;const capacitor=systemsCapacitorResultFor(modules,budget,statsFor);if(!capacitor.complete)return capacitor;const shields=shieldMetrics(shieldInputFor(ship,modules,budget,statsFor));return completeResult({strength:shields.strength,resistances:shields.resistances,systemsCapacity:capacitor.value.systemsCapacity,systemsRecharge:capacitor.value.systemsRecharge,systemsPips:systemsPips})}function systemsCapacitorResultFor(modules,budget,statsFor){let distributor=null;for(const module of modules){const stats2=statsFor(module);if(isPowerDistributor(module,stats2)&&isEnabled(module)&&budget.available>0&&poweredStates(module,stats2,budget).retracted)distributor=module}if(!distributor)return completeResult({systemsCapacity:0,systemsRecharge:0});const stats=statsFor(distributor);const systemsCapacity=effectiveStat(distributor,"systemsCapacity",stats);const systemsRecharge=effectiveStat(distributor,"systemsRecharge",stats);return systemsCapacity===void 0||systemsRecharge===void 0?incompleteResult([metricIssue("powerDistributor","unresolved",distributor)]):completeResult({systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge})}function thrusterCurveFor(module,stats){const effective=effectiveModule(module,stats);const minMass=effective?.minMass;const optMass=effective?.optMass;const maxMass=effective?.maxMass;const minMultiplier=effective?.minMultiplier;const optMultiplier=effective?.optMultiplier;const maxMultiplier=effective?.maxMultiplier;if(minMass===void 0||optMass===void 0||maxMass===void 0||minMultiplier===void 0||optMultiplier===void 0||maxMultiplier===void 0){return null}return{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:minMultiplier,optMultiplier:optMultiplier,maxMultiplier:maxMultiplier,...effective?.optSpeedMultiplier===void 0?{}:{speedCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minSpeedMultiplier??minMultiplier,optMultiplier:effective.optSpeedMultiplier,maxMultiplier:effective.maxSpeedMultiplier??maxMultiplier}},...effective?.optRotationMultiplier===void 0?{}:{rotationCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minRotationMultiplier??minMultiplier,optMultiplier:effective.optRotationMultiplier,maxMultiplier:effective.maxRotationMultiplier??maxMultiplier}}}}function fittedThrusterParamsFor(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(isThruster(module,stats))return thrusterCurveFor(module,stats)}return null}function mobilityInputResultFor(ship,modules,getBudget,mass,statsFor){let thrusters=null;for(const module of modules){const stats=statsFor(module);if(!isThruster(module,stats))continue;const powered=poweredMetricBudgetFor("thrusters",module,stats,modules,getBudget,statsFor);if(!powered.complete)return powered;thrusters=thrusterCurveFor(module,stats);if(!thrusters)return incompleteResult([metricIssue("thrusters","unresolved",module)]);break}if(!thrusters)return incompleteResult([metricIssue("thrusters","missing")]);return completeResult({minimumSpeed:ship.minimumSpeed,maximumSpeed:ship.maximumSpeed,boost:ship.boost,minPitch:ship.minPitch,pitch:ship.pitch,minRoll:ship.minRoll,roll:ship.roll,minYaw:ship.minYaw,yaw:ship.yaw,mass:typeof mass==="function"?mass():mass,thrusters:thrusters})}function shieldRecoveryInputResultFor(ship,modules,getBudget,systemsPips,statsFor){const generator=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!generator.complete)return generator;const{module:generatorModule,budget:budget}=generator.value;const generatorStats=statsFor(generatorModule);const distributorDraw=effectiveStat(generatorModule,"distributorDraw",generatorStats);const regenRate=effectiveStat(generatorModule,"shieldRegenRate",generatorStats);const brokenRegenRate=effectiveStat(generatorModule,"shieldBrokenRegenRate",generatorStats);if(distributorDraw===void 0||regenRate===void 0||brokenRegenRate===void 0){return incompleteResult([metricIssue("shieldGenerator","unresolved",generatorModule)])}const capacitor=systemsCapacitorResultFor(modules,budget,statsFor);if(!capacitor.complete)return capacitor;const strength=shieldMetrics(shieldInputFor(ship,modules,budget,statsFor)).strength;return completeResult({strength:strength,regenRate:regenRate,brokenRegenRate:brokenRegenRate,distributorDraw:distributorDraw,systemsCapacity:capacitor.value.systemsCapacity,systemsRecharge:capacitor.value.systemsRecharge,systemsPips:systemsPips})}function weaponsCapacitorInputFor(modules,weaponsPips,budget,statsFor){let weaponsCapacity=0;let weaponsRecharge=0;let sustainedEnergyPerSecond=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!poweredStates(module,stats,budget).deployed)continue;if(isPowerDistributor(module,stats)){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0;weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats)??0}const weapon=weaponStatsFor(module,stats);if(weapon){sustainedEnergyPerSecond+=weaponMetrics(weapon).sustainedEnergyPerSecond}}return{weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,sustainedEnergyPerSecond:sustainedEnergyPerSecond,weaponsPips:weaponsPips}}function distributorInputResultFor(modules,pips,budget,statsFor){let disabled=null;for(const module of modules){const stats=statsFor(module);if(!isPowerDistributor(module,stats))continue;if(!isEnabled(module)){disabled??=module;continue}if(!poweredStates(module,stats,budget).retracted){return incompleteResult([metricIssue("powerDistributor","shed",module)])}const systemsCapacity=effectiveStat(module,"systemsCapacity",stats);const systemsRecharge=effectiveStat(module,"systemsRecharge",stats);const enginesCapacity=effectiveStat(module,"enginesCapacity",stats);const enginesRecharge=effectiveStat(module,"enginesRecharge",stats);const weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats);const weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats);if(systemsCapacity===void 0||systemsRecharge===void 0||enginesCapacity===void 0||enginesRecharge===void 0||weaponsCapacity===void 0||weaponsRecharge===void 0){return incompleteResult([metricIssue("powerDistributor","unresolved",module)])}return completeResult({systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge,enginesCapacity:enginesCapacity,enginesRecharge:enginesRecharge,weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,...pips})}return incompleteResult([disabled===null?metricIssue("powerDistributor","missing"):metricIssue("powerDistributor","disabled",disabled)])}function heatInputResultFor(ship,modules,budget,statsFor){let plant=null;let heatEfficiency;let thrusterHeatRate=0;let deployedThrusterHeatRate=0;let fsdHeatRate=0;let weaponsCapacity=0;const weapons=[];for(const module of modules){const stats=statsFor(module);if(isPowerPlant(module,stats)){if(!isEnabled(module)){return incompleteResult([metricIssue("powerCapacity","disabled",module)])}plant=module;heatEfficiency=effectiveStat(module,"heatEfficiency",stats);continue}if(!isEnabled(module))continue;const running=poweredStates(module,stats,budget);if(isThruster(module,stats)){const heat=effectiveStat(module,"engineHeatRate",stats)??0;if(running.retracted)thrusterHeatRate+=heat;if(running.deployed)deployedThrusterHeatRate+=heat}else if(isFrameShiftDrive(module,stats)){if(running.retracted)fsdHeatRate+=effectiveStat(module,"fsdHeatRate",stats)??0}else if(isPowerDistributor(module,stats)){if(running.deployed){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0}}const weapon=weaponStatsFor(module,stats);if(!running.deployed)continue;if(!weapon)continue;weapons.push({heatPerSecond:weaponMetrics(weapon).sustainedHeatPerSecond,distributorDraw:weapon.distributorDraw??0})}if(heatEfficiency===void 0){return incompleteResult([plant===null?metricIssue("powerCapacity","missing"):metricIssue("heatEfficiency","unresolved",plant)])}return completeResult({heatCapacity:ship.heatCapacity,heatDissipation:ship.heatDissipation,heatEfficiency:heatEfficiency,retractedPowerDraw:poweredDraw(budget,"retracted"),deployedPowerDraw:poweredDraw(budget,"deployed"),thrusterHeatRate:thrusterHeatRate,deployedThrusterHeatRate:deployedThrusterHeatRate,fsdHeatRate:fsdHeatRate,weaponsCapacity:weaponsCapacity,weapons:weapons})}function poweredDraw(budget,state){const powered=state==="retracted"?"poweredRetracted":"poweredDeployed";return budget.bands.reduce((total,band)=>band[powered]?total+band[state]:total,0)}function poweredStates(module,stats,budget){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return{retracted:true,deployed:true};const band=budget.bands[Math.min(budget.bands.length,Math.max(1,priorityOf(module)))-1];if(!band)return{retracted:true,deployed:true};return{retracted:band.poweredRetracted,deployed:band.poweredDeployed}}function cellBankInputsFor(modules,budget,statsFor){const banks=[];for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldCellBank))continue;const stats=statsFor(module);const effective=effectiveModule(module,stats);const ammunition=effective?ammunitionCapacity(effective):null;banks.push({slot:module.Slot,symbol:module.Item,reinforcementRate:effective?.shieldBankReinforcement??0,cells:ammunition?.total??0,spinUp:effective?.shieldBankSpinUp??0,duration:effective?.shieldBankDuration??0,heat:effective?.shieldBankHeat??0,powered:budget.available>0&&isEnabled(module)&&poweredStates(module,stats,budget).deployed})}return banks}function stockBulkhead(ship){const variants=getBulkheadsForShip(ship.name,CORE_MODULES);return variants.find(v=>v.symbol.toLowerCase().endsWith("_default"))??variants.find(v=>v.mass===0)??variants[0]??null}function armourInputFor(ship,modules,statsFor){const reinforcements=[];const moduleReinforcements=[];let bulkhead=null;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(module.Slot.toLowerCase()==="armour"){bulkhead={hullBoost:effectiveStat(module,"hullBoost",stats)??0,...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.hullReinforcement)){const boost=getLoadoutModifier(module,"DefenceModifierHealthMultiplier");reinforcements.push({hullReinforcement:effectiveStat(module,"hullReinforcement",stats)??0,hullBoost:boost===null?0:boost/scaleForLabel("DefenceModifierHealthMultiplier"),...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.moduleReinforcement)){moduleReinforcements.push({moduleProtection:effectiveStat(module,"moduleProtection",stats)??0,integrity:effectiveStat(module,"integrity",stats)??0})}}if(!bulkhead){const stock=stockBulkhead(ship);bulkhead=stock?{hullBoost:stock.hullBoost??0,...mapResistanceFields(field=>stock[field])}:null}return{baseArmour:ship.baseArmour,bulkhead:bulkhead,reinforcements:reinforcements,moduleReinforcements:moduleReinforcements}}var WEAPON_FIELDS=["damage","roundsPerShot","rateOfFire","burstInterval","burstRounds","burstRateOfFire","chargeTime","clipSize","ammoMaximum","reloadTime","distributorDraw","thermalLoad","powerDraw","maximumRange","falloffRange","armourPiercing"];function weaponStatsFor(module,stats){if(!stats||stats.category!=="hardpoint")return null;const weapon={};for(const field of WEAPON_FIELDS){const value=effectiveStat(module,field,stats);if(value!==void 0)weapon[field]=value}normalizeEffectiveWeapon(module,weapon);const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)weapon.damageDistribution=damageDistribution;if(stats.damageComponents&&!convertsDamage(module)){weapon.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof weapon.damage==="number"?weapon.damage:void 0)}if(stats.projectileRange)weapon.projectileRange={...stats.projectileRange};return weapon}function burstAdjustedRateOfFire(module,weapon){if(getLoadoutModifier(module,"RateOfFire")!==null)return void 0;const touched=["BurstSize","BurstRateOfFire","BurstInterval"].some(label=>getLoadoutModifier(module,label)!==null);if(!touched)return void 0;return combinedRateOfFire(weapon)}function normalizeEffectiveWeapon(module,weapon){const rate=burstAdjustedRateOfFire(module,weapon);if(rate!==void 0)weapon.rateOfFire=rate;const statedDamagePerSecond=getLoadoutModifier(module,"DamagePerSecond");const firingFactor=Number(weapon.roundsPerShot??1)*Number(weapon.rateOfFire??1);if(statedDamagePerSecond!==null&&firingFactor>0){weapon.damage=statedDamagePerSecond/firingFactor}const{maximumRange:maximumRange,falloffRange:falloffRange}=weapon;if(maximumRange!==void 0&&falloffRange!==void 0&&falloffRange>maximumRange){weapon.falloffRange=maximumRange}}var INTERNALS=/* @__PURE__ */new WeakMap;function publishLoadoutInternals(build,internals){INTERNALS.set(build,internals)}function loadoutInternals(build,label){const internals=typeof build==="object"&&build!==null?INTERNALS.get(build):void 0;if(internals===void 0){throw new TypeError(`${label} must be a ShipLoadout, received ${describeValue(build)}`)}return internals}export{armourInputFor,cellBankInputsFor,completeResult,distributorInputResultFor,effectiveModule,fittedThrusterParamsFor,heatInputResultFor,incompleteResult,loadoutInternals,mobilityInputResultFor,powerAvailable,powerConsumerFor,publishLoadoutInternals,shieldCapacitorInputResultFor,shieldInputResultFor,shieldRecoveryInputResultFor,weaponStatsFor,weaponsCapacitorInputFor};//# sourceMappingURL=chunk-VYDQHPY2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/internal/calculation-result.ts","../src/ships/internal/loadout-metrics.ts","../src/ships/internal/loadout-internals.ts"],"names":["getLoadoutModifier","scaleDamageComponents","weaponMetrics","combinedRateOfFire","shieldMetrics","getBulkheadsForShip","CORE_MODULES","getExperimentalEffect","ammunitionCapacity","fieldForLabel","scaleForLabel","labelsForField","capabilityValueForLabel","damageTypeForLabel","parseSlotName","describeValue","truncate","NO_ISSUES","Object","freeze","completeResult","value","complete","issues","incompleteResult","map","issue","params","PREFIX","powerPlant","thrusters","frameShiftDrive","powerDistributor","shieldGenerator","shieldCellBank","shieldBooster","shieldReinforcement","hullReinforcement","moduleReinforcement","startsWithAny","symbol","prefixes","some","prefix","toLowerCase","startsWith","isPowerDistributor","module","stats","slot","Item","isPowerPlant","parsed","Slot","kind","core","isThruster","isFrameShiftDrive","isEnabled","On","priorityOf","Priority","effectiveStat","field","stated","statedModifier","base","label","modified","effectiveCapability","Engineering","Modifiers","modifier","Label","effectiveDamageDistribution","fromEffect","ExperimentalEffect","damageDistribution","distribution","resolved","seen","Set","type","has","add","Value","convertsDamage","modifierRatio","effective","relatedStat","ratio","effectiveModule","merged","fields","keys","key","capability","engineeringGroup","massRatio","minMass","maxMass","performanceRatio","minMultiplier","maxMultiplier","category","normalizeEffectiveWeapon","damageComponents","damage","powerConsumerFor","draw","mounted","priority","enabled","deployedOnly","alwaysPowered","powerAvailable","modules","statsFor","DEFAULT_SLOT","powerCapacity","heatEfficiency","UNRESOLVED_FACT","NOTHING_FITTED","metricIssue","reason","defaultSlot","message","unavailable","powerPlantIssueFor","capacity","Number","isFinite","powerDrawIssueFor","consumer","poweredMetricBudgetFor","getBudget","plantIssue","drawIssue","budget","available","poweredStates","retracted","poweredShieldGeneratorResultFor","powered","mapResistanceFields","read","kineticResistance","thermalResistance","explosiveResistance","causticResistance","resistancesOf","shieldInputFor","ship","generator","boosters","reinforcement","strengthRatio","optMass","Math","max","optMultiplier","push","shieldBoost","hullMass","baseShieldStrength","shieldInputResultFor","fitted","shieldCapacitorInputResultFor","systemsPips","capacitor","systemsCapacitorResultFor","shields","strength","resistances","systemsCapacity","systemsRecharge","distributor","thrusterCurveFor","optSpeedMultiplier","speedCurve","minSpeedMultiplier","maxSpeedMultiplier","optRotationMultiplier","rotationCurve","minRotationMultiplier","maxRotationMultiplier","fittedThrusterParamsFor","mobilityInputResultFor","mass","minimumSpeed","maximumSpeed","boost","minPitch","pitch","minRoll","roll","minYaw","yaw","shieldRecoveryInputResultFor","generatorModule","generatorStats","distributorDraw","regenRate","brokenRegenRate","weaponsCapacitorInputFor","weaponsPips","weaponsCapacity","weaponsRecharge","sustainedEnergyPerSecond","deployed","weapon","weaponStatsFor","distributorInputResultFor","pips","disabled","enginesCapacity","enginesRecharge","heatInputResultFor","plant","thrusterHeatRate","deployedThrusterHeatRate","fsdHeatRate","weapons","running","heat","heatPerSecond","sustainedHeatPerSecond","heatCapacity","heatDissipation","retractedPowerDraw","poweredDraw","deployedPowerDraw","state","bands","reduce","total","band","min","length","poweredRetracted","poweredDeployed","cellBankInputsFor","banks","ammunition","reinforcementRate","shieldBankReinforcement","cells","spinUp","shieldBankSpinUp","duration","shieldBankDuration","shieldBankHeat","stockBulkhead","variants","name","find","v","endsWith","armourInputFor","reinforcements","moduleReinforcements","bulkhead","hullBoost","moduleProtection","integrity","stock","baseArmour","WEAPON_FIELDS","projectileRange","burstAdjustedRateOfFire","touched","rate","rateOfFire","statedDamagePerSecond","firingFactor","roundsPerShot","maximumRange","falloffRange","INTERNALS","WeakMap","publishLoadoutInternals","build","internals","set","loadoutInternals","get","TypeError"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resolveMobilityCurves}from"./chunk-V3AEUBHV.js";import{requirePips}from"./chunk-QJ7GB6FF.js";function mobilityCapacitorMetrics(input){const scope="mobilityCapacitorMetrics";const enginesPips=input.enginesPips??4;requirePips(scope,"enginesPips",enginesPips);const curves=resolveMobilityCurves(scope,input);if(!curves)return null;const pipMultiplier=enginesPips/4;const atPips=(maximum,minimum)=>minimum+(maximum-minimum)*pipMultiplier;return Object.freeze({enginesPips:enginesPips,speed:atPips(input.maximumSpeed,input.minimumSpeed)*curves.massCurveMultiplier,pitch:atPips(input.pitch,input.minPitch)*curves.rotationMassCurveMultiplier,roll:atPips(input.roll,input.minRoll)*curves.rotationMassCurveMultiplier,yaw:atPips(input.yaw,input.minYaw)*curves.rotationMassCurveMultiplier})}export{mobilityCapacitorMetrics};//# sourceMappingURL=chunk-XUHAPOM6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/mobility-capacitor.ts"],"names":["resolveMobilityCurves","requirePips","mobilityCapacitorMetrics","input","scope","enginesPips","curves","pipMultiplier","atPips","maximum","minimum","Object","freeze","speed","maximumSpeed","minimumSpeed","massCurveMultiplier","pitch","minPitch","rotationMassCurveMultiplier","roll","minRoll","yaw","minYaw"],"mappings":"O,6FA8FO,SAASE,yBACZC,OAEA,MAAMC,MAAQ,2BACd,MAAMC,YAAcF,MAAME,aAAe,EAGzCJ,YAAYG,MAAO,cAAeC,aAClC,MAAMC,OAASN,sBAAsBI,MAAOD,OAC5C,IAAKG,OAAQ,OAAO,KACpB,MAAMC,cAAgBF,YAAc,EACpC,MAAMG,OAAS,CAACC,QAAiBC,UAC7BA,SAAWD,QAAUC,SAAWH,cACpC,OAAOI,OAAOC,OAAO,CACjBP,wBACAQ,MAAOL,OAAOL,MAAMW,aAAcX,MAAMY,cAAgBT,OAAOU,oBAC/DC,MAAOT,OAAOL,MAAMc,MAAOd,MAAMe,UAAYZ,OAAOa,4BACpDC,KAAMZ,OAAOL,MAAMiB,KAAMjB,MAAMkB,SAAWf,OAAOa,4BACjDG,IAAKd,OAAOL,MAAMmB,IAAKnB,MAAMoB,QAAUjB,OAAOa,6BAEtD,QAAAjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{curveMultiplier,resolveMobilityCurves}from"./chunk-V3AEUBHV.js";function thrusterMassCurveMultiplier(mass,thrusters){return curveMultiplier("thrusterMassCurveMultiplier",mass,thrusters)}function mobilityMetrics(input){const curves=resolveMobilityCurves("mobilityMetrics",input);if(!curves)return null;const{massCurveMultiplier:massCurveMultiplier,rotationMassCurveMultiplier:rotationMassCurveMultiplier}=curves;return Object.freeze({loadedMass:input.mass,speed:input.maximumSpeed*massCurveMultiplier,boost:input.boost*massCurveMultiplier,pitch:input.pitch*rotationMassCurveMultiplier,roll:input.roll*rotationMassCurveMultiplier,yaw:input.yaw*rotationMassCurveMultiplier,massCurveMultiplier:massCurveMultiplier,rotationMassCurveMultiplier:rotationMassCurveMultiplier})}export{mobilityMetrics,thrusterMassCurveMultiplier};//# sourceMappingURL=chunk-Y6KJJMIM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/mobility.ts"],"names":["curveMultiplier","resolveMobilityCurves","thrusterMassCurveMultiplier","mass","thrusters","mobilityMetrics","input","curves","massCurveMultiplier","rotationMassCurveMultiplier","Object","freeze","loadedMass","speed","maximumSpeed","boost","pitch","roll","yaw"],"mappings":"O,gEAiIO,SAASE,4BAA4BC,KAAcC,WACtD,OAAOJ,gBAAgB,8BAA+BG,KAAMC,UAChE,CAwCO,SAASC,gBAAgBC,OAC5B,MAAMC,OAASN,sBAAsB,kBAAmBK,OACxD,IAAKC,OAAQ,OAAO,KACpB,MAAMC,oBAAEA,oBAAAC,4BAAqBA,6BAAgCF,OAC7D,OAAOG,OAAOC,OAAO,CACjBC,WAAYN,MAAMH,KAClBU,MAAOP,MAAMQ,aAAeN,oBAC5BO,MAAOT,MAAMS,MAAQP,oBACrBQ,MAAOV,MAAMU,MAAQP,4BACrBQ,KAAMX,MAAMW,KAAOR,4BACnBS,IAAKZ,MAAMY,IAAMT,4BACjBD,wCACAC,yDAER,QAAAJ,gBAAAH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";var requirePips=(name,value)=>{if(!Number.isFinite(value)||value<0||value>4){throw new RangeError(`distributorMetrics: ${name} must be a finite number from 0 to 4`)}};var requireFiniteNonNegative=(name,value)=>{if(!Number.isFinite(value)||value<0){throw new RangeError(`distributorMetrics: ${name} must be a finite non-negative number`)}};var capacitorMetrics=(capacity,ratedRecharge,pips)=>Object.freeze({capacity:capacity,ratedRecharge:ratedRecharge,rechargeRate:capacitorRechargeAtPips(ratedRecharge,pips)});function distributorMetrics(input){const pips=Object.freeze({systems:input.systemsPips??4,engines:input.enginesPips??4,weapons:input.weaponsPips??4});requirePips("systemsPips",pips.systems);requirePips("enginesPips",pips.engines);requirePips("weaponsPips",pips.weapons);for(const field of["systemsCapacity","systemsRecharge","enginesCapacity","enginesRecharge","weaponsCapacity","weaponsRecharge"]){requireFiniteNonNegative(field,input[field])}return Object.freeze({systems:capacitorMetrics(input.systemsCapacity,input.systemsRecharge,pips.systems),engines:capacitorMetrics(input.enginesCapacity,input.enginesRecharge,pips.engines),weapons:capacitorMetrics(input.weaponsCapacity,input.weaponsRecharge,pips.weapons),pips:pips})}export{distributorMetrics};//# sourceMappingURL=chunk-YXPZ7QQB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/distributor.ts"],"names":["capacitorRechargeAtPips","requirePips","name","value","Number","isFinite","RangeError","requireFiniteNonNegative","capacitorMetrics","capacity","ratedRecharge","pips","Object","freeze","rechargeRate","distributorMetrics","input","systems","systemsPips","engines","enginesPips","weapons","weaponsPips","field","systemsCapacity","systemsRecharge","enginesCapacity","enginesRecharge","weaponsCapacity","weaponsRecharge"],"mappings":"O,kDAiFA,IAAMC,YAAc,CAACC,KAAcC,SAC/B,IAAKC,OAAOC,SAASF,QAAUA,MAAQ,GAAKA,MAAQ,EAAG,CACnD,MAAM,IAAIG,WAAW,uBAAuBJ,2CAChD,GAGJ,IAAMK,yBAA2B,CAACL,KAAcC,SAC5C,IAAKC,OAAOC,SAASF,QAAUA,MAAQ,EAAG,CACtC,MAAM,IAAIG,WAAW,uBAAuBJ,4CAChD,GAGJ,IAAMM,iBAAmB,CACrBC,SACAC,cACAC,OAEAC,OAAOC,OAAO,CACVJ,kBACAC,4BACAI,aAAcd,wBAAwBU,cAAeC,QA+BtD,SAASI,mBAAmBC,OAC/B,MAAML,KAAOC,OAAOC,OAAO,CACvBI,QAASD,MAAME,aAAe,EAC9BC,QAASH,MAAMI,aAAe,EAC9BC,QAASL,MAAMM,aAAe,IAElCrB,YAAY,cAAeU,KAAKM,SAChChB,YAAY,cAAeU,KAAKQ,SAChClB,YAAY,cAAeU,KAAKU,SAChC,IAAA,MAAWE,QAAS,CAChB,kBACA,kBACA,kBACA,kBACA,kBACA,mBACQ,CACRhB,yBAAyBgB,MAAOP,MAAMO,OAC1C,CAEA,OAAOX,OAAOC,OAAO,CACjBI,QAAST,iBAAiBQ,MAAMQ,gBAAiBR,MAAMS,gBAAiBd,KAAKM,SAC7EE,QAASX,iBAAiBQ,MAAMU,gBAAiBV,MAAMW,gBAAiBhB,KAAKQ,SAC7EE,QAASb,iBAAiBQ,MAAMY,gBAAiBZ,MAAMa,gBAAiBlB,KAAKU,SAC7EV,WAER,QAAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ALL_COMMODITIES}from"./chunk-JQG4C67D.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";var COMMODITIES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_COMMODITIES,"symbol");var COMMODITIES_BY_NAME=/* @__PURE__ */createKeyIndex(ALL_COMMODITIES,"name");function getCommodityBySymbol(symbol,commodities=ALL_COMMODITIES){return commodities===ALL_COMMODITIES?findInKeyIndex(COMMODITIES_BY_SYMBOL,symbol,"getCommodityBySymbol: symbol"):findByKey(commodities,"symbol",symbol,"getCommodityBySymbol: symbol")}function getCommodityByName(name,commodities=ALL_COMMODITIES){return commodities===ALL_COMMODITIES?findInKeyIndex(COMMODITIES_BY_NAME,name,"getCommodityByName: name"):findByKey(commodities,"name",name,"getCommodityByName: name")}function commoditiesInCategory(category
|
|
1
|
+
import{ALL_COMMODITIES}from"./chunk-JQG4C67D.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";var COMMODITIES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_COMMODITIES,"symbol");var COMMODITIES_BY_NAME=/* @__PURE__ */createKeyIndex(ALL_COMMODITIES,"name");function getCommodityBySymbol(symbol,commodities=ALL_COMMODITIES){return commodities===ALL_COMMODITIES?findInKeyIndex(COMMODITIES_BY_SYMBOL,symbol,"getCommodityBySymbol: symbol"):findByKey(commodities,"symbol",symbol,"getCommodityBySymbol: symbol")}function getCommodityByName(name,commodities=ALL_COMMODITIES){return commodities===ALL_COMMODITIES?findInKeyIndex(COMMODITIES_BY_NAME,name,"getCommodityByName: name"):findByKey(commodities,"name",name,"getCommodityByName: name")}function commoditiesInCategory(category){return filterByKey(ALL_COMMODITIES,"category",category,"commoditiesInCategory: category")}export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol};//# sourceMappingURL=chunk-ZCEAPJDH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commodities/commodities.ts"],"names":["ALL_COMMODITIES","findInKeyIndex","findByKey","filterByKey","createKeyIndex","COMMODITIES_BY_SYMBOL","COMMODITIES_BY_NAME","getCommodityBySymbol","symbol","commodities","getCommodityByName","name","commoditiesInCategory","category"],"mappings":"O,+
|
|
1
|
+
{"version":3,"sources":["../src/commodities/commodities.ts"],"names":["ALL_COMMODITIES","findInKeyIndex","findByKey","filterByKey","createKeyIndex","COMMODITIES_BY_SYMBOL","COMMODITIES_BY_NAME","getCommodityBySymbol","symbol","commodities","getCommodityByName","name","commoditiesInCategory","category"],"mappings":"O,+HAqHA,IAAMK,qCAAwCD,eAAeJ,gBAAiB,UAC9E,IAAMM,mCAAsCF,eAAeJ,gBAAiB,QAyBrE,SAASO,qBACZC,OACAC,YAAoCT,iBAEpC,OAAOS,cAAgBT,gBACjBC,eAAeI,sBAAuBG,OAAQ,gCAC9CN,UAAUO,YAAa,SAAUD,OAAQ,+BACnD,CAkBO,SAASE,mBACZC,KACAF,YAAoCT,iBAEpC,OAAOS,cAAgBT,gBACjBC,eAAeK,oBAAqBK,KAAM,4BAC1CT,UAAUO,YAAa,OAAQE,KAAM,2BAC/C,CAoBO,SAASC,sBAAsBC,UAClC,OAAOV,YAAYH,gBAAiB,WAAYa,SAAU,kCAC9D,QAAAD,sBAAAF,mBAAAH"}
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* getCommodityByName('lavian brandy')?.rare; // -> true
|
|
16
16
|
* ```
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
* subset — one registry's catalogue, or any array you have filtered yourself:
|
|
18
|
+
* The two **by-key** lookups take an optional second argument to **narrow** the search
|
|
19
|
+
* to a subset — one registry's catalogue, or any array you have filtered yourself:
|
|
20
20
|
*
|
|
21
21
|
* | Module | Export | Entries |
|
|
22
22
|
* | --- | --- | --- |
|
|
@@ -25,9 +25,18 @@
|
|
|
25
25
|
* | `./commodities-all` | `ALL_COMMODITIES` | 399 (the default) |
|
|
26
26
|
*
|
|
27
27
|
* It narrows *results*, not bundle size: importing a lookup pulls both catalogues,
|
|
28
|
-
* since that is what it falls back to — 29.
|
|
28
|
+
* since that is what it falls back to — 29.6 KiB minified for all 399. Every record
|
|
29
29
|
* carries a {@link Commodity.rare} flag, so a subset is one `.filter()` away.
|
|
30
30
|
*
|
|
31
|
+
* **Only `ALL_COMMODITIES` itself is indexed.** A by-key lookup answers from an O(1)
|
|
32
|
+
* index when the catalogue you pass *is* `ALL_COMMODITIES` — the same object, not a
|
|
33
|
+
* copy — and scans linearly otherwise, including for `[...ALL_COMMODITIES]`, which
|
|
34
|
+
* holds the same 399 records. Omitting the argument always takes the indexed path, so
|
|
35
|
+
* pass one only when you mean to exclude the other registry.
|
|
36
|
+
*
|
|
37
|
+
* {@link commoditiesInCategory} takes no catalogue: it returns an array, so narrowing
|
|
38
|
+
* it is `.filter()` on the result — `rare` tells the two registries apart.
|
|
39
|
+
*
|
|
31
40
|
* @example
|
|
32
41
|
* ```ts
|
|
33
42
|
* import { getCommodityBySymbol } from '@elite-dangerous-almanac/core/commodities';
|
|
@@ -88,7 +97,10 @@ interface Commodity {
|
|
|
88
97
|
* market/journal reports (`"platinum"`). Leading/trailing whitespace is ignored.
|
|
89
98
|
* @param commodities - Optional subset to search instead of all 399 commodities —
|
|
90
99
|
* `COMMODITIES` (standard only), `RARE_COMMODITIES`, or any array you have filtered
|
|
91
|
-
* yourself. Omit it unless you specifically want to exclude the other registry
|
|
100
|
+
* yourself. Omit it unless you specifically want to exclude the other registry: the
|
|
101
|
+
* indexed O(1) path is taken only when the argument is omitted or is `ALL_COMMODITIES`
|
|
102
|
+
* **by reference**, and every other array — a copy of that same catalogue included —
|
|
103
|
+
* is scanned.
|
|
92
104
|
* @returns The matching {@link Commodity}, or `null` if no commodity has that symbol.
|
|
93
105
|
* @throws {TypeError} If `symbol` is present and not a string. A nullish
|
|
94
106
|
* `symbol` is a miss, answered the way an unrecognised one is.
|
|
@@ -124,19 +136,17 @@ declare function getCommodityByName(name: string, commodities?: readonly Commodi
|
|
|
124
136
|
* whitespace and case are ignored, like every other lookup here, so a group name
|
|
125
137
|
* that arrived from a market payload or a user's dropdown resolves without
|
|
126
138
|
* re-casing it first.
|
|
127
|
-
* @
|
|
128
|
-
* @returns A new array of matches (possibly empty). The input is not modified.
|
|
139
|
+
* @returns A new array of matches (possibly empty).
|
|
129
140
|
* @throws {TypeError} If `category` is present and not a string. A nullish
|
|
130
141
|
* `category` is a miss, answered the way an unrecognised one is.
|
|
131
142
|
* @example
|
|
132
143
|
* ```ts
|
|
133
144
|
* import { commoditiesInCategory } from '@elite-dangerous-almanac/core/commodities/commodities';
|
|
134
|
-
* import { COMMODITIES } from '@elite-dangerous-almanac/core/commodities/commodities-standard';
|
|
135
145
|
*
|
|
136
|
-
* commoditiesInCategory('Metals').length;
|
|
137
|
-
* commoditiesInCategory('metals'
|
|
146
|
+
* commoditiesInCategory('Metals').length; // -> every metal, standard and rare
|
|
147
|
+
* commoditiesInCategory('metals').filter((c) => !c.rare).length; // -> the standard ones only
|
|
138
148
|
* ```
|
|
139
149
|
*/
|
|
140
|
-
declare function commoditiesInCategory(category: string
|
|
150
|
+
declare function commoditiesInCategory(category: string): Commodity[];
|
|
141
151
|
|
|
142
152
|
export { type Commodity, type CommodityCategory, commoditiesInCategory, getCommodityByName, getCommodityBySymbol };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-
|
|
1
|
+
export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-ZCEAPJDH.js"; //# sourceMappingURL=commodities.js.map
|
|
@@ -12,14 +12,25 @@
|
|
|
12
12
|
* commoditiesInCategory('Metals').length; // -> every metal, standard and rare
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
* one registry, or to an array you have filtered yourself
|
|
15
|
+
* The by-key lookups also take an optional trailing argument to **narrow** the search
|
|
16
|
+
* to one registry, or to an array you have filtered yourself. It must be one of the
|
|
17
|
+
* exported catalogues *by reference*; `ALL_COMMODITIES` (or omitting it) is the one
|
|
18
|
+
* that answers from an index rather than a scan:
|
|
17
19
|
*
|
|
18
20
|
* ```ts
|
|
19
|
-
* import {
|
|
21
|
+
* import { getCommodityByName } from '@elite-dangerous-almanac/core/commodities';
|
|
20
22
|
* import { COMMODITIES } from '@elite-dangerous-almanac/core/commodities/commodities-standard';
|
|
21
23
|
*
|
|
22
|
-
*
|
|
24
|
+
* getCommodityByName('lavian brandy', COMMODITIES); // -> null; it is a rare
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* A lookup that returns an array takes no catalogue — narrow its result with
|
|
28
|
+
* `.filter()`:
|
|
29
|
+
*
|
|
30
|
+
* ```ts
|
|
31
|
+
* import { commoditiesInCategory } from '@elite-dangerous-almanac/core/commodities';
|
|
32
|
+
*
|
|
33
|
+
* commoditiesInCategory('Metals').filter((c) => !c.rare).length; // -> the standard ones only
|
|
23
34
|
* ```
|
|
24
35
|
*
|
|
25
36
|
* @packageDocumentation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-
|
|
1
|
+
export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-ZCEAPJDH.js";export{ALL_COMMODITIES}from"../chunk-JQG4C67D.js";export{RARE_COMMODITIES}from"../chunk-EYGVDJ2I.js";export{COMMODITIES}from"../chunk-7EE5VIHR.js"; //# sourceMappingURL=index.js.map
|
package/dist/equipment/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{resolvePersonalModificationForWeapon}from"../chunk-
|
|
1
|
+
export{resolvePersonalModificationForWeapon}from"../chunk-A6OINYNP.js";export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-MGRDB2BZ.js";export{sumPersonalEngineeringIngredients}from"../chunk-C5HG4GJI.js";export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade}from"../chunk-6GJHUWMO.js";export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-B7EYTZRK.js"; //# sourceMappingURL=index.js.map
|
|
@@ -29,7 +29,8 @@ declare const PERSONAL_MODIFICATION_COSTS: Readonly<Record<string, readonly Pers
|
|
|
29
29
|
* Look up a personal modification's one-application material cost.
|
|
30
30
|
*
|
|
31
31
|
* @param symbol - Recipe symbol, such as `"suit_nightvision"` or
|
|
32
|
-
* `"weapon_range_kinetic"`, matched case-insensitively
|
|
32
|
+
* `"weapon_range_kinetic"`, matched case-insensitively after trimming surrounding
|
|
33
|
+
* whitespace.
|
|
33
34
|
* @returns The frozen ingredient list, or `null` when unknown.
|
|
34
35
|
* @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
|
|
35
36
|
* miss, answered like an unrecognised one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/equipment/modification-costs.ts"],"names":["findByRawKey","deepFreeze","modification_costs_default","symbol","PERSONAL_MODIFICATION_COSTS","getPersonalModificationCost"],"mappings":"O,o2LA6BO,IAAMI,4BAETH,WAAWC,
|
|
1
|
+
{"version":3,"sources":["../../src/equipment/modification-costs.ts"],"names":["findByRawKey","deepFreeze","modification_costs_default","symbol","PERSONAL_MODIFICATION_COSTS","getPersonalModificationCost"],"mappings":"O,o2LA6BO,IAAMI,4BAETH,WAAWC,4BAiBR,SAASG,4BACZF,QAEA,OAAOH,aAAaI,4BAA6BD,OAAQ,sCAC7D,QAAAC,4BAAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{resolvePersonalModificationForWeapon}from"../chunk-
|
|
1
|
+
export{resolvePersonalModificationForWeapon}from"../chunk-A6OINYNP.js"; //# sourceMappingURL=modification-journal.js.map
|
|
@@ -44,7 +44,8 @@ declare const PERSONAL_MODIFICATIONS: Readonly<Record<string, PersonalModificati
|
|
|
44
44
|
* Look up a personal-equipment modification by recipe symbol, case-insensitively.
|
|
45
45
|
*
|
|
46
46
|
* @param symbol - Recipe symbol such as `"suit_nightvision"` or
|
|
47
|
-
* `"weapon_range_kinetic"
|
|
47
|
+
* `"weapon_range_kinetic"`, matched case-insensitively after trimming surrounding
|
|
48
|
+
* whitespace.
|
|
48
49
|
* @returns The frozen modification record, or `null` when unknown.
|
|
49
50
|
* @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
|
|
50
51
|
* miss, answered like an unrecognised one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-
|
|
1
|
+
export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-MGRDB2BZ.js"; //# sourceMappingURL=modifications.js.map
|
|
@@ -50,7 +50,8 @@ declare const SUITS: readonly Suit[];
|
|
|
50
50
|
/**
|
|
51
51
|
* Look up a suit model by its grade-independent family, case-insensitively.
|
|
52
52
|
*
|
|
53
|
-
* @param family - Family such as `"utilitysuit"
|
|
53
|
+
* @param family - Family such as `"utilitysuit"`, matched case-insensitively after
|
|
54
|
+
* trimming surrounding whitespace.
|
|
54
55
|
* @returns The frozen suit record, or `null` when unknown.
|
|
55
56
|
* @throws {TypeError} If `family` is present and not a string. A nullish family is a
|
|
56
57
|
* miss, answered like an unrecognised one.
|
|
@@ -64,7 +65,8 @@ declare function getSuitByFamily(family: string): Suit | null;
|
|
|
64
65
|
/**
|
|
65
66
|
* Look up a suit by its display name, case-insensitively.
|
|
66
67
|
*
|
|
67
|
-
* @param name - Display name such as `"Maverick Suit"
|
|
68
|
+
* @param name - Display name such as `"Maverick Suit"`, matched case-insensitively
|
|
69
|
+
* after trimming surrounding whitespace.
|
|
68
70
|
* @returns The frozen suit record, or `null` when unknown.
|
|
69
71
|
* @throws {TypeError} If `name` is present and not a string. A nullish name is a miss,
|
|
70
72
|
* answered like an unrecognised one.
|
|
@@ -78,7 +80,8 @@ declare function getSuitByName(name: string): Suit | null;
|
|
|
78
80
|
/**
|
|
79
81
|
* Resolve the grade-specific Frontier item symbol reported by journal suit events.
|
|
80
82
|
*
|
|
81
|
-
* @param symbol - Item symbol such as `"utilitysuit_class3"
|
|
83
|
+
* @param symbol - Item symbol such as `"utilitysuit_class3"`, matched
|
|
84
|
+
* case-insensitively after trimming surrounding whitespace.
|
|
82
85
|
* @returns The owning suit and its numeric grade, or `null` when unknown.
|
|
83
86
|
* @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
|
|
84
87
|
* miss, answered like an unrecognised one.
|
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-B7EYTZRK.js"; //# sourceMappingURL=suits.js.map
|
|
@@ -67,7 +67,8 @@ declare const PERSONAL_UPGRADE_COSTS: PersonalUpgradeCosts;
|
|
|
67
67
|
/**
|
|
68
68
|
* Get the one-step cost of upgrading a suit to a target grade.
|
|
69
69
|
*
|
|
70
|
-
* @param family - Grade-independent suit family, e.g. `"utilitysuit"
|
|
70
|
+
* @param family - Grade-independent suit family, e.g. `"utilitysuit"`, matched
|
|
71
|
+
* case-insensitively after trimming surrounding whitespace.
|
|
71
72
|
* @param targetGrade - Grade being reached, integer `2`–`5`.
|
|
72
73
|
* @returns The frozen ingredient list, or `null` for an unknown/non-upgradeable suit.
|
|
73
74
|
* @throws {TypeError} If `family` is present and not a string. A nullish family is a
|
|
@@ -83,7 +84,8 @@ declare function getSuitUpgradeStepCost(family: string, targetGrade: number): re
|
|
|
83
84
|
/**
|
|
84
85
|
* Total the suit upgrade steps above `currentGrade` through `targetGrade`.
|
|
85
86
|
*
|
|
86
|
-
* @param family - Grade-independent suit family
|
|
87
|
+
* @param family - Grade-independent suit family, matched case-insensitively after
|
|
88
|
+
* trimming surrounding whitespace.
|
|
87
89
|
* @param targetGrade - Desired grade, integer `1`–`5`.
|
|
88
90
|
* @param currentGrade - Current grade, integer `1`–`5`; defaults to `1`.
|
|
89
91
|
* @returns A summed shopping list, `[]` when no climb remains, or `null` for an
|
|
@@ -101,7 +103,8 @@ declare function getSuitUpgradeCost(family: string, targetGrade: number, current
|
|
|
101
103
|
/**
|
|
102
104
|
* Get the one-step cost of upgrading a handheld weapon to a target grade.
|
|
103
105
|
*
|
|
104
|
-
* @param symbol - Frontier handheld-weapon journal symbol
|
|
106
|
+
* @param symbol - Frontier handheld-weapon journal symbol, matched
|
|
107
|
+
* case-insensitively after trimming surrounding whitespace.
|
|
105
108
|
* @param targetGrade - Grade being reached, integer `2`–`5`.
|
|
106
109
|
* @returns The frozen ingredient list, or `null` for an unknown weapon.
|
|
107
110
|
* @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
|
|
@@ -117,7 +120,8 @@ declare function getPersonalWeaponUpgradeStepCost(symbol: string, targetGrade: n
|
|
|
117
120
|
/**
|
|
118
121
|
* Total the weapon upgrade steps above `currentGrade` through `targetGrade`.
|
|
119
122
|
*
|
|
120
|
-
* @param symbol - Frontier handheld-weapon journal symbol
|
|
123
|
+
* @param symbol - Frontier handheld-weapon journal symbol, matched
|
|
124
|
+
* case-insensitively after trimming surrounding whitespace.
|
|
121
125
|
* @param targetGrade - Desired grade, integer `1`–`5`.
|
|
122
126
|
* @param currentGrade - Current grade, integer `1`–`5`; defaults to `1`.
|
|
123
127
|
* @returns A summed shopping list, `[]` when no climb remains, or `null` for an unknown
|