Repository navigation
DotNet.Ships.Class.BlueprintMenu
EliteDangerousAlmanac / Ships / BlueprintMenu
Defined in: dotnet/src/EliteDangerousAlmanac/Ships/BlueprintMenu.cs:9
Finds the entry a module's engineering menu lists for a fitted blueprint.
staticFindForModule(moduleSymbol,blueprintSymbol):string?
Defined in: dotnet/src/EliteDangerousAlmanac/Ships/BlueprintMenu.cs:70
The identifier a module's ordinary engineering menu lists for the recipe a fitted BlueprintName names.
string?
A module symbol, such as Int_LifeSupport_Size4_Class2. Leading and trailing whitespace and case are ignored. An unknown or absent module offers no menu.
string?
A catalogue or journal blueprint identifier, such as Misc_LightWeight, matched case-insensitively after trimming.
string?
The menu's identifier in the catalogue's own spelling, which is one entry of EngineeringOptions.BlueprintsFor and finds a recipe in BlueprintCatalogue; or null when the menu lists no entry for this recipe, or when either argument is null.
A fitted module and its menu can spell one recipe two ways, so comparing the two identifiers as written misses a match. This settles both cases where that happens. The first is a journal collision: the game writes Sensor_LongRange on a wake scanner, and the scanner menu lists Scanner_LongRange. BlueprintJournal reads that identifier against the module first. The second is a generic spelling: where a modification applies to several module families, the menu lists the family's own identifier and a build authored elsewhere can carry the generic Misc_* identifier. A life support's Lightweight is LifeSupport_LightWeight in the menu and Misc_LightWeight in an EDSY-authored build. A generic identifier matches the menu entry that is not itself generic and has the same name, grades and modified stats.
The match ignores magnitudes on purpose. The shielded life-support recipe draws twelve percent more power at grade five than the generic one, and the two are still one menu entry. So use the returned identifier to find the menu entry, and keep the fitted identifier for the numbers: a build's engineering already rolls under the recipe it names.
A generic identifier never matches another generic identifier, and never matches a family recipe that changes different stats. Misc_LightWeight on a pulse laser finds nothing, because a weapon's Lightweight also cuts distributor draw. Misc_ChaffCapacity on a heat sink launcher finds nothing: that menu lists Misc_HeatSinkCapacity, which is generic too, and the two roll different ammunition.
Only the ordinary menu of EngineeringOptions is read. A Mercenary recipe sold with a module is not on that menu, so this finds nothing for it; it is the same identifier in ShipLoadout.AvailableBlueprints and needs no matching.
string? lightweight = BlueprintMenu.FindForModule("Int_LifeSupport_Size4_Class2", "Misc_LightWeight"); // "LifeSupport_LightWeight"
string? longRange = BlueprintMenu.FindForModule("Hpt_CloudScanner_Size0_Class5", "Sensor_LongRange"); // "Scanner_LongRange"
string? none = BlueprintMenu.FindForModule("Hpt_PulseLaser_Fixed_Small", "Misc_LightWeight"); // nullGuides
Astronomy
Classes (16)
Records (29)
- AbsoluteBoxel
- AtmosphereComponent
- BodyComposition
- BodyParent
- BodyProperties
- BodyRing
- BodyScanEvent
- BoxelCodexRegion
- BoxelLetters
- CodexRegion
- CodexRegionBounds
- DecodedSystemAddress
- GalacticPlanePosition
- GalacticPosition
- HandAuthoredRegion
- HandAuthoredSphere
- MassStabilityAssessment
- NamingRegionOrigin
- Nebula
- NebulaNearby
- OrbitExtents
- PermitLock
- PermitLockedSystem
- RingDynamics
- RocheLimits
- SectorGridPosition
- SpinOrbitResonance
- SurfaceMaterial
- SystemNameParts
Commodities
Classes (2)
Records (1)
Enumerations (1)
Equipment
Classes (8)
Records (19)
- FittedPersonalModification
- FittedPersonalWeapon
- PersonalEngineeringIngredient
- PersonalModification
- PersonalModifier
- PersonalMount
- PersonalTool
- PersonalWeapon
- PersonalWeaponGrade
- PersonalWeaponMetrics
- ReloadTime
- ScopeMagnification
- Suit
- SuitGrade
- SuitIdentity
- SuitLoadout
- SuitLoadoutEvent
- SuitLoadoutImportOutcome
- SuitLoadoutModuleEvent
Materials
Classes (5)
Records (2)
Enumerations (4)
Ships
Classes (43)
- Ammunition
- Armour
- BlueprintCatalogue
- BlueprintCosts
- BlueprintJournal
- BlueprintMenu
- BuildMetrics
- BuildSlots
- CalculationResult\<T\>
- CalculationResult
- DefaultLoadouts
- Distributor
- Engineering
- EngineeringOptions
- ExperimentalEffectCatalogue
- ExperimentalEffectCosts
- Gunsights
- Heat
- JumpRange
- LoadoutCalculations
- LoadoutEditException
- LoadoutValidator
- Mobility
- MobilityCapacitor
- ModuleCapabilities
- ModuleCatalogue
- ModuleLimits
- ModuleStats
- OutfittingFamilies
- Power
- PreEngineeredCatalogue
- PreEngineeredStats
- Resistances
- ShieldCapacitor
- ShieldRecovery
- Shields
- ShipCatalogue
- ShipLoadout
- Slef
- SlotRestrictions
- SourcePurchase
- Weapons
- WeaponsCapacitor
Records (115)
- AmmunitionCapacity
- ApplyBlueprintOptions
- ArmourInput
- ArmourMetrics
- AvailableBlueprint
- Blueprint
- BlueprintCost
- BlueprintFeature
- BlueprintGrade
- BuildCost
- BuildCredits
- BuildLoad
- BuildMass
- BuildSlot
- BuildWeaponMetrics
- BulkheadParams
- CalculationIssue
- CellBankInput
- CellBankMetrics
- CellBankSummary
- CoreSlots
- DamageComponents
- DamageDistribution
- DamageSplit
- DamageTypeValues
- DefaultLoadout
- DefaultLoadoutModule
- DistributorCapacitorMetrics
- DistributorInput
- DistributorMetrics
- DistributorPips
- EngineeringAmbiguous
- EngineeringEditDetail
- EngineeringGradeEdit
- EngineeringMaterial
- EngineeringModifier
- EngineeringOptionGroup
- EngineeringRerolled
- EngineeringUnresolved
- ExperimentalContribution
- ExperimentalEffect
- ExperimentalEffectEdit
- FittedModule
- FittedWeaponMetrics
- FixedMountRepair
- FrameShiftDriveParams
- GunsightOffset
- GunsightPoint
- HardpointSlotSpec
- HeatInput
- HeatMetrics
- HeatState
- HeatWeapon
- HullReinforcementParams
- JumpRangeSummary
- LoadoutCalculationModule
- LoadoutEvent
- LoadoutExportOptions
- LoadoutFuelCapacity
- LoadoutImportOutcome
- LoadoutIssue
- LoadoutMass
- LoadoutModule
- LoadoutSlot
- LoadoutValidation
- LoadoutValidationInput
- MobilityCapacitorMetrics
- MobilityInput
- MobilityMetrics
- ModuleDefaulted
- ModuleEmptied
- ModuleEngineering
- ModuleFitProblem
- ModuleLimitEntry
- ModuleLimitIncrease
- ModuleLimitUsage
- ModuleReinforcementParams
- OptionalSlotSpec
- OutfittingModule
- ParsedSlot
- PowerBand
- PowerBudget
- PowerConsumer
- PowerConsumerResult
- PreEngineeredModifier
- PreEngineeredVariant
- ProjectileRangeBoundaries
- ShieldBoosterParams
- ShieldCapacitorInput
- ShieldCapacitorMetrics
- ShieldGeneratorParams
- ShieldInput
- ShieldMetrics
- ShieldRecoveryInput
- ShieldRecoveryMetrics
- Ship
- ShipSlots
- SlefDiagnostic
- SlefEntry
- SlefExportOptions
- SlefHeader
- SlefInspection
- SourceModuleValue
- SourcePurchaseRecord
- StandardLoadFigures
- ThrusterCurveParams
- ThrusterParams
- TotalRangeDetails
- UnpricedModule
- ValidationModule
- WeaponMetrics
- WeaponsCapacitorInput
- WeaponsCapacitorMetrics
- WeaponStats
- WeaponTotals
Interfaces (1)
Enumerations (35)
- BlueprintRoute
- CalculationField
- CalculationIssueReason
- CoreSlotType
- DamageType
- EngineeringEditCode
- EngineeringEditKind
- EngineeringGroupId
- FixedMountRepairStatus
- ImmovableReason
- LoadoutCredits
- LoadoutEditErrorCode
- LoadoutImportAction
- LoadoutIssueCode
- LoadoutIssueSeverity
- LoadoutModuleOrder
- ModifierMethod
- ModuleCategory
- ModuleExclusionGroup
- ModuleFitConstraint
- ModuleGuidance
- ModuleLimitGroup
- ModuleMount
- ModuleRating
- ModuleSlot
- ModuleStat
- OutfittingFamilyId
- PreEngineeredAcquisition
- ShipSize
- SlefConstraint
- SlefDiagnosticCode
- SlotKind
- SlotRestriction
- StandardLoad
- ThrusterLoad