From a00a80b4e445adc600daf4b9e2fefd99c668fd17 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Thu, 30 Oct 2025 12:44:08 +0100 Subject: [PATCH] Implement effects and buffs related to expedition bursts --- eos/effects.py | 55 ++++++++++++++++++++++++++++++++++ eos/saveddata/fit.py | 17 +++++++++++ gui/builtinViewColumns/misc.py | 15 ++++++++++ 3 files changed, 87 insertions(+) diff --git a/eos/effects.py b/eos/effects.py index 4bec3b02a..584803315 100644 --- a/eos/effects.py +++ b/eos/effects.py @@ -41715,6 +41715,43 @@ class Effect12529(BaseEffect): skill='Amarr Battlecruiser', **kwargs) +class Effect12530(BaseEffect): + """ + expeditionCommandDurationBonus + + Used by: + Skill: Expedition Command + """ + + type = 'passive' + + @staticmethod + def handler(fit, src, context, projectionRange, **kwargs): + lvl = src.level + fit.modules.filteredItemBoost( + lambda mod: mod.item.requiresSkill('Expedition Command'), 'buffDuration', + src.getModifiedItemAttr('durationBonus') * lvl, **kwargs) + + +class Effect12531(BaseEffect): + """ + expeditionCommandStrengthBonus + + Used by: + Skill: Expedition Command Specialist + """ + + type = 'passive' + + @staticmethod + def handler(fit, src, context, projectionRange, **kwargs): + lvl = src.level + for i in (1, 2, 3, 4): + fit.modules.filteredChargeBoost( + lambda mod: mod.item.requiresSkill('Expedition Command'), f'warfareBuff{i}Multiplier', + src.getModifiedItemAttr('commandStrengthBonus') * lvl, **kwargs) + + class Effect12537(BaseEffect): """ shipBonusAnalyzerRangeECS1 @@ -41802,6 +41839,24 @@ class Effect12541(BaseEffect): src.getModifiedItemAttr('shipBonusGasCloudScoopCPUreductionSOEECSrole'), **kwargs) +class Effect12542(BaseEffect): + """ + expeditionCommandMindlink + + Used by: + Implants named like: Expedition Command Mindlink (2 of 2) + """ + + type = 'passive' + + @staticmethod + def handler(fit, src, context, projectionRange, **kwargs): + for attrName in ('buffDuration', 'warfareBuff1Value', 'warfareBuff2Value', 'warfareBuff3Value', 'warfareBuff4Value'): + fit.modules.filteredItemBoost( + lambda mod: mod.item.requiresSkill('Expedition Command'), attrName, + src.getModifiedItemAttr('mindlinkBonus'), **kwargs) + + class Effect12543(BaseEffect): """ shipBonusRole6ExpeditionBurstDurationSOEECS diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index afd7791a9..4a47be47b 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -925,8 +925,25 @@ class Fit: lambda mod: (mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Capital Repair Systems")), "armorDamageAmount", value, stackingPenalties=True) + if warfareBuffID == 2464: # Expedition Burst: Probe Strength + self.modules.filteredChargeBoost( + lambda mod: mod.charge.requiresSkill('Astrometrics'), + 'baseSensorStrength', value, stackingPenalties=True) + if warfareBuffID == 2465: # Expedition Burst: Directional Scanner, Hacking and Salvager Range + self.ship.boostItemAttr("maxDirectionalScanRange", value) + self.modules.filteredItemBoost( + lambda mod: mod.item.group.name in ("Data Miners", "Salvager"), "maxRange", value, stackingPenalties=True) + if warfareBuffID == 2466: # Expedition Burst: Maximum Scan Deviation Modifier + self.modules.filteredChargeBoost( + lambda mod: mod.charge.requiresSkill('Astrometrics'), + 'baseMaxScanDeviation', value, stackingPenalties=True) + if warfareBuffID == 2468: # Expedition Burst: Virus Coherence + self.modules.filteredItemIncrease( + lambda mod: mod.item.group.name == "Data Miners", "virusCoherence", value) if warfareBuffID == 2474: # Mining burst charges self.ship.forceItemAttr("miningScannerUpgrade", value) + if warfareBuffID == 2481: # Expedition Burst: Salvager duration bonus + self.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Salvaging"), "duration", value) del self.commandBonuses[warfareBuffID] diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index d7b520658..5d983069c 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -775,6 +775,21 @@ class Miscellanea(ViewColumn): elif buffId == 25: # Mining Burst: Mining Equipment Preservation: Crystal Volatility textSections.append(f"{formatAmount(buffValue, 3, 0, 3, forceSign=True)}%") tooltipSections.append("mining crystal volatility") + elif buffId == 2464: # Expedition Burst: Probe Strength + textSections.append(f"{formatAmount(buffValue, 3, 0, 3, forceSign=True)}%") + tooltipSections.append("scan probe strength") + elif buffId == 2465: # Expedition Burst: Directional Scanner, Hacking and Salvager Range + textSections.append(f"{formatAmount(buffValue, 3, 0, 3, forceSign=True)}%") + tooltipSections.append("dscan, hacking & salvaging range") + elif buffId == 2466: # Expedition Burst: Maximum Scan Deviation Modifier + textSections.append(f"{formatAmount(buffValue, 3, 0, 3, forceSign=True)}%") + tooltipSections.append("scan probe deviation") + elif buffId == 2468: # Expedition Burst: Virus Coherence + textSections.append(f"{formatAmount(buffValue, 3, 0, 3, forceSign=True)}") + tooltipSections.append("virus coherence") + elif buffId == 2481: # Expedition Burst: Salvager duration bonus + textSections.append(f"{formatAmount(buffValue, 3, 0, 3, forceSign=True)}%") + tooltipSections.append("salvager cycle time") if not textSections: return '', None text = ' | '.join(textSections)