Skip to content
Permalink
Browse files

Fix item search limit, project wide reformatting and cleanup

  • Loading branch information...
Ebag333 committed Apr 7, 2017
1 parent 2f335a1 commit ddb40374b984121a66ebff1e3ee663890edad323
Showing with 975 additions and 898 deletions.
  1. +11 −10 _development/helpers.py
  2. +1 −1 _development/helpers_items.py
  3. +3 −2 _development/helpers_locale.py
  4. +0 −1 config.py
  5. +1 −0 eos/db/__init__.py
  6. +1 −1 eos/db/gamedata/marketGroup.py
  7. +2 −2 eos/db/gamedata/metaGroup.py
  8. +1 −1 eos/db/gamedata/unit.py
  9. +15 −16 eos/db/migrations/upgrade22.py
  10. +6 −6 eos/db/saveddata/booster.py
  11. +0 −1 eos/db/saveddata/skill.py
  12. +5 −5 eos/effects/adaptivearmorhardener.py
  13. +4 −4 eos/effects/angelsetbonus.py
  14. +2 −2 eos/effects/armorallrepairsystemsamountbonuspassive.py
  15. +2 −2 eos/effects/elitebonusinterdictorsmissilekineticdamage1.py
  16. +2 −2 eos/effects/elitebonusmarauderscruiseandtorpedodamagerole1.py
  17. +1 −1 eos/effects/energyneutralizerfalloff.py
  18. +1 −1 eos/effects/entityenergyneutralizerfalloff.py
  19. +6 −6 eos/effects/maraudermodeeffect26.py
  20. +2 −2 eos/effects/minigamevirusstrengthbonus.py
  21. +4 −4 eos/effects/modeagilitypostdiv.py
  22. +3 −3 eos/effects/modearmorrepdurationpostdiv.py
  23. +4 −4 eos/effects/modearmorresonancepostdiv.py
  24. +2 −2 eos/effects/modehullresonancepostdiv.py
  25. +5 −5 eos/effects/modemwdandabboostpostdiv.py
  26. +5 −5 eos/effects/modemwdboostpostdiv.py
  27. +3 −3 eos/effects/modemwdcappostdiv.py
  28. +5 −5 eos/effects/modemwdsigradiuspostdiv.py
  29. +4 −4 eos/effects/modeshieldresonancepostdiv.py
  30. +4 −4 eos/effects/modevelocitypostdiv.py
  31. +7 −7 eos/effects/modulebonusfightersupportunit.py
  32. +3 −3 eos/effects/overloadselfsensormodulebonus.py
  33. +3 −3 eos/effects/remotesensorboostfalloff.py
  34. +3 −3 eos/effects/scanstrengthbonuspercentactivate.py
  35. +3 −3 eos/effects/sensorboosteractivepercentage.py
  36. +3 −3 eos/effects/shieldboostamplifier.py
  37. +2 −2 eos/effects/shieldboostamplifierpassivebooster.py
  38. +2 −2 eos/effects/shieldboosterdurationbonusshieldskills.py
  39. +2 −2 eos/effects/shipbonusaoevelocitycruiseandtorpedocb2.py
  40. +10 −10 eos/effects/shipbonuscarriera4warfarelinksbonus.py
  41. +10 −10 eos/effects/shipbonuscarrierc4warfarelinksbonus.py
  42. +10 −10 eos/effects/shipbonuscarrierg4warfarelinksbonus.py
  43. +10 −10 eos/effects/shipbonuscarrierm4warfarelinksbonus.py
  44. +10 −10 eos/effects/shipbonusforceauxiliaryc4warfarelinksbonus.py
  45. +10 −10 eos/effects/shipbonusforceauxiliaryg4warfarelinksbonus.py
  46. +10 −10 eos/effects/shipbonusforceauxiliarym4warfarelinksbonus.py
  47. +2 −2 eos/effects/shipbonusminingiceharvestingrangeore2.py
  48. +2 −2 eos/effects/shipbonussmallmissileexplosionradiuscd2.py
  49. +2 −2 eos/effects/shipbonussmallmissileexplosionradiuscf2.py
  50. +10 −10 eos/effects/shipbonussupercarriera5warfarelinksbonus.py
  51. +10 −10 eos/effects/shipbonussupercarrierc5warfarelinksbonus.py
  52. +10 −10 eos/effects/shipbonussupercarrierg5warfarelinksbonus.py
  53. +10 −10 eos/effects/shipbonussupercarrierm5warfarelinksbonus.py
  54. +2 −2 eos/effects/shipcruiseandtorpedovelocitybonuscb3.py
  55. +4 −4 eos/effects/shipmodemaxtargetrangepostdiv.py
  56. +5 −5 eos/effects/shipmodemissilevelocitypostdiv.py
  57. +4 −4 eos/effects/shipmodescanrespostdiv.py
  58. +4 −4 eos/effects/shipmodescanstrengthpostdiv.py
  59. +5 −5 eos/effects/shipmodesetdamagepostdiv.py
  60. +5 −5 eos/effects/shipmodesetoptimalrangepostdiv.py
  61. +5 −5 eos/effects/shipmodeshtdamagepostdiv.py
  62. +5 −5 eos/effects/shipmodeshtoptimalrangepostdiv.py
  63. +5 −5 eos/effects/shipmodesptdamagepostdiv.py
  64. +5 −5 eos/effects/shipmodespttrackingpostdiv.py
  65. +2 −2 eos/effects/shipsmallmissiledmgpiratefaction.py
  66. +2 −2 eos/effects/shipsmallmissileemdmgcf2.py
  67. +2 −2 eos/effects/shipsmallmissileexpdmgcf2.py
  68. +2 −2 eos/effects/shipsmallmissilekindmgcf2.py
  69. +2 −2 eos/effects/shipsmallmissilekindmgcf3.py
  70. +2 −2 eos/effects/shipsmallmissilethermdmgcf2.py
  71. +2 −2 eos/effects/skilladvancedweaponupgradespowerneedbonus.py
  72. +2 −2 eos/effects/skillsuperweapondmgbonus.py
  73. +29 −29 eos/gnosis.py
  74. +1 −0 gui/bitmapLoader.py
  75. +13 −9 gui/builtinGraphs/fitDps.py
  76. +0 −1 gui/builtinPreferenceViews/pyfaEnginePreferences.py
  77. +1 −1 gui/builtinPreferenceViews/pyfaGeneralPreferences.py
  78. +4 −2 gui/builtinStatsViews/rechargeViewFull.py
  79. +9 −5 gui/builtinStatsViews/resistancesViewFull.py
  80. +16 −8 gui/builtinStatsViews/resourcesViewFull.py
  81. +21 −21 gui/builtinStatsViews/targetingMiscViewFull.py
  82. +17 −17 gui/builtinStatsViews/targetingMiscViewMinimal.py
  83. +36 −34 gui/builtinViewColumns/misc.py
  84. +7 −5 gui/builtinViews/fittingView.py
  85. +1 −0 gui/characterEditor.py
  86. +9 −8 gui/characterSelection.py
  87. +15 −15 gui/chromeTabs.py
  88. +8 −6 gui/copySelectDialog.py
  89. +1 −0 gui/crestFittings.py
  90. +1 −1 gui/fighterView.py
  91. +50 −46 gui/mainFrame.py
  92. +1 −0 gui/mainMenuBar.py
  93. +4 −4 gui/propertyEditor.py
  94. +17 −16 gui/shipBrowser.py
  95. +5 −5 gui/utils/exportHtml.py
  96. +5 −5 scripts/conversion.py
  97. +32 −23 scripts/dist.py
  98. +144 −135 scripts/effectUsedBy.py
  99. +25 −23 scripts/findNonMarket.py
  100. +14 −13 scripts/icons_update.py
  101. +25 −16 scripts/itemDiff.py
  102. +34 −32 scripts/jsonToSql.py
  103. +14 −9 scripts/prep_data.py
  104. +2 −9 scripts/renders_update.py
  105. +2 −2 scripts/sdeReadIcons.py
  106. +1 −1 service/character.py
  107. +1 −1 service/eveapi.py
  108. +2 −2 service/market.py
  109. +7 −7 service/port.py
  110. +4 −5 service/price.py
  111. +8 −4 service/pycrest/eve.py
  112. +16 −16 service/pycrest/weak_ciphers.py
  113. +1 −0 service/server.py
  114. +13 −13 service/settings.py
  115. +3 −3 service/update.py
  116. +7 −6 setup-osx.py
  117. +23 −24 setup.py
  118. +1 −0 tests/test_locale/file_dialog.py
  119. +1 −0 tests/test_locale/test_os_walk.py
  120. +2 −0 tests/test_modules/test_eos/test_gamedata.py
  121. +2 −0 tests/test_modules/test_eos/test_modifiedAttributeDict.py
  122. +1 −1 tests/test_modules/test_eos/test_saveddata/test_fit_2.py
  123. +1 −0 tests/test_modules/test_gui/test_aboutData.py
  124. +1 −0 tests/test_modules/test_service/test_attribute.py
  125. +1 −0 tests/test_smoketests/test_rifter.py
  126. +2 −1 utils/compat.py
@@ -13,14 +13,14 @@
sys.path.append(os.path.realpath(os.path.join(script_dir, '..', '..')))
sys._called_from_test = True


# noinspection PyUnresolvedReferences,PyUnusedLocal
@pytest.fixture
def DBInMemory_test():
def rollback():
with sd_lock:
saveddata_session.rollback()


print("Creating database in memory")
from os.path import realpath, join, dirname, abspath

@@ -47,7 +47,7 @@ class ReadOnlyException(Exception):
# game db because we haven't reached gamedata_meta.create_all()
try:
gamedata_version = gamedata_session.execute(
"SELECT `field_value` FROM `metadata` WHERE `field_name` LIKE 'client_build'"
"SELECT `field_value` FROM `metadata` WHERE `field_name` LIKE 'client_build'"
).fetchone()[0]
except Exception as e:
print("Missing gamedata version.")
@@ -70,9 +70,9 @@ class ReadOnlyException(Exception):

# Import all the definitions for all our database stuff
# noinspection PyPep8
#from eos.db.gamedata import alphaClones, attribute, category, effect, group, icon, item, marketGroup, metaData, metaGroup, queries, traits, unit
# from eos.db.gamedata import alphaClones, attribute, category, effect, group, icon, item, marketGroup, metaData, metaGroup, queries, traits, unit
# noinspection PyPep8
#from eos.db.saveddata import booster, cargo, character, crest, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, miscData, module, override, price, queries, skill, targetResists, user
# from eos.db.saveddata import booster, cargo, character, crest, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, miscData, module, override, price, queries, skill, targetResists, user

# If using in memory saveddata, you'll want to reflect it so the data structure is good.
if saveddata_connectionstring == "sqlite:///:memory:":
@@ -83,12 +83,13 @@ class ReadOnlyException(Exception):
print(gamedata_engine)

helper = {
#'config': eos.config,
'gamedata_session' : gamedata_session,
'saveddata_session' : saveddata_session,
# 'config': eos.config,
'gamedata_session' : gamedata_session,
'saveddata_session': saveddata_session,
}
return helper


# noinspection PyUnresolvedReferences,PyUnusedLocal
@pytest.fixture
def DBInMemory():
@@ -104,10 +105,10 @@ def DBInMemory():
print(eos.db.gamedata_engine)

helper = {
'config': eos.config,
'db' : eos.db,
'config' : eos.config,
'db' : eos.db,
'gamedata_session' : eos.db.gamedata_session,
'saveddata_session' : eos.db.saveddata_session,
'saveddata_session': eos.db.saveddata_session,
}
return helper

@@ -6,7 +6,7 @@

# noinspection PyShadowingNames
@pytest.fixture
def StrongBluePillBooster (DB, Gamedata, Saveddata):
def StrongBluePillBooster(DB, Gamedata, Saveddata):
print("Creating Strong Blue Pill Booster")
item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Strong Blue Pill Booster").first()
return Saveddata['Booster'](item)
@@ -69,8 +69,8 @@

system_names = {
'Windows': windows_codecs,
'Linux': linux_codecs,
'Darwin': mac_codecs,
'Linux' : linux_codecs,
'Darwin' : mac_codecs,
}


@@ -86,6 +86,7 @@ def GetPath(root, file=None, codec=None):

return path


def GetUnicodePath(root, file=None, codec=None):
# Replace this with the function we actually use for this
path = os.path.realpath(os.path.abspath(root))
@@ -12,7 +12,6 @@
pyfalog.warning("Failed to import: configforced")
configforced = None


# Turns on debug mode
debug = False
# Defines if our saveddata will be in pyfa root or not
@@ -31,6 +31,7 @@
pyfalog.info("Gamedata connection: {0}", config.gamedata_connectionstring)
pyfalog.info("Saveddata connection: {0}", config.saveddata_connectionstring)


class ReadOnlyException(Exception):
pass

@@ -41,4 +41,4 @@
"ID" : synonym("marketGroupID"),
"name" : synonym("marketGroupName"),
"description": deferred(marketgroups_table.c.description)
})
})
@@ -38,14 +38,14 @@
properties={
"ID" : synonym("metaGroupID"),
"name": synonym("metaGroupName")
})
})

mapper(MetaType, metatypes_table,
properties={
"ID" : synonym("metaGroupID"),
"parent": relation(Item, primaryjoin=metatypes_table.c.parentTypeID == items_table.c.typeID),
"items" : relation(Item, primaryjoin=metatypes_table.c.typeID == items_table.c.typeID),
"info" : relation(MetaGroup, lazy=False)
})
})

MetaType.name = association_proxy("info", "name")
@@ -32,4 +32,4 @@
properties={
"ID" : synonym("unitID"),
"name": synonym("unitName")
})
})
@@ -7,26 +7,25 @@


def upgrade(saveddata_engine):

# 1 = created only
# 2 = created and modified
tables = {
"boosters": 2,
"cargo": 2,
"characters": 2,
"crest": 1,
"damagePatterns": 2,
"drones": 2,
"fighters": 2,
"fits": 2,
"projectedFits": 2,
"commandFits": 2,
"implants": 2,
"implantSets": 2,
"modules": 2,
"overrides": 2,
"boosters" : 2,
"cargo" : 2,
"characters" : 2,
"crest" : 1,
"damagePatterns" : 2,
"drones" : 2,
"fighters" : 2,
"fits" : 2,
"projectedFits" : 2,
"commandFits" : 2,
"implants" : 2,
"implantSets" : 2,
"modules" : 2,
"overrides" : 2,
"characterSkills": 2,
"targetResists": 2
"targetResists" : 2
}

for table in tables.keys():
@@ -26,12 +26,12 @@
from eos.saveddata.booster import Booster

boosters_table = Table("boosters", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("itemID", Integer),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False),
Column("active", Boolean),
Column("created", DateTime, nullable=True, default=func.now()),
Column("modified", DateTime, nullable=True, onupdate=func.now()),
Column("ID", Integer, primary_key=True),
Column("itemID", Integer),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False),
Column("active", Boolean),
Column("created", DateTime, nullable=True, default=func.now()),
Column("modified", DateTime, nullable=True, onupdate=func.now()),
)

# Legacy booster side effect code, should disable but a mapper relies on it.
@@ -24,7 +24,6 @@
from eos.db import saveddata_meta
from eos.saveddata.character import Skill


skills_table = Table("characterSkills", saveddata_meta,
Column("characterID", ForeignKey("characters.ID"), primary_key=True, index=True),
Column("itemID", Integer, primary_key=True),
@@ -33,7 +33,7 @@ def handler(fit, module, context):
# pyfalog.debug("Damage Adjusted for Armor Resists: %f/%f/%f/%f", baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3])

resistanceShiftAmount = module.getModifiedItemAttr(
'resistanceShiftAmount') / 100 # The attribute is in percent and we want a fraction
'resistanceShiftAmount') / 100 # The attribute is in percent and we want a fraction
RAHResistance = [
module.getModifiedItemAttr('armorEmDamageResonance'),
module.getModifiedItemAttr('armorThermalDamageResonance'),
@@ -90,9 +90,9 @@ def handler(fit, module, context):
for i, val in enumerate(cycleList):
tolerance = 1e-06
if abs(RAHResistance[0] - val[0]) <= tolerance and \
abs(RAHResistance[1] - val[1]) <= tolerance and \
abs(RAHResistance[2] - val[2]) <= tolerance and \
abs(RAHResistance[3] - val[3]) <= tolerance:
abs(RAHResistance[1] - val[1]) <= tolerance and \
abs(RAHResistance[2] - val[2]) <= tolerance and \
abs(RAHResistance[3] - val[3]) <= tolerance:
loopStart = i
# pyfalog.debug("Loop found: %d-%d", loopStart, num)
break
@@ -103,7 +103,7 @@ def handler(fit, module, context):

if loopStart < 0:
pyfalog.error("Reactive Armor Hardener failed to find equilibrium. Damage profile after armor: {0}/{1}/{2}/{3}",
baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3])
baseDamageTaken[0], baseDamageTaken[1], baseDamageTaken[2], baseDamageTaken[3])

# Average the profiles in the RAH loop, or the last 20 if it didn't find a loop.
loopCycles = cycleList[loopStart:]
@@ -8,7 +8,7 @@

def handler(fit, implant, context):
fit.appliedImplants.filteredItemMultiply(
lambda implant: "signatureRadiusBonus" in implant.itemModifiedAttributes and
"implantSetAngel" in implant.itemModifiedAttributes,
"signatureRadiusBonus",
implant.getModifiedItemAttr("implantSetAngel"))
lambda implant: "signatureRadiusBonus" in implant.itemModifiedAttributes and
"implantSetAngel" in implant.itemModifiedAttributes,
"signatureRadiusBonus",
implant.getModifiedItemAttr("implantSetAngel"))
@@ -8,5 +8,5 @@

def handler(fit, booster, context):
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Capital Repair Systems"),
"armorDamageAmount", booster.getModifiedItemAttr("armorDamageAmountBonus"))
lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Capital Repair Systems"),
"armorDamageAmount", booster.getModifiedItemAttr("armorDamageAmountBonus"))
@@ -7,5 +7,5 @@

def handler(fit, ship, context):
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill("Light Missiles") or mod.charge.requiresSkill("Rockets"),
"kineticDamage", ship.getModifiedItemAttr("eliteBonusInterdictors1"), skill="Interdictors")
lambda mod: mod.charge.requiresSkill("Light Missiles") or mod.charge.requiresSkill("Rockets"),
"kineticDamage", ship.getModifiedItemAttr("eliteBonusInterdictors1"), skill="Interdictors")
@@ -9,5 +9,5 @@ def handler(fit, ship, context):
damageTypes = ("em", "explosive", "kinetic", "thermal")
for damageType in damageTypes:
fit.modules.filteredChargeBoost(
lambda mod: mod.charge.requiresSkill("Cruise Missiles") or mod.charge.requiresSkill("Torpedoes"),
"{0}Damage".format(damageType), ship.getModifiedItemAttr("eliteBonusViolatorsRole1"))
lambda mod: mod.charge.requiresSkill("Cruise Missiles") or mod.charge.requiresSkill("Torpedoes"),
"{0}Damage".format(damageType), ship.getModifiedItemAttr("eliteBonusViolatorsRole1"))
@@ -9,7 +9,7 @@

def handler(fit, src, context):
if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or
hasattr(src, "amountActive")):
hasattr(src, "amountActive")):
amount = src.getModifiedItemAttr("energyNeutralizerAmount")
time = src.cycleTime

@@ -9,7 +9,7 @@

def handler(fit, src, context):
if "projected" in context and ((hasattr(src, "state") and src.state >= State.ACTIVE) or
hasattr(src, "amountActive")):
hasattr(src, "amountActive")):
amount = src.getModifiedItemAttr("energyNeutralizerAmount")
time = src.getModifiedItemAttr("energyNeutralizerDuration")

@@ -34,13 +34,13 @@ def handler(fit, module, context):

# Tanking
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Capital Repair Systems") or mod.item.requiresSkill("Repair Systems"),
"armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus"),
stackingPenalties=True)
lambda mod: mod.item.requiresSkill("Capital Repair Systems") or mod.item.requiresSkill("Repair Systems"),
"armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus"),
stackingPenalties=True)
fit.modules.filteredItemBoost(
lambda mod: mod.item.requiresSkill("Capital Shield Operation") or mod.item.requiresSkill("Shield Operation"),
"shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"),
stackingPenalties=True)
lambda mod: mod.item.requiresSkill("Capital Shield Operation") or mod.item.requiresSkill("Shield Operation"),
"shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"),
stackingPenalties=True)

# Speed penalty
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"))
@@ -16,5 +16,5 @@
def handler(fit, container, context):
level = container.level if "skill" in context else 1
fit.modules.filteredItemIncrease(
lambda mod: (mod.item.requiresSkill("Hacking") or mod.item.requiresSkill("Archaeology")),
"virusStrength", container.getModifiedItemAttr("virusStrengthBonus") * level)
lambda mod: (mod.item.requiresSkill("Hacking") or mod.item.requiresSkill("Archaeology")),
"virusStrength", container.getModifiedItemAttr("virusStrengthBonus") * level)
@@ -7,8 +7,8 @@

def handler(fit, module, context):
fit.ship.multiplyItemAttr(
"agility",
1 / module.getModifiedItemAttr("modeAgilityPostDiv"),
stackingPenalties=True,
penaltyGroup="postDiv"
"agility",
1 / module.getModifiedItemAttr("modeAgilityPostDiv"),
stackingPenalties=True,
penaltyGroup="postDiv"
)
@@ -7,7 +7,7 @@

def handler(fit, module, context):
fit.modules.filteredItemMultiply(
lambda mod: mod.item.requiresSkill("Repair Systems"),
"duration",
1 / module.getModifiedItemAttr("modeArmorRepDurationPostDiv")
lambda mod: mod.item.requiresSkill("Repair Systems"),
"duration",
1 / module.getModifiedItemAttr("modeArmorRepDurationPostDiv")
)
@@ -13,8 +13,8 @@ def handler(fit, module, context):
("Thermic", "Thermal")
):
fit.ship.multiplyItemAttr(
"armor{0}DamageResonance".format(tgtResType),
1 / module.getModifiedItemAttr("mode{0}ResistancePostDiv".format(srcResType)),
stackingPenalties=True,
penaltyGroup="postDiv"
"armor{0}DamageResonance".format(tgtResType),
1 / module.getModifiedItemAttr("mode{0}ResistancePostDiv".format(srcResType)),
stackingPenalties=True,
penaltyGroup="postDiv"
)
@@ -13,6 +13,6 @@ def handler(fit, module, context):
("Thermic", "thermal")
):
fit.ship.multiplyItemAttr(
"{0}DamageResonance".format(tgtResType),
1 / module.getModifiedItemAttr("mode{0}ResistancePostDiv".format(srcResType))
"{0}DamageResonance".format(tgtResType),
1 / module.getModifiedItemAttr("mode{0}ResistancePostDiv".format(srcResType))
)
@@ -8,9 +8,9 @@

def handler(fit, module, context):
fit.modules.filteredItemMultiply(
lambda mod: mod.item.requiresSkill("High Speed Maneuvering") or mod.item.requiresSkill("Afterburner"),
"speedFactor",
1 / module.getModifiedItemAttr("modeVelocityPostDiv"),
stackingPenalties=True,
penaltyGroup="postDiv"
lambda mod: mod.item.requiresSkill("High Speed Maneuvering") or mod.item.requiresSkill("Afterburner"),
"speedFactor",
1 / module.getModifiedItemAttr("modeVelocityPostDiv"),
stackingPenalties=True,
penaltyGroup="postDiv"
)
@@ -7,9 +7,9 @@

def handler(fit, module, context):
fit.modules.filteredItemMultiply(
lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
"speedFactor",
1 / module.getModifiedItemAttr("modeMWDVelocityPostDiv"),
stackingPenalties=True,
penaltyGroup="postDiv"
lambda mod: mod.item.requiresSkill("High Speed Maneuvering"),
"speedFactor",
1 / module.getModifiedItemAttr("modeMWDVelocityPostDiv"),
stackingPenalties=True,
penaltyGroup="postDiv"
)

0 comments on commit ddb4037

Please sign in to comment.
You can’t perform that action at this time.