Compare commits

..

32 Commits

Author SHA1 Message Date
DarkPhoenix
bca8ba3114 Bump version 2020-07-28 15:58:15 +03:00
DarkPhoenix
174ac97682 Implement new CS effects 2020-07-28 15:57:55 +03:00
DarkPhoenix
2d9e873d42 Update staticdata to 1777281 2020-07-28 15:21:08 +03:00
DarkPhoenix
33377357f6 Change dampener definition to include named variations 2020-07-26 10:36:55 +03:00
DarkPhoenix
3ee0ee7e40 Fix drone sorting in projected view 2020-07-19 23:31:00 +03:00
DarkPhoenix
52063beea9 BCS affect defender missiles now 2020-07-16 00:40:04 +03:00
DarkPhoenix
03a55d94e9 Bump version 2020-07-14 20:29:47 +03:00
DarkPhoenix
db256f57d1 Adjust ANP jargon entries 2020-07-14 20:29:27 +03:00
DarkPhoenix
8de6d78be0 Update effect docstrings 2020-07-14 20:25:45 +03:00
DarkPhoenix
902a00d37d Add conversions 2020-07-14 20:24:42 +03:00
DarkPhoenix
523cb1467e Merge branch 'issue_2205' 2020-07-14 20:21:23 +03:00
DarkPhoenix
f75de70d79 Update staticdata to 1769230 2020-07-14 20:00:23 +03:00
DarkPhoenix
4b635f4d21 Remove www to make dropdown shorter on gtk 2020-07-14 17:31:19 +03:00
DarkPhoenix
63632e09b3 Group market sources up to avoid cross-server price data confusion 2020-07-14 17:25:30 +03:00
Ryan Holmes
df78eb5781 Merge pull request #2214 from copyliu/cevemarket
add market source ceve-market
2020-06-29 20:07:44 -04:00
Copy Liu
c1a5828d6b add market source ceve-market 2020-06-29 20:58:46 +08:00
blitzmann
5377210b89 Merge branch 'master' of https://github.com/pyfa-org/Pyfa 2020-06-26 23:30:51 -04:00
blitzmann
1936255f2c Merge branch 'issue2209' 2020-06-26 23:30:40 -04:00
blitzmann
b3e5763cfc Fix for #2209 - Flip the None check to happen first instead of second, otherwise if Notes is None then the first check will fail due to trying to len(None) 2020-06-26 23:30:15 -04:00
DarkPhoenix
7442f315c9 Do not activate scanners by default 2020-06-26 21:30:43 +03:00
blitzmann
433c9555bf Removed the util function - this would actually break older migrations if we added things that didn't exist in future iterations. Each migration should be self-contained 2020-06-24 15:18:43 -04:00
blitzmann
d1345fc71e Fixes #2205 - runs conversions on modules.baseItemID since the creation of baseItemID. Also, centralized the function to convert modules so that in case we ever add other things that need to be converted, they are all in one spot. 2020-06-24 15:09:51 -04:00
DarkPhoenix
31cae0e54b Bump version 2020-06-18 17:28:02 +03:00
DarkPhoenix
b2cc3ae600 Update static data to 1751741 2020-06-18 13:52:46 +03:00
DarkPhoenix
62d1d6a06d Avoid crash when nothing is selected 2020-06-18 06:04:23 +03:00
DarkPhoenix
83fa567321 Pass primitives around instead of SQL Alchemy objects 2020-06-18 05:33:12 +03:00
DarkPhoenix
9b315b5870 Fix a few mistypes 2020-06-17 21:53:24 +03:00
DarkPhoenix
3094fd32fc Add destructible beacons to projected effects 2020-06-17 17:07:34 +03:00
DarkPhoenix
c3f1824a84 Rename charge export button 2020-06-16 21:06:42 +03:00
DarkPhoenix
b558ae3810 Add an option not to export charges to ESI 2020-06-15 23:38:07 +03:00
DarkPhoenix
c38f05902a Add alternate redo shortcut 2020-06-15 17:20:20 +03:00
DarkPhoenix
181e1e1e30 Make scanners active and expose data to misc column 2020-06-15 16:37:52 +03:00
38 changed files with 9308 additions and 3669 deletions

View File

@@ -33,7 +33,7 @@ DB_PATH = os.path.join(ROOT_DIR, 'eve.db')
JSON_DIR = os.path.join(ROOT_DIR, 'staticdata')
if ROOT_DIR not in sys.path:
sys.path.insert(0, ROOT_DIR)
GAMEDATA_SCHEMA_VERSION = 3
GAMEDATA_SCHEMA_VERSION = 4
def db_needs_update():
@@ -122,7 +122,8 @@ def update_db():
if (
# Apparently people really want Civilian modules available
(row['typeName'].startswith('Civilian') and "Shuttle" not in row['typeName']) or
row['typeName'] == 'Capsule'
row['typeName'] == 'Capsule' or
row['groupID'] == 4033 # destructible effect beacons
):
row['published'] = True
# Nearly useless and clutter search results too much
@@ -142,8 +143,7 @@ def update_db():
1882,
1975,
1971,
# the "container" for the abyssal environments
1983)
1983) # the "container" for the abyssal environments
):
newData.append(row)

View File

@@ -0,0 +1,18 @@
"""
Migration 40
Imports all item conversions since Migration 28 and runs them against module.baseItemID. This column seems to have been
forgotten about since it's been added.
"""
from .upgrade36 import CONVERSIONS as u36
from .upgrade37 import CONVERSIONS as u37
from .upgrade38 import CONVERSIONS as u38
from .upgrade39 import CONVERSIONS as u39
def upgrade(saveddata_engine):
for conversions in [u36, u37, u38, u39]:
for replacement_item, list in conversions.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "baseItemID" = ? WHERE "baseItemID" = ?',
(replacement_item, retired_item))

View File

@@ -0,0 +1,50 @@
"""
Migration 41
- Resistance plating tiericide
"""
CONVERSIONS = {
16345: ( # Upgraded Layered Coating I
16347, # Limited Layered Plating I
16349, # 'Scarab' Layered Plating I
16351, # 'Grail' Layered Plating I
),
16305: ( # Upgraded Multispectrum Coating I
16307, # Limited Adaptive Nano Plating I
16309, # 'Collateral' Adaptive Nano Plating I
16311, # 'Refuge' Adaptive Nano Plating I
),
16329: ( # Upgraded EM Coating I
16331, # Limited EM Plating I
16333, # 'Contour' EM Plating I
16335, # 'Spiegel' EM Plating I
),
16321: ( # Upgraded Explosive Coating I
16323, # Limited Explosive Plating I
16325, # Experimental Explosive Plating I
16319, # 'Aegis' Explosive Plating I
),
16313: ( # Upgraded Kinetic Coating I
16315, # Limited Kinetic Plating I
16317, # Experimental Kinetic Plating I
16327, # 'Element' Kinetic Plating I
),
16337: ( # Upgraded Thermal Coating I
16339, # Limited Thermal Plating I
16341, # Experimental Thermal Plating I
16343, # Prototype Thermal Plating I
)
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.items():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "modules" SET "baseItemID" = ? WHERE "baseItemID" = ?',
(replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?',
(replacement_item, retired_item))

View File

@@ -60,6 +60,7 @@ class Effect10(BaseEffect):
targetAttack
Used by:
Celestials from group: Destructible Effect Beacon (6 of 6)
Drones from group: Combat Drone (75 of 75)
Modules from group: Energy Weapon (212 of 214)
"""
@@ -218,6 +219,28 @@ class Effect39(BaseEffect):
fit.ship.increaseItemAttr('warpScrambleStatus', module.getModifiedItemAttr('warpScrambleStrength'), **kwargs)
class Effect46(BaseEffect):
"""
shipScan
Used by:
Modules from group: Ship Scanner (3 of 3)
"""
type = 'active'
class Effect47(BaseEffect):
"""
cargoScan
Used by:
Modules from group: Cargo Scanner (4 of 4)
"""
type = 'active'
class Effect48(BaseEffect):
"""
powerBooster
@@ -417,7 +440,7 @@ class Effect63(BaseEffect):
armorHPMultiply
Used by:
Modules from group: Armor Coating (202 of 202)
Modules from group: Armor Coating (184 of 184)
Modules from group: Armor Plating Energized (187 of 187)
"""
@@ -447,6 +470,17 @@ class Effect67(BaseEffect):
module.reloadTime = 1000
class Effect81(BaseEffect):
"""
surveyScan
Used by:
Modules from group: Survey Scanner (3 of 3)
"""
type = 'active'
class Effect89(BaseEffect):
"""
projectileWeaponSpeedMultiply
@@ -2301,7 +2335,8 @@ class Effect763(BaseEffect):
@staticmethod
def handler(fit, container, context, projectionRange, **kwargs):
for dmgType in ('em', 'kinetic', 'explosive', 'thermal'):
fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation'),
fit.modules.filteredChargeMultiply(lambda mod: mod.charge.requiresSkill('Missile Launcher Operation') or
mod.charge.requiresSkill('Defender Missiles'),
'%sDamage' % dmgType,
container.getModifiedItemAttr('missileDamageMultiplierBonus'),
stackingPenalties=True, **kwargs)
@@ -6043,7 +6078,7 @@ class Effect2041(BaseEffect):
modifyArmorResonancePostPercent
Used by:
Modules from group: Armor Coating (202 of 202)
Modules from group: Armor Coating (184 of 184)
Modules from group: Armor Plating Energized (187 of 187)
"""
@@ -6505,23 +6540,6 @@ class Effect2160(BaseEffect):
skill='Command Ships', **kwargs)
class Effect2161(BaseEffect):
"""
eliteBonusCommandShipHybridOptimalCS1
Used by:
Ship: Vulture
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
'maxRange', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
skill='Command Ships', **kwargs)
class Effect2179(BaseEffect):
"""
shipBonusDroneHitpointsGC2
@@ -11760,23 +11778,6 @@ class Effect3766(BaseEffect):
skill='Interceptors', **kwargs)
class Effect3767(BaseEffect):
"""
eliteBonusCommandShipsHeavyMissileExplosionVelocityCS2
Used by:
Ship: Claymore
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles'),
'aoeVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
skill='Command Ships', **kwargs)
class Effect3771(BaseEffect):
"""
armorHPBonusAddPassive
@@ -12386,6 +12387,8 @@ class Effect3992(BaseEffect):
Used by:
Celestials named like: Class Pulsar Effects (6 of 6)
Celestial: Republic Stellar Observatory
Celestial: State Stellar Observatory
"""
runTime = 'early'
@@ -13179,6 +13182,7 @@ class Effect4088(BaseEffect):
Used by:
Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
Celestial: Dazh Liminality Locus
"""
runTime = 'early'
@@ -13197,6 +13201,7 @@ class Effect4089(BaseEffect):
Used by:
Celestials named like: Class Cataclysmic Variable Effects (6 of 6)
Celestial: Dazh Liminality Locus
"""
runTime = 'early'
@@ -19546,9 +19551,9 @@ class Effect5342(BaseEffect):
shipArmorRepairing1GBC2
Used by:
Variations of ship: Myrmidon (2 of 2)
Ship: Astarte
Ship: Brutix
Ship: Myrmidon
"""
type = 'passive'
@@ -19631,7 +19636,7 @@ class Effect5351(BaseEffect):
shipShieldBoost1MBC1
Used by:
Variations of ship: Cyclone (2 of 2)
Ship: Cyclone
Ship: Sleipnir
"""
@@ -20784,23 +20789,6 @@ class Effect5497(BaseEffect):
'speed', ship.getModifiedItemAttr('eliteBonusCommandShips1'), skill='Command Ships', **kwargs)
class Effect5498(BaseEffect):
"""
eliteBonusCommandShipsHeavyAssaultMissileExplosionVelocityCS2
Used by:
Ship: Claymore
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Assault Missiles'),
'aoeVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
skill='Command Ships', **kwargs)
class Effect5499(BaseEffect):
"""
eliteBonusCommandShipsHeavyAssaultMissileExplosionRadiusCS2
@@ -20852,26 +20840,9 @@ class Effect5501(BaseEffect):
skill='Command Ships', **kwargs)
class Effect5502(BaseEffect):
"""
eliteBonusCommandShipMediumHybridTrackingCS1
Used by:
Ship: Eos
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Medium Hybrid Turret'),
'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
skill='Command Ships', **kwargs)
class Effect5503(BaseEffect):
"""
eliteBonusCommandShipHeavyDroneTrackingCS2
eliteBonusCommandShipDroneTrackingCS2
Used by:
Ship: Eos
@@ -20881,28 +20852,11 @@ class Effect5503(BaseEffect):
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
'trackingSpeed', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
skill='Command Ships', **kwargs)
class Effect5504(BaseEffect):
"""
eliteBonusCommandShipHeavyDroneVelocityCS2
Used by:
Ship: Eos
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Heavy Drone Operation'),
'maxVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
skill='Command Ships', **kwargs)
class Effect5505(BaseEffect):
"""
eliteBonusCommandShipMediumHybridRoFCS1
@@ -23111,6 +23065,8 @@ class Effect5913(BaseEffect):
Used by:
Celestials named like: Class Wolf Rayet Effects (6 of 6)
Celestial: Federal Stellar Observatory
Celestial: Imperial Stellar Observatory
"""
runTime = 'early'
@@ -23127,6 +23083,7 @@ class Effect5914(BaseEffect):
Used by:
Celestials named like: Class Pulsar Effects (6 of 6)
Celestial: Imperial Stellar Observatory
"""
runTime = 'early'
@@ -23146,6 +23103,7 @@ class Effect5915(BaseEffect):
Used by:
Celestials named like: Class Pulsar Effects (6 of 6)
Celestial: Imperial Stellar Observatory
"""
runTime = 'early'
@@ -23273,6 +23231,7 @@ class Effect5922(BaseEffect):
Used by:
Celestials named like: Class Black Hole Effects (6 of 6)
Celestial: Republic Stellar Observatory
"""
runTime = 'early'
@@ -32024,7 +31983,7 @@ class Effect6783(BaseEffect):
Used by:
Ships from group: Carrier (4 of 4)
Ships from group: Combat Battlecruiser (14 of 14)
Ships from group: Command Ship (8 of 8)
Ships from group: Command Ship (4 of 8)
Ships from group: Force Auxiliary (6 of 6)
Ships from group: Supercarrier (6 of 6)
Ships from group: Titan (7 of 7)
@@ -35805,6 +35764,7 @@ class Effect7193(BaseEffect):
systemMiningCycleTimeBonus
Used by:
Celestials named like: Stellar Observatory (4 of 4)
Celestials named like: Triglavian Invasion System Effects (3 of 3)
"""
@@ -35813,8 +35773,8 @@ class Effect7193(BaseEffect):
@staticmethod
def handler(fit, beacon, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'),
'duration', beacon.getModifiedItemAttr('miningDurationMultiplier'), **kwargs)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Mining'), 'duration',
beacon.getModifiedItemAttr('miningDurationMultiplier'), **kwargs)
class Effect7202(BaseEffect):
@@ -36068,7 +36028,7 @@ class Effect7232(BaseEffect):
modifyDamageMultiplierBonusMax
Used by:
Implants named like: Grade Mimesis (15 of 18)
Implants named like: grade Mimesis (15 of 18)
"""
type = 'passive'
@@ -36085,7 +36045,7 @@ class Effect7233(BaseEffect):
modifyDamageMultiplierBonusPerCycle
Used by:
Implants named like: Grade Mimesis (15 of 18)
Implants named like: grade Mimesis (15 of 18)
"""
type = 'passive'
@@ -36102,7 +36062,7 @@ class Effect7234(BaseEffect):
implantSetMimesis
Used by:
Implants named like: Grade Mimesis (18 of 18)
Implants named like: grade Mimesis (18 of 18)
"""
runTime = 'early'
@@ -36118,6 +36078,23 @@ class Effect7234(BaseEffect):
implant.getModifiedItemAttr('setBonusMimesis'), **kwargs)
class Effect7237(BaseEffect):
"""
systemWarpSpeed
Used by:
Celestial: Dazh Liminality Locus
"""
runTime = 'early'
type = ('projected', 'passive')
@staticmethod
def handler(fit, beacon, context, projectionRange, **kwargs):
fit.ship.boostItemAttr('warpSpeedMultiplier', beacon.getModifiedItemAttr('warpSpeedBonus'),
stackingPenalties=True, **kwargs)
class Effect7238(BaseEffect):
"""
shipBonusDreadnoughtPC1DamageMultMax
@@ -36390,6 +36367,58 @@ class Effect8029(BaseEffect):
attr, ship.getModifiedItemAttr('shipBonusRole7'), **kwargs)
class Effect8031(BaseEffect):
"""
systemMaxTargets
Used by:
Celestial: Dazh Liminality Locus
"""
runTime = 'early'
type = ('projected', 'passive')
@staticmethod
def handler(fit, beacon, context, projectionRange, **kwargs):
fit.ship.multiplyItemAttr('maxLockedTargets', beacon.getModifiedItemAttr('maxLockedTargetsMultiplier'), **kwargs)
class Effect8032(BaseEffect):
"""
systemWarpScrambleStrengthBonus
Used by:
Celestial: Federal Stellar Observatory
"""
runTime = 'early'
type = ('projected', 'passive')
@staticmethod
def handler(fit, beacon, context, projectionRange, **kwargs):
fit.modules.filteredItemIncrease(
lambda mod: mod.item.group.name == 'Warp Scrambler',
'warpScrambleStrength', beacon.getModifiedItemAttr('warpScrambleStrengthBonus'), **kwargs)
class Effect8033(BaseEffect):
"""
systemEcmRangeMultiplier
Used by:
Celestial: State Stellar Observatory
"""
runTime = 'early'
type = ('projected', 'passive')
@staticmethod
def handler(fit, beacon, context, projectionRange, **kwargs):
fit.modules.filteredItemMultiply(
lambda mod: mod.item.group.name == 'ECM', 'maxRange',
beacon.getModifiedItemAttr('ecmRangeBonus'), stackingPenalties=True, **kwargs)
class Effect8034(BaseEffect):
"""
smallUpwellWeaponDmgBonusRequiredSkill
@@ -36734,3 +36763,90 @@ class Effect8066(BaseEffect):
def handler(fit, implant, context, projectionRange, **kwargs):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill('Vorton Projector Operation'),
'damageMultiplier', implant.getModifiedItemAttr('damageMultiplierBonus'), **kwargs)
class Effect8068(BaseEffect):
"""
shipShieldResistanceBonusMBC1
Used by:
Ship: Claymore
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
damageTypes = ('Em', 'Explosive', 'Kinetic', 'Thermal')
for damageType in damageTypes:
fit.ship.boostItemAttr(f'shield{damageType}DamageResonance', ship.getModifiedItemAttr('shipBonusMBC1'),
skill='Minmatar Battlecruiser', **kwargs)
class Effect8070(BaseEffect):
"""
eliteBonusCommandShipsHeavyHAMvelocityCS2
Used by:
Ship: Claymore
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill('Heavy Missiles') or
mod.charge.requiresSkill('Heavy Assault Missiles'),
'maxVelocity', ship.getModifiedItemAttr('eliteBonusCommandShips2'),
skill='Command Ships', **kwargs)
class Effect8071(BaseEffect):
"""
eliteBonusCommandShipDroneRangeCS1
Used by:
Ship: Eos
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill('Drones'),
'maxRange', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
skill='Command Ships', **kwargs)
class Effect8072(BaseEffect):
"""
shipArmorResistanceBonusGBC2
Used by:
Ship: Eos
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
damageTypes = ('Em', 'Explosive', 'Kinetic', 'Thermal')
for damageType in damageTypes:
fit.ship.boostItemAttr(f'armor{damageType}DamageResonance', ship.getModifiedItemAttr('shipBonusGBC2'),
skill='Gallente Battlecruiser', **kwargs)
class Effect8073(BaseEffect):
"""
eliteBonusCommandShipShieldHPCS1
Used by:
Ship: Vulture
"""
type = 'passive'
@staticmethod
def handler(fit, ship, context, projectionRange, **kwargs):
fit.ship.boostItemAttr('shieldCapacity', ship.getModifiedItemAttr('eliteBonusCommandShips1'),
skill='Command Ships', **kwargs)

View File

@@ -21,7 +21,7 @@ import datetime
import time
from copy import deepcopy
from itertools import chain
from math import log, sqrt
from math import floor, log, sqrt
from logbook import Logger
from sqlalchemy.orm import reconstructor, validates
@@ -39,6 +39,7 @@ from eos.saveddata.damagePattern import DamagePattern
from eos.saveddata.module import Module
from eos.saveddata.ship import Ship
from eos.saveddata.targetProfile import TargetProfile
from eos.utils.float import floatUnerr
from eos.utils.stats import DmgTypes, RRTypes
@@ -378,8 +379,9 @@ class Fit:
@property
def maxTargets(self):
return min(self.extraAttributes["maxTargetsLockedFromSkills"],
self.ship.getModifiedItemAttr("maxLockedTargets"))
maxTargets = min(self.extraAttributes["maxTargetsLockedFromSkills"],
self.ship.getModifiedItemAttr("maxLockedTargets"))
return floor(floatUnerr(maxTargets))
@property
def maxTargetRange(self):

View File

@@ -64,7 +64,9 @@ ProjectedSystem = {
class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
"""An instance of this class represents a module together with its charge and modified attributes"""
MINING_ATTRIBUTES = ("miningAmount",)
SYSTEM_GROUPS = ("Effect Beacon", "MassiveEnvironments", "Abyssal Hazards", "Non-Interactable Object")
SYSTEM_GROUPS = (
"Effect Beacon", "MassiveEnvironments", "Abyssal Hazards",
"Non-Interactable Object", "Destructible Effect Beacon")
def __init__(self, item, baseItem=None, mutaplasmid=None):
"""Initialize a module from the program"""
@@ -726,6 +728,9 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
return False
elif state == FittingModuleState.OVERHEATED and not self.item.isType("overheat"):
return False
# Some destructible effect beacons contain active effects, hardcap those at online state
elif state > FittingModuleState.ONLINE and self.slot == FittingSlot.SYSTEM:
return False
else:
return True
@@ -1051,7 +1056,10 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
elif click == "ctrl":
state = FittingModuleState.OFFLINE
else:
state = transitionMap[currState]
try:
state = transitionMap[currState]
except KeyError:
state = min(transitionMap)
# If passive module tries to transition into online and fails,
# put it to passive instead
if not mod.isValidState(state) and currState == FittingModuleState.ONLINE:

View File

@@ -90,8 +90,6 @@ class ProjectedView(d.Display):
self.Bind(wx.EVT_LEFT_DCLICK, self.onLeftDoubleClick)
self.Bind(wx.EVT_KEY_UP, self.kbEvent)
self.droneView = gui.builtinAdditionPanes.droneView.DroneView
self.Bind(wx.EVT_CONTEXT_MENU, self.spawnMenu)
self.SetDropTarget(ProjectedViewDrop(self.handleListDrag))
@@ -162,7 +160,7 @@ class ProjectedView(d.Display):
if item.marketGroup is None:
item = item.metaGroup.parent
return (self.droneView.DRONE_ORDER.index(item.marketGroup.name),
return (gui.builtinAdditionPanes.droneView.DRONE_ORDER.index(item.marketGroup.name),
drone.item.name)
@staticmethod

View File

@@ -1,4 +1,5 @@
import re
from collections import OrderedDict
from itertools import chain
# noinspection PyPackageRequirements
@@ -10,6 +11,28 @@ from gui.contextMenu import ContextMenuUnconditional
from service.market import Market
class Group:
def __init__(self):
self.groups = OrderedDict()
self.items = []
def sort(self):
self.groups = OrderedDict((k, self.groups[k]) for k in sorted(self.groups))
for group in self.groups.values():
group.sort()
self.items.sort(key=lambda e: e.shortName)
class Entry:
def __init__(self, itemID, name, shortName):
self.itemID = itemID
self.name = name
self.shortName = shortName
class AddEnvironmentEffect(ContextMenuUnconditional):
# CCP doesn't currently provide a mapping between the general Environment, and the specific environment effect
@@ -32,104 +55,71 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
def getText(self, callingWindow, itmContext):
return "Add Environmental Effect"
def _addGroup(self, parentMenu, name):
id = ContextMenuUnconditional.nextID()
menuItem = wx.MenuItem(parentMenu, id, name)
parentMenu.Bind(wx.EVT_MENU, self.handleSelection, menuItem)
return menuItem
def _addEffect(self, parentMenu, typeID, name):
id = ContextMenuUnconditional.nextID()
self.idmap[id] = typeID
menuItem = wx.MenuItem(parentMenu, id, name)
parentMenu.Bind(wx.EVT_MENU, self.handleSelection, menuItem)
return menuItem
def getSubMenu(self, callingWindow, context, rootMenu, i, pitem):
msw = True if "wxMSW" in wx.PlatformInfo else False
# Wormholes
self.idmap = {}
sub = wx.Menu()
data = self.getData()
msw = "wxMSW" in wx.PlatformInfo
wormhole_item = wx.MenuItem(sub, wx.ID_ANY, "Wormhole")
wormhole_menu = wx.Menu()
wormhole_item.SetSubMenu(wormhole_menu)
sub.Append(wormhole_item)
grouped_data, flat_data = self.getEffectBeacons()
self.buildMenu(grouped_data, flat_data, wormhole_menu, rootMenu, msw)
# Incursions
grouped_data, flat_data = self.getEffectBeacons(incursions=True)
self.buildMenu(grouped_data, flat_data, sub, rootMenu, msw)
# Abyssal Weather
abyssal_item = wx.MenuItem(sub, wx.ID_ANY, "Abyssal Weather")
abyssal_menu = wx.Menu()
abyssal_item.SetSubMenu(abyssal_menu)
sub.Append(abyssal_item)
grouped_data, flat_data = self.getAbyssalWeather()
self.buildMenu(grouped_data, flat_data, abyssal_menu, rootMenu, msw)
# Localized Weather
local_item = wx.MenuItem(sub, wx.ID_ANY, "Localized")
local_menu = wx.Menu()
local_item.SetSubMenu(local_menu)
sub.Append(local_item)
grouped_data, flat_data = self.getLocalizedEnvironments()
self.buildMenu(grouped_data, flat_data, local_menu, rootMenu, msw)
def makeMenu(data, parentMenu):
menu = wx.Menu()
for group_name in data.groups:
menuItem = self._addGroup(rootMenu if msw else parentMenu, group_name)
subMenu = makeMenu(data.groups[group_name], menu)
menuItem.SetSubMenu(subMenu)
menu.Append(menuItem)
for entry in data.items:
menuItem = self._addEffect(rootMenu if msw else parentMenu, entry.itemID, entry.shortName)
menu.Append(menuItem)
menu.Bind(wx.EVT_MENU, self.handleSelection)
return menu
sub = makeMenu(data, rootMenu)
return sub
def handleSelection(self, event):
# Skip events ids that aren't mapped
swObj, swName = self.idmap.get(event.Id, (False, False))
if not swObj and not swName:
swObj = self.idmap.get(event.Id, False)
if not swObj:
event.Skip()
return
fitID = self.mainFrame.getActiveFit()
self.mainFrame.command.Submit(cmd.GuiAddProjectedModuleCommand(fitID, swObj.ID))
self.mainFrame.command.Submit(cmd.GuiAddProjectedModuleCommand(fitID, swObj))
def buildMenu(self, grouped_data, flat_data, local_menu, rootMenu, msw):
def getData(self):
data = Group()
data.groups['Wormhole'] = self.getEffectBeacons(
'Black Hole', 'Cataclysmic Variable', 'Magnetar',
'Pulsar', 'Red Giant', 'Wolf Rayet')
data.groups['Sansha Incursion'] = self.getEffectBeacons('Sansha Incursion')
data.groups['Triglavian Invasion'] = self.getEffectBeacons('Triglavian Invasion')
data.groups['Triglavian Invasion'].groups['Destructible Beacons'] = self.getDestructibleBeacons()
data.groups['Abyssal Weather'] = self.getAbyssalWeather()
return data
def processFlat(data, root, sub):
for swData in sorted(data, key=lambda tpl: tpl[2]):
wxid = ContextMenuUnconditional.nextID()
swObj, swName, swClass = swData
self.idmap[wxid] = (swObj, swName)
subItem = wx.MenuItem(sub, wxid, swClass)
if msw:
root.Bind(wx.EVT_MENU, self.handleSelection, subItem)
else:
sub.Bind(wx.EVT_MENU, self.handleSelection, subItem)
sub.Append(subItem)
for swType in sorted(grouped_data):
subItem = wx.MenuItem(local_menu, wx.ID_ANY, swType)
grandSub = wx.Menu()
subItem.SetSubMenu(grandSub)
local_menu.Append(subItem)
processFlat(grouped_data[swType], rootMenu, grandSub)
processFlat(flat_data, rootMenu, local_menu)
def getEffectBeacons(self, incursions=False):
def getEffectBeacons(self, *groups):
"""
Get dictionary with wormhole system-wide effects
"""
compacted = len(groups) <= 1
sMkt = Market.getInstance()
# todo: rework this
# Container for system-wide effects
grouped = {}
# Expressions for matching when detecting effects we're looking for
if incursions:
validgroups = ("Sansha Incursion",
"Triglavian Invasion")
else:
validgroups = ("Black Hole",
"Cataclysmic Variable",
"Magnetar",
"Pulsar",
"Red Giant",
"Wolf Rayet")
data = Group()
# Stuff we don't want to see in names
garbages = ("System Effects", "Effects")
@@ -140,7 +130,7 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
# Cycle through them
for beacon in sMkt.getItemsByGroup(grp):
# Check if it belongs to any valid group
for group in validgroups:
for group in groups:
# Check beginning of the name only
if re.search(group, beacon.name):
# Get full beacon name
@@ -159,64 +149,65 @@ class AddEnvironmentEffect(ContextMenuUnconditional):
groupname = re.sub(garbage, "", groupname)
groupname = re.sub(" {2,}", " ", groupname).strip()
# Add stuff to dictionary
if groupname not in grouped:
grouped[groupname] = set()
grouped[groupname].add((beacon, beaconname, shortname))
if compacted:
container = data.items
else:
container = data.groups.setdefault(groupname, Group()).items
container.append(Entry(beacon.ID, beaconname, shortname))
# Break loop on 1st result
break
return grouped, ()
data.sort()
return data
def getAbyssalWeather(self):
sMkt = Market.getInstance()
data = Group()
environments = {x.ID: x for x in sMkt.getGroup("Abyssal Environment").items}
items = chain(sMkt.getGroup("MassiveEnvironments").items, sMkt.getGroup("Non-Interactable Object").items)
grouped = {}
flat = set()
items = chain(
sMkt.getGroup("MassiveEnvironments").items,
sMkt.getGroup("Non-Interactable Object").items)
for beacon in items:
if not beacon.isType('projected'):
continue
type = self.__class__.abyssal_mapping.get(beacon.name[0:-2], None)
type = environments.get(type, None)
if type is None:
continue
if type.name not in grouped:
grouped[type.name] = set()
subdata = data.groups.setdefault(type.name, Group())
display_name = "{} {}".format(type.name, beacon.name[-1:])
grouped[type.name].add((beacon, display_name, display_name))
subdata.items.append(Entry(beacon.ID, display_name, display_name))
data.sort()
# Localized abyssal hazards
items = sMkt.getGroup("Abyssal Hazards").items
if items:
subdata = data.groups.setdefault('Localized', Group())
for beacon in sMkt.getGroup("Abyssal Hazards").items:
if not beacon.isType('projected'):
continue
# Localized effects, currently, have a name like "(size) (type) Cloud"
# Until this inevitably changes, do a simple split
name_parts = beacon.name.split(" ")
key = name_parts[1].strip()
subsubdata = subdata.groups.setdefault(key, Group())
subsubdata.items.append(Entry(beacon.ID, beacon.name, beacon.name))
subdata.sort()
# PVP weather
flat.add((sMkt.getItem(49766), 'PvP Weather', 'PvP Weather'))
data.items.append(Entry(49766, 'PvP Weather', 'PvP Weather'))
return grouped, flat
return data
def getLocalizedEnvironments(self):
def getDestructibleBeacons(self):
data = Group()
sMkt = Market.getInstance()
grp = sMkt.getGroup("Abyssal Hazards")
grouped = dict()
for beacon in grp.items:
if not beacon.isType('projected'):
for item in sMkt.getItemsByGroup(sMkt.getGroup('Destructible Effect Beacon')):
if not item.isType('projected'):
continue
# Localized effects, currently, have a name like "(size) (type) Cloud"
# Until this inevitably changes, do a simple split
name_parts = beacon.name.split(" ")
key = name_parts[1].strip()
if key not in grouped:
grouped[key] = set()
grouped[key].add((beacon, beacon.name, beacon.name))
return grouped, ()
data.items.append(Entry(item.ID, item.name, item.name))
data.sort()
return data
AddEnvironmentEffect.register()

View File

@@ -691,6 +691,13 @@ class Miscellanea(ViewColumn):
formatAmount(itemArmorResistanceShiftHardenerExp, 3, 0, 3),
)
return text, tooltip
elif itemGroup in ("Cargo Scanner", "Ship Scanner", "Survey Scanner"):
duration = stuff.getModifiedItemAttr("duration")
if not duration:
return "", None
text = "{}s".format(formatAmount(duration / 1000, 3, 0, 0))
tooltip = "Scan duration"
return text, tooltip
elif stuff.charge is not None:
chargeGroup = stuff.charge.group.name
if chargeGroup.endswith("Rocket") or chargeGroup.endswith("Missile") or chargeGroup.endswith("Torpedo"):

View File

@@ -312,6 +312,7 @@ class CharacterEditor(AuxiliaryFrame):
class SkillTreeView(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.TAB_TRAVERSAL)
@@ -611,12 +612,16 @@ class SkillTreeView(wx.Panel):
def spawnMenu(self, event):
item = event.GetItem()
itemData = self.skillTreeListCtrl.GetItemData(item)
if itemData is None:
return
self.skillTreeListCtrl.Select(item)
thing = self.skillTreeListCtrl.GetFirstChild(item).IsOk()
if thing:
return
id = self.skillTreeListCtrl.GetItemData(item)[1]
id = itemData[1]
eveItem = Market.getInstance().getItem(id)
srcContext = "skillItem"

View File

@@ -177,7 +177,7 @@ class CopySelectDialog(wx.Dialog):
def exportEsi(self, options, callback):
fit = getFit(self.mainFrame.getActiveFit())
Port.exportESI(fit, callback)
Port.exportESI(fit, True, callback)
def exportXml(self, options, callback):
fit = getFit(self.mainFrame.getActiveFit())

View File

@@ -18,6 +18,7 @@ from service.esiAccess import APIException
from service.fit import Fit
from service.port import Port
from service.port.esi import ESIExportException
from service.settings import EsiSettings
pyfalog = Logger(__name__)
@@ -207,7 +208,7 @@ class ExportToEve(AuxiliaryFrame):
def __init__(self, parent):
super().__init__(
parent, id=wx.ID_ANY, title="Export fit to EVE", pos=wx.DefaultPosition,
size=wx.Size(400, 120) if "wxGTK" in wx.PlatformInfo else wx.Size(350, 100), resizeable=True)
size=wx.Size(400, 140) if "wxGTK" in wx.PlatformInfo else wx.Size(350, 115), resizeable=True)
self.mainFrame = parent
@@ -224,6 +225,11 @@ class ExportToEve(AuxiliaryFrame):
mainSizer.Add(hSizer, 0, wx.EXPAND, 5)
self.exportChargesCb = wx.CheckBox(self, wx.ID_ANY, 'Export Loaded Charges', wx.DefaultPosition, wx.DefaultSize, 0)
self.exportChargesCb.SetValue(EsiSettings.getInstance().get('exportCharges'))
self.exportChargesCb.Bind(wx.EVT_CHECKBOX, self.OnChargeExportChange)
mainSizer.Add(self.exportChargesCb, 0, 0, 5)
self.exportBtn.Bind(wx.EVT_BUTTON, self.exportFitting)
self.statusbar = wx.StatusBar(self)
@@ -239,6 +245,10 @@ class ExportToEve(AuxiliaryFrame):
self.Center(wx.BOTH)
def OnChargeExportChange(self, event):
EsiSettings.getInstance().set('exportCharges', self.exportChargesCb.GetValue())
event.Skip()
def updateCharList(self):
sEsi = Esi.getInstance()
chars = sEsi.getSsoCharacters()
@@ -274,8 +284,9 @@ class ExportToEve(AuxiliaryFrame):
sEsi = Esi.getInstance()
sFit = Fit.getInstance()
exportCharges = self.exportChargesCb.GetValue()
try:
data = sPort.exportESI(sFit.getFit(fitID))
data = sPort.exportESI(sFit.getFit(fitID), exportCharges)
except ESIExportException as e:
msg = str(e)
if not msg:

View File

@@ -324,7 +324,8 @@ def activeStateLimit(itemIdentity):
'microJumpDrive', 'microJumpPortalDrive', 'emergencyHullEnergizer',
'cynosuralGeneration', 'jumpPortalGeneration', 'jumpPortalGenerationBO',
'cloneJumpAccepting', 'cloakingWarpSafe', 'cloakingPrototype', 'cloaking',
'massEntanglerEffect5', 'electronicAttributeModifyOnline', 'targetPassively'
'massEntanglerEffect5', 'electronicAttributeModifyOnline', 'targetPassively',
'cargoScan', 'shipScan', 'surveyScan'
}.intersection(item.effects):
return FittingModuleState.ONLINE
return FittingModuleState.ACTIVE

View File

@@ -610,7 +610,9 @@ class MainFrame(wx.Frame):
(wx.ACCEL_CTRL, wx.WXK_PAGEDOWN, ctabnext),
(wx.ACCEL_CTRL, wx.WXK_PAGEUP, ctabprev),
(wx.ACCEL_CMD, wx.WXK_PAGEDOWN, ctabnext),
(wx.ACCEL_CMD, wx.WXK_PAGEUP, ctabprev)
(wx.ACCEL_CMD, wx.WXK_PAGEUP, ctabprev),
(wx.ACCEL_CMD | wx.ACCEL_SHIFT, ord("Z"), wx.ID_REDO)
]
# Ctrl/Cmd+# for addition pane selection

View File

@@ -16,94 +16,226 @@ rename_phrase = " renamed to "
conversion_phrase = " converted to "
text = """
Supplemental EM Ward Amplifier converted to 'Basic' EM Shield Amplifier
Supplemental Explosive Deflection Amplifier converted to 'Basic' Explosive Shield Amplifier
Supplemental Kinetic Deflection Amplifier converted to 'Basic' Kinetic Shield Amplifier
Supplemental Thermal Dissipation Amplifier converted to 'Basic' Thermal Shield Amplifier
Basic EM Ward Amplifier renamed to 'Basic' EM Shield Amplifier
Basic Thermal Dissipation Amplifier renamed to 'Basic' Thermal Shield Amplifier
Basic Kinetic Deflection Amplifier renamed to 'Basic' Kinetic Shield Amplifier
Basic Explosive Deflection Amplifier renamed to 'Basic' Explosive Shield Amplifier
EM Ward Amplifier I renamed to EM Shield Amplifier I
Explosive Deflection Amplifier I renamed to Explosive Shield Amplifier I
Explosive Deflection Amplifier II renamed to Explosive Shield Amplifier II
Thermal Dissipation Amplifier I renamed to Thermal Shield Amplifier I
Thermal Dissipation Amplifier II renamed to Thermal Shield Amplifier II
Kinetic Deflection Amplifier I renamed to Kinetic Shield Amplifier I
Kinetic Deflection Amplifier II renamed to Kinetic Shield Amplifier II
EM Ward Amplifier II renamed to EM Shield Amplifier II
Upgraded Explosive Deflection Amplifier I renamed to Compact Explosive Shield Amplifier
Upgraded Thermal Dissipation Amplifier I renamed to Compact Thermal Shield Amplifier
Upgraded EM Ward Amplifier I renamed to Compact EM Shield Amplifier
Upgraded Kinetic Deflection Amplifier I renamed to Compact Kinetic Shield Amplifier
Domination Explosive Deflection Amplifier renamed to Domination Explosive Shield Amplifier
Dread Guristas Explosive Deflection Amplifier renamed to Dread Guristas Explosive Shield Amplifier
Domination Thermal Dissipation Amplifier renamed to Domination Thermal Shield Amplifier
Dread Guristas Thermal Dissipation Amplifier renamed to Dread Guristas Thermal Shield Amplifier
Domination Kinetic Deflection Amplifier renamed to Domination Kinetic Shield Amplifier
Dread Guristas Kinetic Deflection Amplifier renamed to Dread Guristas Kinetic Shield Amplifier
Domination EM Ward Amplifier renamed to Domination EM Shield Amplifier
Dread Guristas EM Ward Amplifier renamed to Dread Guristas EM Shield Amplifier
Hakim's Modified Explosive Deflection Amplifier renamed to Hakim's Modified Explosive Shield Amplifier
Tobias' Modified Explosive Deflection Amplifier renamed to Tobias' Modified Explosive Shield Amplifier
Hakim's Modified Thermal Dissipation Amplifier renamed to Hakim's Modified Thermal Shield Amplifier
Tobias' Modified Thermal Dissipation Amplifier renamed to Tobias' Modified Thermal Shield Amplifier
Hakim's Modified Kinetic Deflection Amplifier renamed to Hakim's Modified Kinetic Shield Amplifier
Tobias' Modified Kinetic Deflection Amplifier renamed to Tobias' Modified Kinetic Shield Amplifier
Hakim's Modified EM Ward Amplifier renamed to Hakim's Modified EM Shield Amplifier
Tobias' Modified EM Ward Amplifier renamed to Tobias' Modified EM Shield Amplifier
Kaikka's Modified Explosive Deflection Amplifier renamed to Kaikka's Modified Explosive Shield Amplifier
Thon's Modified Explosive Deflection Amplifier renamed to Thon's Modified Explosive Shield Amplifier
Vepas' Modified Explosive Deflection Amplifier renamed to Vepas' Modified Explosive Shield Amplifier
Estamel's Modified Explosive Deflection Amplifier renamed to Estamel's Modified Explosive Shield Amplifier
Kaikka's Modified Thermal Dissipation Amplifier renamed to Kaikka's Modified Thermal Shield Amplifier
Thon's Modified Thermal Dissipation Amplifier renamed to Thon's Modified Thermal Shield Amplifier
Vepas' Modified Thermal Dissipation Amplifier renamed to Vepas' Modified Thermal Shield Amplifier
Estamel's Modified Thermal Dissipation Amplifier renamed to Estamel's Modified Thermal Shield Amplifier
Kaikka's Modified Kinetic Deflection Amplifier renamed to Kaikka's Modified Kinetic Shield Amplifier
Thon's Modified Kinetic Deflection Amplifier renamed to Thon's Modified Kinetic Shield Amplifier
Vepas' Modified Kinetic Deflection Amplifier renamed to Vepas' Modified Kinetic Shield Amplifier
Estamel's Modified Kinetic Deflection Amplifier renamed to Estamel's Modified Kinetic Shield Amplifier
Kaikka's Modified EM Ward Amplifier renamed to Kaikka's Modified EM Shield Amplifier
Thon's Modified EM Ward Amplifier renamed to Thon's Modified EM Shield Amplifier
Vepas' Modified EM Ward Amplifier renamed to Vepas' Modified EM Shield Amplifier
Estamel's Modified EM Ward Amplifier renamed to Estamel's Modified EM Shield Amplifier
Caldari Navy EM Ward Amplifier renamed to Caldari Navy EM Shield Amplifier
Caldari Navy Kinetic Deflection Amplifier renamed to Caldari Navy Kinetic Shield Amplifier
Caldari Navy Thermal Dissipation Amplifier renamed to Caldari Navy Thermal Shield Amplifier
Caldari Navy Explosive Deflection Amplifier renamed to Caldari Navy Explosive Shield Amplifier
Republic Fleet EM Ward Amplifier renamed to Republic Fleet EM Shield Amplifier
Republic Fleet Kinetic Deflection Amplifier renamed to Republic Fleet Kinetic Shield Amplifier
Republic Fleet Thermal Dissipation Amplifier renamed to Republic Fleet Thermal Shield Amplifier
Republic Fleet Explosive Deflection Amplifier renamed to Republic Fleet Explosive Shield Amplifier
Pithum C-Type Explosive Deflection Amplifier renamed to Pithum C-Type Explosive Shield Amplifier
Pithum C-Type Thermal Dissipation Amplifier renamed to Pithum C-Type Thermal Shield Amplifier
Pithum C-Type Kinetic Deflection Amplifier renamed to Pithum C-Type Kinetic Shield Amplifier
Pithum C-Type EM Ward Amplifier renamed to Pithum C-Type EM Shield Amplifier
Pithum B-Type Explosive Deflection Amplifier renamed to Pithum B-Type Explosive Shield Amplifier
Pithum B-Type Thermal Dissipation Amplifier renamed to Pithum B-Type Thermal Shield Amplifier
Pithum B-Type Kinetic Deflection Amplifier renamed to Pithum B-Type Kinetic Shield Amplifier
Pithum B-Type EM Ward Amplifier renamed to Pithum B-Type EM Shield Amplifier
Pithum A-Type Explosive Deflection Amplifier renamed to Pithum A-Type Explosive Shield Amplifier
Pithum A-Type Thermal Dissipation Amplifier renamed to Pithum A-Type Thermal Shield Amplifier
Pithum A-Type Kinetic Deflection Amplifier renamed to Pithum A-Type Kinetic Shield Amplifier
Pithum A-Type EM Ward Amplifier renamed to Pithum A-Type EM Shield Amplifier
Gistum C-Type Explosive Deflection Amplifier renamed to Gistum C-Type Explosive Shield Amplifier
Gistum B-Type Explosive Deflection Amplifier renamed to Gistum B-Type Explosive Shield Amplifier
Gistum C-Type Thermal Dissipation Amplifier renamed to Gistum C-Type Thermal Shield Amplifier
Gistum B-Type Thermal Dissipation Amplifier renamed to Gistum B-Type Thermal Shield Amplifier
Gistum C-Type Kinetic Deflection Amplifier renamed to Gistum C-Type Kinetic Shield Amplifier
Gistum B-Type Kinetic Deflection Amplifier renamed to Gistum B-Type Kinetic Shield Amplifier
Gistum C-Type EM Ward Amplifier renamed to Gistum C-Type EM Shield Amplifier
Gistum B-Type EM Ward Amplifier renamed to Gistum B-Type EM Shield Amplifier
Gistum A-Type Explosive Deflection Amplifier renamed to Gistum A-Type Explosive Shield Amplifier
Gistum A-Type Thermal Dissipation Amplifier renamed to Gistum A-Type Thermal Shield Amplifier
Gistum A-Type Kinetic Deflection Amplifier renamed to Gistum A-Type Kinetic Shield Amplifier
Gistum A-Type EM Ward Amplifier renamed to Gistum A-Type EM Shield Amplifier
'Whiskey' Explosive Deflection Amplifier renamed to 'Whiskey' Explosive Shield Amplifier
'High Noon' Thermal Dissipation Amplifier renamed to 'High Noon' Thermal Shield Amplifier
'Cactus' Modified Kinetic Deflection Amplifier renamed to 'Cactus' Modified Kinetic Shield Amplifier
'Prospector' EM Ward Amplifier renamed to 'Prospector' EM Shield Amplifier
Limited Layered Plating I converted to Upgraded Layered Coating I
'Scarab' Layered Plating I converted to Upgraded Layered Coating I
'Grail' Layered Plating I converted to Upgraded Layered Coating I
Limited Adaptive Nano Plating I converted to Upgraded Multispectrum Coating I
'Collateral' Adaptive Nano Plating I converted to Upgraded Multispectrum Coating I
'Refuge' Adaptive Nano Plating I converted to Upgraded Multispectrum Coating I
Limited EM Plating I converted to Upgraded EM Coating I
'Contour' EM Plating I converted to Upgraded EM Coating I
'Spiegel' EM Plating I converted to Upgraded EM Coating I
Limited Explosive Plating I converted to Upgraded Explosive Coating I
Experimental Explosive Plating I converted to Upgraded Explosive Coating I
'Aegis' Explosive Plating I converted to Upgraded Explosive Coating I
Limited Kinetic Plating I converted to Upgraded Kinetic Coating I
Experimental Kinetic Plating I converted to Upgraded Kinetic Coating I
'Element' Kinetic Plating I converted to Upgraded Kinetic Coating I
Limited Thermal Plating I converted to Upgraded Thermal Coating I
Experimental Thermal Plating I converted to Upgraded Thermal Coating I
Prototype Thermal Plating I converted to Upgraded Thermal Coating I
Basic EM Plating renamed to 'Basic' EM Coating
EM Plating I renamed to EM Coating I
EM Plating II renamed to EM Coating II
Basic Explosive Plating renamed to 'Basic' Explosive Coating
Explosive Plating I renamed to Explosive Coating I
Explosive Plating II renamed to Explosive Coating II
Basic Layered Plating renamed to 'Basic' Layered Coating
Layered Plating I renamed to Layered Coating I
Layered Plating II renamed to Layered Coating II
Basic Kinetic Plating renamed to 'Basic' Kinetic Coating
Kinetic Plating I renamed to Kinetic Coating I
Kinetic Plating II renamed to Kinetic Coating II
Basic Thermal Plating renamed to 'Basic' Thermal Coating
Thermal Plating I renamed to Thermal Coating I
Thermal Plating II renamed to Thermal Coating II
Basic Adaptive Nano Plating renamed to 'Basic' Multispectrum Coating
Adaptive Nano Plating I renamed to Multispectrum Coating I
Adaptive Nano Plating II renamed to Multispectrum Coating II
Domination Adaptive Nano Plating renamed to Domination Multispectrum Coating
True Sansha Adaptive Nano Plating renamed to True Sansha Multispectrum Coating
Dark Blood Adaptive Nano Plating renamed to Dark Blood Multispectrum Coating
Domination Kinetic Plating renamed to Domination Kinetic Coating
True Sansha Kinetic Plating renamed to True Sansha Kinetic Coating
Dark Blood Kinetic Plating renamed to Dark Blood Kinetic Coating
Domination Explosive Plating renamed to Domination Explosive Coating
True Sansha Explosive Plating renamed to True Sansha Explosive Coating
Dark Blood Explosive Plating renamed to Dark Blood Explosive Coating
Domination EM Plating renamed to Domination EM Coating
True Sansha EM Plating renamed to True Sansha EM Coating
Dark Blood EM Plating renamed to Dark Blood EM Coating
Domination Thermal Plating renamed to Domination Thermal Coating
True Sansha Thermal Plating renamed to True Sansha Thermal Coating
Dark Blood Thermal Plating renamed to Dark Blood Thermal Coating
Shadow Serpentis Adaptive Nano Plating renamed to Shadow Serpentis Multispectrum Coating
Shadow Serpentis Kinetic Plating renamed to Shadow Serpentis Kinetic Coating
Shadow Serpentis Explosive Plating renamed to Shadow Serpentis Explosive Coating
Shadow Serpentis EM Plating renamed to Shadow Serpentis EM Coating
Shadow Serpentis Thermal Plating renamed to Shadow Serpentis Thermal Coating
Mizuro's Modified Adaptive Nano Plating renamed to Mizuro's Modified Multispectrum Coating
Gotan's Modified Adaptive Nano Plating renamed to Gotan's Modified Multispectrum Coating
Mizuro's Modified Kinetic Plating renamed to Mizuro's Modified Kinetic Coating
Gotan's Modified Kinetic Plating renamed to Gotan's Modified Kinetic Coating
Mizuro's Modified Explosive Plating renamed to Mizuro's Modified Explosive Coating
Gotan's Modified Explosive Plating renamed to Gotan's Modified Explosive Coating
Mizuro's Modified EM Plating renamed to Mizuro's Modified EM Coating
Gotan's Modified EM Plating renamed to Gotan's Modified EM Coating
Mizuro's Modified Thermal Plating renamed to Mizuro's Modified Thermal Coating
Gotan's Modified Thermal Plating renamed to Gotan's Modified Thermal Coating
Brokara's Modified Adaptive Nano Plating renamed to Brokara's Modified Multispectrum Coating
Tairei's Modified Adaptive Nano Plating renamed to Tairei's Modified Multispectrum Coating
Selynne's Modified Adaptive Nano Plating renamed to Selynne's Modified Multispectrum Coating
Raysere's Modified Adaptive Nano Plating renamed to Raysere's Modified Multispectrum Coating
Vizan's Modified Adaptive Nano Plating renamed to Vizan's Modified Multispectrum Coating
Ahremen's Modified Adaptive Nano Plating renamed to Ahremen's Modified Multispectrum Coating
Chelm's Modified Adaptive Nano Plating renamed to Chelm's Modified Multispectrum Coating
Draclira's Modified Adaptive Nano Plating renamed to Draclira's Modified Multispectrum Coating
Brokara's Modified Kinetic Plating renamed to Brokara's Modified Kinetic Coating
Tairei's Modified Kinetic Plating renamed to Tairei's Modified Kinetic Coating
Selynne's Modified Kinetic Plating renamed to Selynne's Modified Kinetic Coating
Raysere's Modified Kinetic Plating renamed to Raysere's Modified Kinetic Coating
Vizan's Modified Kinetic Plating renamed to Vizan's Modified Kinetic Coating
Ahremen's Modified Kinetic Plating renamed to Ahremen's Modified Kinetic Coating
Chelm's Modified Kinetic Plating renamed to Chelm's Modified Kinetic Coating
Draclira's Modified Kinetic Plating renamed to Draclira's Modified Kinetic Coating
Brokara's Modified Explosive Plating renamed to Brokara's Modified Explosive Coating
Tairei's Modified Explosive Plating renamed to Tairei's Modified Explosive Coating
Selynne's Modified Explosive Plating renamed to Selynne's Modified Explosive Coating
Raysere's Modified Explosive Plating renamed to Raysere's Modified Explosive Coating
Vizan's Modified Explosive Plating renamed to Vizan's Modified Explosive Coating
Ahremen's Modified Explosive Plating renamed to Ahremen's Modified Explosive Coating
Chelm's Modified Explosive Plating renamed to Chelm's Modified Explosive Coating
Draclira's Modified Explosive Plating renamed to Draclira's Modified Explosive Coating
Brokara's Modified EM Plating renamed to Brokara's Modified EM Coating
Tairei's Modified EM Plating renamed to Tairei's Modified EM Coating
Selynne's Modified EM Plating renamed to Selynne's Modified EM Coating
Raysere's Modified EM Plating renamed to Raysere's Modified EM Coating
Vizan's Modified EM Plating renamed to Vizan's Modified EM Coating
Ahremen's Modified EM Plating renamed to Ahremen's Modified EM Coating
Chelm's Modified EM Plating renamed to Chelm's Modified EM Coating
Draclira's Modified EM Plating renamed to Draclira's Modified EM Coating
Brokara's Modified Thermal Plating renamed to Brokara's Modified Thermal Coating
Tairei's Modified Thermal Plating renamed to Tairei's Modified Thermal Coating
Selynne's Modified Thermal Plating renamed to Selynne's Modified Thermal Coating
Raysere's Modified Thermal Plating renamed to Raysere's Modified Thermal Coating
Vizan's Modified Thermal Plating renamed to Vizan's Modified Thermal Coating
Ahremen's Modified Thermal Plating renamed to Ahremen's Modified Thermal Coating
Chelm's Modified Thermal Plating renamed to Chelm's Modified Thermal Coating
Draclira's Modified Thermal Plating renamed to Draclira's Modified Thermal Coating
Brynn's Modified Adaptive Nano Plating renamed to Brynn's Modified Multispectrum Coating
Tuvan's Modified Adaptive Nano Plating renamed to Tuvan's Modified Multispectrum Coating
Setele's Modified Adaptive Nano Plating renamed to Setele's Modified Multispectrum Coating
Cormack's Modified Adaptive Nano Plating renamed to Cormack's Modified Multispectrum Coating
Brynn's Modified Thermal Plating renamed to Brynn's Modified Thermal Coating
Tuvan's Modified Thermal Plating renamed to Tuvan's Modified Thermal Coating
Setele's Modified Thermal Plating renamed to Setele's Modified Thermal Coating
Cormack's Modified Thermal Plating renamed to Cormack's Modified Thermal Coating
Brynn's Modified EM Plating renamed to Brynn's Modified EM Coating
Tuvan's Modified EM Plating renamed to Tuvan's Modified EM Coating
Setele's Modified EM Plating renamed to Setele's Modified EM Coating
Cormack's Modified EM Plating renamed to Cormack's Modified EM Coating
Brynn's Modified Explosive Plating renamed to Brynn's Modified Explosive Coating
Tuvan's Modified Explosive Plating renamed to Tuvan's Modified Explosive Coating
Setele's Modified Explosive Plating renamed to Setele's Modified Explosive Coating
Cormack's Modified Explosive Plating renamed to Cormack's Modified Explosive Coating
Brynn's Modified Kinetic Plating renamed to Brynn's Modified Kinetic Coating
Tuvan's Modified Kinetic Plating renamed to Tuvan's Modified Kinetic Coating
Setele's Modified Kinetic Plating renamed to Setele's Modified Kinetic Coating
Cormack's Modified Kinetic Plating renamed to Cormack's Modified Kinetic Coating
Imperial Navy Thermal Plating renamed to Imperial Navy Thermal Coating
Imperial Navy EM Plating renamed to Imperial Navy EM Coating
Imperial Navy Explosive Plating renamed to Imperial Navy Explosive Coating
Imperial Navy Kinetic Plating renamed to Imperial Navy Kinetic Coating
Imperial Navy Adaptive Nano Plating renamed to Imperial Navy Multispectrum Coating
Republic Fleet Thermal Plating renamed to Republic Fleet Thermal Coating
Republic Fleet EM Plating renamed to Republic Fleet EM Coating
Republic Fleet Explosive Plating renamed to Republic Fleet Explosive Coating
Republic Fleet Kinetic Plating renamed to Republic Fleet Kinetic Coating
Republic Fleet Adaptive Nano Plating renamed to Republic Fleet Multispectrum Coating
Upgraded Adaptive Nano Plating I renamed to Upgraded Multispectrum Coating I
Upgraded Kinetic Plating I renamed to Upgraded Kinetic Coating I
Upgraded Explosive Plating I renamed to Upgraded Explosive Coating I
Upgraded EM Plating I renamed to Upgraded EM Coating I
Upgraded Thermal Plating I renamed to Upgraded Thermal Coating I
Upgraded Layered Plating I renamed to Upgraded Layered Coating I
Ammatar Navy Kinetic Plating renamed to Ammatar Navy Kinetic Coating
Ammatar Navy Adaptive Nano Plating renamed to Ammatar Navy Multispectrum Coating
Ammatar Navy Explosive Plating renamed to Ammatar Navy Explosive Coating
Ammatar Navy EM Plating renamed to Ammatar Navy EM Coating
Federation Navy Adaptive Nano Plating renamed to Federation Navy Multispectrum Coating
Federation Navy Kinetic Plating renamed to Federation Navy Kinetic Coating
Federation Navy Explosive Plating renamed to Federation Navy Explosive Coating
Federation Navy EM Plating renamed to Federation Navy EM Coating
Federation Navy Thermal Plating renamed to Federation Navy Thermal Coating
Corpii C-Type Adaptive Nano Plating renamed to Corpii C-Type Multispectrum Coating
Centii C-Type Adaptive Nano Plating renamed to Centii C-Type Multispectrum Coating
Corpii B-Type Adaptive Nano Plating renamed to Corpii B-Type Multispectrum Coating
Centii B-Type Adaptive Nano Plating renamed to Centii B-Type Multispectrum Coating
Corpii A-Type Adaptive Nano Plating renamed to Corpii A-Type Multispectrum Coating
Centii A-Type Adaptive Nano Plating renamed to Centii A-Type Multispectrum Coating
Corpii C-Type Kinetic Plating renamed to Corpii C-Type Kinetic Coating
Centii C-Type Kinetic Plating renamed to Centii C-Type Kinetic Coating
Corpii C-Type Explosive Plating renamed to Corpii C-Type Explosive Coating
Centii C-Type Explosive Plating renamed to Centii C-Type Explosive Coating
Corpii C-Type EM Plating renamed to Corpii C-Type EM Coating
Centii C-Type EM Plating renamed to Centii C-Type EM Coating
Corpii C-Type Thermal Plating renamed to Corpii C-Type Thermal Coating
Centii C-Type Thermal Plating renamed to Centii C-Type Thermal Coating
Corpii B-Type Thermal Plating renamed to Corpii B-Type Thermal Coating
Centii B-Type Thermal Plating renamed to Centii B-Type Thermal Coating
Corpii B-Type Kinetic Plating renamed to Corpii B-Type Kinetic Coating
Centii B-Type Kinetic Plating renamed to Centii B-Type Kinetic Coating
Corpii B-Type Explosive Plating renamed to Corpii B-Type Explosive Coating
Centii B-Type Explosive Plating renamed to Centii B-Type Explosive Coating
Corpii B-Type EM Plating renamed to Corpii B-Type EM Coating
Centii B-Type EM Plating renamed to Centii B-Type EM Coating
Corpii A-Type Kinetic Plating renamed to Corpii A-Type Kinetic Coating
Centii A-Type Kinetic Plating renamed to Centii A-Type Kinetic Coating
Corpii A-Type Explosive Plating renamed to Corpii A-Type Explosive Coating
Centii A-Type Explosive Plating renamed to Centii A-Type Explosive Coating
Corpii A-Type EM Plating renamed to Corpii A-Type EM Coating
Centii A-Type EM Plating renamed to Centii A-Type EM Coating
Corpii A-Type Thermal Plating renamed to Corpii A-Type Thermal Coating
Centii A-Type Thermal Plating renamed to Centii A-Type Thermal Coating
Coreli C-Type Adaptive Nano Plating renamed to Coreli C-Type Multispectrum Coating
Coreli C-Type Kinetic Plating renamed to Coreli C-Type Kinetic Coating
Coreli C-Type Explosive Plating renamed to Coreli C-Type Explosive Coating
Coreli C-Type EM Plating renamed to Coreli C-Type EM Coating
Coreli C-Type Thermal Plating renamed to Coreli C-Type Thermal Coating
Coreli B-Type Adaptive Nano Plating renamed to Coreli B-Type Multispectrum Coating
Coreli B-Type Kinetic Plating renamed to Coreli B-Type Kinetic Coating
Coreli B-Type Explosive Plating renamed to Coreli B-Type Explosive Coating
Coreli B-Type EM Plating renamed to Coreli B-Type EM Coating
Coreli B-Type Thermal Plating renamed to Coreli B-Type Thermal Coating
Coreli A-Type Adaptive Nano Plating renamed to Coreli A-Type Multispectrum Coating
Coreli A-Type Kinetic Plating renamed to Coreli A-Type Kinetic Coating
Coreli A-Type Explosive Plating renamed to Coreli A-Type Explosive Coating
Coreli A-Type EM Plating renamed to Coreli A-Type EM Coating
Coreli A-Type Thermal Plating renamed to Coreli A-Type Thermal Coating
Khanid Navy Adaptive Nano Plating renamed to Khanid Navy Multispectrum Coating
Khanid Navy Kinetic Plating renamed to Khanid Navy Kinetic Coating
Khanid Navy Explosive Plating renamed to Khanid Navy Explosive Coating
Khanid Navy EM Plating renamed to Khanid Navy EM Coating
Khanid Navy Thermal Plating renamed to Khanid Navy Thermal Coating
Ammatar Navy Thermal Plating renamed to Ammatar Navy Thermal Coating
Low-Grade Mimesis Alpha renamed to Low-grade Mimesis Alpha
Low-Grade Mimesis Beta renamed to Low-grade Mimesis Beta
Low-Grade Mimesis Gamma renamed to Low-grade Mimesis Gamma
Low-Grade Mimesis Delta renamed to Low-grade Mimesis Delta
Low-Grade Mimesis Epsilon renamed to Low-grade Mimesis Epsilon
Low-Grade Mimesis Omega renamed to Low-grade Mimesis Omega
Mid-Grade Mimesis Alpha renamed to Mid-grade Mimesis Alpha
Mid-Grade Mimesis Beta renamed to Mid-grade Mimesis Beta
Mid-Grade Mimesis Gamma renamed to Mid-grade Mimesis Gamma
Mid-Grade Mimesis Delta renamed to Mid-grade Mimesis Delta
Mid-Grade Mimesis Epsilon renamed to Mid-grade Mimesis Epsilon
Mid-Grade Mimesis Omega renamed to Mid-grade Mimesis Omega
High-Grade Mimesis Alpha renamed to High-grade Mimesis Alpha
High-Grade Mimesis Beta renamed to High-grade Mimesis Beta
High-Grade Mimesis Delta renamed to High-grade Mimesis Delta
High-Grade Mimesis Epsilon renamed to High-grade Mimesis Epsilon
High-Grade Mimesis Gamma renamed to High-grade Mimesis Gamma
High-Grade Mimesis Omega renamed to High-grade Mimesis Omega
"""
def main(old, new):

View File

@@ -0,0 +1,228 @@
"""
Conversion pack for May 2020 release
"""
CONVERSIONS = {
# Renamed items, extracted via diff file
"Basic EM Plating": "'Basic' EM Coating",
"EM Plating I": "EM Coating I",
"EM Plating II": "EM Coating II",
"Basic Explosive Plating": "'Basic' Explosive Coating",
"Explosive Plating I": "Explosive Coating I",
"Explosive Plating II": "Explosive Coating II",
"Basic Layered Plating": "'Basic' Layered Coating",
"Layered Plating I": "Layered Coating I",
"Layered Plating II": "Layered Coating II",
"Basic Kinetic Plating": "'Basic' Kinetic Coating",
"Kinetic Plating I": "Kinetic Coating I",
"Kinetic Plating II": "Kinetic Coating II",
"Basic Thermal Plating": "'Basic' Thermal Coating",
"Thermal Plating I": "Thermal Coating I",
"Thermal Plating II": "Thermal Coating II",
"Basic Adaptive Nano Plating": "'Basic' Multispectrum Coating",
"Adaptive Nano Plating I": "Multispectrum Coating I",
"Adaptive Nano Plating II": "Multispectrum Coating II",
"Domination Adaptive Nano Plating": "Domination Multispectrum Coating",
"True Sansha Adaptive Nano Plating": "True Sansha Multispectrum Coating",
"Dark Blood Adaptive Nano Plating": "Dark Blood Multispectrum Coating",
"Domination Kinetic Plating": "Domination Kinetic Coating",
"True Sansha Kinetic Plating": "True Sansha Kinetic Coating",
"Dark Blood Kinetic Plating": "Dark Blood Kinetic Coating",
"Domination Explosive Plating": "Domination Explosive Coating",
"True Sansha Explosive Plating": "True Sansha Explosive Coating",
"Dark Blood Explosive Plating": "Dark Blood Explosive Coating",
"Domination EM Plating": "Domination EM Coating",
"True Sansha EM Plating": "True Sansha EM Coating",
"Dark Blood EM Plating": "Dark Blood EM Coating",
"Domination Thermal Plating": "Domination Thermal Coating",
"True Sansha Thermal Plating": "True Sansha Thermal Coating",
"Dark Blood Thermal Plating": "Dark Blood Thermal Coating",
"Shadow Serpentis Adaptive Nano Plating": "Shadow Serpentis Multispectrum Coating",
"Shadow Serpentis Kinetic Plating": "Shadow Serpentis Kinetic Coating",
"Shadow Serpentis Explosive Plating": "Shadow Serpentis Explosive Coating",
"Shadow Serpentis EM Plating": "Shadow Serpentis EM Coating",
"Shadow Serpentis Thermal Plating": "Shadow Serpentis Thermal Coating",
"Mizuro's Modified Adaptive Nano Plating": "Mizuro's Modified Multispectrum Coating",
"Gotan's Modified Adaptive Nano Plating": "Gotan's Modified Multispectrum Coating",
"Mizuro's Modified Kinetic Plating": "Mizuro's Modified Kinetic Coating",
"Gotan's Modified Kinetic Plating": "Gotan's Modified Kinetic Coating",
"Mizuro's Modified Explosive Plating": "Mizuro's Modified Explosive Coating",
"Gotan's Modified Explosive Plating": "Gotan's Modified Explosive Coating",
"Mizuro's Modified EM Plating": "Mizuro's Modified EM Coating",
"Gotan's Modified EM Plating": "Gotan's Modified EM Coating",
"Mizuro's Modified Thermal Plating": "Mizuro's Modified Thermal Coating",
"Gotan's Modified Thermal Plating": "Gotan's Modified Thermal Coating",
"Brokara's Modified Adaptive Nano Plating": "Brokara's Modified Multispectrum Coating",
"Tairei's Modified Adaptive Nano Plating": "Tairei's Modified Multispectrum Coating",
"Selynne's Modified Adaptive Nano Plating": "Selynne's Modified Multispectrum Coating",
"Raysere's Modified Adaptive Nano Plating": "Raysere's Modified Multispectrum Coating",
"Vizan's Modified Adaptive Nano Plating": "Vizan's Modified Multispectrum Coating",
"Ahremen's Modified Adaptive Nano Plating": "Ahremen's Modified Multispectrum Coating",
"Chelm's Modified Adaptive Nano Plating": "Chelm's Modified Multispectrum Coating",
"Draclira's Modified Adaptive Nano Plating": "Draclira's Modified Multispectrum Coating",
"Brokara's Modified Kinetic Plating": "Brokara's Modified Kinetic Coating",
"Tairei's Modified Kinetic Plating": "Tairei's Modified Kinetic Coating",
"Selynne's Modified Kinetic Plating": "Selynne's Modified Kinetic Coating",
"Raysere's Modified Kinetic Plating": "Raysere's Modified Kinetic Coating",
"Vizan's Modified Kinetic Plating": "Vizan's Modified Kinetic Coating",
"Ahremen's Modified Kinetic Plating": "Ahremen's Modified Kinetic Coating",
"Chelm's Modified Kinetic Plating": "Chelm's Modified Kinetic Coating",
"Draclira's Modified Kinetic Plating": "Draclira's Modified Kinetic Coating",
"Brokara's Modified Explosive Plating": "Brokara's Modified Explosive Coating",
"Tairei's Modified Explosive Plating": "Tairei's Modified Explosive Coating",
"Selynne's Modified Explosive Plating": "Selynne's Modified Explosive Coating",
"Raysere's Modified Explosive Plating": "Raysere's Modified Explosive Coating",
"Vizan's Modified Explosive Plating": "Vizan's Modified Explosive Coating",
"Ahremen's Modified Explosive Plating": "Ahremen's Modified Explosive Coating",
"Chelm's Modified Explosive Plating": "Chelm's Modified Explosive Coating",
"Draclira's Modified Explosive Plating": "Draclira's Modified Explosive Coating",
"Brokara's Modified EM Plating": "Brokara's Modified EM Coating",
"Tairei's Modified EM Plating": "Tairei's Modified EM Coating",
"Selynne's Modified EM Plating": "Selynne's Modified EM Coating",
"Raysere's Modified EM Plating": "Raysere's Modified EM Coating",
"Vizan's Modified EM Plating": "Vizan's Modified EM Coating",
"Ahremen's Modified EM Plating": "Ahremen's Modified EM Coating",
"Chelm's Modified EM Plating": "Chelm's Modified EM Coating",
"Draclira's Modified EM Plating": "Draclira's Modified EM Coating",
"Brokara's Modified Thermal Plating": "Brokara's Modified Thermal Coating",
"Tairei's Modified Thermal Plating": "Tairei's Modified Thermal Coating",
"Selynne's Modified Thermal Plating": "Selynne's Modified Thermal Coating",
"Raysere's Modified Thermal Plating": "Raysere's Modified Thermal Coating",
"Vizan's Modified Thermal Plating": "Vizan's Modified Thermal Coating",
"Ahremen's Modified Thermal Plating": "Ahremen's Modified Thermal Coating",
"Chelm's Modified Thermal Plating": "Chelm's Modified Thermal Coating",
"Draclira's Modified Thermal Plating": "Draclira's Modified Thermal Coating",
"Brynn's Modified Adaptive Nano Plating": "Brynn's Modified Multispectrum Coating",
"Tuvan's Modified Adaptive Nano Plating": "Tuvan's Modified Multispectrum Coating",
"Setele's Modified Adaptive Nano Plating": "Setele's Modified Multispectrum Coating",
"Cormack's Modified Adaptive Nano Plating": "Cormack's Modified Multispectrum Coating",
"Brynn's Modified Thermal Plating": "Brynn's Modified Thermal Coating",
"Tuvan's Modified Thermal Plating": "Tuvan's Modified Thermal Coating",
"Setele's Modified Thermal Plating": "Setele's Modified Thermal Coating",
"Cormack's Modified Thermal Plating": "Cormack's Modified Thermal Coating",
"Brynn's Modified EM Plating": "Brynn's Modified EM Coating",
"Tuvan's Modified EM Plating": "Tuvan's Modified EM Coating",
"Setele's Modified EM Plating": "Setele's Modified EM Coating",
"Cormack's Modified EM Plating": "Cormack's Modified EM Coating",
"Brynn's Modified Explosive Plating": "Brynn's Modified Explosive Coating",
"Tuvan's Modified Explosive Plating": "Tuvan's Modified Explosive Coating",
"Setele's Modified Explosive Plating": "Setele's Modified Explosive Coating",
"Cormack's Modified Explosive Plating": "Cormack's Modified Explosive Coating",
"Brynn's Modified Kinetic Plating": "Brynn's Modified Kinetic Coating",
"Tuvan's Modified Kinetic Plating": "Tuvan's Modified Kinetic Coating",
"Setele's Modified Kinetic Plating": "Setele's Modified Kinetic Coating",
"Cormack's Modified Kinetic Plating": "Cormack's Modified Kinetic Coating",
"Imperial Navy Thermal Plating": "Imperial Navy Thermal Coating",
"Imperial Navy EM Plating": "Imperial Navy EM Coating",
"Imperial Navy Explosive Plating": "Imperial Navy Explosive Coating",
"Imperial Navy Kinetic Plating": "Imperial Navy Kinetic Coating",
"Imperial Navy Adaptive Nano Plating": "Imperial Navy Multispectrum Coating",
"Republic Fleet Thermal Plating": "Republic Fleet Thermal Coating",
"Republic Fleet EM Plating": "Republic Fleet EM Coating",
"Republic Fleet Explosive Plating": "Republic Fleet Explosive Coating",
"Republic Fleet Kinetic Plating": "Republic Fleet Kinetic Coating",
"Republic Fleet Adaptive Nano Plating": "Republic Fleet Multispectrum Coating",
"Upgraded Adaptive Nano Plating I": "Upgraded Multispectrum Coating I",
"Upgraded Kinetic Plating I": "Upgraded Kinetic Coating I",
"Upgraded Explosive Plating I": "Upgraded Explosive Coating I",
"Upgraded EM Plating I": "Upgraded EM Coating I",
"Upgraded Thermal Plating I": "Upgraded Thermal Coating I",
"Upgraded Layered Plating I": "Upgraded Layered Coating I",
"Ammatar Navy Kinetic Plating": "Ammatar Navy Kinetic Coating",
"Ammatar Navy Adaptive Nano Plating": "Ammatar Navy Multispectrum Coating",
"Ammatar Navy Explosive Plating": "Ammatar Navy Explosive Coating",
"Ammatar Navy EM Plating": "Ammatar Navy EM Coating",
"Federation Navy Adaptive Nano Plating": "Federation Navy Multispectrum Coating",
"Federation Navy Kinetic Plating": "Federation Navy Kinetic Coating",
"Federation Navy Explosive Plating": "Federation Navy Explosive Coating",
"Federation Navy EM Plating": "Federation Navy EM Coating",
"Federation Navy Thermal Plating": "Federation Navy Thermal Coating",
"Corpii C-Type Adaptive Nano Plating": "Corpii C-Type Multispectrum Coating",
"Centii C-Type Adaptive Nano Plating": "Centii C-Type Multispectrum Coating",
"Corpii B-Type Adaptive Nano Plating": "Corpii B-Type Multispectrum Coating",
"Centii B-Type Adaptive Nano Plating": "Centii B-Type Multispectrum Coating",
"Corpii A-Type Adaptive Nano Plating": "Corpii A-Type Multispectrum Coating",
"Centii A-Type Adaptive Nano Plating": "Centii A-Type Multispectrum Coating",
"Corpii C-Type Kinetic Plating": "Corpii C-Type Kinetic Coating",
"Centii C-Type Kinetic Plating": "Centii C-Type Kinetic Coating",
"Corpii C-Type Explosive Plating": "Corpii C-Type Explosive Coating",
"Centii C-Type Explosive Plating": "Centii C-Type Explosive Coating",
"Corpii C-Type EM Plating": "Corpii C-Type EM Coating",
"Centii C-Type EM Plating": "Centii C-Type EM Coating",
"Corpii C-Type Thermal Plating": "Corpii C-Type Thermal Coating",
"Centii C-Type Thermal Plating": "Centii C-Type Thermal Coating",
"Corpii B-Type Thermal Plating": "Corpii B-Type Thermal Coating",
"Centii B-Type Thermal Plating": "Centii B-Type Thermal Coating",
"Corpii B-Type Kinetic Plating": "Corpii B-Type Kinetic Coating",
"Centii B-Type Kinetic Plating": "Centii B-Type Kinetic Coating",
"Corpii B-Type Explosive Plating": "Corpii B-Type Explosive Coating",
"Centii B-Type Explosive Plating": "Centii B-Type Explosive Coating",
"Corpii B-Type EM Plating": "Corpii B-Type EM Coating",
"Centii B-Type EM Plating": "Centii B-Type EM Coating",
"Corpii A-Type Kinetic Plating": "Corpii A-Type Kinetic Coating",
"Centii A-Type Kinetic Plating": "Centii A-Type Kinetic Coating",
"Corpii A-Type Explosive Plating": "Corpii A-Type Explosive Coating",
"Centii A-Type Explosive Plating": "Centii A-Type Explosive Coating",
"Corpii A-Type EM Plating": "Corpii A-Type EM Coating",
"Centii A-Type EM Plating": "Centii A-Type EM Coating",
"Corpii A-Type Thermal Plating": "Corpii A-Type Thermal Coating",
"Centii A-Type Thermal Plating": "Centii A-Type Thermal Coating",
"Coreli C-Type Adaptive Nano Plating": "Coreli C-Type Multispectrum Coating",
"Coreli C-Type Kinetic Plating": "Coreli C-Type Kinetic Coating",
"Coreli C-Type Explosive Plating": "Coreli C-Type Explosive Coating",
"Coreli C-Type EM Plating": "Coreli C-Type EM Coating",
"Coreli C-Type Thermal Plating": "Coreli C-Type Thermal Coating",
"Coreli B-Type Adaptive Nano Plating": "Coreli B-Type Multispectrum Coating",
"Coreli B-Type Kinetic Plating": "Coreli B-Type Kinetic Coating",
"Coreli B-Type Explosive Plating": "Coreli B-Type Explosive Coating",
"Coreli B-Type EM Plating": "Coreli B-Type EM Coating",
"Coreli B-Type Thermal Plating": "Coreli B-Type Thermal Coating",
"Coreli A-Type Adaptive Nano Plating": "Coreli A-Type Multispectrum Coating",
"Coreli A-Type Kinetic Plating": "Coreli A-Type Kinetic Coating",
"Coreli A-Type Explosive Plating": "Coreli A-Type Explosive Coating",
"Coreli A-Type EM Plating": "Coreli A-Type EM Coating",
"Coreli A-Type Thermal Plating": "Coreli A-Type Thermal Coating",
"Khanid Navy Adaptive Nano Plating": "Khanid Navy Multispectrum Coating",
"Khanid Navy Kinetic Plating": "Khanid Navy Kinetic Coating",
"Khanid Navy Explosive Plating": "Khanid Navy Explosive Coating",
"Khanid Navy EM Plating": "Khanid Navy EM Coating",
"Khanid Navy Thermal Plating": "Khanid Navy Thermal Coating",
"Ammatar Navy Thermal Plating": "Ammatar Navy Thermal Coating",
"Low-Grade Mimesis Alpha": "Low-grade Mimesis Alpha",
"Low-Grade Mimesis Beta": "Low-grade Mimesis Beta",
"Low-Grade Mimesis Gamma": "Low-grade Mimesis Gamma",
"Low-Grade Mimesis Delta": "Low-grade Mimesis Delta",
"Low-Grade Mimesis Epsilon": "Low-grade Mimesis Epsilon",
"Low-Grade Mimesis Omega": "Low-grade Mimesis Omega",
"Mid-Grade Mimesis Alpha": "Mid-grade Mimesis Alpha",
"Mid-Grade Mimesis Beta": "Mid-grade Mimesis Beta",
"Mid-Grade Mimesis Gamma": "Mid-grade Mimesis Gamma",
"Mid-Grade Mimesis Delta": "Mid-grade Mimesis Delta",
"Mid-Grade Mimesis Epsilon": "Mid-grade Mimesis Epsilon",
"Mid-Grade Mimesis Omega": "Mid-grade Mimesis Omega",
"High-Grade Mimesis Alpha": "High-grade Mimesis Alpha",
"High-Grade Mimesis Beta": "High-grade Mimesis Beta",
"High-Grade Mimesis Delta": "High-grade Mimesis Delta",
"High-Grade Mimesis Epsilon": "High-grade Mimesis Epsilon",
"High-Grade Mimesis Gamma": "High-grade Mimesis Gamma",
"High-Grade Mimesis Omega": "High-grade Mimesis Omega",
# Converted items
"Limited Layered Plating I": "Upgraded Layered Coating I",
"'Scarab' Layered Plating I": "Upgraded Layered Coating I",
"'Grail' Layered Plating I": "Upgraded Layered Coating I",
"Limited Adaptive Nano Plating I": "Upgraded Multispectrum Coating I",
"'Collateral' Adaptive Nano Plating I": "Upgraded Multispectrum Coating I",
"'Refuge' Adaptive Nano Plating I": "Upgraded Multispectrum Coating I",
"Limited EM Plating I": "Upgraded EM Coating I",
"'Contour' EM Plating I": "Upgraded EM Coating I",
"'Spiegel' EM Plating I": "Upgraded EM Coating I",
"Limited Explosive Plating I": "Upgraded Explosive Coating I",
"Experimental Explosive Plating I": "Upgraded Explosive Coating I",
"'Aegis' Explosive Plating I": "Upgraded Explosive Coating I",
"Limited Kinetic Plating I": "Upgraded Kinetic Coating I",
"Experimental Kinetic Plating I": "Upgraded Kinetic Coating I",
"'Element' Kinetic Plating I": "Upgraded Kinetic Coating I",
"Limited Thermal Plating I": "Upgraded Thermal Coating I",
"Experimental Thermal Plating I": "Upgraded Thermal Coating I",
"Prototype Thermal Plating I": "Upgraded Thermal Coating I"
}

View File

@@ -586,7 +586,10 @@ enam: # mistype of "eanm"
- 'energized adaptive nano membrane'
anp:
- 'anp'
- 'adaptive nano plating'
- 'multispectrum coating'
plating:
- 'plating'
- 'coating'
rah:
- 'rah'
- 'reactive armor hardener'
@@ -806,11 +809,11 @@ damp:
- 'sd-\d00'
sd:
- '(^| )sd' # Checking only beginning of a word to remove unwanted spam
- 'remote sensor dampener'
- 'sensor dampener'
- '(targeting range|scan resolution) dampening script'
rsd:
- 'rsd'
- 'remote sensor dampener'
- 'sensor dampener'
- 'sd-\d00'
- '(targeting range|scan resolution) dampening script'

View File

@@ -721,8 +721,9 @@ class Market:
groupItems = set(group.items)
if hasattr(group, 'addItems'):
groupItems.update(group.addItems)
items = set(
[item for item in groupItems if self.getPublicityByItem(item) and self.getGroupByItem(item) == group])
items = set([
item for item in groupItems
if self.getPublicityByItem(item) and self.getGroupByItem(item) == group])
return items
def getItemsByMarketGroup(self, mg, vars_=True):

View File

@@ -1 +1 @@
__all__ = ['evemarketer', 'evepraisal', 'evemarketdata', 'fuzzwork']
__all__ = ['evemarketer', 'evepraisal', 'evemarketdata', 'fuzzwork', 'cevemarket']

View File

@@ -0,0 +1,89 @@
# =============================================================================
# Copyright (C) 2020 Copy Liu
#
# This file is part of pyfa.
#
# pyfa is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pyfa is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
from xml.dom import minidom
from logbook import Logger
from eos.saveddata.price import PriceStatus
from service.network import Network
from service.price import Price
pyfalog = Logger(__name__)
class CEveMarketBase:
@staticmethod
def fetchPrices(priceMap, fetchTimeout, system=None, serenity=False):
params = {'typeid': {typeID for typeID in priceMap}}
if system is not None:
params['usesystem'] = system
baseurl = 'https://www.ceve-market.org/api/marketstat' if serenity else 'https://www.ceve-market.org/tqapi/marketstat'
network = Network.getInstance()
data = network.get(url=baseurl, type=network.PRICES, params=params, timeout=fetchTimeout)
xml = minidom.parseString(data.text)
types = xml.getElementsByTagName('marketstat').item(0).getElementsByTagName('type')
# Cycle through all types we've got from request
for type_ in types:
# Get data out of each typeID details tree
typeID = int(type_.getAttribute('id'))
sell = type_.getElementsByTagName('sell').item(0)
# If price data wasn't there, skip the item
try:
percprice = float(sell.getElementsByTagName('percentile').item(0).firstChild.data)
except (TypeError, ValueError):
pyfalog.warning('Failed to get price for: {0}', type_)
continue
if percprice == 0 and system is not None:
continue
priceMap[typeID].update(PriceStatus.fetchSuccess, percprice)
del priceMap[typeID]
class CEveMarketTq(CEveMarketBase):
name = 'ceve-market.org (Tranquility)'
group = 'tranquility'
def __init__(self, priceMap, system, fetchTimeout):
# Try selected system first
self.fetchPrices(priceMap, max(2 * fetchTimeout / 3, 2), system, serenity=False)
# If price was not available - try globally
if priceMap:
self.fetchPrices(priceMap, max(fetchTimeout / 3, 2), serenity=False)
class CEveMarketCn(CEveMarketBase):
name = 'ceve-market.org (Serenity)'
group = 'serenity'
def __init__(self, priceMap, system, fetchTimeout):
# Try selected system first
self.fetchPrices(priceMap, max(2 * fetchTimeout / 3, 2), system, serenity=True)
# If price was not available - try globally
if priceMap:
self.fetchPrices(priceMap, max(fetchTimeout / 3, 2), serenity=True)
Price.register(CEveMarketCn)
Price.register(CEveMarketTq)

View File

@@ -32,6 +32,7 @@ pyfalog = Logger(__name__)
class EveMarketData:
name = 'eve-marketdata.com'
group = 'tranquility'
def __init__(self, priceMap, system, fetchTimeout):
# Try selected system first

View File

@@ -32,6 +32,7 @@ pyfalog = Logger(__name__)
class EveMarketer:
name = 'evemarketer'
group = 'tranquility'
def __init__(self, priceMap, system, fetchTimeout):
# Try selected system first

View File

@@ -38,6 +38,7 @@ systemAliases = {
class EvePraisal:
name = 'evepraisal'
group = 'tranquility'
def __init__(self, priceMap, system, fetchTimeout):
# Try selected system first

View File

@@ -39,6 +39,7 @@ locations = {
class FuzzworkMarket:
name = 'fuzzwork market'
group = 'tranquility'
def __init__(self, priceMap, system, fetchTimeout):
# Try selected system first

View File

@@ -56,7 +56,7 @@ INV_FLAG_DRONEBAY = 87
INV_FLAG_FIGHTER = 158
def exportESI(ofit, callback):
def exportESI(ofit, exportCharges, callback):
# A few notes:
# max fit name length is 50 characters
# Most keys are created simply because they are required, but bogus data is okay
@@ -72,7 +72,7 @@ def exportESI(ofit, callback):
# 2017/03/29 NOTE: "<" or "&lt;" is Ignored
# fit['description'] = "<pyfa:%d />" % ofit.ID
fit['description'] = ofit.notes[:397] + '...' if len(ofit.notes) > 400 else ofit.notes if ofit.notes is not None else ""
fit['description'] = "" if ofit.notes is None else ofit.notes[:397] + '...' if len(ofit.notes) > 400 else ofit.notes
fit['items'] = []
slotNum = {}
@@ -99,7 +99,7 @@ def exportESI(ofit, callback):
item['type_id'] = module.item.ID
fit['items'].append(item)
if module.charge:
if module.charge and exportCharges:
if module.chargeID not in charges:
charges[module.chargeID] = 0
# `or 1` because some charges (ie scripts) are without qty

View File

@@ -314,8 +314,8 @@ class Port:
return importESI(string)
@staticmethod
def exportESI(fit, callback=None):
return exportESI(fit, callback=callback)
def exportESI(fit, exportCharges, callback=None):
return exportESI(fit, exportCharges, callback=callback)
# XML-related methods
@staticmethod

View File

@@ -106,6 +106,9 @@ class Price:
# attempt to find user's selected price source, otherwise get first one
sourceAll = list(cls.sources.keys())
sourcePrimary = sFit.serviceFittingOptions["priceSource"] if sFit.serviceFittingOptions["priceSource"] in sourceAll else sourceAll[0]
# When we have picked primary source, make sure to include only sources from the same group to avoid fetching
# tranquility data for serenity or vice versa
sourceAll = list(n for n, s in cls.sources.items() if s.group == cls.sources[sourcePrimary].group)
# Format: {source name: timeout weight}
sources = {sourcePrimary: len(sourceAll)}
@@ -273,4 +276,4 @@ class PriceWorkerThread(threading.Thread):
# Import market sources only to initialize price source modules, they register on their own
from service.marketSources import evemarketer, evemarketdata, evepraisal, fuzzwork # noqa: E402
from service.marketSources import evemarketer, evemarketdata, evepraisal, fuzzwork, cevemarket # noqa: E402

View File

@@ -370,7 +370,8 @@ class EsiSettings:
"loginMode": 0,
"clientID": "",
"clientSecret": "",
"timeout": 60}
"timeout": 60,
"exportCharges": True}
self.settings = SettingsProvider.getInstance().getSettings(
"pyfaServiceEsiSettings",

View File

@@ -32497,6 +32497,46 @@
"published": 0,
"stackable": 1
},
"3050": {
"attributeID": 3050,
"dataType": 4,
"defaultValue": 2.0,
"description": "The amount of fleets needed for a single pvp filament match ",
"highIsGood": 0,
"name": "AmountOfFleetsPerMatch",
"published": 0,
"stackable": 0
},
"3051": {
"attributeID": 3051,
"categoryID": 17,
"dataType": 5,
"defaultValue": 1000.0,
"description": "The range players in fleet need to be within fleet member doing an action",
"displayName": "Area Effect Radius",
"displayNameID": 564554,
"highIsGood": 1,
"iconID": 1391,
"name": "FleetMemberPickupRadius",
"published": 1,
"stackable": 1,
"tooltipTitleID": 564555,
"unitID": 1
},
"3052": {
"attributeID": 3052,
"categoryID": 17,
"dataType": 4,
"defaultValue": 1.0,
"description": "Amount of players in fleet needed to be valid",
"displayName": "Number Of Ships required",
"displayNameID": 564556,
"highIsGood": 1,
"iconID": 1391,
"name": "FleetMembersNeeded",
"published": 1,
"stackable": 1
},
"3093": {
"attributeID": 3093,
"dataType": 4,

View File

@@ -44807,7 +44807,7 @@
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 5503,
"effectName": "eliteBonusCommandShipHeavyDroneTrackingCS2",
"effectName": "eliteBonusCommandShipDroneTrackingCS2",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
@@ -44819,7 +44819,7 @@
"modifiedAttributeID": 160,
"modifyingAttributeID": 999,
"operation": 6,
"skillTypeID": 3441
"skillTypeID": 3436
}
],
"propulsionChance": 0,
@@ -79064,5 +79064,167 @@
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8068": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8068,
"effectName": "shipShieldResistanceBonusMBC1",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 271,
"modifyingAttributeID": 748,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 274,
"modifyingAttributeID": 748,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 272,
"modifyingAttributeID": 748,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 273,
"modifyingAttributeID": 748,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8070": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8070,
"effectName": "eliteBonusCommandShipsHeavyHAMvelocityCS2",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 37,
"modifyingAttributeID": 999,
"operation": 6,
"skillTypeID": 3324
},
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 37,
"modifyingAttributeID": 999,
"operation": 6,
"skillTypeID": 25719
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8071": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8071,
"effectName": " eliteBonusCommandShipDroneRangeCS1",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "charID",
"func": "OwnerRequiredSkillModifier",
"modifiedAttributeID": 54,
"modifyingAttributeID": 1000,
"operation": 6,
"skillTypeID": 3436
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8072": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8072,
"effectName": "shipArmorResistanceBonusGBC2",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 267,
"modifyingAttributeID": 746,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 270,
"modifyingAttributeID": 746,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 268,
"modifyingAttributeID": 746,
"operation": 6
},
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 269,
"modifyingAttributeID": 746,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
},
"8073": {
"disallowAutoRepeat": 0,
"effectCategory": 0,
"effectID": 8073,
"effectName": "eliteBonusCommandShipShieldHPCS1",
"electronicChance": 0,
"isAssistance": 0,
"isOffensive": 0,
"isWarpSafe": 0,
"modifierInfo": [
{
"domain": "shipID",
"func": "ItemModifier",
"modifiedAttributeID": 263,
"modifyingAttributeID": 1000,
"operation": 6
}
],
"propulsionChance": 0,
"published": 0,
"rangeChance": 0
}
}

View File

@@ -2519,11 +2519,11 @@
"parentGroupID": 14
},
"540": {
"description": "Mechanically enhanced armor plating augmentation.",
"description": "Armor Resistance Coatings",
"descriptionID": 64722,
"hasTypes": 0,
"iconID": 1030,
"name": "Resistance Plating",
"name": "Armor Resistance Coatings",
"nameID": 65796,
"parentGroupID": 14
},
@@ -9060,11 +9060,11 @@
"parentGroupID": 214
},
"1544": {
"description": "Blueprints for Resistance Plating",
"description": "Blueprints for Armor Coatings",
"descriptionID": 281323,
"hasTypes": 1,
"iconID": 2703,
"name": "Resistance Plating",
"name": "Armor Coatings",
"nameID": 281322,
"parentGroupID": 214
},
@@ -9856,56 +9856,56 @@
"parentGroupID": 1659
},
"1665": {
"description": "Thermal Resistance Plating",
"description": "Thermal Coatings",
"descriptionID": 285353,
"hasTypes": 1,
"iconID": 1394,
"name": "Thermal Resistance Plating",
"name": "Thermal Coatings",
"nameID": 285352,
"parentGroupID": 540
},
"1666": {
"description": "Kinetic Resistance Plating",
"description": "Kinetic Coatings",
"descriptionID": 285355,
"hasTypes": 1,
"iconID": 1393,
"name": "Kinetic Resistance Plating",
"name": "Kinetic Coatings",
"nameID": 285354,
"parentGroupID": 540
},
"1667": {
"description": "Explosive Resistance Plating",
"description": "Explosive Coatings",
"descriptionID": 285357,
"hasTypes": 1,
"iconID": 1395,
"name": "Explosive Resistance Plating",
"name": "Explosive Coatings",
"nameID": 285356,
"parentGroupID": 540
},
"1668": {
"description": "EM Resistance Plating",
"description": "EM Coatings",
"descriptionID": 285359,
"hasTypes": 1,
"iconID": 1396,
"name": "EM Resistance Plating",
"name": "EM Coatings",
"nameID": 285358,
"parentGroupID": 540
},
"1669": {
"description": "Layered Plating",
"description": "Layered Armor Coatings",
"descriptionID": 285361,
"hasTypes": 1,
"iconID": 1030,
"name": "Layered Plating",
"name": "Layered Armor Coatings",
"nameID": 285360,
"parentGroupID": 14
},
"1670": {
"description": "Adaptive Resistance Plating",
"description": "Multispectrum Coatings",
"descriptionID": 285363,
"hasTypes": 1,
"iconID": 1030,
"name": "Adaptive Resistance Plating",
"name": "Multispectrum Coatings",
"nameID": 285362,
"parentGroupID": 540
},
@@ -15477,10 +15477,10 @@
"parentGroupID": 1031
},
"2480": {
"description": "Data found in Abyssal Deadspace",
"description": "Triglavian Data Storage Devices",
"descriptionID": 317920,
"hasTypes": 1,
"iconID": 2037,
"iconID": 21982,
"name": "Triglavian Data",
"nameID": 317919,
"parentGroupID": 19
@@ -16173,5 +16173,14 @@
"name": "Large",
"nameID": 564569,
"parentGroupID": 2741
},
"2747": {
"description": "Filaments that connect to the Abyssal Proving Grounds for limited time PVP events.",
"descriptionID": 567625,
"hasTypes": 1,
"iconID": 21925,
"name": "Proving Ground Filaments",
"nameID": 567624,
"parentGroupID": 2456
}
}

View File

@@ -728,7 +728,7 @@
"3394": 4
},
"1292": {
"3392": 1
"3392": 2
},
"1294": {
"3394": 1
@@ -25573,5 +25573,56 @@
},
"55700": {
"3402": 1
},
"55747": {
"3402": 1
},
"55803": {
"3402": 1
},
"55804": {
"3402": 1
},
"55805": {
"3402": 1
},
"55806": {
"3402": 1
},
"55826": {
"3402": 1
},
"55859": {
"3402": 1
},
"55927": {
"3402": 1
},
"55928": {
"3402": 1
},
"55929": {
"3402": 1
},
"55942": {
"3402": 1
},
"55943": {
"3402": 1
},
"55944": {
"3402": 1
},
"55945": {
"3402": 1
},
"55946": {
"3402": 1
},
"55947": {
"3402": 1
},
"55977": {
"3402": 1
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -4646,7 +4646,7 @@
"groupName": "Money",
"groupNameID": 63592,
"iconID": 21,
"published": false,
"published": true,
"useBasePrice": false
},
"170": {
@@ -7177,7 +7177,7 @@
"groupName": "Triglavian Data",
"groupNameID": 536625,
"published": true,
"useBasePrice": false
"useBasePrice": true
},
"1996": {
"anchorable": false,
@@ -9567,6 +9567,17 @@
"published": false,
"useBasePrice": false
},
"4050": {
"anchorable": false,
"anchored": false,
"categoryID": 17,
"fittableNonSingleton": false,
"groupID": 4050,
"groupName": "Abyssal Proving Filaments",
"groupNameID": 559431,
"published": true,
"useBasePrice": false
},
"4052": {
"anchorable": false,
"anchored": false,
@@ -9631,7 +9642,7 @@
"groupID": 4060,
"groupName": "Vorton Projector",
"groupNameID": 563701,
"published": false,
"published": true,
"useBasePrice": false
},
"4061": {
@@ -9642,7 +9653,7 @@
"groupID": 4061,
"groupName": "Advanced Condenser Pack",
"groupNameID": 563793,
"published": false,
"published": true,
"useBasePrice": false
},
"4062": {
@@ -9653,7 +9664,7 @@
"groupID": 4062,
"groupName": "Condenser Pack",
"groupNameID": 563792,
"published": false,
"published": true,
"useBasePrice": false
},
"4064": {
@@ -9664,7 +9675,7 @@
"groupID": 4064,
"groupName": "Vorton Projector Blueprint",
"groupNameID": 564057,
"published": false,
"published": true,
"useBasePrice": false
},
"4065": {
@@ -9675,7 +9686,7 @@
"groupID": 4065,
"groupName": "Condenser Pack Blueprint",
"groupNameID": 564058,
"published": false,
"published": true,
"useBasePrice": false
},
"4066": {
@@ -9686,7 +9697,7 @@
"groupID": 4066,
"groupName": "Advanced Condenser Pack Blueprint",
"groupNameID": 564059,
"published": false,
"published": true,
"useBasePrice": false
},
"4067": {
@@ -9697,7 +9708,7 @@
"groupID": 4067,
"groupName": "Vorton Projector Upgrade",
"groupNameID": 564488,
"published": false,
"published": true,
"useBasePrice": false
},
"4069": {
@@ -9708,7 +9719,7 @@
"groupID": 4069,
"groupName": "Vorton Projector Upgrade Blueprints",
"groupNameID": 564489,
"published": false,
"published": true,
"useBasePrice": false
},
"407": {
@@ -9756,6 +9767,18 @@
"published": true,
"useBasePrice": false
},
"4073": {
"anchorable": false,
"anchored": true,
"categoryID": 11,
"fittableNonSingleton": false,
"groupID": 4073,
"groupName": "Temporary Collidable Structure",
"groupNameID": 567507,
"iconID": 0,
"published": false,
"useBasePrice": false
},
"408": {
"anchorable": false,
"anchored": false,

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,10 @@
[
{
"field_name": "client_build",
"field_value": 1748920
"field_value": 1777281
},
{
"field_name": "dump_time",
"field_value": 1592209279
"field_value": 1595924073
}
]

View File

@@ -73,8 +73,8 @@
"text": "bonus to Heavy Missile and Heavy Assault Missile Launcher rate of fire"
},
{
"number": "5%",
"text": "bonus to Heavy Missile and Heavy Assault Missile explosion velocity"
"number": "10%",
"text": "bonus to Heavy Missile and Heavy Assault Missile velocity"
},
{
"number": "3%",
@@ -90,8 +90,8 @@
"text": "bonus to Heavy Missile and Heavy Assault Missile Launcher rate of fire"
},
{
"number": "7.5%",
"text": "bonus to Shield Booster amount"
"number": "4%",
"text": "bonus to all shield resistances"
}
],
"header": "Minmatar Battlecruiser bonuses (per skill level):"
@@ -120,10 +120,6 @@
"bonuses": [
{
"text": "·Can use two Command Burst modules"
},
{
"number": "100%",
"text": "bonus to Command Burst area of effect range"
}
],
"header": "Role Bonus:"
@@ -140,7 +136,7 @@
"text": "bonus to Medium Hybrid Turret falloff"
},
{
"number": "3%",
"number": "4%",
"text": "bonus to Armored Command and Skirmish Command burst strength and duration"
}
],
@@ -5994,10 +5990,6 @@
"bonuses": [
{
"text": "·Can use two Command Burst modules"
},
{
"number": "100%",
"text": "bonus to Command Burst area of effect range"
}
],
"header": "Role Bonus:"
@@ -6006,7 +5998,7 @@
{
"bonuses": [
{
"number": "7.5%",
"number": "10%",
"text": "bonus to Heavy Missile and Heavy Assault Missile Launcher rate of fire"
},
{
@@ -6014,7 +6006,7 @@
"text": "bonus to Heavy Missile and Heavy Assault Missile explosion radius"
},
{
"number": "3%",
"number": "4%",
"text": "bonus to Shield Command and Information Command burst strength and duration"
}
],
@@ -8945,11 +8937,11 @@
"bonuses": [
{
"number": "7.5%",
"text": "bonus to Heavy Drone max velocity and tracking speed"
"text": "bonus to Drone tracking speed"
},
{
"number": "7.5%",
"text": "bonus to Medium Hybrid Turret tracking speed"
"number": "10%",
"text": "bonus to Drone optimal range"
},
{
"number": "3%",
@@ -8965,8 +8957,8 @@
"text": "bonus to Drone hitpoints and damage"
},
{
"number": "7.5%",
"text": "bonus to Armor Repairer amount"
"number": "4%",
"text": "bonus to all armor resistances"
}
],
"header": "Gallente Battlecruiser bonuses (per skill level):"
@@ -8981,10 +8973,6 @@
"bonuses": [
{
"text": "·Can use two Command Burst modules"
},
{
"number": "100%",
"text": "bonus to Command Burst area of effect range"
}
],
"header": "Role Bonus:"
@@ -9001,7 +8989,7 @@
"text": "bonus to Medium Projectile Turret falloff"
},
{
"number": "3%",
"number": "4%",
"text": "bonus to Shield Command and Skirmish Command burst strength and duration"
}
],
@@ -9043,7 +9031,7 @@
"bonuses": [
{
"number": "10%",
"text": "bonus to Medium Hybrid Turret optimal range"
"text": "bonus to shield hitpoints"
},
{
"number": "10%",
@@ -9079,10 +9067,6 @@
"bonuses": [
{
"text": "·Can use two Command Burst modules"
},
{
"number": "100%",
"text": "bonus to Command Burst area of effect range"
}
],
"header": "Role Bonus:"
@@ -9099,7 +9083,7 @@
"text": "bonus to Medium Energy Turret rate of fire"
},
{
"number": "3%",
"number": "4%",
"text": "bonus to Armored Command and Information Command burst strength and duration"
}
],

View File

@@ -1 +1 @@
version: v2.22.0
version: v2.24.0