diff --git a/src/app/components/ModificationsMenu.jsx b/src/app/components/ModificationsMenu.jsx index e61c5b7c..c1ed558d 100644 --- a/src/app/components/ModificationsMenu.jsx +++ b/src/app/components/ModificationsMenu.jsx @@ -57,6 +57,7 @@ export default class ModificationsMenu extends TranslatedComponent { this.modValDidChange = false; // used to determine if component update was caused by change in modification value. this._handleModChange = this._handleModChange.bind(this); + // console.log(props.m.blueprint) this.state = { blueprintMenuOpened: !(props.m.blueprint && props.m.blueprint.name), specialMenuOpened: false @@ -421,15 +422,31 @@ export default class ModificationsMenu extends TranslatedComponent { let haveBlueprint = false; let blueprintTt; let blueprintCv; + let bprintSearchName; + + // If the fdname is Weapon_Overcharged, we need to check if it's an MC + if (m.blueprint && m.blueprint.fdname) { + // Set the bprintSearchName value to the fdname of the blueprint for this module + bprintSearchName = m.blueprint.fdname; + if (m.blueprint.fdname === 'Weapon_Overcharged') { + // If the module is a MultiCannon, we need to fix the blueprint search name, else it will find the Laser Weapon_Overcharged Blueprint and not the MC Weapon_Overcharged Blueprint + if (m.symbol.match(/MultiCannon/i)) { + // console.log(Modifications.modules[m.grp].blueprints['MC_Overcharged']); + // console.log(m.blueprint.fdname); + bprintSearchName = 'MC_Overcharged'; + } + } + } // TODO: Fix this to actually find the correct blueprint. - if (!m.blueprint || !m.blueprint.name || !m.blueprint.fdname || !Modifications.modules[m.grp].blueprints || !Modifications.modules[m.grp].blueprints[m.blueprint.fdname]) { + if (!m.blueprint || !m.blueprint.name || !m.blueprint.fdname || !Modifications.modules[m.grp].blueprints || !Modifications.modules[m.grp].blueprints[bprintSearchName]) { this.props.ship.clearModuleBlueprint(m); this.props.ship.clearModuleSpecial(m); } - if (m.blueprint && m.blueprint.name && Modifications.modules[m.grp].blueprints[m.blueprint.fdname].grades[m.blueprint.grade]) { + if (m.blueprint && m.blueprint.name && Modifications.modules[m.grp].blueprints[bprintSearchName].grades[m.blueprint.grade]) { blueprintLabel = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade; haveBlueprint = true; - blueprintTt = blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], Modifications.modules[m.grp].blueprints[m.blueprint.fdname].grades[m.blueprint.grade].engineers, m.grp); + // console.log(haveBlueprint); + blueprintTt = blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], Modifications.modules[m.grp].blueprints[bprintSearchName].grades[m.blueprint.grade].engineers, m.grp); blueprintCv = getPercent(m); } diff --git a/src/app/components/PowerManagement.jsx b/src/app/components/PowerManagement.jsx index ad574289..97402408 100644 --- a/src/app/components/PowerManagement.jsx +++ b/src/app/components/PowerManagement.jsx @@ -125,15 +125,32 @@ export default class PowerManagement extends TranslatedComponent { retractedElem = {translate('disabled')}; } + // If this is a Guardian Shield Reinforcement Package or Guardian Hull Reinforcement Package, or Guardian Module Reinforcement Package, it cannot change priority + console.log(slot); + let priorityField; + if (m.symbol) { + if (m.symbol.match(/GuardianShield/i) || m.symbol.match(/GuardianHull/i) || m.symbol.match(/GuardianModule/i)) { + priorityField = 1; + } else { + priorityField = + + {' ' + (slot.priority + 1) + ' '} + + ; + } + } + else { + priorityField = + + {' ' + (slot.priority + 1) + ' '} + + ; + } powerRows.push( {m.class + m.rating} {slotName(translate, slot)} {translate(slot.type)} - - - {' ' + (slot.priority + 1) + ' '} - - + {priorityField} {pwr(m.getPowerUsage())} {pct(m.getPowerUsage() / ship.powerAvailable)} {retractedElem} diff --git a/src/app/components/StandardSlot.jsx b/src/app/components/StandardSlot.jsx index 09819009..d098203a 100644 --- a/src/app/components/StandardSlot.jsx +++ b/src/app/components/StandardSlot.jsx @@ -133,10 +133,10 @@ export default class StandardSlot extends TranslatedComponent {
{formats.round(mass)}{units.T}
- { m.getMinMass() ?
{translate('minimum mass')}: {formats.int(m.getMinMass())}{units.T}
: null } - { m.getOptMass() ?
{translate('optimal mass')}: {formats.int(m.getOptMass())}{units.T}
: null } - { m.getMaxMass() ?
{translate('max mass')}: {formats.int(m.getMaxMass())}{units.T}
: null } - { m.getOptMul() ?
{translate('optimal multiplier')}: {formats.rPct(m.getOptMul())}
: null } + { m.getMinMass() ?
{translate('minmass')}: {formats.int(m.getMinMass())}{units.T}
: null } + { m.getOptMass() ?
{translate('optmass')}: {formats.int(m.getOptMass())}{units.T}
: null } + { m.getMaxMass() ?
{translate('maxmass')}: {formats.int(m.getMaxMass())}{units.T}
: null } + { m.getOptMul() ?
{translate('optmul')}: {formats.rPct(m.getOptMul())}
: null } { m.getRange() ?
{translate('range', m.grp)}: {formats.f2(m.getRange())}{units.km}
: null } { m.time ?
{translate('time')}: {formats.time(m.time)}
: null } { m.getThermalEfficiency() ?
{translate('efficiency')}: {formats.f2(m.getThermalEfficiency())}
: null } diff --git a/src/app/i18n/en.json b/src/app/i18n/en.json index eba7f829..1290640c 100644 --- a/src/app/i18n/en.json +++ b/src/app/i18n/en.json @@ -276,8 +276,10 @@ "thermres": "Thermal resistance", "wepcap": "Weapons capacity", "weprate": "Weapons recharge rate", + "minmass": "Minimum mass", "minmass_sg": "Minimum hull mass", "optmass_sg": "Optimal hull mass", + "maxmass": "Maximum mass", "maxmass_sg": "Maximum hull mass", "minmul_sg": "Minimum strength", "optmul_sg": "Optimal strength", diff --git a/src/app/utils/BlueprintFunctions.js b/src/app/utils/BlueprintFunctions.js index 3365c05c..03d62584 100644 --- a/src/app/utils/BlueprintFunctions.js +++ b/src/app/utils/BlueprintFunctions.js @@ -307,10 +307,22 @@ export function isChangeValueBeneficial(feature, value) { * @returns {Object} The matching blueprint */ export function getBlueprint(name, module) { + // Special case for multi-cannons. Conflicting 'Weapon_Overcharged' Blueprints exist due to FD's naming conventions. If this blueprint is for a multi-cannon, we need to use the correct blueprint. + if (name === 'weapon_overcharged') { + if (module.symbol.match(/MultiCannon/i)) { + name = 'mc_overcharged'; + } + } + else if (name === 'Weapon_Overcharged') { + if (module.symbol.match(/MultiCannon/i)) { + name = 'MC_Overcharged'; + } + } // Start with a copy of the blueprint const findMod = val => Object.keys(Modifications.blueprints).find(elem => elem.toString().toLowerCase().search(val.toString().toLowerCase().replace(/(OutfittingFieldType_|persecond)/igm, '')) >= 0); const found = Modifications.blueprints[findMod(name)]; if (!found || !found.fdname) { + console.error('Blueprint not found:', name); return {}; } const blueprint = JSON.parse(JSON.stringify(found)); diff --git a/src/app/utils/JournalUtils.js b/src/app/utils/JournalUtils.js index 5b7cf0f5..c56a9c3f 100644 --- a/src/app/utils/JournalUtils.js +++ b/src/app/utils/JournalUtils.js @@ -117,7 +117,7 @@ export function shipFromLoadoutJSON(json) { let powerplant = _moduleFromFdName(module.Item); // Check the powerplant returned is valid if (!_isValidImportedModule(powerplant, 'powerplant')) - { + { powerplant = _moduleFromFdName('Int_Missing_Powerplant'); module.Engineering = null; } @@ -130,7 +130,7 @@ export function shipFromLoadoutJSON(json) { let thrusters = _moduleFromFdName(module.Item); // Check the thrusters returned is valid if (!_isValidImportedModule(thrusters, 'thrusters')) - { + { thrusters = _moduleFromFdName('Int_Missing_Engine'); module.Engineering = null; } @@ -143,7 +143,7 @@ export function shipFromLoadoutJSON(json) { let frameshiftdrive = _moduleFromFdName(module.Item); // Check the frameshiftdrive returned is valid if (!_isValidImportedModule(frameshiftdrive, 'frameshiftdrive')) - { + { frameshiftdrive = _moduleFromFdName('Int_Missing_Hyperdrive'); module.Engineering = null; } @@ -156,7 +156,7 @@ export function shipFromLoadoutJSON(json) { let lifesupport = _moduleFromFdName(module.Item); // Check the lifesupport returned is valid if (!_isValidImportedModule(lifesupport, 'lifesupport')) - { + { lifesupport = _moduleFromFdName('Int_Missing_LifeSupport'); module.Engineering = null; } @@ -169,8 +169,8 @@ export function shipFromLoadoutJSON(json) { let powerdistributor = _moduleFromFdName(module.Item); // Check the powerdistributor returned is valid if (!_isValidImportedModule(powerdistributor, 'powerdistributor')) - { - powerdistributor = _moduleFromFdName('Int_Missing_PowerDistributor'); + { + powerdistributor = _moduleFromFdName('Int_Missing_PowerDistributor'); module.Engineering = null; } ship.use(ship.standard[4], powerdistributor, true); @@ -182,7 +182,7 @@ export function shipFromLoadoutJSON(json) { let sensors = _moduleFromFdName(module.Item); // Check the sensors returned is valid if (!_isValidImportedModule(sensors, 'sensors')) - { + { sensors = _moduleFromFdName('Int_Missing_Sensors'); module.Engineering = null; } @@ -195,7 +195,7 @@ export function shipFromLoadoutJSON(json) { let fueltank = _moduleFromFdName(module.Item); // Check the fueltank returned is valid if (!_isValidImportedModule(fueltank, 'fueltank')) - { + { fueltank = _moduleFromFdName('Int_Missing_FuelTank'); } ship.use(ship.standard[6], fueltank, true); @@ -228,7 +228,7 @@ export function shipFromLoadoutJSON(json) { } else { hardpoint = _moduleFromFdName(hardpointSlot.Item); // Check the hardpoint module returned is valid - if (!_isValidImportedModule(hardpoint, 'hardpoint')){ + if (!_isValidImportedModule(hardpoint, 'hardpoint')){ // Check if it's a Utility or Hardpoint if (hardpointSlot.Slot.toLowerCase().search(/tiny/)) { @@ -293,12 +293,12 @@ export function shipFromLoadoutJSON(json) { let internal = _moduleFromFdName(internalJson.Item); // Check the internal module returned is valid if (!_isValidImportedModule(internal, 'internal')) - { + { internal = _moduleFromFdName('Int_Missing_Module'); ship.use(ship.internal[i], internal, true); ship.internal[i].enabled = internalJson.On === true; ship.internal[i].priority = internalJson.Priority; - //throw 'Unknown internal module: "' + module.Item + '"'; + //throw 'Unknown internal module: "' + module.Item + '"'; } else { ship.use(ship.internal[i], internal, true); @@ -349,6 +349,7 @@ function _addModifications(module, modifiers, quality, blueprint, grade, special // Add the blueprint definition, grade and special if (blueprint) { module.blueprint = getBlueprint(blueprint, module); + if (grade) { module.blueprint.grade = Number(grade); }