diff --git a/README.md b/README.md index 94fe0fc6c..762cbac58 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # pyfa +[![Join the chat at https://gitter.im/pyfa-org/Pyfa](https://badges.gitter.im/pyfa-org/Pyfa.svg)](https://gitter.im/pyfa-org/Pyfa?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + ![pyfa](https://cloud.githubusercontent.com/assets/3904767/10271512/af385ef2-6ade-11e5-8f67-52b8b1e4c797.PNG) ## What is it? @@ -12,16 +14,24 @@ The latest version along with release notes can always be found on the projects ## Installing Windows and OS X users are supplied self-contained builds of pyfa that can be run without additional software. An `.exe` installer is also available for the Windows builds. There is no self-contained package for Linux users, which are expected to run pyfa through their distributions Python interpreter. However, there are a number of third-party packages available that handle the dependencies and updates for pyfa (for example, [pyfa for Arch Linux](https://aur.archlinux.org/packages/pyfa/)). Please check your distributions repositories. -## Requirements +### Requirements If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required: -* Python >= 2.6 +* Python 2.7 * `wxPython` 2.8/3.0 * `sqlalchemy` >= 0.6 * `dateutil` * `matplotlib` (for some Linux distributions, you may need to install separate wxPython bindings, such as `python-matplotlib-wx`) * `requests` +### Linux Distro-specific Packages +The following is a list of pyfa packages available for certain distros. Please note that these packages are maintained by third-parties and are not evaluated by the pyfa developers. + +* Debian/Ubuntu/derivitives: https://github.com/AdamMajer/Pyfa/releases +* Arch: https://aur.archlinux.org/packages/pyfa/ +* openSUSE: https://build.opensuse.org/package/show/home:rmk2/pyfa +* FreeBSD: http://www.freshports.org/games/pyfa/ (see #484 for instructions) + ## Bug Reporting The preferred method of reporting bugs is through the projects GitHub Issues interface. Alternatively, posting a report in the pyfa thread on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting). diff --git a/config.py b/config.py index 0489f1110..6ac9ae32c 100644 --- a/config.py +++ b/config.py @@ -18,10 +18,10 @@ debug = False saveInRoot = False # Version data -version = "1.16.2" +version = "1.20.0" tag = "Stable" -expansionName = "Parallax" -expansionVersion = "1.1" +expansionName = "March 2016" +expansionVersion = "1.0" evemonMinVersion = "4081" pyfaPath = None @@ -60,7 +60,7 @@ def __createDirs(path): if not os.path.exists(path): os.makedirs(path) -def defPaths(): +def defPaths(customSavePath): global debug global pyfaPath global savePath @@ -87,13 +87,17 @@ def defPaths(): else: savePath = getattr(configforced, "savePath", None) if savePath is None: - savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")), + if customSavePath is None: # customSavePath is not overriden + savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")), sys.getfilesystemencoding()) + else: + savePath = customSavePath __createDirs(savePath) if isFrozen(): os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem") + os.environ["SSL_CERT_FILE"] = os.path.join(pyfaPath, "cacert.pem") format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s' logging.basicConfig(format=format, level=logLevel) diff --git a/eos/db/migrations/upgrade11.py b/eos/db/migrations/upgrade11.py new file mode 100644 index 000000000..7265e064a --- /dev/null +++ b/eos/db/migrations/upgrade11.py @@ -0,0 +1,116 @@ +""" +Migration 11 + +- Converts modules based on December Release 2015 Tiericide + Some modules have been unpublished (and unpublished module attributes are removed + from database), which causes pyfa to crash. We therefore replace these + modules with their new replacements +""" + + +CONVERSIONS = { + 16467: ( # Medium Gremlin Compact Energy Neutralizer + 16471, # Medium Unstable Power Fluctuator I + ), + 22947: ( # 'Beatnik' Small Remote Armor Repairer + 23414, # 'Brotherhood' Small Remote Armor Repairer + ), + 8295: ( # Type-D Restrained Shield Flux Coil + 8293, # Beta Reactor Control: Shield Flux I + ), + 16499: ( # Heavy Knave Scoped Energy Nosferatu + 16501, # E500 Prototype Energy Vampire + ), + 16477: ( # Heavy Infectious Scoped Energy Neutralizer + 16473, # Heavy Rudimentary Energy Destabilizer I + ), + 16475: ( # Heavy Gremlin Compact Energy Neutralizer + 16479, # Heavy Unstable Power Fluctuator I + ), + 16447: ( # Medium Solace Scoped Remote Armor Repairer + 16445, # Medium 'Arup' Remote Armor Repairer + ), + 508: ( # 'Basic' Shield Flux Coil + 8325, # Alpha Reactor Shield Flux + 8329, # Marked Generator Refitting: Shield Flux + 8323, # Partial Power Plant Manager: Shield Flux + 8327, # Type-E Power Core Modification: Shield Flux + ), + 1419: ( # 'Basic' Shield Power Relay + 8341, # Alpha Reactor Shield Power Relay + 8345, # Marked Generator Refitting: Shield Power Relay + 8339, # Partial Power Plant Manager: Shield Power Relay + 8343, # Type-E Power Core Modification: Shield Power Relay + ), + 16439: ( # Small Solace Scoped Remote Armor Repairer + 16437, # Small 'Arup' Remote Armor Repairer + ), + 16505: ( # Medium Ghoul Compact Energy Nosferatu + 16511, # Medium Diminishing Power System Drain I + ), + 8297: ( # Mark I Compact Shield Flux Coil + 8291, # Local Power Plant Manager: Reaction Shield Flux I + ), + 16455: ( # Large Solace Scoped Remote Armor Repairer + 16453, # Large 'Arup' Remote Armor Repairer + ), + 6485: ( # M51 Benefactor Compact Shield Recharger + 6491, # Passive Barrier Compensator I + 6489, # 'Benefactor' Ward Reconstructor + 6487, # Supplemental Screen Generator I + ), + 5137: ( # Small Knave Scoped Energy Nosferatu + 5135, # E5 Prototype Energy Vampire + ), + 8579: ( # Medium Murky Compact Remote Shield Booster + 8581, # Medium 'Atonement' Remote Shield Booster + ), + 8531: ( # Small Murky Compact Remote Shield Booster + 8533, # Small 'Atonement' Remote Shield Booster + ), + 16497: ( # Heavy Ghoul Compact Energy Nosferatu + 16503, # Heavy Diminishing Power System Drain I + ), + 4477: ( # Small Gremlin Compact Energy Neutralizer + 4475, # Small Unstable Power Fluctuator I + ), + 8337: ( # Mark I Compact Shield Power Relay + 8331, # Local Power Plant Manager: Reaction Shield Power Relay I + ), + 23416: ( # 'Peace' Large Remote Armor Repairer + 22951, # 'Pacifier' Large Remote Armor Repairer + ), + 5141: ( # Small Ghoul Compact Energy Nosferatu + 5139, # Small Diminishing Power System Drain I + ), + 4471: ( # Small Infectious Scoped Energy Neutralizer + 4473, # Small Rudimentary Energy Destabilizer I + ), + 16469: ( # Medium Infectious Scoped Energy Neutralizer + 16465, # Medium Rudimentary Energy Destabilizer I + ), + 8335: ( # Type-D Restrained Shield Power Relay + 8333, # Beta Reactor Control: Shield Power Relay I + ), + 405: ( # 'Micro' Remote Shield Booster + 8631, # Micro Asymmetric Remote Shield Booster + 8627, # Micro Murky Remote Shield Booster + 8629, # Micro 'Atonement' Remote Shield Booster + 8633, # Micro S95a Remote Shield Booster + ), + 8635: ( # Large Murky Compact Remote Shield Booster + 8637, # Large 'Atonement' Remote Shield Booster + ), + 16507: ( # Medium Knave Scoped Energy Nosferatu + 16509, # E50 Prototype Energy Vampire + ), +} + +def upgrade(saveddata_engine): + + # Convert modules + for replacement_item, list in CONVERSIONS.iteritems(): + for retired_item in list: + saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) + saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) + diff --git a/eos/db/migrations/upgrade12.py b/eos/db/migrations/upgrade12.py new file mode 100644 index 000000000..dc0eee511 --- /dev/null +++ b/eos/db/migrations/upgrade12.py @@ -0,0 +1,340 @@ +""" +Migration 12 + +- Converts modules based on March 2016 Module Tiericide + Some modules have been unpublished (and unpublished module attributes are removed + from database), which causes pyfa to crash. We therefore replace these + modules with their new replacements +""" + + +CONVERSIONS = { + 16457: ( # Crosslink Compact Ballistic Control System + 16459, # Muon Coil Bolt Array I + 16461, # Multiphasic Bolt Array I + 16463, # 'Pandemonium' Ballistic Enhancement + ), + 5281: ( # Coadjunct Scoped Remote Sensor Booster + 7218, # Piercing ECCM Emitter I + ), + 5365: ( # Cetus Scoped Burst Jammer + 5359, # 1Z-3 Subversive ECM Eruption + ), + 1973: ( # Sensor Booster I + 1947, # ECCM - Radar I + 2002, # ECCM - Ladar I + 2003, # ECCM - Magnetometric I + 2004, # ECCM - Gravimetric I + 2005, # ECCM - Omni I + ), + 1951: ( # 'Basic' Tracking Enhancer + 6322, # Beta-Nought Tracking Mode + 6323, # Azimuth Descalloping Tracking Enhancer + 6324, # F-AQ Delay-Line Scan Tracking Subroutines + 6321, # Beam Parallax Tracking Program + ), + 521: ( # 'Basic' Damage Control + 5829, # GLFF Containment Field + 5831, # Interior Force Field Array + 5835, # F84 Local Damage System + 5833, # Systematic Damage Control + ), + 22925: ( # 'Bootleg' Remote Sensor Booster + 22939, # 'Boss' Remote Sensor Booster + 22941, # 'Entrepreneur' Remote Sensor Booster + ), + 5443: ( # Faint Epsilon Scoped Warp Scrambler + 5441, # Fleeting Progressive Warp Scrambler I + ), + 1963: ( # Remote Sensor Booster I + 1959, # ECCM Projector I + ), + 6325: ( # Fourier Compact Tracking Enhancer + 6326, # Sigma-Nought Tracking Mode I + 6327, # Auto-Gain Control Tracking Enhancer I + 6328, # F-aQ Phase Code Tracking Subroutines + ), + 21486: ( # 'Kindred' Gyrostabilizer + 21488, # Monophonic Stabilization Actuator I + ), + 19927: ( # Hypnos Scoped Magnetometric ECM + 9518, # Initiated Ion Field ECM I + ), + 10188: ( # 'Basic' Magnetic Field Stabilizer + 11111, # Insulated Stabilizer Array + 11109, # Linear Flux Stabilizer + 11115, # Gauss Field Balancer + 11113, # Magnetic Vortex Stabilizer + ), + 22919: ( # 'Monopoly' Magnetic Field Stabilizer + 22917, # 'Capitalist' Magnetic Field Stabilizer I + ), + 5839: ( # IFFA Compact Damage Control + 5841, # Emergency Damage Control I + 5843, # F85 Peripheral Damage System I + 5837, # Pseudoelectron Containment Field I + ), + 522: ( # 'Micro' Cap Battery + 4747, # Micro Ld-Acid Capacitor Battery I + 4751, # Micro Ohm Capacitor Reserve I + 4745, # Micro F-4a Ld-Sulfate Capacitor Charge Unit + 4749, # Micro Peroxide Capacitor Power Cell + 3480, # Micro Capacitor Battery II + ), + 518: ( # 'Basic' Gyrostabilizer + 5915, # Lateral Gyrostabilizer + 5919, # F-M2 Weapon Inertial Suspensor + 5913, # Hydraulic Stabilization Actuator + 5917, # Stabilized Weapon Mounts + ), + 19931: ( # Compulsive Scoped Multispectral ECM + 19933, # 'Hypnos' Multispectral ECM I + ), + 5403: ( # Faint Scoped Warp Disruptor + 5401, # Fleeting Warp Disruptor I + ), + 23902: ( # 'Trebuchet' Heat Sink I + 23900, # 'Mangonel' Heat Sink I + ), + 1893: ( # 'Basic' Heat Sink + 5845, # Heat Exhaust System + 5856, # C3S Convection Thermal Radiator + 5855, # 'Boreas' Coolant System + 5854, # Stamped Heat Sink + ), + 6160: ( # F-90 Compact Sensor Booster + 20214, # Extra Radar ECCM Scanning Array I + 20220, # Extra Ladar ECCM Scanning Array I + 20226, # Extra Gravimetric ECCM Scanning Array I + 20232, # Extra Magnetometric ECCM Scanning Array I + 7948, # Gravimetric Positional ECCM Sensor System I + 7964, # Radar Positional ECCM Sensor System I + 7965, # Omni Positional ECCM Sensor System I + 7966, # Ladar Positional ECCM Sensor System I + 7970, # Magnetometric Positional ECCM Sensor System I + 20218, # Conjunctive Radar ECCM Scanning Array I + 20224, # Conjunctive Ladar ECCM Scanning Array I + 20230, # Conjunctive Gravimetric ECCM Scanning Array I + 20236, # Conjunctive Magnetometric ECCM Scanning Array I + 6157, # Supplemental Scanning CPU I + ), + 23418: ( # 'Radical' Damage Control + 22893, # 'Gonzo' Damage Control I + ), + 19952: ( # Umbra Scoped Radar ECM + 9520, # 'Penumbra' White Noise ECM + ), + 1952: ( # Sensor Booster II + 2258, # ECCM - Omni II + 2259, # ECCM - Gravimetric II + 2260, # ECCM - Ladar II + 2261, # ECCM - Magnetometric II + 2262, # ECCM - Radar II + ), + 5282: ( # Linked Enduring Sensor Booster + 7219, # Scattering ECCM Projector I + ), + 1986: ( # Signal Amplifier I + 2579, # Gravimetric Backup Array I + 2583, # Ladar Backup Array I + 2587, # Magnetometric Backup Array I + 2591, # Multi Sensor Backup Array I + 4013, # RADAR Backup Array I + ), + 4871: ( # Large Compact Pb-Acid Cap Battery + 4875, # Large Ohm Capacitor Reserve I + 4869, # Large F-4a Ld-Sulfate Capacitor Charge Unit + 4873, # Large Peroxide Capacitor Power Cell + ), + 1964: ( # Remote Sensor Booster II + 1960, # ECCM Projector II + ), + 5933: ( # Counterbalanced Compact Gyrostabilizer + 5931, # Cross-Lateral Gyrostabilizer I + 5935, # F-M3 Munition Inertial Suspensor + 5929, # Pneumatic Stabilization Actuator I + ), + 4025: ( # X5 Enduring Stasis Webifier + 4029, # 'Langour' Drive Disruptor I + ), + 4027: ( # Fleeting Compact Stasis Webifier + 4031, # Patterned Stasis Web I + ), + 22937: ( # 'Enterprise' Remote Tracking Computer + 22935, # 'Tycoon' Remote Tracking Computer + ), + 22929: ( # 'Marketeer' Tracking Computer + 22927, # 'Economist' Tracking Computer I + ), + 1987: ( # Signal Amplifier II + 2580, # Gravimetric Backup Array II + 2584, # Ladar Backup Array II + 2588, # Magnetometric Backup Array II + 2592, # Multi Sensor Backup Array II + 4014, # RADAR Backup Array II + ), + 19939: ( # Enfeebling Scoped Ladar ECM + 9522, # Faint Phase Inversion ECM I + ), + 5340: ( # P-S Compact Remote Tracking Computer + 5341, # 'Prayer' Remote Tracking Computer + ), + 19814: ( # Phased Scoped Target Painter + 19808, # Partial Weapon Navigation + ), + 1949: ( # 'Basic' Signal Amplifier + 1946, # Basic RADAR Backup Array + 1982, # Basic Ladar Backup Array + 1983, # Basic Gravimetric Backup Array + 1984, # Basic Magnetometric Backup Array + 1985, # Basic Multi Sensor Backup Array + 6193, # Emergency Magnetometric Scanners + 6194, # Emergency Multi-Frequency Scanners + 6202, # Emergency RADAR Scanners + 6216, # Emergency Ladar Scanners + 6217, # Emergency Gravimetric Scanners + 6225, # Sealed RADAR Backup Cluster + 6238, # Sealed Magnetometric Backup Cluster + 6239, # Sealed Multi-Frequency Backup Cluster + 6241, # Sealed Ladar Backup Cluster + 6242, # Sealed Gravimetric Backup Cluster + 6257, # Surplus RADAR Reserve Array + 6258, # F-42 Reiterative RADAR Backup Sensors + 6283, # Surplus Magnetometric Reserve Array + 6284, # F-42 Reiterative Magnetometric Backup Sensors + 6285, # Surplus Multi-Frequency Reserve Array + 6286, # F-42 Reiterative Multi-Frequency Backup Sensors + 6289, # Surplus Ladar Reserve Array + 6290, # F-42 Reiterative Ladar Backup Sensors + 6291, # Surplus Gravimetric Reserve Array + 6292, # F-42 Reiterative Gravimetric Backup Sensors + 6309, # Amplitude Signal Enhancer + 6310, # 'Acolyth' Signal Booster + 6311, # Type-E Discriminative Signal Augmentation + 6312, # F-90 Positional Signal Amplifier + ), + 21527: ( # 'Firewall' Signal Amplifier + 21521, # Gravimetric Firewall + 21523, # Ladar Firewall + 21525, # Magnetometric Firewall + 21527, # Multi Sensor Firewall + 21529, # RADAR Firewall + ), + 23416: ( # 'Peace' Large Remote Armor Repairer + None, # 'Pacifier' Large Remote Armor Repairer + ), + 6176: ( # F-12 Enduring Tracking Computer + 6174, # Monopulse Tracking Mechanism I + ), + 6159: ( # Alumel-Wired Enduring Sensor Booster + 7917, # Alumel Radar ECCM Sensor Array I + 7918, # Alumel Ladar ECCM Sensor Array I + 7922, # Alumel Gravimetric ECCM Sensor Array I + 7926, # Alumel Omni ECCM Sensor Array I + 7937, # Alumel Magnetometric ECCM Sensor Array I + 7867, # Supplemental Ladar ECCM Scanning Array I + 7869, # Supplemental Gravimetric ECCM Scanning Array I + 7870, # Supplemental Omni ECCM Scanning Array I + 7887, # Supplemental Radar ECCM Scanning Array I + 7889, # Supplemental Magnetometric ECCM Scanning Array I + 20216, # Incremental Radar ECCM Scanning Array I + 20222, # Incremental Ladar ECCM Scanning Array I + 20228, # Incremental Gravimetric ECCM Scanning Array I + 20234, # Incremental Magnetometric ECCM Scanning Array I + 7892, # Prototype ECCM Radar Sensor Cluster + 7893, # Prototype ECCM Ladar Sensor Cluster + 7895, # Prototype ECCM Gravimetric Sensor Cluster + 7896, # Prototype ECCM Omni Sensor Cluster + 7914, # Prototype ECCM Magnetometric Sensor Cluster + 6158, # Prototype Sensor Booster + ), + 5849: ( # Extruded Compact Heat Sink + 5846, # Thermal Exhaust System I + 5858, # C4S Coiled Circuit Thermal Radiator + 5857, # 'Skadi' Coolant System I + ), + 22895: ( # 'Shady' Sensor Booster + 22897, # 'Forger' ECCM - Magnetometric I + ), + 11105: ( # Vortex Compact Magnetic Field Stabilizer + 11103, # Insulated Stabilizer Array I + 11101, # Linear Flux Stabilizer I + 11107, # Gauss Field Balancer I + ), + 22945: ( # 'Executive' Remote Sensor Dampener + 22943, # 'Broker' Remote Sensor Dampener I + ), + 6173: ( # Optical Compact Tracking Computer + 6175, # 'Orion' Tracking CPU I + ), + 5279: ( # F-23 Compact Remote Sensor Booster + 7217, # Spot Pulsing ECCM I + 7220, # Phased Muon ECCM Caster I + 5280, # Connected Remote Sensor Booster + ), + 4787: ( # Small Compact Pb-Acid Cap Battery + 4791, # Small Ohm Capacitor Reserve I + 4785, # Small F-4a Ld-Sulfate Capacitor Charge Unit + 4789, # Small Peroxide Capacitor Power Cell + ), + 19946: ( # BZ-5 Scoped Gravimetric ECM + 9519, # FZ-3 Subversive Spatial Destabilizer ECM + ), + 6073: ( # Medium Compact Pb-Acid Cap Battery + 6097, # Medium Ohm Capacitor Reserve I + 6111, # Medium F-4a Ld-Sulfate Capacitor Charge Unit + 6083, # Medium Peroxide Capacitor Power Cell + ), + 21484: ( # 'Full Duplex' Ballistic Control System + 21482, # Ballistic 'Purge' Targeting System I + ), + 6296: ( # F-89 Compact Signal Amplifier + 6218, # Protected Gravimetric Backup Cluster I + 6222, # Protected Ladar Backup Cluster I + 6226, # Protected Magnetometric Backup Cluster I + 6230, # Protected Multi-Frequency Backup Cluster I + 6234, # Protected RADAR Backup Cluster I + 6195, # Reserve Gravimetric Scanners + 6199, # Reserve Ladar Scanners + 6203, # Reserve Magnetometric Scanners + 6207, # Reserve Multi-Frequency Scanners + 6212, # Reserve RADAR Scanners + 20238, # Secure Gravimetric Backup Cluster I + 20244, # Secure Ladar Backup Cluster I + 20250, # Secure Magnetometric Backup Cluster I + 20260, # Secure Radar Backup Cluster I + 6244, # F-43 Repetitive Gravimetric Backup Sensors + 6252, # F-43 Repetitive Ladar Backup Sensors + 6260, # F-43 Repetitive Magnetometric Backup Sensors + 6268, # F-43 Repetitive Multi-Frequency Backup Sensors + 6276, # F-43 Repetitive RADAR Backup Sensors + 20240, # Shielded Gravimetric Backup Cluster I + 20246, # Shielded Ladar Backup Cluster I + 20252, # Shielded Magnetometric Backup Cluster I + 20262, # Shielded Radar Backup Cluster I + 6243, # Surrogate Gravimetric Reserve Array I + 6251, # Surrogate Ladar Reserve Array I + 6259, # Surrogate Magnetometric Reserve Array I + 6267, # Surrogate Multi-Frequency Reserve Array I + 6275, # Surrogate RADAR Reserve Array I + 20242, # Warded Gravimetric Backup Cluster I + 20248, # Warded Ladar Backup Cluster I + 20254, # Warded Magnetometric Backup Cluster I + 20264, # Warded Radar Backup Cluster I + 6294, # 'Mendicant' Signal Booster I + 6293, # Wavelength Signal Enhancer I + 6295, # Type-D Attenuation Signal Augmentation + ), + 5302: ( # Phased Muon Scoped Sensor Dampener + 5300, # Indirect Scanning Dampening Unit I + ), +} + +def upgrade(saveddata_engine): + + # Convert modules + for replacement_item, list in CONVERSIONS.iteritems(): + for retired_item in list: + saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) + saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item)) + diff --git a/eos/effectHandlerHelpers.py b/eos/effectHandlerHelpers.py index eca4d6437..7f19c4382 100644 --- a/eos/effectHandlerHelpers.py +++ b/eos/effectHandlerHelpers.py @@ -131,6 +131,10 @@ class HandledModuleList(HandledList): self.remove(mod) return + # fix for #529, where a module may be in incorrect state after CCP changes mechanics of module + if not mod.isValidState(mod.state): + mod.state = eos.types.State.ONLINE + mod.position = len(self) HandledList.append(self, mod) if mod.isInvalid: diff --git a/eos/effects/ammoinfluencecapneed.py b/eos/effects/ammoinfluencecapneed.py index c9c0392f4..ea49d1f40 100644 --- a/eos/effects/ammoinfluencecapneed.py +++ b/eos/effects/ammoinfluencecapneed.py @@ -1,7 +1,7 @@ # ammoInfluenceCapNeed # # Used by: -# Items from category: Charge (458 of 831) +# Items from category: Charge (458 of 851) type = "passive" def handler(fit, module, context): # Dirty hack to work around cap charges setting cap booster diff --git a/eos/effects/ammoinfluencerange.py b/eos/effects/ammoinfluencerange.py index ba42613de..8aae01faa 100644 --- a/eos/effects/ammoinfluencerange.py +++ b/eos/effects/ammoinfluencerange.py @@ -1,7 +1,7 @@ # ammoInfluenceRange # # Used by: -# Items from category: Charge (559 of 831) +# Items from category: Charge (559 of 851) type = "passive" def handler(fit, module, context): module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier")) \ No newline at end of file diff --git a/eos/effects/armorallrepairsystemsamountbonuspassive.py b/eos/effects/armorallrepairsystemsamountbonuspassive.py index 315064b2e..18623844f 100644 --- a/eos/effects/armorallrepairsystemsamountbonuspassive.py +++ b/eos/effects/armorallrepairsystemsamountbonuspassive.py @@ -2,6 +2,7 @@ # # Used by: # Implants named like: Exile Booster (4 of 4) +# Implant: Antipharmakon Kosybo type = "passive" def handler(fit, booster, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Capital Repair Systems"), diff --git a/eos/effects/armorrepairprojectorfalloffbonus.py b/eos/effects/armorrepairprojectorfalloffbonus.py new file mode 100644 index 000000000..fc9ab14f3 --- /dev/null +++ b/eos/effects/armorrepairprojectorfalloffbonus.py @@ -0,0 +1,11 @@ +# armorRepairProjectorFalloffBonus +# +# Used by: +# Variations of ship: Navitas (2 of 2) +# Ship: Augoror +# Ship: Deacon +# Ship: Exequror +# Ship: Inquisitor +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", "falloffEffectiveness", src.getModifiedItemAttr("falloffBonus")) diff --git a/eos/effects/armorrepairprojectormaxrangebonus.py b/eos/effects/armorrepairprojectormaxrangebonus.py index 036b98484..e972a1afd 100644 --- a/eos/effects/armorrepairprojectormaxrangebonus.py +++ b/eos/effects/armorrepairprojectormaxrangebonus.py @@ -1,10 +1,11 @@ # armorRepairProjectorMaxRangeBonus # # Used by: +# Variations of ship: Navitas (2 of 2) # Ship: Augoror +# Ship: Deacon # Ship: Exequror # Ship: Inquisitor -# Ship: Navitas type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", diff --git a/eos/effects/boosterarmorhppenalty.py b/eos/effects/boosterarmorhppenalty.py index 0d3a3ea05..836b419da 100644 --- a/eos/effects/boosterarmorhppenalty.py +++ b/eos/effects/boosterarmorhppenalty.py @@ -1,7 +1,7 @@ # boosterArmorHpPenalty # # Used by: -# Implants from group: Booster (12 of 37) +# Implants from group: Booster (12 of 42) type = "boosterSideEffect" def handler(fit, booster, context): fit.ship.boostItemAttr("armorHP", booster.getModifiedItemAttr("boosterArmorHPPenalty")) diff --git a/eos/effects/boosterarmorrepairamountpenalty.py b/eos/effects/boosterarmorrepairamountpenalty.py index 4e3bb0738..06f365339 100644 --- a/eos/effects/boosterarmorrepairamountpenalty.py +++ b/eos/effects/boosterarmorrepairamountpenalty.py @@ -1,7 +1,7 @@ # boosterArmorRepairAmountPenalty # # Used by: -# Implants from group: Booster (9 of 37) +# Implants from group: Booster (9 of 42) type = "boosterSideEffect" def handler(fit, booster, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit", diff --git a/eos/effects/boostermaxvelocitypenalty.py b/eos/effects/boostermaxvelocitypenalty.py index 6a2be21a3..23f3ca1bc 100644 --- a/eos/effects/boostermaxvelocitypenalty.py +++ b/eos/effects/boostermaxvelocitypenalty.py @@ -1,7 +1,7 @@ # boosterMaxVelocityPenalty # # Used by: -# Implants from group: Booster (12 of 37) +# Implants from group: Booster (12 of 42) type = "boosterSideEffect" def handler(fit, booster, context): fit.ship.boostItemAttr("maxVelocity", booster.getModifiedItemAttr("boosterMaxVelocityPenalty")) diff --git a/eos/effects/boostershieldcapacitypenalty.py b/eos/effects/boostershieldcapacitypenalty.py index 642036e3d..7ba52d68d 100644 --- a/eos/effects/boostershieldcapacitypenalty.py +++ b/eos/effects/boostershieldcapacitypenalty.py @@ -1,7 +1,7 @@ # boosterShieldCapacityPenalty # # Used by: -# Implants from group: Booster (12 of 37) +# Implants from group: Booster (12 of 42) type = "boosterSideEffect" def handler(fit, booster, context): fit.ship.boostItemAttr("shieldCapacity", booster.getModifiedItemAttr("boosterShieldCapacityPenalty")) diff --git a/eos/effects/boosterturretoptimalrangepenalty.py b/eos/effects/boosterturretoptimalrangepenalty.py index 9881cf501..8bdebc804 100644 --- a/eos/effects/boosterturretoptimalrangepenalty.py +++ b/eos/effects/boosterturretoptimalrangepenalty.py @@ -1,7 +1,7 @@ # boosterTurretOptimalRangePenalty # # Used by: -# Implants from group: Booster (9 of 37) +# Implants from group: Booster (9 of 42) type = "boosterSideEffect" def handler(fit, booster, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), diff --git a/eos/effects/caldarishipecmburstoptimalrangecb3.py b/eos/effects/caldarishipecmburstoptimalrangecb3.py index 7675fd758..5025deba5 100644 --- a/eos/effects/caldarishipecmburstoptimalrangecb3.py +++ b/eos/effects/caldarishipecmburstoptimalrangecb3.py @@ -4,5 +4,5 @@ # Ship: Scorpion type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer", "ecmBurstRange", ship.getModifiedItemAttr("shipBonusCB3"), skill="Caldari Battleship") diff --git a/eos/effects/caldarishipewcapacitorneedcf2.py b/eos/effects/caldarishipewcapacitorneedcf2.py index 58c2e34a0..4f90135ab 100644 --- a/eos/effects/caldarishipewcapacitorneedcf2.py +++ b/eos/effects/caldarishipewcapacitorneedcf2.py @@ -1,7 +1,8 @@ # caldariShipEwCapacitorNeedCF2 # # Used by: -# Variations of ship: Griffin (2 of 2) +# Ship: Griffin +# Ship: Kitsune type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", diff --git a/eos/effects/caldarishipewfalloffrangecb3.py b/eos/effects/caldarishipewfalloffrangecb3.py index c5e520bee..53a325271 100644 --- a/eos/effects/caldarishipewfalloffrangecb3.py +++ b/eos/effects/caldarishipewfalloffrangecb3.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", - "falloff", ship.getModifiedItemAttr("shipBonusCB3"), skill="Caldari Battleship") + "falloffEffectiveness", ship.getModifiedItemAttr("shipBonusCB3"), skill="Caldari Battleship") diff --git a/eos/effects/caldarishipewfalloffrangecc2.py b/eos/effects/caldarishipewfalloffrangecc2.py index c1a05d6d6..33edac024 100644 --- a/eos/effects/caldarishipewfalloffrangecc2.py +++ b/eos/effects/caldarishipewfalloffrangecc2.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", - "falloff", ship.getModifiedItemAttr("shipBonusCC2"), skill="Caldari Cruiser") + "falloffEffectiveness", ship.getModifiedItemAttr("shipBonusCC2"), skill="Caldari Cruiser") diff --git a/eos/effects/capacitorcapacitybonus.py b/eos/effects/capacitorcapacitybonus.py index 69fd71ab7..a5f3846ae 100644 --- a/eos/effects/capacitorcapacitybonus.py +++ b/eos/effects/capacitorcapacitybonus.py @@ -1,7 +1,7 @@ # capacitorCapacityBonus # # Used by: -# Modules from group: Capacitor Battery (27 of 27) +# Modules from group: Capacitor Battery (22 of 22) type = "passive" def handler(fit, ship, context): fit.ship.increaseItemAttr("capacitorCapacity", ship.getModifiedItemAttr("capacitorBonus")) \ No newline at end of file diff --git a/eos/effects/capacitorcapacitymultiply.py b/eos/effects/capacitorcapacitymultiply.py index b60cb07a5..03c560d55 100644 --- a/eos/effects/capacitorcapacitymultiply.py +++ b/eos/effects/capacitorcapacitymultiply.py @@ -6,8 +6,6 @@ # Modules from group: Power Diagnostic System (23 of 23) # Modules from group: Propulsion Module (114 of 114) # Modules from group: Reactor Control Unit (22 of 22) -# Modules from group: Shield Flux Coil (11 of 11) -# Modules from group: Shield Power Relay (11 of 11) type = "passive" def handler(fit, module, context): fit.ship.multiplyItemAttr("capacitorCapacity", module.getModifiedItemAttr("capacitorCapacityMultiplier")) diff --git a/eos/effects/capitallauncherskillcitadelemdamage.py b/eos/effects/capitallauncherskillcitadelemdamage.py index 9d7264e3d..d36dc2786 100644 --- a/eos/effects/capitallauncherskillcitadelemdamage.py +++ b/eos/effects/capitallauncherskillcitadelemdamage.py @@ -2,9 +2,9 @@ # # Used by: # Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6) -# Skill: Citadel Torpedoes +# Skill: XL Torpedoes type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"), "emDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level) diff --git a/eos/effects/capitallauncherskillcitadelexplosivedamage.py b/eos/effects/capitallauncherskillcitadelexplosivedamage.py index 9c1ddd450..42afaf2c3 100644 --- a/eos/effects/capitallauncherskillcitadelexplosivedamage.py +++ b/eos/effects/capitallauncherskillcitadelexplosivedamage.py @@ -2,9 +2,9 @@ # # Used by: # Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6) -# Skill: Citadel Torpedoes +# Skill: XL Torpedoes type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"), "explosiveDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level) diff --git a/eos/effects/capitallauncherskillcitadelkineticdamage.py b/eos/effects/capitallauncherskillcitadelkineticdamage.py index d09c5b92f..cffdb9adf 100644 --- a/eos/effects/capitallauncherskillcitadelkineticdamage.py +++ b/eos/effects/capitallauncherskillcitadelkineticdamage.py @@ -2,9 +2,9 @@ # # Used by: # Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6) -# Skill: Citadel Torpedoes +# Skill: XL Torpedoes type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"), "kineticDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level) diff --git a/eos/effects/capitallauncherskillcitadelthermaldamage.py b/eos/effects/capitallauncherskillcitadelthermaldamage.py index ee7f3ca98..eb288a00b 100644 --- a/eos/effects/capitallauncherskillcitadelthermaldamage.py +++ b/eos/effects/capitallauncherskillcitadelthermaldamage.py @@ -2,9 +2,9 @@ # # Used by: # Implants named like: Hardwiring Zainou 'Sharpshooter' ZMX (6 of 6) -# Skill: Citadel Torpedoes +# Skill: XL Torpedoes type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes"), "thermalDamage", container.getModifiedItemAttr("damageMultiplierBonus") * level) diff --git a/eos/effects/capitallauncherskillcruisecitadelemdamage1.py b/eos/effects/capitallauncherskillcruisecitadelemdamage1.py index 8f63b2f85..a6fbc2b97 100644 --- a/eos/effects/capitallauncherskillcruisecitadelemdamage1.py +++ b/eos/effects/capitallauncherskillcruisecitadelemdamage1.py @@ -1,8 +1,8 @@ # capitalLauncherSkillCruiseCitadelEmDamage1 # # Used by: -# Skill: Citadel Cruise Missiles +# Skill: XL Cruise Missiles type = "passive" def handler(fit, skill, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"), "emDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level) diff --git a/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py b/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py index 6b526b2fd..e11517a1b 100644 --- a/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py +++ b/eos/effects/capitallauncherskillcruisecitadelexplosivedamage1.py @@ -1,8 +1,8 @@ # capitalLauncherSkillCruiseCitadelExplosiveDamage1 # # Used by: -# Skill: Citadel Cruise Missiles +# Skill: XL Cruise Missiles type = "passive" def handler(fit, skill, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"), "explosiveDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level) diff --git a/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py b/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py index 3216299f7..f5c8f193c 100644 --- a/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py +++ b/eos/effects/capitallauncherskillcruisecitadelkineticdamage1.py @@ -1,8 +1,8 @@ # capitalLauncherSkillCruiseCitadelKineticDamage1 # # Used by: -# Skill: Citadel Cruise Missiles +# Skill: XL Cruise Missiles type = "passive" def handler(fit, skill, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"), "kineticDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level) diff --git a/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py b/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py index 42c4feeec..c0795f587 100644 --- a/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py +++ b/eos/effects/capitallauncherskillcruisecitadelthermaldamage1.py @@ -1,8 +1,8 @@ # capitalLauncherSkillCruiseCitadelThermalDamage1 # # Used by: -# Skill: Citadel Cruise Missiles +# Skill: XL Cruise Missiles type = "passive" def handler(fit, skill, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Cruise Missiles"), "thermalDamage", skill.getModifiedItemAttr("damageMultiplierBonus") * skill.level) diff --git a/eos/effects/carrieramarrarmortransferfalloff3.py b/eos/effects/carrieramarrarmortransferfalloff3.py new file mode 100644 index 000000000..577fc749b --- /dev/null +++ b/eos/effects/carrieramarrarmortransferfalloff3.py @@ -0,0 +1,8 @@ +# carrierAmarrArmorTransferFalloff3 +# +# Used by: +# Ship: Aeon +# Ship: Archon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierAmarrBonus3"), skill="Amarr Carrier") diff --git a/eos/effects/carriercaldarishieldenergytransferrange3.py b/eos/effects/carriercaldarishieldenergytransferrange3.py index 4d75090c5..2e793f111 100644 --- a/eos/effects/carriercaldarishieldenergytransferrange3.py +++ b/eos/effects/carriercaldarishieldenergytransferrange3.py @@ -7,6 +7,6 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), - "shieldTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier") + "maxRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"), "powerTransferRange", ship.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier") diff --git a/eos/effects/carriercaldarishieldtransferfalloff3.py b/eos/effects/carriercaldarishieldtransferfalloff3.py new file mode 100644 index 000000000..301407707 --- /dev/null +++ b/eos/effects/carriercaldarishieldtransferfalloff3.py @@ -0,0 +1,9 @@ +# carrierCaldariShieldTransferFalloff3 +# +# Used by: +# Ship: Chimera +# Ship: Revenant +# Ship: Wyvern +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierCaldariBonus3"), skill="Caldari Carrier") diff --git a/eos/effects/carriergallentearmorshieldtransferfalloff3.py b/eos/effects/carriergallentearmorshieldtransferfalloff3.py new file mode 100644 index 000000000..2f3a5fd55 --- /dev/null +++ b/eos/effects/carriergallentearmorshieldtransferfalloff3.py @@ -0,0 +1,8 @@ +# carrierGallenteArmor&ShieldTransferFalloff3 +# +# Used by: +# Ship: Nyx +# Ship: Thanatos +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems") or mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier") \ No newline at end of file diff --git a/eos/effects/carriergallentearmorshieldtransferrange3.py b/eos/effects/carriergallentearmorshieldtransferrange3.py index 76f995889..62cae37b7 100644 --- a/eos/effects/carriergallentearmorshieldtransferrange3.py +++ b/eos/effects/carriergallentearmorshieldtransferrange3.py @@ -6,6 +6,6 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), - "shieldTransferRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier") + "maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "maxRange", ship.getModifiedItemAttr("carrierGallenteBonus3"), skill="Gallente Carrier") diff --git a/eos/effects/carrierminmatararmorshieldtransferfalloff3.py b/eos/effects/carrierminmatararmorshieldtransferfalloff3.py new file mode 100644 index 000000000..27eb623c1 --- /dev/null +++ b/eos/effects/carrierminmatararmorshieldtransferfalloff3.py @@ -0,0 +1,8 @@ +# carrierMinmatarArmor&ShieldTransferFalloff3 +# +# Used by: +# Ship: Hel +# Ship: Nidhoggur +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems") or mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier") diff --git a/eos/effects/carrierminmatararmorshieldtransferrange3.py b/eos/effects/carrierminmatararmorshieldtransferrange3.py index 3bb5b7caf..bb394afbb 100644 --- a/eos/effects/carrierminmatararmorshieldtransferrange3.py +++ b/eos/effects/carrierminmatararmorshieldtransferrange3.py @@ -6,6 +6,6 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), - "shieldTransferRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier") + "maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier") fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "maxRange", ship.getModifiedItemAttr("carrierMinmatarBonus3"), skill="Minmatar Carrier") diff --git a/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py b/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py index 0f0101a66..347bc7f35 100644 --- a/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py +++ b/eos/effects/commandbonusecmmultiplywithcommandbonushidden.py @@ -5,6 +5,8 @@ gangBonus = "commandBonusECM" gangBoost = "ewarStrECM" type = "active", "gang" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return for scanType in ("Magnetometric", "Radar", "Ladar", "Gravimetric"): diff --git a/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py b/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py index 9080637fd..dea9fa584 100644 --- a/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py +++ b/eos/effects/commandbonusrsdmultiplywithcommandbonushidden.py @@ -5,6 +5,8 @@ gangBonus = "commandBonusRSD" gangBoost = "ewarStrRSD" type = "active", "gang" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"), diff --git a/eos/effects/commandbonustdmultiplywithcommandbonushidden.py b/eos/effects/commandbonustdmultiplywithcommandbonushidden.py index 215d539b9..1561c2190 100644 --- a/eos/effects/commandbonustdmultiplywithcommandbonushidden.py +++ b/eos/effects/commandbonustdmultiplywithcommandbonushidden.py @@ -5,8 +5,18 @@ gangBonus = "commandBonusTD" gangBoost = "ewarStrTD" type = "active", "gang" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return - for bonus in ("maxRangeBonus", "falloffBonus", "trackingSpeedBonus"): + for bonus in ( + "missileVelocityBonus", + "explosionDelayBonus", + "aoeVelocityBonus", + "falloffBonus", + "maxRangeBonus", + "aoeCloudSizeBonus", + "trackingSpeedBonus" + ): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), bonus, module.getModifiedItemAttr("commandBonusTD")) diff --git a/eos/effects/commandbonustpmultiplywithcommandbonushidden.py b/eos/effects/commandbonustpmultiplywithcommandbonushidden.py index ba2627080..5d1615936 100644 --- a/eos/effects/commandbonustpmultiplywithcommandbonushidden.py +++ b/eos/effects/commandbonustpmultiplywithcommandbonushidden.py @@ -5,8 +5,10 @@ gangBonus = "commandBonusTP" gangBoost = "ewarStrTP" type = "active", "gang" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Target Painting"), "signatureRadiusBonus", module.getModifiedItemAttr("commandBonusTP"), stackingPenalties = True) diff --git a/eos/effects/covertopsandreconopscloakmoduledelaybonus.py b/eos/effects/covertopsandreconopscloakmoduledelaybonus.py index 788ff7c3e..9b293787d 100644 --- a/eos/effects/covertopsandreconopscloakmoduledelaybonus.py +++ b/eos/effects/covertopsandreconopscloakmoduledelaybonus.py @@ -4,12 +4,12 @@ # Ships from group: Black Ops (4 of 4) # Ships from group: Blockade Runner (4 of 4) # Ships from group: Covert Ops (5 of 5) +# Ships from group: Expedition Frigate (2 of 2) # Ships from group: Force Recon Ship (6 of 6) # Ships from group: Stealth Bomber (4 of 4) # Ships named like: Stratios (2 of 2) # Subsystems named like: Offensive Covert Reconfiguration (4 of 4) # Ship: Astero -# Ship: Prospect type = "passive" def handler(fit, container, context): fit.modules.filteredItemForce(lambda mod: mod.item.requiresSkill("Cloaking"), diff --git a/eos/effects/covertopscloakcpupercentbonus1.py b/eos/effects/covertopscloakcpupercentbonus1.py index cdd671913..534a50a38 100644 --- a/eos/effects/covertopscloakcpupercentbonus1.py +++ b/eos/effects/covertopscloakcpupercentbonus1.py @@ -5,5 +5,5 @@ type = "passive" runTime = "early" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Cloaking Device", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Cloaking"), "cpu", ship.getModifiedItemAttr("eliteBonusCoverOps1"), skill="Covert Ops") diff --git a/eos/effects/covertopscloakcpupercentbonuspiratefaction.py b/eos/effects/covertopscloakcpupercentbonuspiratefaction.py index fa7faffc3..b4472ad84 100644 --- a/eos/effects/covertopscloakcpupercentbonuspiratefaction.py +++ b/eos/effects/covertopscloakcpupercentbonuspiratefaction.py @@ -1,8 +1,8 @@ # covertOpsCloakCPUPercentBonusPirateFaction # # Used by: +# Ships from group: Expedition Frigate (2 of 2) # Ship: Astero -# Ship: Prospect # Ship: Victorieux Luxury Yacht type = "passive" runTime = "early" diff --git a/eos/effects/covertopsstealthbombertargettingdelaybonus.py b/eos/effects/covertopsstealthbombertargettingdelaybonus.py index 70f0c9264..04e246ac1 100644 --- a/eos/effects/covertopsstealthbombertargettingdelaybonus.py +++ b/eos/effects/covertopsstealthbombertargettingdelaybonus.py @@ -4,6 +4,7 @@ # Ships from group: Black Ops (4 of 4) # Ships from group: Stealth Bomber (4 of 4) # Ship: Chremoas +# Ship: Endurance # Ship: Etana type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/damagecontrol.py b/eos/effects/damagecontrol.py index 998a767bb..c1cccd267 100644 --- a/eos/effects/damagecontrol.py +++ b/eos/effects/damagecontrol.py @@ -1,8 +1,8 @@ # damageControl # # Used by: -# Modules from group: Damage Control (14 of 14) -type = "active" +# Modules from group: Damage Control (17 of 17) +type = "passive" def handler(fit, module, context): for layer, attrPrefix in (('shield', 'shield'), ('armor', 'armor'), ('hull', '')): for damageType in ('Kinetic', 'Thermal', 'Explosive', 'Em'): diff --git a/eos/effects/decreasetargetspeed.py b/eos/effects/decreasetargetspeed.py index 30dd9ba3f..d19823d8d 100644 --- a/eos/effects/decreasetargetspeed.py +++ b/eos/effects/decreasetargetspeed.py @@ -2,7 +2,6 @@ # # Used by: # Drones from group: Stasis Webifying Drone (3 of 3) -# Modules from group: Stasis Web (19 of 19) type = "active", "projected" def handler(fit, module, context): if "projected" not in context: diff --git a/eos/effects/dronearmordamagebonuseffect.py b/eos/effects/dronearmordamagebonuseffect.py index 25ddfaf0c..4abe3984c 100644 --- a/eos/effects/dronearmordamagebonuseffect.py +++ b/eos/effects/dronearmordamagebonuseffect.py @@ -1,9 +1,8 @@ # droneArmorDamageBonusEffect # # Used by: +# Ships from group: Logistics (5 of 5) # Ship: Exequror -# Ship: Guardian -# Ship: Oneiros # Ship: Scythe type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/dronedamagebonusonline.py b/eos/effects/dronedamagebonusonline.py index b5d3b7f66..9c601f710 100644 --- a/eos/effects/dronedamagebonusonline.py +++ b/eos/effects/dronedamagebonusonline.py @@ -1,7 +1,7 @@ # droneDamageBonusOnline # # Used by: -# Modules from group: Drone Damage Modules (10 of 10) +# Modules from group: Drone Damage Modules (11 of 11) type = "passive" def handler(fit, module, context): fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), diff --git a/eos/effects/dronedmgbonus.py b/eos/effects/dronedmgbonus.py index 6b93babe7..3407e3d69 100644 --- a/eos/effects/dronedmgbonus.py +++ b/eos/effects/dronedmgbonus.py @@ -1,7 +1,7 @@ # droneDmgBonus # # Used by: -# Skills from group: Drones (8 of 21) +# Skills from group: Drones (8 of 23) # Skills named like: Drone Specialization (4 of 4) type = "passive" def handler(fit, skill, context): diff --git a/eos/effects/dronehullrepairbonuseffect.py b/eos/effects/dronehullrepairbonuseffect.py new file mode 100644 index 000000000..b13fa4500 --- /dev/null +++ b/eos/effects/dronehullrepairbonuseffect.py @@ -0,0 +1,9 @@ +# droneHullRepairBonusEffect +# +# Used by: +# Ships from group: Logistics (5 of 5) +# Ship: Exequror +# Ship: Scythe +type = "passive" +def handler(fit, src, context): + fit.drones.filteredItemBoost(lambda drone: drone.item.group.name == "Logistic Drone", "structureDamageAmount", src.getModifiedItemAttr("droneArmorDamageAmountBonus")) \ No newline at end of file diff --git a/eos/effects/droneshieldbonusbonuseffect.py b/eos/effects/droneshieldbonusbonuseffect.py index ef22ac489..7d6f083d4 100644 --- a/eos/effects/droneshieldbonusbonuseffect.py +++ b/eos/effects/droneshieldbonusbonuseffect.py @@ -1,7 +1,7 @@ # droneShieldBonusBonusEffect # # Used by: -# Ships from group: Logistics (3 of 5) +# Ships from group: Logistics (5 of 5) # Ship: Exequror # Ship: Scythe type = "passive" diff --git a/eos/effects/dronetrackingcomputerbonus.py b/eos/effects/dronetrackingcomputerbonus.py index e5cf2a975..95751303e 100644 --- a/eos/effects/dronetrackingcomputerbonus.py +++ b/eos/effects/dronetrackingcomputerbonus.py @@ -1,7 +1,7 @@ # droneTrackingComputerBonus # # Used by: -# Modules from group: Drone Tracking Modules (8 of 8) +# Modules from group: Drone Tracking Modules (10 of 10) type = "active" def handler(fit, module, context): fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), diff --git a/eos/effects/dronetrackingenhancerbonus.py b/eos/effects/dronetrackingenhancerbonus.py index a67023f50..4d97c4fab 100644 --- a/eos/effects/dronetrackingenhancerbonus.py +++ b/eos/effects/dronetrackingenhancerbonus.py @@ -1,7 +1,7 @@ # droneTrackingEnhancerBonus # # Used by: -# Modules from group: Drone Tracking Enhancer (9 of 9) +# Modules from group: Drone Tracking Enhancer (10 of 10) type = "passive" def handler(fit, module, context): fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), diff --git a/eos/effects/ecmburst.py b/eos/effects/ecmburst.py index 8ee8a14ad..050379d88 100644 --- a/eos/effects/ecmburst.py +++ b/eos/effects/ecmburst.py @@ -1,7 +1,7 @@ # ecmBurst # # Used by: -# Modules from group: ECM Burst (7 of 7) +# Modules from group: Burst Jammer (11 of 11) type = "active" def handler(fit, module, context): pass \ No newline at end of file diff --git a/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py b/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py index 3611c52ff..e90117b2a 100644 --- a/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py +++ b/eos/effects/elitebonusblackopsecmburstgravandladarandmagnetoandradar.py @@ -6,5 +6,5 @@ type = "passive" def handler(fit, ship, context): sensorTypes = ("Gravimetric", "Ladar", "Magnetometric", "Radar") for type in sensorTypes: - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst", "scan{0}StrengthBonus".format(type), + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer", "scan{0}StrengthBonus".format(type), ship.getModifiedItemAttr("eliteBonusBlackOps1"), skill="Black Ops") diff --git a/eos/effects/elitebonuscommanddestroyerarmored1.py b/eos/effects/elitebonuscommanddestroyerarmored1.py new file mode 100644 index 000000000..63a0674c5 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyerarmored1.py @@ -0,0 +1,8 @@ +# eliteBonusCommandDestroyerArmored1 +# +# Used by: +# Ship: Magus +# Ship: Pontifex +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Armored Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuscommanddestroyerinfo1.py b/eos/effects/elitebonuscommanddestroyerinfo1.py new file mode 100644 index 000000000..097d72271 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyerinfo1.py @@ -0,0 +1,8 @@ +# eliteBonusCommandDestroyerInfo1 +# +# Used by: +# Ship: Pontifex +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuscommanddestroyerinfohidden1.py b/eos/effects/elitebonuscommanddestroyerinfohidden1.py new file mode 100644 index 000000000..4704e5b86 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyerinfohidden1.py @@ -0,0 +1,8 @@ +# eliteBonusCommandDestroyerInfoHidden1 +# +# Used by: +# Ship: Pontifex +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Information Warfare Specialist"), "commandBonusHidden", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuscommanddestroyermjfgspool2.py b/eos/effects/elitebonuscommanddestroyermjfgspool2.py new file mode 100644 index 000000000..6d6fdb6a8 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyermjfgspool2.py @@ -0,0 +1,7 @@ +# eliteBonusCommandDestroyerMJFGspool2 +# +# Used by: +# Ships from group: Command Destroyers (4 of 4) +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Micro Jump Drive Operation"), "duration", src.getModifiedItemAttr("eliteBonusCommandDestroyer2"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuscommanddestroyermwdsigradius3.py b/eos/effects/elitebonuscommanddestroyermwdsigradius3.py new file mode 100644 index 000000000..34abe1494 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyermwdsigradius3.py @@ -0,0 +1,7 @@ +# eliteBonusCommandDestroyerMWDSigRadius3 +# +# Used by: +# Ships from group: Command Destroyers (4 of 4) +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("High Speed Maneuvering"), "signatureRadiusBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer3"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuscommanddestroyersiege1.py b/eos/effects/elitebonuscommanddestroyersiege1.py new file mode 100644 index 000000000..87bb35661 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyersiege1.py @@ -0,0 +1,8 @@ +# eliteBonusCommandDestroyerSiege1 +# +# Used by: +# Ship: Bifrost +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Siege Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuscommanddestroyerskirmish1.py b/eos/effects/elitebonuscommanddestroyerskirmish1.py new file mode 100644 index 000000000..cd30425e6 --- /dev/null +++ b/eos/effects/elitebonuscommanddestroyerskirmish1.py @@ -0,0 +1,8 @@ +# eliteBonusCommandDestroyerSkirmish1 +# +# Used by: +# Ship: Bifrost +# Ship: Magus +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Skirmish Warfare Specialist"), "commandBonus", src.getModifiedItemAttr("eliteBonusCommandDestroyer1"), skill="Command Destroyers") diff --git a/eos/effects/elitebonuselectronicattackshipenergyneutrange1.py b/eos/effects/elitebonuselectronicattackshipenergyneutrange1.py deleted file mode 100644 index d443e20c9..000000000 --- a/eos/effects/elitebonuselectronicattackshipenergyneutrange1.py +++ /dev/null @@ -1,8 +0,0 @@ -# eliteBonusElectronicAttackShipEnergyNeutRange1 -# -# Used by: -# Ship: Sentinel -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships") diff --git a/eos/effects/elitebonuselectronicattackshipenergyvampirerange1.py b/eos/effects/elitebonuselectronicattackshipenergyvampirerange1.py deleted file mode 100644 index 9bc17e752..000000000 --- a/eos/effects/elitebonuselectronicattackshipenergyvampirerange1.py +++ /dev/null @@ -1,8 +0,0 @@ -# eliteBonusElectronicAttackShipEnergyVampireRange1 -# -# Used by: -# Ship: Sentinel -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", - "powerTransferRange", ship.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships") diff --git a/eos/effects/elitebonuslogifrigarmorhp2.py b/eos/effects/elitebonuslogifrigarmorhp2.py new file mode 100644 index 000000000..ec7b57121 --- /dev/null +++ b/eos/effects/elitebonuslogifrigarmorhp2.py @@ -0,0 +1,7 @@ +# eliteBonusLogiFrigArmorHP2 +# +# Used by: +# Ship: Deacon +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorHP", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates") diff --git a/eos/effects/elitebonuslogifrigarmorrepspeedcap1.py b/eos/effects/elitebonuslogifrigarmorrepspeedcap1.py new file mode 100644 index 000000000..b3511a413 --- /dev/null +++ b/eos/effects/elitebonuslogifrigarmorrepspeedcap1.py @@ -0,0 +1,9 @@ +# eliteBonusLogiFrigArmorRepSpeedCap1 +# +# Used by: +# Ship: Deacon +# Ship: Thalia +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates") diff --git a/eos/effects/elitebonuslogifrigshieldhp2.py b/eos/effects/elitebonuslogifrigshieldhp2.py new file mode 100644 index 000000000..860a8041f --- /dev/null +++ b/eos/effects/elitebonuslogifrigshieldhp2.py @@ -0,0 +1,7 @@ +# eliteBonusLogiFrigShieldHP2 +# +# Used by: +# Ship: Kirin +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldCapacity", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates") diff --git a/eos/effects/elitebonuslogifrigshieldrepspeedcap1.py b/eos/effects/elitebonuslogifrigshieldrepspeedcap1.py new file mode 100644 index 000000000..15ccd7096 --- /dev/null +++ b/eos/effects/elitebonuslogifrigshieldrepspeedcap1.py @@ -0,0 +1,9 @@ +# eliteBonusLogiFrigShieldRepSpeedCap1 +# +# Used by: +# Ship: Kirin +# Ship: Scalpel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "duration", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogiFrig1"), skill="Logistics Frigates") diff --git a/eos/effects/elitebonuslogifrigsignature2.py b/eos/effects/elitebonuslogifrigsignature2.py new file mode 100644 index 000000000..9afe9b1f0 --- /dev/null +++ b/eos/effects/elitebonuslogifrigsignature2.py @@ -0,0 +1,8 @@ +# eliteBonusLogiFrigSignature2 +# +# Used by: +# Ship: Scalpel +# Ship: Thalia +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("signatureRadius", src.getModifiedItemAttr("eliteBonusLogiFrig2"), skill="Logistics Frigates") diff --git a/eos/effects/elitebonuslogisticenergytransfercapneed1.py b/eos/effects/elitebonuslogisticenergytransfercapneed1.py index a2978184d..88d7eabb4 100644 --- a/eos/effects/elitebonuslogisticenergytransfercapneed1.py +++ b/eos/effects/elitebonuslogisticenergytransfercapneed1.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter", - "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics") + "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticenergytransfercapneed2.py b/eos/effects/elitebonuslogisticenergytransfercapneed2.py index 9b31da9fe..1c0760ea6 100644 --- a/eos/effects/elitebonuslogisticenergytransfercapneed2.py +++ b/eos/effects/elitebonuslogisticenergytransfercapneed2.py @@ -6,4 +6,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter", - "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics") + "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py b/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py index e03cbf3a1..7f4e10117 100644 --- a/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py +++ b/eos/effects/elitebonuslogisticremotearmorrepaircapneed1.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", - "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics") + "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py b/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py index 1e05d0d22..7e39fddbb 100644 --- a/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py +++ b/eos/effects/elitebonuslogisticremotearmorrepaircapneed2.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", - "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics") + "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticshieldtransfercapneed1.py b/eos/effects/elitebonuslogisticshieldtransfercapneed1.py index 40cf695d8..d0024995a 100644 --- a/eos/effects/elitebonuslogisticshieldtransfercapneed1.py +++ b/eos/effects/elitebonuslogisticshieldtransfercapneed1.py @@ -6,4 +6,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster", - "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics") + "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticshieldtransfercapneed2.py b/eos/effects/elitebonuslogisticshieldtransfercapneed2.py index b94f69ca7..7e731892d 100644 --- a/eos/effects/elitebonuslogisticshieldtransfercapneed2.py +++ b/eos/effects/elitebonuslogisticshieldtransfercapneed2.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster", - "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics") + "capacitorNeed", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py index d9da9e025..55d0519ca 100644 --- a/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py +++ b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus1.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", - "falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics") + "falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py index 48c6bc5c6..108e1aa49 100644 --- a/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py +++ b/eos/effects/elitebonuslogisticstrackinglinkfalloffbonus2.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", - "falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics") + "falloffBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py index ecbd5b370..df9ebe8e4 100644 --- a/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py +++ b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus1.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", - "maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics") + "maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py index 280cb4ac3..80434490a 100644 --- a/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py +++ b/eos/effects/elitebonuslogisticstrackinglinkmaxrangebonus2.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", - "maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics") + "maxRangeBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py index c7a42d460..22a21a78f 100644 --- a/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py +++ b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus1.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", - "trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics") + "trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py index 1ab6ad285..9b1c659b9 100644 --- a/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py +++ b/eos/effects/elitebonuslogisticstrackinglinktrackingspeedbonus2.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", - "trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics") + "trackingSpeedBonus", ship.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers") diff --git a/eos/effects/elitebonusvampiredrainamount2.py b/eos/effects/elitebonusvampiredrainamount2.py index 96b934a87..267e5c7d7 100644 --- a/eos/effects/elitebonusvampiredrainamount2.py +++ b/eos/effects/elitebonusvampiredrainamount2.py @@ -5,5 +5,5 @@ # Ship: Pilgrim type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships") diff --git a/eos/effects/elitereconbonusenergyneutamount2.py b/eos/effects/elitereconbonusenergyneutamount2.py index 940318998..6570460dd 100644 --- a/eos/effects/elitereconbonusenergyneutamount2.py +++ b/eos/effects/elitereconbonusenergyneutamount2.py @@ -5,5 +5,5 @@ # Ship: Pilgrim type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships") diff --git a/eos/effects/elitereconbonusenergyneutrange1.py b/eos/effects/elitereconbonusenergyneutrange1.py deleted file mode 100644 index 566b9e868..000000000 --- a/eos/effects/elitereconbonusenergyneutrange1.py +++ /dev/null @@ -1,8 +0,0 @@ -# eliteReconBonusEnergyNeutRange1 -# -# Used by: -# Ship: Curse -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships") diff --git a/eos/effects/elitereconbonusneutrange3.py b/eos/effects/elitereconbonusneutrange3.py deleted file mode 100644 index 4bb877b0b..000000000 --- a/eos/effects/elitereconbonusneutrange3.py +++ /dev/null @@ -1,8 +0,0 @@ -# eliteReconBonusNeutRange3 -# -# Used by: -# Ship: Pilgrim -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships") diff --git a/eos/effects/elitereconbonusvamprange3.py b/eos/effects/elitereconbonusvamprange3.py deleted file mode 100644 index c870e93ae..000000000 --- a/eos/effects/elitereconbonusvamprange3.py +++ /dev/null @@ -1,8 +0,0 @@ -# eliteReconBonusVampRange3 -# -# Used by: -# Ship: Pilgrim -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", - "powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships") diff --git a/eos/effects/elitereconenergyvampirerangebonus1.py b/eos/effects/elitereconenergyvampirerangebonus1.py deleted file mode 100644 index 23ccc34cc..000000000 --- a/eos/effects/elitereconenergyvampirerangebonus1.py +++ /dev/null @@ -1,8 +0,0 @@ -# eliteReconEnergyVampireRangeBonus1 -# -# Used by: -# Ship: Curse -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", - "powerTransferRange", ship.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships") diff --git a/eos/effects/energydestabilizationnew.py b/eos/effects/energydestabilizationnew.py index cd22ff6d1..fefadab40 100644 --- a/eos/effects/energydestabilizationnew.py +++ b/eos/effects/energydestabilizationnew.py @@ -1,8 +1,7 @@ # energyDestabilizationNew # # Used by: -# Drones from group: Cap Drain Drone (3 of 3) -# Modules from group: Energy Destabilizer (41 of 41) +# Drones from group: Energy Neutralizer Drone (3 of 3) from eos.types import State type = "active", "projected" def handler(fit, container, context): diff --git a/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py b/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py index 31aee89e7..b031f9de1 100644 --- a/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py +++ b/eos/effects/energymanagementcapacitorbonuspostpercentcapacitylocationshipgroupcapacitorcapacitybonus.py @@ -4,6 +4,7 @@ # Implants named like: Inherent Implants 'Squire' Capacitor Management EM (6 of 6) # Implants named like: Mindflood Booster (4 of 4) # Modules named like: Semiconductor Memory Cell (8 of 8) +# Implant: Antipharmakon Aeolis # Implant: Genolution Core Augmentation CA-1 # Skill: Capacitor Management type = "passive" diff --git a/eos/effects/energyneutralizerfalloff.py b/eos/effects/energyneutralizerfalloff.py new file mode 100644 index 000000000..09d32a941 --- /dev/null +++ b/eos/effects/energyneutralizerfalloff.py @@ -0,0 +1,13 @@ +# energyNeutralizerFalloff +# +# Used by: +# Modules from group: Energy Neutralizer (45 of 45) +from eos.types import State +type = "active", "projected" +def handler(fit, container, context): + if "projected" in context and ((hasattr(container, "state") \ + and container.state >= State.ACTIVE) or hasattr(container, "amountActive")): + multiplier = container.amountActive if hasattr(container, "amountActive") else 1 + amount = container.getModifiedItemAttr("energyDestabilizationAmount") + time = container.getModifiedItemAttr("duration") + fit.addDrain(time, amount * multiplier, 0) diff --git a/eos/effects/leech.py b/eos/effects/energynosferatufalloff.py similarity index 82% rename from eos/effects/leech.py rename to eos/effects/energynosferatufalloff.py index dd5f171b4..f9348baa4 100644 --- a/eos/effects/leech.py +++ b/eos/effects/energynosferatufalloff.py @@ -1,7 +1,7 @@ -# leech +# energyNosferatuFalloff # # Used by: -# Modules from group: Energy Vampire (52 of 52) +# Modules from group: Energy Nosferatu (45 of 45) type = "active", "projected" runTime = "late" def handler(fit, module, context): @@ -10,4 +10,4 @@ def handler(fit, module, context): if "projected" in context: fit.addDrain(time, amount, 0) elif "module" in context: - module.itemModifiedAttributes.force("capacitorNeed", -amount) + module.itemModifiedAttributes.force("capacitorNeed", -amount) \ No newline at end of file diff --git a/eos/effects/energytransferarraymaxrangebonus.py b/eos/effects/energytransferarraymaxrangebonus.py index 67a59b742..3ec67bee9 100644 --- a/eos/effects/energytransferarraymaxrangebonus.py +++ b/eos/effects/energytransferarraymaxrangebonus.py @@ -6,4 +6,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Capacitor Transmitter", - "powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus")) + "powerTransferRange", ship.getModifiedItemAttr("maxRangeBonus2")) diff --git a/eos/effects/energyweapondamagemultiply.py b/eos/effects/energyweapondamagemultiply.py index a0d4efa08..ab5ae1f9a 100644 --- a/eos/effects/energyweapondamagemultiply.py +++ b/eos/effects/energyweapondamagemultiply.py @@ -1,7 +1,7 @@ # energyWeaponDamageMultiply # # Used by: -# Modules from group: Heat Sink (25 of 25) +# Modules from group: Heat Sink (18 of 18) # Modules named like: QA Multiship Module Players (4 of 4) # Module: QA Damage Module type = "passive" diff --git a/eos/effects/energyweaponspeedmultiply.py b/eos/effects/energyweaponspeedmultiply.py index ba81693e5..da0f1c841 100644 --- a/eos/effects/energyweaponspeedmultiply.py +++ b/eos/effects/energyweaponspeedmultiply.py @@ -1,7 +1,7 @@ # energyWeaponSpeedMultiply # # Used by: -# Modules from group: Heat Sink (25 of 25) +# Modules from group: Heat Sink (18 of 18) type = "passive" def handler(fit, module, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Weapon", diff --git a/eos/effects/entosiscpuaddition.py b/eos/effects/entosiscpuaddition.py index 03f0405ae..335566d59 100644 --- a/eos/effects/entosiscpuaddition.py +++ b/eos/effects/entosiscpuaddition.py @@ -1,7 +1,7 @@ # entosisCPUAddition # # Used by: -# Modules from group: Entosis Link (2 of 2) +# Modules from group: Entosis Link (6 of 6) type = "passive" def handler(fit, module, context): module.increaseItemAttr("cpu", module.getModifiedItemAttr("entosisCPUAdd")) diff --git a/eos/effects/entosislink.py b/eos/effects/entosislink.py index 2b63f6e12..c44f426bc 100644 --- a/eos/effects/entosislink.py +++ b/eos/effects/entosislink.py @@ -1,7 +1,7 @@ # entosisLink # # Used by: -# Modules from group: Entosis Link (2 of 2) +# Modules from group: Entosis Link (6 of 6) type = "active" def handler(fit, module, context): fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance")) diff --git a/eos/effects/ewgrouprsdmaxrangebonus.py b/eos/effects/ewgrouprsdmaxrangebonus.py index 45e08633a..88ab43551 100644 --- a/eos/effects/ewgrouprsdmaxrangebonus.py +++ b/eos/effects/ewgrouprsdmaxrangebonus.py @@ -4,5 +4,5 @@ # Implants named like: grade Centurion (10 of 12) type = "passive" def handler(fit, implant, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "maxRange", implant.getModifiedItemAttr("rangeSkillBonus")) \ No newline at end of file diff --git a/eos/effects/ewgrouptdmaxrangebonus.py b/eos/effects/ewgrouptdmaxrangebonus.py index 33c9d6329..e085e9f10 100644 --- a/eos/effects/ewgrouptdmaxrangebonus.py +++ b/eos/effects/ewgrouptdmaxrangebonus.py @@ -4,5 +4,5 @@ # Implants named like: grade Centurion (10 of 12) type = "passive" def handler(fit, implant, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor", "maxRange", implant.getModifiedItemAttr("rangeSkillBonus")) \ No newline at end of file diff --git a/eos/effects/ewskillecmburstcapneedbonus.py b/eos/effects/ewskillecmburstcapneedbonus.py index a9f80a7fa..590417e90 100644 --- a/eos/effects/ewskillecmburstcapneedbonus.py +++ b/eos/effects/ewskillecmburstcapneedbonus.py @@ -7,5 +7,5 @@ type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer", "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level) diff --git a/eos/effects/ewskillecmburstfalloffbonus.py b/eos/effects/ewskillecmburstfalloffbonus.py deleted file mode 100644 index 609802237..000000000 --- a/eos/effects/ewskillecmburstfalloffbonus.py +++ /dev/null @@ -1,8 +0,0 @@ -# ewSkillEcmBurstFalloffBonus -# -# Used by: -# Skill: Frequency Modulation -type = "passive" -def handler(fit, skill, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst", - "falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level) diff --git a/eos/effects/ewskillecmburstrangebonus.py b/eos/effects/ewskillecmburstrangebonus.py index bb778e629..e2d8b3987 100644 --- a/eos/effects/ewskillecmburstrangebonus.py +++ b/eos/effects/ewskillecmburstrangebonus.py @@ -6,6 +6,6 @@ type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM Burst", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Burst Jammer", "ecmBurstRange", container.getModifiedItemAttr("rangeSkillBonus") * level, stackingPenalties = False if "skill" in context else True) diff --git a/eos/effects/ewskillewfalloffbonus.py b/eos/effects/ewskillewfalloffbonus.py index e8246dd00..839f16faa 100644 --- a/eos/effects/ewskillewfalloffbonus.py +++ b/eos/effects/ewskillewfalloffbonus.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, skill, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", - "falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level) \ No newline at end of file + "falloffEffectiveness", skill.getModifiedItemAttr("falloffBonus") * skill.level) diff --git a/eos/effects/ewskillguidancedisruptionbonus.py b/eos/effects/ewskillguidancedisruptionbonus.py new file mode 100644 index 000000000..7348e304b --- /dev/null +++ b/eos/effects/ewskillguidancedisruptionbonus.py @@ -0,0 +1,16 @@ +# ewSkillGuidanceDisruptionBonus +# +# Used by: +# Modules named like: Tracking Diagnostic Subroutines (8 of 8) +# Skill: Weapon Destabilization +type = "passive" +def handler(fit, src, context): + level = src.level if "skill" in context else 1 + for attr in ( + "explosionDelayBonus", + "aoeVelocityBonus", + "aoeCloudSizeBonus", + "missileVelocityBonus" + ): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), + attr, src.getModifiedItemAttr("scanSkillEwStrengthBonus") * level) \ No newline at end of file diff --git a/eos/effects/ewskillrsdfalloffbonus.py b/eos/effects/ewskillrsdfalloffbonus.py index 4cdaecb4e..aa9ab09bd 100644 --- a/eos/effects/ewskillrsdfalloffbonus.py +++ b/eos/effects/ewskillrsdfalloffbonus.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, skill, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Sensor Linking"), - "falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level) + "falloffEffectiveness", skill.getModifiedItemAttr("falloffBonus") * skill.level) diff --git a/eos/effects/ewskillscanstrengthbonus.py b/eos/effects/ewskillscanstrengthbonus.py index 206fd0d5d..52b3c6862 100644 --- a/eos/effects/ewskillscanstrengthbonus.py +++ b/eos/effects/ewskillscanstrengthbonus.py @@ -5,7 +5,7 @@ # Skill: Signal Dispersion type = "passive" def handler(fit, container, context): - groups = ("ECM", "ECM Burst") + groups = ("ECM", "Burst Jammer") level = container.level if "skill" in context else 1 for scanType in ("Gravimetric", "Ladar", "Magnetometric", "Radar"): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups, diff --git a/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py b/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py index 0a44be166..76b99b887 100644 --- a/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py +++ b/eos/effects/ewskillsignalsuppressionmaxtargetrangebonus.py @@ -6,5 +6,5 @@ type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "maxTargetRangeBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level) diff --git a/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py b/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py index 071b3eb5a..8edf1e5e7 100644 --- a/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py +++ b/eos/effects/ewskillsignalsuppressionscanresolutionbonus.py @@ -7,6 +7,6 @@ type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 penalized = False if "skill" in context else True - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "scanResolutionBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level, stackingPenalties=penalized) diff --git a/eos/effects/ewskilltdfalloffbonus.py b/eos/effects/ewskilltdfalloffbonus.py index 1a11f96af..9951a09e8 100644 --- a/eos/effects/ewskilltdfalloffbonus.py +++ b/eos/effects/ewskilltdfalloffbonus.py @@ -4,5 +4,5 @@ # Skill: Frequency Modulation type = "passive" def handler(fit, skill, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor", - "falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level) \ No newline at end of file + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor", + "falloffEffectiveness", skill.getModifiedItemAttr("falloffBonus") * skill.level) diff --git a/eos/effects/ewskilltdmaxrangebonus.py b/eos/effects/ewskilltdmaxrangebonus.py index 73a80f057..03f87118a 100644 --- a/eos/effects/ewskilltdmaxrangebonus.py +++ b/eos/effects/ewskilltdmaxrangebonus.py @@ -6,6 +6,6 @@ type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor", "maxRange", container.getModifiedItemAttr("rangeSkillBonus") * level, stackingPenalties = "skill" not in context) diff --git a/eos/effects/ewskilltpfalloffbonus.py b/eos/effects/ewskilltpfalloffbonus.py index 11204a306..2ebb5d98d 100644 --- a/eos/effects/ewskilltpfalloffbonus.py +++ b/eos/effects/ewskilltpfalloffbonus.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, skill, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter", - "falloff", skill.getModifiedItemAttr("falloffBonus") * skill.level) \ No newline at end of file + "falloffEffectiveness", skill.getModifiedItemAttr("falloffBonus") * skill.level) diff --git a/eos/effects/ewskilltrackingdisruptionrangedisruptionbonus.py b/eos/effects/ewskilltrackingdisruptionrangedisruptionbonus.py index 4d75b5cb1..461702874 100644 --- a/eos/effects/ewskilltrackingdisruptionrangedisruptionbonus.py +++ b/eos/effects/ewskilltrackingdisruptionrangedisruptionbonus.py @@ -2,7 +2,7 @@ # # Used by: # Modules named like: Tracking Diagnostic Subroutines (8 of 8) -# Skill: Turret Destabilization +# Skill: Weapon Destabilization type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 diff --git a/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py b/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py index 136f85162..8327699cd 100644 --- a/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py +++ b/eos/effects/ewskilltrackingdisruptiontrackingspeedbonus.py @@ -2,9 +2,9 @@ # # Used by: # Modules named like: Tracking Diagnostic Subroutines (8 of 8) -# Skill: Turret Destabilization +# Skill: Weapon Destabilization type = "passive" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Weapon Disruptor", "trackingSpeedBonus", container.getModifiedItemAttr("scanSkillEwStrengthBonus") * level) diff --git a/eos/effects/ewtargetpaint.py b/eos/effects/ewtargetpaint.py index 6215732fc..1f13ea821 100644 --- a/eos/effects/ewtargetpaint.py +++ b/eos/effects/ewtargetpaint.py @@ -1,7 +1,6 @@ # ewTargetPaint # # Used by: -# Modules from group: Target Painter (9 of 9) # Drones named like: TP (3 of 3) type = "projected", "active" def handler(fit, container, context): diff --git a/eos/effects/ewtesteffectjam.py b/eos/effects/ewtesteffectjam.py index 4e4976d28..e3863a3e7 100644 --- a/eos/effects/ewtesteffectjam.py +++ b/eos/effects/ewtesteffectjam.py @@ -1,7 +1,6 @@ # ewTestEffectJam # # Used by: -# Modules from group: ECM (44 of 44) # Drones named like: EC (3 of 3) type = "projected", "active" def handler(fit, module, context): diff --git a/eos/effects/expeditionfrigatebonusiceharvestingcycletime2.py b/eos/effects/expeditionfrigatebonusiceharvestingcycletime2.py new file mode 100644 index 000000000..c4a9204d1 --- /dev/null +++ b/eos/effects/expeditionfrigatebonusiceharvestingcycletime2.py @@ -0,0 +1,7 @@ +# expeditionFrigateBonusIceHarvestingCycleTime2 +# +# Used by: +# Ship: Endurance +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"), "duration", src.getModifiedItemAttr("eliteBonusExpedition2"), skill="Expedition Frigates") diff --git a/eos/effects/expeditionfrigateshieldresistance1.py b/eos/effects/expeditionfrigateshieldresistance1.py new file mode 100644 index 000000000..404e2c072 --- /dev/null +++ b/eos/effects/expeditionfrigateshieldresistance1.py @@ -0,0 +1,10 @@ +# expeditionFrigateShieldResistance1 +# +# Used by: +# Ship: Endurance +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldThermalDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates") + fit.ship.boostItemAttr("shieldKineticDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates") + fit.ship.boostItemAttr("shieldExplosiveDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates") + fit.ship.boostItemAttr("shieldEmDamageResonance", src.getModifiedItemAttr("eliteBonusExpedition1"), skill="Expedition Frigates") diff --git a/eos/effects/gangabmwdfactorboost.py b/eos/effects/gangabmwdfactorboost.py index 898d561c2..0cc9d74bd 100644 --- a/eos/effects/gangabmwdfactorboost.py +++ b/eos/effects/gangabmwdfactorboost.py @@ -4,6 +4,8 @@ # Variations of module: Skirmish Warfare Link - Rapid Deployment I (2 of 2) type = "gang", "active" gangBoost = "speedFactor" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Propulsion Module", diff --git a/eos/effects/gangarmorhardening.py b/eos/effects/gangarmorhardening.py index 25665c817..2c8feddf4 100644 --- a/eos/effects/gangarmorhardening.py +++ b/eos/effects/gangarmorhardening.py @@ -4,6 +4,8 @@ # Variations of module: Armored Warfare Link - Passive Defense I (2 of 2) type = "gang", "active" gangBoost = "armorResistance" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return for damageType in ("Em", "Thermal", "Explosive", "Kinetic"): diff --git a/eos/effects/gangarmorrepaircapreducerselfandprojected.py b/eos/effects/gangarmorrepaircapreducerselfandprojected.py index 89e451bca..3a9d33b3b 100644 --- a/eos/effects/gangarmorrepaircapreducerselfandprojected.py +++ b/eos/effects/gangarmorrepaircapreducerselfandprojected.py @@ -4,6 +4,8 @@ # Variations of module: Armored Warfare Link - Damage Control I (2 of 2) type = "gang", "active" gangBoost = "armorRepairCapacitorNeed" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Remote Armor Repair Systems"), diff --git a/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py b/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py index 0f94f82b0..352090e76 100644 --- a/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py +++ b/eos/effects/gangarmorrepairspeedamplifierselfandprojected.py @@ -4,6 +4,8 @@ # Variations of module: Armored Warfare Link - Rapid Repair I (2 of 2) type = "gang", "active" gangBoost = "armorRepairDuration" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Repair Systems") or mod.item.requiresSkill("Remote Armor Repair Systems"), diff --git a/eos/effects/gangbonussignature.py b/eos/effects/gangbonussignature.py index 31db2a205..f1a53a9a6 100644 --- a/eos/effects/gangbonussignature.py +++ b/eos/effects/gangbonussignature.py @@ -4,6 +4,8 @@ # Variations of module: Skirmish Warfare Link - Evasive Maneuvers I (2 of 2) type = "gang", "active" gangBoost = "signatureRadius" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.ship.boostItemAttr("signatureRadius", module.getModifiedItemAttr("commandBonus"), diff --git a/eos/effects/ganginformationwarfarerangebonuswithecmburst.py b/eos/effects/ganginformationwarfarerangebonuswithecmburst.py index ffbae0664..527879399 100644 --- a/eos/effects/ganginformationwarfarerangebonuswithecmburst.py +++ b/eos/effects/ganginformationwarfarerangebonuswithecmburst.py @@ -4,9 +4,11 @@ # Variations of module: Information Warfare Link - Recon Operation I (2 of 2) type = "gang", "active" gangBoost = "electronicMaxRange" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return - groups = ("Target Painter", "Tracking Disruptor", "Remote Sensor Damper", "ECM", "ECM Burst") + groups = ("Target Painter", "Weapon Disruptor", "Sensor Dampener", "ECM", "Burst Jammer") fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups, "maxRange", module.getModifiedItemAttr("commandBonus"), stackingPenalties = True) diff --git a/eos/effects/ganginformationwarfaresuperiorityall.py b/eos/effects/ganginformationwarfaresuperiorityall2.py similarity index 92% rename from eos/effects/ganginformationwarfaresuperiorityall.py rename to eos/effects/ganginformationwarfaresuperiorityall2.py index 605896a82..cb7f2e544 100644 --- a/eos/effects/ganginformationwarfaresuperiorityall.py +++ b/eos/effects/ganginformationwarfaresuperiorityall2.py @@ -1,8 +1,9 @@ -# gangInformationWarfareSuperiorityAll +# gangInformationWarfareSuperiorityAll2 # # Used by: # Variations of module: Information Warfare Link - Electronic Superiority I (2 of 2) type = "active" + def handler(fit, module, context): module.multiplyItemAttr("commandBonusTD", module.getModifiedItemAttr("commandBonusHidden")) module.multiplyItemAttr("commandBonusECM", module.getModifiedItemAttr("commandBonusHidden")) diff --git a/eos/effects/gangpropulsionjammingboost.py b/eos/effects/gangpropulsionjammingboost.py index e50376c7a..3043f17e2 100644 --- a/eos/effects/gangpropulsionjammingboost.py +++ b/eos/effects/gangpropulsionjammingboost.py @@ -4,9 +4,11 @@ # Variations of module: Skirmish Warfare Link - Interdiction Maneuvers I (2 of 2) type = "gang", "active" gangBoost = "interdictionMaxRange" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return - groups = ("Stasis Web","Warp Scrambler") + groups = ("Stasis Web", "Warp Scrambler") fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups, "maxRange", module.getModifiedItemAttr("commandBonus"), stackingPenalties = True) diff --git a/eos/effects/gangsensorintegrity.py b/eos/effects/gangsensorintegrity.py index 9e90654b5..87d291afd 100644 --- a/eos/effects/gangsensorintegrity.py +++ b/eos/effects/gangsensorintegrity.py @@ -5,6 +5,8 @@ type = "gang", "active" gangBoost = "maxTargetRange" gangBonus = "commandBonus" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("commandBonus"), diff --git a/eos/effects/gangshieldboosteandtransportercapacitorneed.py b/eos/effects/gangshieldboosteandtransportercapacitorneed.py index 3f600e79c..945345b41 100644 --- a/eos/effects/gangshieldboosteandtransportercapacitorneed.py +++ b/eos/effects/gangshieldboosteandtransportercapacitorneed.py @@ -4,6 +4,8 @@ # Variations of module: Siege Warfare Link - Shield Efficiency I (2 of 2) type = "gang", "active" gangBoost = "shieldRepairCapacitorNeed" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation") or mod.item.requiresSkill("Shield Emission Systems"), diff --git a/eos/effects/gangshieldboosterandtransporterspeed.py b/eos/effects/gangshieldboosterandtransporterspeed.py index 7637d0a94..5fc79557b 100644 --- a/eos/effects/gangshieldboosterandtransporterspeed.py +++ b/eos/effects/gangshieldboosterandtransporterspeed.py @@ -4,6 +4,8 @@ # Variations of module: Siege Warfare Link - Active Shielding I (2 of 2) type = "gang", "active" gangBoost = "shieldRepairDuration" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation") or mod.item.requiresSkill("Shield Emission Systems"), diff --git a/eos/effects/gangshieldhardening.py b/eos/effects/gangshieldhardening.py index 2c438590f..0206ad559 100644 --- a/eos/effects/gangshieldhardening.py +++ b/eos/effects/gangshieldhardening.py @@ -4,6 +4,8 @@ # Variations of module: Siege Warfare Link - Shield Harmonizing I (2 of 2) type = "gang", "active" gangBoost = "shieldResistance" +runTime = "late" + def handler(fit, module, context): if "gang" not in context: return for damageType in ("Em", "Explosive", "Thermal", "Kinetic"): diff --git a/eos/effects/gchyieldmultiplypassive.py b/eos/effects/gchyieldmultiplypassive.py index e8316ba16..a86312d50 100644 --- a/eos/effects/gchyieldmultiplypassive.py +++ b/eos/effects/gchyieldmultiplypassive.py @@ -1,7 +1,8 @@ # GCHYieldMultiplyPassive # # Used by: -# Variations of ship: Venture (2 of 2) +# Ship: Prospect +# Ship: Venture type = "passive" def handler(fit, module, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Gas Cloud Harvester", diff --git a/eos/effects/gunneryfalloffbonusonline.py b/eos/effects/gunneryfalloffbonusonline.py index 40d31d1a1..4aad761b3 100644 --- a/eos/effects/gunneryfalloffbonusonline.py +++ b/eos/effects/gunneryfalloffbonusonline.py @@ -1,7 +1,8 @@ # gunneryFalloffBonusOnline # # Used by: -# Modules from group: Tracking Enhancer (17 of 17) +# Modules from group: Tracking Enhancer (10 of 10) +# Module: QA Damage Module type = "passive" def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), diff --git a/eos/effects/gunnerymaxrangebonusonline.py b/eos/effects/gunnerymaxrangebonusonline.py index 69d3a474c..80742dd39 100644 --- a/eos/effects/gunnerymaxrangebonusonline.py +++ b/eos/effects/gunnerymaxrangebonusonline.py @@ -1,7 +1,8 @@ # gunneryMaxRangeBonusOnline # # Used by: -# Modules from group: Tracking Enhancer (17 of 17) +# Modules from group: Tracking Enhancer (10 of 10) +# Module: QA Damage Module type = "passive" def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), diff --git a/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py b/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py index fdc95e816..6569508c2 100644 --- a/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py +++ b/eos/effects/gunnerymaxrangefallofftrackingspeedbonus.py @@ -1,7 +1,7 @@ # gunneryMaxRangeFalloffTrackingSpeedBonus # # Used by: -# Modules from group: Tracking Computer (14 of 14) +# Modules from group: Tracking Computer (11 of 11) type = "active" def handler(fit, module, context): for attr in ("maxRange", "falloff", "trackingSpeed"): diff --git a/eos/effects/gunnerytrackingspeedbonusonline.py b/eos/effects/gunnerytrackingspeedbonusonline.py index 58dadf2f8..d75d1de83 100644 --- a/eos/effects/gunnerytrackingspeedbonusonline.py +++ b/eos/effects/gunnerytrackingspeedbonusonline.py @@ -1,7 +1,8 @@ # gunneryTrackingSpeedBonusOnline # # Used by: -# Modules from group: Tracking Enhancer (17 of 17) +# Modules from group: Tracking Enhancer (10 of 10) +# Module: QA Damage Module type = "passive" def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"), diff --git a/eos/effects/hybridweapondamagemultiply.py b/eos/effects/hybridweapondamagemultiply.py index f5ed32553..092540734 100644 --- a/eos/effects/hybridweapondamagemultiply.py +++ b/eos/effects/hybridweapondamagemultiply.py @@ -1,7 +1,7 @@ # hybridWeaponDamageMultiply # # Used by: -# Modules from group: Magnetic Field Stabilizer (20 of 20) +# Modules from group: Magnetic Field Stabilizer (12 of 12) # Modules named like: QA Multiship Module Players (4 of 4) # Module: QA Damage Module type = "passive" diff --git a/eos/effects/hybridweaponspeedmultiply.py b/eos/effects/hybridweaponspeedmultiply.py index 17cd377f0..fa327ff96 100644 --- a/eos/effects/hybridweaponspeedmultiply.py +++ b/eos/effects/hybridweaponspeedmultiply.py @@ -1,7 +1,7 @@ # hybridWeaponSpeedMultiply # # Used by: -# Modules from group: Magnetic Field Stabilizer (20 of 20) +# Modules from group: Magnetic Field Stabilizer (12 of 12) type = "passive" def handler(fit, module, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Hybrid Weapon", diff --git a/eos/effects/iceharvesterdurationmultiplier.py b/eos/effects/iceharvesterdurationmultiplier.py index 4019c8063..5a95a72df 100644 --- a/eos/effects/iceharvesterdurationmultiplier.py +++ b/eos/effects/iceharvesterdurationmultiplier.py @@ -3,6 +3,7 @@ # Used by: # Variations of ship: Procurer (2 of 2) # Variations of ship: Retriever (2 of 2) +# Ship: Endurance type = "passive" def handler(fit, ship, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Ice Harvesting"), diff --git a/eos/effects/ignorecloakvelocitypenalty.py b/eos/effects/ignorecloakvelocitypenalty.py new file mode 100644 index 000000000..bcb46a480 --- /dev/null +++ b/eos/effects/ignorecloakvelocitypenalty.py @@ -0,0 +1,9 @@ +# ignoreCloakVelocityPenalty +# +# Used by: +# Ship: Endurance +type = "passive" +runTime = "early" +def handler(fit, src, context): + fit.modules.filteredItemForce(lambda mod: mod.item.group.name == "Cloaking Device", + "maxVelocityBonus", src.getModifiedItemAttr("velocityPenaltyReduction")) diff --git a/eos/effects/informationwarfaremindlinkhidden.py b/eos/effects/informationwarfaremindlinkhidden.py index 6d3d6c6a7..f59c806ba 100644 --- a/eos/effects/informationwarfaremindlinkhidden.py +++ b/eos/effects/informationwarfaremindlinkhidden.py @@ -2,6 +2,7 @@ # # Used by: # Implant: Caldari Navy Warfare Mindlink +# Implant: Imperial Navy Warfare Mindlink # Implant: Information Warfare Mindlink type = "passive" def handler(fit, implant, context): diff --git a/eos/effects/leadershipeffect.py b/eos/effects/leadershipeffect.py index 1fe180120..f7aaa4d12 100644 --- a/eos/effects/leadershipeffect.py +++ b/eos/effects/leadershipeffect.py @@ -6,4 +6,4 @@ type = "gang" gangBoost = "scanResolution" gangBonus = "scanResolutionBonus" def handler(fit, skill, context): - fit.ship.boostItemAttr(gangBoost, skill.getModifiedItemAttr(gangBonus) * skill.level) + fit.ship.boostItemAttr(gangBoost, skill.getModifiedItemAttr(gangBonus) * skill.level, stackingPenalties = True) diff --git a/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py b/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py index bdf856667..ddf2a573f 100644 --- a/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py +++ b/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py @@ -7,4 +7,4 @@ gangBoost = "miningAmount" gangBonus = "miningAmountBonus" def handler(fit, container, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"), - gangBoost, container.getModifiedItemAttr(gangBonus) * level) + gangBoost, container.getModifiedItemAttr(gangBonus)) diff --git a/eos/effects/miningfrigatebonusiceharvestingcycletime2.py b/eos/effects/miningfrigatebonusiceharvestingcycletime2.py new file mode 100644 index 000000000..e16c8ef86 --- /dev/null +++ b/eos/effects/miningfrigatebonusiceharvestingcycletime2.py @@ -0,0 +1,7 @@ +# miningFrigateBonusIceHarvestingCycleTime2 +# +# Used by: +# Ship: Endurance +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Ice Harvesting"), "duration", src.getModifiedItemAttr("shipBonusOREfrig2"), skill="Mining Frigate") diff --git a/eos/effects/mininglaser.py b/eos/effects/mininglaser.py index a4095f4ed..6189b7983 100644 --- a/eos/effects/mininglaser.py +++ b/eos/effects/mininglaser.py @@ -2,7 +2,7 @@ # # Used by: # Modules from group: Frequency Mining Laser (3 of 3) -# Modules from group: Mining Laser (12 of 12) +# Modules from group: Mining Laser (15 of 15) # Modules from group: Strip Miner (5 of 5) type = 'active' def handler(fit, module, context): diff --git a/eos/effects/miningyieldmultiplypassive.py b/eos/effects/miningyieldmultiplypassive.py index 5c6aee92f..3838c6e6f 100644 --- a/eos/effects/miningyieldmultiplypassive.py +++ b/eos/effects/miningyieldmultiplypassive.py @@ -3,7 +3,7 @@ # Used by: # Variations of ship: Procurer (2 of 2) # Variations of ship: Retriever (2 of 2) -# Variations of ship: Venture (2 of 2) +# Variations of ship: Venture (3 of 3) type = "passive" def handler(fit, module, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Mining"), diff --git a/eos/effects/minmatarshipewtargetpaintermf2.py b/eos/effects/minmatarshipewtargetpaintermf2.py index 43dcdcc78..556db7d5b 100644 --- a/eos/effects/minmatarshipewtargetpaintermf2.py +++ b/eos/effects/minmatarshipewtargetpaintermf2.py @@ -1,7 +1,8 @@ # minmatarShipEwTargetPainterMF2 # # Used by: -# Variations of ship: Vigil (2 of 2) +# Ship: Hyena +# Ship: Vigil type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Target Painter", diff --git a/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py b/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py index 2576aa361..b0ffc617f 100644 --- a/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py +++ b/eos/effects/missilebombardmentmaxflighttimebonuspostpercentexplosiondelayownercharmodulesrequiringmissilelauncheroperation.py @@ -3,6 +3,7 @@ # Used by: # Implants named like: Zainou 'Deadeye' Missile Bombardment MB (6 of 6) # Modules named like: Rocket Fuel Cache Partition (8 of 8) +# Implant: Antipharmakon Toxot # Skill: Missile Bombardment type = "passive" def handler(fit, container, context): diff --git a/eos/effects/missiledmgbonus.py b/eos/effects/missiledmgbonus.py index b1d9b77fc..f2604350b 100644 --- a/eos/effects/missiledmgbonus.py +++ b/eos/effects/missiledmgbonus.py @@ -1,7 +1,7 @@ # missileDMGBonus # # Used by: -# Modules from group: Ballistic Control system (21 of 21) +# Modules from group: Ballistic Control system (17 of 17) # Modules named like: QA Multiship Module Players (4 of 4) type = "passive" def handler(fit, container, context): diff --git a/eos/effects/missilelauncherspeedmultiplier.py b/eos/effects/missilelauncherspeedmultiplier.py index 80ad29338..021bd7240 100644 --- a/eos/effects/missilelauncherspeedmultiplier.py +++ b/eos/effects/missilelauncherspeedmultiplier.py @@ -1,7 +1,7 @@ # missileLauncherSpeedMultiplier # # Used by: -# Modules from group: Ballistic Control system (21 of 21) +# Modules from group: Ballistic Control system (17 of 17) type = "passive" def handler(fit, module, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Missile Launcher Operation"), diff --git a/eos/effects/modifyenergywarfareresistance.py b/eos/effects/modifyenergywarfareresistance.py new file mode 100644 index 000000000..c1aa2c7c9 --- /dev/null +++ b/eos/effects/modifyenergywarfareresistance.py @@ -0,0 +1,9 @@ +# modifyEnergyWarfareResistance +# +# Used by: +# Modules from group: Capacitor Battery (22 of 22) +type = "passive" +def handler(fit, module, context): + fit.ship.boostItemAttr("energyWarfareResistance", + module.getModifiedItemAttr("energyWarfareResistanceBonus"), + stackingPenalties = True) diff --git a/eos/effects/modifypowerrechargerate.py b/eos/effects/modifypowerrechargerate.py index 4f1e35a4b..c06cac114 100644 --- a/eos/effects/modifypowerrechargerate.py +++ b/eos/effects/modifypowerrechargerate.py @@ -6,8 +6,7 @@ # Modules from group: Capacitor Recharger (18 of 18) # Modules from group: Power Diagnostic System (23 of 23) # Modules from group: Reactor Control Unit (22 of 22) -# Modules from group: Shield Flux Coil (11 of 11) -# Modules from group: Shield Power Relay (11 of 11) +# Modules from group: Shield Power Relay (6 of 6) type = "passive" def handler(fit, module, context): fit.ship.multiplyItemAttr("rechargeRate", module.getModifiedItemAttr("capacitorRechargeRateMultiplier")) \ No newline at end of file diff --git a/eos/effects/modifyshieldrechargerate.py b/eos/effects/modifyshieldrechargerate.py index 1986cbb09..845ba1788 100644 --- a/eos/effects/modifyshieldrechargerate.py +++ b/eos/effects/modifyshieldrechargerate.py @@ -1,12 +1,11 @@ # modifyShieldRechargeRate # # Used by: -# Modules from group: Capacitor Flux Coil (6 of 6) # Modules from group: Capacitor Power Relay (20 of 20) # Modules from group: Power Diagnostic System (23 of 23) # Modules from group: Reactor Control Unit (22 of 22) -# Modules from group: Shield Flux Coil (11 of 11) -# Modules from group: Shield Recharger (6 of 6) +# Modules from group: Shield Recharger (4 of 4) +# Modules named like: Flux Coil (12 of 12) # Modules named like: QA Multiship Module Players (4 of 4) type = "passive" def handler(fit, module, context): diff --git a/eos/effects/neutattackreflect.py b/eos/effects/neutattackreflect.py deleted file mode 100644 index a093c3588..000000000 --- a/eos/effects/neutattackreflect.py +++ /dev/null @@ -1,8 +0,0 @@ -# neutAttackReflect -# -# Used by: -# Modules from group: Capacitor Battery (27 of 27) -type = "passive" -def handler(fit, module, context): - fit.ship.boostItemAttr("neutReflector", module.getModifiedItemAttr("capAttackReflector"), - stackingPenalties = True) diff --git a/eos/effects/neutreflectamount.py b/eos/effects/neutreflectamount.py deleted file mode 100644 index 1ed409b6b..000000000 --- a/eos/effects/neutreflectamount.py +++ /dev/null @@ -1,7 +0,0 @@ -# neutReflectAmount -# -# Used by: -# Modules from group: Capacitor Battery (27 of 27) -type = "passive" -def handler(fit, module, context): - fit.ship.boostItemAttr("neutReflectAmount", module.getModifiedItemAttr("neutReflectAmountBonus")) diff --git a/eos/effects/nosattackreflect.py b/eos/effects/nosattackreflect.py deleted file mode 100644 index db0ae58e4..000000000 --- a/eos/effects/nosattackreflect.py +++ /dev/null @@ -1,8 +0,0 @@ -# nosAttackReflect -# -# Used by: -# Modules from group: Capacitor Battery (27 of 27) -type = "passive" -def handler(fit, module, context): - fit.ship.boostItemAttr("nosReflector", module.getModifiedItemAttr("capAttackReflector"), - stackingPenalties = True) diff --git a/eos/effects/nosreflectamount.py b/eos/effects/nosreflectamount.py deleted file mode 100644 index a286f5a59..000000000 --- a/eos/effects/nosreflectamount.py +++ /dev/null @@ -1,7 +0,0 @@ -# nosReflectAmount -# -# Used by: -# Modules from group: Capacitor Battery (27 of 27) -type = "passive" -def handler(fit, module, context): - fit.ship.boostItemAttr("nosReflectAmount", module.getModifiedItemAttr("nosReflectAmountBonus")) diff --git a/eos/effects/orecapitalshipshieldtransferfalloff.py b/eos/effects/orecapitalshipshieldtransferfalloff.py new file mode 100644 index 000000000..b1c8702eb --- /dev/null +++ b/eos/effects/orecapitalshipshieldtransferfalloff.py @@ -0,0 +1,7 @@ +# oreCapitalShipShieldTransferFalloff +# +# Used by: +# Ship: Rorqual +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "falloffEffectiveness", src.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") diff --git a/eos/effects/orecapitalshipshieldtransferrange.py b/eos/effects/orecapitalshipshieldtransferrange.py index bb5ed2972..401ad2472 100644 --- a/eos/effects/orecapitalshipshieldtransferrange.py +++ b/eos/effects/orecapitalshipshieldtransferrange.py @@ -5,4 +5,4 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), - "shieldTransferRange", ship.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") + "maxRange", ship.getModifiedItemAttr("shipBonusORECapital3"), skill="Capital Industrial Ships") diff --git a/eos/effects/overloadrofbonus.py b/eos/effects/overloadrofbonus.py index 4cfc38d2f..fd8623e2b 100644 --- a/eos/effects/overloadrofbonus.py +++ b/eos/effects/overloadrofbonus.py @@ -1,13 +1,9 @@ # overloadRofBonus # # Used by: -# Modules from group: Energy Weapon (100 of 187) -# Modules from group: Hybrid Weapon (110 of 202) -# Modules from group: Missile Launcher Citadel (4 of 4) -# Modules from group: Missile Launcher Heavy (12 of 12) -# Modules from group: Missile Launcher Rocket (15 of 15) -# Modules from group: Projectile Weapon (60 of 146) -# Modules named like: Launcher (125 of 138) +# Modules from group: Missile Launcher Torpedo (22 of 22) +# Items from market group: Ship Equipment > Turrets & Bays (397 of 767) +# Module: Interdiction Sphere Launcher I type = "overheat" def handler(fit, module, context): module.boostItemAttr("speed", module.getModifiedItemAttr("overloadRofBonus")) diff --git a/eos/effects/overloadselfdurationbonus.py b/eos/effects/overloadselfdurationbonus.py index 29ede5790..984b06639 100644 --- a/eos/effects/overloadselfdurationbonus.py +++ b/eos/effects/overloadselfdurationbonus.py @@ -2,14 +2,14 @@ # # Used by: # Modules from group: Capacitor Booster (54 of 54) -# Modules from group: Energy Destabilizer (41 of 41) -# Modules from group: Energy Vampire (52 of 52) +# Modules from group: Energy Neutralizer (45 of 45) +# Modules from group: Energy Nosferatu (45 of 45) # Modules from group: Hull Repair Unit (21 of 21) -# Modules from group: Remote Armor Repairer (38 of 38) +# Modules from group: Remote Armor Repairer (33 of 33) # Modules from group: Remote Capacitor Transmitter (38 of 38) -# Modules from group: Remote Shield Booster (39 of 39) +# Modules from group: Remote Shield Booster (31 of 31) # Modules from group: Smart Bomb (118 of 118) -# Modules from group: Warp Disrupt Field Generator (2 of 2) +# Modules from group: Warp Disrupt Field Generator (7 of 7) # Module: QA Remote Armor Repair System - 5 Players # Module: QA Shield Transporter - 5 Players # Module: Reactive Armor Hardener diff --git a/eos/effects/overloadselfeccmstrenghtbonus.py b/eos/effects/overloadselfeccmstrenghtbonus.py deleted file mode 100644 index 32c158d36..000000000 --- a/eos/effects/overloadselfeccmstrenghtbonus.py +++ /dev/null @@ -1,10 +0,0 @@ -# overloadSelfECCMStrenghtBonus -# -# Used by: -# Modules from group: ECCM (44 of 44) -# Modules from group: Projected ECCM (7 of 7) -type = "overheat" -def handler(fit, module, context): - for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): - module.boostItemAttr("scan%sStrengthPercent" % scanType, - module.getModifiedItemAttr("overloadECCMStrenghtBonus")) diff --git a/eos/effects/overloadselfecmstrenghtbonus.py b/eos/effects/overloadselfecmstrenghtbonus.py index 846db2e3c..e8ee74567 100644 --- a/eos/effects/overloadselfecmstrenghtbonus.py +++ b/eos/effects/overloadselfecmstrenghtbonus.py @@ -1,8 +1,8 @@ # overloadSelfECMStrenghtBonus # # Used by: -# Modules from group: ECM (44 of 44) -# Modules from group: ECM Burst (7 of 7) +# Modules from group: Burst Jammer (11 of 11) +# Modules from group: ECM (39 of 39) type = "overheat" def handler(fit, module, context): if "projected" not in context: diff --git a/eos/effects/overloadselfmissileguidancemodulebonus.py b/eos/effects/overloadselfmissileguidancemodulebonus.py new file mode 100644 index 000000000..da798b80b --- /dev/null +++ b/eos/effects/overloadselfmissileguidancemodulebonus.py @@ -0,0 +1,13 @@ +# overloadSelfMissileGuidanceModuleBonus +# +# Used by: +# Variations of module: Guidance Disruptor I (6 of 6) +type = "overheat" +def handler(fit, module, context): + for tgtAttr in ( + "aoeCloudSizeBonus", + "explosionDelayBonus", + "missileVelocityBonus", + "aoeVelocityBonus" + ): + module.boostItemAttr(tgtAttr, module.getModifiedItemAttr("overloadTrackingModuleStrengthBonus")) \ No newline at end of file diff --git a/eos/effects/overloadselfpainterbonus.py b/eos/effects/overloadselfpainterbonus.py index cbb2c41cb..11f9a96a9 100644 --- a/eos/effects/overloadselfpainterbonus.py +++ b/eos/effects/overloadselfpainterbonus.py @@ -1,7 +1,7 @@ # overloadSelfPainterBonus # # Used by: -# Modules from group: Target Painter (9 of 9) +# Modules from group: Target Painter (8 of 8) type = "overheat" def handler(fit, module, context): module.boostItemAttr("signatureRadiusBonus", module.getModifiedItemAttr("overloadPainterStrengthBonus") or 0) diff --git a/eos/effects/overloadselfrangebonus.py b/eos/effects/overloadselfrangebonus.py index 86afe7fb5..9250b48c0 100644 --- a/eos/effects/overloadselfrangebonus.py +++ b/eos/effects/overloadselfrangebonus.py @@ -1,7 +1,8 @@ # overloadSelfRangeBonus # # Used by: -# Modules from group: Stasis Web (19 of 19) +# Modules from group: Stasis Grappler (7 of 7) +# Modules from group: Stasis Web (18 of 18) # Modules from group: Warp Scrambler (38 of 39) type = "overheat" def handler(fit, module, context): diff --git a/eos/effects/overloadselfsensormodulebonus.py b/eos/effects/overloadselfsensormodulebonus.py index eb5984d56..303bebdf3 100644 --- a/eos/effects/overloadselfsensormodulebonus.py +++ b/eos/effects/overloadselfsensormodulebonus.py @@ -2,10 +2,17 @@ # # Used by: # Modules from group: Remote Sensor Booster (8 of 8) -# Modules from group: Remote Sensor Damper (9 of 9) -# Modules from group: Sensor Booster (12 of 12) +# Modules from group: Sensor Booster (16 of 16) +# Modules from group: Sensor Dampener (6 of 6) type = "overheat" def handler(fit, module, context): module.boostItemAttr("maxTargetRangeBonus", module.getModifiedItemAttr("overloadSensorModuleStrengthBonus")) module.boostItemAttr("scanResolutionBonus", module.getModifiedItemAttr("overloadSensorModuleStrengthBonus"), stackingPenalties=True) + + for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): + module.boostItemAttr( + "scan{}StrengthPercent".format(scanType), + module.getModifiedItemAttr("overloadSensorModuleStrengthBonus"), + stackingPenalties=True + ) diff --git a/eos/effects/overloadselftrackingmodulebonus.py b/eos/effects/overloadselftrackingmodulebonus.py index e1ca68807..8269d377f 100644 --- a/eos/effects/overloadselftrackingmodulebonus.py +++ b/eos/effects/overloadselftrackingmodulebonus.py @@ -1,10 +1,9 @@ # overloadSelfTrackingModuleBonus # # Used by: -# Modules from group: Drone Tracking Modules (8 of 8) -# Modules from group: Remote Tracking Computer (10 of 10) -# Modules from group: Tracking Computer (14 of 14) -# Modules from group: Tracking Disruptor (8 of 8) +# Modules from group: Drone Tracking Modules (10 of 10) +# Modules named like: Tracking Computer (19 of 19) +# Variations of module: Tracking Disruptor I (6 of 6) type = "overheat" def handler(fit, module, context): module.boostItemAttr("maxRangeBonus", module.getModifiedItemAttr("overloadTrackingModuleStrengthBonus")) diff --git a/eos/effects/passivespeedlimit.py b/eos/effects/passivespeedlimit.py index 94b4ed8a2..95e832873 100644 --- a/eos/effects/passivespeedlimit.py +++ b/eos/effects/passivespeedlimit.py @@ -1,7 +1,7 @@ # passiveSpeedLimit # # Used by: -# Modules from group: Entosis Link (2 of 2) +# Modules from group: Entosis Link (6 of 6) runtime = "late" type = "passive" def handler(fit, src, context): diff --git a/eos/effects/poweroutputmultiply.py b/eos/effects/poweroutputmultiply.py index e0ac4fe57..9d3f66082 100644 --- a/eos/effects/poweroutputmultiply.py +++ b/eos/effects/poweroutputmultiply.py @@ -5,8 +5,6 @@ # Modules from group: Capacitor Power Relay (20 of 20) # Modules from group: Power Diagnostic System (23 of 23) # Modules from group: Reactor Control Unit (22 of 22) -# Modules from group: Shield Flux Coil (11 of 11) -# Modules from group: Shield Power Relay (11 of 11) type = "passive" def handler(fit, module, context): fit.ship.multiplyItemAttr("powerOutput", module.getModifiedItemAttr("powerOutputMultiplier")) \ No newline at end of file diff --git a/eos/effects/projectileweapondamagemultiply.py b/eos/effects/projectileweapondamagemultiply.py index a6dfb93c7..c0ea83334 100644 --- a/eos/effects/projectileweapondamagemultiply.py +++ b/eos/effects/projectileweapondamagemultiply.py @@ -1,7 +1,7 @@ # projectileWeaponDamageMultiply # # Used by: -# Modules from group: Gyrostabilizer (20 of 20) +# Modules from group: Gyrostabilizer (12 of 12) # Modules named like: QA Multiship Module Players (4 of 4) # Module: QA Damage Module type = "passive" diff --git a/eos/effects/projectileweaponspeedmultiply.py b/eos/effects/projectileweaponspeedmultiply.py index 21da9d628..805fbf3fe 100644 --- a/eos/effects/projectileweaponspeedmultiply.py +++ b/eos/effects/projectileweaponspeedmultiply.py @@ -1,7 +1,7 @@ # projectileWeaponSpeedMultiply # # Used by: -# Modules from group: Gyrostabilizer (20 of 20) +# Modules from group: Gyrostabilizer (12 of 12) type = "passive" def handler(fit, module, context): fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Projectile Weapon", diff --git a/eos/effects/propulsionskillcapneedbonusskilllevel.py b/eos/effects/propulsionskillcapneedbonusskilllevel.py index 99f25f16b..388e6603e 100644 --- a/eos/effects/propulsionskillcapneedbonusskilllevel.py +++ b/eos/effects/propulsionskillcapneedbonusskilllevel.py @@ -5,7 +5,7 @@ # Skill: Propulsion Jamming type = "passive" def handler(fit, container, context): - groups = ("Stasis Web", "Warp Scrambler", "Warp Disrupt Field Generator") + groups = ("Stasis Web", "Stasis Grappler", "Warp Scrambler", "Warp Disrupt Field Generator") level = container.level if "skill" in context else 1 fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups, "capacitorNeed", container.getModifiedItemAttr("capNeedBonus") * level) diff --git a/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py b/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py index db12c57db..15c177712 100644 --- a/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py +++ b/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py @@ -7,4 +7,4 @@ gangBoost = "maxTargetRange" gangBonus = "maxTargetRangeBonus" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level) + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level, stackingPenalties = True ) diff --git a/eos/effects/remotearmorrepairfalloff.py b/eos/effects/remotearmorrepairfalloff.py new file mode 100644 index 000000000..ed5b38969 --- /dev/null +++ b/eos/effects/remotearmorrepairfalloff.py @@ -0,0 +1,10 @@ +# remoteArmorRepairFalloff +# +# Used by: +# Modules from group: Remote Armor Repairer (33 of 33) +type = "projected", "active" +def handler(fit, container, context): + if "projected" in context: + bonus = container.getModifiedItemAttr("armorDamageAmount") + duration = container.getModifiedItemAttr("duration") / 1000.0 + fit.extraAttributes.increase("armorRepair", bonus / duration) diff --git a/eos/effects/remoteecmfalloff.py b/eos/effects/remoteecmfalloff.py new file mode 100644 index 000000000..9945eb020 --- /dev/null +++ b/eos/effects/remoteecmfalloff.py @@ -0,0 +1,11 @@ +# remoteECMFalloff +# +# Used by: +# Modules from group: ECM (39 of 39) +type = "projected", "active" +def handler(fit, module, context): + if "projected" in context: + # jam formula: 1 - (1- (jammer str/ship str))^(# of jam mods with same str)) + strModifier = 1 - module.getModifiedItemAttr("scan{0}StrengthBonus".format(fit.scanType))/fit.scanStrength + + fit.ecmProjectedStr *= strModifier diff --git a/eos/effects/remoteguidancedisruptfalloff.py b/eos/effects/remoteguidancedisruptfalloff.py new file mode 100644 index 000000000..20abfa9d6 --- /dev/null +++ b/eos/effects/remoteguidancedisruptfalloff.py @@ -0,0 +1,17 @@ +# remoteGuidanceDisruptFalloff +# +# Used by: +# Variations of module: Guidance Disruptor I (6 of 6) +type = "active", "projected" + +def handler(fit, src, context): + if "projected" in context: + for srcAttr, tgtAttr in ( + ("aoeCloudSizeBonus", "aoeCloudSize"), + ("aoeVelocityBonus", "aoeVelocity"), + ("missileVelocityBonus", "maxVelocity"), + ("explosionDelayBonus", "explosionDelay"), + ): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), + tgtAttr, src.getModifiedItemAttr(srcAttr), + stackingPenalties=True) diff --git a/eos/effects/remotehullrepair.py b/eos/effects/remotehullrepair.py index bb15c0a11..1bf1fd50a 100644 --- a/eos/effects/remotehullrepair.py +++ b/eos/effects/remotehullrepair.py @@ -1,7 +1,6 @@ # remoteHullRepair # # Used by: -# Modules from group: Remote Hull Repairer (7 of 7) # Drones named like: Hull Maintenance Bot (6 of 6) type = "projected", "active" runTime = "late" diff --git a/eos/effects/remotehullrepairfalloff.py b/eos/effects/remotehullrepairfalloff.py new file mode 100644 index 000000000..99b1adc55 --- /dev/null +++ b/eos/effects/remotehullrepairfalloff.py @@ -0,0 +1,11 @@ +# remoteHullRepairFalloff +# +# Used by: +# Modules from group: Remote Hull Repairer (7 of 7) +type = "projected", "active" +runTime = "late" +def handler(fit, module, context): + if "projected" not in context: return + bonus = module.getModifiedItemAttr("structureDamageAmount") + duration = module.getModifiedItemAttr("duration") / 1000.0 + fit.extraAttributes.increase("hullRepair", bonus / duration) diff --git a/eos/effects/targetmaxtargetrangeandscanresolutionbonusassistance.py b/eos/effects/remotesensorboostfalloff.py similarity index 60% rename from eos/effects/targetmaxtargetrangeandscanresolutionbonusassistance.py rename to eos/effects/remotesensorboostfalloff.py index aafbf7e0a..1453fe2bc 100644 --- a/eos/effects/targetmaxtargetrangeandscanresolutionbonusassistance.py +++ b/eos/effects/remotesensorboostfalloff.py @@ -1,4 +1,4 @@ -# targetMaxTargetRangeAndScanResolutionBonusAssistance +# remoteSensorBoostFalloff # # Used by: # Modules from group: Remote Sensor Booster (8 of 8) @@ -11,3 +11,10 @@ def handler(fit, module, context): stackingPenalties = True) fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"), stackingPenalties = True) + + for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): + fit.ship.boostItemAttr( + "scan{}Strength".format(scanType), + module.getModifiedItemAttr("scan{}StrengthPercent".format(scanType)), + stackingPenalties=True + ) diff --git a/eos/effects/targetmaxtargetrangeandscanresolutionbonushostile.py b/eos/effects/remotesensordampfalloff.py similarity index 80% rename from eos/effects/targetmaxtargetrangeandscanresolutionbonushostile.py rename to eos/effects/remotesensordampfalloff.py index b763976cb..a1ac27bd9 100644 --- a/eos/effects/targetmaxtargetrangeandscanresolutionbonushostile.py +++ b/eos/effects/remotesensordampfalloff.py @@ -1,7 +1,7 @@ -# targetMaxTargetRangeAndScanResolutionBonusHostile +# remoteSensorDampFalloff # # Used by: -# Modules from group: Remote Sensor Damper (9 of 9) +# Modules from group: Sensor Dampener (6 of 6) type= "projected", "active" def handler(fit, module, context): if "projected" not in context: diff --git a/eos/effects/remoteshieldtransferfalloff.py b/eos/effects/remoteshieldtransferfalloff.py new file mode 100644 index 000000000..2bf11e9d6 --- /dev/null +++ b/eos/effects/remoteshieldtransferfalloff.py @@ -0,0 +1,10 @@ +# remoteShieldTransferFalloff +# +# Used by: +# Modules from group: Remote Shield Booster (31 of 31) +type = "projected", "active" +def handler(fit, container, context): + if "projected" in context: + bonus = container.getModifiedItemAttr("shieldBonus") + duration = container.getModifiedItemAttr("duration") / 1000.0 + fit.extraAttributes.increase("shieldRepair", bonus / duration) diff --git a/eos/effects/remotetargetpaintfalloff.py b/eos/effects/remotetargetpaintfalloff.py new file mode 100644 index 000000000..9d4e31a4a --- /dev/null +++ b/eos/effects/remotetargetpaintfalloff.py @@ -0,0 +1,9 @@ +# remoteTargetPaintFalloff +# +# Used by: +# Modules from group: Target Painter (8 of 8) +type = "projected", "active" +def handler(fit, container, context): + if "projected" in context: + fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"), + stackingPenalties = True) diff --git a/eos/effects/targetgunnerymaxrangeandtrackingspeedandfalloffbonushostile.py b/eos/effects/remotetrackingassistfalloff.py similarity index 88% rename from eos/effects/targetgunnerymaxrangeandtrackingspeedandfalloffbonushostile.py rename to eos/effects/remotetrackingassistfalloff.py index 8d135d290..6bd6ba72c 100644 --- a/eos/effects/targetgunnerymaxrangeandtrackingspeedandfalloffbonushostile.py +++ b/eos/effects/remotetrackingassistfalloff.py @@ -1,7 +1,7 @@ -# targetGunneryMaxRangeAndTrackingSpeedAndFalloffBonusHostile +# remoteTrackingAssistFalloff # # Used by: -# Modules from group: Tracking Disruptor (8 of 8) +# Modules from group: Remote Tracking Computer (8 of 8) type= "projected", "active" def handler(fit, module, context): if "projected" in context: diff --git a/eos/effects/targetgunnerymaxrangefallofftrackingspeedbonusassistance.py b/eos/effects/remotetrackingdisruptfalloff.py similarity index 87% rename from eos/effects/targetgunnerymaxrangefallofftrackingspeedbonusassistance.py rename to eos/effects/remotetrackingdisruptfalloff.py index 7626282c2..25c507841 100644 --- a/eos/effects/targetgunnerymaxrangefallofftrackingspeedbonusassistance.py +++ b/eos/effects/remotetrackingdisruptfalloff.py @@ -1,7 +1,7 @@ -# targetGunneryMaxRangeFalloffTrackingSpeedBonusAssistance +# remoteTrackingDisruptFalloff # # Used by: -# Modules from group: Remote Tracking Computer (10 of 10) +# Variations of module: Tracking Disruptor I (6 of 6) type= "projected", "active" def handler(fit, module, context): if "projected" in context: diff --git a/eos/effects/remotewebifierfalloff.py b/eos/effects/remotewebifierfalloff.py new file mode 100644 index 000000000..a2e3e9cda --- /dev/null +++ b/eos/effects/remotewebifierfalloff.py @@ -0,0 +1,10 @@ +# remoteWebifierFalloff +# +# Used by: +# Modules from group: Stasis Grappler (7 of 7) +# Modules from group: Stasis Web (18 of 18) +type = "active", "projected" +def handler(fit, module, context): + if "projected" not in context: return + fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"), + stackingPenalties = True) diff --git a/eos/effects/rolebonuscdlinkspgreduction.py b/eos/effects/rolebonuscdlinkspgreduction.py new file mode 100644 index 000000000..bfbc05f26 --- /dev/null +++ b/eos/effects/rolebonuscdlinkspgreduction.py @@ -0,0 +1,7 @@ +# roleBonusCDLinksPGReduction +# +# Used by: +# Ships from group: Command Destroyers (4 of 4) +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Leadership"), "power", src.getModifiedItemAttr("roleBonusCD")) diff --git a/eos/effects/rolebonusecmcapcpu.py b/eos/effects/rolebonusecmcapcpu.py new file mode 100644 index 000000000..a9bd4e612 --- /dev/null +++ b/eos/effects/rolebonusecmcapcpu.py @@ -0,0 +1,8 @@ +# roleBonusECMCapCPU +# +# Used by: +# Ship: Griffin Navy Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", "capacitorNeed", src.getModifiedItemAttr("roleBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", "cpu", src.getModifiedItemAttr("roleBonus")) diff --git a/eos/effects/rolebonusecmrange.py b/eos/effects/rolebonusecmrange.py new file mode 100644 index 000000000..3d4c4c91e --- /dev/null +++ b/eos/effects/rolebonusecmrange.py @@ -0,0 +1,8 @@ +# roleBonusECMRange +# +# Used by: +# Ship: Griffin Navy Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", "falloffEffectiveness", src.getModifiedItemAttr("roleBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "ECM", "maxRange", src.getModifiedItemAttr("roleBonus")) diff --git a/eos/effects/rolebonusjustscramblerstrength.py b/eos/effects/rolebonusjustscramblerstrength.py new file mode 100644 index 000000000..588d7b321 --- /dev/null +++ b/eos/effects/rolebonusjustscramblerstrength.py @@ -0,0 +1,8 @@ +# roleBonusJustScramblerStrength +# +# Used by: +# Ship: Maulus Navy Issue +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Navigation"), + "warpScrambleStrength", ship.getModifiedItemAttr("roleBonus")) \ No newline at end of file diff --git a/eos/effects/rolebonusstasisrange.py b/eos/effects/rolebonusstasisrange.py new file mode 100644 index 000000000..2afc333ce --- /dev/null +++ b/eos/effects/rolebonusstasisrange.py @@ -0,0 +1,7 @@ +# roleBonusStasisRange +# +# Used by: +# Ship: Vigil Fleet Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web", "maxRange", src.getModifiedItemAttr("roleBonus")) diff --git a/eos/effects/rolebonuswdcapcpu.py b/eos/effects/rolebonuswdcapcpu.py new file mode 100644 index 000000000..1805cfd3d --- /dev/null +++ b/eos/effects/rolebonuswdcapcpu.py @@ -0,0 +1,8 @@ +# roleBonusWDCapCPU +# +# Used by: +# Ship: Crucifier Navy Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "cpu", src.getModifiedItemAttr("roleBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "capacitorNeed", src.getModifiedItemAttr("roleBonus")) diff --git a/eos/effects/rolebonuswdrange.py b/eos/effects/rolebonuswdrange.py new file mode 100644 index 000000000..6e653055e --- /dev/null +++ b/eos/effects/rolebonuswdrange.py @@ -0,0 +1,8 @@ +# roleBonusWDRange +# +# Used by: +# Ship: Crucifier Navy Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "falloff", src.getModifiedItemAttr("roleBonus")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "maxRange", src.getModifiedItemAttr("roleBonus")) diff --git a/eos/effects/scanstrengthbonuspercentactivate.py b/eos/effects/scanstrengthbonuspercentactivate.py index 7a652b614..50b7b50ba 100644 --- a/eos/effects/scanstrengthbonuspercentactivate.py +++ b/eos/effects/scanstrengthbonuspercentactivate.py @@ -1,7 +1,6 @@ # scanStrengthBonusPercentActivate # # Used by: -# Modules from group: ECCM (44 of 44) # Module: QA ECCM type = "active" def handler(fit, module, context): diff --git a/eos/effects/scanstrengthbonuspercentonline.py b/eos/effects/scanstrengthbonuspercentonline.py index c8f392151..0dc5400fa 100644 --- a/eos/effects/scanstrengthbonuspercentonline.py +++ b/eos/effects/scanstrengthbonuspercentonline.py @@ -1,7 +1,7 @@ # scanStrengthBonusPercentOnline # # Used by: -# Modules from group: Sensor Backup Array (72 of 72) +# Modules from group: Signal Amplifier (7 of 7) type = "passive" def handler(fit, module, context): for type in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): diff --git a/eos/effects/scanstrengthtargetpercentbonus.py b/eos/effects/scanstrengthtargetpercentbonus.py deleted file mode 100644 index 5b3f9aa4a..000000000 --- a/eos/effects/scanstrengthtargetpercentbonus.py +++ /dev/null @@ -1,11 +0,0 @@ -# scanStrengthTargetPercentBonus -# -# Used by: -# Modules from group: Projected ECCM (7 of 7) -type = "projected", "active" -def handler(fit, module, context): - if "projected" not in context: return - for type in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): - fit.ship.boostItemAttr("scan%sStrength" % type, - module.getModifiedItemAttr("scan%sStrengthPercent" % type), - stackingPenalties = True) diff --git a/eos/effects/scriptmissileguidancecomputeraoecloudsizebonusbonus.py b/eos/effects/scriptmissileguidancecomputeraoecloudsizebonusbonus.py index d83cdc907..c97e060f7 100644 --- a/eos/effects/scriptmissileguidancecomputeraoecloudsizebonusbonus.py +++ b/eos/effects/scriptmissileguidancecomputeraoecloudsizebonusbonus.py @@ -1,7 +1,7 @@ # scriptMissileGuidanceComputerAOECloudSizeBonusBonus # # Used by: -# Charges from group: Missile Guidance Script (2 of 2) +# Charges named like: Missile Script (4 of 4) type = "passive" def handler(fit, module, context): module.boostItemAttr("aoeCloudSizeBonus", module.getModifiedChargeAttr("aoeCloudSizeBonusBonus")) diff --git a/eos/effects/scriptmissileguidancecomputeraoevelocitybonusbonus.py b/eos/effects/scriptmissileguidancecomputeraoevelocitybonusbonus.py index 8a0f956ea..0f7d96734 100644 --- a/eos/effects/scriptmissileguidancecomputeraoevelocitybonusbonus.py +++ b/eos/effects/scriptmissileguidancecomputeraoevelocitybonusbonus.py @@ -1,7 +1,7 @@ # scriptMissileGuidanceComputerAOEVelocityBonusBonus # # Used by: -# Charges from group: Missile Guidance Script (2 of 2) +# Charges named like: Missile Script (4 of 4) type = "passive" def handler(fit, module, context): module.boostItemAttr("aoeVelocityBonus", module.getModifiedChargeAttr("aoeVelocityBonusBonus")) diff --git a/eos/effects/scriptmissileguidancecomputerexplosiondelaybonusbonus.py b/eos/effects/scriptmissileguidancecomputerexplosiondelaybonusbonus.py index 186bbc635..5f58e1686 100644 --- a/eos/effects/scriptmissileguidancecomputerexplosiondelaybonusbonus.py +++ b/eos/effects/scriptmissileguidancecomputerexplosiondelaybonusbonus.py @@ -1,7 +1,7 @@ # scriptMissileGuidanceComputerExplosionDelayBonusBonus # # Used by: -# Charges from group: Missile Guidance Script (2 of 2) +# Charges named like: Missile Script (4 of 4) type = "passive" def handler(fit, module, context): module.boostItemAttr("explosionDelayBonus", module.getModifiedChargeAttr("explosionDelayBonusBonus")) diff --git a/eos/effects/scriptmissileguidancecomputermissilevelocitybonusbonus.py b/eos/effects/scriptmissileguidancecomputermissilevelocitybonusbonus.py index 8ab36f8a8..31859dbc9 100644 --- a/eos/effects/scriptmissileguidancecomputermissilevelocitybonusbonus.py +++ b/eos/effects/scriptmissileguidancecomputermissilevelocitybonusbonus.py @@ -1,7 +1,7 @@ # scriptMissileGuidanceComputerMissileVelocityBonusBonus # # Used by: -# Charges from group: Missile Guidance Script (2 of 2) +# Charges named like: Missile Script (4 of 4) type = "passive" def handler(fit, module, context): module.boostItemAttr("missileVelocityBonus", module.getModifiedChargeAttr("missileVelocityBonusBonus")) diff --git a/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py b/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py index 4327e4583..1eb7b7b6b 100644 --- a/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py +++ b/eos/effects/scriptsensorboostermaxtargetrangebonusbonus.py @@ -1,7 +1,7 @@ # scriptSensorBoosterMaxTargetRangeBonusBonus # # Used by: -# Charges from group: Sensor Booster Script (2 of 2) +# Charges from group: Sensor Booster Script (3 of 3) # Charges from group: Sensor Dampener Script (2 of 2) type = "passive" def handler(fit, module, context): diff --git a/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py b/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py index 743dc0753..2372aa055 100644 --- a/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py +++ b/eos/effects/scriptsensorboosterscanresolutionbonusbonus.py @@ -1,7 +1,7 @@ # scriptSensorBoosterScanResolutionBonusBonus # # Used by: -# Charges from group: Sensor Booster Script (2 of 2) +# Charges from group: Sensor Booster Script (3 of 3) # Charges from group: Sensor Dampener Script (2 of 2) type = "passive" def handler(fit, module, context): diff --git a/eos/effects/scriptsensorboostersensorstrengthbonusbonus.py b/eos/effects/scriptsensorboostersensorstrengthbonusbonus.py new file mode 100644 index 000000000..f0f6500a6 --- /dev/null +++ b/eos/effects/scriptsensorboostersensorstrengthbonusbonus.py @@ -0,0 +1,8 @@ +# scriptSensorBoosterSensorStrengthBonusBonus +# +# Used by: +# Charges from group: Sensor Booster Script (3 of 3) +type = "active" +def handler(fit, module, context): + for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): + module.boostItemAttr("scan{}StrengthPercent".format(scanType), module.getModifiedChargeAttr("sensorStrengthBonusBonus")) diff --git a/eos/effects/sensorboosteractivepercentage.py b/eos/effects/sensorboosteractivepercentage.py index 6026acbc7..c6e61424f 100644 --- a/eos/effects/sensorboosteractivepercentage.py +++ b/eos/effects/sensorboosteractivepercentage.py @@ -1,10 +1,17 @@ # sensorBoosterActivePercentage # # Used by: -# Modules from group: Sensor Booster (12 of 12) +# Modules from group: Sensor Booster (16 of 16) type = "active" def handler(fit, module, context): fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"), stackingPenalties = True) fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"), stackingPenalties = True) + + for scanType in ("Gravimetric", "Magnetometric", "Radar", "Ladar"): + fit.ship.boostItemAttr( + "scan{}Strength".format(scanType), + module.getModifiedItemAttr("scan{}StrengthPercent".format(scanType)), + stackingPenalties=True + ) diff --git a/eos/effects/shieldboostamplifierpassivebooster.py b/eos/effects/shieldboostamplifierpassivebooster.py index 9e7d3ea4e..b0b98b09c 100644 --- a/eos/effects/shieldboostamplifierpassivebooster.py +++ b/eos/effects/shieldboostamplifierpassivebooster.py @@ -2,6 +2,7 @@ # # Used by: # Implants named like: Blue Pill Booster (5 of 5) +# Implant: Antipharmakon Thureo type = "passive" def handler(fit, container, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation") or mod.item.requiresSkill("Capital Shield Operation"), diff --git a/eos/effects/shieldcapacitymultiply.py b/eos/effects/shieldcapacitymultiply.py index 9cf482cc7..ea6bfa8c6 100644 --- a/eos/effects/shieldcapacitymultiply.py +++ b/eos/effects/shieldcapacitymultiply.py @@ -1,12 +1,10 @@ # shieldCapacityMultiply # # Used by: -# Modules from group: Capacitor Flux Coil (6 of 6) # Modules from group: Capacitor Power Relay (20 of 20) # Modules from group: Power Diagnostic System (23 of 23) # Modules from group: Reactor Control Unit (22 of 22) -# Modules from group: Shield Flux Coil (11 of 11) -# Modules from group: Shield Power Relay (11 of 11) +# Modules named like: Flux Coil (12 of 12) type = "passive" def handler(fit, module, context): fit.ship.multiplyItemAttr("shieldCapacity", module.getModifiedItemAttr("shieldCapacityMultiplier")) \ No newline at end of file diff --git a/eos/effects/shieldoperationrechargeratebonuspostpercentonline.py b/eos/effects/shieldoperationrechargeratebonuspostpercentonline.py index 4b386e993..c5f89daf0 100644 --- a/eos/effects/shieldoperationrechargeratebonuspostpercentonline.py +++ b/eos/effects/shieldoperationrechargeratebonuspostpercentonline.py @@ -1,7 +1,7 @@ # shieldOperationRechargeratebonusPostPercentOnline # # Used by: -# Modules from group: Shield Power Relay (11 of 11) +# Modules from group: Shield Power Relay (6 of 6) type = "passive" def handler(fit, module, context): fit.ship.boostItemAttr("shieldRechargeRate", module.getModifiedItemAttr("rechargeratebonus") or 0) diff --git a/eos/effects/shieldtransfer.py b/eos/effects/shieldtransfer.py index b643d4ced..c5a95088e 100644 --- a/eos/effects/shieldtransfer.py +++ b/eos/effects/shieldtransfer.py @@ -1,7 +1,6 @@ # shieldTransfer # # Used by: -# Modules from group: Remote Shield Booster (39 of 39) # Drones named like: Shield Maintenance Bot (6 of 6) # Module: QA Shield Transporter - 5 Players type = "projected", "active" diff --git a/eos/effects/shieldtransporterfalloffbonus.py b/eos/effects/shieldtransporterfalloffbonus.py new file mode 100644 index 000000000..80c2b5de7 --- /dev/null +++ b/eos/effects/shieldtransporterfalloffbonus.py @@ -0,0 +1,10 @@ +# shieldTransporterFalloffBonus +# +# Used by: +# Variations of ship: Bantam (2 of 2) +# Variations of ship: Burst (2 of 2) +# Ship: Osprey +# Ship: Scythe +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster", "falloffEffectiveness", src.getModifiedItemAttr("falloffBonus")) diff --git a/eos/effects/shieldtransportermaxrangebonus.py b/eos/effects/shieldtransportermaxrangebonus.py index bf1e1eafb..5e97c3447 100644 --- a/eos/effects/shieldtransportermaxrangebonus.py +++ b/eos/effects/shieldtransportermaxrangebonus.py @@ -1,11 +1,9 @@ # shieldTransporterMaxRangeBonus # # Used by: -# Ship: Bantam -# Ship: Burst # Ship: Osprey # Ship: Scythe type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster", - "shieldTransferRange", ship.getModifiedItemAttr("maxRangeBonus")) + "maxRange", ship.getModifiedItemAttr("maxRangeBonus")) diff --git a/eos/effects/shipbonusaoevelocityrocketsmf.py b/eos/effects/shipbonusaoevelocityrocketsmf.py new file mode 100644 index 000000000..c67e6a4a9 --- /dev/null +++ b/eos/effects/shipbonusaoevelocityrocketsmf.py @@ -0,0 +1,7 @@ +# shipBonusAoeVelocityRocketsMF +# +# Used by: +# Ship: Vigil Fleet Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), "aoeVelocity", src.getModifiedItemAttr("shipBonusMF"), skill="Minmatar Frigate") diff --git a/eos/effects/shipbonusdreadcitadelcruiserofc1.py b/eos/effects/shipbonusdreadcitadelcruiserofc1.py index 34f6d176c..3d815d693 100644 --- a/eos/effects/shipbonusdreadcitadelcruiserofc1.py +++ b/eos/effects/shipbonusdreadcitadelcruiserofc1.py @@ -4,5 +4,5 @@ # Ship: Phoenix type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("XL Cruise Missiles"), "speed", ship.getModifiedItemAttr("dreadnoughtShipBonusC1"), skill="Caldari Dreadnought") diff --git a/eos/effects/shipbonusdreadcitadeltorprofc1.py b/eos/effects/shipbonusdreadcitadeltorprofc1.py index 095344f10..74ac8e7fa 100644 --- a/eos/effects/shipbonusdreadcitadeltorprofc1.py +++ b/eos/effects/shipbonusdreadcitadeltorprofc1.py @@ -4,5 +4,5 @@ # Ship: Phoenix type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Citadel Torpedoes"), + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("XL Torpedoes"), "speed", ship.getModifiedItemAttr("dreadnoughtShipBonusC1"), skill="Caldari Dreadnought") diff --git a/eos/effects/shipbonusdronedamagemultiplierad1.py b/eos/effects/shipbonusdronedamagemultiplierad1.py index 7e70551d7..b18b20bcb 100644 --- a/eos/effects/shipbonusdronedamagemultiplierad1.py +++ b/eos/effects/shipbonusdronedamagemultiplierad1.py @@ -1,8 +1,7 @@ # shipBonusDroneDamageMultiplierAD1 # # Used by: -# Ship: Dragoon +# Variations of ship: Dragoon (2 of 2) type = "passive" -def handler(fit, ship, context): - fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), - "damageMultiplier", ship.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") +def handler(fit, src, context): + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "damageMultiplier", src.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusdronedamagemultipliergd1.py b/eos/effects/shipbonusdronedamagemultipliergd1.py index b753cddff..b033f6d34 100644 --- a/eos/effects/shipbonusdronedamagemultipliergd1.py +++ b/eos/effects/shipbonusdronedamagemultipliergd1.py @@ -1,8 +1,7 @@ # shipBonusDroneDamageMultiplierGD1 # # Used by: -# Ship: Algos +# Variations of ship: Algos (2 of 2) type = "passive" -def handler(fit, ship, context): - fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), - "damageMultiplier", ship.getModifiedItemAttr("shipBonusGD1"), skill="Gallente Destroyer") +def handler(fit, src, context): + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "damageMultiplier", src.getModifiedItemAttr("shipBonusGD1"), skill="Gallente Destroyer") diff --git a/eos/effects/shipbonusdronehitpointsad1.py b/eos/effects/shipbonusdronehitpointsad1.py index d3dd36216..3caf0535b 100644 --- a/eos/effects/shipbonusdronehitpointsad1.py +++ b/eos/effects/shipbonusdronehitpointsad1.py @@ -1,9 +1,9 @@ # shipBonusDroneHitpointsAD1 # # Used by: -# Ship: Dragoon +# Variations of ship: Dragoon (2 of 2) type = "passive" -def handler(fit, ship, context): - for layer in ("shieldCapacity", "armorHP", "hp"): - fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), - layer, ship.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") +def handler(fit, src, context): + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "shieldCapacity", src.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "hp", src.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "armorHP", src.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusdronehitpointsgd1.py b/eos/effects/shipbonusdronehitpointsgd1.py index 975b0ae31..986683701 100644 --- a/eos/effects/shipbonusdronehitpointsgd1.py +++ b/eos/effects/shipbonusdronehitpointsgd1.py @@ -1,9 +1,9 @@ # shipBonusDroneHitpointsGD1 # # Used by: -# Ship: Algos +# Variations of ship: Algos (2 of 2) type = "passive" -def handler(fit, ship, context): - for layer in ("shieldCapacity", "armorHP", "hp"): - fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), - layer, ship.getModifiedItemAttr("shipBonusGD1"), skill="Gallente Destroyer") +def handler(fit, src, context): + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "shieldCapacity", src.getModifiedItemAttr("shipBonusGD1"), skill="Gallente Destroyer") + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "armorHP", src.getModifiedItemAttr("shipBonusGD1"), skill="Gallente Destroyer") + fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "hp", src.getModifiedItemAttr("shipBonusGD1"), skill="Gallente Destroyer") diff --git a/eos/effects/shipbonusdronehitpointsgf.py b/eos/effects/shipbonusdronehitpointsgf.py index 2ca7e2a3e..03f6cf729 100644 --- a/eos/effects/shipbonusdronehitpointsgf.py +++ b/eos/effects/shipbonusdronehitpointsgf.py @@ -2,6 +2,7 @@ # # Used by: # Ship: Astero +# Ship: Maulus Navy Issue # Ship: Tristan type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipbonusdronetrackinggf.py b/eos/effects/shipbonusdronetrackinggf.py index a2996a41e..c6ec28d2c 100644 --- a/eos/effects/shipbonusdronetrackinggf.py +++ b/eos/effects/shipbonusdronetrackinggf.py @@ -1,6 +1,7 @@ # shipBonusDroneTrackingGF # # Used by: +# Ship: Maulus Navy Issue # Ship: Tristan type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipbonusemarmorresistancead2.py b/eos/effects/shipbonusemarmorresistancead2.py new file mode 100644 index 000000000..7bc317a77 --- /dev/null +++ b/eos/effects/shipbonusemarmorresistancead2.py @@ -0,0 +1,7 @@ +# shipBonusEMArmorResistanceAD2 +# +# Used by: +# Ship: Pontifex +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorEmDamageResonance", src.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusemarmorresistancegd2.py b/eos/effects/shipbonusemarmorresistancegd2.py new file mode 100644 index 000000000..bd2d53724 --- /dev/null +++ b/eos/effects/shipbonusemarmorresistancegd2.py @@ -0,0 +1,7 @@ +# shipBonusEMArmorResistanceGD2 +# +# Used by: +# Ship: Magus +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorEmDamageResonance", src.getModifiedItemAttr("shipBonusGD2"), skill="Gallente Destroyer") diff --git a/eos/effects/shipbonusemmissiledamagecd1.py b/eos/effects/shipbonusemmissiledamagecd1.py new file mode 100644 index 000000000..4c5a36d8f --- /dev/null +++ b/eos/effects/shipbonusemmissiledamagecd1.py @@ -0,0 +1,7 @@ +# shipBonusEMMissileDamageCD1 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "emDamage", src.getModifiedItemAttr("shipBonusCD1"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusemmissiledmgmd1.py b/eos/effects/shipbonusemmissiledmgmd1.py new file mode 100644 index 000000000..9f1e5175c --- /dev/null +++ b/eos/effects/shipbonusemmissiledmgmd1.py @@ -0,0 +1,7 @@ +# shipBonusEMMissileDmgMD1 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "emDamage", src.getModifiedItemAttr("shipBonusMD1"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonusemshieldresistancemd2.py b/eos/effects/shipbonusemshieldresistancemd2.py new file mode 100644 index 000000000..c25f179da --- /dev/null +++ b/eos/effects/shipbonusemshieldresistancemd2.py @@ -0,0 +1,7 @@ +# shipBonusEMShieldResistanceMD2 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldEmDamageResonance", src.getModifiedItemAttr("shipBonusMD2"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonusenergyneutfalloffab2.py b/eos/effects/shipbonusenergyneutfalloffab2.py new file mode 100644 index 000000000..e49217c81 --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffab2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffAB2 +# +# Used by: +# Ship: Armageddon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAB2"), skill="Amarr Battleship") diff --git a/eos/effects/shipbonusenergyneutfalloffac3.py b/eos/effects/shipbonusenergyneutfalloffac3.py new file mode 100644 index 000000000..3434e6988 --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffac3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffAC3 +# +# Used by: +# Ship: Vangel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAC3"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusenergyneutfalloffad1.py b/eos/effects/shipbonusenergyneutfalloffad1.py new file mode 100644 index 000000000..cf34118ff --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffad1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffAD1 +# +# Used by: +# Ship: Dragoon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusenergyneutfalloffaf3.py b/eos/effects/shipbonusenergyneutfalloffaf3.py new file mode 100644 index 000000000..248ed9f36 --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffaf3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffAF3 +# +# Used by: +# Ship: Malice +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("shipBonus3AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusenergyneutfalloffeaf3.py b/eos/effects/shipbonusenergyneutfalloffeaf3.py new file mode 100644 index 000000000..f4a99fa85 --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffeaf3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffEAF3 +# +# Used by: +# Ship: Sentinel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusElectronicAttackShip3"), skill="Electronic Attack Ships") diff --git a/eos/effects/shipbonusenergyneutfalloffrs2.py b/eos/effects/shipbonusenergyneutfalloffrs2.py new file mode 100644 index 000000000..350e3d199 --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffrs2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffRS2 +# +# Used by: +# Ship: Pilgrim +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergyneutfalloffrs3.py b/eos/effects/shipbonusenergyneutfalloffrs3.py new file mode 100644 index 000000000..f3396dc37 --- /dev/null +++ b/eos/effects/shipbonusenergyneutfalloffrs3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutFalloffRS3 +# +# Used by: +# Ship: Curse +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergyneutoptimalab.py b/eos/effects/shipbonusenergyneutoptimalab.py new file mode 100644 index 000000000..7e887f0e6 --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimalab.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalAB +# +# Used by: +# Ship: Armageddon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("shipBonusAB"), skill="Amarr Battleship") diff --git a/eos/effects/shipbonusenergyneutoptimalac1.py b/eos/effects/shipbonusenergyneutoptimalac1.py new file mode 100644 index 000000000..b66e58a46 --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimalac1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalAC1 +# +# Used by: +# Ship: Vangel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusenergyneutoptimalad2.py b/eos/effects/shipbonusenergyneutoptimalad2.py new file mode 100644 index 000000000..682a574ad --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimalad2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalAD2 +# +# Used by: +# Ship: Dragoon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusenergyneutoptimalaf2.py b/eos/effects/shipbonusenergyneutoptimalaf2.py new file mode 100644 index 000000000..39609d68b --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimalaf2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalAF2 +# +# Used by: +# Ship: Malice +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusenergyneutoptimaleaf1.py b/eos/effects/shipbonusenergyneutoptimaleaf1.py new file mode 100644 index 000000000..29645d514 --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimaleaf1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalEAF1 +# +# Used by: +# Ship: Sentinel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships") diff --git a/eos/effects/shipbonusenergyneutoptimalrs1.py b/eos/effects/shipbonusenergyneutoptimalrs1.py new file mode 100644 index 000000000..e045b53eb --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimalrs1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalRS1 +# +# Used by: +# Ship: Curse +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergyneutoptimalrs3.py b/eos/effects/shipbonusenergyneutoptimalrs3.py new file mode 100644 index 000000000..e71d9d93d --- /dev/null +++ b/eos/effects/shipbonusenergyneutoptimalrs3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNeutOptimalRS3 +# +# Used by: +# Ship: Pilgrim +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "maxRange", src.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergyneutrangeab2.py b/eos/effects/shipbonusenergyneutrangeab2.py deleted file mode 100644 index dee87f0fb..000000000 --- a/eos/effects/shipbonusenergyneutrangeab2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipBonusEnergyNeutRangeAB2 -# -# Used by: -# Ship: Armageddon -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonusAB2"), skill="Amarr Battleship") diff --git a/eos/effects/shipbonusenergyneutrangead2.py b/eos/effects/shipbonusenergyneutrangead2.py deleted file mode 100644 index d5531edd7..000000000 --- a/eos/effects/shipbonusenergyneutrangead2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipBonusEnergyNeutRangeAD2 -# -# Used by: -# Ship: Dragoon -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusenergynosfalloffab2.py b/eos/effects/shipbonusenergynosfalloffab2.py new file mode 100644 index 000000000..4fd3d877e --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffab2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffAB2 +# +# Used by: +# Ship: Armageddon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAB2"), skill="Amarr Battleship") diff --git a/eos/effects/shipbonusenergynosfalloffac3.py b/eos/effects/shipbonusenergynosfalloffac3.py new file mode 100644 index 000000000..e2099faf4 --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffac3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffAC3 +# +# Used by: +# Ship: Vangel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAC3"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusenergynosfalloffad1.py b/eos/effects/shipbonusenergynosfalloffad1.py new file mode 100644 index 000000000..466f0f587 --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffad1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffAD1 +# +# Used by: +# Ship: Dragoon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAD1"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusenergynosfalloffaf3.py b/eos/effects/shipbonusenergynosfalloffaf3.py new file mode 100644 index 000000000..30837fc68 --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffaf3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffAF3 +# +# Used by: +# Ship: Malice +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("shipBonus3AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusenergynosfalloffeaf3.py b/eos/effects/shipbonusenergynosfalloffeaf3.py new file mode 100644 index 000000000..fddede98e --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffeaf3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffEAF3 +# +# Used by: +# Ship: Sentinel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusElectronicAttackShip3"), skill="Electronic Attack Ships") diff --git a/eos/effects/shipbonusenergynosfalloffrs2.py b/eos/effects/shipbonusenergynosfalloffrs2.py new file mode 100644 index 000000000..448e9f26e --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffrs2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffRS2 +# +# Used by: +# Ship: Pilgrim +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergynosfalloffrs3.py b/eos/effects/shipbonusenergynosfalloffrs3.py new file mode 100644 index 000000000..2cc7313b9 --- /dev/null +++ b/eos/effects/shipbonusenergynosfalloffrs3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosFalloffRS3 +# +# Used by: +# Ship: Curse +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "falloffEffectiveness", src.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergynosoptimalab.py b/eos/effects/shipbonusenergynosoptimalab.py new file mode 100644 index 000000000..07acffc22 --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimalab.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalAB +# +# Used by: +# Ship: Armageddon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("shipBonusAB"), skill="Amarr Battleship") diff --git a/eos/effects/shipbonusenergynosoptimalac1.py b/eos/effects/shipbonusenergynosoptimalac1.py new file mode 100644 index 000000000..ce1d7d17e --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimalac1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalAC1 +# +# Used by: +# Ship: Vangel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusenergynosoptimalad2.py b/eos/effects/shipbonusenergynosoptimalad2.py new file mode 100644 index 000000000..a21ba98b9 --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimalad2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalAD2 +# +# Used by: +# Ship: Dragoon +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusenergynosoptimalaf2.py b/eos/effects/shipbonusenergynosoptimalaf2.py new file mode 100644 index 000000000..c7b5ca636 --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimalaf2.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalAF2 +# +# Used by: +# Ship: Malice +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusenergynosoptimaleaf1.py b/eos/effects/shipbonusenergynosoptimaleaf1.py new file mode 100644 index 000000000..2874e596e --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimaleaf1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalEAF1 +# +# Used by: +# Ship: Sentinel +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("eliteBonusElectronicAttackShip1"), skill="Electronic Attack Ships") diff --git a/eos/effects/shipbonusenergynosoptimalrs1.py b/eos/effects/shipbonusenergynosoptimalrs1.py new file mode 100644 index 000000000..9755223ed --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimalrs1.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalRS1 +# +# Used by: +# Ship: Curse +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("eliteBonusReconShip1"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergynosoptimalrs3.py b/eos/effects/shipbonusenergynosoptimalrs3.py new file mode 100644 index 000000000..8f9da2fcf --- /dev/null +++ b/eos/effects/shipbonusenergynosoptimalrs3.py @@ -0,0 +1,7 @@ +# shipBonusEnergyNosOptimalRS3 +# +# Used by: +# Ship: Pilgrim +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "maxRange", src.getModifiedItemAttr("eliteBonusReconShip3"), skill="Recon Ships") diff --git a/eos/effects/shipbonusenergyvampirerangeab2.py b/eos/effects/shipbonusenergyvampirerangeab2.py deleted file mode 100644 index 2dded0794..000000000 --- a/eos/effects/shipbonusenergyvampirerangeab2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipBonusEnergyVampireRangeAB2 -# -# Used by: -# Ship: Armageddon -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", - "powerTransferRange", ship.getModifiedItemAttr("shipBonusAB2"), skill="Amarr Battleship") diff --git a/eos/effects/shipbonusenergyvampirerangead2.py b/eos/effects/shipbonusenergyvampirerangead2.py index d3fe34378..a71170696 100644 --- a/eos/effects/shipbonusenergyvampirerangead2.py +++ b/eos/effects/shipbonusenergyvampirerangead2.py @@ -4,5 +4,5 @@ # Ship: Dragoon type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferRange", ship.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py b/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py index 7ecc88cbc..bd37ce743 100644 --- a/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py +++ b/eos/effects/shipbonusewremotesensordampenerfalloffbonusgc1.py @@ -4,5 +4,5 @@ # Ship: Celestis type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", - "falloff", ship.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", + "falloffEffectiveness", ship.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser") diff --git a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py index cafcea20d..7c7d1c512 100644 --- a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py +++ b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgc2.py @@ -4,5 +4,5 @@ # Variations of ship: Celestis (3 of 3) type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "maxTargetRangeBonus", ship.getModifiedItemAttr("shipBonusGC2"), skill="Gallente Cruiser") diff --git a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py index 9b48c6bf5..e321d8f41 100644 --- a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py +++ b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusgf2.py @@ -1,8 +1,9 @@ # shipBonusEwRemoteSensorDampenerMaxTargetRangeBonusGF2 # # Used by: -# Variations of ship: Maulus (2 of 2) +# Ship: Keres +# Ship: Maulus type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "maxTargetRangeBonus", ship.getModifiedItemAttr("shipBonusGF2"), skill="Gallente Frigate") diff --git a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py index 3c7a2a941..90874e57f 100644 --- a/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py +++ b/eos/effects/shipbonusewremotesensordampenermaxtargetrangebonusrookie.py @@ -4,5 +4,5 @@ # Ship: Velator type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "maxTargetRangeBonus", ship.getModifiedItemAttr("rookieDampStrengthBonus")) diff --git a/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py b/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py index 1a7adcda9..677cc1169 100644 --- a/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py +++ b/eos/effects/shipbonusewremotesensordampeneroptimalbonusgc1.py @@ -4,5 +4,5 @@ # Ship: Celestis type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "maxRange", ship.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser") diff --git a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py index 59c963ba3..7c676b180 100644 --- a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py +++ b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgc2.py @@ -4,5 +4,5 @@ # Variations of ship: Celestis (3 of 3) type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "scanResolutionBonus", ship.getModifiedItemAttr("shipBonusGC2"), skill="Gallente Cruiser") diff --git a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py index 11d937af2..3a1da8294 100644 --- a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py +++ b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusgf2.py @@ -1,8 +1,9 @@ # shipBonusEwRemoteSensorDampenerScanResolutionBonusGF2 # # Used by: -# Variations of ship: Maulus (2 of 2) +# Ship: Keres +# Ship: Maulus type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "scanResolutionBonus", ship.getModifiedItemAttr("shipBonusGF2"), skill="Gallente Frigate") diff --git a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py index 2dd755e1f..fdf1f57cc 100644 --- a/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py +++ b/eos/effects/shipbonusewremotesensordampenerscanresolutionbonusrookie.py @@ -4,5 +4,5 @@ # Ship: Velator type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "scanResolutionBonus", ship.getModifiedItemAttr("rookieDampStrengthBonus")) diff --git a/eos/effects/shipbonusewweapondisruptionrangedisruptionbonusac1.py b/eos/effects/shipbonusewweapondisruptionrangedisruptionbonusac1.py deleted file mode 100644 index 5cb0b2285..000000000 --- a/eos/effects/shipbonusewweapondisruptionrangedisruptionbonusac1.py +++ /dev/null @@ -1,10 +0,0 @@ -# shipBonusEwWeaponDisruptionRangeDisruptionBonusAC1 -# -# Used by: -# Variations of ship: Arbitrator (3 of 3) -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), - "maxRangeBonus", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), - "falloffBonus", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusewweapondisruptionrangedisruptionbonusaf2.py b/eos/effects/shipbonusewweapondisruptionrangedisruptionbonusaf2.py deleted file mode 100644 index f72ad1a0d..000000000 --- a/eos/effects/shipbonusewweapondisruptionrangedisruptionbonusaf2.py +++ /dev/null @@ -1,10 +0,0 @@ -# shipBonusEwWeaponDisruptionRangeDisruptionBonusAF2 -# -# Used by: -# Variations of ship: Crucifier (2 of 2) -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), - "maxRangeBonus", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), - "falloffBonus", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusewweapondisruptionstrengthac1.py b/eos/effects/shipbonusewweapondisruptionstrengthac1.py new file mode 100644 index 000000000..5d8b490e7 --- /dev/null +++ b/eos/effects/shipbonusewweapondisruptionstrengthac1.py @@ -0,0 +1,13 @@ +# shipBonusEwWeaponDisruptionStrengthAC1 +# +# Used by: +# Variations of ship: Arbitrator (3 of 3) +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "missileVelocityBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "aoeVelocityBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "maxRangeBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "explosionDelayBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "aoeCloudSizeBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "trackingSpeedBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "falloffBonus", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusewweapondisruptionstrengthaf2.py b/eos/effects/shipbonusewweapondisruptionstrengthaf2.py new file mode 100644 index 000000000..61a417430 --- /dev/null +++ b/eos/effects/shipbonusewweapondisruptionstrengthaf2.py @@ -0,0 +1,13 @@ +# shipBonusEwWeaponDisruptionStrengthAF2 +# +# Used by: +# Variations of ship: Crucifier (3 of 3) +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "trackingSpeedBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "explosionDelayBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "maxRangeBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "falloffBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "missileVelocityBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "aoeVelocityBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), "aoeCloudSizeBonus", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusac1.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusac1.py deleted file mode 100644 index 4b7638db9..000000000 --- a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusac1.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipBonusEwWeaponDisruptionTrackingSpeedBonusAC1 -# -# Used by: -# Variations of ship: Arbitrator (3 of 3) -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor", - "trackingSpeedBonus", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf2.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf2.py deleted file mode 100644 index cc6eb07cb..000000000 --- a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusaf2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipBonusEwWeaponDisruptionTrackingSpeedBonusAF2 -# -# Used by: -# Variations of ship: Crucifier (2 of 2) -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Weapon Disruption"), - "trackingSpeedBonus", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusrookie.py b/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusrookie.py deleted file mode 100644 index d80b53451..000000000 --- a/eos/effects/shipbonusewweapondisruptiontrackingspeedbonusrookie.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipBonusEwWeaponDisruptionTrackingSpeedBonusRookie -# -# Used by: -# Ship: Impairor -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Tracking Disruptor", - "trackingSpeedBonus", ship.getModifiedItemAttr("rookieWeaponDisruptionBonus")) diff --git a/eos/effects/shipbonusexplosivearmorresistancead2.py b/eos/effects/shipbonusexplosivearmorresistancead2.py new file mode 100644 index 000000000..b9cf16401 --- /dev/null +++ b/eos/effects/shipbonusexplosivearmorresistancead2.py @@ -0,0 +1,7 @@ +# shipBonusExplosiveArmorResistanceAD2 +# +# Used by: +# Ship: Pontifex +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorExplosiveDamageResonance", src.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusexplosivearmorresistancegd2.py b/eos/effects/shipbonusexplosivearmorresistancegd2.py new file mode 100644 index 000000000..9954b848b --- /dev/null +++ b/eos/effects/shipbonusexplosivearmorresistancegd2.py @@ -0,0 +1,7 @@ +# shipBonusExplosiveArmorResistanceGD2 +# +# Used by: +# Ship: Magus +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorExplosiveDamageResonance", src.getModifiedItemAttr("shipBonusGD2"), skill="Gallente Destroyer") diff --git a/eos/effects/shipbonusexplosivemissiledamagecd1.py b/eos/effects/shipbonusexplosivemissiledamagecd1.py new file mode 100644 index 000000000..dab14bcd9 --- /dev/null +++ b/eos/effects/shipbonusexplosivemissiledamagecd1.py @@ -0,0 +1,7 @@ +# shipBonusExplosiveMissileDamageCD1 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "explosiveDamage", src.getModifiedItemAttr("shipBonusCD1"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusexplosivemissiledmgmd1.py b/eos/effects/shipbonusexplosivemissiledmgmd1.py new file mode 100644 index 000000000..4b6852d70 --- /dev/null +++ b/eos/effects/shipbonusexplosivemissiledmgmd1.py @@ -0,0 +1,7 @@ +# shipBonusExplosiveMissileDmgMD1 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "explosiveDamage", src.getModifiedItemAttr("shipBonusMD1"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonusexplosiveshieldresistancemd2.py b/eos/effects/shipbonusexplosiveshieldresistancemd2.py new file mode 100644 index 000000000..3cd1b0b2c --- /dev/null +++ b/eos/effects/shipbonusexplosiveshieldresistancemd2.py @@ -0,0 +1,7 @@ +# shipBonusExplosiveShieldResistanceMD2 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldExplosiveDamageResonance", src.getModifiedItemAttr("shipBonusMD2"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonusjustscramblerrangegf2.py b/eos/effects/shipbonusjustscramblerrangegf2.py new file mode 100644 index 000000000..e620633f2 --- /dev/null +++ b/eos/effects/shipbonusjustscramblerrangegf2.py @@ -0,0 +1,7 @@ +# shipBonusJustScramblerRangeGF2 +# +# Used by: +# Ship: Maulus Navy Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Navigation"), "maxRange", src.getModifiedItemAttr("shipBonusGF2"), skill="Gallente Frigate") diff --git a/eos/effects/shipbonuskineticarmorresistancead2.py b/eos/effects/shipbonuskineticarmorresistancead2.py new file mode 100644 index 000000000..f326f664c --- /dev/null +++ b/eos/effects/shipbonuskineticarmorresistancead2.py @@ -0,0 +1,7 @@ +# shipBonusKineticArmorResistanceAD2 +# +# Used by: +# Ship: Pontifex +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorKineticDamageResonance", src.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonuskineticarmorresistancegd2.py b/eos/effects/shipbonuskineticarmorresistancegd2.py new file mode 100644 index 000000000..fc46a2b17 --- /dev/null +++ b/eos/effects/shipbonuskineticarmorresistancegd2.py @@ -0,0 +1,7 @@ +# shipBonusKineticArmorResistanceGD2 +# +# Used by: +# Ship: Magus +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorKineticDamageResonance", src.getModifiedItemAttr("shipBonusGD2"), skill="Gallente Destroyer") diff --git a/eos/effects/shipbonuskineticmissiledamagecd1.py b/eos/effects/shipbonuskineticmissiledamagecd1.py new file mode 100644 index 000000000..fccd0aa38 --- /dev/null +++ b/eos/effects/shipbonuskineticmissiledamagecd1.py @@ -0,0 +1,7 @@ +# shipBonusKineticMissileDamageCD1 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "kineticDamage", src.getModifiedItemAttr("shipBonusCD1"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonuskineticmissiledmgmd1.py b/eos/effects/shipbonuskineticmissiledmgmd1.py new file mode 100644 index 000000000..881fa755c --- /dev/null +++ b/eos/effects/shipbonuskineticmissiledmgmd1.py @@ -0,0 +1,7 @@ +# shipBonusKineticMissileDmgMD1 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "kineticDamage", src.getModifiedItemAttr("shipBonusMD1"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonuskineticshieldresistancemd2.py b/eos/effects/shipbonuskineticshieldresistancemd2.py new file mode 100644 index 000000000..fe8ba6db5 --- /dev/null +++ b/eos/effects/shipbonuskineticshieldresistancemd2.py @@ -0,0 +1,7 @@ +# shipBonusKineticShieldResistanceMD2 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldKineticDamageResonance", src.getModifiedItemAttr("shipBonusMD2"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonusremotearmorrepairamount2af.py b/eos/effects/shipbonusremotearmorrepairamount2af.py index f63032c9a..dbabc1045 100644 --- a/eos/effects/shipbonusremotearmorrepairamount2af.py +++ b/eos/effects/shipbonusremotearmorrepairamount2af.py @@ -1,6 +1,7 @@ # shipBonusRemoteArmorRepairAmount2AF # # Used by: +# Ship: Deacon # Ship: Inquisitor type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipbonusremotearmorrepairamountgf2.py b/eos/effects/shipbonusremotearmorrepairamountgf2.py index 44c6285a5..56bb2a1bb 100644 --- a/eos/effects/shipbonusremotearmorrepairamountgf2.py +++ b/eos/effects/shipbonusremotearmorrepairamountgf2.py @@ -1,7 +1,7 @@ # shipBonusRemoteArmorRepairAmountGF2 # # Used by: -# Ship: Navitas +# Variations of ship: Navitas (2 of 2) type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", diff --git a/eos/effects/shipbonusremotearmorrepaircapneedaf.py b/eos/effects/shipbonusremotearmorrepaircapneedaf.py index 924fb5e8b..b79927306 100644 --- a/eos/effects/shipbonusremotearmorrepaircapneedaf.py +++ b/eos/effects/shipbonusremotearmorrepaircapneedaf.py @@ -1,6 +1,7 @@ # shipBonusRemoteArmorRepairCapNeedAF # # Used by: +# Ship: Deacon # Ship: Inquisitor type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipbonusremotearmorrepaircapneedgf.py b/eos/effects/shipbonusremotearmorrepaircapneedgf.py index 6e7bbf8f6..f081267cf 100644 --- a/eos/effects/shipbonusremotearmorrepaircapneedgf.py +++ b/eos/effects/shipbonusremotearmorrepaircapneedgf.py @@ -1,7 +1,7 @@ # shipBonusRemoteArmorRepairCapNeedGF # # Used by: -# Ship: Navitas +# Variations of ship: Navitas (2 of 2) type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer", diff --git a/eos/effects/shipbonusremoterepairrangepiratefaction2.py b/eos/effects/shipbonusremoterepairrangepiratefaction2.py index d6e1fe76e..bdaf8a687 100644 --- a/eos/effects/shipbonusremoterepairrangepiratefaction2.py +++ b/eos/effects/shipbonusremoterepairrangepiratefaction2.py @@ -6,3 +6,5 @@ type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "maxRange", ship.getModifiedItemAttr("shipBonusPirateFaction2")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), + "falloffEffectiveness", ship.getModifiedItemAttr("shipBonusPirateFaction2")) \ No newline at end of file diff --git a/eos/effects/shipbonusremotetrackingcomputerfalloffgc2.py b/eos/effects/shipbonusremotetrackingcomputerfalloffgc2.py new file mode 100644 index 000000000..621e5f2e9 --- /dev/null +++ b/eos/effects/shipbonusremotetrackingcomputerfalloffgc2.py @@ -0,0 +1,8 @@ +# shipBonusRemoteTrackingComputerFalloffGC2 +# +# Used by: +# Ship: Oneiros +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", + "falloffEffectiveness", ship.getModifiedItemAttr("shipBonusGC2"), skill="Gallente Cruiser") diff --git a/eos/effects/shipbonusremotetrackingcomputerfalloffmc.py b/eos/effects/shipbonusremotetrackingcomputerfalloffmc.py new file mode 100644 index 000000000..ffc402d88 --- /dev/null +++ b/eos/effects/shipbonusremotetrackingcomputerfalloffmc.py @@ -0,0 +1,8 @@ +# shipBonusRemoteTrackingComputerFalloffMC +# +# Used by: +# Ship: Scimitar +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Tracking Computer", + "falloffEffectiveness", ship.getModifiedItemAttr("shipBonusMC"), skill="Minmatar Cruiser") diff --git a/eos/effects/shipbonusshieldboostermb1a.py b/eos/effects/shipbonusshieldboostermb1a.py index 708bb712e..10c8f3c72 100644 --- a/eos/effects/shipbonusshieldboostermb1a.py +++ b/eos/effects/shipbonusshieldboostermb1a.py @@ -4,5 +4,5 @@ # Ship: Maelstrom type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Booster", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Operation"), "shieldBonus", ship.getModifiedItemAttr("shipBonusMB"), skill="Minmatar Battleship") diff --git a/eos/effects/shipbonusshieldemresistancecd2.py b/eos/effects/shipbonusshieldemresistancecd2.py new file mode 100644 index 000000000..bbae40146 --- /dev/null +++ b/eos/effects/shipbonusshieldemresistancecd2.py @@ -0,0 +1,7 @@ +# shipBonusShieldEMResistanceCD2 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldEmDamageResonance", src.getModifiedItemAttr("shipBonusCD2"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusshieldexplosiveresistancecd2.py b/eos/effects/shipbonusshieldexplosiveresistancecd2.py new file mode 100644 index 000000000..04f590b5b --- /dev/null +++ b/eos/effects/shipbonusshieldexplosiveresistancecd2.py @@ -0,0 +1,7 @@ +# shipBonusShieldExplosiveResistanceCD2 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldExplosiveDamageResonance", src.getModifiedItemAttr("shipBonusCD2"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusshieldkineticresistancecd2.py b/eos/effects/shipbonusshieldkineticresistancecd2.py new file mode 100644 index 000000000..d48537e8d --- /dev/null +++ b/eos/effects/shipbonusshieldkineticresistancecd2.py @@ -0,0 +1,7 @@ +# shipBonusShieldKineticResistanceCD2 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldKineticDamageResonance", src.getModifiedItemAttr("shipBonusCD2"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusshieldthermalresistancecd2.py b/eos/effects/shipbonusshieldthermalresistancecd2.py new file mode 100644 index 000000000..2554e9bce --- /dev/null +++ b/eos/effects/shipbonusshieldthermalresistancecd2.py @@ -0,0 +1,7 @@ +# shipBonusShieldThermalResistanceCD2 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldThermalDamageResonance", src.getModifiedItemAttr("shipBonusCD2"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusshieldtransferboostamountcf2.py b/eos/effects/shipbonusshieldtransferboostamountcf2.py index 8831ac6e8..601c4ca7f 100644 --- a/eos/effects/shipbonusshieldtransferboostamountcf2.py +++ b/eos/effects/shipbonusshieldtransferboostamountcf2.py @@ -1,7 +1,7 @@ # shipBonusShieldTransferBoostAmountCF2 # # Used by: -# Ship: Bantam +# Variations of ship: Bantam (2 of 2) type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), diff --git a/eos/effects/shipbonusshieldtransferboostamountmf2.py b/eos/effects/shipbonusshieldtransferboostamountmf2.py index aeed31fe2..9cca8c9e0 100644 --- a/eos/effects/shipbonusshieldtransferboostamountmf2.py +++ b/eos/effects/shipbonusshieldtransferboostamountmf2.py @@ -1,7 +1,7 @@ # shipBonusShieldTransferBoostAmountMF2 # # Used by: -# Ship: Burst +# Variations of ship: Burst (2 of 2) type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), diff --git a/eos/effects/shipbonusshieldtransfercapneedcf.py b/eos/effects/shipbonusshieldtransfercapneedcf.py index 28fbbf8fb..6f216c594 100644 --- a/eos/effects/shipbonusshieldtransfercapneedcf.py +++ b/eos/effects/shipbonusshieldtransfercapneedcf.py @@ -1,7 +1,7 @@ # shipBonusShieldTransferCapNeedCF # # Used by: -# Ship: Bantam +# Variations of ship: Bantam (2 of 2) type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), diff --git a/eos/effects/shipbonusshieldtransfercapneedmf.py b/eos/effects/shipbonusshieldtransfercapneedmf.py index 426c8a834..9ea17daa4 100644 --- a/eos/effects/shipbonusshieldtransfercapneedmf.py +++ b/eos/effects/shipbonusshieldtransfercapneedmf.py @@ -1,7 +1,7 @@ # shipBonusShieldTransferCapNeedMF # # Used by: -# Ship: Burst +# Variations of ship: Burst (2 of 2) type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), diff --git a/eos/effects/shipbonustargetpainteroptimalmf1.py b/eos/effects/shipbonustargetpainteroptimalmf1.py index f45fe8a1d..b0dbdc28d 100644 --- a/eos/effects/shipbonustargetpainteroptimalmf1.py +++ b/eos/effects/shipbonustargetpainteroptimalmf1.py @@ -1,7 +1,8 @@ # shipBonusTargetPainterOptimalMF1 # # Used by: -# Variations of ship: Vigil (2 of 2) +# Ship: Hyena +# Ship: Vigil type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Target Painting"), diff --git a/eos/effects/shipbonusthermalarmorresistancead2.py b/eos/effects/shipbonusthermalarmorresistancead2.py new file mode 100644 index 000000000..175477548 --- /dev/null +++ b/eos/effects/shipbonusthermalarmorresistancead2.py @@ -0,0 +1,7 @@ +# shipBonusThermalArmorResistanceAD2 +# +# Used by: +# Ship: Pontifex +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorThermalDamageResonance", src.getModifiedItemAttr("shipBonusAD2"), skill="Amarr Destroyer") diff --git a/eos/effects/shipbonusthermalarmorresistancegd2.py b/eos/effects/shipbonusthermalarmorresistancegd2.py new file mode 100644 index 000000000..aeee7c1ef --- /dev/null +++ b/eos/effects/shipbonusthermalarmorresistancegd2.py @@ -0,0 +1,7 @@ +# shipBonusThermalArmorResistanceGD2 +# +# Used by: +# Ship: Magus +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("armorThermalDamageResonance", src.getModifiedItemAttr("shipBonusGD2"), skill="Gallente Destroyer") diff --git a/eos/effects/shipbonusthermalmissiledamagecd1.py b/eos/effects/shipbonusthermalmissiledamagecd1.py new file mode 100644 index 000000000..060decdde --- /dev/null +++ b/eos/effects/shipbonusthermalmissiledamagecd1.py @@ -0,0 +1,7 @@ +# shipBonusThermalMissileDamageCD1 +# +# Used by: +# Ship: Stork +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "thermalDamage", src.getModifiedItemAttr("shipBonusCD1"), skill="Caldari Destroyer") diff --git a/eos/effects/shipbonusthermalshieldresistancemd2.py b/eos/effects/shipbonusthermalshieldresistancemd2.py new file mode 100644 index 000000000..a7221bc88 --- /dev/null +++ b/eos/effects/shipbonusthermalshieldresistancemd2.py @@ -0,0 +1,7 @@ +# shipBonusThermalShieldResistanceMD2 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.ship.boostItemAttr("shieldThermalDamageResonance", src.getModifiedItemAttr("shipBonusMD2"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipbonusthermmissiledmgmd1.py b/eos/effects/shipbonusthermmissiledmgmd1.py new file mode 100644 index 000000000..5f1d29b7a --- /dev/null +++ b/eos/effects/shipbonusthermmissiledmgmd1.py @@ -0,0 +1,7 @@ +# shipBonusThermMissileDmgMD1 +# +# Used by: +# Ship: Bifrost +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "thermalDamage", src.getModifiedItemAttr("shipBonusMD1"), skill="Minmatar Destroyer") diff --git a/eos/effects/shipecmscanstrengthbonuscf.py b/eos/effects/shipecmscanstrengthbonuscf.py index 06735bcb1..544c9854e 100644 --- a/eos/effects/shipecmscanstrengthbonuscf.py +++ b/eos/effects/shipecmscanstrengthbonuscf.py @@ -1,7 +1,7 @@ # shipECMScanStrengthBonusCF # # Used by: -# Variations of ship: Griffin (2 of 2) +# Variations of ship: Griffin (3 of 3) type = "passive" def handler(fit, ship, context): for type in ("Gravimetric", "Ladar", "Radar", "Magnetometric"): diff --git a/eos/effects/shipenergydrainamountaf1.py b/eos/effects/shipenergydrainamountaf1.py index 67f97345c..21239c039 100644 --- a/eos/effects/shipenergydrainamountaf1.py +++ b/eos/effects/shipenergydrainamountaf1.py @@ -5,5 +5,5 @@ # Ship: Sentinel type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", ship.getModifiedItemAttr("shipBonusAF"), skill="Amarr Frigate") diff --git a/eos/effects/shipenergyneutralizerrangebonusac.py b/eos/effects/shipenergyneutralizerrangebonusac.py deleted file mode 100644 index 2d5b8767f..000000000 --- a/eos/effects/shipenergyneutralizerrangebonusac.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipEnergyNeutralizerRangeBonusAC -# -# Used by: -# Ship: Vangel -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipenergyneutralizerrangebonusaf2.py b/eos/effects/shipenergyneutralizerrangebonusaf2.py deleted file mode 100644 index fb5e5a88b..000000000 --- a/eos/effects/shipenergyneutralizerrangebonusaf2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipEnergyNeutralizerRangeBonusAF2 -# -# Used by: -# Ship: Malice -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", - "energyDestabilizationRange", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipenergyneutralizertransferamountbonusab.py b/eos/effects/shipenergyneutralizertransferamountbonusab.py index b3b69c078..3a005e1fc 100644 --- a/eos/effects/shipenergyneutralizertransferamountbonusab.py +++ b/eos/effects/shipenergyneutralizertransferamountbonusab.py @@ -4,5 +4,5 @@ # Ship: Bhaalgorn type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonusAB"), skill="Amarr Battleship") diff --git a/eos/effects/shipenergyneutralizertransferamountbonusac.py b/eos/effects/shipenergyneutralizertransferamountbonusac.py index 436ef71e7..1c4546fd3 100644 --- a/eos/effects/shipenergyneutralizertransferamountbonusac.py +++ b/eos/effects/shipenergyneutralizertransferamountbonusac.py @@ -5,5 +5,5 @@ # Ship: Vangel type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipenergyneutralizertransferamountbonusaf.py b/eos/effects/shipenergyneutralizertransferamountbonusaf.py index 88e0f7bd3..6e525dcb1 100644 --- a/eos/effects/shipenergyneutralizertransferamountbonusaf.py +++ b/eos/effects/shipenergyneutralizertransferamountbonusaf.py @@ -5,5 +5,5 @@ # Ship: Sentinel type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonusAF"), skill="Amarr Frigate") diff --git a/eos/effects/shipenergyneutralizertransferamountbonusaf2.py b/eos/effects/shipenergyneutralizertransferamountbonusaf2.py index ee16f8188..36a9f2b95 100644 --- a/eos/effects/shipenergyneutralizertransferamountbonusaf2.py +++ b/eos/effects/shipenergyneutralizertransferamountbonusaf2.py @@ -4,5 +4,5 @@ # Ship: Malice type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipenergytcapneedbonusaf.py b/eos/effects/shipenergytcapneedbonusaf.py index 7050d843f..b40fa69fb 100644 --- a/eos/effects/shipenergytcapneedbonusaf.py +++ b/eos/effects/shipenergytcapneedbonusaf.py @@ -4,6 +4,7 @@ # Ship: Crusader # Ship: Executioner # Ship: Gold Magnate +# Ship: Punisher # Ship: Retribution # Ship: Silver Magnate # Ship: Tormentor diff --git a/eos/effects/shipenergyvampireamountbonusfixedaf2.py b/eos/effects/shipenergyvampireamountbonusfixedaf2.py index 0e76b07c9..09ca0424d 100644 --- a/eos/effects/shipenergyvampireamountbonusfixedaf2.py +++ b/eos/effects/shipenergyvampireamountbonusfixedaf2.py @@ -4,5 +4,5 @@ # Ship: Malice type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipenergyvampirerangebonusfixedac.py b/eos/effects/shipenergyvampirerangebonusfixedac.py deleted file mode 100644 index b2cf784b8..000000000 --- a/eos/effects/shipenergyvampirerangebonusfixedac.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipEnergyVampireRangeBonusFixedAC -# -# Used by: -# Ship: Vangel -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", - "powerTransferRange", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipenergyvampirerangebonusfixedaf2.py b/eos/effects/shipenergyvampirerangebonusfixedaf2.py deleted file mode 100644 index 5a794654f..000000000 --- a/eos/effects/shipenergyvampirerangebonusfixedaf2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipEnergyVampireRangeBonusFixedAF2 -# -# Used by: -# Ship: Malice -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", - "powerTransferRange", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipenergyvampiretransferamountbonusab.py b/eos/effects/shipenergyvampiretransferamountbonusab.py index dbeb39356..012d52331 100644 --- a/eos/effects/shipenergyvampiretransferamountbonusab.py +++ b/eos/effects/shipenergyvampiretransferamountbonusab.py @@ -4,5 +4,5 @@ # Ship: Bhaalgorn type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", ship.getModifiedItemAttr("shipBonusAB"), skill="Amarr Battleship") diff --git a/eos/effects/shipenergyvampiretransferamountbonusac.py b/eos/effects/shipenergyvampiretransferamountbonusac.py index f8932bc65..e7bb68862 100644 --- a/eos/effects/shipenergyvampiretransferamountbonusac.py +++ b/eos/effects/shipenergyvampiretransferamountbonusac.py @@ -5,5 +5,5 @@ # Ship: Vangel type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser") diff --git a/eos/effects/shipetdamageaf.py b/eos/effects/shipetdamageaf.py index 74dded640..4be3ab94c 100644 --- a/eos/effects/shipetdamageaf.py +++ b/eos/effects/shipetdamageaf.py @@ -1,9 +1,9 @@ # shipETDamageAF # # Used by: +# Ship: Crucifier Navy Issue # Ship: Crusader # Ship: Imperial Navy Slicer type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"), - "damageMultiplier", ship.getModifiedItemAttr("shipBonusAF"), skill="Amarr Frigate") \ No newline at end of file +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"), "damageMultiplier", src.getModifiedItemAttr("shipBonusAF"), skill="Amarr Frigate") diff --git a/eos/effects/shipgchyieldbonusorefrig2.py b/eos/effects/shipgchyieldbonusorefrig2.py index d25ffdec2..ce9cdbe44 100644 --- a/eos/effects/shipgchyieldbonusorefrig2.py +++ b/eos/effects/shipgchyieldbonusorefrig2.py @@ -1,7 +1,8 @@ # shipGCHYieldBonusOREfrig2 # # Used by: -# Variations of ship: Venture (2 of 2) +# Ship: Prospect +# Ship: Venture type = "passive" def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Gas Cloud Harvester", diff --git a/eos/effects/shiphybriddamagebonuscf2.py b/eos/effects/shiphybriddamagebonuscf2.py index 89354e197..6a579df62 100644 --- a/eos/effects/shiphybriddamagebonuscf2.py +++ b/eos/effects/shiphybriddamagebonuscf2.py @@ -1,6 +1,7 @@ # shipHybridDamageBonusCF2 # # Used by: +# Ship: Griffin Navy Issue # Ship: Merlin type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipmaxlockedtargetsbonusaddonline.py b/eos/effects/shipmaxlockedtargetsbonusaddonline.py index 3eba78070..69d7e48cb 100644 --- a/eos/effects/shipmaxlockedtargetsbonusaddonline.py +++ b/eos/effects/shipmaxlockedtargetsbonusaddonline.py @@ -1,7 +1,7 @@ # shipMaxLockedTargetsBonusAddOnline # # Used by: -# Modules from group: Signal Amplifier (11 of 11) +# Modules from group: Signal Amplifier (7 of 7) type = "passive" def handler(fit, module, context): fit.ship.increaseItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargetsBonus")) diff --git a/eos/effects/shipmaxtargetrangebonusonline.py b/eos/effects/shipmaxtargetrangebonusonline.py index b3994fea0..48a6d92e1 100644 --- a/eos/effects/shipmaxtargetrangebonusonline.py +++ b/eos/effects/shipmaxtargetrangebonusonline.py @@ -1,7 +1,7 @@ # shipMaxTargetRangeBonusOnline # # Used by: -# Modules from group: Signal Amplifier (11 of 11) +# Modules from group: Signal Amplifier (7 of 7) type = "passive" def handler(fit, module, context): fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"), diff --git a/eos/effects/shipminingbonusorefrig1.py b/eos/effects/shipminingbonusorefrig1.py index be5c5c9a4..c67495295 100644 --- a/eos/effects/shipminingbonusorefrig1.py +++ b/eos/effects/shipminingbonusorefrig1.py @@ -1,7 +1,7 @@ # shipMiningBonusOREfrig1 # # Used by: -# Variations of ship: Venture (2 of 2) +# Variations of ship: Venture (3 of 3) type = "passive" def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"), diff --git a/eos/effects/shipmissileemdamagecf2.py b/eos/effects/shipmissileemdamagecf2.py index ec0ae1f7e..0b6ef4a07 100644 --- a/eos/effects/shipmissileemdamagecf2.py +++ b/eos/effects/shipmissileemdamagecf2.py @@ -1,7 +1,6 @@ # shipMissileEMDamageCF2 # # Used by: -# Ship: Caldari Navy Hookbill # Ship: Garmur type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipmissileexplosivedamagecf2.py b/eos/effects/shipmissileexplosivedamagecf2.py index df6dad456..9290e691f 100644 --- a/eos/effects/shipmissileexplosivedamagecf2.py +++ b/eos/effects/shipmissileexplosivedamagecf2.py @@ -1,7 +1,6 @@ # shipMissileExplosiveDamageCF2 # # Used by: -# Ship: Caldari Navy Hookbill # Ship: Garmur type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipmissilekindamagecc2.py b/eos/effects/shipmissilekindamagecc2.py index 54b623dd7..78a95f84e 100644 --- a/eos/effects/shipmissilekindamagecc2.py +++ b/eos/effects/shipmissilekindamagecc2.py @@ -1,7 +1,6 @@ # shipMissileKinDamageCC2 # # Used by: -# Ship: Osprey Navy Issue # Ship: Rook type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipmissilekindamagecc3.py b/eos/effects/shipmissilekindamagecc3.py new file mode 100644 index 000000000..e1958c308 --- /dev/null +++ b/eos/effects/shipmissilekindamagecc3.py @@ -0,0 +1,8 @@ +# shipMissileKinDamageCC3 +# +# Used by: +# Ship: Osprey Navy Issue + +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), "kineticDamage", src.getModifiedItemAttr("shipBonusCC3"), skill="Caldari Cruiser") \ No newline at end of file diff --git a/eos/effects/shipmissilekineticdamagecf.py b/eos/effects/shipmissilekineticdamagecf.py index 89b625b1e..665c22f84 100644 --- a/eos/effects/shipmissilekineticdamagecf.py +++ b/eos/effects/shipmissilekineticdamagecf.py @@ -2,7 +2,6 @@ # # Used by: # Ship: Buzzard -# Ship: Caldari Navy Hookbill # Ship: Condor # Ship: Hawk type = "passive" diff --git a/eos/effects/shipmissilelightvelocitybonuscf2.py b/eos/effects/shipmissilelightvelocitybonuscf2.py deleted file mode 100644 index a94e057c4..000000000 --- a/eos/effects/shipmissilelightvelocitybonuscf2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipMissileLightVelocityBonusCF2 -# -# Used by: -# Ship: Caldari Navy Hookbill -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles"), - "maxVelocity", ship.getModifiedItemAttr("shipBonusCF2"), skill="Caldari Frigate") diff --git a/eos/effects/shipmissilerocketvelocitybonuscf2.py b/eos/effects/shipmissilerocketvelocitybonuscf2.py deleted file mode 100644 index a51d7c5eb..000000000 --- a/eos/effects/shipmissilerocketvelocitybonuscf2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipMissileRocketVelocityBonusCF2 -# -# Used by: -# Ship: Caldari Navy Hookbill -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), - "maxVelocity", ship.getModifiedItemAttr("shipBonusCF2"), skill="Caldari Frigate") diff --git a/eos/effects/shipmissilethermaldamagecf2.py b/eos/effects/shipmissilethermaldamagecf2.py index 60480c2e8..80af650d9 100644 --- a/eos/effects/shipmissilethermaldamagecf2.py +++ b/eos/effects/shipmissilethermaldamagecf2.py @@ -1,7 +1,6 @@ # shipMissileThermalDamageCF2 # # Used by: -# Ship: Caldari Navy Hookbill # Ship: Garmur type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipmissilevelocitycf.py b/eos/effects/shipmissilevelocitycf.py index 33ec0887f..3bb7fe4c6 100644 --- a/eos/effects/shipmissilevelocitycf.py +++ b/eos/effects/shipmissilevelocitycf.py @@ -1,6 +1,7 @@ # shipMissileVelocityCF # # Used by: +# Ship: Caldari Navy Hookbill # Ship: Crow # Ship: Kestrel type = "passive" diff --git a/eos/effects/shipneutdestabilizationamountbonusrookie.py b/eos/effects/shipneutdestabilizationamountbonusrookie.py index 09ec51339..d333686cc 100644 --- a/eos/effects/shipneutdestabilizationamountbonusrookie.py +++ b/eos/effects/shipneutdestabilizationamountbonusrookie.py @@ -4,5 +4,5 @@ # Ship: Hematos type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", ship.getModifiedItemAttr("rookieNeutDrain")) diff --git a/eos/effects/shipnostransferamountbonusrookie.py b/eos/effects/shipnostransferamountbonusrookie.py index be9240bb3..810539815 100644 --- a/eos/effects/shipnostransferamountbonusrookie.py +++ b/eos/effects/shipnostransferamountbonusrookie.py @@ -4,5 +4,5 @@ # Ship: Hematos type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", ship.getModifiedItemAttr("rookieNosDrain")) diff --git a/eos/effects/shipremotearmorfalloffac2.py b/eos/effects/shipremotearmorfalloffac2.py new file mode 100644 index 000000000..4194a0eee --- /dev/null +++ b/eos/effects/shipremotearmorfalloffac2.py @@ -0,0 +1,7 @@ +# shipRemoteArmorFalloffAC2 +# +# Used by: +# Ship: Guardian +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser") diff --git a/eos/effects/shipremotearmorfalloffgc1.py b/eos/effects/shipremotearmorfalloffgc1.py new file mode 100644 index 000000000..03a5b8b3c --- /dev/null +++ b/eos/effects/shipremotearmorfalloffgc1.py @@ -0,0 +1,7 @@ +# shipRemoteArmorFalloffGC1 +# +# Used by: +# Ship: Oneiros +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "falloffEffectiveness", src.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser") diff --git a/eos/effects/shipremotearmorrangeac2.py b/eos/effects/shipremotearmorrangeac2.py new file mode 100644 index 000000000..d06c6912e --- /dev/null +++ b/eos/effects/shipremotearmorrangeac2.py @@ -0,0 +1,7 @@ +# shipRemoteArmorRangeAC2 +# +# Used by: +# Ship: Guardian +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "maxRange", src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser") diff --git a/eos/effects/shipremotearmorrangegc1.py b/eos/effects/shipremotearmorrangegc1.py new file mode 100644 index 000000000..718c4503b --- /dev/null +++ b/eos/effects/shipremotearmorrangegc1.py @@ -0,0 +1,7 @@ +# shipRemoteArmorRangeGC1 +# +# Used by: +# Ship: Oneiros +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "maxRange", src.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser") diff --git a/eos/effects/shipremotesensordampenercapneedgf.py b/eos/effects/shipremotesensordampenercapneedgf.py index ee23bcadb..65a8e0524 100644 --- a/eos/effects/shipremotesensordampenercapneedgf.py +++ b/eos/effects/shipremotesensordampenercapneedgf.py @@ -1,8 +1,9 @@ # shipRemoteSensorDampenerCapNeedGF # # Used by: -# Variations of ship: Maulus (2 of 2) +# Ship: Keres +# Ship: Maulus type = "passive" def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Sensor Damper", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Sensor Dampener", "capacitorNeed", ship.getModifiedItemAttr("shipBonusGF"), skill="Gallente Frigate") diff --git a/eos/effects/shiprocketemthermkindmgmf2.py b/eos/effects/shiprocketemthermkindmgmf2.py new file mode 100644 index 000000000..f5a3e3f79 --- /dev/null +++ b/eos/effects/shiprocketemthermkindmgmf2.py @@ -0,0 +1,9 @@ +# shipRocketEMThermKinDmgMF2 +# +# Used by: +# Ship: Vigil Fleet Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), "emDamage", src.getModifiedItemAttr("shipBonusMF2"), skill="Minmatar Frigate") + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), "thermalDamage", src.getModifiedItemAttr("shipBonusMF2"), skill="Minmatar Frigate") + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), "kineticDamage", src.getModifiedItemAttr("shipBonusMF2"), skill="Minmatar Frigate") diff --git a/eos/effects/shiprocketexpdmgmf3.py b/eos/effects/shiprocketexpdmgmf3.py new file mode 100644 index 000000000..2ba97c41d --- /dev/null +++ b/eos/effects/shiprocketexpdmgmf3.py @@ -0,0 +1,7 @@ +# shipRocketExpDmgMF3 +# +# Used by: +# Ship: Vigil Fleet Issue +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Rockets"), "explosiveDamage", src.getModifiedItemAttr("shipBonus3MF"), skill="Minmatar Frigate") diff --git a/eos/effects/shipscanresolutionbonusonline.py b/eos/effects/shipscanresolutionbonusonline.py index e4b7924e8..280cd188e 100644 --- a/eos/effects/shipscanresolutionbonusonline.py +++ b/eos/effects/shipscanresolutionbonusonline.py @@ -1,7 +1,7 @@ # shipScanResolutionBonusOnline # # Used by: -# Modules from group: Signal Amplifier (11 of 11) +# Modules from group: Signal Amplifier (7 of 7) # Module: QA Damage Module type = "passive" def handler(fit, module, context): diff --git a/eos/effects/shipsetdmgbonus2af.py b/eos/effects/shipsetdmgbonus2af.py deleted file mode 100644 index ae0159b62..000000000 --- a/eos/effects/shipsetdmgbonus2af.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipSETDmgBonus2AF -# -# Used by: -# Ship: Punisher -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"), - "damageMultiplier", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate") diff --git a/eos/effects/shipshieldtransferfalloffcc1.py b/eos/effects/shipshieldtransferfalloffcc1.py new file mode 100644 index 000000000..515f25bd2 --- /dev/null +++ b/eos/effects/shipshieldtransferfalloffcc1.py @@ -0,0 +1,8 @@ +# shipShieldTransferFalloffCC1 +# +# Used by: +# Ship: Basilisk +# Ship: Etana +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "falloffEffectiveness", src.getModifiedItemAttr("shipBonusCC"), skill="Caldari Cruiser") diff --git a/eos/effects/shipshieldtransferfalloffmc2.py b/eos/effects/shipshieldtransferfalloffmc2.py new file mode 100644 index 000000000..5f5afb211 --- /dev/null +++ b/eos/effects/shipshieldtransferfalloffmc2.py @@ -0,0 +1,7 @@ +# shipShieldTransferFalloffMC2 +# +# Used by: +# Ship: Scimitar +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "falloffEffectiveness", src.getModifiedItemAttr("shipBonusMC2"), skill="Minmatar Cruiser") diff --git a/eos/effects/shipshieldtransferrangecc1.py b/eos/effects/shipshieldtransferrangecc1.py new file mode 100644 index 000000000..e3db5f4d7 --- /dev/null +++ b/eos/effects/shipshieldtransferrangecc1.py @@ -0,0 +1,8 @@ +# shipShieldTransferRangeCC1 +# +# Used by: +# Ship: Basilisk +# Ship: Etana +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "maxRange", src.getModifiedItemAttr("shipBonusCC"), skill="Caldari Cruiser") diff --git a/eos/effects/shipshieldtransferrangemc2.py b/eos/effects/shipshieldtransferrangemc2.py new file mode 100644 index 000000000..95af8e157 --- /dev/null +++ b/eos/effects/shipshieldtransferrangemc2.py @@ -0,0 +1,7 @@ +# shipShieldTransferRangeMC2 +# +# Used by: +# Ship: Scimitar +type = "passive" +def handler(fit, src, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "maxRange", src.getModifiedItemAttr("shipBonusMC2"), skill="Minmatar Cruiser") diff --git a/eos/effects/shipsmallmissileemdmgcf2.py b/eos/effects/shipsmallmissileemdmgcf2.py index 224482c50..0e8db486a 100644 --- a/eos/effects/shipsmallmissileemdmgcf2.py +++ b/eos/effects/shipsmallmissileemdmgcf2.py @@ -1,6 +1,7 @@ # shipSmallMissileEMDmgCF2 # # Used by: +# Ship: Caldari Navy Hookbill # Ship: Kestrel type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipsmallmissileexpdmgcf2.py b/eos/effects/shipsmallmissileexpdmgcf2.py index 8fb0c32f3..4a79cab54 100644 --- a/eos/effects/shipsmallmissileexpdmgcf2.py +++ b/eos/effects/shipsmallmissileexpdmgcf2.py @@ -1,6 +1,7 @@ # shipSmallMissileExpDmgCF2 # # Used by: +# Ship: Caldari Navy Hookbill # Ship: Kestrel type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/shipsmallmissilekindmgcf3.py b/eos/effects/shipsmallmissilekindmgcf3.py new file mode 100644 index 000000000..3e8ea0e3a --- /dev/null +++ b/eos/effects/shipsmallmissilekindmgcf3.py @@ -0,0 +1,8 @@ +# shipSmallMissileKinDmgCF3 +# +# Used by: +# Ship: Caldari Navy Hookbill + +type = "passive" +def handler(fit, src, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Light Missiles") or mod.charge.requiresSkill("Rockets"), "kineticDamage", src.getModifiedItemAttr("shipBonus3CF"), skill="Caldari Frigate") \ No newline at end of file diff --git a/eos/effects/shipsmallmissilethermdmgcf2.py b/eos/effects/shipsmallmissilethermdmgcf2.py index d768a0adb..02d5e185e 100644 --- a/eos/effects/shipsmallmissilethermdmgcf2.py +++ b/eos/effects/shipsmallmissilethermdmgcf2.py @@ -1,6 +1,7 @@ # shipSmallMissileThermDmgCF2 # # Used by: +# Ship: Caldari Navy Hookbill # Ship: Kestrel type = "passive" def handler(fit, ship, context): diff --git a/eos/effects/siegemodeeffect6.py b/eos/effects/siegemodeeffect6.py index 1bd9b9728..f94a2b25d 100644 --- a/eos/effects/siegemodeeffect6.py +++ b/eos/effects/siegemodeeffect6.py @@ -18,12 +18,12 @@ def handler(fit, module, context): #Missiles for type in ("kinetic", "thermal", "explosive", "em"): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes") or \ - mod.charge.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes") or \ + mod.charge.requiresSkill("XL Cruise Missiles"), "%sDamage" % type, module.getModifiedItemAttr("damageMultiplierBonus")) - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Citadel Torpedoes") or \ - mod.charge.requiresSkill("Citadel Cruise Missiles"), + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("XL Torpedoes") or \ + mod.charge.requiresSkill("XL Cruise Missiles"), "aoeVelocity", module.getModifiedItemAttr("aoeVelocityBonus")) #Shield Boosters diff --git a/eos/effects/siegewarfareshieldcapacitybonusreplacer.py b/eos/effects/siegewarfareshieldcapacitybonusreplacer.py index 3fd0a62fa..338de9c81 100644 --- a/eos/effects/siegewarfareshieldcapacitybonusreplacer.py +++ b/eos/effects/siegewarfareshieldcapacitybonusreplacer.py @@ -8,4 +8,4 @@ type = "gang" gangBoost = "shieldCapacity" gangBonus = "shieldCapacityBonus" def handler(fit, container, context): - fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level) + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus)) diff --git a/eos/effects/skirmishwarfareagilitybonus.py b/eos/effects/skirmishwarfareagilitybonus.py index 39ec2c90a..9c2065482 100644 --- a/eos/effects/skirmishwarfareagilitybonus.py +++ b/eos/effects/skirmishwarfareagilitybonus.py @@ -7,4 +7,4 @@ gangBoost = "agility" gangBonus = "agilityBonus" def handler(fit, container, context): level = container.level if "skill" in context else 1 - fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level) + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level, stackingPenalties = True) diff --git a/eos/effects/skirmishwarfareagilitybonusreplacer.py b/eos/effects/skirmishwarfareagilitybonusreplacer.py index e89c3a217..0968c14e5 100644 --- a/eos/effects/skirmishwarfareagilitybonusreplacer.py +++ b/eos/effects/skirmishwarfareagilitybonusreplacer.py @@ -8,4 +8,4 @@ type = "gang" gangBoost = "agility" gangBonus = "agilityBonus" def handler(fit, container, context): - fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level) + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus)) diff --git a/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py b/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py index 9cb8a1ace..55e7d5614 100644 --- a/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py +++ b/eos/effects/subsystembonusamarrelectronicenergydestabilizeramount.py @@ -4,5 +4,5 @@ # Subsystem: Legion Electronics - Energy Parasitic Complex type = "passive" def handler(fit, module, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", module.getModifiedItemAttr("subsystemBonusAmarrElectronic"), skill="Amarr Electronic Systems") diff --git a/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py b/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py index 2eb6990b4..080d3dc92 100644 --- a/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py +++ b/eos/effects/subsystembonusamarrelectronicenergyvampireamount.py @@ -4,5 +4,5 @@ # Subsystem: Legion Electronics - Energy Parasitic Complex type = "passive" def handler(fit, module, context): - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", module.getModifiedItemAttr("subsystemBonusAmarrElectronic"), skill="Amarr Electronic Systems") diff --git a/eos/effects/systemenergyneutmultiplier.py b/eos/effects/systemenergyneutmultiplier.py index bafb24f06..8c6328c98 100644 --- a/eos/effects/systemenergyneutmultiplier.py +++ b/eos/effects/systemenergyneutmultiplier.py @@ -5,6 +5,6 @@ runTime = "early" type = ("projected", "passive") def handler(fit, beacon, context): - fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Destabilizer", + fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Neutralizer", "energyDestabilizationAmount", beacon.getModifiedItemAttr("energyWarfareStrengthMultiplier"), stackingPenalties=True, penaltyGroup="postMul") diff --git a/eos/effects/systemenergyvampiremultiplier.py b/eos/effects/systemenergyvampiremultiplier.py index 1d6c71d01..15a634762 100644 --- a/eos/effects/systemenergyvampiremultiplier.py +++ b/eos/effects/systemenergyvampiremultiplier.py @@ -5,6 +5,6 @@ runTime = "early" type = ("projected", "passive") def handler(fit, beacon, context): - fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Vampire", + fit.modules.filteredItemMultiply(lambda mod: mod.item.group.name == "Energy Nosferatu", "powerTransferAmount", beacon.getModifiedItemAttr("energyWarfareStrengthMultiplier"), stackingPenalties=True, penaltyGroup="postMul") diff --git a/eos/effects/targetarmorrepair.py b/eos/effects/targetarmorrepair.py index f14983704..7adf280c9 100644 --- a/eos/effects/targetarmorrepair.py +++ b/eos/effects/targetarmorrepair.py @@ -1,7 +1,6 @@ # targetArmorRepair # # Used by: -# Modules from group: Remote Armor Repairer (38 of 38) # Drones named like: Armor Maintenance Bot (6 of 6) # Module: QA Remote Armor Repair System - 5 Players type = "projected", "active" diff --git a/eos/effects/titancaldarimissilekineticdmg2.py b/eos/effects/titancaldarimissilekineticdmg2.py index 9757dea92..0f5732b82 100644 --- a/eos/effects/titancaldarimissilekineticdmg2.py +++ b/eos/effects/titancaldarimissilekineticdmg2.py @@ -4,6 +4,6 @@ # Ship: Leviathan type = "passive" def handler(fit, ship, context): - groups = ("Citadel Torpedo", "Citadel Cruise") + groups = ("Capital Torpedo", "Capital Cruise") fit.modules.filteredChargeBoost(lambda mod: mod.charge.group.name in groups, "kineticDamage", ship.getModifiedItemAttr("shipBonusCT1"), skill="Caldari Titan") diff --git a/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py b/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py index 4fb0e1466..d5c94a064 100644 --- a/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py +++ b/eos/effects/trackingspeedbonuspassiverequiringgunnerytrackingspeedbonus.py @@ -3,6 +3,7 @@ # Used by: # Implants named like: Drop Booster (4 of 4) # Implants named like: Eifyr and Co. 'Gunslinger' Motion Prediction MR (6 of 6) +# Implant: Antipharmakon Iokira # Implant: Ogdin's Eye Coordination Enhancer # Skill: Motion Prediction type = "passive" diff --git a/eos/effects/triagemodeeffect3.py b/eos/effects/triagemodeeffect3.py index f2fc6f028..eeb4bbf78 100644 --- a/eos/effects/triagemodeeffect3.py +++ b/eos/effects/triagemodeeffect3.py @@ -69,9 +69,9 @@ def handler(fit, module, context): # EW cap need increase groups = [ - 'ECM Burst', + 'Burst Jammer', 'Remote ECM Burst', - 'Tracking Disruptor', + 'Weapon Disruptor', 'ECM', 'Remote Sensor Damper', 'Target Painter'] diff --git a/eos/effects/triagemodeeffect7.py b/eos/effects/triagemodeeffect7.py index 3afa6c6d1..6d19541fe 100644 --- a/eos/effects/triagemodeeffect7.py +++ b/eos/effects/triagemodeeffect7.py @@ -81,7 +81,7 @@ def handler(fit, module, context): groups = [ 'ECM Burst', 'Remote ECM Burst', - 'Tracking Disruptor', + 'Weapon Disruptor', 'ECM', 'Remote Sensor Damper', 'Target Painter'] diff --git a/eos/effects/usemissiles.py b/eos/effects/usemissiles.py index e4fe779de..57fe05555 100644 --- a/eos/effects/usemissiles.py +++ b/eos/effects/usemissiles.py @@ -1,9 +1,9 @@ # useMissiles # # Used by: -# Modules from group: Missile Launcher Citadel (4 of 4) # Modules from group: Missile Launcher Heavy (12 of 12) # Modules from group: Missile Launcher Rocket (15 of 15) +# Modules from group: XL Missile Launcher (4 of 4) # Modules named like: Launcher (138 of 138) type = 'active' def handler(fit, module, context): diff --git a/eos/effects/velocitybonusonline.py b/eos/effects/velocitybonusonline.py index e6727ae85..aa96ff6e4 100644 --- a/eos/effects/velocitybonusonline.py +++ b/eos/effects/velocitybonusonline.py @@ -1,7 +1,7 @@ # velocityBonusOnline # # Used by: -# Modules from group: Entosis Link (2 of 2) +# Modules from group: Entosis Link (6 of 6) # Modules from group: Nanofiber Internal Structure (7 of 7) # Modules from group: Overdrive Injector System (7 of 7) type = "passive" diff --git a/eos/effects/warpdisruptsphere.py b/eos/effects/warpdisruptsphere.py index f973fd83f..7a1751eca 100644 --- a/eos/effects/warpdisruptsphere.py +++ b/eos/effects/warpdisruptsphere.py @@ -1,7 +1,7 @@ # warpDisruptSphere # # Used by: -# Modules from group: Warp Disrupt Field Generator (2 of 2) +# Modules from group: Warp Disrupt Field Generator (7 of 7) type = "active" runTime = "early" def handler(fit, module, context): diff --git a/eos/modifiedAttributeDict.py b/eos/modifiedAttributeDict.py index a9a0e9fe5..ed331ae6a 100644 --- a/eos/modifiedAttributeDict.py +++ b/eos/modifiedAttributeDict.py @@ -44,7 +44,8 @@ class ModifiedAttributeDict(collections.MutableMapping): class CalculationPlaceholder(): pass - def __init__(self, fit = None): + def __init__(self, fit=None, parent=None): + self.parent = parent self.fit = fit # Stores original values of the entity self.__original = None @@ -225,8 +226,15 @@ class ModifiedAttributeDict(collections.MutableMapping): with the fit and thus get the correct affector. Returns skill level to be used to modify modifier. See GH issue #101 """ - skill = self.fit.character.getSkill(skillName) - self.fit.register(skill) + fit = self.fit + if not fit: + # self.fit is usually set during fit calculations when the item is registered with the fit. However, + # under certain circumstances, an effect will not work as it will try to modify an item which has NOT + # yet been registered and thus has not had self.fit set. In this case, use the modules owner attribute + # to point to the correct fit. See GH Issue #434 + fit = self.parent.owner + skill = fit.character.getSkill(skillName) + fit.register(skill) return skill.level def getAfflictions(self, key): @@ -284,6 +292,9 @@ class ModifiedAttributeDict(collections.MutableMapping): def multiply(self, attributeName, multiplier, stackingPenalties=False, penaltyGroup="default", skill=None): """Multiply value of given attribute by given factor""" + if multiplier is None: # See GH issue 397 + return + if skill: multiplier *= self.__handleSkill(skill) @@ -300,7 +311,7 @@ class ModifiedAttributeDict(collections.MutableMapping): else: if not attributeName in self.__multipliers: self.__multipliers[attributeName] = 1 - self.__multipliers[attributeName] *= multiplier if multiplier is not None else 1 + self.__multipliers[attributeName] *= multiplier self.__placehold(attributeName) self.__afflict(attributeName, "%s*" % ("s" if stackingPenalties else ""), multiplier, multiplier != 1) diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index 2fcb6a908..507c55681 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -172,7 +172,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): # Put them in the attrs tuple. @property def falloff(self): - attrs = ("falloff",) + attrs = ("falloff", "falloffEffectiveness") for attr in attrs: falloff = self.getModifiedItemAttr(attr) if falloff is not None: return falloff @@ -201,7 +201,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): # Do not allow to apply offensive modules on ship with offensive module immunite, with few exceptions # (all effects which apply instant modification are exception, generally speaking) if item.offensive and projectedOnto.ship.getModifiedItemAttr("disallowOffensiveModifiers") == 1: - offensiveNonModifiers = set(("energyDestabilizationNew", "leech")) + offensiveNonModifiers = set(("energyDestabilizationNew", "leech", "energyNosferatuFalloff", "energyNeutralizerFalloff")) if not offensiveNonModifiers.intersection(set(item.effects)): return False # If assistive modules are not allowed, do not let to apply these altogether diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 3478d4270..ecb7f926d 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -476,9 +476,6 @@ class Fit(object): logger.debug("Fit has already been calculated and is not projected, returning: %r", self) return - # Mark fit as calculated - self.__calculated = True - for runTime in ("early", "normal", "late"): # Items that are unrestricted. These items are run on the local fit # first and then projected onto the target fit it one is designated @@ -505,9 +502,10 @@ class Fit(object): # Registering the item about to affect the fit allows us to # track "Affected By" relations correctly if item is not None: - # apply effects locally - self.register(item) - item.calculateModifiedAttributes(self, runTime, False) + if not self.__calculated: + # apply effects locally if this is first time running them on fit + self.register(item) + item.calculateModifiedAttributes(self, runTime, False) if projected is True and item not in chain.from_iterable(r): # apply effects onto target fit @@ -517,6 +515,9 @@ class Fit(object): timer.checkpoint('Done with runtime: %s'%runTime) + # Mark fit as calculated + self.__calculated = True + # Only apply projected fits if fit it not projected itself. if not projected: for fit in self.projectedFits: @@ -822,7 +823,8 @@ class Fit(object): return 10 / rechargeRate * sqrt(percent) * (1 - sqrt(percent)) * capacity def addDrain(self, cycleTime, capNeed, clipSize=0): - self.__extraDrains.append((cycleTime, capNeed, clipSize)) + resistance = self.ship.getModifiedItemAttr("energyWarfareResistance") or 1 + self.__extraDrains.append((cycleTime, capNeed * resistance, clipSize)) def removeDrain(self, i): del self.__extraDrains[i] diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 5fbb75e1c..1f5e84ec1 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -107,8 +107,8 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__reloadForce = None self.__chargeCycles = None self.__hardpoint = Hardpoint.NONE - self.__itemModifiedAttributes = ModifiedAttributeDict() - self.__chargeModifiedAttributes = ModifiedAttributeDict() + self.__itemModifiedAttributes = ModifiedAttributeDict(parent=self) + self.__chargeModifiedAttributes = ModifiedAttributeDict(parent=self) self.__slot = self.dummySlot # defaults to None if self.__item: @@ -254,7 +254,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): @property def falloff(self): - attrs = ("falloff", "shipScanFalloff") + attrs = ("falloffEffectiveness", "falloff", "shipScanFalloff") for attr in attrs: falloff = self.getModifiedItemAttr(attr) if falloff is not None: return falloff @@ -374,7 +374,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if shipType is not None: fitsOnType.add(shipType) - for i in xrange(1, 6): + for i in xrange(1, 10): shipType = self.getModifiedItemAttr("canFitShipType%d" % i) if shipType is not None: fitsOnType.add(shipType) @@ -469,7 +469,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): # Do not allow to apply offensive modules on ship with offensive module immunite, with few exceptions # (all effects which apply instant modification are exception, generally speaking) if item.offensive and projectedOnto.ship.getModifiedItemAttr("disallowOffensiveModifiers") == 1: - offensiveNonModifiers = set(("energyDestabilizationNew", "leech")) + offensiveNonModifiers = set(("energyDestabilizationNew", "leech", "energyNosferatuFalloff", "energyNeutralizerFalloff")) if not offensiveNonModifiers.intersection(set(item.effects)): return False # If assistive modules are not allowed, do not let to apply these altogether diff --git a/eve.db b/eve.db index e8b2f0337..68da081ce 100644 Binary files a/eve.db and b/eve.db differ diff --git a/gui/aboutData.py b/gui/aboutData.py index 1cf8cc136..354c886f0 100644 --- a/gui/aboutData.py +++ b/gui/aboutData.py @@ -25,8 +25,16 @@ licenses = ( "Silk Icons Set by famfamfam.com - Creative Commons Attribution 2.5 License", "Fat Cow Icons by fatcow.com - Creative Commons Attribution 3.0 License" ) -developers = ("blitzmann \t(Sable Blitzmann)", "cncfanatics \t(Sakari Orisi) (founder)" , "DarkPhoenix \t(Kadesh Priestess) (project lead)", "Darriele \t(Darriele)") -credits = ("Entity (Entity) \t\tCapacitor calculations / EVEAPI python lib / Reverence", "Aurora \t\t\tMaths", "Corollax (Aamrr) \tVarious EOS / pyfa improvements") +developers = ( + "blitzmann \t(Sable Blitzmann) (maintainer)", + "cncfanatics \t(Sakari Orisi)" , + "DarkPhoenix \t(Kadesh Priestess)", + "Darriele \t\t(Darriele)") +credits = ( + "Entity (Entity) \tCapacitor calculations / EVEAPI python lib / Reverence", + "Aurora \t\tMaths", + "Corollax (Aamrr) \tVarious EOS / pyfa improvements", + "Dreae (Dreae)\tPyCrest") description = ( "Pyfa (the Python Fitting Assistant) is an open-source standalone application able to " "create and simulate fittings for EVE-Online SciFi MMORPG with a very high degree of " diff --git a/gui/builtinPreferenceViews/pyfaCrestPreferences.py b/gui/builtinPreferenceViews/pyfaCrestPreferences.py index 308999953..081ccf871 100644 --- a/gui/builtinPreferenceViews/pyfaCrestPreferences.py +++ b/gui/builtinPreferenceViews/pyfaCrestPreferences.py @@ -7,6 +7,8 @@ import gui.mainFrame import service from service.crest import CrestModes +from wx.lib.intctrl import IntCtrl + class PFCrestPref ( PreferenceView): title = "CREST" @@ -46,6 +48,19 @@ class PFCrestPref ( PreferenceView): mainSizer.Add(rbSizer, 1, wx.ALL|wx.EXPAND, 0) + timeoutSizer = wx.BoxSizer(wx.HORIZONTAL) + + self.stTimout = wx.StaticText( panel, wx.ID_ANY, u"Timeout (seconds):", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTimout.Wrap( -1 ) + + timeoutSizer.Add( self.stTimout, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.intTimeout = IntCtrl(panel, max=300000, limited=True, value=self.settings.get('timeout')) + timeoutSizer.Add(self.intTimeout, 0, wx.ALL, 5 ) + self.intTimeout.Bind(wx.lib.intctrl.EVT_INT, self.OnTimeoutChange) + + mainSizer.Add(timeoutSizer, 0, wx.ALL|wx.EXPAND, 0) + detailsTitle = wx.StaticText( panel, wx.ID_ANY, "CREST client details", wx.DefaultPosition, wx.DefaultSize, 0 ) detailsTitle.Wrap( -1 ) detailsTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) @@ -53,7 +68,6 @@ class PFCrestPref ( PreferenceView): mainSizer.Add( detailsTitle, 0, wx.ALL, 5 ) mainSizer.Add( wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND, 5 ) - fgAddrSizer = wx.FlexGridSizer( 2, 2, 0, 0 ) fgAddrSizer.AddGrowableCol( 1 ) fgAddrSizer.SetFlexibleDirection( wx.BOTH ) @@ -87,6 +101,9 @@ class PFCrestPref ( PreferenceView): panel.SetSizer( mainSizer ) panel.Layout() + def OnTimeoutChange(self, event): + self.settings.set('timeout', event.GetEventObject().GetValue()) + def OnModeChange(self, event): self.settings.set('mode', event.GetInt()) self.ToggleProxySettings(self.settings.get('mode')) @@ -97,8 +114,8 @@ class PFCrestPref ( PreferenceView): service.Crest.restartService() def OnBtnApply(self, event): - self.settings.set('clientID', self.inputClientID.GetValue()) - self.settings.set('clientSecret', self.inputClientSecret.GetValue()) + self.settings.set('clientID', self.inputClientID.GetValue().strip()) + self.settings.set('clientSecret', self.inputClientSecret.GetValue().strip()) sCrest = service.Crest.getInstance() sCrest.delAllCharacters() diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py index 75d1273c0..a1f43696f 100644 --- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py +++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py @@ -59,6 +59,12 @@ class PFGeneralPref ( PreferenceView): self.cbMarketShortcuts = wx.CheckBox( panel, wx.ID_ANY, u"Show market shortcuts", wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add( self.cbMarketShortcuts, 0, wx.ALL|wx.EXPAND, 5 ) + self.cbGaugeAnimation = wx.CheckBox( panel, wx.ID_ANY, u"Animate gauges", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbGaugeAnimation, 0, wx.ALL|wx.EXPAND, 5 ) + + self.cbExportCharges = wx.CheckBox( panel, wx.ID_ANY, u"Export loaded charges", wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add( self.cbExportCharges, 0, wx.ALL|wx.EXPAND, 5 ) + defCharSizer = wx.BoxSizer( wx.HORIZONTAL ) self.sFit = service.Fit.getInstance() @@ -73,6 +79,8 @@ class PFGeneralPref ( PreferenceView): self.cbReopenFits.SetValue(self.openFitsSettings["enabled"]) self.cbShowTooltip.SetValue(self.sFit.serviceFittingOptions["showTooltip"] or False) self.cbMarketShortcuts.SetValue(self.sFit.serviceFittingOptions["showMarketShortcuts"] or False) + self.cbGaugeAnimation.SetValue(self.sFit.serviceFittingOptions["enableGaugeAnimation"]) + self.cbExportCharges.SetValue(self.sFit.serviceFittingOptions["exportCharges"]) self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange) self.cbGlobalDmgPattern.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalDmgPatternStateChange) @@ -84,6 +92,8 @@ class PFGeneralPref ( PreferenceView): self.cbReopenFits.Bind(wx.EVT_CHECKBOX, self.onCBReopenFits) self.cbShowTooltip.Bind(wx.EVT_CHECKBOX, self.onCBShowTooltip) self.cbMarketShortcuts.Bind(wx.EVT_CHECKBOX, self.onCBShowShortcuts) + self.cbGaugeAnimation.Bind(wx.EVT_CHECKBOX, self.onCBGaugeAnimation) + self.cbExportCharges.Bind(wx.EVT_CHECKBOX, self.onCBExportCharges) self.cbRackLabels.Enable(self.sFit.serviceFittingOptions["rackSlots"] or False) @@ -143,6 +153,12 @@ class PFGeneralPref ( PreferenceView): def onCBShowShortcuts(self, event): self.sFit.serviceFittingOptions["showMarketShortcuts"] = self.cbMarketShortcuts.GetValue() + def onCBGaugeAnimation(self, event): + self.sFit.serviceFittingOptions["enableGaugeAnimation"] = self.cbGaugeAnimation.GetValue() + + def onCBExportCharges(self, event): + self.sFit.serviceFittingOptions["exportCharges"] = self.cbExportCharges.GetValue() + def getImage(self): return BitmapLoader.getBitmap("prefs_settings", "gui") diff --git a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py index 260987287..c49bd0c94 100644 --- a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py +++ b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py @@ -96,7 +96,7 @@ class PFUpdatePref (PreferenceView): self.resetButton.Hide() def OnDownload(self, event): - wx.LaunchDefaultBrowser('https://github.com/DarkFenX/Pyfa/releases/tag/'+self.UpdateSettings.get('version')) + wx.LaunchDefaultBrowser('https://github.com/pyfa-org/Pyfa/releases/tag/'+self.UpdateSettings.get('version')) def getImage(self): return BitmapLoader.getBitmap("prefs_update", "gui") diff --git a/gui/builtinStatsViews/priceViewFull.py b/gui/builtinStatsViews/priceViewFull.py index ea7d53340..593a2ab8e 100644 --- a/gui/builtinStatsViews/priceViewFull.py +++ b/gui/builtinStatsViews/priceViewFull.py @@ -23,7 +23,6 @@ from gui import builtinStatsViews from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount import service -import locale class PriceViewFull(StatsView): name = "priceViewFull" @@ -107,15 +106,15 @@ class PriceViewFull(StatsView): if self._cachedShip != shipPrice: self.labelPriceShip.SetLabel("%s ISK" % formatAmount(shipPrice, 3, 3, 9, currency=True)) - self.labelPriceShip.SetToolTip(wx.ToolTip(locale.format('%.2f', shipPrice, 1))) + self.labelPriceShip.SetToolTip(wx.ToolTip('{:,.2f}'.format(shipPrice))) self._cachedShip = shipPrice if self._cachedFittings != modPrice: self.labelPriceFittings.SetLabel("%s ISK" % formatAmount(modPrice, 3, 3, 9, currency=True)) - self.labelPriceFittings.SetToolTip(wx.ToolTip(locale.format('%.2f', modPrice, 1))) + self.labelPriceFittings.SetToolTip(wx.ToolTip('{:,.2f}'.format(modPrice))) self._cachedFittings = modPrice if self._cachedTotal != (shipPrice+modPrice): self.labelPriceTotal.SetLabel("%s ISK" % formatAmount(shipPrice + modPrice, 3, 3, 9, currency=True)) - self.labelPriceTotal.SetToolTip(wx.ToolTip(locale.format('%.2f', (shipPrice + modPrice), 1))) + self.labelPriceTotal.SetToolTip(wx.ToolTip('{:,.2f}'.format(shipPrice + modPrice))) self._cachedTotal = shipPrice + modPrice self.panel.Layout() diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index 714294323..af6a195ad 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -22,7 +22,6 @@ from gui.statsView import StatsView from gui import builtinStatsViews from gui.utils.numberFormatter import formatAmount import locale - try: from collections import OrderedDict except ImportError: @@ -153,7 +152,7 @@ class TargetingMiscViewFull(StatsView): ("labelFullAlignTime", {"main": lambda: fit.alignTime}, 3, 0, 0, "s"), ("labelFullSigRadius", {"main": lambda: fit.ship.getModifiedItemAttr("signatureRadius")}, 3, 0, 9, ""), ("labelFullWarpSpeed", {"main": lambda: fit.warpSpeed}, 3, 0, 0, "AU/s"), - ("labelFullCargo", cargoValues, 3, 0, 9, u"m\u00B3")) + ("labelFullCargo", cargoValues, 4, 0, 9, u"m\u00B3")) counter = 0 RADII = [("Pod",25), ("Interceptor",33), ("Frigate",38), @@ -201,15 +200,15 @@ class TargetingMiscViewFull(StatsView): label.SetToolTip(wx.ToolTip("Type: %s" % (fit.scanType))) elif labelName == "labelFullAlignTime": alignTime = "Align:\t%.3fs"%mainValue - mass = "Mass:\t%skg"%locale.format('%d', fit.ship.getModifiedItemAttr("mass"), 1) + mass = 'Mass:\t{:,.0f}kg'.format(fit.ship.getModifiedItemAttr("mass")) agility = "Agility:\t%.3fx"%fit.ship.getModifiedItemAttr("agility") label.SetToolTip(wx.ToolTip("%s\n%s\n%s" % (alignTime, mass, agility))) elif labelName == "labelFullCargo": tipLines = [] - tipLines.append(u"Cargohold: %.1fm\u00B3 / %sm\u00B3"% (fit.cargoBayUsed, newValues["main"])) + tipLines.append(u"Cargohold: {:,.2f}m\u00B3 / {:,.2f}m\u00B3".format(fit.cargoBayUsed, newValues["main"])) for attrName, tipAlias in cargoNamesOrder.items(): if newValues[attrName] > 0: - tipLines.append(u"%s: %sm\u00B3"% (tipAlias, newValues[attrName])) + tipLines.append(u"{}: {:,.2f}m\u00B3".format(tipAlias, newValues[attrName])) label.SetToolTip(wx.ToolTip(u"\n".join(tipLines))) else: label.SetToolTip(wx.ToolTip("%.1f" % mainValue)) @@ -235,10 +234,10 @@ class TargetingMiscViewFull(StatsView): # if you add stuff to cargo, the capacity doesn't change and thus it is still cached # This assures us that we force refresh of cargo tooltip tipLines = [] - tipLines.append(u"Cargohold: %.1fm\u00B3 / %sm\u00B3"% (fit.cargoBayUsed, cachedCargo["main"])) + tipLines.append(u"Cargohold: {:,.2f}m\u00B3 / {:,.2f}m\u00B3".format(fit.cargoBayUsed, cachedCargo["main"])) for attrName, tipAlias in cargoNamesOrder.items(): if cachedCargo[attrName] > 0: - tipLines.append(u"%s: %sm\u00B3"% (tipAlias, cachedCargo[attrName])) + tipLines.append(u"{}: {:,.2f}m\u00B3".format(tipAlias, cachedCargo[attrName])) label.SetToolTip(wx.ToolTip(u"\n".join(tipLines))) else: label.SetToolTip(wx.ToolTip("")) diff --git a/gui/builtinViewColumns/ammoIcon.py b/gui/builtinViewColumns/ammoIcon.py index 262f01efa..2403077bd 100644 --- a/gui/builtinViewColumns/ammoIcon.py +++ b/gui/builtinViewColumns/ammoIcon.py @@ -42,7 +42,7 @@ class AmmoIcon(ViewColumn): if stuff.charge is None: return -1 else: - iconFile = stuff.charge.icon.iconFile if stuff.item.icon else "" + iconFile = stuff.charge.icon.iconFile if stuff.charge.icon else "" if iconFile: return self.fittingView.imageList.GetImageIndex(iconFile, "icons") else: diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index 034ef792d..c2f617deb 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -85,7 +85,7 @@ class Miscellanea(ViewColumn): if n > 0: info.append("{0}{1}".format(n, slot[0].upper())) return "+ "+", ".join(info), "Slot Modifiers" - elif itemGroup == "Energy Destabilizer": + elif itemGroup == "Energy Neutralizer": neutAmount = stuff.getModifiedItemAttr("energyDestabilizationAmount") cycleTime = stuff.cycleTime if not neutAmount or not cycleTime: @@ -94,7 +94,7 @@ class Miscellanea(ViewColumn): text = "{0}/s".format(formatAmount(capPerSec, 3, 0, 3)) tooltip = "Energy neutralization per second" return text, tooltip - elif itemGroup == "Energy Vampire": + elif itemGroup == "Energy Nosferatu": neutAmount = stuff.getModifiedItemAttr("powerTransferAmount") cycleTime = stuff.cycleTime if not neutAmount or not cycleTime: @@ -139,7 +139,7 @@ class Miscellanea(ViewColumn): text = "{0}%".format(formatAmount(sigRadBonus, 3, 0, 3, forceSign=True)) tooltip = "Signature radius increase" return text, tooltip - elif itemGroup == "Remote Sensor Damper": + elif itemGroup == "Sensor Dampener": lockRangeBonus = stuff.getModifiedItemAttr("maxTargetRangeBonus") scanResBonus = stuff.getModifiedItemAttr("scanResolutionBonus") if lockRangeBonus is None or scanResBonus is None: @@ -158,29 +158,54 @@ class Miscellanea(ViewColumn): ttEntries.append("scan resolution") tooltip = "{0} dampening".format(formatList(ttEntries)).capitalize() return text, tooltip - elif itemGroup == "Tracking Disruptor": + elif itemGroup == "Weapon Disruptor": + # Weapon disruption now covers both tracking and guidance (missile) disruptors + # First get the attributes for tracking disruptors optimalRangeBonus = stuff.getModifiedItemAttr("maxRangeBonus") falloffRangeBonus = stuff.getModifiedItemAttr("falloffBonus") trackingSpeedBonus = stuff.getModifiedItemAttr("trackingSpeedBonus") - if optimalRangeBonus is None or falloffRangeBonus is None or trackingSpeedBonus is None: - return "", None - display = 0 - for bonus in (optimalRangeBonus, falloffRangeBonus, trackingSpeedBonus): - if abs(bonus) > abs(display): - display = bonus - if not display: + + trackingDisruptorAttributes = { + "optimal range": optimalRangeBonus, + "falloff range": falloffRangeBonus, + "tracking speed": trackingSpeedBonus} + + isTrackingDisruptor = any(map(lambda x: x is not None and x != 0, trackingDisruptorAttributes.values())) + + # Then get the attributes for guidance disruptors + explosionVelocityBonus = stuff.getModifiedItemAttr("aoeVelocityBonus") + explosionRadiusBonus = stuff.getModifiedItemAttr("aoeCloudSizeBonus") + + flightTimeBonus = stuff.getModifiedItemAttr("explosionDelayBonus") + missileVelocityBonus = stuff.getModifiedItemAttr("missileVelocityBonus") + + guidanceDisruptorAttributes = { + "explosion velocity": explosionVelocityBonus, + "explosion radius": explosionRadiusBonus, + "flight time": flightTimeBonus, + "missile velocity": missileVelocityBonus} + + isGuidanceDisruptor = any(map(lambda x: x is not None and x != 0, guidanceDisruptorAttributes.values())) + + if isTrackingDisruptor: + attributes = trackingDisruptorAttributes + elif isGuidanceDisruptor: + attributes = guidanceDisruptorAttributes + else: return "", None + + display = max(attributes.values(), key=lambda x: abs(x)) + text = "{0}%".format(formatAmount(display, 3, 0, 3, forceSign=True)) + ttEntries = [] - if display == optimalRangeBonus: - ttEntries.append("optimal range") - if display == falloffRangeBonus: - ttEntries.append("falloff range") - if display == trackingSpeedBonus: - ttEntries.append("tracking speed") + for attributeName, attributeValue in attributes.items(): + if attributeValue == display: + ttEntries.append(attributeName) + tooltip = "{0} disruption".format(formatList(ttEntries)).capitalize() return text, tooltip - elif itemGroup in ("ECM", "ECM Burst", "Remote ECM Burst"): + elif itemGroup in ("ECM", "Burst Jammer", "Remote ECM Burst"): grav = stuff.getModifiedItemAttr("scanGravimetricStrengthBonus") ladar = stuff.getModifiedItemAttr("scanLadarStrengthBonus") radar = stuff.getModifiedItemAttr("scanRadarStrengthBonus") @@ -401,7 +426,7 @@ class Miscellanea(ViewColumn): ttEntries.append("shield") tooltip = "{0} repaired per second".format(formatList(ttEntries)).capitalize() return text, tooltip - elif itemGroup == "Cap Drain Drone": + elif itemGroup == "Energy Neutralizer Drone": neutAmount = stuff.getModifiedItemAttr("energyDestabilizationAmount") cycleTime = stuff.getModifiedItemAttr("duration") if not neutAmount or not cycleTime: @@ -462,7 +487,7 @@ class Miscellanea(ViewColumn): if chargeGroup in ("Rocket", "Advanced Rocket", "Light Missile", "Advanced Light Missile", "FoF Light Missile", "Heavy Assault Missile", "Advanced Heavy Assault Missile", "Heavy Missile", "Advanced Heavy Missile", "FoF Heavy Missile", "Torpedo", "Advanced Torpedo", "Cruise Missile", "Advanced Cruise Missile", "FoF Cruise Missile", - "Citadel Torpedo", "Citadel Cruise"): + "Capital Torpedo", "Capital Cruise"): cloudSize = stuff.getModifiedChargeAttr("aoeCloudSize") aoeVelocity = stuff.getModifiedChargeAttr("aoeVelocity") if not cloudSize or not aoeVelocity: diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index b58674043..d16c0f251 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -526,7 +526,8 @@ class FittingView(d.Display): # update state tooltip tooltip = self.activeColumns[col].getToolTip(self.mods[self.GetItemData(row)]) - self.SetToolTipString(tooltip) + if tooltip: + self.SetToolTipString(tooltip) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.mainFrame.getActiveFit())) else: diff --git a/gui/characterEditor.py b/gui/characterEditor.py index c52ec3b8e..dbe628f4b 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -32,15 +32,14 @@ import gui.globalEvents as GE class CharacterEditor(wx.Frame): def __init__(self, parent): wx.Frame.__init__ (self, parent, id=wx.ID_ANY, title=u"pyfa: Character Editor", pos=wx.DefaultPosition, - size=wx.Size(641, 600), style=wx.DEFAULT_FRAME_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.TAB_TRAVERSAL) + size=wx.Size(640, 600), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER) i = wx.IconFromBitmap(BitmapLoader.getBitmap("character_small", "gui")) self.SetIcon(i) self.mainFrame = parent + #self.disableWin = wx.WindowDisabler(self) - self.disableWin= wx.WindowDisabler(self) - self.SetSizeHintsSz(wx.Size(640, 600), wx.DefaultSize) self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) mainSizer = wx.BoxSizer(wx.VERTICAL) @@ -170,7 +169,7 @@ class CharacterEditor(wx.Frame): self.btnRestrict() def editingFinished(self, event): - del self.disableWin + #del self.disableWin wx.PostEvent(self.mainFrame, GE.CharListUpdated()) self.Destroy() @@ -200,7 +199,7 @@ class CharacterEditor(wx.Frame): wx.PostEvent(self, GE.CharListUpdated()) def closeEvent(self, event): - del self.disableWin + #del self.disableWin wx.PostEvent(self.mainFrame, GE.CharListUpdated()) self.Destroy() @@ -821,4 +820,4 @@ class SaveCharacterAs(wx.Dialog): event.Skip() self.Close() - + \ No newline at end of file diff --git a/gui/characterEditor.py.BASE b/gui/characterEditor.py.BASE new file mode 100644 index 000000000..e2279c31e --- /dev/null +++ b/gui/characterEditor.py.BASE @@ -0,0 +1,804 @@ +#=============================================================================== +# Copyright (C) 2010 Diego Duclos +# +# 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 . +#=============================================================================== + +import wx + +import gui.mainFrame +import wx.lib.newevent +import wx.gizmos +from gui.bitmapLoader import BitmapLoader +import service +import gui.display as d +from gui.contextMenu import ContextMenu +from wx.lib.buttons import GenBitmapButton +import gui.globalEvents as GE + +class CharacterEditor(wx.Frame): + def __init__(self, parent): + wx.Frame.__init__ (self, parent, id=wx.ID_ANY, title=u"pyfa: Character Editor", pos=wx.DefaultPosition, + size=wx.Size(641, 600), style=wx.DEFAULT_FRAME_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.TAB_TRAVERSAL) + + i = wx.IconFromBitmap(BitmapLoader.getBitmap("character_small", "gui")) + self.SetIcon(i) + + self.mainFrame = parent + + self.disableWin= wx.WindowDisabler(self) + self.SetSizeHintsSz(wx.Size(640, 600), wx.DefaultSize) + self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) + + mainSizer = wx.BoxSizer(wx.VERTICAL) + self.navSizer = wx.BoxSizer(wx.HORIZONTAL) + + sChar = service.Character.getInstance() + + self.btnSave = wx.Button(self, wx.ID_SAVE) + self.btnSave.Hide() + self.btnSave.Bind(wx.EVT_BUTTON, self.processRename) + + self.characterRename = wx.TextCtrl(self, wx.ID_ANY, style=wx.TE_PROCESS_ENTER) + self.characterRename.Hide() + self.characterRename.Bind(wx.EVT_TEXT_ENTER, self.processRename) + + self.charChoice = wx.Choice(self, wx.ID_ANY, style=0) + self.navSizer.Add(self.charChoice, 1, wx.ALL | wx.EXPAND, 5) + + charList = sChar.getCharacterList() + + for id, name, active in charList: + i = self.charChoice.Append(name, id) + if active: + self.charChoice.SetSelection(i) + + self.navSizer.Add(self.btnSave, 0, wx.ALL , 5) + + + buttons = (("new", wx.ART_NEW), + ("rename", BitmapLoader.getBitmap("rename", "gui")), + ("copy", wx.ART_COPY), + ("delete", wx.ART_DELETE)) + + size = None + for name, art in buttons: + bitmap = wx.ArtProvider.GetBitmap(art, wx.ART_BUTTON) if name != "rename" else art + btn = wx.BitmapButton(self, wx.ID_ANY, bitmap) + if size is None: + size = btn.GetSize() + + btn.SetMinSize(size) + btn.SetMaxSize(size) + + btn.SetToolTipString("%s character" % name.capitalize()) + btn.Bind(wx.EVT_BUTTON, getattr(self, name)) + setattr(self, "btn%s" % name.capitalize(), btn) + self.navSizer.Add(btn, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2) + + + mainSizer.Add(self.navSizer, 0, wx.ALL | wx.EXPAND, 5) + + self.viewsNBContainer = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) + + self.sview = SkillTreeView(self.viewsNBContainer) + #self.iview = ImplantsTreeView(self.viewsNBContainer) + #======================================================================= + # RC2 + #self.iview.Show(False) + #======================================================================= + self.aview = APIView(self.viewsNBContainer) + + self.viewsNBContainer.AddPage(self.sview, "Skills") + + #======================================================================= + # Disabled for RC2 + # self.viewsNBContainer.AddPage(self.iview, "Implants") + #======================================================================= + self.viewsNBContainer.AddPage(self.aview, "API") + + mainSizer.Add(self.viewsNBContainer, 1, wx.EXPAND | wx.ALL, 5) + + bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) + + self.btnSaveChar = wx.Button(self, wx.ID_ANY, "Save") + self.btnSaveAs = wx.Button(self, wx.ID_ANY, "Save As...") + self.btnRevert = wx.Button(self, wx.ID_ANY, "Revert") + self.btnOK = wx.Button(self, wx.ID_OK) + + bSizerButtons.Add(self.btnSaveChar, 0, wx.ALL, 5) + bSizerButtons.Add(self.btnSaveAs, 0, wx.ALL, 5) + bSizerButtons.Add(self.btnRevert, 0, wx.ALL, 5) + bSizerButtons.AddStretchSpacer() + bSizerButtons.Add(self.btnOK, 0, wx.ALL, 5) + + + self.btnSaveChar.Bind(wx.EVT_BUTTON, self.saveChar) + self.btnSaveAs.Bind(wx.EVT_BUTTON, self.saveCharAs) + self.btnRevert.Bind(wx.EVT_BUTTON, self.revertChar) + self.btnOK.Bind(wx.EVT_BUTTON, self.editingFinished) + + mainSizer.Add(bSizerButtons, 0, wx.EXPAND, 5) + + self.btnRestrict() + + self.SetSizer(mainSizer) + self.Layout() + + self.Centre(wx.BOTH) + + charID = self.getActiveCharacter() + if sChar.getCharName(charID) in ("All 0", "All 5"): + self.restrict() + + self.registerEvents() + + def btnRestrict(self): + sChar = service.Character.getInstance() + charID = self.getActiveCharacter() + char = sChar.getCharacter(charID) + + # enable/disable character saving stuff + self.btnSaveChar.Enable(not char.ro and char.isDirty) + self.btnSaveAs.Enable(char.isDirty) + self.btnRevert.Enable(char.isDirty) + + def refreshCharacterList(self, event=None): + sChar = service.Character.getInstance() + charList = sChar.getCharacterList() + active = self.getActiveCharacter() + self.charChoice.Clear() + + for id, name, _ in charList: + i = self.charChoice.Append(name, id) + if active == id: + self.charChoice.SetSelection(i) + + self.btnRestrict() + + def editingFinished(self, event): + del self.disableWin + wx.PostEvent(self.mainFrame, GE.CharListUpdated()) + self.Destroy() + + def registerEvents(self): + self.Bind(wx.EVT_CLOSE, self.closeEvent) + self.Bind(GE.CHAR_LIST_UPDATED, self.refreshCharacterList) + self.charChoice.Bind(wx.EVT_CHOICE, self.charChanged) + + def saveChar(self, event): + sChr = service.Character.getInstance() + charID = self.getActiveCharacter() + sChr.saveCharacter(charID) + self.sview.populateSkillTree() + wx.PostEvent(self, GE.CharListUpdated()) + + def saveCharAs(self, event): + charID = self.getActiveCharacter() + dlg = SaveCharacterAs(self, charID) + dlg.ShowModal() + self.sview.populateSkillTree() + + def revertChar(self, event): + sChr = service.Character.getInstance() + charID = self.getActiveCharacter() + sChr.revertCharacter(charID) + self.sview.populateSkillTree() + wx.PostEvent(self, GE.CharListUpdated()) + + def closeEvent(self, event): + del self.disableWin + wx.PostEvent(self.mainFrame, GE.CharListUpdated()) + self.Destroy() + + def restrict(self): + self.btnRename.Enable(False) + self.btnDelete.Enable(False) + self.aview.stDisabledTip.Show() + self.aview.inputID.Enable(False) + self.aview.inputKey.Enable(False) + self.aview.charChoice.Enable(False) + self.aview.btnFetchCharList.Enable(False) + self.aview.btnFetchSkills.Enable(False) + self.aview.stStatus.SetLabel("") + self.aview.Layout() + + def unrestrict(self): + self.btnRename.Enable(True) + self.btnDelete.Enable(True) + self.aview.stDisabledTip.Hide() + self.aview.inputID.Enable(True) + self.aview.inputKey.Enable(True) + self.aview.btnFetchCharList.Enable(True) + self.aview.btnFetchSkills.Enable(True) + self.aview.stStatus.SetLabel("") + self.aview.Layout() + + def charChanged(self, event): + self.sview.populateSkillTree() + sChar = service.Character.getInstance() + charID = self.getActiveCharacter() + if sChar.getCharName(charID) in ("All 0", "All 5"): + self.restrict() + else: + self.unrestrict() + + wx.PostEvent(self, GE.CharChanged()) + if event is not None: + event.Skip() + + def getActiveCharacter(self): + selection = self.charChoice.GetCurrentSelection() + return self.charChoice.GetClientData(selection) if selection is not None else None + + def new(self, event): + sChar = service.Character.getInstance() + charID = sChar.new() + id = self.charChoice.Append(sChar.getCharName(charID), charID) + self.charChoice.SetSelection(id) + self.unrestrict() + self.btnSave.SetLabel("Create") + self.rename(None) + self.charChanged(None) + + def rename(self, event): + if event is not None: + self.btnSave.SetLabel("Rename") + self.charChoice.Hide() + self.characterRename.Show() + self.navSizer.Replace(self.charChoice, self.characterRename) + self.characterRename.SetFocus() + for btn in (self.btnNew, self.btnCopy, self.btnRename, self.btnDelete): + btn.Hide() + + self.btnSave.Show() + self.navSizer.Layout() + + sChar = service.Character.getInstance() + currName = sChar.getCharName(self.getActiveCharacter()) + self.characterRename.SetValue(currName) + self.characterRename.SetSelection(0, len(currName)) + + def processRename(self, event): + sChar = service.Character.getInstance() + newName = self.characterRename.GetLineText(0) + + if newName == "All 0" or newName == "All 5": + newName = newName + " bases are belong to us" + + charID = self.getActiveCharacter() + sChar.rename(charID, newName) + + self.charChoice.Show() + self.characterRename.Hide() + self.navSizer.Replace(self.characterRename, self.charChoice) + for btn in (self.btnNew, self.btnCopy, self.btnRename, self.btnDelete): + btn.Show() + + self.btnSave.Hide() + self.navSizer.Layout() + self.refreshCharacterList() + + def copy(self, event): + sChar = service.Character.getInstance() + charID = sChar.copy(self.getActiveCharacter()) + id = self.charChoice.Append(sChar.getCharName(charID), charID) + self.charChoice.SetSelection(id) + self.unrestrict() + self.btnSave.SetLabel("Copy") + self.rename(None) + wx.PostEvent(self, GE.CharChanged()) + + def delete(self, event): + dlg = wx.MessageDialog(self, + "Do you really want to delete this character?", + "Confirm Delete", wx.YES | wx.NO | wx.ICON_QUESTION) + + if dlg.ShowModal() == wx.ID_YES: + sChar = service.Character.getInstance() + sChar.delete(self.getActiveCharacter()) + sel = self.charChoice.GetSelection() + self.charChoice.Delete(sel) + self.charChoice.SetSelection(sel - 1) + newSelection = self.getActiveCharacter() + if sChar.getCharName(newSelection) in ("All 0", "All 5"): + self.restrict() + + wx.PostEvent(self, GE.CharChanged()) + + def Destroy(self): + sFit = service.Fit.getInstance() + fitID = self.mainFrame.getActiveFit() + if fitID is not None: + sFit.clearFit(fitID) + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + + wx.Frame.Destroy(self) + +class SkillTreeView (wx.Panel): + def __init__(self, parent): + wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.TAB_TRAVERSAL) + self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) + + pmainSizer = wx.BoxSizer(wx.VERTICAL) + + tree = self.skillTreeListCtrl = wx.gizmos.TreeListCtrl(self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) + pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 5) + + + self.imageList = wx.ImageList(16, 16) + tree.SetImageList(self.imageList) + self.skillBookImageId = self.imageList.Add(BitmapLoader.getBitmap("skill_small", "gui")) + + tree.AddColumn("Skill") + tree.AddColumn("Level") + tree.SetMainColumn(0) + + self.root = tree.AddRoot("Skills") + tree.SetItemText(self.root, "Levels", 1) + + tree.SetColumnWidth(0, 500) + + self.populateSkillTree() + + tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) + tree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.scheduleMenu) + + srcContext = "skillItem" + itemContext = "Skill" + context = (srcContext, itemContext) + self.statsMenu = ContextMenu.getMenu(None, context) + self.levelChangeMenu = ContextMenu.getMenu(None, context) or wx.Menu() + self.levelChangeMenu.AppendSeparator() + self.levelIds = {} + + idUnlearned = wx.NewId() + self.levelIds[idUnlearned] = "Not learned" + self.levelChangeMenu.Append(idUnlearned, "Unlearn") + + for level in xrange(6): + id = wx.NewId() + self.levelIds[id] = level + self.levelChangeMenu.Append(id, "Level %d" % level) + + self.levelChangeMenu.AppendSeparator() + self.revertID = wx.NewId() + self.levelChangeMenu.Append(self.revertID, "Revert") + + + self.saveID = wx.NewId() + self.levelChangeMenu.Append(self.saveID, "Save") + + self.levelChangeMenu.Bind(wx.EVT_MENU, self.changeLevel) + self.SetSizer(pmainSizer) + + self.Layout() + + def populateSkillTree(self): + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + dirtySkills = sChar.getDirtySkills(charID) + dirtyGroups = set([skill.item.group.ID for skill in dirtySkills]) + + groups = sChar.getSkillGroups() + imageId = self.skillBookImageId + root = self.root + tree = self.skillTreeListCtrl + tree.DeleteChildren(root) + + for id, name in groups: + childId = tree.AppendItem(root, name, imageId) + tree.SetPyData(childId, id) + tree.AppendItem(childId, "dummy") + if id in dirtyGroups: + tree.SetItemTextColour(childId, wx.BLUE) + + tree.SortChildren(root) + + def expandLookup(self, event): + root = event.Item + tree = self.skillTreeListCtrl + child, cookie = tree.GetFirstChild(root) + if tree.GetItemText(child) == "dummy": + tree.Delete(child) + + #Get the real intrestin' stuff + sChar = service.Character.getInstance() + char = self.Parent.Parent.getActiveCharacter() + for id, name in sChar.getSkills(tree.GetPyData(root)): + iconId = self.skillBookImageId + childId = tree.AppendItem(root, name, iconId, data=wx.TreeItemData(id)) + level, dirty = sChar.getSkillLevel(char, id) + tree.SetItemText(childId, "Level %d" % level if isinstance(level, int) else level, 1) + if dirty: + tree.SetItemTextColour(childId, wx.BLUE) + + tree.SortChildren(root) + + def scheduleMenu(self, event): + event.Skip() + wx.CallAfter(self.spawnMenu, event.Item) + + def spawnMenu(self, item): + self.skillTreeListCtrl.SelectItem(item) + if self.skillTreeListCtrl.GetChildrenCount(item) > 0: + return + + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + sMkt = service.Market.getInstance() + if sChar.getCharName(charID) not in ("All 0", "All 5"): + self.levelChangeMenu.selection = sMkt.getItem(self.skillTreeListCtrl.GetPyData(item)) + self.PopupMenu(self.levelChangeMenu) + else: + self.statsMenu.selection = sMkt.getItem(self.skillTreeListCtrl.GetPyData(item)) + self.PopupMenu(self.statsMenu) + + def changeLevel(self, event): + level = self.levelIds.get(event.Id) + + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + selection = self.skillTreeListCtrl.GetSelection() + skillID = self.skillTreeListCtrl.GetPyData(selection) + + if level is not None: + self.skillTreeListCtrl.SetItemText(selection, "Level %d" % level if isinstance(level, int) else level, 1) + sChar.changeLevel(charID, skillID, level, persist=True) + elif event.Id == self.revertID: + sChar.revertLevel(charID, skillID) + elif event.Id == self.saveID: + sChar.saveSkill(charID, skillID) + + self.skillTreeListCtrl.SetItemTextColour(selection, None) + + dirtySkills = sChar.getDirtySkills(charID) + dirtyGroups = set([skill.item.group.ID for skill in dirtySkills]) + + parentID = self.skillTreeListCtrl.GetItemParent(selection) + groupID = self.skillTreeListCtrl.GetPyData(parentID) + + if groupID not in dirtyGroups: + self.skillTreeListCtrl.SetItemTextColour(parentID, None) + + wx.PostEvent(self.Parent.Parent, GE.CharListUpdated()) + event.Skip() + +class ImplantsTreeView (wx.Panel): + def addMarketViewImage(self, iconFile): + if iconFile is None: + return -1 + bitmap = BitmapLoader.getBitmap(iconFile, "icons") + if bitmap is None: + return -1 + else: + return self.availableImplantsImageList.Add(bitmap) + + def __init__(self, parent): + wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.TAB_TRAVERSAL) + + pmainSizer = wx.BoxSizer(wx.HORIZONTAL) + + availableSizer = wx.BoxSizer(wx.VERTICAL) + pmainSizer.Add(availableSizer, 1, wx.ALL | wx.EXPAND, 5) + + self.availableImplantsSearch = wx.SearchCtrl(self, wx.ID_ANY, style=wx.TE_PROCESS_ENTER) + self.availableImplantsSearch.ShowCancelButton(True) + availableSizer.Add(self.availableImplantsSearch, 0, wx.BOTTOM | wx.EXPAND, 2) + + self.availableImplantsTree = wx.TreeCtrl(self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) + root = self.availableRoot = self.availableImplantsTree.AddRoot("Available") + self.availableImplantsImageList = wx.ImageList(16, 16) + self.availableImplantsTree.SetImageList(self.availableImplantsImageList) + + availableSizer.Add(self.availableImplantsTree, 1, wx.EXPAND) + + buttonSizer = wx.BoxSizer(wx.VERTICAL) + pmainSizer.Add(buttonSizer, 0, wx.TOP, 5) + + self.btnAdd = GenBitmapButton(self, wx.ID_ADD, BitmapLoader.getBitmap("fit_add_small", "gui"), style = wx.BORDER_NONE) + buttonSizer.Add(self.btnAdd, 0) + self.btnRemove = GenBitmapButton(self, wx.ID_REMOVE, BitmapLoader.getBitmap("fit_delete_small", "gui"), style = wx.BORDER_NONE) + buttonSizer.Add(self.btnRemove, 0) + + self.pluggedImplantsTree = AvailableImplantsView(self, style=wx.LC_SINGLE_SEL) + + pmainSizer.Add(self.pluggedImplantsTree, 1, wx.ALL | wx.EXPAND, 5) + + self.SetSizer(pmainSizer) + + # Populate the market tree + sMkt = service.Market.getInstance() + for mktGrp in sMkt.getImplantTree(): + iconId = self.addMarketViewImage(sMkt.getIconByMarketGroup(mktGrp)) + childId = self.availableImplantsTree.AppendItem(root, mktGrp.name, iconId, data=wx.TreeItemData(mktGrp.ID)) + if sMkt.marketGroupHasTypesCheck(mktGrp) is False: + self.availableImplantsTree.AppendItem(childId, "dummy") + + self.availableImplantsTree.SortChildren(self.availableRoot) + + #Bind the event to replace dummies by real data + self.availableImplantsTree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) + + #Bind add & remove buttons + self.btnAdd.Bind(wx.EVT_BUTTON, self.addImplant) + self.btnRemove.Bind(wx.EVT_BUTTON, self.removeImplant) + + #Bind the change of a character* + self.Parent.Parent.Bind(GE.CHAR_CHANGED, self.charChanged) + self.Enable(False) + self.Layout() + + def update(self, implants): + self.implants = implants[:] + self.implants.sort(key=lambda i: int(i.getModifiedItemAttr("implantness"))) + self.pluggedImplantsTree.update(self.implants) + + def charChanged(self, event): + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + name = sChar.getCharName(charID) + if name == "All 0" or name == "All 5": + self.Enable(False) + else: + self.Enable(True) + + self.update(sChar.getImplants(charID)) + event.Skip() + + def expandLookup(self, event): + tree = self.availableImplantsTree + root = event.Item + child, cookie = tree.GetFirstChild(root) + text = tree.GetItemText(child) + if text == "dummy" or text == "itemdummy": + sMkt = service.Market.getInstance() + #A DUMMY! Keeeel!!! EBUL DUMMY MUST DIAF! + tree.Delete(child) + + if text == "dummy": + #Add 'real stoof!' instead + for id, name, iconFile, more in sMkt.getChildren(tree.GetPyData(root)): + iconId = self.addMarketViewImage(iconFile) + childId = tree.AppendItem(root, name, iconId, data=wx.TreeItemData(id)) + if more: + tree.AppendItem(childId, "dummy") + else: + tree.AppendItem(childId, "itemdummy") + + if text == "itemdummy": + sMkt = service.Market.getInstance() + data, usedMetas = sMkt.getVariations(tree.GetPyData(root)) + for item in data: + id = item.ID + name = item.name + iconFile = item.icon.iconFile + iconId = self.addMarketViewImage(iconFile) + tree.AppendItem(root, name, iconId, data=wx.TreeItemData(id)) + + tree.SortChildren(root) + + def addImplant(self, event): + root = self.availableImplantsTree.GetSelection() + + if not root.IsOk(): + return + + nchilds = self.availableImplantsTree.GetChildrenCount(root) + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + if nchilds == 0: + itemID = self.availableImplantsTree.GetPyData(root) + sChar.addImplant(charID, itemID) + self.update(sChar.getImplants(charID)) + + def removeImplant(self, event): + pos = self.pluggedImplantsTree.GetFirstSelected() + if pos != -1: + sChar = service.Character.getInstance() + charID = self.Parent.Parent.getActiveCharacter() + sChar.removeImplant(charID, self.implants[pos].slot) + self.update(sChar.getImplants(charID)) + +class AvailableImplantsView(d.Display): + DEFAULT_COLS = ["Base Name", + "attr:implantness"] + + def __init__(self, parent, style): + d.Display.__init__(self, parent, style=style) + +class APIView (wx.Panel): + def __init__(self, parent): + wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.TAB_TRAVERSAL) + self.Parent.Parent.Bind(GE.CHAR_CHANGED, self.charChanged) + self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) + + self.apiUrlCreatePredefined = u"https://community.eveonline.com/support/api-key/CreatePredefined?accessMask=8" + self.apiUrlKeyList = u"https://community.eveonline.com/support/api-key/" + + pmainSizer = wx.BoxSizer(wx.VERTICAL) + + hintSizer = wx.BoxSizer( wx.HORIZONTAL ) + hintSizer.AddStretchSpacer() + self.stDisabledTip = wx.StaticText( self, wx.ID_ANY, u"You cannot add API Details for All 0 and All 5 characters.\n" + u"Please select another character or make a new one.", style=wx.ALIGN_CENTER ) + self.stDisabledTip.Wrap( -1 ) + hintSizer.Add( self.stDisabledTip, 0, wx.TOP | wx.BOTTOM, 10 ) + self.stDisabledTip.Hide() + hintSizer.AddStretchSpacer() + pmainSizer.Add(hintSizer, 0, wx.EXPAND, 5) + + + fgSizerInput = wx.FlexGridSizer(3, 2, 0, 0) + fgSizerInput.AddGrowableCol(1) + fgSizerInput.SetFlexibleDirection(wx.BOTH) + fgSizerInput.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) + + self.m_staticIDText = wx.StaticText(self, wx.ID_ANY, u"keyID:", wx.DefaultPosition, wx.DefaultSize, 0) + self.m_staticIDText.Wrap(-1) + fgSizerInput.Add(self.m_staticIDText, 0, wx.ALL | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) + + self.inputID = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) + fgSizerInput.Add(self.inputID, 1, wx.ALL | wx.EXPAND, 5) + + self.m_staticKeyText = wx.StaticText(self, wx.ID_ANY, u"vCode:", wx.DefaultPosition, wx.DefaultSize, 0) + self.m_staticKeyText.Wrap(-1) + fgSizerInput.Add(self.m_staticKeyText, 0, wx.ALL | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) + + self.inputKey = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) + fgSizerInput.Add(self.inputKey, 0, wx.ALL | wx.EXPAND, 5) + + self.m_staticCharText = wx.StaticText(self, wx.ID_ANY, u"Character:", wx.DefaultPosition, wx.DefaultSize, 0) + self.m_staticCharText.Wrap(-1) + fgSizerInput.Add(self.m_staticCharText, 0, wx.ALL | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) + + self.charChoice = wx.Choice(self, wx.ID_ANY, style=0) + self.charChoice.Append("No Selection", 0) + fgSizerInput.Add(self.charChoice, 1, wx.ALL | wx.EXPAND, 5) + + self.charChoice.Enable(False) + + pmainSizer.Add(fgSizerInput, 0, wx.EXPAND, 5) + + btnSizer = wx.BoxSizer( wx.HORIZONTAL ) + btnSizer.AddStretchSpacer() + + self.btnFetchCharList = wx.Button(self, wx.ID_ANY, u"Get Characters") + btnSizer.Add(self.btnFetchCharList, 0, wx.ALL, 2) + self.btnFetchCharList.Bind(wx.EVT_BUTTON, self.fetchCharList) + + self.btnFetchSkills = wx.Button(self, wx.ID_ANY, u"Fetch Skills") + btnSizer.Add(self.btnFetchSkills, 0, wx.ALL, 2) + self.btnFetchSkills.Bind(wx.EVT_BUTTON, self.fetchSkills) + self.btnFetchSkills.Enable(False) + + btnSizer.AddStretchSpacer() + pmainSizer.Add(btnSizer, 0, wx.EXPAND, 5) + + self.stStatus = wx.StaticText(self, wx.ID_ANY, wx.EmptyString) + pmainSizer.Add(self.stStatus, 0, wx.ALL, 5) + + pmainSizer.AddStretchSpacer() + self.stAPITip = wx.StaticText( self, wx.ID_ANY, u"You can create a pre-defined key here (only CharacterSheet is required):", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stAPITip.Wrap( -1 ) + + pmainSizer.Add( self.stAPITip, 0, wx.ALL, 2 ) + + self.hlEveAPI = wx.HyperlinkCtrl( self, wx.ID_ANY, self.apiUrlCreatePredefined, self.apiUrlCreatePredefined, wx.DefaultPosition, wx.DefaultSize, wx.HL_DEFAULT_STYLE ) + pmainSizer.Add( self.hlEveAPI, 0, wx.ALL, 2 ) + + self.stAPITip2 = wx.StaticText( self, wx.ID_ANY, u"Or, you can choose an existing key from:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stAPITip2.Wrap( -1 ) + pmainSizer.Add( self.stAPITip2, 0, wx.ALL, 2 ) + + self.hlEveAPI2 = wx.HyperlinkCtrl( self, wx.ID_ANY, self.apiUrlKeyList, self.apiUrlKeyList, wx.DefaultPosition, wx.DefaultSize, wx.HL_DEFAULT_STYLE ) + pmainSizer.Add( self.hlEveAPI2, 0, wx.ALL, 2 ) + + self.SetSizer(pmainSizer) + self.Layout() + self.charChanged(None) + + def charChanged(self, event): + sChar = service.Character.getInstance() + ID, key, char, chars = sChar.getApiDetails(self.Parent.Parent.getActiveCharacter()) + self.inputID.SetValue(str(ID)) + self.inputKey.SetValue(key) + + self.charChoice.Clear() + + if chars: + for charName in chars: + i = self.charChoice.Append(charName) + self.charChoice.SetStringSelection(char) + self.charChoice.Enable(True) + self.btnFetchSkills.Enable(True) + else: + self.charChoice.Append("No characters...", 0) + self.charChoice.SetSelection(0) + self.charChoice.Enable(False) + self.btnFetchSkills.Enable(False) + + + if event is not None: + event.Skip() + + def fetchCharList(self, event): + self.stStatus.SetLabel("") + if self.inputID.GetLineText(0) == "" or self.inputKey.GetLineText(0) == "": + self.stStatus.SetLabel("Invalid keyID or vCode!") + return + + sChar = service.Character.getInstance() + try: + list = sChar.apiCharList(self.Parent.Parent.getActiveCharacter(), self.inputID.GetLineText(0), self.inputKey.GetLineText(0)) + except service.network.AuthenticationError, e: + self.stStatus.SetLabel("Authentication failure. Please check keyID and vCode combination.") + except service.network.TimeoutError, e: + self.stStatus.SetLabel("Request timed out. Please check network connectivity and/or proxy settings.") + except Exception, e: + self.stStatus.SetLabel("Error:\n%s"%e.message) + else: + self.charChoice.Clear() + for charName in list: + i = self.charChoice.Append(charName) + + self.btnFetchSkills.Enable(True) + self.charChoice.Enable(True) + + self.Layout() + + self.charChoice.SetSelection(0) + + def fetchSkills(self, event): + charName = self.charChoice.GetString(self.charChoice.GetSelection()) + if charName: + try: + sChar = service.Character.getInstance() + sChar.apiFetch(self.Parent.Parent.getActiveCharacter(), charName) + self.stStatus.SetLabel("Successfully fetched %s\'s skills from EVE API." % charName) + except Exception, e: + self.stStatus.SetLabel("Unable to retrieve %s\'s skills. Error message:\n%s" % (charName, e)) + +class SaveCharacterAs(wx.Dialog): + + def __init__(self, parent, charID): + wx.Dialog.__init__(self, parent, title="Save Character As...", size=wx.Size(300, 60)) + self.charID = charID + self.parent = parent + sChar = service.Character.getInstance() + name = sChar.getCharName(charID) + bSizer1 = wx.BoxSizer(wx.HORIZONTAL) + + self.input = wx.TextCtrl(self, wx.ID_ANY, name, style=wx.TE_PROCESS_ENTER) + + bSizer1.Add(self.input, 1, wx.ALL, 5) + self.input.Bind(wx.EVT_TEXT_ENTER, self.change) + self.button = wx.Button(self, wx.ID_OK, u"Save") + bSizer1.Add(self.button, 0, wx.ALL, 5) + + self.SetSizer(bSizer1) + self.Layout() + self.Centre(wx.BOTH) + self.button.Bind(wx.EVT_BUTTON, self.change) + + def change(self, event): + sChar = service.Character.getInstance() + sChar.saveCharacterAs(self.charID, self.input.GetLineText(0)) + wx.PostEvent(self.parent, GE.CharListUpdated()) + + event.Skip() + self.Close() + diff --git a/gui/gangView.py b/gui/gangView.py index c06f8b362..2e6d7b1da 100644 --- a/gui/gangView.py +++ b/gui/gangView.py @@ -43,15 +43,10 @@ class GangView ( ScrolledPanel ): self.helpText = wx.StaticText( self, wx.ID_ANY, help, wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTRE ) helpSizer.Add( self.helpText, 1, wx.ALL, 5 ) - self.FitDNDPopupMenu = wx.Menu() - self.options = ["Fleet", "Wing", "Squad"] self.fleet = {} for id, option in enumerate(self.options): - item = self.FitDNDPopupMenu.Append(-1, option) - # We bind it to the mainFrame because it may be called from either this class or from FitItem via shipBrowser - self.mainFrame.Bind(wx.EVT_MENU, self.OnPopupItemSelected, item) # set content for each commander self.fleet[id] = {} @@ -61,6 +56,8 @@ class GangView ( ScrolledPanel ): self.fleet[id]['chChar'] = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, [] ) self.fleet[id]['fitSizer'] = wx.BoxSizer( wx.VERTICAL ) + self.FitDNDPopupMenu = self.buildBoostermenu() + contentFGSizer = wx.FlexGridSizer( 5, 3, 0, 0 ) contentFGSizer.AddGrowableCol( 1 ) contentFGSizer.SetFlexibleDirection( wx.BOTH ) @@ -130,6 +127,15 @@ class GangView ( ScrolledPanel ): self.RefreshBoosterFits() self.RefreshCharacterList() + def buildBoostermenu(self): + menu = wx.Menu() + + for id, option in enumerate(self.options): + item = menu.Append(-1, option) + # We bind it to the mainFrame because it may be called from either this class or from FitItem via shipBrowser + self.mainFrame.Bind(wx.EVT_MENU, self.OnPopupItemSelected, item) + return menu + def OnEnterWindow(self, event): obj = event.GetEventObject() obj.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) @@ -371,7 +377,7 @@ class GangView ( ScrolledPanel ): def OnPopupItemSelected(self, event): ''' Fired when booster popup item is selected ''' # Get menu selection ID via self.options - menuItem = self.FitDNDPopupMenu.FindItemById(event.GetId()) + menuItem = event.EventObject.FindItemById(event.GetId()) type = self.options.index(menuItem.GetText()) if self.draggedFitID: diff --git a/gui/itemStats.py b/gui/itemStats.py index ce58ac09f..d0ef2db3f 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -361,6 +361,9 @@ class ItemParams (wx.Panel): else: attrName = name + if info and config.debug: + attrName += " ({})".format(info.ID) + if info: if info.icon is not None: iconFile = info.icon.iconFile @@ -376,7 +379,7 @@ class ItemParams (wx.Panel): attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) - index = self.paramList.InsertImageStringItem(sys.maxint, attrName,attrIcon) + index = self.paramList.InsertImageStringItem(sys.maxint, attrName, attrIcon) idNameMap[idCount] = attrName self.paramList.SetItemData(index, idCount) idCount += 1 @@ -499,6 +502,8 @@ class ItemEffects (wx.Panel): self.effectList.InsertColumn(0,"Name") self.effectList.InsertColumn(1,"Implemented") + if config.debug: + self.effectList.InsertColumn(2,"ID") #self.effectList.SetColumnWidth(0,385) @@ -519,6 +524,8 @@ class ItemEffects (wx.Panel): implemented = "Erroneous" self.effectList.SetStringItem(index, 1, implemented) + if config.debug: + self.effectList.SetStringItem(index, 2, str(effects[name].ID)) self.effectList.RefreshRows() self.Layout() diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 01e44439c..4c0d39ba7 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -24,6 +24,8 @@ import sqlalchemy import wx import time +from codecs import open + from wx._core import PyDeadObjectError from wx.lib.wordwrap import wordwrap @@ -114,8 +116,8 @@ class MainFrame(wx.Frame): def getInstance(cls): return cls.__instance if cls.__instance is not None else MainFrame() - def __init__(self): - self.title="pyfa %s%s - Python Fitting Assistant"%(config.version, "" if config.tag.lower() != 'git' else " (git)") + def __init__(self, title): + self.title=title wx.Frame.__init__(self, None, wx.ID_ANY, self.title) MainFrame.__instance = self @@ -324,6 +326,7 @@ class MainFrame(wx.Frame): def ShowAboutBox(self, evt): import eos.config + v = sys.version_info info = wx.AboutDialogInfo() info.Name = "pyfa" info.Version = gui.aboutData.versionString @@ -334,14 +337,14 @@ class MainFrame(wx.Frame): "\n\nLicenses:\n\t" + "\n\t".join(gui.aboutData.licenses) + "\n\nEVE Data: \t" + eos.config.gamedata_version + - "\nPython: \t" + sys.version + + "\nPython: \t\t" + '{}.{}.{}'.format(v.major, v.minor, v.micro) + "\nwxPython: \t" + wx.__version__ + "\nSQLAlchemy: \t" + sqlalchemy.__version__, - 700, wx.ClientDC(self)) + 500, wx.ClientDC(self)) if "__WXGTK__" in wx.PlatformInfo: - forumUrl = "http://forums.eveonline.com/default.aspx?g=posts&t=247609" + forumUrl = "http://forums.eveonline.com/default.aspx?g=posts&t=466425" else: - forumUrl = "http://forums.eveonline.com/default.aspx?g=posts&t=247609" + forumUrl = "http://forums.eveonline.com/default.aspx?g=posts&t=466425" info.WebSite = (forumUrl, "pyfa thread at EVE Online forum") wx.AboutBox(info) @@ -385,7 +388,7 @@ class MainFrame(wx.Frame): print "oops, invalid fit format %d" % format dlg.Destroy() return - file = open(path, "w") + file = open(path, "w", encoding="utf-8") file.write(output) file.close() dlg.Destroy() @@ -395,10 +398,10 @@ class MainFrame(wx.Frame): dlg.ShowModal() def goWiki(self, event): - webbrowser.open('https://github.com/DarkFenX/Pyfa/wiki') + webbrowser.open('https://github.com/pyfa-org/Pyfa/wiki') def goForums(self, event): - webbrowser.open('https://forums.eveonline.com/default.aspx?g=posts&t=247609') + webbrowser.open('https://forums.eveonline.com/default.aspx?g=posts&t=466425') def registerMenu(self): menuBar = self.GetMenuBar() @@ -784,7 +787,7 @@ class MainFrame(wx.Frame): else: self.progressDialog.Update(info) - def fileImportCallback(self, info, fits=None): + def fileImportCallback(self, action, data=None): """ While importing fits from file, the logic calls back to this function to update progress bar to show activity. XML files can contain multiple @@ -792,18 +795,28 @@ class MainFrame(wx.Frame): a single ship. When iterating through the files, we update the message when we start a new file, and then Pulse the progress bar with every fit that is processed. + + action : a flag that lets us know how to deal with :data + None: Pulse the progress bar + 1: Replace message with data + other: Close dialog and handle based on :action (-1 open fits, -2 display error) """ - if info == -1: - self.closeProgressDialog() - self._openAfterImport(fits) - elif info != self.progressDialog.message and info is not None: - # New message, overwrite cached message and update - self.progressDialog.message = info - self.progressDialog.Pulse(info) - else: - # Simply Pulse() if we don't have anything else to do + if action is None: self.progressDialog.Pulse() + elif action == 1 and data != self.progressDialog.message: + self.progressDialog.message = data + self.progressDialog.Pulse(data) + else: + self.closeProgressDialog() + if action == -1: + self._openAfterImport(data) + elif action == -2: + dlg = wx.MessageDialog(self, + "The following error was generated\n\n%s\n\nBe aware that already processed fits were not saved"%data, + "Import Error", wx.OK | wx.ICON_ERROR) + if dlg.ShowModal() == wx.ID_OK: + return def _openAfterImport(self, fits): if len(fits) > 0: diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index 0e636a3e6..78376fde7 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -49,6 +49,10 @@ class MainMenuBar(wx.MenuBar): self.attrEditorId = wx.NewId() self.toggleOverridesId = wx.NewId() + if 'wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0): + wx.ID_COPY = wx.NewId() + wx.ID_PASTE = wx.NewId() + self.mainFrame = gui.mainFrame.MainFrame.getInstance() wx.MenuBar.__init__(self) @@ -77,10 +81,8 @@ class MainMenuBar(wx.MenuBar): #editMenu.Append(wx.ID_UNDO) #editMenu.Append(wx.ID_REDO) - copyText = "&To Clipboard" + ("\tCTRL+C" if 'wxMSW' in wx.PlatformInfo else "") - pasteText = "&From Clipboard" + ("\tCTRL+V" if 'wxMSW' in wx.PlatformInfo else "") - editMenu.Append(wx.ID_COPY, copyText, "Export a fit to the clipboard") - editMenu.Append(wx.ID_PASTE, pasteText, "Import a fit from the clipboard") + editMenu.Append(wx.ID_COPY, "To Clipboard\tCTRL+C", "Export a fit to the clipboard") + editMenu.Append(wx.ID_PASTE, "From Clipboard\tCTRL+V", "Import a fit from the clipboard") editMenu.AppendSeparator() editMenu.Append(self.saveCharId, "Save Character") editMenu.Append(self.saveCharAsId, "Save Character As...") @@ -106,7 +108,8 @@ class MainMenuBar(wx.MenuBar): graphFrameItem.SetBitmap(BitmapLoader.getBitmap("graphs_small", "gui")) windowMenu.AppendItem(graphFrameItem) - preferencesItem = wx.MenuItem(windowMenu, wx.ID_PREFERENCES, "Preferences\tCTRL+P") + preferencesShortCut = "CTRL+," if 'wxMac' in wx.PlatformInfo else "CTRL+P" + preferencesItem = wx.MenuItem(windowMenu, wx.ID_PREFERENCES, "Preferences\t"+preferencesShortCut) preferencesItem.SetBitmap(BitmapLoader.getBitmap("preferences_small", "gui")) windowMenu.AppendItem(preferencesItem) diff --git a/gui/pyfatogglepanel.py b/gui/pyfatogglepanel.py index 14bd9e2f3..765a07727 100644 --- a/gui/pyfatogglepanel.py +++ b/gui/pyfatogglepanel.py @@ -5,7 +5,7 @@ ## ## Author: Darriele - HomeWorld ## -## Project home: http://github.com/DarkFenX/Pyfa - pyfa project +## Project home: https://github.com/pyfa-org/Pyfa - pyfa project ## Some portions of code are based on ## AGW:pycollapsiblepane generic implementation of wx.CollapsiblePane ## AGW:pycollapsiblepane credits ( from the original source file used ): diff --git a/gui/pygauge.py b/gui/pygauge.py index 308004a6b..b63f4fea8 100644 --- a/gui/pygauge.py +++ b/gui/pygauge.py @@ -20,6 +20,8 @@ import gui.utils.drawUtils as drawUtils import gui.utils.animEffects as animEffects import gui.utils.fonts as fonts +from service import fit + class PyGauge(wx.PyWindow): """ This class provides a visual alternative for `wx.Gauge`. It currently @@ -174,10 +176,15 @@ class PyGauge(wx.PyWindow): return self._range def Animate(self): - if not self._timer: - self._timer = wx.Timer(self, self._timerId) - self._animStep = 0 - self._timer.Start(self._period) + sFit = fit.Fit.getInstance() + if sFit.serviceFittingOptions["enableGaugeAnimation"]: + if not self._timer: + self._timer = wx.Timer(self, self._timerId) + self._animStep = 0 + self._timer.Start(self._period) + else: + self._animValue = self._percentage + self.Refresh() def SetRange(self, range, reinit = False): """ diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 2642c7d7a..e0aedebe3 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1536,13 +1536,12 @@ class FitItem(SFItem.SFBrowserItem): menu = wx.Menu() toggleItem = menu.Append(wx.ID_ANY, "Booster Fit", kind=wx.ITEM_CHECK) menu.Check(toggleItem.GetId(), self.fitBooster) - self.Bind(wx.EVT_MENU, self.OnToggleBooster, toggleItem) if self.mainFrame.getActiveFit(): # If there is an active fit, get menu for setting individual boosters menu.AppendSeparator() - boosterMenu = self.mainFrame.additionsPane.gangPage.FitDNDPopupMenu + boosterMenu = self.mainFrame.additionsPane.gangPage.buildBoostermenu() menu.AppendSubMenu(boosterMenu, 'Set Booster') self.PopupMenu(menu, pos) diff --git a/gui/updateDialog.py b/gui/updateDialog.py index 7dfe73790..0febdf3f8 100644 --- a/gui/updateDialog.py +++ b/gui/updateDialog.py @@ -116,5 +116,5 @@ class UpdateDialog(wx.Dialog): self.UpdateSettings.set('version', None) def OnDownload(self, e): - wx.LaunchDefaultBrowser('https://github.com/DarkFenX/Pyfa/releases/tag/'+self.releaseInfo['tag_name']) + wx.LaunchDefaultBrowser('https://github.com/pyfa-org/Pyfa/releases/tag/'+self.releaseInfo['tag_name']) self.OnClose(e) diff --git a/imgs/icons/01_01.png b/imgs/icons/01_01.png index 7c348ac56..18ab4636a 100644 Binary files a/imgs/icons/01_01.png and b/imgs/icons/01_01.png differ diff --git a/imgs/icons/01_02.png b/imgs/icons/01_02.png index 735242073..9dd2e7c7e 100644 Binary files a/imgs/icons/01_02.png and b/imgs/icons/01_02.png differ diff --git a/imgs/icons/01_03.png b/imgs/icons/01_03.png index e62454a13..4fe0915c5 100644 Binary files a/imgs/icons/01_03.png and b/imgs/icons/01_03.png differ diff --git a/imgs/icons/01_04.png b/imgs/icons/01_04.png index 870445345..fb3fdde34 100644 Binary files a/imgs/icons/01_04.png and b/imgs/icons/01_04.png differ diff --git a/imgs/icons/01_05.png b/imgs/icons/01_05.png index 288aa22d0..5e726b2e0 100644 Binary files a/imgs/icons/01_05.png and b/imgs/icons/01_05.png differ diff --git a/imgs/icons/01_06.png b/imgs/icons/01_06.png index 690e0b6ae..fca8e6adf 100644 Binary files a/imgs/icons/01_06.png and b/imgs/icons/01_06.png differ diff --git a/imgs/icons/01_07.png b/imgs/icons/01_07.png index 54cc85636..cd9795d98 100644 Binary files a/imgs/icons/01_07.png and b/imgs/icons/01_07.png differ diff --git a/imgs/icons/01_09.png b/imgs/icons/01_09.png index d2c14c39a..e04cc55f3 100644 Binary files a/imgs/icons/01_09.png and b/imgs/icons/01_09.png differ diff --git a/imgs/icons/01_10.png b/imgs/icons/01_10.png index e87d72457..29d7a00e9 100644 Binary files a/imgs/icons/01_10.png and b/imgs/icons/01_10.png differ diff --git a/imgs/icons/01_11.png b/imgs/icons/01_11.png index 034c2cc82..0b1c8aae1 100644 Binary files a/imgs/icons/01_11.png and b/imgs/icons/01_11.png differ diff --git a/imgs/icons/01_13.png b/imgs/icons/01_13.png index 6afb6b063..891cb8ade 100644 Binary files a/imgs/icons/01_13.png and b/imgs/icons/01_13.png differ diff --git a/imgs/icons/01_15.png b/imgs/icons/01_15.png index 6e3af2a5e..f4d737360 100644 Binary files a/imgs/icons/01_15.png and b/imgs/icons/01_15.png differ diff --git a/imgs/icons/01_16.png b/imgs/icons/01_16.png index f5743acb8..e87e03d38 100644 Binary files a/imgs/icons/01_16.png and b/imgs/icons/01_16.png differ diff --git a/imgs/icons/02_02.png b/imgs/icons/02_02.png index 0c7633836..8a23bb13a 100644 Binary files a/imgs/icons/02_02.png and b/imgs/icons/02_02.png differ diff --git a/imgs/icons/02_03.png b/imgs/icons/02_03.png index 3df4972c9..04b823614 100644 Binary files a/imgs/icons/02_03.png and b/imgs/icons/02_03.png differ diff --git a/imgs/icons/02_04.png b/imgs/icons/02_04.png index 6a9778d10..ade371d04 100644 Binary files a/imgs/icons/02_04.png and b/imgs/icons/02_04.png differ diff --git a/imgs/icons/02_05.png b/imgs/icons/02_05.png index 240336fb8..30cc42153 100644 Binary files a/imgs/icons/02_05.png and b/imgs/icons/02_05.png differ diff --git a/imgs/icons/02_07.png b/imgs/icons/02_07.png index f938fb217..cf8d2316f 100644 Binary files a/imgs/icons/02_07.png and b/imgs/icons/02_07.png differ diff --git a/imgs/icons/02_09.png b/imgs/icons/02_09.png index 716e7b85b..8c6e9dba7 100644 Binary files a/imgs/icons/02_09.png and b/imgs/icons/02_09.png differ diff --git a/imgs/icons/02_10.png b/imgs/icons/02_10.png index 8d4817f9a..1b94a7e89 100644 Binary files a/imgs/icons/02_10.png and b/imgs/icons/02_10.png differ diff --git a/imgs/icons/02_12.png b/imgs/icons/02_12.png index 841b94f7b..fc3df9d0d 100644 Binary files a/imgs/icons/02_12.png and b/imgs/icons/02_12.png differ diff --git a/imgs/icons/02_14.png b/imgs/icons/02_14.png index 288520496..00c9bddf2 100644 Binary files a/imgs/icons/02_14.png and b/imgs/icons/02_14.png differ diff --git a/imgs/icons/02_16.png b/imgs/icons/02_16.png index cb978d190..38ff0119c 100644 Binary files a/imgs/icons/02_16.png and b/imgs/icons/02_16.png differ diff --git a/imgs/icons/03_01.png b/imgs/icons/03_01.png index ba0ebe4bf..1a77b62f4 100644 Binary files a/imgs/icons/03_01.png and b/imgs/icons/03_01.png differ diff --git a/imgs/icons/03_02.png b/imgs/icons/03_02.png index 0cfc86e92..0710897e5 100644 Binary files a/imgs/icons/03_02.png and b/imgs/icons/03_02.png differ diff --git a/imgs/icons/03_04.png b/imgs/icons/03_04.png index 0b00feca5..66045fdbf 100644 Binary files a/imgs/icons/03_04.png and b/imgs/icons/03_04.png differ diff --git a/imgs/icons/03_05.png b/imgs/icons/03_05.png index 2dbe0907b..5f169f2d8 100644 Binary files a/imgs/icons/03_05.png and b/imgs/icons/03_05.png differ diff --git a/imgs/icons/03_06.png b/imgs/icons/03_06.png index da54c1430..9c2b842ee 100644 Binary files a/imgs/icons/03_06.png and b/imgs/icons/03_06.png differ diff --git a/imgs/icons/03_08.png b/imgs/icons/03_08.png index 055dfbd50..7ed756d27 100644 Binary files a/imgs/icons/03_08.png and b/imgs/icons/03_08.png differ diff --git a/imgs/icons/03_09.png b/imgs/icons/03_09.png index 73ea774f5..676bdb512 100644 Binary files a/imgs/icons/03_09.png and b/imgs/icons/03_09.png differ diff --git a/imgs/icons/03_10.png b/imgs/icons/03_10.png index 411edd596..e011455db 100644 Binary files a/imgs/icons/03_10.png and b/imgs/icons/03_10.png differ diff --git a/imgs/icons/03_11.png b/imgs/icons/03_11.png index 9fa961ac4..98f8bd62f 100644 Binary files a/imgs/icons/03_11.png and b/imgs/icons/03_11.png differ diff --git a/imgs/icons/03_12.png b/imgs/icons/03_12.png index 9bcb64f51..32754d413 100644 Binary files a/imgs/icons/03_12.png and b/imgs/icons/03_12.png differ diff --git a/imgs/icons/03_13.png b/imgs/icons/03_13.png index e224a8d65..a0c394c35 100644 Binary files a/imgs/icons/03_13.png and b/imgs/icons/03_13.png differ diff --git a/imgs/icons/04_01.png b/imgs/icons/04_01.png index 9e7cb5063..b3b08894d 100644 Binary files a/imgs/icons/04_01.png and b/imgs/icons/04_01.png differ diff --git a/imgs/icons/04_09.png b/imgs/icons/04_09.png index 80670e69a..450b7d47b 100644 Binary files a/imgs/icons/04_09.png and b/imgs/icons/04_09.png differ diff --git a/imgs/icons/04_10.png b/imgs/icons/04_10.png index 3b13dd4e7..c1abda51b 100644 Binary files a/imgs/icons/04_10.png and b/imgs/icons/04_10.png differ diff --git a/imgs/icons/04_11.png b/imgs/icons/04_11.png index 6a3a9e354..d30190dd5 100644 Binary files a/imgs/icons/04_11.png and b/imgs/icons/04_11.png differ diff --git a/imgs/icons/04_12.png b/imgs/icons/04_12.png index 8f0e9408b..a127f1d4e 100644 Binary files a/imgs/icons/04_12.png and b/imgs/icons/04_12.png differ diff --git a/imgs/icons/04_13.png b/imgs/icons/04_13.png index 7ede3bdb5..0e4354dee 100644 Binary files a/imgs/icons/04_13.png and b/imgs/icons/04_13.png differ diff --git a/imgs/icons/05_01.png b/imgs/icons/05_01.png index f3770ef64..4fec42e2d 100644 Binary files a/imgs/icons/05_01.png and b/imgs/icons/05_01.png differ diff --git a/imgs/icons/05_02.png b/imgs/icons/05_02.png index 87acea25f..681c83042 100644 Binary files a/imgs/icons/05_02.png and b/imgs/icons/05_02.png differ diff --git a/imgs/icons/05_07.png b/imgs/icons/05_07.png index eb835d9f1..a9f588f47 100644 Binary files a/imgs/icons/05_07.png and b/imgs/icons/05_07.png differ diff --git a/imgs/icons/05_11.png b/imgs/icons/05_11.png index f39b27099..8cdd226a0 100644 Binary files a/imgs/icons/05_11.png and b/imgs/icons/05_11.png differ diff --git a/imgs/icons/05_12.png b/imgs/icons/05_12.png index 767babbb5..6e0ec8b1a 100644 Binary files a/imgs/icons/05_12.png and b/imgs/icons/05_12.png differ diff --git a/imgs/icons/05_14.png b/imgs/icons/05_14.png index 8e87fd1e7..cc60480f8 100644 Binary files a/imgs/icons/05_14.png and b/imgs/icons/05_14.png differ diff --git a/imgs/icons/07_15.png b/imgs/icons/07_15.png index 8cc35766f..3fb2ed934 100644 Binary files a/imgs/icons/07_15.png and b/imgs/icons/07_15.png differ diff --git a/imgs/icons/08_01.png b/imgs/icons/08_01.png index 95771aa98..0c658a338 100644 Binary files a/imgs/icons/08_01.png and b/imgs/icons/08_01.png differ diff --git a/imgs/icons/08_02.png b/imgs/icons/08_02.png index 906341987..3be2655ea 100644 Binary files a/imgs/icons/08_02.png and b/imgs/icons/08_02.png differ diff --git a/imgs/icons/08_03.png b/imgs/icons/08_03.png index f52a90502..4c4aec39b 100644 Binary files a/imgs/icons/08_03.png and b/imgs/icons/08_03.png differ diff --git a/imgs/icons/08_04.png b/imgs/icons/08_04.png index c11a4a9aa..037a12b48 100644 Binary files a/imgs/icons/08_04.png and b/imgs/icons/08_04.png differ diff --git a/imgs/icons/08_05.png b/imgs/icons/08_05.png index 3ce54a83b..72850a7e0 100644 Binary files a/imgs/icons/08_05.png and b/imgs/icons/08_05.png differ diff --git a/imgs/icons/08_06.png b/imgs/icons/08_06.png index e292bae56..68cf5dbda 100644 Binary files a/imgs/icons/08_06.png and b/imgs/icons/08_06.png differ diff --git a/imgs/icons/08_07.png b/imgs/icons/08_07.png index 1d05e9565..8f51f5641 100644 Binary files a/imgs/icons/08_07.png and b/imgs/icons/08_07.png differ diff --git a/imgs/icons/08_08.png b/imgs/icons/08_08.png index 3c278d0de..18ff7c523 100644 Binary files a/imgs/icons/08_08.png and b/imgs/icons/08_08.png differ diff --git a/imgs/icons/08_09.png b/imgs/icons/08_09.png index 69367c15a..bf13579e9 100644 Binary files a/imgs/icons/08_09.png and b/imgs/icons/08_09.png differ diff --git a/imgs/icons/08_10.png b/imgs/icons/08_10.png index f512f25ca..7eaa9244e 100644 Binary files a/imgs/icons/08_10.png and b/imgs/icons/08_10.png differ diff --git a/imgs/icons/08_11.png b/imgs/icons/08_11.png index c1b8fdf67..496418e48 100644 Binary files a/imgs/icons/08_11.png and b/imgs/icons/08_11.png differ diff --git a/imgs/icons/08_12.png b/imgs/icons/08_12.png index a9b26b265..d40b95f7a 100644 Binary files a/imgs/icons/08_12.png and b/imgs/icons/08_12.png differ diff --git a/imgs/icons/08_16.png b/imgs/icons/08_16.png index 612826530..d1627c050 100644 Binary files a/imgs/icons/08_16.png and b/imgs/icons/08_16.png differ diff --git a/imgs/icons/09_05.png b/imgs/icons/09_05.png index 42ecec3e4..69dd94eb8 100644 Binary files a/imgs/icons/09_05.png and b/imgs/icons/09_05.png differ diff --git a/imgs/icons/09_16.png b/imgs/icons/09_16.png index bbb9fe2d8..2f5452268 100644 Binary files a/imgs/icons/09_16.png and b/imgs/icons/09_16.png differ diff --git a/imgs/icons/107_64_4.png b/imgs/icons/107_4.png similarity index 100% rename from imgs/icons/107_64_4.png rename to imgs/icons/107_4.png diff --git a/imgs/icons/108_64_22.png b/imgs/icons/108_22.png similarity index 100% rename from imgs/icons/108_64_22.png rename to imgs/icons/108_22.png diff --git a/imgs/icons/109_64_1.png b/imgs/icons/109_1.png similarity index 100% rename from imgs/icons/109_64_1.png rename to imgs/icons/109_1.png diff --git a/imgs/icons/109_64_2.png b/imgs/icons/109_2.png similarity index 100% rename from imgs/icons/109_64_2.png rename to imgs/icons/109_2.png diff --git a/imgs/icons/10_15.png b/imgs/icons/10_15.png index f8175a48c..7dbd5378c 100644 Binary files a/imgs/icons/10_15.png and b/imgs/icons/10_15.png differ diff --git a/imgs/icons/113_64_1.png b/imgs/icons/113_1.png similarity index 100% rename from imgs/icons/113_64_1.png rename to imgs/icons/113_1.png diff --git a/imgs/icons/113_64_2.png b/imgs/icons/113_2.png similarity index 100% rename from imgs/icons/113_64_2.png rename to imgs/icons/113_2.png diff --git a/imgs/icons/113_64_3.png b/imgs/icons/113_3.png similarity index 100% rename from imgs/icons/113_64_3.png rename to imgs/icons/113_3.png diff --git a/imgs/icons/118_10.png b/imgs/icons/118_10.png new file mode 100644 index 000000000..43c6ff059 Binary files /dev/null and b/imgs/icons/118_10.png differ diff --git a/imgs/icons/118_11.png b/imgs/icons/118_11.png new file mode 100644 index 000000000..d1b9eab82 Binary files /dev/null and b/imgs/icons/118_11.png differ diff --git a/imgs/icons/118_12.png b/imgs/icons/118_12.png new file mode 100644 index 000000000..920b45ac8 Binary files /dev/null and b/imgs/icons/118_12.png differ diff --git a/imgs/icons/118_13.png b/imgs/icons/118_13.png new file mode 100644 index 000000000..62980b93b Binary files /dev/null and b/imgs/icons/118_13.png differ diff --git a/imgs/icons/118_14.png b/imgs/icons/118_14.png new file mode 100644 index 000000000..1637bf447 Binary files /dev/null and b/imgs/icons/118_14.png differ diff --git a/imgs/icons/118_2.png b/imgs/icons/118_2.png new file mode 100644 index 000000000..fab256b3a Binary files /dev/null and b/imgs/icons/118_2.png differ diff --git a/imgs/icons/118_64_7.png b/imgs/icons/118_7.png similarity index 100% rename from imgs/icons/118_64_7.png rename to imgs/icons/118_7.png diff --git a/imgs/icons/118_9.png b/imgs/icons/118_9.png new file mode 100644 index 000000000..a8b3b84c5 Binary files /dev/null and b/imgs/icons/118_9.png differ diff --git a/imgs/icons/11_04.png b/imgs/icons/11_04.png index 706e67ea4..e1941d292 100644 Binary files a/imgs/icons/11_04.png and b/imgs/icons/11_04.png differ diff --git a/imgs/icons/11_05.png b/imgs/icons/11_05.png new file mode 100644 index 000000000..8b01bdf3a Binary files /dev/null and b/imgs/icons/11_05.png differ diff --git a/imgs/icons/11_09.png b/imgs/icons/11_09.png deleted file mode 100644 index 6c75720b9..000000000 Binary files a/imgs/icons/11_09.png and /dev/null differ diff --git a/imgs/icons/11_14.png b/imgs/icons/11_14.png deleted file mode 100644 index 75fe75cbb..000000000 Binary files a/imgs/icons/11_14.png and /dev/null differ diff --git a/imgs/icons/11_16.png b/imgs/icons/11_16.png index 9da4da16b..ab4cfd484 100644 Binary files a/imgs/icons/11_16.png and b/imgs/icons/11_16.png differ diff --git a/imgs/icons/125_1.png b/imgs/icons/125_1.png new file mode 100644 index 000000000..4d4a263e7 Binary files /dev/null and b/imgs/icons/125_1.png differ diff --git a/imgs/icons/126_1.png b/imgs/icons/126_1.png new file mode 100644 index 000000000..0a4c4b489 Binary files /dev/null and b/imgs/icons/126_1.png differ diff --git a/imgs/icons/12_04.png b/imgs/icons/12_04.png index c0df8184c..c9e983e27 100644 Binary files a/imgs/icons/12_04.png and b/imgs/icons/12_04.png differ diff --git a/imgs/icons/12_06.png b/imgs/icons/12_06.png index 1f2b5ee8d..3ff4a3a6b 100644 Binary files a/imgs/icons/12_06.png and b/imgs/icons/12_06.png differ diff --git a/imgs/icons/12_07.png b/imgs/icons/12_07.png index 63029ac7e..ff42a6205 100644 Binary files a/imgs/icons/12_07.png and b/imgs/icons/12_07.png differ diff --git a/imgs/icons/12_08.png b/imgs/icons/12_08.png index 010a1cc80..baf8f620c 100644 Binary files a/imgs/icons/12_08.png and b/imgs/icons/12_08.png differ diff --git a/imgs/icons/12_09.png b/imgs/icons/12_09.png index 50ad95864..f6690c912 100644 Binary files a/imgs/icons/12_09.png and b/imgs/icons/12_09.png differ diff --git a/imgs/icons/12_10.png b/imgs/icons/12_10.png index 76ee386bf..6f262fd22 100644 Binary files a/imgs/icons/12_10.png and b/imgs/icons/12_10.png differ diff --git a/imgs/icons/12_11.png b/imgs/icons/12_11.png index bdafd77b8..a44a89ac9 100644 Binary files a/imgs/icons/12_11.png and b/imgs/icons/12_11.png differ diff --git a/imgs/icons/12_12.png b/imgs/icons/12_12.png index d84b7c331..8c1dcddc8 100644 Binary files a/imgs/icons/12_12.png and b/imgs/icons/12_12.png differ diff --git a/imgs/icons/12_13.png b/imgs/icons/12_13.png index ed4250afd..1f9bc8eb0 100644 Binary files a/imgs/icons/12_13.png and b/imgs/icons/12_13.png differ diff --git a/imgs/icons/12_14.png b/imgs/icons/12_14.png index 5a5a3765b..fd1892ff3 100644 Binary files a/imgs/icons/12_14.png and b/imgs/icons/12_14.png differ diff --git a/imgs/icons/12_15.png b/imgs/icons/12_15.png index cbb20242b..be11dd10b 100644 Binary files a/imgs/icons/12_15.png and b/imgs/icons/12_15.png differ diff --git a/imgs/icons/12_16.png b/imgs/icons/12_16.png index b9fe79ded..cc7cfbc29 100644 Binary files a/imgs/icons/12_16.png and b/imgs/icons/12_16.png differ diff --git a/imgs/icons/13_01.png b/imgs/icons/13_01.png index 891eaeef8..637e61d5d 100644 Binary files a/imgs/icons/13_01.png and b/imgs/icons/13_01.png differ diff --git a/imgs/icons/13_02.png b/imgs/icons/13_02.png index ece9b70d6..705285b69 100644 Binary files a/imgs/icons/13_02.png and b/imgs/icons/13_02.png differ diff --git a/imgs/icons/13_03.png b/imgs/icons/13_03.png index 4d1696a2d..0981ac049 100644 Binary files a/imgs/icons/13_03.png and b/imgs/icons/13_03.png differ diff --git a/imgs/icons/13_04.png b/imgs/icons/13_04.png index 6ce3329c0..c2236a20b 100644 Binary files a/imgs/icons/13_04.png and b/imgs/icons/13_04.png differ diff --git a/imgs/icons/13_05.png b/imgs/icons/13_05.png index ff6d3d345..74638ffff 100644 Binary files a/imgs/icons/13_05.png and b/imgs/icons/13_05.png differ diff --git a/imgs/icons/13_06.png b/imgs/icons/13_06.png index 4685a0c46..fcf429c03 100644 Binary files a/imgs/icons/13_06.png and b/imgs/icons/13_06.png differ diff --git a/imgs/icons/13_07.png b/imgs/icons/13_07.png index f6d7bd795..2fad5a6a5 100644 Binary files a/imgs/icons/13_07.png and b/imgs/icons/13_07.png differ diff --git a/imgs/icons/13_08.png b/imgs/icons/13_08.png index 4f1ae0a95..d76160311 100644 Binary files a/imgs/icons/13_08.png and b/imgs/icons/13_08.png differ diff --git a/imgs/icons/13_09.png b/imgs/icons/13_09.png index 8009d02ed..30cff32ef 100644 Binary files a/imgs/icons/13_09.png and b/imgs/icons/13_09.png differ diff --git a/imgs/icons/13_10.png b/imgs/icons/13_10.png index d9558a229..f59d9e172 100644 Binary files a/imgs/icons/13_10.png and b/imgs/icons/13_10.png differ diff --git a/imgs/icons/13_11.png b/imgs/icons/13_11.png index 65e2c404d..eb7704a87 100644 Binary files a/imgs/icons/13_11.png and b/imgs/icons/13_11.png differ diff --git a/imgs/icons/13_12.png b/imgs/icons/13_12.png index b7a4833f3..f8bb99c11 100644 Binary files a/imgs/icons/13_12.png and b/imgs/icons/13_12.png differ diff --git a/imgs/icons/13_13.png b/imgs/icons/13_13.png index c81e63ead..48ab6dda6 100644 Binary files a/imgs/icons/13_13.png and b/imgs/icons/13_13.png differ diff --git a/imgs/icons/13_14.png b/imgs/icons/13_14.png index c9d342bae..8b6814978 100644 Binary files a/imgs/icons/13_14.png and b/imgs/icons/13_14.png differ diff --git a/imgs/icons/13_15.png b/imgs/icons/13_15.png index 764660bb4..22b3a7f91 100644 Binary files a/imgs/icons/13_15.png and b/imgs/icons/13_15.png differ diff --git a/imgs/icons/13_16.png b/imgs/icons/13_16.png index b21adbaea..ca02e16fb 100644 Binary files a/imgs/icons/13_16.png and b/imgs/icons/13_16.png differ diff --git a/imgs/icons/14_01.png b/imgs/icons/14_01.png index 359f8e37f..d9f3b4a1d 100644 Binary files a/imgs/icons/14_01.png and b/imgs/icons/14_01.png differ diff --git a/imgs/icons/14_02.png b/imgs/icons/14_02.png index d1e622452..ba0604fb0 100644 Binary files a/imgs/icons/14_02.png and b/imgs/icons/14_02.png differ diff --git a/imgs/icons/14_03.png b/imgs/icons/14_03.png index 0ad273970..33857cec7 100644 Binary files a/imgs/icons/14_03.png and b/imgs/icons/14_03.png differ diff --git a/imgs/icons/14_04.png b/imgs/icons/14_04.png index 57b814a9b..9a3b11b24 100644 Binary files a/imgs/icons/14_04.png and b/imgs/icons/14_04.png differ diff --git a/imgs/icons/14_05.png b/imgs/icons/14_05.png index 1f7fada49..06695d3a1 100644 Binary files a/imgs/icons/14_05.png and b/imgs/icons/14_05.png differ diff --git a/imgs/icons/14_06.png b/imgs/icons/14_06.png index ce9b4f4f4..c668482a0 100644 Binary files a/imgs/icons/14_06.png and b/imgs/icons/14_06.png differ diff --git a/imgs/icons/14_07.png b/imgs/icons/14_07.png index bc3a0b5d0..70efd09b7 100644 Binary files a/imgs/icons/14_07.png and b/imgs/icons/14_07.png differ diff --git a/imgs/icons/14_08.png b/imgs/icons/14_08.png index 33d8e86a3..f2ad1c32d 100644 Binary files a/imgs/icons/14_08.png and b/imgs/icons/14_08.png differ diff --git a/imgs/icons/14_09.png b/imgs/icons/14_09.png index e2ec73c6e..cff3e612e 100644 Binary files a/imgs/icons/14_09.png and b/imgs/icons/14_09.png differ diff --git a/imgs/icons/14_10.png b/imgs/icons/14_10.png index 492189081..7f0a3ae6c 100644 Binary files a/imgs/icons/14_10.png and b/imgs/icons/14_10.png differ diff --git a/imgs/icons/14_11.png b/imgs/icons/14_11.png index d54fb795e..df8a0e941 100644 Binary files a/imgs/icons/14_11.png and b/imgs/icons/14_11.png differ diff --git a/imgs/icons/14_12.png b/imgs/icons/14_12.png index 6a4c61752..2fbb77cbc 100644 Binary files a/imgs/icons/14_12.png and b/imgs/icons/14_12.png differ diff --git a/imgs/icons/14_13.png b/imgs/icons/14_13.png index 3c3d13ec1..dbddc16c4 100644 Binary files a/imgs/icons/14_13.png and b/imgs/icons/14_13.png differ diff --git a/imgs/icons/14_14.png b/imgs/icons/14_14.png index 4eb1fcecc..f58946b27 100644 Binary files a/imgs/icons/14_14.png and b/imgs/icons/14_14.png differ diff --git a/imgs/icons/14_15.png b/imgs/icons/14_15.png index b48fb5d14..e550a788e 100644 Binary files a/imgs/icons/14_15.png and b/imgs/icons/14_15.png differ diff --git a/imgs/icons/14_16.png b/imgs/icons/14_16.png index 3699371a0..9537a0469 100644 Binary files a/imgs/icons/14_16.png and b/imgs/icons/14_16.png differ diff --git a/imgs/icons/15_01.png b/imgs/icons/15_01.png index 58d528b6b..6d9f8a0df 100644 Binary files a/imgs/icons/15_01.png and b/imgs/icons/15_01.png differ diff --git a/imgs/icons/15_02.png b/imgs/icons/15_02.png index c9d470e27..2b0a1a8dc 100644 Binary files a/imgs/icons/15_02.png and b/imgs/icons/15_02.png differ diff --git a/imgs/icons/15_03.png b/imgs/icons/15_03.png index c8e96e617..03f6f5dfc 100644 Binary files a/imgs/icons/15_03.png and b/imgs/icons/15_03.png differ diff --git a/imgs/icons/15_04.png b/imgs/icons/15_04.png index ebfeed68d..9ac4059b3 100644 Binary files a/imgs/icons/15_04.png and b/imgs/icons/15_04.png differ diff --git a/imgs/icons/15_05.png b/imgs/icons/15_05.png index e5fad83db..aa81ce6db 100644 Binary files a/imgs/icons/15_05.png and b/imgs/icons/15_05.png differ diff --git a/imgs/icons/15_06.png b/imgs/icons/15_06.png index 80b24a916..61b2de68d 100644 Binary files a/imgs/icons/15_06.png and b/imgs/icons/15_06.png differ diff --git a/imgs/icons/15_07.png b/imgs/icons/15_07.png index 6e129dd44..f2022f779 100644 Binary files a/imgs/icons/15_07.png and b/imgs/icons/15_07.png differ diff --git a/imgs/icons/15_08.png b/imgs/icons/15_08.png index 55bf0d371..36eb0a89c 100644 Binary files a/imgs/icons/15_08.png and b/imgs/icons/15_08.png differ diff --git a/imgs/icons/15_09.png b/imgs/icons/15_09.png index 7d91c96c4..9ae32d4f4 100644 Binary files a/imgs/icons/15_09.png and b/imgs/icons/15_09.png differ diff --git a/imgs/icons/15_10.png b/imgs/icons/15_10.png index bceba86fa..74dc5dfd7 100644 Binary files a/imgs/icons/15_10.png and b/imgs/icons/15_10.png differ diff --git a/imgs/icons/15_11.png b/imgs/icons/15_11.png index cb5c2e33e..2ccab0664 100644 Binary files a/imgs/icons/15_11.png and b/imgs/icons/15_11.png differ diff --git a/imgs/icons/15_12.png b/imgs/icons/15_12.png index e9df7febe..82273ed2f 100644 Binary files a/imgs/icons/15_12.png and b/imgs/icons/15_12.png differ diff --git a/imgs/icons/15_13.png b/imgs/icons/15_13.png index e84a29844..9db97512f 100644 Binary files a/imgs/icons/15_13.png and b/imgs/icons/15_13.png differ diff --git a/imgs/icons/15_14.png b/imgs/icons/15_14.png index 2b332ace1..4de852066 100644 Binary files a/imgs/icons/15_14.png and b/imgs/icons/15_14.png differ diff --git a/imgs/icons/15_15.png b/imgs/icons/15_15.png index 0cbaed39d..dbd762869 100644 Binary files a/imgs/icons/15_15.png and b/imgs/icons/15_15.png differ diff --git a/imgs/icons/15_16.png b/imgs/icons/15_16.png index d70289469..72128e54f 100644 Binary files a/imgs/icons/15_16.png and b/imgs/icons/15_16.png differ diff --git a/imgs/icons/16_01.png b/imgs/icons/16_01.png index 69558d0df..2243a9065 100644 Binary files a/imgs/icons/16_01.png and b/imgs/icons/16_01.png differ diff --git a/imgs/icons/16_02.png b/imgs/icons/16_02.png index 68d69e207..944135165 100644 Binary files a/imgs/icons/16_02.png and b/imgs/icons/16_02.png differ diff --git a/imgs/icons/16_03.png b/imgs/icons/16_03.png index 09e961a72..69a79945d 100644 Binary files a/imgs/icons/16_03.png and b/imgs/icons/16_03.png differ diff --git a/imgs/icons/16_04.png b/imgs/icons/16_04.png index 2297b4cb1..4687d215f 100644 Binary files a/imgs/icons/16_04.png and b/imgs/icons/16_04.png differ diff --git a/imgs/icons/16_05.png b/imgs/icons/16_05.png index 281925f93..5556ca7db 100644 Binary files a/imgs/icons/16_05.png and b/imgs/icons/16_05.png differ diff --git a/imgs/icons/16_06.png b/imgs/icons/16_06.png index c9d34e704..7e34f47f5 100644 Binary files a/imgs/icons/16_06.png and b/imgs/icons/16_06.png differ diff --git a/imgs/icons/16_07.png b/imgs/icons/16_07.png index af2ba766b..087da1fd3 100644 Binary files a/imgs/icons/16_07.png and b/imgs/icons/16_07.png differ diff --git a/imgs/icons/16_08.png b/imgs/icons/16_08.png index 61040e090..7294b222f 100644 Binary files a/imgs/icons/16_08.png and b/imgs/icons/16_08.png differ diff --git a/imgs/icons/16_09.png b/imgs/icons/16_09.png index 9e38bf21b..a65aa5038 100644 Binary files a/imgs/icons/16_09.png and b/imgs/icons/16_09.png differ diff --git a/imgs/icons/16_10.png b/imgs/icons/16_10.png index 585279bc1..d755d6a34 100644 Binary files a/imgs/icons/16_10.png and b/imgs/icons/16_10.png differ diff --git a/imgs/icons/16_11.png b/imgs/icons/16_11.png index ee6f77dc3..da00ad6bd 100644 Binary files a/imgs/icons/16_11.png and b/imgs/icons/16_11.png differ diff --git a/imgs/icons/16_12.png b/imgs/icons/16_12.png index ca93a994f..c224716ab 100644 Binary files a/imgs/icons/16_12.png and b/imgs/icons/16_12.png differ diff --git a/imgs/icons/16_13.png b/imgs/icons/16_13.png index 6390a9631..10d80dc0b 100644 Binary files a/imgs/icons/16_13.png and b/imgs/icons/16_13.png differ diff --git a/imgs/icons/16_14.png b/imgs/icons/16_14.png index 9b46e2189..a08739292 100644 Binary files a/imgs/icons/16_14.png and b/imgs/icons/16_14.png differ diff --git a/imgs/icons/16_15.png b/imgs/icons/16_15.png index 527a2330b..fda1d2108 100644 Binary files a/imgs/icons/16_15.png and b/imgs/icons/16_15.png differ diff --git a/imgs/icons/16_16.png b/imgs/icons/16_16.png index 919fa075f..bdb50fbaf 100644 Binary files a/imgs/icons/16_16.png and b/imgs/icons/16_16.png differ diff --git a/imgs/icons/20_01.png b/imgs/icons/20_01.png index 515a1c7a9..5c716771a 100644 Binary files a/imgs/icons/20_01.png and b/imgs/icons/20_01.png differ diff --git a/imgs/icons/20_02.png b/imgs/icons/20_02.png index 4c0779195..b30939dea 100644 Binary files a/imgs/icons/20_02.png and b/imgs/icons/20_02.png differ diff --git a/imgs/icons/20_03.png b/imgs/icons/20_03.png index 86e889735..04593a424 100644 Binary files a/imgs/icons/20_03.png and b/imgs/icons/20_03.png differ diff --git a/imgs/icons/20_04.png b/imgs/icons/20_04.png index 6075dc439..7187fc0d2 100644 Binary files a/imgs/icons/20_04.png and b/imgs/icons/20_04.png differ diff --git a/imgs/icons/20_05.png b/imgs/icons/20_05.png index fd8953c84..23eb86d0f 100644 Binary files a/imgs/icons/20_05.png and b/imgs/icons/20_05.png differ diff --git a/imgs/icons/20_06.png b/imgs/icons/20_06.png index ebeebcc50..83e0b8034 100644 Binary files a/imgs/icons/20_06.png and b/imgs/icons/20_06.png differ diff --git a/imgs/icons/20_07.png b/imgs/icons/20_07.png index 498bec6dd..8b0acdade 100644 Binary files a/imgs/icons/20_07.png and b/imgs/icons/20_07.png differ diff --git a/imgs/icons/20_08.png b/imgs/icons/20_08.png index ed77340b7..231035a63 100644 Binary files a/imgs/icons/20_08.png and b/imgs/icons/20_08.png differ diff --git a/imgs/icons/20_09.png b/imgs/icons/20_09.png index 959ca0464..ee3dad52b 100644 Binary files a/imgs/icons/20_09.png and b/imgs/icons/20_09.png differ diff --git a/imgs/icons/20_10.png b/imgs/icons/20_10.png index fbaea3277..6d0670e65 100644 Binary files a/imgs/icons/20_10.png and b/imgs/icons/20_10.png differ diff --git a/imgs/icons/20_11.png b/imgs/icons/20_11.png index de865c14f..84a9653be 100644 Binary files a/imgs/icons/20_11.png and b/imgs/icons/20_11.png differ diff --git a/imgs/icons/20_12.png b/imgs/icons/20_12.png index e421993a8..295c4c10a 100644 Binary files a/imgs/icons/20_12.png and b/imgs/icons/20_12.png differ diff --git a/imgs/icons/20_13.png b/imgs/icons/20_13.png index 162d9d3b9..ed20d1cec 100644 Binary files a/imgs/icons/20_13.png and b/imgs/icons/20_13.png differ diff --git a/imgs/icons/20_14.png b/imgs/icons/20_14.png index 11e811782..df9b1e890 100644 Binary files a/imgs/icons/20_14.png and b/imgs/icons/20_14.png differ diff --git a/imgs/icons/20_15.png b/imgs/icons/20_15.png index a63b85bc3..b5ee9c96f 100644 Binary files a/imgs/icons/20_15.png and b/imgs/icons/20_15.png differ diff --git a/imgs/icons/20_16.png b/imgs/icons/20_16.png index 29b522e7c..5274bdc9b 100644 Binary files a/imgs/icons/20_16.png and b/imgs/icons/20_16.png differ diff --git a/imgs/icons/21_01.png b/imgs/icons/21_01.png index 9ba78db57..46a5a4ae0 100644 Binary files a/imgs/icons/21_01.png and b/imgs/icons/21_01.png differ diff --git a/imgs/icons/21_02.png b/imgs/icons/21_02.png index cbcc746b0..ed1d65f9f 100644 Binary files a/imgs/icons/21_02.png and b/imgs/icons/21_02.png differ diff --git a/imgs/icons/21_03.png b/imgs/icons/21_03.png index 5fdc345da..15dc75381 100644 Binary files a/imgs/icons/21_03.png and b/imgs/icons/21_03.png differ diff --git a/imgs/icons/21_05.png b/imgs/icons/21_05.png index 9a794f584..d93fabca0 100644 Binary files a/imgs/icons/21_05.png and b/imgs/icons/21_05.png differ diff --git a/imgs/icons/21_06.png b/imgs/icons/21_06.png index ae8a60696..95eb3199d 100644 Binary files a/imgs/icons/21_06.png and b/imgs/icons/21_06.png differ diff --git a/imgs/icons/21_07.png b/imgs/icons/21_07.png index d206009cb..d725ce99e 100644 Binary files a/imgs/icons/21_07.png and b/imgs/icons/21_07.png differ diff --git a/imgs/icons/21_08.png b/imgs/icons/21_08.png deleted file mode 100644 index 3b8e37970..000000000 Binary files a/imgs/icons/21_08.png and /dev/null differ diff --git a/imgs/icons/21_09.png b/imgs/icons/21_09.png index 32840e056..0d1a42015 100644 Binary files a/imgs/icons/21_09.png and b/imgs/icons/21_09.png differ diff --git a/imgs/icons/21_10.png b/imgs/icons/21_10.png index 72af02062..7ba85bc69 100644 Binary files a/imgs/icons/21_10.png and b/imgs/icons/21_10.png differ diff --git a/imgs/icons/21_11.png b/imgs/icons/21_11.png index 86f2fec39..2cc93e5d4 100644 Binary files a/imgs/icons/21_11.png and b/imgs/icons/21_11.png differ diff --git a/imgs/icons/21_12.png b/imgs/icons/21_12.png index b38113da6..7006513dd 100644 Binary files a/imgs/icons/21_12.png and b/imgs/icons/21_12.png differ diff --git a/imgs/icons/21_13.png b/imgs/icons/21_13.png index 17c0526d0..9e91f0417 100644 Binary files a/imgs/icons/21_13.png and b/imgs/icons/21_13.png differ diff --git a/imgs/icons/21_14.png b/imgs/icons/21_14.png index 472d69bac..80797a1f9 100644 Binary files a/imgs/icons/21_14.png and b/imgs/icons/21_14.png differ diff --git a/imgs/icons/21_15.png b/imgs/icons/21_15.png index 6608344d0..d7ada1bcc 100644 Binary files a/imgs/icons/21_15.png and b/imgs/icons/21_15.png differ diff --git a/imgs/icons/21_16.png b/imgs/icons/21_16.png index bee819645..9c2bb5b62 100644 Binary files a/imgs/icons/21_16.png and b/imgs/icons/21_16.png differ diff --git a/imgs/icons/22_01.png b/imgs/icons/22_01.png index dfbbfa72c..ef009dbdd 100644 Binary files a/imgs/icons/22_01.png and b/imgs/icons/22_01.png differ diff --git a/imgs/icons/22_02.png b/imgs/icons/22_02.png index b84596f68..6a9d44e5d 100644 Binary files a/imgs/icons/22_02.png and b/imgs/icons/22_02.png differ diff --git a/imgs/icons/22_03.png b/imgs/icons/22_03.png index ec090c11f..a9a21d47b 100644 Binary files a/imgs/icons/22_03.png and b/imgs/icons/22_03.png differ diff --git a/imgs/icons/22_04.png b/imgs/icons/22_04.png index 981f2f8a1..2c23d35b1 100644 Binary files a/imgs/icons/22_04.png and b/imgs/icons/22_04.png differ diff --git a/imgs/icons/22_05.png b/imgs/icons/22_05.png index 0b3d935ec..95b171173 100644 Binary files a/imgs/icons/22_05.png and b/imgs/icons/22_05.png differ diff --git a/imgs/icons/22_06.png b/imgs/icons/22_06.png index de208f040..ea8431c1d 100644 Binary files a/imgs/icons/22_06.png and b/imgs/icons/22_06.png differ diff --git a/imgs/icons/22_07.png b/imgs/icons/22_07.png index 0f5e74391..33d423310 100644 Binary files a/imgs/icons/22_07.png and b/imgs/icons/22_07.png differ diff --git a/imgs/icons/22_08.png b/imgs/icons/22_08.png deleted file mode 100644 index 0e1ef965a..000000000 Binary files a/imgs/icons/22_08.png and /dev/null differ diff --git a/imgs/icons/22_09.png b/imgs/icons/22_09.png index ac912c91a..46249feb3 100644 Binary files a/imgs/icons/22_09.png and b/imgs/icons/22_09.png differ diff --git a/imgs/icons/22_10.png b/imgs/icons/22_10.png index 2739d7779..a04a38ad9 100644 Binary files a/imgs/icons/22_10.png and b/imgs/icons/22_10.png differ diff --git a/imgs/icons/22_11.png b/imgs/icons/22_11.png index db13afd6d..3723cabb6 100644 Binary files a/imgs/icons/22_11.png and b/imgs/icons/22_11.png differ diff --git a/imgs/icons/22_12.png b/imgs/icons/22_12.png index 2e80d82ce..f2872d162 100644 Binary files a/imgs/icons/22_12.png and b/imgs/icons/22_12.png differ diff --git a/imgs/icons/22_13.png b/imgs/icons/22_13.png index ff56d8a06..8b0f2abef 100644 Binary files a/imgs/icons/22_13.png and b/imgs/icons/22_13.png differ diff --git a/imgs/icons/22_14.png b/imgs/icons/22_14.png index 64b14cac2..723419683 100644 Binary files a/imgs/icons/22_14.png and b/imgs/icons/22_14.png differ diff --git a/imgs/icons/22_15.png b/imgs/icons/22_15.png index ab9f7863a..85be4ddfa 100644 Binary files a/imgs/icons/22_15.png and b/imgs/icons/22_15.png differ diff --git a/imgs/icons/22_16.png b/imgs/icons/22_16.png index 66a57e26a..127ab999f 100644 Binary files a/imgs/icons/22_16.png and b/imgs/icons/22_16.png differ diff --git a/imgs/icons/22_17.png b/imgs/icons/22_17.png index 5f8d04f5b..fb161b9b4 100644 Binary files a/imgs/icons/22_17.png and b/imgs/icons/22_17.png differ diff --git a/imgs/icons/22_18.png b/imgs/icons/22_18.png index 3b2076994..807af6fe3 100644 Binary files a/imgs/icons/22_18.png and b/imgs/icons/22_18.png differ diff --git a/imgs/icons/22_19.png b/imgs/icons/22_19.png index 515f96b0e..5527e13af 100644 Binary files a/imgs/icons/22_19.png and b/imgs/icons/22_19.png differ diff --git a/imgs/icons/22_20.png b/imgs/icons/22_20.png index 48afc2774..6fd0aa4db 100644 Binary files a/imgs/icons/22_20.png and b/imgs/icons/22_20.png differ diff --git a/imgs/icons/22_21.png b/imgs/icons/22_21.png index 2c2328f09..aa9ec3e69 100644 Binary files a/imgs/icons/22_21.png and b/imgs/icons/22_21.png differ diff --git a/imgs/icons/22_22.png b/imgs/icons/22_22.png index 35a47ea13..4b9606e91 100644 Binary files a/imgs/icons/22_22.png and b/imgs/icons/22_22.png differ diff --git a/imgs/icons/22_23.png b/imgs/icons/22_23.png index 36d1d4a8d..e13571e05 100644 Binary files a/imgs/icons/22_23.png and b/imgs/icons/22_23.png differ diff --git a/imgs/icons/22_24.png b/imgs/icons/22_24.png index e5604f088..bc19ac7f9 100644 Binary files a/imgs/icons/22_24.png and b/imgs/icons/22_24.png differ diff --git a/imgs/icons/22_25.png b/imgs/icons/22_25.png index 61f166d4a..e6f7a22c9 100644 Binary files a/imgs/icons/22_25.png and b/imgs/icons/22_25.png differ diff --git a/imgs/icons/22_26.png b/imgs/icons/22_26.png index 75a5baf2b..ebcd00a08 100644 Binary files a/imgs/icons/22_26.png and b/imgs/icons/22_26.png differ diff --git a/imgs/icons/22_27.png b/imgs/icons/22_27.png index d2fafe9f5..f853ef5d6 100644 Binary files a/imgs/icons/22_27.png and b/imgs/icons/22_27.png differ diff --git a/imgs/icons/22_28.png b/imgs/icons/22_28.png index 29d0bd220..28fa8f7d1 100644 Binary files a/imgs/icons/22_28.png and b/imgs/icons/22_28.png differ diff --git a/imgs/icons/25_04.png b/imgs/icons/25_04.png index b2ab58773..3b3885d0b 100644 Binary files a/imgs/icons/25_04.png and b/imgs/icons/25_04.png differ diff --git a/imgs/icons/26_01.png b/imgs/icons/26_01.png index b42cff607..76a54433e 100644 Binary files a/imgs/icons/26_01.png and b/imgs/icons/26_01.png differ diff --git a/imgs/icons/26_11.png b/imgs/icons/26_11.png index da3fd5663..c8c1f0afc 100644 Binary files a/imgs/icons/26_11.png and b/imgs/icons/26_11.png differ diff --git a/imgs/icons/26_12.png b/imgs/icons/26_12.png index c6c614ccf..001b7edd8 100644 Binary files a/imgs/icons/26_12.png and b/imgs/icons/26_12.png differ diff --git a/imgs/icons/26_13.png b/imgs/icons/26_13.png index a645d2fd8..06ee6dbd9 100644 Binary files a/imgs/icons/26_13.png and b/imgs/icons/26_13.png differ diff --git a/imgs/icons/26_14.png b/imgs/icons/26_14.png deleted file mode 100644 index 7701b1d7c..000000000 Binary files a/imgs/icons/26_14.png and /dev/null differ diff --git a/imgs/icons/26_15.png b/imgs/icons/26_15.png index a932f95b0..87d17bdc1 100644 Binary files a/imgs/icons/26_15.png and b/imgs/icons/26_15.png differ diff --git a/imgs/icons/26_16.png b/imgs/icons/26_16.png index 85c5dcb25..f8598ff7c 100644 Binary files a/imgs/icons/26_16.png and b/imgs/icons/26_16.png differ diff --git a/imgs/icons/27_01.png b/imgs/icons/27_01.png deleted file mode 100644 index 700846655..000000000 Binary files a/imgs/icons/27_01.png and /dev/null differ diff --git a/imgs/icons/27_04.png b/imgs/icons/27_04.png deleted file mode 100644 index bea7e6734..000000000 Binary files a/imgs/icons/27_04.png and /dev/null differ diff --git a/imgs/icons/27_05.png b/imgs/icons/27_05.png index aaa52f31e..68f1ca2d4 100644 Binary files a/imgs/icons/27_05.png and b/imgs/icons/27_05.png differ diff --git a/imgs/icons/27_09.png b/imgs/icons/27_09.png index 63c95f61d..12a55cb53 100644 Binary files a/imgs/icons/27_09.png and b/imgs/icons/27_09.png differ diff --git a/imgs/icons/31_10.png b/imgs/icons/31_10.png deleted file mode 100644 index 282be8a9a..000000000 Binary files a/imgs/icons/31_10.png and /dev/null differ diff --git a/imgs/icons/31_11.png b/imgs/icons/31_11.png deleted file mode 100644 index 3f2c9b399..000000000 Binary files a/imgs/icons/31_11.png and /dev/null differ diff --git a/imgs/icons/31_12.png b/imgs/icons/31_12.png deleted file mode 100644 index ba0fd75e8..000000000 Binary files a/imgs/icons/31_12.png and /dev/null differ diff --git a/imgs/icons/31_14.png b/imgs/icons/31_14.png index 3c36f1244..57238dcbe 100644 Binary files a/imgs/icons/31_14.png and b/imgs/icons/31_14.png differ diff --git a/imgs/icons/31_15.png b/imgs/icons/31_15.png index 907d00630..80549fac3 100644 Binary files a/imgs/icons/31_15.png and b/imgs/icons/31_15.png differ diff --git a/imgs/icons/31_16.png b/imgs/icons/31_16.png index 3e914b732..97f25f619 100644 Binary files a/imgs/icons/31_16.png and b/imgs/icons/31_16.png differ diff --git a/imgs/icons/34_01.png b/imgs/icons/34_01.png index bb7dc4459..513dd3f2e 100644 Binary files a/imgs/icons/34_01.png and b/imgs/icons/34_01.png differ diff --git a/imgs/icons/34_02.png b/imgs/icons/34_02.png index c92a18713..a5dbb061f 100644 Binary files a/imgs/icons/34_02.png and b/imgs/icons/34_02.png differ diff --git a/imgs/icons/34_12.png b/imgs/icons/34_12.png index 49cc0ce0d..29cfb7212 100644 Binary files a/imgs/icons/34_12.png and b/imgs/icons/34_12.png differ diff --git a/imgs/icons/34_15.png b/imgs/icons/34_15.png index 12fb8c616..855292c30 100644 Binary files a/imgs/icons/34_15.png and b/imgs/icons/34_15.png differ diff --git a/imgs/icons/35_01.png b/imgs/icons/35_01.png index 095ec349c..d734b0a8b 100644 Binary files a/imgs/icons/35_01.png and b/imgs/icons/35_01.png differ diff --git a/imgs/icons/35_03.png b/imgs/icons/35_03.png index 7bf7f4a0e..072eed58c 100644 Binary files a/imgs/icons/35_03.png and b/imgs/icons/35_03.png differ diff --git a/imgs/icons/35_07.png b/imgs/icons/35_07.png deleted file mode 100644 index 8ec572bfb..000000000 Binary files a/imgs/icons/35_07.png and /dev/null differ diff --git a/imgs/icons/35_08.png b/imgs/icons/35_08.png deleted file mode 100644 index 6e9dfa35e..000000000 Binary files a/imgs/icons/35_08.png and /dev/null differ diff --git a/imgs/icons/35_09.png b/imgs/icons/35_09.png index a0a4138ab..b74e9384d 100644 Binary files a/imgs/icons/35_09.png and b/imgs/icons/35_09.png differ diff --git a/imgs/icons/35_12.png b/imgs/icons/35_12.png index 91186cc77..3df287f44 100644 Binary files a/imgs/icons/35_12.png and b/imgs/icons/35_12.png differ diff --git a/imgs/icons/35_14.png b/imgs/icons/35_14.png index 371c60e10..500847420 100644 Binary files a/imgs/icons/35_14.png and b/imgs/icons/35_14.png differ diff --git a/imgs/icons/35_15.png b/imgs/icons/35_15.png index d14dd70db..da171e388 100644 Binary files a/imgs/icons/35_15.png and b/imgs/icons/35_15.png differ diff --git a/imgs/icons/36_13.png b/imgs/icons/36_13.png deleted file mode 100644 index 520f5e957..000000000 Binary files a/imgs/icons/36_13.png and /dev/null differ diff --git a/imgs/icons/37_12.png b/imgs/icons/37_12.png deleted file mode 100644 index 5653703d5..000000000 Binary files a/imgs/icons/37_12.png and /dev/null differ diff --git a/imgs/icons/40_14.png b/imgs/icons/40_14.png index 47b82c615..e05999537 100644 Binary files a/imgs/icons/40_14.png and b/imgs/icons/40_14.png differ diff --git a/imgs/icons/40_16.png b/imgs/icons/40_16.png index 04aa256ed..58b63b045 100644 Binary files a/imgs/icons/40_16.png and b/imgs/icons/40_16.png differ diff --git a/imgs/icons/45_11.png b/imgs/icons/45_11.png index 9a5970661..12e9a3f72 100644 Binary files a/imgs/icons/45_11.png and b/imgs/icons/45_11.png differ diff --git a/imgs/icons/45_12.png b/imgs/icons/45_12.png deleted file mode 100644 index da68eb2d1..000000000 Binary files a/imgs/icons/45_12.png and /dev/null differ diff --git a/imgs/icons/48_01.png b/imgs/icons/48_01.png index 3ea641d3c..16617d7ac 100644 Binary files a/imgs/icons/48_01.png and b/imgs/icons/48_01.png differ diff --git a/imgs/icons/48_02.png b/imgs/icons/48_02.png index 79cebde2b..75cb7abd3 100644 Binary files a/imgs/icons/48_02.png and b/imgs/icons/48_02.png differ diff --git a/imgs/icons/48_03.png b/imgs/icons/48_03.png index 256c68dd5..5a93a7af5 100644 Binary files a/imgs/icons/48_03.png and b/imgs/icons/48_03.png differ diff --git a/imgs/icons/48_04.png b/imgs/icons/48_04.png index 079426359..fbfd282a9 100644 Binary files a/imgs/icons/48_04.png and b/imgs/icons/48_04.png differ diff --git a/imgs/icons/48_05.png b/imgs/icons/48_05.png index 50a548011..733fa656c 100644 Binary files a/imgs/icons/48_05.png and b/imgs/icons/48_05.png differ diff --git a/imgs/icons/48_06.png b/imgs/icons/48_06.png index 07e7e4346..aa9481872 100644 Binary files a/imgs/icons/48_06.png and b/imgs/icons/48_06.png differ diff --git a/imgs/icons/48_07.png b/imgs/icons/48_07.png index 01972724c..dd95232b3 100644 Binary files a/imgs/icons/48_07.png and b/imgs/icons/48_07.png differ diff --git a/imgs/icons/48_08.png b/imgs/icons/48_08.png index 8ea06961b..317d147a6 100644 Binary files a/imgs/icons/48_08.png and b/imgs/icons/48_08.png differ diff --git a/imgs/icons/48_09.png b/imgs/icons/48_09.png index bb392da68..59c29b0cd 100644 Binary files a/imgs/icons/48_09.png and b/imgs/icons/48_09.png differ diff --git a/imgs/icons/48_10.png b/imgs/icons/48_10.png index 1ea49dfe3..c1baf2e89 100644 Binary files a/imgs/icons/48_10.png and b/imgs/icons/48_10.png differ diff --git a/imgs/icons/48_11.png b/imgs/icons/48_11.png index 630ceec6b..f835381d6 100644 Binary files a/imgs/icons/48_11.png and b/imgs/icons/48_11.png differ diff --git a/imgs/icons/48_12.png b/imgs/icons/48_12.png index dc9f55560..996e80f16 100644 Binary files a/imgs/icons/48_12.png and b/imgs/icons/48_12.png differ diff --git a/imgs/icons/48_13.png b/imgs/icons/48_13.png index 8c0c9211f..54a93e43a 100644 Binary files a/imgs/icons/48_13.png and b/imgs/icons/48_13.png differ diff --git a/imgs/icons/48_14.png b/imgs/icons/48_14.png index f3df5af22..49a8255e2 100644 Binary files a/imgs/icons/48_14.png and b/imgs/icons/48_14.png differ diff --git a/imgs/icons/48_15.png b/imgs/icons/48_15.png index ed40b8b57..a70664d01 100644 Binary files a/imgs/icons/48_15.png and b/imgs/icons/48_15.png differ diff --git a/imgs/icons/48_16.png b/imgs/icons/48_16.png index 81041488b..63c0e3cb6 100644 Binary files a/imgs/icons/48_16.png and b/imgs/icons/48_16.png differ diff --git a/imgs/icons/49_05.png b/imgs/icons/49_05.png index 36ea32394..d74e953b9 100644 Binary files a/imgs/icons/49_05.png and b/imgs/icons/49_05.png differ diff --git a/imgs/icons/49_06.png b/imgs/icons/49_06.png index 5c7148f1a..a5142f64a 100644 Binary files a/imgs/icons/49_06.png and b/imgs/icons/49_06.png differ diff --git a/imgs/icons/49_07.png b/imgs/icons/49_07.png index 5aaa37adb..50fa37dfb 100644 Binary files a/imgs/icons/49_07.png and b/imgs/icons/49_07.png differ diff --git a/imgs/icons/50_03.png b/imgs/icons/50_03.png index 1717b2d19..0ef7aea67 100644 Binary files a/imgs/icons/50_03.png and b/imgs/icons/50_03.png differ diff --git a/imgs/icons/50_11.png b/imgs/icons/50_11.png index f8a410836..1be51b145 100644 Binary files a/imgs/icons/50_11.png and b/imgs/icons/50_11.png differ diff --git a/imgs/icons/51_05.png b/imgs/icons/51_05.png deleted file mode 100644 index 5f211713e..000000000 Binary files a/imgs/icons/51_05.png and /dev/null differ diff --git a/imgs/icons/51_10.png b/imgs/icons/51_10.png deleted file mode 100644 index 20ebbff40..000000000 Binary files a/imgs/icons/51_10.png and /dev/null differ diff --git a/imgs/icons/51_11.png b/imgs/icons/51_11.png deleted file mode 100644 index e9e95b19a..000000000 Binary files a/imgs/icons/51_11.png and /dev/null differ diff --git a/imgs/icons/51_12.png b/imgs/icons/51_12.png deleted file mode 100644 index 59f5f1007..000000000 Binary files a/imgs/icons/51_12.png and /dev/null differ diff --git a/imgs/icons/51_13.png b/imgs/icons/51_13.png deleted file mode 100644 index 82be4e3ca..000000000 Binary files a/imgs/icons/51_13.png and /dev/null differ diff --git a/imgs/icons/51_14.png b/imgs/icons/51_14.png deleted file mode 100644 index f5b406f78..000000000 Binary files a/imgs/icons/51_14.png and /dev/null differ diff --git a/imgs/icons/51_15.png b/imgs/icons/51_15.png deleted file mode 100644 index 576c11bf7..000000000 Binary files a/imgs/icons/51_15.png and /dev/null differ diff --git a/imgs/icons/51_16.png b/imgs/icons/51_16.png deleted file mode 100644 index 6d80e7081..000000000 Binary files a/imgs/icons/51_16.png and /dev/null differ diff --git a/imgs/icons/52_01.png b/imgs/icons/52_01.png index 63997ef9a..e38478aba 100644 Binary files a/imgs/icons/52_01.png and b/imgs/icons/52_01.png differ diff --git a/imgs/icons/52_02.png b/imgs/icons/52_02.png index cb06d7db6..4ee9df2c2 100644 Binary files a/imgs/icons/52_02.png and b/imgs/icons/52_02.png differ diff --git a/imgs/icons/52_03.png b/imgs/icons/52_03.png index 6d7a4db03..1acbe9082 100644 Binary files a/imgs/icons/52_03.png and b/imgs/icons/52_03.png differ diff --git a/imgs/icons/52_04.png b/imgs/icons/52_04.png index 459a738b3..c6cab7c10 100644 Binary files a/imgs/icons/52_04.png and b/imgs/icons/52_04.png differ diff --git a/imgs/icons/52_05.png b/imgs/icons/52_05.png index 32f445063..62950a2c5 100644 Binary files a/imgs/icons/52_05.png and b/imgs/icons/52_05.png differ diff --git a/imgs/icons/52_06.png b/imgs/icons/52_06.png index 29c1a477f..c25b72b26 100644 Binary files a/imgs/icons/52_06.png and b/imgs/icons/52_06.png differ diff --git a/imgs/icons/52_07.png b/imgs/icons/52_07.png index e54ab6778..9d2f070f1 100644 Binary files a/imgs/icons/52_07.png and b/imgs/icons/52_07.png differ diff --git a/imgs/icons/52_08.png b/imgs/icons/52_08.png index 5f1469da1..a97324447 100644 Binary files a/imgs/icons/52_08.png and b/imgs/icons/52_08.png differ diff --git a/imgs/icons/52_10.png b/imgs/icons/52_10.png index 4ca5e77f5..bf74669ab 100644 Binary files a/imgs/icons/52_10.png and b/imgs/icons/52_10.png differ diff --git a/imgs/icons/52_11.png b/imgs/icons/52_11.png index 738736e6b..b9a0e4d47 100644 Binary files a/imgs/icons/52_11.png and b/imgs/icons/52_11.png differ diff --git a/imgs/icons/52_12.png b/imgs/icons/52_12.png index 02d05199b..caeafa3e0 100644 Binary files a/imgs/icons/52_12.png and b/imgs/icons/52_12.png differ diff --git a/imgs/icons/52_13.png b/imgs/icons/52_13.png index 179819806..05c7c82d9 100644 Binary files a/imgs/icons/52_13.png and b/imgs/icons/52_13.png differ diff --git a/imgs/icons/52_14.png b/imgs/icons/52_14.png index b5822283b..4b96de0f9 100644 Binary files a/imgs/icons/52_14.png and b/imgs/icons/52_14.png differ diff --git a/imgs/icons/52_15.png b/imgs/icons/52_15.png index 59f0721da..89806420f 100644 Binary files a/imgs/icons/52_15.png and b/imgs/icons/52_15.png differ diff --git a/imgs/icons/52_16.png b/imgs/icons/52_16.png index 2f165c61f..e1899bdcd 100644 Binary files a/imgs/icons/52_16.png and b/imgs/icons/52_16.png differ diff --git a/imgs/icons/53_01.png b/imgs/icons/53_01.png index d94d1c956..41c3be6cb 100644 Binary files a/imgs/icons/53_01.png and b/imgs/icons/53_01.png differ diff --git a/imgs/icons/53_02.png b/imgs/icons/53_02.png index ad6dc0823..96ebb6f5b 100644 Binary files a/imgs/icons/53_02.png and b/imgs/icons/53_02.png differ diff --git a/imgs/icons/53_03.png b/imgs/icons/53_03.png index 64438f7d5..b6f3980c2 100644 Binary files a/imgs/icons/53_03.png and b/imgs/icons/53_03.png differ diff --git a/imgs/icons/53_04.png b/imgs/icons/53_04.png index 5657f4464..0a5dd43a5 100644 Binary files a/imgs/icons/53_04.png and b/imgs/icons/53_04.png differ diff --git a/imgs/icons/53_05.png b/imgs/icons/53_05.png index 4968233c4..a426c73a0 100644 Binary files a/imgs/icons/53_05.png and b/imgs/icons/53_05.png differ diff --git a/imgs/icons/53_06.png b/imgs/icons/53_06.png index 565a6c19f..1318db66b 100644 Binary files a/imgs/icons/53_06.png and b/imgs/icons/53_06.png differ diff --git a/imgs/icons/53_07.png b/imgs/icons/53_07.png index 6d31007fb..4a112ecc5 100644 Binary files a/imgs/icons/53_07.png and b/imgs/icons/53_07.png differ diff --git a/imgs/icons/53_08.png b/imgs/icons/53_08.png index 8026efd48..e951a5842 100644 Binary files a/imgs/icons/53_08.png and b/imgs/icons/53_08.png differ diff --git a/imgs/icons/53_09.png b/imgs/icons/53_09.png index 6996aae4c..499e735d3 100644 Binary files a/imgs/icons/53_09.png and b/imgs/icons/53_09.png differ diff --git a/imgs/icons/53_14.png b/imgs/icons/53_14.png index b1bf0e1f1..16978c24a 100644 Binary files a/imgs/icons/53_14.png and b/imgs/icons/53_14.png differ diff --git a/imgs/icons/53_15.png b/imgs/icons/53_15.png index 9b617201d..9d2cefe6c 100644 Binary files a/imgs/icons/53_15.png and b/imgs/icons/53_15.png differ diff --git a/imgs/icons/53_16.png b/imgs/icons/53_16.png index 1ec59a4b5..0d8d74510 100644 Binary files a/imgs/icons/53_16.png and b/imgs/icons/53_16.png differ diff --git a/imgs/icons/53_64_16.png b/imgs/icons/53_64_16.png deleted file mode 100644 index bd0011937..000000000 Binary files a/imgs/icons/53_64_16.png and /dev/null differ diff --git a/imgs/icons/55_13.png b/imgs/icons/55_13.png index 615a5c0b8..8a6643cc2 100644 Binary files a/imgs/icons/55_13.png and b/imgs/icons/55_13.png differ diff --git a/imgs/icons/56_01.png b/imgs/icons/56_01.png index fbd562c73..db4477981 100644 Binary files a/imgs/icons/56_01.png and b/imgs/icons/56_01.png differ diff --git a/imgs/icons/56_02.png b/imgs/icons/56_02.png index 125958dec..b31ce89c0 100644 Binary files a/imgs/icons/56_02.png and b/imgs/icons/56_02.png differ diff --git a/imgs/icons/56_03.png b/imgs/icons/56_03.png index 66a615302..3697a3231 100644 Binary files a/imgs/icons/56_03.png and b/imgs/icons/56_03.png differ diff --git a/imgs/icons/56_04.png b/imgs/icons/56_04.png index 3eb08b5ba..d13597923 100644 Binary files a/imgs/icons/56_04.png and b/imgs/icons/56_04.png differ diff --git a/imgs/icons/56_05.png b/imgs/icons/56_05.png index 0559cd72c..67e23d5af 100644 Binary files a/imgs/icons/56_05.png and b/imgs/icons/56_05.png differ diff --git a/imgs/icons/56_06.png b/imgs/icons/56_06.png index 7560ad3ea..8aba8ffb7 100644 Binary files a/imgs/icons/56_06.png and b/imgs/icons/56_06.png differ diff --git a/imgs/icons/56_07.png b/imgs/icons/56_07.png index c403b593b..51a90e1c5 100644 Binary files a/imgs/icons/56_07.png and b/imgs/icons/56_07.png differ diff --git a/imgs/icons/56_08.png b/imgs/icons/56_08.png index f13a31186..9fc97a843 100644 Binary files a/imgs/icons/56_08.png and b/imgs/icons/56_08.png differ diff --git a/imgs/icons/57_04.png b/imgs/icons/57_04.png index 66b15839c..52dba23c1 100644 Binary files a/imgs/icons/57_04.png and b/imgs/icons/57_04.png differ diff --git a/imgs/icons/5_64_17.png b/imgs/icons/5_17.png similarity index 100% rename from imgs/icons/5_64_17.png rename to imgs/icons/5_17.png diff --git a/imgs/icons/5_64_18.png b/imgs/icons/5_18.png similarity index 100% rename from imgs/icons/5_64_18.png rename to imgs/icons/5_18.png diff --git a/imgs/icons/5_64_19.png b/imgs/icons/5_19.png similarity index 100% rename from imgs/icons/5_64_19.png rename to imgs/icons/5_19.png diff --git a/imgs/icons/5_64_20.png b/imgs/icons/5_20.png similarity index 100% rename from imgs/icons/5_64_20.png rename to imgs/icons/5_20.png diff --git a/imgs/icons/5_64_21.png b/imgs/icons/5_21.png similarity index 100% rename from imgs/icons/5_64_21.png rename to imgs/icons/5_21.png diff --git a/imgs/icons/62_01.png b/imgs/icons/62_01.png index 4ffe26e9b..149fc2ac1 100644 Binary files a/imgs/icons/62_01.png and b/imgs/icons/62_01.png differ diff --git a/imgs/icons/62_02.png b/imgs/icons/62_02.png index 299a4ccb8..b1fc19b28 100644 Binary files a/imgs/icons/62_02.png and b/imgs/icons/62_02.png differ diff --git a/imgs/icons/62_03.png b/imgs/icons/62_03.png index 04356a730..cc7d5192c 100644 Binary files a/imgs/icons/62_03.png and b/imgs/icons/62_03.png differ diff --git a/imgs/icons/62_04.png b/imgs/icons/62_04.png index c0dc28124..24b08e1e5 100644 Binary files a/imgs/icons/62_04.png and b/imgs/icons/62_04.png differ diff --git a/imgs/icons/62_05.png b/imgs/icons/62_05.png index c3c12250f..49d85c7a9 100644 Binary files a/imgs/icons/62_05.png and b/imgs/icons/62_05.png differ diff --git a/imgs/icons/62_06.png b/imgs/icons/62_06.png index 24b30c42b..697da9b5d 100644 Binary files a/imgs/icons/62_06.png and b/imgs/icons/62_06.png differ diff --git a/imgs/icons/62_07.png b/imgs/icons/62_07.png index e33137a8f..82664f191 100644 Binary files a/imgs/icons/62_07.png and b/imgs/icons/62_07.png differ diff --git a/imgs/icons/62_08.png b/imgs/icons/62_08.png index 2ca1cf196..ad54a4d45 100644 Binary files a/imgs/icons/62_08.png and b/imgs/icons/62_08.png differ diff --git a/imgs/icons/62_09.png b/imgs/icons/62_09.png new file mode 100644 index 000000000..6188a529e Binary files /dev/null and b/imgs/icons/62_09.png differ diff --git a/imgs/icons/62_10.png b/imgs/icons/62_10.png new file mode 100644 index 000000000..0e8db2ea7 Binary files /dev/null and b/imgs/icons/62_10.png differ diff --git a/imgs/icons/62_11.png b/imgs/icons/62_11.png new file mode 100644 index 000000000..6ca3f4659 Binary files /dev/null and b/imgs/icons/62_11.png differ diff --git a/imgs/icons/62_12.png b/imgs/icons/62_12.png new file mode 100644 index 000000000..59622e1fc Binary files /dev/null and b/imgs/icons/62_12.png differ diff --git a/imgs/icons/62_13.png b/imgs/icons/62_13.png new file mode 100644 index 000000000..86b2ebb46 Binary files /dev/null and b/imgs/icons/62_13.png differ diff --git a/imgs/icons/62_14.png b/imgs/icons/62_14.png new file mode 100644 index 000000000..5e28466bf Binary files /dev/null and b/imgs/icons/62_14.png differ diff --git a/imgs/icons/62_15.png b/imgs/icons/62_15.png new file mode 100644 index 000000000..1259aa398 Binary files /dev/null and b/imgs/icons/62_15.png differ diff --git a/imgs/icons/62_16.png b/imgs/icons/62_16.png new file mode 100644 index 000000000..f18aafa86 Binary files /dev/null and b/imgs/icons/62_16.png differ diff --git a/imgs/icons/63_13.png b/imgs/icons/63_13.png index 11310df21..61293f3c2 100644 Binary files a/imgs/icons/63_13.png and b/imgs/icons/63_13.png differ diff --git a/imgs/icons/63_14.png b/imgs/icons/63_14.png index b47f3b3b6..1a1543f24 100644 Binary files a/imgs/icons/63_14.png and b/imgs/icons/63_14.png differ diff --git a/imgs/icons/63_15.png b/imgs/icons/63_15.png index afab19ca4..f48506a92 100644 Binary files a/imgs/icons/63_15.png and b/imgs/icons/63_15.png differ diff --git a/imgs/icons/63_16.png b/imgs/icons/63_16.png index c745b2cfd..a3df80018 100644 Binary files a/imgs/icons/63_16.png and b/imgs/icons/63_16.png differ diff --git a/imgs/icons/64_05.png b/imgs/icons/64_05.png index 0cf5134dc..b0a96b97e 100644 Binary files a/imgs/icons/64_05.png and b/imgs/icons/64_05.png differ diff --git a/imgs/icons/64_06.png b/imgs/icons/64_06.png index ca27a43c5..0e0b30c0d 100644 Binary files a/imgs/icons/64_06.png and b/imgs/icons/64_06.png differ diff --git a/imgs/icons/64_07.png b/imgs/icons/64_07.png index be65f0904..3d2eeae3c 100644 Binary files a/imgs/icons/64_07.png and b/imgs/icons/64_07.png differ diff --git a/imgs/icons/64_08.png b/imgs/icons/64_08.png index d7ee6295f..508face64 100644 Binary files a/imgs/icons/64_08.png and b/imgs/icons/64_08.png differ diff --git a/imgs/icons/64_11.png b/imgs/icons/64_11.png index c263086ec..66f522e19 100644 Binary files a/imgs/icons/64_11.png and b/imgs/icons/64_11.png differ diff --git a/imgs/icons/64_12.png b/imgs/icons/64_12.png index 23f6b5b70..b1afaf334 100644 Binary files a/imgs/icons/64_12.png and b/imgs/icons/64_12.png differ diff --git a/imgs/icons/68_01.png b/imgs/icons/68_01.png index c51466727..4cc4a67cd 100644 Binary files a/imgs/icons/68_01.png and b/imgs/icons/68_01.png differ diff --git a/imgs/icons/68_02.png b/imgs/icons/68_02.png index 33d0c75b5..b1d12db9b 100644 Binary files a/imgs/icons/68_02.png and b/imgs/icons/68_02.png differ diff --git a/imgs/icons/68_03.png b/imgs/icons/68_03.png index 006f9b149..9623df7d2 100644 Binary files a/imgs/icons/68_03.png and b/imgs/icons/68_03.png differ diff --git a/imgs/icons/68_04.png b/imgs/icons/68_04.png index 125fda065..84dc423a7 100644 Binary files a/imgs/icons/68_04.png and b/imgs/icons/68_04.png differ diff --git a/imgs/icons/68_09.png b/imgs/icons/68_09.png index cfa6ccfee..ae7b291a0 100644 Binary files a/imgs/icons/68_09.png and b/imgs/icons/68_09.png differ diff --git a/imgs/icons/68_10.png b/imgs/icons/68_10.png index 62abbe105..805dd11ef 100644 Binary files a/imgs/icons/68_10.png and b/imgs/icons/68_10.png differ diff --git a/imgs/icons/68_11.png b/imgs/icons/68_11.png index e0964982f..29f5cc5a6 100644 Binary files a/imgs/icons/68_11.png and b/imgs/icons/68_11.png differ diff --git a/imgs/icons/68_12.png b/imgs/icons/68_12.png index f0f887bd9..c2c69fe6a 100644 Binary files a/imgs/icons/68_12.png and b/imgs/icons/68_12.png differ diff --git a/imgs/icons/68_13.png b/imgs/icons/68_13.png index 52dbfcabf..eec2f210c 100644 Binary files a/imgs/icons/68_13.png and b/imgs/icons/68_13.png differ diff --git a/imgs/icons/68_14.png b/imgs/icons/68_14.png index 992728717..cd43275a8 100644 Binary files a/imgs/icons/68_14.png and b/imgs/icons/68_14.png differ diff --git a/imgs/icons/68_15.png b/imgs/icons/68_15.png index 5caaba76d..2d7c7cf1f 100644 Binary files a/imgs/icons/68_15.png and b/imgs/icons/68_15.png differ diff --git a/imgs/icons/68_16.png b/imgs/icons/68_16.png index 69d1e9707..584483c40 100644 Binary files a/imgs/icons/68_16.png and b/imgs/icons/68_16.png differ diff --git a/imgs/icons/70_03.png b/imgs/icons/70_03.png index f3fb81fda..2153130f4 100644 Binary files a/imgs/icons/70_03.png and b/imgs/icons/70_03.png differ diff --git a/imgs/icons/70_04.png b/imgs/icons/70_04.png index b065a4989..d2f471497 100644 Binary files a/imgs/icons/70_04.png and b/imgs/icons/70_04.png differ diff --git a/imgs/icons/70_05.png b/imgs/icons/70_05.png index cdbea3d4b..e66e0e937 100644 Binary files a/imgs/icons/70_05.png and b/imgs/icons/70_05.png differ diff --git a/imgs/icons/70_06.png b/imgs/icons/70_06.png index 9ca126348..ca2c6ca67 100644 Binary files a/imgs/icons/70_06.png and b/imgs/icons/70_06.png differ diff --git a/imgs/icons/70_07.png b/imgs/icons/70_07.png index b80c6bcd1..d03d0f46f 100644 Binary files a/imgs/icons/70_07.png and b/imgs/icons/70_07.png differ diff --git a/imgs/icons/70_08.png b/imgs/icons/70_08.png index c2a490c47..d746511a4 100644 Binary files a/imgs/icons/70_08.png and b/imgs/icons/70_08.png differ diff --git a/imgs/icons/70_09.png b/imgs/icons/70_09.png index 6b67b45ef..090145b3e 100644 Binary files a/imgs/icons/70_09.png and b/imgs/icons/70_09.png differ diff --git a/imgs/icons/70_10.png b/imgs/icons/70_10.png index 477ff9a9a..6a5385ff2 100644 Binary files a/imgs/icons/70_10.png and b/imgs/icons/70_10.png differ diff --git a/imgs/icons/70_12.png b/imgs/icons/70_12.png index 410ee6cbb..295538a9f 100644 Binary files a/imgs/icons/70_12.png and b/imgs/icons/70_12.png differ diff --git a/imgs/icons/70_13.png b/imgs/icons/70_13.png new file mode 100644 index 000000000..d0fd7f436 Binary files /dev/null and b/imgs/icons/70_13.png differ diff --git a/imgs/icons/70_14.png b/imgs/icons/70_14.png new file mode 100644 index 000000000..95e7ad091 Binary files /dev/null and b/imgs/icons/70_14.png differ diff --git a/imgs/icons/70_15.png b/imgs/icons/70_15.png new file mode 100644 index 000000000..f0f44354e Binary files /dev/null and b/imgs/icons/70_15.png differ diff --git a/imgs/icons/70_16.png b/imgs/icons/70_16.png new file mode 100644 index 000000000..1ef04fee6 Binary files /dev/null and b/imgs/icons/70_16.png differ diff --git a/imgs/icons/74_01.png b/imgs/icons/74_01.png index b453dd0ae..08dceaefa 100644 Binary files a/imgs/icons/74_01.png and b/imgs/icons/74_01.png differ diff --git a/imgs/icons/74_02.png b/imgs/icons/74_02.png index 54ba13045..7ef287a9e 100644 Binary files a/imgs/icons/74_02.png and b/imgs/icons/74_02.png differ diff --git a/imgs/icons/74_03.png b/imgs/icons/74_03.png index 39b8bf90d..73976dded 100644 Binary files a/imgs/icons/74_03.png and b/imgs/icons/74_03.png differ diff --git a/imgs/icons/74_04.png b/imgs/icons/74_04.png index 48d7a29f4..9962b9b8d 100644 Binary files a/imgs/icons/74_04.png and b/imgs/icons/74_04.png differ diff --git a/imgs/icons/74_05.png b/imgs/icons/74_05.png index 3d50490cb..8b4471428 100644 Binary files a/imgs/icons/74_05.png and b/imgs/icons/74_05.png differ diff --git a/imgs/icons/74_06.png b/imgs/icons/74_06.png index 3ec2556e1..3388d0608 100644 Binary files a/imgs/icons/74_06.png and b/imgs/icons/74_06.png differ diff --git a/imgs/icons/74_07.png b/imgs/icons/74_07.png index b01f222bf..f44fc9e32 100644 Binary files a/imgs/icons/74_07.png and b/imgs/icons/74_07.png differ diff --git a/imgs/icons/74_08.png b/imgs/icons/74_08.png index 0ea078978..17d3e858d 100644 Binary files a/imgs/icons/74_08.png and b/imgs/icons/74_08.png differ diff --git a/imgs/icons/74_09.png b/imgs/icons/74_09.png index 85b18ae99..7a68a1fbb 100644 Binary files a/imgs/icons/74_09.png and b/imgs/icons/74_09.png differ diff --git a/imgs/icons/74_10.png b/imgs/icons/74_10.png index b9a4754bb..7aee58575 100644 Binary files a/imgs/icons/74_10.png and b/imgs/icons/74_10.png differ diff --git a/imgs/icons/76_01.png b/imgs/icons/76_01.png index 32c79f83d..71d1b9fe5 100644 Binary files a/imgs/icons/76_01.png and b/imgs/icons/76_01.png differ diff --git a/imgs/icons/76_04.png b/imgs/icons/76_04.png index 2f9e14b4d..67c4cb3c7 100644 Binary files a/imgs/icons/76_04.png and b/imgs/icons/76_04.png differ diff --git a/imgs/icons/76_05.png b/imgs/icons/76_05.png index 89a6be139..fdb2783ff 100644 Binary files a/imgs/icons/76_05.png and b/imgs/icons/76_05.png differ diff --git a/imgs/icons/76_06.png b/imgs/icons/76_06.png index 9fcc91b9e..b82cf68d6 100644 Binary files a/imgs/icons/76_06.png and b/imgs/icons/76_06.png differ diff --git a/imgs/icons/76_07.png b/imgs/icons/76_07.png index 5646a17ca..c2baf29f5 100644 Binary files a/imgs/icons/76_07.png and b/imgs/icons/76_07.png differ diff --git a/imgs/icons/76_08.png b/imgs/icons/76_08.png index 882c4822b..ffd4ef1ee 100644 Binary files a/imgs/icons/76_08.png and b/imgs/icons/76_08.png differ diff --git a/imgs/icons/76_09.png b/imgs/icons/76_09.png index 4987f64b5..2233095e1 100644 Binary files a/imgs/icons/76_09.png and b/imgs/icons/76_09.png differ diff --git a/imgs/icons/76_16.png b/imgs/icons/76_16.png index 07e248823..0e19cdd50 100644 Binary files a/imgs/icons/76_16.png and b/imgs/icons/76_16.png differ diff --git a/imgs/icons/79_09.png b/imgs/icons/79_09.png index d4c345f51..993fd6f30 100644 Binary files a/imgs/icons/79_09.png and b/imgs/icons/79_09.png differ diff --git a/imgs/icons/89_1.png b/imgs/icons/89_1.png index d67cec722..b0a29d271 100644 Binary files a/imgs/icons/89_1.png and b/imgs/icons/89_1.png differ diff --git a/imgs/icons/89_2.png b/imgs/icons/89_2.png index 897572f90..58f9800e5 100644 Binary files a/imgs/icons/89_2.png and b/imgs/icons/89_2.png differ diff --git a/imgs/icons/89_3.png b/imgs/icons/89_3.png index 486cbfcd5..d392fc2de 100644 Binary files a/imgs/icons/89_3.png and b/imgs/icons/89_3.png differ diff --git a/imgs/icons/89_4.png b/imgs/icons/89_4.png index 03539d4bf..2b7790645 100644 Binary files a/imgs/icons/89_4.png and b/imgs/icons/89_4.png differ diff --git a/imgs/icons/94_64_9.png b/imgs/icons/94_64_9.png deleted file mode 100644 index 0eb00b510..000000000 Binary files a/imgs/icons/94_64_9.png and /dev/null differ diff --git a/imgs/icons/94_9.png b/imgs/icons/94_9.png new file mode 100644 index 000000000..fdcec1e33 Binary files /dev/null and b/imgs/icons/94_9.png differ diff --git a/imgs/icons/95_05.png b/imgs/icons/95_05.png index b24ce8138..0f79176f4 100644 Binary files a/imgs/icons/95_05.png and b/imgs/icons/95_05.png differ diff --git a/imgs/icons/99_09.png b/imgs/icons/99_09.png index df6362c16..e256bf5e9 100644 Binary files a/imgs/icons/99_09.png and b/imgs/icons/99_09.png differ diff --git a/imgs/icons/Icon_64px_Fireworks.png b/imgs/icons/Icon_64px_Fireworks.png deleted file mode 100644 index 2e8a27c3d..000000000 Binary files a/imgs/icons/Icon_64px_Fireworks.png and /dev/null differ diff --git a/imgs/icons/MarketIcon_16px_Amarr.png b/imgs/icons/MarketIcon_16px_Amarr.png deleted file mode 100644 index fdb721f65..000000000 Binary files a/imgs/icons/MarketIcon_16px_Amarr.png and /dev/null differ diff --git a/imgs/icons/MarketIcon_16px_Caldari.png b/imgs/icons/MarketIcon_16px_Caldari.png deleted file mode 100644 index edd49286e..000000000 Binary files a/imgs/icons/MarketIcon_16px_Caldari.png and /dev/null differ diff --git a/imgs/icons/MarketIcon_16px_Gallente.png b/imgs/icons/MarketIcon_16px_Gallente.png deleted file mode 100644 index 4039ba05c..000000000 Binary files a/imgs/icons/MarketIcon_16px_Gallente.png and /dev/null differ diff --git a/imgs/icons/MarketIcon_16px_Minmatar.png b/imgs/icons/MarketIcon_16px_Minmatar.png deleted file mode 100644 index dba4a2726..000000000 Binary files a/imgs/icons/MarketIcon_16px_Minmatar.png and /dev/null differ diff --git a/imgs/icons/infantry_gear.png b/imgs/icons/infantry_gear.png new file mode 100644 index 000000000..d58209754 Binary files /dev/null and b/imgs/icons/infantry_gear.png differ diff --git a/imgs/icons/remote_armor_repair.png b/imgs/icons/remote_armor_repair.png deleted file mode 100644 index 16d4337ee..000000000 Binary files a/imgs/icons/remote_armor_repair.png and /dev/null differ diff --git a/imgs/icons/remote_hull_repairer.png b/imgs/icons/remote_hull_repairer.png deleted file mode 100644 index 5899ec386..000000000 Binary files a/imgs/icons/remote_hull_repairer.png and /dev/null differ diff --git a/imgs/renders/10254.png b/imgs/renders/10254.png deleted file mode 100644 index 4b9ec73c0..000000000 Binary files a/imgs/renders/10254.png and /dev/null differ diff --git a/imgs/renders/11011.png b/imgs/renders/11011.png index aed8b78b8..43f603822 100644 Binary files a/imgs/renders/11011.png and b/imgs/renders/11011.png differ diff --git a/imgs/renders/11019.png b/imgs/renders/11019.png deleted file mode 100644 index 199106bca..000000000 Binary files a/imgs/renders/11019.png and /dev/null differ diff --git a/imgs/renders/11129.png b/imgs/renders/11129.png index 39f0adcad..e61896246 100644 Binary files a/imgs/renders/11129.png and b/imgs/renders/11129.png differ diff --git a/imgs/renders/11132.png b/imgs/renders/11132.png index e308b9d22..ddf54b1ee 100644 Binary files a/imgs/renders/11132.png and b/imgs/renders/11132.png differ diff --git a/imgs/renders/11134.png b/imgs/renders/11134.png index adb82d599..bb8f8b418 100644 Binary files a/imgs/renders/11134.png and b/imgs/renders/11134.png differ diff --git a/imgs/renders/11172.png b/imgs/renders/11172.png index 829609925..5e5c2e88d 100644 Binary files a/imgs/renders/11172.png and b/imgs/renders/11172.png differ diff --git a/imgs/renders/11174.png b/imgs/renders/11174.png index 5f350acd2..d0ecdc900 100644 Binary files a/imgs/renders/11174.png and b/imgs/renders/11174.png differ diff --git a/imgs/renders/11176.png b/imgs/renders/11176.png index e340c1068..ef3e002e6 100644 Binary files a/imgs/renders/11176.png and b/imgs/renders/11176.png differ diff --git a/imgs/renders/11178.png b/imgs/renders/11178.png index b0f0eb44c..03bff6e3c 100644 Binary files a/imgs/renders/11178.png and b/imgs/renders/11178.png differ diff --git a/imgs/renders/11180.png b/imgs/renders/11180.png deleted file mode 100644 index 8532c4682..000000000 Binary files a/imgs/renders/11180.png and /dev/null differ diff --git a/imgs/renders/11182.png b/imgs/renders/11182.png index bf8fe832f..38685248e 100644 Binary files a/imgs/renders/11182.png and b/imgs/renders/11182.png differ diff --git a/imgs/renders/11184.png b/imgs/renders/11184.png index a94051f39..6bed254be 100644 Binary files a/imgs/renders/11184.png and b/imgs/renders/11184.png differ diff --git a/imgs/renders/11186.png b/imgs/renders/11186.png index ff7c52502..e8f75b15b 100644 Binary files a/imgs/renders/11186.png and b/imgs/renders/11186.png differ diff --git a/imgs/renders/11188.png b/imgs/renders/11188.png index 8b347d4db..92a56d3e0 100644 Binary files a/imgs/renders/11188.png and b/imgs/renders/11188.png differ diff --git a/imgs/renders/11190.png b/imgs/renders/11190.png index eaeab53f9..cdaf79494 100644 Binary files a/imgs/renders/11190.png and b/imgs/renders/11190.png differ diff --git a/imgs/renders/11192.png b/imgs/renders/11192.png index 674ee4dc0..76174e5cc 100644 Binary files a/imgs/renders/11192.png and b/imgs/renders/11192.png differ diff --git a/imgs/renders/11194.png b/imgs/renders/11194.png index 8f9788ead..ee31b2b47 100644 Binary files a/imgs/renders/11194.png and b/imgs/renders/11194.png differ diff --git a/imgs/renders/11196.png b/imgs/renders/11196.png index 05d77e742..669de8269 100644 Binary files a/imgs/renders/11196.png and b/imgs/renders/11196.png differ diff --git a/imgs/renders/11198.png b/imgs/renders/11198.png index c4d0e8279..731935b84 100644 Binary files a/imgs/renders/11198.png and b/imgs/renders/11198.png differ diff --git a/imgs/renders/11200.png b/imgs/renders/11200.png index 0e4cc3455..757a2107f 100644 Binary files a/imgs/renders/11200.png and b/imgs/renders/11200.png differ diff --git a/imgs/renders/11202.png b/imgs/renders/11202.png index 8d7625dc2..9f4f879ed 100644 Binary files a/imgs/renders/11202.png and b/imgs/renders/11202.png differ diff --git a/imgs/renders/11365.png b/imgs/renders/11365.png index 0ca250105..680d5a513 100644 Binary files a/imgs/renders/11365.png and b/imgs/renders/11365.png differ diff --git a/imgs/renders/11371.png b/imgs/renders/11371.png index cbd9f19c5..432961bcd 100644 Binary files a/imgs/renders/11371.png and b/imgs/renders/11371.png differ diff --git a/imgs/renders/11373.png b/imgs/renders/11373.png deleted file mode 100644 index 0e7ab40cb..000000000 Binary files a/imgs/renders/11373.png and /dev/null differ diff --git a/imgs/renders/11375.png b/imgs/renders/11375.png deleted file mode 100644 index a4b45701f..000000000 Binary files a/imgs/renders/11375.png and /dev/null differ diff --git a/imgs/renders/11377.png b/imgs/renders/11377.png index 64d447f0f..ff3e2793d 100644 Binary files a/imgs/renders/11377.png and b/imgs/renders/11377.png differ diff --git a/imgs/renders/11379.png b/imgs/renders/11379.png index a8521af08..5a31c2abf 100644 Binary files a/imgs/renders/11379.png and b/imgs/renders/11379.png differ diff --git a/imgs/renders/11381.png b/imgs/renders/11381.png index ed151b9ce..964281297 100644 Binary files a/imgs/renders/11381.png and b/imgs/renders/11381.png differ diff --git a/imgs/renders/11383.png b/imgs/renders/11383.png deleted file mode 100644 index 2fafefbbf..000000000 Binary files a/imgs/renders/11383.png and /dev/null differ diff --git a/imgs/renders/11385.png b/imgs/renders/11385.png deleted file mode 100644 index a516ab624..000000000 Binary files a/imgs/renders/11385.png and /dev/null differ diff --git a/imgs/renders/11387.png b/imgs/renders/11387.png index 17f2e0168..086292471 100644 Binary files a/imgs/renders/11387.png and b/imgs/renders/11387.png differ diff --git a/imgs/renders/11389.png b/imgs/renders/11389.png deleted file mode 100644 index eedfbae4e..000000000 Binary files a/imgs/renders/11389.png and /dev/null differ diff --git a/imgs/renders/11393.png b/imgs/renders/11393.png index 29f0875f1..3c7463e65 100644 Binary files a/imgs/renders/11393.png and b/imgs/renders/11393.png differ diff --git a/imgs/renders/11400.png b/imgs/renders/11400.png index c3736d206..c4b62b635 100644 Binary files a/imgs/renders/11400.png and b/imgs/renders/11400.png differ diff --git a/imgs/renders/11567.png b/imgs/renders/11567.png index 7210fdb29..3afae72a4 100644 Binary files a/imgs/renders/11567.png and b/imgs/renders/11567.png differ diff --git a/imgs/renders/11591.png b/imgs/renders/11591.png deleted file mode 100644 index f174e7a92..000000000 Binary files a/imgs/renders/11591.png and /dev/null differ diff --git a/imgs/renders/11936.png b/imgs/renders/11936.png index 9c20c4ead..b9ddb0338 100644 Binary files a/imgs/renders/11936.png and b/imgs/renders/11936.png differ diff --git a/imgs/renders/11938.png b/imgs/renders/11938.png index de9ce0ab0..bf209e75a 100644 Binary files a/imgs/renders/11938.png and b/imgs/renders/11938.png differ diff --git a/imgs/renders/11940.png b/imgs/renders/11940.png index b0e16c4f3..611f2ea7e 100644 Binary files a/imgs/renders/11940.png and b/imgs/renders/11940.png differ diff --git a/imgs/renders/11942.png b/imgs/renders/11942.png index 25ad048ae..4b25c3af1 100644 Binary files a/imgs/renders/11942.png and b/imgs/renders/11942.png differ diff --git a/imgs/renders/11957.png b/imgs/renders/11957.png index d8518d7da..20115952a 100644 Binary files a/imgs/renders/11957.png and b/imgs/renders/11957.png differ diff --git a/imgs/renders/11959.png b/imgs/renders/11959.png index 120a3deb9..46d9d95ea 100644 Binary files a/imgs/renders/11959.png and b/imgs/renders/11959.png differ diff --git a/imgs/renders/11961.png b/imgs/renders/11961.png index dd2f214e8..79a87aa70 100644 Binary files a/imgs/renders/11961.png and b/imgs/renders/11961.png differ diff --git a/imgs/renders/11963.png b/imgs/renders/11963.png index 5d708df8b..efa20706b 100644 Binary files a/imgs/renders/11963.png and b/imgs/renders/11963.png differ diff --git a/imgs/renders/11965.png b/imgs/renders/11965.png index d57b1cb67..1b719e5e7 100644 Binary files a/imgs/renders/11965.png and b/imgs/renders/11965.png differ diff --git a/imgs/renders/11969.png b/imgs/renders/11969.png index f80f1e574..0e3ab23cc 100644 Binary files a/imgs/renders/11969.png and b/imgs/renders/11969.png differ diff --git a/imgs/renders/11971.png b/imgs/renders/11971.png index d602e06db..f67c09933 100644 Binary files a/imgs/renders/11971.png and b/imgs/renders/11971.png differ diff --git a/imgs/renders/11973.png b/imgs/renders/11973.png deleted file mode 100644 index 4446dc48e..000000000 Binary files a/imgs/renders/11973.png and /dev/null differ diff --git a/imgs/renders/11978.png b/imgs/renders/11978.png index 851a8bbeb..c8b821365 100644 Binary files a/imgs/renders/11978.png and b/imgs/renders/11978.png differ diff --git a/imgs/renders/11980.png b/imgs/renders/11980.png deleted file mode 100644 index 927039197..000000000 Binary files a/imgs/renders/11980.png and /dev/null differ diff --git a/imgs/renders/11982.png b/imgs/renders/11982.png deleted file mode 100644 index 78454722f..000000000 Binary files a/imgs/renders/11982.png and /dev/null differ diff --git a/imgs/renders/11985.png b/imgs/renders/11985.png index f185b78d4..4eee6f035 100644 Binary files a/imgs/renders/11985.png and b/imgs/renders/11985.png differ diff --git a/imgs/renders/11987.png b/imgs/renders/11987.png index 266c57e49..82604748e 100644 Binary files a/imgs/renders/11987.png and b/imgs/renders/11987.png differ diff --git a/imgs/renders/11989.png b/imgs/renders/11989.png index 971201ec4..6b983eb2d 100644 Binary files a/imgs/renders/11989.png and b/imgs/renders/11989.png differ diff --git a/imgs/renders/11991.png b/imgs/renders/11991.png deleted file mode 100644 index 22f78ce6e..000000000 Binary files a/imgs/renders/11991.png and /dev/null differ diff --git a/imgs/renders/11993.png b/imgs/renders/11993.png index 63d292a2a..77d765dd1 100644 Binary files a/imgs/renders/11993.png and b/imgs/renders/11993.png differ diff --git a/imgs/renders/11995.png b/imgs/renders/11995.png index f92a4383f..ff2f6fa30 100644 Binary files a/imgs/renders/11995.png and b/imgs/renders/11995.png differ diff --git a/imgs/renders/11997.png b/imgs/renders/11997.png deleted file mode 100644 index edc073ccc..000000000 Binary files a/imgs/renders/11997.png and /dev/null differ diff --git a/imgs/renders/11999.png b/imgs/renders/11999.png index f0fcd725b..4dc9a2922 100644 Binary files a/imgs/renders/11999.png and b/imgs/renders/11999.png differ diff --git a/imgs/renders/12003.png b/imgs/renders/12003.png index b7e755603..a9d1d13db 100644 Binary files a/imgs/renders/12003.png and b/imgs/renders/12003.png differ diff --git a/imgs/renders/12005.png b/imgs/renders/12005.png index 19beded43..ee62f7a0e 100644 Binary files a/imgs/renders/12005.png and b/imgs/renders/12005.png differ diff --git a/imgs/renders/12007.png b/imgs/renders/12007.png deleted file mode 100644 index 46a0d93f4..000000000 Binary files a/imgs/renders/12007.png and /dev/null differ diff --git a/imgs/renders/12009.png b/imgs/renders/12009.png deleted file mode 100644 index a8c90f71e..000000000 Binary files a/imgs/renders/12009.png and /dev/null differ diff --git a/imgs/renders/12011.png b/imgs/renders/12011.png index d26a22f33..a98fb65eb 100644 Binary files a/imgs/renders/12011.png and b/imgs/renders/12011.png differ diff --git a/imgs/renders/12013.png b/imgs/renders/12013.png index 2ed7ea7e3..6d35410fe 100644 Binary files a/imgs/renders/12013.png and b/imgs/renders/12013.png differ diff --git a/imgs/renders/12015.png b/imgs/renders/12015.png index 064cd2551..e3d859413 100644 Binary files a/imgs/renders/12015.png and b/imgs/renders/12015.png differ diff --git a/imgs/renders/12017.png b/imgs/renders/12017.png index b239b1460..fd1375e90 100644 Binary files a/imgs/renders/12017.png and b/imgs/renders/12017.png differ diff --git a/imgs/renders/12019.png b/imgs/renders/12019.png index 22fa65e7f..00e393ff8 100644 Binary files a/imgs/renders/12019.png and b/imgs/renders/12019.png differ diff --git a/imgs/renders/12021.png b/imgs/renders/12021.png index 7d1b318a9..b72b6c3f2 100644 Binary files a/imgs/renders/12021.png and b/imgs/renders/12021.png differ diff --git a/imgs/renders/12023.png b/imgs/renders/12023.png index 02c7b4669..ebeb8aaee 100644 Binary files a/imgs/renders/12023.png and b/imgs/renders/12023.png differ diff --git a/imgs/renders/12030.png b/imgs/renders/12030.png deleted file mode 100644 index cf75b3dac..000000000 Binary files a/imgs/renders/12030.png and /dev/null differ diff --git a/imgs/renders/12032.png b/imgs/renders/12032.png index d800398eb..4bd038a26 100644 Binary files a/imgs/renders/12032.png and b/imgs/renders/12032.png differ diff --git a/imgs/renders/12034.png b/imgs/renders/12034.png index 9a334dc6d..4a2a30d8b 100644 Binary files a/imgs/renders/12034.png and b/imgs/renders/12034.png differ diff --git a/imgs/renders/12036.png b/imgs/renders/12036.png deleted file mode 100644 index 6682629ad..000000000 Binary files a/imgs/renders/12036.png and /dev/null differ diff --git a/imgs/renders/12038.png b/imgs/renders/12038.png index b33de0aa6..25933035a 100644 Binary files a/imgs/renders/12038.png and b/imgs/renders/12038.png differ diff --git a/imgs/renders/12040.png b/imgs/renders/12040.png deleted file mode 100644 index f0f8578a1..000000000 Binary files a/imgs/renders/12040.png and /dev/null differ diff --git a/imgs/renders/12042.png b/imgs/renders/12042.png index 327cc470a..bf089ad01 100644 Binary files a/imgs/renders/12042.png and b/imgs/renders/12042.png differ diff --git a/imgs/renders/12044.png b/imgs/renders/12044.png index bba748dea..728d23d47 100644 Binary files a/imgs/renders/12044.png and b/imgs/renders/12044.png differ diff --git a/imgs/renders/1233.png b/imgs/renders/1233.png deleted file mode 100644 index 5571ab305..000000000 Binary files a/imgs/renders/1233.png and /dev/null differ diff --git a/imgs/renders/12403.png b/imgs/renders/12403.png deleted file mode 100644 index f73c1b861..000000000 Binary files a/imgs/renders/12403.png and /dev/null differ diff --git a/imgs/renders/12729.png b/imgs/renders/12729.png index dacd1ff55..a61153fbb 100644 Binary files a/imgs/renders/12729.png and b/imgs/renders/12729.png differ diff --git a/imgs/renders/12731.png b/imgs/renders/12731.png index b19260d1c..dff2c2cf5 100644 Binary files a/imgs/renders/12731.png and b/imgs/renders/12731.png differ diff --git a/imgs/renders/12733.png b/imgs/renders/12733.png index 97e73bae7..875263a31 100644 Binary files a/imgs/renders/12733.png and b/imgs/renders/12733.png differ diff --git a/imgs/renders/12735.png b/imgs/renders/12735.png index 96364a710..431390131 100644 Binary files a/imgs/renders/12735.png and b/imgs/renders/12735.png differ diff --git a/imgs/renders/12743.png b/imgs/renders/12743.png index 0e3cb73c4..a7d2d572f 100644 Binary files a/imgs/renders/12743.png and b/imgs/renders/12743.png differ diff --git a/imgs/renders/12745.png b/imgs/renders/12745.png index 1c0162e20..183c134eb 100644 Binary files a/imgs/renders/12745.png and b/imgs/renders/12745.png differ diff --git a/imgs/renders/12747.png b/imgs/renders/12747.png index 082fc70ca..47780e28d 100644 Binary files a/imgs/renders/12747.png and b/imgs/renders/12747.png differ diff --git a/imgs/renders/12753.png b/imgs/renders/12753.png index 68f28f2df..1dbfe679b 100644 Binary files a/imgs/renders/12753.png and b/imgs/renders/12753.png differ diff --git a/imgs/renders/13202.png b/imgs/renders/13202.png index bd956be55..0cb36beca 100644 Binary files a/imgs/renders/13202.png and b/imgs/renders/13202.png differ diff --git a/imgs/renders/16227.png b/imgs/renders/16227.png index 52a827ad2..4a8b68874 100644 Binary files a/imgs/renders/16227.png and b/imgs/renders/16227.png differ diff --git a/imgs/renders/16229.png b/imgs/renders/16229.png index 8537b5ed4..8f34313ab 100644 Binary files a/imgs/renders/16229.png and b/imgs/renders/16229.png differ diff --git a/imgs/renders/16231.png b/imgs/renders/16231.png index abefbefcf..ec96c2524 100644 Binary files a/imgs/renders/16231.png and b/imgs/renders/16231.png differ diff --git a/imgs/renders/16233.png b/imgs/renders/16233.png index d89611a99..0824197c1 100644 Binary files a/imgs/renders/16233.png and b/imgs/renders/16233.png differ diff --git a/imgs/renders/16236.png b/imgs/renders/16236.png index f137947e7..e2dc3ef37 100644 Binary files a/imgs/renders/16236.png and b/imgs/renders/16236.png differ diff --git a/imgs/renders/16238.png b/imgs/renders/16238.png index 27beb9d69..885beef26 100644 Binary files a/imgs/renders/16238.png and b/imgs/renders/16238.png differ diff --git a/imgs/renders/16240.png b/imgs/renders/16240.png index 643375439..61565d129 100644 Binary files a/imgs/renders/16240.png and b/imgs/renders/16240.png differ diff --git a/imgs/renders/16242.png b/imgs/renders/16242.png index 31a7676ef..807c78a39 100644 Binary files a/imgs/renders/16242.png and b/imgs/renders/16242.png differ diff --git a/imgs/renders/17360.png b/imgs/renders/17360.png deleted file mode 100644 index 27e275348..000000000 Binary files a/imgs/renders/17360.png and /dev/null differ diff --git a/imgs/renders/17476.png b/imgs/renders/17476.png index 22ad9a0dd..f71ab37be 100644 Binary files a/imgs/renders/17476.png and b/imgs/renders/17476.png differ diff --git a/imgs/renders/17478.png b/imgs/renders/17478.png index 1f80ed572..92f20b6ea 100644 Binary files a/imgs/renders/17478.png and b/imgs/renders/17478.png differ diff --git a/imgs/renders/17480.png b/imgs/renders/17480.png index 643f9b00d..b5d38deb4 100644 Binary files a/imgs/renders/17480.png and b/imgs/renders/17480.png differ diff --git a/imgs/renders/17619.png b/imgs/renders/17619.png index a3cf599bc..a1cf3a992 100644 Binary files a/imgs/renders/17619.png and b/imgs/renders/17619.png differ diff --git a/imgs/renders/17634.png b/imgs/renders/17634.png index 1e775e9e3..175f41be8 100644 Binary files a/imgs/renders/17634.png and b/imgs/renders/17634.png differ diff --git a/imgs/renders/17636.png b/imgs/renders/17636.png index f495bfdcb..2ba2b65f8 100644 Binary files a/imgs/renders/17636.png and b/imgs/renders/17636.png differ diff --git a/imgs/renders/17703.png b/imgs/renders/17703.png index 9721d40b6..9713d4594 100644 Binary files a/imgs/renders/17703.png and b/imgs/renders/17703.png differ diff --git a/imgs/renders/17705.png b/imgs/renders/17705.png deleted file mode 100644 index edaa2ca33..000000000 Binary files a/imgs/renders/17705.png and /dev/null differ diff --git a/imgs/renders/17707.png b/imgs/renders/17707.png deleted file mode 100644 index 9d7415698..000000000 Binary files a/imgs/renders/17707.png and /dev/null differ diff --git a/imgs/renders/17709.png b/imgs/renders/17709.png index b52de9801..a863c5ca6 100644 Binary files a/imgs/renders/17709.png and b/imgs/renders/17709.png differ diff --git a/imgs/renders/17711.png b/imgs/renders/17711.png deleted file mode 100644 index 069f476fd..000000000 Binary files a/imgs/renders/17711.png and /dev/null differ diff --git a/imgs/renders/17713.png b/imgs/renders/17713.png index 9780131a9..6997f8389 100644 Binary files a/imgs/renders/17713.png and b/imgs/renders/17713.png differ diff --git a/imgs/renders/17715.png b/imgs/renders/17715.png index 97197a14a..6892e2318 100644 Binary files a/imgs/renders/17715.png and b/imgs/renders/17715.png differ diff --git a/imgs/renders/17718.png b/imgs/renders/17718.png index 54e551920..3f4f8a7e3 100644 Binary files a/imgs/renders/17718.png and b/imgs/renders/17718.png differ diff --git a/imgs/renders/17720.png b/imgs/renders/17720.png index 6072b7d4d..6aa21b7d0 100644 Binary files a/imgs/renders/17720.png and b/imgs/renders/17720.png differ diff --git a/imgs/renders/17722.png b/imgs/renders/17722.png index 6830c650c..ef45cc709 100644 Binary files a/imgs/renders/17722.png and b/imgs/renders/17722.png differ diff --git a/imgs/renders/17724.png b/imgs/renders/17724.png deleted file mode 100644 index a7d2c030e..000000000 Binary files a/imgs/renders/17724.png and /dev/null differ diff --git a/imgs/renders/17726.png b/imgs/renders/17726.png index d9e0290e5..2cf4932c2 100644 Binary files a/imgs/renders/17726.png and b/imgs/renders/17726.png differ diff --git a/imgs/renders/17728.png b/imgs/renders/17728.png index bff78c72b..3b0c49399 100644 Binary files a/imgs/renders/17728.png and b/imgs/renders/17728.png differ diff --git a/imgs/renders/17730.png b/imgs/renders/17730.png deleted file mode 100644 index d6ecda179..000000000 Binary files a/imgs/renders/17730.png and /dev/null differ diff --git a/imgs/renders/17732.png b/imgs/renders/17732.png index a53ebf73f..dedc5483f 100644 Binary files a/imgs/renders/17732.png and b/imgs/renders/17732.png differ diff --git a/imgs/renders/17734.png b/imgs/renders/17734.png deleted file mode 100644 index a2908754e..000000000 Binary files a/imgs/renders/17734.png and /dev/null differ diff --git a/imgs/renders/17736.png b/imgs/renders/17736.png index 6342411ee..5f022ee08 100644 Binary files a/imgs/renders/17736.png and b/imgs/renders/17736.png differ diff --git a/imgs/renders/17738.png b/imgs/renders/17738.png index d69a14222..b0deb515c 100644 Binary files a/imgs/renders/17738.png and b/imgs/renders/17738.png differ diff --git a/imgs/renders/17740.png b/imgs/renders/17740.png index adf68ceca..2e88144b3 100644 Binary files a/imgs/renders/17740.png and b/imgs/renders/17740.png differ diff --git a/imgs/renders/17812.png b/imgs/renders/17812.png index 47de84467..7cc6847cc 100644 Binary files a/imgs/renders/17812.png and b/imgs/renders/17812.png differ diff --git a/imgs/renders/17841.png b/imgs/renders/17841.png index 79c2bed6e..6e45c0c7e 100644 Binary files a/imgs/renders/17841.png and b/imgs/renders/17841.png differ diff --git a/imgs/renders/17843.png b/imgs/renders/17843.png index f5ff0422d..97912d02e 100644 Binary files a/imgs/renders/17843.png and b/imgs/renders/17843.png differ diff --git a/imgs/renders/17918.png b/imgs/renders/17918.png index 6c5cd2d9f..ce7e07fdc 100644 Binary files a/imgs/renders/17918.png and b/imgs/renders/17918.png differ diff --git a/imgs/renders/17920.png b/imgs/renders/17920.png index 070048992..979afd242 100644 Binary files a/imgs/renders/17920.png and b/imgs/renders/17920.png differ diff --git a/imgs/renders/17922.png b/imgs/renders/17922.png index 91e5386ae..9019b8edc 100644 Binary files a/imgs/renders/17922.png and b/imgs/renders/17922.png differ diff --git a/imgs/renders/17924.png b/imgs/renders/17924.png index 1ed96294a..84e647803 100644 Binary files a/imgs/renders/17924.png and b/imgs/renders/17924.png differ diff --git a/imgs/renders/17926.png b/imgs/renders/17926.png index 997c3af60..44a45b729 100644 Binary files a/imgs/renders/17926.png and b/imgs/renders/17926.png differ diff --git a/imgs/renders/17928.png b/imgs/renders/17928.png index c2862e5af..b840c14ec 100644 Binary files a/imgs/renders/17928.png and b/imgs/renders/17928.png differ diff --git a/imgs/renders/17930.png b/imgs/renders/17930.png index ea9bb55e5..0d8ad8fb7 100644 Binary files a/imgs/renders/17930.png and b/imgs/renders/17930.png differ diff --git a/imgs/renders/17932.png b/imgs/renders/17932.png index 1ddd7aac8..9d001d0c1 100644 Binary files a/imgs/renders/17932.png and b/imgs/renders/17932.png differ diff --git a/imgs/renders/1896.png b/imgs/renders/1896.png deleted file mode 100644 index 56879985f..000000000 Binary files a/imgs/renders/1896.png and /dev/null differ diff --git a/imgs/renders/1898.png b/imgs/renders/1898.png deleted file mode 100644 index 8808a36ce..000000000 Binary files a/imgs/renders/1898.png and /dev/null differ diff --git a/imgs/renders/1900.png b/imgs/renders/1900.png deleted file mode 100644 index ad985fffd..000000000 Binary files a/imgs/renders/1900.png and /dev/null differ diff --git a/imgs/renders/1902.png b/imgs/renders/1902.png deleted file mode 100644 index 50ef3dd5a..000000000 Binary files a/imgs/renders/1902.png and /dev/null differ diff --git a/imgs/renders/1904.png b/imgs/renders/1904.png deleted file mode 100644 index 854490d37..000000000 Binary files a/imgs/renders/1904.png and /dev/null differ diff --git a/imgs/renders/1906.png b/imgs/renders/1906.png deleted file mode 100644 index aae52b44d..000000000 Binary files a/imgs/renders/1906.png and /dev/null differ diff --git a/imgs/renders/1908.png b/imgs/renders/1908.png deleted file mode 100644 index 1ed1034b7..000000000 Binary files a/imgs/renders/1908.png and /dev/null differ diff --git a/imgs/renders/1910.png b/imgs/renders/1910.png deleted file mode 100644 index cbc3ceedc..000000000 Binary files a/imgs/renders/1910.png and /dev/null differ diff --git a/imgs/renders/1912.png b/imgs/renders/1912.png deleted file mode 100644 index 8614b1064..000000000 Binary files a/imgs/renders/1912.png and /dev/null differ diff --git a/imgs/renders/1914.png b/imgs/renders/1914.png deleted file mode 100644 index e3d48b48d..000000000 Binary files a/imgs/renders/1914.png and /dev/null differ diff --git a/imgs/renders/1916.png b/imgs/renders/1916.png deleted file mode 100644 index 81f3e3824..000000000 Binary files a/imgs/renders/1916.png and /dev/null differ diff --git a/imgs/renders/1918.png b/imgs/renders/1918.png deleted file mode 100644 index 93b096876..000000000 Binary files a/imgs/renders/1918.png and /dev/null differ diff --git a/imgs/renders/1944.png b/imgs/renders/1944.png index 9c3fa8fdd..36ff10ad4 100644 Binary files a/imgs/renders/1944.png and b/imgs/renders/1944.png differ diff --git a/imgs/renders/19720.png b/imgs/renders/19720.png index 2a9dbe4e2..0ffcdbab9 100644 Binary files a/imgs/renders/19720.png and b/imgs/renders/19720.png differ diff --git a/imgs/renders/19722.png b/imgs/renders/19722.png index b907e202e..55d8cefd9 100644 Binary files a/imgs/renders/19722.png and b/imgs/renders/19722.png differ diff --git a/imgs/renders/19724.png b/imgs/renders/19724.png index 3b4010a5f..de93acd6e 100644 Binary files a/imgs/renders/19724.png and b/imgs/renders/19724.png differ diff --git a/imgs/renders/19726.png b/imgs/renders/19726.png index 7b7793ef1..01706208f 100644 Binary files a/imgs/renders/19726.png and b/imgs/renders/19726.png differ diff --git a/imgs/renders/19744.png b/imgs/renders/19744.png index 2f436000a..3dae640ae 100644 Binary files a/imgs/renders/19744.png and b/imgs/renders/19744.png differ diff --git a/imgs/renders/19770.png b/imgs/renders/19770.png deleted file mode 100644 index 724cb2468..000000000 Binary files a/imgs/renders/19770.png and /dev/null differ diff --git a/imgs/renders/2006.png b/imgs/renders/2006.png index af886866f..b1377357b 100644 Binary files a/imgs/renders/2006.png and b/imgs/renders/2006.png differ diff --git a/imgs/renders/20067.png b/imgs/renders/20067.png deleted file mode 100644 index 7127a29fe..000000000 Binary files a/imgs/renders/20067.png and /dev/null differ diff --git a/imgs/renders/20122.png b/imgs/renders/20122.png deleted file mode 100644 index c06ce933f..000000000 Binary files a/imgs/renders/20122.png and /dev/null differ diff --git a/imgs/renders/20125.png b/imgs/renders/20125.png index e9ed3cff4..554e6a17c 100644 Binary files a/imgs/renders/20125.png and b/imgs/renders/20125.png differ diff --git a/imgs/renders/20183.png b/imgs/renders/20183.png index fa7cddfa6..913c105c4 100644 Binary files a/imgs/renders/20183.png and b/imgs/renders/20183.png differ diff --git a/imgs/renders/20185.png b/imgs/renders/20185.png index dc373bee8..542f79e67 100644 Binary files a/imgs/renders/20185.png and b/imgs/renders/20185.png differ diff --git a/imgs/renders/20187.png b/imgs/renders/20187.png index 25cac2188..c8633ab8c 100644 Binary files a/imgs/renders/20187.png and b/imgs/renders/20187.png differ diff --git a/imgs/renders/20189.png b/imgs/renders/20189.png index 3e9889460..3c7600a96 100644 Binary files a/imgs/renders/20189.png and b/imgs/renders/20189.png differ diff --git a/imgs/renders/2078.png b/imgs/renders/2078.png index 802ade32c..9c589200d 100644 Binary files a/imgs/renders/2078.png and b/imgs/renders/2078.png differ diff --git a/imgs/renders/21097.png b/imgs/renders/21097.png index 3b5e962e6..ba94fbcdb 100644 Binary files a/imgs/renders/21097.png and b/imgs/renders/21097.png differ diff --git a/imgs/renders/2161.png b/imgs/renders/2161.png index 7cadd4ed0..3b7357aa5 100644 Binary files a/imgs/renders/2161.png and b/imgs/renders/2161.png differ diff --git a/imgs/renders/21628.png b/imgs/renders/21628.png index 6dfb79cc5..e9f1afb63 100644 Binary files a/imgs/renders/21628.png and b/imgs/renders/21628.png differ diff --git a/imgs/renders/2164.png b/imgs/renders/2164.png deleted file mode 100644 index 2533df2b5..000000000 Binary files a/imgs/renders/2164.png and /dev/null differ diff --git a/imgs/renders/2166.png b/imgs/renders/2166.png deleted file mode 100644 index 1b48fd4c2..000000000 Binary files a/imgs/renders/2166.png and /dev/null differ diff --git a/imgs/renders/2168.png b/imgs/renders/2168.png deleted file mode 100644 index a814bf6a6..000000000 Binary files a/imgs/renders/2168.png and /dev/null differ diff --git a/imgs/renders/22426.png b/imgs/renders/22426.png deleted file mode 100644 index 463dfa4ff..000000000 Binary files a/imgs/renders/22426.png and /dev/null differ diff --git a/imgs/renders/22428.png b/imgs/renders/22428.png index 090ce18dc..71aaf8f4e 100644 Binary files a/imgs/renders/22428.png and b/imgs/renders/22428.png differ diff --git a/imgs/renders/22430.png b/imgs/renders/22430.png index fbb02e868..af78fde73 100644 Binary files a/imgs/renders/22430.png and b/imgs/renders/22430.png differ diff --git a/imgs/renders/22432.png b/imgs/renders/22432.png deleted file mode 100644 index 90ec63b8a..000000000 Binary files a/imgs/renders/22432.png and /dev/null differ diff --git a/imgs/renders/22434.png b/imgs/renders/22434.png deleted file mode 100644 index a5f855b67..000000000 Binary files a/imgs/renders/22434.png and /dev/null differ diff --git a/imgs/renders/22436.png b/imgs/renders/22436.png index 2e46a25e1..a66a042fc 100644 Binary files a/imgs/renders/22436.png and b/imgs/renders/22436.png differ diff --git a/imgs/renders/22438.png b/imgs/renders/22438.png deleted file mode 100644 index d7f1ec5fa..000000000 Binary files a/imgs/renders/22438.png and /dev/null differ diff --git a/imgs/renders/22440.png b/imgs/renders/22440.png index 2e22ab1a4..89c553aa8 100644 Binary files a/imgs/renders/22440.png and b/imgs/renders/22440.png differ diff --git a/imgs/renders/22442.png b/imgs/renders/22442.png index f5cf2aecb..6e04a38e5 100644 Binary files a/imgs/renders/22442.png and b/imgs/renders/22442.png differ diff --git a/imgs/renders/22444.png b/imgs/renders/22444.png index a43e3bef9..53e45c0b4 100644 Binary files a/imgs/renders/22444.png and b/imgs/renders/22444.png differ diff --git a/imgs/renders/22446.png b/imgs/renders/22446.png index 0a187659c..b024e7f66 100644 Binary files a/imgs/renders/22446.png and b/imgs/renders/22446.png differ diff --git a/imgs/renders/22448.png b/imgs/renders/22448.png index d20f90967..3d1530008 100644 Binary files a/imgs/renders/22448.png and b/imgs/renders/22448.png differ diff --git a/imgs/renders/22450.png b/imgs/renders/22450.png deleted file mode 100644 index 307648fc0..000000000 Binary files a/imgs/renders/22450.png and /dev/null differ diff --git a/imgs/renders/22452.png b/imgs/renders/22452.png index bdc6660ca..9424b7f8d 100644 Binary files a/imgs/renders/22452.png and b/imgs/renders/22452.png differ diff --git a/imgs/renders/22454.png b/imgs/renders/22454.png deleted file mode 100644 index c605136c7..000000000 Binary files a/imgs/renders/22454.png and /dev/null differ diff --git a/imgs/renders/22456.png b/imgs/renders/22456.png index 6b0947f3f..7142c8782 100644 Binary files a/imgs/renders/22456.png and b/imgs/renders/22456.png differ diff --git a/imgs/renders/22458.png b/imgs/renders/22458.png deleted file mode 100644 index bf944e374..000000000 Binary files a/imgs/renders/22458.png and /dev/null differ diff --git a/imgs/renders/22460.png b/imgs/renders/22460.png index 2c112f724..92dbd2e99 100644 Binary files a/imgs/renders/22460.png and b/imgs/renders/22460.png differ diff --git a/imgs/renders/22462.png b/imgs/renders/22462.png deleted file mode 100644 index 40380580b..000000000 Binary files a/imgs/renders/22462.png and /dev/null differ diff --git a/imgs/renders/22464.png b/imgs/renders/22464.png index 2270c734a..3158871d7 100644 Binary files a/imgs/renders/22464.png and b/imgs/renders/22464.png differ diff --git a/imgs/renders/22466.png b/imgs/renders/22466.png index 50f6a0fb6..7b9e14b5c 100644 Binary files a/imgs/renders/22466.png and b/imgs/renders/22466.png differ diff --git a/imgs/renders/22468.png b/imgs/renders/22468.png index 1ed25f229..d27945674 100644 Binary files a/imgs/renders/22468.png and b/imgs/renders/22468.png differ diff --git a/imgs/renders/22470.png b/imgs/renders/22470.png index 2a97da1bd..2500548ad 100644 Binary files a/imgs/renders/22470.png and b/imgs/renders/22470.png differ diff --git a/imgs/renders/22472.png b/imgs/renders/22472.png deleted file mode 100644 index 2c535a3c7..000000000 Binary files a/imgs/renders/22472.png and /dev/null differ diff --git a/imgs/renders/22474.png b/imgs/renders/22474.png index 609037a0d..dabff8d17 100644 Binary files a/imgs/renders/22474.png and b/imgs/renders/22474.png differ diff --git a/imgs/renders/22544.png b/imgs/renders/22544.png index e076d426f..c7accef7b 100644 Binary files a/imgs/renders/22544.png and b/imgs/renders/22544.png differ diff --git a/imgs/renders/22546.png b/imgs/renders/22546.png index bdab522f4..63d5120a1 100644 Binary files a/imgs/renders/22546.png and b/imgs/renders/22546.png differ diff --git a/imgs/renders/22548.png b/imgs/renders/22548.png index 205af627c..a784a7952 100644 Binary files a/imgs/renders/22548.png and b/imgs/renders/22548.png differ diff --git a/imgs/renders/22579.png b/imgs/renders/22579.png deleted file mode 100644 index cd7299c4e..000000000 Binary files a/imgs/renders/22579.png and /dev/null differ diff --git a/imgs/renders/22852.png b/imgs/renders/22852.png index d33f80a61..49d66346d 100644 Binary files a/imgs/renders/22852.png and b/imgs/renders/22852.png differ diff --git a/imgs/renders/23693.png b/imgs/renders/23693.png deleted file mode 100644 index 0725a9f66..000000000 Binary files a/imgs/renders/23693.png and /dev/null differ diff --git a/imgs/renders/23757.png b/imgs/renders/23757.png index 493221769..dd854d4df 100644 Binary files a/imgs/renders/23757.png and b/imgs/renders/23757.png differ diff --git a/imgs/renders/23773.png b/imgs/renders/23773.png index 9fd0d2137..f318658bd 100644 Binary files a/imgs/renders/23773.png and b/imgs/renders/23773.png differ diff --git a/imgs/renders/23911.png b/imgs/renders/23911.png index f2bdf4452..8472b288c 100644 Binary files a/imgs/renders/23911.png and b/imgs/renders/23911.png differ diff --git a/imgs/renders/23913.png b/imgs/renders/23913.png index e0466778a..cfddcdc15 100644 Binary files a/imgs/renders/23913.png and b/imgs/renders/23913.png differ diff --git a/imgs/renders/23915.png b/imgs/renders/23915.png index ca7f302ef..5ae1caf44 100644 Binary files a/imgs/renders/23915.png and b/imgs/renders/23915.png differ diff --git a/imgs/renders/23917.png b/imgs/renders/23917.png index b18d375e9..714794ae5 100644 Binary files a/imgs/renders/23917.png and b/imgs/renders/23917.png differ diff --git a/imgs/renders/23919.png b/imgs/renders/23919.png index ea97e1801..74e61caab 100644 Binary files a/imgs/renders/23919.png and b/imgs/renders/23919.png differ diff --git a/imgs/renders/24448.png b/imgs/renders/24448.png deleted file mode 100644 index ca5af11f8..000000000 Binary files a/imgs/renders/24448.png and /dev/null differ diff --git a/imgs/renders/24483.png b/imgs/renders/24483.png index 0aecf7da3..007b6da8e 100644 Binary files a/imgs/renders/24483.png and b/imgs/renders/24483.png differ diff --git a/imgs/renders/24688.png b/imgs/renders/24688.png index 3727722bc..6376a4d6d 100644 Binary files a/imgs/renders/24688.png and b/imgs/renders/24688.png differ diff --git a/imgs/renders/24690.png b/imgs/renders/24690.png index ade11987a..306a640d0 100644 Binary files a/imgs/renders/24690.png and b/imgs/renders/24690.png differ diff --git a/imgs/renders/24692.png b/imgs/renders/24692.png index 6cbbe514e..d91b62cbb 100644 Binary files a/imgs/renders/24692.png and b/imgs/renders/24692.png differ diff --git a/imgs/renders/24694.png b/imgs/renders/24694.png index 5ee0176df..d8012a4c6 100644 Binary files a/imgs/renders/24694.png and b/imgs/renders/24694.png differ diff --git a/imgs/renders/24696.png b/imgs/renders/24696.png index 00e05c3d1..b01590821 100644 Binary files a/imgs/renders/24696.png and b/imgs/renders/24696.png differ diff --git a/imgs/renders/24698.png b/imgs/renders/24698.png index 9e06f2e71..a8c4c5cc0 100644 Binary files a/imgs/renders/24698.png and b/imgs/renders/24698.png differ diff --git a/imgs/renders/24700.png b/imgs/renders/24700.png index 96ba886a8..64a48a852 100644 Binary files a/imgs/renders/24700.png and b/imgs/renders/24700.png differ diff --git a/imgs/renders/24702.png b/imgs/renders/24702.png index ce8fc5f7c..1993c8469 100644 Binary files a/imgs/renders/24702.png and b/imgs/renders/24702.png differ diff --git a/imgs/renders/25426.png b/imgs/renders/25426.png deleted file mode 100644 index 3d09ad258..000000000 Binary files a/imgs/renders/25426.png and /dev/null differ diff --git a/imgs/renders/25560.png b/imgs/renders/25560.png deleted file mode 100644 index 8ee2185a9..000000000 Binary files a/imgs/renders/25560.png and /dev/null differ diff --git a/imgs/renders/26840.png b/imgs/renders/26840.png index 64299f382..aecd27c78 100644 Binary files a/imgs/renders/26840.png and b/imgs/renders/26840.png differ diff --git a/imgs/renders/26842.png b/imgs/renders/26842.png index 3bd5ff519..ae240f33e 100644 Binary files a/imgs/renders/26842.png and b/imgs/renders/26842.png differ diff --git a/imgs/renders/26872.png b/imgs/renders/26872.png deleted file mode 100644 index d5db21061..000000000 Binary files a/imgs/renders/26872.png and /dev/null differ diff --git a/imgs/renders/26874.png b/imgs/renders/26874.png deleted file mode 100644 index a4e487dae..000000000 Binary files a/imgs/renders/26874.png and /dev/null differ diff --git a/imgs/renders/26876.png b/imgs/renders/26876.png deleted file mode 100644 index 4df3f95d3..000000000 Binary files a/imgs/renders/26876.png and /dev/null differ diff --git a/imgs/renders/27299.png b/imgs/renders/27299.png deleted file mode 100644 index 472210e7a..000000000 Binary files a/imgs/renders/27299.png and /dev/null differ diff --git a/imgs/renders/27301.png b/imgs/renders/27301.png deleted file mode 100644 index 9fa02961e..000000000 Binary files a/imgs/renders/27301.png and /dev/null differ diff --git a/imgs/renders/27303.png b/imgs/renders/27303.png deleted file mode 100644 index b0e1d2d6a..000000000 Binary files a/imgs/renders/27303.png and /dev/null differ diff --git a/imgs/renders/27305.png b/imgs/renders/27305.png deleted file mode 100644 index 2a3ec2fe7..000000000 Binary files a/imgs/renders/27305.png and /dev/null differ diff --git a/imgs/renders/28310.png b/imgs/renders/28310.png deleted file mode 100644 index a0236b7f8..000000000 Binary files a/imgs/renders/28310.png and /dev/null differ diff --git a/imgs/renders/2834.png b/imgs/renders/2834.png index 6521eb4bb..b9dcb96e3 100644 Binary files a/imgs/renders/2834.png and b/imgs/renders/2834.png differ diff --git a/imgs/renders/28352.png b/imgs/renders/28352.png index 07299ca47..b4991c240 100644 Binary files a/imgs/renders/28352.png and b/imgs/renders/28352.png differ diff --git a/imgs/renders/2836.png b/imgs/renders/2836.png index 5de0ff9e1..6a6f42330 100644 Binary files a/imgs/renders/2836.png and b/imgs/renders/2836.png differ diff --git a/imgs/renders/28606.png b/imgs/renders/28606.png index 38e28eb43..585522404 100644 Binary files a/imgs/renders/28606.png and b/imgs/renders/28606.png differ diff --git a/imgs/renders/2863.png b/imgs/renders/2863.png index 5bff668ea..04ff60da0 100644 Binary files a/imgs/renders/2863.png and b/imgs/renders/2863.png differ diff --git a/imgs/renders/28659.png b/imgs/renders/28659.png index d1b3bf94f..61f8fdf30 100644 Binary files a/imgs/renders/28659.png and b/imgs/renders/28659.png differ diff --git a/imgs/renders/28661.png b/imgs/renders/28661.png index 9795bc555..d5dc3e86f 100644 Binary files a/imgs/renders/28661.png and b/imgs/renders/28661.png differ diff --git a/imgs/renders/28665.png b/imgs/renders/28665.png index 924573d58..ce1b9b0a3 100644 Binary files a/imgs/renders/28665.png and b/imgs/renders/28665.png differ diff --git a/imgs/renders/28710.png b/imgs/renders/28710.png index 7733623fd..44e2fd2f2 100644 Binary files a/imgs/renders/28710.png and b/imgs/renders/28710.png differ diff --git a/imgs/renders/28824.png b/imgs/renders/28824.png deleted file mode 100644 index f8c159336..000000000 Binary files a/imgs/renders/28824.png and /dev/null differ diff --git a/imgs/renders/28844.png b/imgs/renders/28844.png index 66725befd..60df79006 100644 Binary files a/imgs/renders/28844.png and b/imgs/renders/28844.png differ diff --git a/imgs/renders/28846.png b/imgs/renders/28846.png index 2899ac977..31898e2a3 100644 Binary files a/imgs/renders/28846.png and b/imgs/renders/28846.png differ diff --git a/imgs/renders/28848.png b/imgs/renders/28848.png index c1e1dee52..f50843aa5 100644 Binary files a/imgs/renders/28848.png and b/imgs/renders/28848.png differ diff --git a/imgs/renders/28850.png b/imgs/renders/28850.png index 1699bb34d..6bb510dce 100644 Binary files a/imgs/renders/28850.png and b/imgs/renders/28850.png differ diff --git a/imgs/renders/29248.png b/imgs/renders/29248.png index ec5b084e7..64af89c39 100644 Binary files a/imgs/renders/29248.png and b/imgs/renders/29248.png differ diff --git a/imgs/renders/29266.png b/imgs/renders/29266.png index 4af4dab00..073a8955d 100644 Binary files a/imgs/renders/29266.png and b/imgs/renders/29266.png differ diff --git a/imgs/renders/29328.png b/imgs/renders/29328.png deleted file mode 100644 index 61eb23046..000000000 Binary files a/imgs/renders/29328.png and /dev/null differ diff --git a/imgs/renders/29330.png b/imgs/renders/29330.png deleted file mode 100644 index 93095170b..000000000 Binary files a/imgs/renders/29330.png and /dev/null differ diff --git a/imgs/renders/29332.png b/imgs/renders/29332.png deleted file mode 100644 index 6f95ea7ec..000000000 Binary files a/imgs/renders/29332.png and /dev/null differ diff --git a/imgs/renders/29334.png b/imgs/renders/29334.png deleted file mode 100644 index 3768a8239..000000000 Binary files a/imgs/renders/29334.png and /dev/null differ diff --git a/imgs/renders/29336.png b/imgs/renders/29336.png index fe3e143cb..c80a4674a 100644 Binary files a/imgs/renders/29336.png and b/imgs/renders/29336.png differ diff --git a/imgs/renders/29337.png b/imgs/renders/29337.png index fb10739d2..4c58953e7 100644 Binary files a/imgs/renders/29337.png and b/imgs/renders/29337.png differ diff --git a/imgs/renders/29340.png b/imgs/renders/29340.png index e45301331..1879bf84e 100644 Binary files a/imgs/renders/29340.png and b/imgs/renders/29340.png differ diff --git a/imgs/renders/29344.png b/imgs/renders/29344.png index db9d7dd98..b1cc30a56 100644 Binary files a/imgs/renders/29344.png and b/imgs/renders/29344.png differ diff --git a/imgs/renders/2998.png b/imgs/renders/2998.png index e8a952550..94630a292 100644 Binary files a/imgs/renders/2998.png and b/imgs/renders/2998.png differ diff --git a/imgs/renders/29984.png b/imgs/renders/29984.png index 39f7181a0..3a126e25f 100644 Binary files a/imgs/renders/29984.png and b/imgs/renders/29984.png differ diff --git a/imgs/renders/29986.png b/imgs/renders/29986.png index 692156e32..5adfd68e1 100644 Binary files a/imgs/renders/29986.png and b/imgs/renders/29986.png differ diff --git a/imgs/renders/29988.png b/imgs/renders/29988.png index 5db8690a8..5e31d6689 100644 Binary files a/imgs/renders/29988.png and b/imgs/renders/29988.png differ diff --git a/imgs/renders/29990.png b/imgs/renders/29990.png index 7e896b739..529f59377 100644 Binary files a/imgs/renders/29990.png and b/imgs/renders/29990.png differ diff --git a/imgs/renders/30842.png b/imgs/renders/30842.png index c899669dd..2831b8c55 100644 Binary files a/imgs/renders/30842.png and b/imgs/renders/30842.png differ diff --git a/imgs/renders/32207.png b/imgs/renders/32207.png index e716f18c6..240347bd4 100644 Binary files a/imgs/renders/32207.png and b/imgs/renders/32207.png differ diff --git a/imgs/renders/32209.png b/imgs/renders/32209.png index a63206040..38d534a39 100644 Binary files a/imgs/renders/32209.png and b/imgs/renders/32209.png differ diff --git a/imgs/renders/32305.png b/imgs/renders/32305.png index 94159230f..f6d5b9ef3 100644 Binary files a/imgs/renders/32305.png and b/imgs/renders/32305.png differ diff --git a/imgs/renders/32307.png b/imgs/renders/32307.png index 768b306a6..e79bb5c52 100644 Binary files a/imgs/renders/32307.png and b/imgs/renders/32307.png differ diff --git a/imgs/renders/32309.png b/imgs/renders/32309.png index b4c76a4fd..83443e7a6 100644 Binary files a/imgs/renders/32309.png and b/imgs/renders/32309.png differ diff --git a/imgs/renders/32311.png b/imgs/renders/32311.png index c1d42f75a..630fce427 100644 Binary files a/imgs/renders/32311.png and b/imgs/renders/32311.png differ diff --git a/imgs/renders/32788.png b/imgs/renders/32788.png index ba194d5d4..2cdd23f36 100644 Binary files a/imgs/renders/32788.png and b/imgs/renders/32788.png differ diff --git a/imgs/renders/32790.png b/imgs/renders/32790.png index 03c13307d..b38da752c 100644 Binary files a/imgs/renders/32790.png and b/imgs/renders/32790.png differ diff --git a/imgs/renders/32811.png b/imgs/renders/32811.png index 308088b91..56636bd3a 100644 Binary files a/imgs/renders/32811.png and b/imgs/renders/32811.png differ diff --git a/imgs/renders/32840.png b/imgs/renders/32840.png deleted file mode 100644 index f88af5e63..000000000 Binary files a/imgs/renders/32840.png and /dev/null differ diff --git a/imgs/renders/32842.png b/imgs/renders/32842.png deleted file mode 100644 index 793df6054..000000000 Binary files a/imgs/renders/32842.png and /dev/null differ diff --git a/imgs/renders/32844.png b/imgs/renders/32844.png deleted file mode 100644 index 243f17803..000000000 Binary files a/imgs/renders/32844.png and /dev/null differ diff --git a/imgs/renders/32846.png b/imgs/renders/32846.png deleted file mode 100644 index 4d3998a0c..000000000 Binary files a/imgs/renders/32846.png and /dev/null differ diff --git a/imgs/renders/32848.png b/imgs/renders/32848.png deleted file mode 100644 index 8dfb6b407..000000000 Binary files a/imgs/renders/32848.png and /dev/null differ diff --git a/imgs/renders/32872.png b/imgs/renders/32872.png index 7a2b2c94e..cf6607d03 100644 Binary files a/imgs/renders/32872.png and b/imgs/renders/32872.png differ diff --git a/imgs/renders/32874.png b/imgs/renders/32874.png index 27b4d8163..6b7d449a4 100644 Binary files a/imgs/renders/32874.png and b/imgs/renders/32874.png differ diff --git a/imgs/renders/32876.png b/imgs/renders/32876.png index 51d86e566..572a7f3d7 100644 Binary files a/imgs/renders/32876.png and b/imgs/renders/32876.png differ diff --git a/imgs/renders/32878.png b/imgs/renders/32878.png index f10039bfd..4146be95e 100644 Binary files a/imgs/renders/32878.png and b/imgs/renders/32878.png differ diff --git a/imgs/renders/32880.png b/imgs/renders/32880.png index ead70e4dd..356d98c4f 100644 Binary files a/imgs/renders/32880.png and b/imgs/renders/32880.png differ diff --git a/imgs/renders/32983.png b/imgs/renders/32983.png deleted file mode 100644 index 9355c4ae1..000000000 Binary files a/imgs/renders/32983.png and /dev/null differ diff --git a/imgs/renders/32985.png b/imgs/renders/32985.png deleted file mode 100644 index 24627af58..000000000 Binary files a/imgs/renders/32985.png and /dev/null differ diff --git a/imgs/renders/32987.png b/imgs/renders/32987.png deleted file mode 100644 index f7d772e7e..000000000 Binary files a/imgs/renders/32987.png and /dev/null differ diff --git a/imgs/renders/32989.png b/imgs/renders/32989.png deleted file mode 100644 index 442bff292..000000000 Binary files a/imgs/renders/32989.png and /dev/null differ diff --git a/imgs/renders/33079.png b/imgs/renders/33079.png index 7ca9710f3..3db3be1a5 100644 Binary files a/imgs/renders/33079.png and b/imgs/renders/33079.png differ diff --git a/imgs/renders/33081.png b/imgs/renders/33081.png index 17b51be28..bb3a03933 100644 Binary files a/imgs/renders/33081.png and b/imgs/renders/33081.png differ diff --git a/imgs/renders/33083.png b/imgs/renders/33083.png index b3a7c864e..ccba8c16d 100644 Binary files a/imgs/renders/33083.png and b/imgs/renders/33083.png differ diff --git a/imgs/renders/33151.png b/imgs/renders/33151.png index 18c5e8586..4f958d5b4 100644 Binary files a/imgs/renders/33151.png and b/imgs/renders/33151.png differ diff --git a/imgs/renders/33153.png b/imgs/renders/33153.png index 66ca96d61..13f671270 100644 Binary files a/imgs/renders/33153.png and b/imgs/renders/33153.png differ diff --git a/imgs/renders/33155.png b/imgs/renders/33155.png index ee90152b4..5947fd012 100644 Binary files a/imgs/renders/33155.png and b/imgs/renders/33155.png differ diff --git a/imgs/renders/33157.png b/imgs/renders/33157.png index 80c59b942..99a5aa38c 100644 Binary files a/imgs/renders/33157.png and b/imgs/renders/33157.png differ diff --git a/imgs/renders/33395.png b/imgs/renders/33395.png index d3d1842aa..c6bdb66aa 100644 Binary files a/imgs/renders/33395.png and b/imgs/renders/33395.png differ diff --git a/imgs/renders/33397.png b/imgs/renders/33397.png index 8d080a34d..fb5fb512f 100644 Binary files a/imgs/renders/33397.png and b/imgs/renders/33397.png differ diff --git a/imgs/renders/33468.png b/imgs/renders/33468.png index 9b2441964..6606f2c69 100644 Binary files a/imgs/renders/33468.png and b/imgs/renders/33468.png differ diff --git a/imgs/renders/33470.png b/imgs/renders/33470.png index bb2b12e2b..9cca50559 100644 Binary files a/imgs/renders/33470.png and b/imgs/renders/33470.png differ diff --git a/imgs/renders/33472.png b/imgs/renders/33472.png index 56872b5bc..351044eb5 100644 Binary files a/imgs/renders/33472.png and b/imgs/renders/33472.png differ diff --git a/imgs/renders/33513.png b/imgs/renders/33513.png index 8a222041d..15e7c9a17 100644 Binary files a/imgs/renders/33513.png and b/imgs/renders/33513.png differ diff --git a/imgs/renders/33553.png b/imgs/renders/33553.png index 395170c94..19d7dfa45 100644 Binary files a/imgs/renders/33553.png and b/imgs/renders/33553.png differ diff --git a/imgs/renders/33673.png b/imgs/renders/33673.png index 095487d50..c1962ea45 100644 Binary files a/imgs/renders/33673.png and b/imgs/renders/33673.png differ diff --git a/imgs/renders/33675.png b/imgs/renders/33675.png index d79b1f6a9..5b9d7cb13 100644 Binary files a/imgs/renders/33675.png and b/imgs/renders/33675.png differ diff --git a/imgs/renders/33697.png b/imgs/renders/33697.png index 4cb463e67..0e53faa6c 100644 Binary files a/imgs/renders/33697.png and b/imgs/renders/33697.png differ diff --git a/imgs/renders/33816.png b/imgs/renders/33816.png index 8715a5186..f3fd0e670 100644 Binary files a/imgs/renders/33816.png and b/imgs/renders/33816.png differ diff --git a/imgs/renders/33818.png b/imgs/renders/33818.png index 77abade92..7e572efa8 100644 Binary files a/imgs/renders/33818.png and b/imgs/renders/33818.png differ diff --git a/imgs/renders/33820.png b/imgs/renders/33820.png index 8fc227285..91cd5aba9 100644 Binary files a/imgs/renders/33820.png and b/imgs/renders/33820.png differ diff --git a/imgs/renders/34151.png b/imgs/renders/34151.png index bf8a8d147..7dad71ef8 100644 Binary files a/imgs/renders/34151.png and b/imgs/renders/34151.png differ diff --git a/imgs/renders/34317.png b/imgs/renders/34317.png index 237a8a093..d3604598e 100644 Binary files a/imgs/renders/34317.png and b/imgs/renders/34317.png differ diff --git a/imgs/renders/34328.png b/imgs/renders/34328.png index 90be0da56..9f4d50b8a 100644 Binary files a/imgs/renders/34328.png and b/imgs/renders/34328.png differ diff --git a/imgs/renders/34496.png b/imgs/renders/34496.png index cd6d661af..78a3c7eb2 100644 Binary files a/imgs/renders/34496.png and b/imgs/renders/34496.png differ diff --git a/imgs/renders/34562.png b/imgs/renders/34562.png index 6eb7f784b..03200d301 100644 Binary files a/imgs/renders/34562.png and b/imgs/renders/34562.png differ diff --git a/imgs/renders/34590.png b/imgs/renders/34590.png index f7f2b837b..0b80f3cd9 100644 Binary files a/imgs/renders/34590.png and b/imgs/renders/34590.png differ diff --git a/imgs/renders/34828.png b/imgs/renders/34828.png index fcc20574e..93ada7c87 100644 Binary files a/imgs/renders/34828.png and b/imgs/renders/34828.png differ diff --git a/imgs/renders/3514.png b/imgs/renders/3514.png index 3f79fde1d..48e552bbd 100644 Binary files a/imgs/renders/3514.png and b/imgs/renders/3514.png differ diff --git a/imgs/renders/3516.png b/imgs/renders/3516.png index ba546bf57..29f9b1122 100644 Binary files a/imgs/renders/3516.png and b/imgs/renders/3516.png differ diff --git a/imgs/renders/3518.png b/imgs/renders/3518.png index 6c92c28e5..a7aec2248 100644 Binary files a/imgs/renders/3518.png and b/imgs/renders/3518.png differ diff --git a/imgs/renders/3532.png b/imgs/renders/3532.png index 774de8610..0ee7ed351 100644 Binary files a/imgs/renders/3532.png and b/imgs/renders/3532.png differ diff --git a/imgs/renders/35683.png b/imgs/renders/35683.png index bc0dd4276..3413a046b 100644 Binary files a/imgs/renders/35683.png and b/imgs/renders/35683.png differ diff --git a/imgs/renders/35779.png b/imgs/renders/35779.png index c0fde6d67..d215ec668 100644 Binary files a/imgs/renders/35779.png and b/imgs/renders/35779.png differ diff --git a/imgs/renders/35781.png b/imgs/renders/35781.png index 79d5e6670..e7de9f9e6 100644 Binary files a/imgs/renders/35781.png and b/imgs/renders/35781.png differ diff --git a/imgs/renders/3628.png b/imgs/renders/3628.png deleted file mode 100644 index d14767948..000000000 Binary files a/imgs/renders/3628.png and /dev/null differ diff --git a/imgs/renders/37135.png b/imgs/renders/37135.png new file mode 100644 index 000000000..9f596de10 Binary files /dev/null and b/imgs/renders/37135.png differ diff --git a/imgs/renders/37453.png b/imgs/renders/37453.png new file mode 100644 index 000000000..575a418bb Binary files /dev/null and b/imgs/renders/37453.png differ diff --git a/imgs/renders/37454.png b/imgs/renders/37454.png new file mode 100644 index 000000000..31ac83e1f Binary files /dev/null and b/imgs/renders/37454.png differ diff --git a/imgs/renders/37455.png b/imgs/renders/37455.png new file mode 100644 index 000000000..b30b4b88e Binary files /dev/null and b/imgs/renders/37455.png differ diff --git a/imgs/renders/37456.png b/imgs/renders/37456.png new file mode 100644 index 000000000..0edfbec2b Binary files /dev/null and b/imgs/renders/37456.png differ diff --git a/imgs/renders/37457.png b/imgs/renders/37457.png new file mode 100644 index 000000000..8f42b0bdf Binary files /dev/null and b/imgs/renders/37457.png differ diff --git a/imgs/renders/37458.png b/imgs/renders/37458.png new file mode 100644 index 000000000..5a20a743c Binary files /dev/null and b/imgs/renders/37458.png differ diff --git a/imgs/renders/37459.png b/imgs/renders/37459.png new file mode 100644 index 000000000..ff745cd26 Binary files /dev/null and b/imgs/renders/37459.png differ diff --git a/imgs/renders/37460.png b/imgs/renders/37460.png new file mode 100644 index 000000000..4ff569799 Binary files /dev/null and b/imgs/renders/37460.png differ diff --git a/imgs/renders/37480.png b/imgs/renders/37480.png new file mode 100644 index 000000000..79ef03e0f Binary files /dev/null and b/imgs/renders/37480.png differ diff --git a/imgs/renders/37481.png b/imgs/renders/37481.png new file mode 100644 index 000000000..9bc8184d7 Binary files /dev/null and b/imgs/renders/37481.png differ diff --git a/imgs/renders/37482.png b/imgs/renders/37482.png new file mode 100644 index 000000000..609367af8 Binary files /dev/null and b/imgs/renders/37482.png differ diff --git a/imgs/renders/37483.png b/imgs/renders/37483.png new file mode 100644 index 000000000..22347022d Binary files /dev/null and b/imgs/renders/37483.png differ diff --git a/imgs/renders/3751.png b/imgs/renders/3751.png deleted file mode 100644 index 25d31c085..000000000 Binary files a/imgs/renders/3751.png and /dev/null differ diff --git a/imgs/renders/3753.png b/imgs/renders/3753.png deleted file mode 100644 index 96299eff7..000000000 Binary files a/imgs/renders/3753.png and /dev/null differ diff --git a/imgs/renders/3756.png b/imgs/renders/3756.png index 286f87705..d1c1d6d09 100644 Binary files a/imgs/renders/3756.png and b/imgs/renders/3756.png differ diff --git a/imgs/renders/3764.png b/imgs/renders/3764.png index 30e436b9b..8d25f7825 100644 Binary files a/imgs/renders/3764.png and b/imgs/renders/3764.png differ diff --git a/imgs/renders/3766.png b/imgs/renders/3766.png index a20f3b222..b6e27f7c1 100644 Binary files a/imgs/renders/3766.png and b/imgs/renders/3766.png differ diff --git a/imgs/renders/3768.png b/imgs/renders/3768.png deleted file mode 100644 index 19c279804..000000000 Binary files a/imgs/renders/3768.png and /dev/null differ diff --git a/imgs/renders/3878.png b/imgs/renders/3878.png deleted file mode 100644 index 03165e220..000000000 Binary files a/imgs/renders/3878.png and /dev/null differ diff --git a/imgs/renders/4005.png b/imgs/renders/4005.png deleted file mode 100644 index 25f1c60d5..000000000 Binary files a/imgs/renders/4005.png and /dev/null differ diff --git a/imgs/renders/4302.png b/imgs/renders/4302.png index 5e60581b7..459b0416d 100644 Binary files a/imgs/renders/4302.png and b/imgs/renders/4302.png differ diff --git a/imgs/renders/4306.png b/imgs/renders/4306.png index bc5bf6513..0cb7a46f6 100644 Binary files a/imgs/renders/4306.png and b/imgs/renders/4306.png differ diff --git a/imgs/renders/4308.png b/imgs/renders/4308.png index f1ecddea3..a04127fab 100644 Binary files a/imgs/renders/4308.png and b/imgs/renders/4308.png differ diff --git a/imgs/renders/4310.png b/imgs/renders/4310.png index e7e69fe8d..508140910 100644 Binary files a/imgs/renders/4310.png and b/imgs/renders/4310.png differ diff --git a/imgs/renders/4363.png b/imgs/renders/4363.png index 4ee1a9805..b0910f4ad 100644 Binary files a/imgs/renders/4363.png and b/imgs/renders/4363.png differ diff --git a/imgs/renders/4388.png b/imgs/renders/4388.png index f0051fb34..8048a6c2c 100644 Binary files a/imgs/renders/4388.png and b/imgs/renders/4388.png differ diff --git a/imgs/renders/582.png b/imgs/renders/582.png index be73ab2ce..37718ce83 100644 Binary files a/imgs/renders/582.png and b/imgs/renders/582.png differ diff --git a/imgs/renders/583.png b/imgs/renders/583.png index 42ef6096a..bd98cd510 100644 Binary files a/imgs/renders/583.png and b/imgs/renders/583.png differ diff --git a/imgs/renders/584.png b/imgs/renders/584.png index 6de0a47d4..9f1f224ff 100644 Binary files a/imgs/renders/584.png and b/imgs/renders/584.png differ diff --git a/imgs/renders/585.png b/imgs/renders/585.png index de26b5eaa..f0777c6e3 100644 Binary files a/imgs/renders/585.png and b/imgs/renders/585.png differ diff --git a/imgs/renders/586.png b/imgs/renders/586.png index e5b842742..eeddfa3ec 100644 Binary files a/imgs/renders/586.png and b/imgs/renders/586.png differ diff --git a/imgs/renders/587.png b/imgs/renders/587.png index 43de47eb2..fe4c5a653 100644 Binary files a/imgs/renders/587.png and b/imgs/renders/587.png differ diff --git a/imgs/renders/588.png b/imgs/renders/588.png index c44615de7..cd1188159 100644 Binary files a/imgs/renders/588.png and b/imgs/renders/588.png differ diff --git a/imgs/renders/589.png b/imgs/renders/589.png index b268af9fa..40d8f113b 100644 Binary files a/imgs/renders/589.png and b/imgs/renders/589.png differ diff --git a/imgs/renders/590.png b/imgs/renders/590.png index 7b359e91b..4ecf4d3c6 100644 Binary files a/imgs/renders/590.png and b/imgs/renders/590.png differ diff --git a/imgs/renders/591.png b/imgs/renders/591.png index ef4abc5b4..96bce75fd 100644 Binary files a/imgs/renders/591.png and b/imgs/renders/591.png differ diff --git a/imgs/renders/592.png b/imgs/renders/592.png index 7de72e869..4b8fc8d6e 100644 Binary files a/imgs/renders/592.png and b/imgs/renders/592.png differ diff --git a/imgs/renders/593.png b/imgs/renders/593.png index 67a6fc638..120800038 100644 Binary files a/imgs/renders/593.png and b/imgs/renders/593.png differ diff --git a/imgs/renders/594.png b/imgs/renders/594.png index bc860c5f7..c6ec27e1a 100644 Binary files a/imgs/renders/594.png and b/imgs/renders/594.png differ diff --git a/imgs/renders/595.png b/imgs/renders/595.png deleted file mode 100644 index cd0f17cbb..000000000 Binary files a/imgs/renders/595.png and /dev/null differ diff --git a/imgs/renders/596.png b/imgs/renders/596.png index 0ce46a26c..e019d41ae 100644 Binary files a/imgs/renders/596.png and b/imgs/renders/596.png differ diff --git a/imgs/renders/597.png b/imgs/renders/597.png index 7ba60f5f2..814f4f9ae 100644 Binary files a/imgs/renders/597.png and b/imgs/renders/597.png differ diff --git a/imgs/renders/598.png b/imgs/renders/598.png index b42bbe4bf..4670cf972 100644 Binary files a/imgs/renders/598.png and b/imgs/renders/598.png differ diff --git a/imgs/renders/599.png b/imgs/renders/599.png index 0ecd493e0..762d0d45e 100644 Binary files a/imgs/renders/599.png and b/imgs/renders/599.png differ diff --git a/imgs/renders/600.png b/imgs/renders/600.png deleted file mode 100644 index 04a9630b2..000000000 Binary files a/imgs/renders/600.png and /dev/null differ diff --git a/imgs/renders/601.png b/imgs/renders/601.png index 50268e50b..d6ed875d1 100644 Binary files a/imgs/renders/601.png and b/imgs/renders/601.png differ diff --git a/imgs/renders/602.png b/imgs/renders/602.png index cca90b00a..300349a18 100644 Binary files a/imgs/renders/602.png and b/imgs/renders/602.png differ diff --git a/imgs/renders/603.png b/imgs/renders/603.png index 0160d860d..89a3eab15 100644 Binary files a/imgs/renders/603.png and b/imgs/renders/603.png differ diff --git a/imgs/renders/604.png b/imgs/renders/604.png deleted file mode 100644 index 215cb2fdf..000000000 Binary files a/imgs/renders/604.png and /dev/null differ diff --git a/imgs/renders/605.png b/imgs/renders/605.png index 0e322843f..a295915ed 100644 Binary files a/imgs/renders/605.png and b/imgs/renders/605.png differ diff --git a/imgs/renders/606.png b/imgs/renders/606.png index 03cde2b64..30c516529 100644 Binary files a/imgs/renders/606.png and b/imgs/renders/606.png differ diff --git a/imgs/renders/607.png b/imgs/renders/607.png index 4627955b5..2cfec3475 100644 Binary files a/imgs/renders/607.png and b/imgs/renders/607.png differ diff --git a/imgs/renders/608.png b/imgs/renders/608.png index 293c8ddd1..9988b684b 100644 Binary files a/imgs/renders/608.png and b/imgs/renders/608.png differ diff --git a/imgs/renders/609.png b/imgs/renders/609.png index 905f774e9..d205f36a8 100644 Binary files a/imgs/renders/609.png and b/imgs/renders/609.png differ diff --git a/imgs/renders/610.png b/imgs/renders/610.png deleted file mode 100644 index d7c9eb4a7..000000000 Binary files a/imgs/renders/610.png and /dev/null differ diff --git a/imgs/renders/611.png b/imgs/renders/611.png deleted file mode 100644 index fb9ef189d..000000000 Binary files a/imgs/renders/611.png and /dev/null differ diff --git a/imgs/renders/612.png b/imgs/renders/612.png deleted file mode 100644 index b578fc483..000000000 Binary files a/imgs/renders/612.png and /dev/null differ diff --git a/imgs/renders/613.png b/imgs/renders/613.png deleted file mode 100644 index 51e4f5702..000000000 Binary files a/imgs/renders/613.png and /dev/null differ diff --git a/imgs/renders/614.png b/imgs/renders/614.png deleted file mode 100644 index bd9deb159..000000000 Binary files a/imgs/renders/614.png and /dev/null differ diff --git a/imgs/renders/615.png b/imgs/renders/615.png index 4a3f79048..04d848864 100644 Binary files a/imgs/renders/615.png and b/imgs/renders/615.png differ diff --git a/imgs/renders/616.png b/imgs/renders/616.png deleted file mode 100644 index f3c753d92..000000000 Binary files a/imgs/renders/616.png and /dev/null differ diff --git a/imgs/renders/617.png b/imgs/renders/617.png index cbfb6aaeb..3c5475318 100644 Binary files a/imgs/renders/617.png and b/imgs/renders/617.png differ diff --git a/imgs/renders/618.png b/imgs/renders/618.png deleted file mode 100644 index 143b5e12a..000000000 Binary files a/imgs/renders/618.png and /dev/null differ diff --git a/imgs/renders/619.png b/imgs/renders/619.png deleted file mode 100644 index 66720d2c4..000000000 Binary files a/imgs/renders/619.png and /dev/null differ diff --git a/imgs/renders/620.png b/imgs/renders/620.png index 3301ef83c..1d6a29d5c 100644 Binary files a/imgs/renders/620.png and b/imgs/renders/620.png differ diff --git a/imgs/renders/621.png b/imgs/renders/621.png index 30058205e..f34d75c64 100644 Binary files a/imgs/renders/621.png and b/imgs/renders/621.png differ diff --git a/imgs/renders/622.png b/imgs/renders/622.png index 56ab0727f..2f7a8b546 100644 Binary files a/imgs/renders/622.png and b/imgs/renders/622.png differ diff --git a/imgs/renders/623.png b/imgs/renders/623.png index a6ab23cd7..037243c7a 100644 Binary files a/imgs/renders/623.png and b/imgs/renders/623.png differ diff --git a/imgs/renders/624.png b/imgs/renders/624.png index 424b6dc5d..faf472cb3 100644 Binary files a/imgs/renders/624.png and b/imgs/renders/624.png differ diff --git a/imgs/renders/625.png b/imgs/renders/625.png index 4473e1563..0444d5140 100644 Binary files a/imgs/renders/625.png and b/imgs/renders/625.png differ diff --git a/imgs/renders/626.png b/imgs/renders/626.png index 805da52a6..e0b4ea0d9 100644 Binary files a/imgs/renders/626.png and b/imgs/renders/626.png differ diff --git a/imgs/renders/627.png b/imgs/renders/627.png index 96935b402..47c5db4c0 100644 Binary files a/imgs/renders/627.png and b/imgs/renders/627.png differ diff --git a/imgs/renders/628.png b/imgs/renders/628.png index 0addfff6d..c8e48ce8d 100644 Binary files a/imgs/renders/628.png and b/imgs/renders/628.png differ diff --git a/imgs/renders/629.png b/imgs/renders/629.png index 8a89abd32..6b083c386 100644 Binary files a/imgs/renders/629.png and b/imgs/renders/629.png differ diff --git a/imgs/renders/630.png b/imgs/renders/630.png index e717d450d..da49c4b98 100644 Binary files a/imgs/renders/630.png and b/imgs/renders/630.png differ diff --git a/imgs/renders/631.png b/imgs/renders/631.png index 6f3ccb4bd..d929843ab 100644 Binary files a/imgs/renders/631.png and b/imgs/renders/631.png differ diff --git a/imgs/renders/632.png b/imgs/renders/632.png index 2bed3724d..f1f9e40b9 100644 Binary files a/imgs/renders/632.png and b/imgs/renders/632.png differ diff --git a/imgs/renders/633.png b/imgs/renders/633.png index 1e660a4ce..b676099e9 100644 Binary files a/imgs/renders/633.png and b/imgs/renders/633.png differ diff --git a/imgs/renders/634.png b/imgs/renders/634.png index 9fde459f7..17ec75849 100644 Binary files a/imgs/renders/634.png and b/imgs/renders/634.png differ diff --git a/imgs/renders/635.png b/imgs/renders/635.png index 3a4756c5e..2e4f95913 100644 Binary files a/imgs/renders/635.png and b/imgs/renders/635.png differ diff --git a/imgs/renders/636.png b/imgs/renders/636.png deleted file mode 100644 index 5dbd04136..000000000 Binary files a/imgs/renders/636.png and /dev/null differ diff --git a/imgs/renders/637.png b/imgs/renders/637.png deleted file mode 100644 index 6e903aad1..000000000 Binary files a/imgs/renders/637.png and /dev/null differ diff --git a/imgs/renders/638.png b/imgs/renders/638.png index 39977563f..9757f61ad 100644 Binary files a/imgs/renders/638.png and b/imgs/renders/638.png differ diff --git a/imgs/renders/639.png b/imgs/renders/639.png index bd93ddeb2..b405e5499 100644 Binary files a/imgs/renders/639.png and b/imgs/renders/639.png differ diff --git a/imgs/renders/640.png b/imgs/renders/640.png index 4f110078b..efe0f8d1a 100644 Binary files a/imgs/renders/640.png and b/imgs/renders/640.png differ diff --git a/imgs/renders/641.png b/imgs/renders/641.png index 8378106b6..fa5a41154 100644 Binary files a/imgs/renders/641.png and b/imgs/renders/641.png differ diff --git a/imgs/renders/642.png b/imgs/renders/642.png index ba5191b71..6432e5015 100644 Binary files a/imgs/renders/642.png and b/imgs/renders/642.png differ diff --git a/imgs/renders/643.png b/imgs/renders/643.png index 76f749614..b7352dce8 100644 Binary files a/imgs/renders/643.png and b/imgs/renders/643.png differ diff --git a/imgs/renders/644.png b/imgs/renders/644.png index b0f32d489..67900f05e 100644 Binary files a/imgs/renders/644.png and b/imgs/renders/644.png differ diff --git a/imgs/renders/645.png b/imgs/renders/645.png index b73d4a5fb..7e4b64e11 100644 Binary files a/imgs/renders/645.png and b/imgs/renders/645.png differ diff --git a/imgs/renders/647.png b/imgs/renders/647.png deleted file mode 100644 index 03bccad66..000000000 Binary files a/imgs/renders/647.png and /dev/null differ diff --git a/imgs/renders/648.png b/imgs/renders/648.png index 6e6c2e07c..08fcac2d8 100644 Binary files a/imgs/renders/648.png and b/imgs/renders/648.png differ diff --git a/imgs/renders/649.png b/imgs/renders/649.png index 5f563e5ef..b11ed729c 100644 Binary files a/imgs/renders/649.png and b/imgs/renders/649.png differ diff --git a/imgs/renders/650.png b/imgs/renders/650.png index 3cbc9a066..107b29d05 100644 Binary files a/imgs/renders/650.png and b/imgs/renders/650.png differ diff --git a/imgs/renders/651.png b/imgs/renders/651.png index ac6525bf7..af4452aa6 100644 Binary files a/imgs/renders/651.png and b/imgs/renders/651.png differ diff --git a/imgs/renders/652.png b/imgs/renders/652.png index 8b36a8bb9..628ac7416 100644 Binary files a/imgs/renders/652.png and b/imgs/renders/652.png differ diff --git a/imgs/renders/653.png b/imgs/renders/653.png index 848d2279f..83036c295 100644 Binary files a/imgs/renders/653.png and b/imgs/renders/653.png differ diff --git a/imgs/renders/654.png b/imgs/renders/654.png index 96d5ebbb9..cdd583909 100644 Binary files a/imgs/renders/654.png and b/imgs/renders/654.png differ diff --git a/imgs/renders/655.png b/imgs/renders/655.png index 0fee83438..2e22d069f 100644 Binary files a/imgs/renders/655.png and b/imgs/renders/655.png differ diff --git a/imgs/renders/656.png b/imgs/renders/656.png index 415bf1f90..4b26ae600 100644 Binary files a/imgs/renders/656.png and b/imgs/renders/656.png differ diff --git a/imgs/renders/657.png b/imgs/renders/657.png index 8c7c21f90..3d13e0e23 100644 Binary files a/imgs/renders/657.png and b/imgs/renders/657.png differ diff --git a/imgs/renders/658.png b/imgs/renders/658.png deleted file mode 100644 index 400f3af9f..000000000 Binary files a/imgs/renders/658.png and /dev/null differ diff --git a/imgs/renders/659.png b/imgs/renders/659.png deleted file mode 100644 index 757b4276c..000000000 Binary files a/imgs/renders/659.png and /dev/null differ diff --git a/imgs/renders/660.png b/imgs/renders/660.png deleted file mode 100644 index 12e1db3cf..000000000 Binary files a/imgs/renders/660.png and /dev/null differ diff --git a/imgs/renders/661.png b/imgs/renders/661.png deleted file mode 100644 index 85b4c690f..000000000 Binary files a/imgs/renders/661.png and /dev/null differ diff --git a/imgs/renders/662.png b/imgs/renders/662.png deleted file mode 100644 index 85b4c690f..000000000 Binary files a/imgs/renders/662.png and /dev/null differ diff --git a/imgs/renders/663.png b/imgs/renders/663.png deleted file mode 100644 index 7791cc462..000000000 Binary files a/imgs/renders/663.png and /dev/null differ diff --git a/imgs/renders/664.png b/imgs/renders/664.png deleted file mode 100644 index 85b4c690f..000000000 Binary files a/imgs/renders/664.png and /dev/null differ diff --git a/imgs/renders/665.png b/imgs/renders/665.png deleted file mode 100644 index 85b4c690f..000000000 Binary files a/imgs/renders/665.png and /dev/null differ diff --git a/imgs/renders/666.png b/imgs/renders/666.png deleted file mode 100644 index 85b4c690f..000000000 Binary files a/imgs/renders/666.png and /dev/null differ diff --git a/imgs/renders/667.png b/imgs/renders/667.png deleted file mode 100644 index 7791cc462..000000000 Binary files a/imgs/renders/667.png and /dev/null differ diff --git a/imgs/renders/668.png b/imgs/renders/668.png deleted file mode 100644 index 757b4276c..000000000 Binary files a/imgs/renders/668.png and /dev/null differ diff --git a/imgs/renders/669.png b/imgs/renders/669.png deleted file mode 100644 index 757b4276c..000000000 Binary files a/imgs/renders/669.png and /dev/null differ diff --git a/imgs/renders/670.png b/imgs/renders/670.png deleted file mode 100644 index 2d29fda02..000000000 Binary files a/imgs/renders/670.png and /dev/null differ diff --git a/imgs/renders/671.png b/imgs/renders/671.png index b46e01e38..23db1e7aa 100644 Binary files a/imgs/renders/671.png and b/imgs/renders/671.png differ diff --git a/imgs/renders/672.png b/imgs/renders/672.png index a44ede102..ba94fbcdb 100644 Binary files a/imgs/renders/672.png and b/imgs/renders/672.png differ diff --git a/imgs/renders/9854.png b/imgs/renders/9854.png deleted file mode 100644 index 23c97c9f4..000000000 Binary files a/imgs/renders/9854.png and /dev/null differ diff --git a/imgs/renders/9858.png b/imgs/renders/9858.png deleted file mode 100644 index cb75651bd..000000000 Binary files a/imgs/renders/9858.png and /dev/null differ diff --git a/imgs/renders/9860.png b/imgs/renders/9860.png deleted file mode 100644 index bed3dea30..000000000 Binary files a/imgs/renders/9860.png and /dev/null differ diff --git a/imgs/renders/9862.png b/imgs/renders/9862.png deleted file mode 100644 index 23c97c9f4..000000000 Binary files a/imgs/renders/9862.png and /dev/null differ diff --git a/pyfa.py b/pyfa.py index c0d361dbb..146ea704d 100755 --- a/pyfa.py +++ b/pyfa.py @@ -22,15 +22,29 @@ import sys import re import config +from optparse import OptionParser, BadOptionError, AmbiguousOptionError -from optparse import OptionParser +class PassThroughOptionParser(OptionParser): + """ + An unknown option pass-through implementation of OptionParser. + + OSX passes -psn_0_* argument, which is something that pyfa does not handle. See GH issue #423 + """ + def _process_args(self, largs, rargs, values): + while rargs: + try: + OptionParser._process_args(self,largs,rargs,values) + except (BadOptionError,AmbiguousOptionError), e: + largs.append(e.opt_str) # Parse command line options usage = "usage: %prog [--root]" -parser = OptionParser(usage=usage) +parser = PassThroughOptionParser(usage=usage) parser.add_option("-r", "--root", action="store_true", dest="rootsavedata", help="if you want pyfa to store its data in root folder, use this option", default=False) parser.add_option("-w", "--wx28", action="store_true", dest="force28", help="Force usage of wxPython 2.8", default=False) parser.add_option("-d", "--debug", action="store_true", dest="debug", help="Set logger to debug level.", default=False) +parser.add_option("-t", "--title", action="store", dest="title", help="Set Window Title", default=None) +parser.add_option("-s", "--savepath", action="store", dest="savepath", help="Set the folder for savedata", default=None) (options, args) = parser.parse_args() @@ -87,9 +101,16 @@ if __name__ == "__main__": # Configure paths if options.rootsavedata is True: config.saveInRoot = True + + # set title if it wasn't supplied by argument + if options.title == None: + options.title = "pyfa %s%s - Python Fitting Assistant"%(config.version, "" if config.tag.lower() != 'git' else " (git)") config.debug = options.debug - config.defPaths() + # convert to unicode if it is set + if options.savepath is not None: + options.savepath = unicode(options.savepath) + config.defPaths(options.savepath) # Basic logging initialization import logging @@ -111,5 +132,5 @@ if __name__ == "__main__": eos.db.saveddata_meta.create_all() pyfa = wx.App(False) - MainFrame() + MainFrame(options.title) pyfa.MainLoop() diff --git a/scripts/conversion.py b/scripts/conversion.py index 5120791d4..78c2f6ad4 100644 --- a/scripts/conversion.py +++ b/scripts/conversion.py @@ -1,7 +1,5 @@ # Developed for module tiericide, this script will quickly print out a market -# conversion map based on database conversions / renamed modules between two -# eve databases. Correct database conversions must be implemented in upgrade -# script in eos.db.migrations +# conversion map based on patch notes, as well as database conversion mapping. import argparse import os.path @@ -13,7 +11,251 @@ path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding())) sys.path.append(os.path.realpath(os.path.join(path, ".."))) # change to correct conversion -from eos.db.migrations.upgrade4 import CONVERSIONS + +rename_phrase = " is now known as " +conversion_phrase = " is being converted to " + +text = """Partial Weapon Navigation is being converted to Phased Scoped Target Painter +Indirect Scanning Dampening Unit I is being converted to Phased Muon Scoped Sensor Dampener +'Broker' Remote Sensor Dampener I is being converted to 'Executive' Remote Sensor Dampener +Initiated Ion Field ECM I is being converted to Hypnos Scoped Magnetometric ECM +FZ-3 Subversive Spatial Destabilizer ECM is being converted to BZ-5 Scoped Gravimetric ECM +'Penumbra' White Noise ECM is being converted to Umbra Scoped Radar ECM +Faint Phase Inversion ECM I is being converted to Enfeebling Scoped Ladar ECM +'Hypnos' Multispectral ECM I is being converted to Compulsive Scoped Multispectral ECM +1Z-3 Subversive ECM Eruption is being converted to Cetus Scoped Burst Jammer +'Prayer' Remote Tracking Computer is being converted to P-S Compact Remote Tracking Computer +'Tycoon' Remote Tracking Computer is being converted to 'Enterprise' Remote Tracking Computer +Monopulse Tracking Mechanism I is being converted to F-12 Enduring Tracking Computer +'Orion' Tracking CPU I is being converted to Optical Compact Tracking Computer +'Economist' Tracking Computer I is being converted to 'Marketeer' Tracking Computer +Beta-Nought Tracking Mode is being converted to 'Basic' Tracking Enhancer +Azimuth Descalloping Tracking Enhancer is being converted to 'Basic' Tracking Enhancer +F-AQ Delay-Line Scan Tracking Subroutines is being converted to 'Basic' Tracking Enhancer +Beam Parallax Tracking Program is being converted to 'Basic' Tracking Enhancer +Sigma-Nought Tracking Mode I is being converted to Fourier Compact Tracking Enhancer +Auto-Gain Control Tracking Enhancer I is being converted to Fourier Compact Tracking Enhancer +F-aQ Phase Code Tracking Subroutines is being converted to Fourier Compact Tracking Enhancer +Lateral Gyrostabilizer is being converted to 'Basic' Gyrostabilizer +F-M2 Weapon Inertial Suspensor is being converted to 'Basic' Gyrostabilizer +Hydraulic Stabilization Actuator is being converted to 'Basic' Gyrostabilizer +Stabilized Weapon Mounts is being converted to 'Basic' Gyrostabilizer +Cross-Lateral Gyrostabilizer I is being converted to Counterbalanced Compact Gyrostabilizer +F-M3 Munition Inertial Suspensor is being converted to Counterbalanced Compact Gyrostabilizer +Pneumatic Stabilization Actuator I is being converted to Counterbalanced Compact Gyrostabilizer +Monophonic Stabilization Actuator I is being converted to 'Kindred' Gyrostabilizer +Monophonic Stabilization Actuator I Blueprint is being converted to 'Kindred' Gyrostabilizer Blueprint +Heat Exhaust System is being converted to 'Basic' Heat Sink +C3S Convection Thermal Radiator is being converted to 'Basic' Heat Sink +'Boreas' Coolant System is being converted to 'Basic' Heat Sink +Stamped Heat Sink is being converted to 'Basic' Heat Sink +Thermal Exhaust System I is being converted to Extruded Compact Heat Sink +C4S Coiled Circuit Thermal Radiator is being converted to Extruded Compact Heat Sink +'Skadi' Coolant System I is being converted to Extruded Compact Heat Sink +'Mangonel' Heat Sink I is being converted to 'Trebuchet' Heat Sink I +'Mangonel' Heat Sink I Blueprint is being converted to 'Trebuchet' Heat Sink Blueprint +Insulated Stabilizer Array is being converted to 'Basic' Magnetic Field Stabilizer +Linear Flux Stabilizer is being converted to 'Basic' Magnetic Field Stabilizer +Gauss Field Balancer is being converted to 'Basic' Magnetic Field Stabilizer +Magnetic Vortex Stabilizer is being converted to 'Basic' Magnetic Field Stabilizer +Insulated Stabilizer Array I is being converted to Vortex Compact Magnetic Field Stabilizer +Linear Flux Stabilizer I is being converted to Vortex Compact Magnetic Field Stabilizer +Gauss Field Balancer I is being converted to Vortex Compact Magnetic Field Stabilizer +'Capitalist' Magnetic Field Stabilizer I is being converted to 'Monopoly' Magnetic Field Stabilizer +'Capitalist' Magnetic Field Stabilizer I Blueprint is being converted to 'Monopoly' Magnetic Field Stabilizer Blueprint +Muon Coil Bolt Array I is being converted to Crosslink Compact Ballistic Control System +Multiphasic Bolt Array I is being converted to Crosslink Compact Ballistic Control System +'Pandemonium' Ballistic Enhancement is being converted to Crosslink Compact Ballistic Control System +Ballistic 'Purge' Targeting System I is being converted to 'Full Duplex' Ballistic Control System +Ballistic 'Purge' Targeting System I Blueprint is being converted to 'Full Duplex' Ballistic Control System Blueprint +'Langour' Drive Disruptor I is being converted to X5 Enduring Stasis Webifier +Patterned Stasis Web I is being converted to Fleeting Compact Stasis Webifier +Fleeting Progressive Warp Scrambler I is being converted to Faint Epsilon Scoped Warp Scrambler +Fleeting Warp Disruptor I is being converted to Faint Scoped Warp Disruptor +GLFF Containment Field is being converted to 'Basic' Damage Control +Interior Force Field Array is being converted to 'Basic' Damage Control +F84 Local Damage System is being converted to 'Basic' Damage Control +Systematic Damage Control is being converted to 'Basic' Damage Control +'Gonzo' Damage Control I is being converted to 'Radical' Damage Control +'Gonzo' Damage Control I Blueprint is being converted to 'Radical' Damage Control Blueprint +Emergency Damage Control I is being converted to IFFA Compact Damage Control +F85 Peripheral Damage System I is being converted to IFFA Compact Damage Control +Pseudoelectron Containment Field I is being converted to IFFA Compact Damage Control +Micro Ld-Acid Capacitor Battery I is being converted to 'Micro' Cap Battery +Micro Ohm Capacitor Reserve I is being converted to 'Micro' Cap Battery +Micro F-4a Ld-Sulfate Capacitor Charge Unit is being converted to 'Micro' Cap Battery +Micro Peroxide Capacitor Power Cell is being converted to 'Micro' Cap Battery +Micro Capacitor Battery II is being converted to 'Micro' Cap Battery +Small Ohm Capacitor Reserve I is being converted to Small Compact Pb-Acid Cap Battery +Small F-4a Ld-Sulfate Capacitor Charge Unit is being converted to Small Compact Pb-Acid Cap Battery +Small Peroxide Capacitor Power Cell is being converted to Small Compact Pb-Acid Cap Battery +Medium Ohm Capacitor Reserve I is being converted to Medium Compact Pb-Acid Cap Battery +Medium F-4a Ld-Sulfate Capacitor Charge Unit is being converted to Medium Compact Pb-Acid Cap Battery +Medium Peroxide Capacitor Power Cell is being converted to Medium Compact Pb-Acid Cap Battery +Large Ohm Capacitor Reserve I is being converted to Large Compact Pb-Acid Cap Battery +Large F-4a Ld-Sulfate Capacitor Charge Unit is being converted to Large Compact Pb-Acid Cap Battery +Large Peroxide Capacitor Power Cell is being converted to Large Compact Pb-Acid Cap Battery +ECCM - Radar I is being converted to Sensor Booster I +ECCM - Ladar I is being converted to Sensor Booster I +ECCM - Magnetometric I is being converted to Sensor Booster I +ECCM - Gravimetric I is being converted to Sensor Booster I +ECCM - Omni I is being converted to Sensor Booster I +ECCM - Radar I Blueprint is being converted to Sensor Booster I Blueprint +ECCM - Ladar I Blueprint is being converted to Sensor Booster I Blueprint +ECCM - Magnetometric I Blueprint is being converted to Sensor Booster I Blueprint +ECCM - Gravimetric I Blueprint is being converted to Sensor Booster I Blueprint +ECCM - Omni I Blueprint is being converted to Sensor Booster I Blueprint +Alumel Radar ECCM Sensor Array I is being converted to Alumel-Wired Enduring Sensor Booster +Alumel Ladar ECCM Sensor Array I is being converted to Alumel-Wired Enduring Sensor Booster +Alumel Gravimetric ECCM Sensor Array I is being converted to Alumel-Wired Enduring Sensor Booster +Alumel Omni ECCM Sensor Array I is being converted to Alumel-Wired Enduring Sensor Booster +Alumel Magnetometric ECCM Sensor Array I is being converted to Alumel-Wired Enduring Sensor Booster +Supplemental Ladar ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Supplemental Gravimetric ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Supplemental Omni ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Supplemental Radar ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Supplemental Magnetometric ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Extra Radar ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Extra Ladar ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Extra Gravimetric ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Extra Magnetometric ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Gravimetric Positional ECCM Sensor System I is being converted to F-90 Compact Sensor Booster +Radar Positional ECCM Sensor System I is being converted to F-90 Compact Sensor Booster +Omni Positional ECCM Sensor System I is being converted to F-90 Compact Sensor Booster +Ladar Positional ECCM Sensor System I is being converted to F-90 Compact Sensor Booster +Magnetometric Positional ECCM Sensor System I is being converted to F-90 Compact Sensor Booster +Incremental Radar ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Incremental Ladar ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Incremental Gravimetric ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Incremental Magnetometric ECCM Scanning Array I is being converted to Alumel-Wired Enduring Sensor Booster +Prototype ECCM Radar Sensor Cluster is being converted to Alumel-Wired Enduring Sensor Booster +Prototype ECCM Ladar Sensor Cluster is being converted to Alumel-Wired Enduring Sensor Booster +Prototype ECCM Gravimetric Sensor Cluster is being converted to Alumel-Wired Enduring Sensor Booster +Prototype ECCM Omni Sensor Cluster is being converted to Alumel-Wired Enduring Sensor Booster +Prototype ECCM Magnetometric Sensor Cluster is being converted to Alumel-Wired Enduring Sensor Booster +Conjunctive Radar ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Conjunctive Ladar ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Conjunctive Gravimetric ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +Conjunctive Magnetometric ECCM Scanning Array I is being converted to F-90 Compact Sensor Booster +ECCM - Omni II is being converted to Sensor Booster II +ECCM - Gravimetric II is being converted to Sensor Booster II +ECCM - Ladar II is being converted to Sensor Booster II +ECCM - Magnetometric II is being converted to Sensor Booster II +ECCM - Radar II is being converted to Sensor Booster II +ECCM - Omni II Blueprint is being converted to Sensor Booster II Blueprint +ECCM - Gravimetric II Blueprint is being converted to Sensor Booster II Blueprint +ECCM - Ladar II Blueprint is being converted to Sensor Booster II Blueprint +ECCM - Magnetometric II Blueprint is being converted to Sensor Booster II Blueprint +ECCM - Radar II Blueprint is being converted to Sensor Booster II Blueprint +'Forger' ECCM - Magnetometric I is being converted to 'Shady' Sensor Booster +'Forger' ECCM - Magnetometric I Blueprint is being converted to 'Shady' Sensor Booster Blueprint +Basic RADAR Backup Array is being converted to 'Basic' Signal Amplifier +Basic Ladar Backup Array is being converted to 'Basic' Signal Amplifier +Basic Gravimetric Backup Array is being converted to 'Basic' Signal Amplifier +Basic Magnetometric Backup Array is being converted to 'Basic' Signal Amplifier +Basic Multi Sensor Backup Array is being converted to 'Basic' Signal Amplifier +Emergency Magnetometric Scanners is being converted to 'Basic' Signal Amplifier +Emergency Multi-Frequency Scanners is being converted to 'Basic' Signal Amplifier +Emergency RADAR Scanners is being converted to 'Basic' Signal Amplifier +Emergency Ladar Scanners is being converted to 'Basic' Signal Amplifier +Emergency Gravimetric Scanners is being converted to 'Basic' Signal Amplifier +Sealed RADAR Backup Cluster is being converted to 'Basic' Signal Amplifier +Sealed Magnetometric Backup Cluster is being converted to 'Basic' Signal Amplifier +Sealed Multi-Frequency Backup Cluster is being converted to 'Basic' Signal Amplifier +Sealed Ladar Backup Cluster is being converted to 'Basic' Signal Amplifier +Sealed Gravimetric Backup Cluster is being converted to 'Basic' Signal Amplifier +Surplus RADAR Reserve Array is being converted to 'Basic' Signal Amplifier +F-42 Reiterative RADAR Backup Sensors is being converted to 'Basic' Signal Amplifier +Surplus Magnetometric Reserve Array is being converted to 'Basic' Signal Amplifier +F-42 Reiterative Magnetometric Backup Sensors is being converted to 'Basic' Signal Amplifier +Surplus Multi-Frequency Reserve Array is being converted to 'Basic' Signal Amplifier +F-42 Reiterative Multi-Frequency Backup Sensors is being converted to 'Basic' Signal Amplifier +Surplus Ladar Reserve Array is being converted to 'Basic' Signal Amplifier +F-42 Reiterative Ladar Backup Sensors is being converted to 'Basic' Signal Amplifier +Surplus Gravimetric Reserve Array is being converted to 'Basic' Signal Amplifier +F-42 Reiterative Gravimetric Backup Sensors is being converted to 'Basic' Signal Amplifier +Gravimetric Backup Array I is being converted to Signal Amplifier I +Ladar Backup Array I is being converted to Signal Amplifier I +Magnetometric Backup Array I is being converted to Signal Amplifier I +Multi Sensor Backup Array I is being converted to Signal Amplifier I +RADAR Backup Array I is being converted to Signal Amplifier I +Gravimetric Backup Array I Blueprint is being converted to Signal Amplifier I Blueprint +Ladar Backup Array I Blueprint is being converted to Signal Amplifier I Blueprint +Magnetometric Backup Array I Blueprint is being converted to Signal Amplifier I Blueprint +Multi Sensor Backup Array I Blueprint is being converted to Signal Amplifier I Blueprint +RADAR Backup Array I Blueprint is being converted to Signal Amplifier I Blueprint +Protected Gravimetric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Protected Ladar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Protected Magnetometric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Protected Multi-Frequency Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Protected RADAR Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Reserve Gravimetric Scanners is being converted to F-89 Compact Signal Amplifier +Reserve Ladar Scanners is being converted to F-89 Compact Signal Amplifier +Reserve Magnetometric Scanners is being converted to F-89 Compact Signal Amplifier +Reserve Multi-Frequency Scanners is being converted to F-89 Compact Signal Amplifier +Reserve RADAR Scanners is being converted to F-89 Compact Signal Amplifier +Secure Gravimetric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Secure Ladar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Secure Magnetometric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Secure Radar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +F-43 Repetitive Gravimetric Backup Sensors is being converted to F-89 Compact Signal Amplifier +F-43 Repetitive Ladar Backup Sensors is being converted to F-89 Compact Signal Amplifier +F-43 Repetitive Magnetometric Backup Sensors is being converted to F-89 Compact Signal Amplifier +F-43 Repetitive Multi-Frequency Backup Sensors is being converted to F-89 Compact Signal Amplifier +F-43 Repetitive RADAR Backup Sensors is being converted to F-89 Compact Signal Amplifier +Shielded Gravimetric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Shielded Ladar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Shielded Magnetometric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Shielded Radar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Surrogate Gravimetric Reserve Array I is being converted to F-89 Compact Signal Amplifier +Surrogate Ladar Reserve Array I is being converted to F-89 Compact Signal Amplifier +Surrogate Magnetometric Reserve Array I is being converted to F-89 Compact Signal Amplifier +Surrogate Multi-Frequency Reserve Array I is being converted to F-89 Compact Signal Amplifier +Surrogate RADAR Reserve Array I is being converted to F-89 Compact Signal Amplifier +Warded Gravimetric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Warded Ladar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Warded Magnetometric Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Warded Radar Backup Cluster I is being converted to F-89 Compact Signal Amplifier +Gravimetric Backup Array II is being converted to Signal Amplifier II +Ladar Backup Array II is being converted to Signal Amplifier II +Magnetometric Backup Array II is being converted to Signal Amplifier II +Multi Sensor Backup Array II is being converted to Signal Amplifier II +RADAR Backup Array II is being converted to Signal Amplifier II +Gravimetric Backup Array II Blueprint is being converted to Signal Amplifier II Blueprint +Ladar Backup Array II Blueprint is being converted to Signal Amplifier II Blueprint +Magnetometric Backup Array II Blueprint is being converted to Signal Amplifier II Blueprint +Multi Sensor Backup Array II Blueprint is being converted to Signal Amplifier II Blueprint +RADAR Backup Array II Blueprint is being converted to Signal Amplifier II Blueprint +Gravimetric Firewall is being converted to 'Firewall' Signal Amplifier +Ladar Firewall is being converted to 'Firewall' Signal Amplifier +Magnetometric Firewall is being converted to 'Firewall' Signal Amplifier +Multi Sensor Firewall is being converted to 'Firewall' Signal Amplifier +RADAR Firewall is being converted to 'Firewall' Signal Amplifier +ECCM Projector I is being converted to Remote Sensor Booster I +ECCM Projector I Blueprint is being converted to Remote Sensor Booster I Blueprint +Scattering ECCM Projector I is being converted to Linked Enduring Sensor Booster +Piercing ECCM Emitter I is being converted to Coadjunct Scoped Remote Sensor Booster +Spot Pulsing ECCM I is being converted to F-23 Compact Remote Sensor Booster +Phased Muon ECCM Caster I is being converted to F-23 Compact Remote Sensor Booster +ECCM Projector II is being converted to Remote Sensor Booster II +ECCM Projector II Blueprint is being converted to Remote Sensor Booster II Blueprint +Prototype Sensor Booster is being converted to Alumel-Wired Enduring Sensor Booster +Supplemental Scanning CPU I is being converted to F-90 Compact Sensor Booster +Amplitude Signal Enhancer is being converted to 'Basic' Signal Amplifier +'Acolyth' Signal Booster is being converted to 'Basic' Signal Amplifier +Type-E Discriminative Signal Augmentation is being converted to 'Basic' Signal Amplifier +F-90 Positional Signal Amplifier is being converted to 'Basic' Signal Amplifier +'Mendicant' Signal Booster I is being converted to F-89 Compact Signal Amplifier +Wavelength Signal Enhancer I is being converted to F-89 Compact Signal Amplifier +Type-D Attenuation Signal Augmentation is being converted to F-89 Compact Signal Amplifier +Connected Remote Sensor Booster is being converted to F-23 Compact Remote Sensor Booster +'Boss' Remote Sensor Booster is being converted to 'Bootleg' Remote Sensor Booster +'Entrepreneur' Remote Sensor Booster is being converted to 'Bootleg' Remote Sensor Booster +'Pacifier' Large Remote Armor Repairer is being converted to 'Peace' Large Remote Armor Repairer +'Pacifier' Large Remote Armor Repairer Blueprint is being converted to 'Peace' Large Remote Armor Repairer Blueprint +'Broker' Remote Sensor Dampener I Blueprint is being converted to 'Executive' Remote Sensor Dampener Blueprint +'Tycoon' Remote Tracking Computer Blueprint is being converted to 'Enterprise' Remote Tracking Computer Blueprint +'Economist' Tracking Computer I Blueprint is being converted to 'Marketeer' Tracking Computer Blueprint""" def main(old, new): # Open both databases and get their cursors @@ -22,39 +264,75 @@ def main(old, new): new_db = sqlite3.connect(os.path.expanduser(new)) new_cursor = new_db.cursor() - print "# Renamed items" + renames = {} + conversions = {} - # find renames (stolen from itemDiff) - old_namedata = {} - new_namedata = {} + for x in text.splitlines(): + if conversion_phrase in x: + c = x.split(conversion_phrase) + container = conversions + elif rename_phrase in x: + c = x.split(rename_phrase) + container = renames + else: + print "Unknown format: {}".format(x) + sys.exit() - for cursor, dictionary in ((old_cursor, old_namedata), (new_cursor, new_namedata)): - cursor.execute("SELECT typeID, typeName FROM invtypes") - for row in cursor: - id = row[0] - name = row[1] - dictionary[id] = name + old_name, new_name = c[0], c[1] + old_item, new_item = None, None - for id in set(old_namedata.keys()).intersection(new_namedata.keys()): - oldname = old_namedata[id] - newname = new_namedata[id] - if oldname != newname: - print '"%s": "%s",' % (oldname.encode('utf-8'), newname.encode('utf-8')) + if "Blueprint" in old_name or "Blueprint" in new_name: + print "Blueprint: Skipping this line: %s"%x + continue - # Convert modules - print "\n# Converted items" - for replacement_item, list in CONVERSIONS.iteritems(): - new_cursor.execute('SELECT "typeName" FROM "invtypes" WHERE "typeID" = ?', (replacement_item,)) + # gather item info + new_cursor.execute('SELECT "typeID" FROM "invtypes" WHERE "typeName" = ?', (new_name,)) for row in new_cursor: new_item = row[0] break - for retired_item in list: - old_cursor.execute('SELECT "typeName" FROM "invtypes" WHERE "typeID" = ?', (retired_item,)) - for row in old_cursor: - old_item = row[0] - break - print '"%s": "%s",' % (old_item, new_item) + old_cursor.execute('SELECT "typeID" FROM "invtypes" WHERE "typeName" = ?', (old_name,)) + for row in old_cursor: + old_item = row[0] + break + + if not old_item: + print "Error finding old item in {} -> {}".format(old_name, new_name) + if not new_item: + print "Error finding new item in {} -> {}".format(old_name, new_name) + + if not container.get((new_item,new_name), None): + container[(new_item,new_name)] = [] + + + container[(new_item,new_name)].append((old_item, old_name)) + + print " # Renamed items" + + for new, old in renames.iteritems(): + if len(old) != 1: + print "Incorrect length, key: {}, value: {}".format(new, old) + sys.exit() + old = old[0] + + print " \"{}\": \"{}\",".format(old[1], new[1]) + + # Convert modules + print "\n # Converted items" + + for new, olds in conversions.iteritems(): + for old in olds: + print " \"{}\": \"{}\",".format(old[1], new[1]) + + print + print + + for new, old in conversions.iteritems(): + print " {}: ( # {}".format(new[0], new[1]) + for item in old: + print " {}, # {}".format(item[0], item[1]) + print " )," + if __name__ == "__main__": parser = argparse.ArgumentParser() diff --git a/scripts/effectUsedBy.py b/scripts/effectUsedBy.py index 7c4a8f493..f42c0314c 100755 --- a/scripts/effectUsedBy.py +++ b/scripts/effectUsedBy.py @@ -1063,6 +1063,7 @@ inner score: {5:.3})" print("Warning: effect file " + effect_name + " is not used by any item, removing") os.remove(os.path.join(effects_path, effect_file)) + continue else: print("Warning: effect file " + effect_name + " is not used by any item") diff --git a/scripts/icons_update.py b/scripts/icons_update.py index 1382b4e67..6280d0acb 100644 --- a/scripts/icons_update.py +++ b/scripts/icons_update.py @@ -30,14 +30,16 @@ cursor = db.cursor() ICON_SIZE = (16, 16) ITEM_CATEGORIES = ( + 2, # Celestial 6, # Ship 7, # Module 8, # Charge 16, # Skill 18, # Drone 20, # Implant - 32 # Subsystem + 32 # Subsystem ) + MARKET_ROOTS = { 9, # Modules 1111, # Rigs @@ -142,11 +144,10 @@ for query in (query_items, query_groups, query_cats, query_market, query_attrib) for fname in os.listdir(icons_dir): if not os.path.isfile(os.path.join(icons_dir, fname)): continue - if not fname.startswith('icon') or not fname.endswith('.png'): - continue fname = strip_path(fname) # Get rid of "icon" prefix as well - fname = re.sub('^icon', '', fname) + #fname = re.sub('^icon', '', fname) + print fname,"exists" existing.add(fname) @@ -223,7 +224,7 @@ toadd = needed.difference(existing) if toremove: print('Some icons are not used and will be removed:') for fname in sorted(toremove): - fullname = 'icon{}.png'.format(fname) + fullname = '{}.png'.format(fname) print(' {}'.format(fullname)) fullpath = os.path.join(icons_dir, fullname) os.remove(fullpath) @@ -236,7 +237,7 @@ if toupdate: if icon is None: missing.add(fname) continue - fullname = 'icon{}.png'.format(fname) + fullname = '{}.png'.format(fname) fullpath = os.path.join(icons_dir, fullname) icon.save(fullpath, 'png') if missing: @@ -252,7 +253,7 @@ if toadd: if icon is None: missing.add(fname) continue - fullname = 'icon{}.png'.format(fname) + fullname = '{}.png'.format(fname) fullpath = os.path.join(icons_dir, fullname) icon.save(fullpath, 'png') if missing: diff --git a/scripts/jsonToSql.py b/scripts/jsonToSql.py index d4de50755..078b006e0 100755 --- a/scripts/jsonToSql.py +++ b/scripts/jsonToSql.py @@ -20,6 +20,7 @@ import os import sys +import re # Add eos root path to sys.path so we can import ourselves path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding())) @@ -174,7 +175,8 @@ def main(db, json_path): eveTypes = set() for row in data["evetypes"]: # 1306 - group Ship Modifiers, for items like tactical t3 ship modes - if (row["published"] or row['groupID'] == 1306): + # (3638, 3634, 3636, 3640) - Civilian weapons + if (row["published"] or row['groupID'] == 1306 or row['typeID'] in (3638, 3634, 3636, 3640)): eveTypes.add(row["typeID"]) # ignore checker @@ -192,8 +194,14 @@ def main(db, json_path): if not isIgnored(jsonName, row): instance = tables[jsonName]() # fix for issue 80 - if jsonName is "icons" and "res:/UI/Texture/Icons/" in str(row["iconFile"]): - row["iconFile"] = row["iconFile"].replace("res:/UI/Texture/Icons/","").replace(".png", "") + if jsonName is "icons" and "res:/ui/texture/icons/" in str(row["iconFile"]).lower(): + row["iconFile"] = row["iconFile"].lower().replace("res:/ui/texture/icons/", "").replace(".png", "") + # with res:/ui... references, it points to the actual icon file (including it's size variation of #_size_#) + # strip this info out and get the identifying info + split = row['iconFile'].split('_') + if len(split) == 3: + row['iconFile'] = "{}_{}".format(split[0], split[2]) + for k, v in row.iteritems(): setattr(instance, fieldMap.get(k, k), v) diff --git a/scripts/pyfa-setup.iss b/scripts/pyfa-setup.iss index 235ed06f1..4980c6b65 100644 --- a/scripts/pyfa-setup.iss +++ b/scripts/pyfa-setup.iss @@ -15,7 +15,7 @@ #define MyAppName "pyfa" #define MyAppPublisher "pyfa" -#define MyAppURL "https://forums.eveonline.com/default.aspx?g=posts&t=247609&p=1" +#define MyAppURL "https://forums.eveonline.com/default.aspx?g=posts&t=466425&p=1" #define MyAppExeName "pyfa.exe" ; What version starts with the new structure (1.x.0). This is used to determine if we run directory structure cleanup @@ -53,7 +53,7 @@ SetupIconFile={#MyAppDir}\pyfa.ico Compression=lzma SolidCompression=yes CloseApplications=yes -AppReadmeFile=https://github.com/DarkFenX/Pyfa/blob/v{#MyAppVersion}/readme.txt +AppReadmeFile=https://github.com/pyfa-org/Pyfa/blob/v{#MyAppVersion}/readme.txt [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" diff --git a/service/conversions/releaseDecember15.py b/service/conversions/releaseDecember15.py new file mode 100644 index 000000000..adcd9e552 --- /dev/null +++ b/service/conversions/releaseDecember15.py @@ -0,0 +1,99 @@ +""" +Conversion pack for December 2015 release (no release name) +""" + +CONVERSIONS = { + # Renamed items + "Medium 'Gremlin' Power Core Disruptor I": "Medium Gremlin Compact Energy Neutralizer", + "Medium Coaxial Remote Armor Repairer": "Medium Coaxial Compact Remote Armor Repairer", + "'Distributor' Tracking Disruptor I": "'Distributor' Guidance Disruptor I", + "Type-D Power Core Modification: Shield Flux": "Type-D Restrained Shield Flux Coil", + "Large Coaxial Remote Armor Repairer": "Large Coaxial Compact Remote Armor Repairer", + "Heavy 'Knave' Energy Drain": "Heavy Knave Scoped Energy Nosferatu", + "F-392 Baker Nunn Tracking Disruptor I": "Baker Nunn Enduring Tracking Disruptor I", + "'Ditch' Medium Energy Neutralizer I": "Medium 'Ditch' Energy Neutralizer", + "DDO Photometry Tracking Disruptor I": "DDO Scoped Tracking Disruptor I", + "Small S95a Remote Shield Booster": "Small S95a Scoped Remote Shield Booster", + "Large S95a Remote Shield Booster": "Large S95a Scoped Remote Shield Booster", + "'Abandon' Tracking Disruptor I": "C-IR Compact Guidance Disruptor I", + "500W Infectious Power System Malfunction": "Heavy Infectious Scoped Energy Neutralizer", + "Heavy 'Gremlin' Power Core Disruptor I": "Heavy Gremlin Compact Energy Neutralizer", + "Medium 'Solace' Remote Armor Repairer": "Medium Solace Scoped Remote Armor Repairer", + "Small Coaxial Remote Armor Repairer": "Small Coaxial Compact Remote Armor Repairer", + "Basic Shield Flux Coil": "'Basic' Shield Flux Coil", + "Large I-ax Remote Armor Repairer": "Large I-ax Enduring Remote Armor Repairer", + "Basic Shield Power Relay": "'Basic' Shield Power Relay", + "Capital Coaxial Remote Armor Repairer": "CONCORD Capital Remote Armor Repairer", + "Medium 'Ghoul' Energy Siphon I": "Medium Ghoul Compact Energy Nosferatu", + "Medium S95a Remote Shield Booster": "Medium S95a Scoped Remote Shield Booster", + "Mark I Generator Refitting: Shield Flux": "Mark I Compact Shield Flux Coil", + "Large 'Solace' Remote Armor Repairer": "Large Solace Scoped Remote Armor Repairer", + "Large Asymmetric Remote Shield Booster": "Large Asymmetric Enduring Remote Shield Booster", + "M51 Iterative Shield Regenerator": "M51 Benefactor Compact Shield Recharger", + "Small 'Knave' Energy Drain": "Small Knave Scoped Energy Nosferatu", + "Medium Murky Remote Shield Booster": "Medium Murky Compact Remote Shield Booster", + "Small Murky Remote Shield Booster": "Small Murky Compact Remote Shield Booster", + "Capital Murky Remote Shield Booster": "CONCORD Capital Remote Shield Booster", + "'Caltrop' Small Energy Neutralizer I": "Small 'Caltrop' Energy Neutralizer", + "Small I-ax Remote Armor Repairer": "Small I-ax Enduring Remote Armor Repairer", + "'Vrykolakas' Heavy Nosferatu I": "Heavy 'Vrykolakas' Energy Nosferatu", + "Heavy 'Ghoul' Energy Siphon I": "Heavy Ghoul Compact Energy Nosferatu", + "Small Asymmetric Remote Shield Booster": "Small Asymmetric Enduring Remote Shield Booster", + "Small 'Gremlin' Power Core Disruptor I": "Small Gremlin Compact Energy Neutralizer", + "'Strigoi' Medium Nosferatu I": "Medium 'Strigoi' Energy Nosferatu", + "'Upir' Small Nosferatu I": "Small 'Upir' Energy Nosferatu", + "Balmer Series Tracking Disruptor I": "Balmer Series Compact Tracking Disruptor I", + "Small 'Solace' Remote Armor Repairer": "Small Solace Scoped Remote Armor Repairer", + "'Moat' Heavy Energy Neutralizer I": "Heavy 'Moat' Energy Neutralizer", + "Small 'Ghoul' Energy Siphon I": "Small Ghoul Compact Energy Nosferatu", + "5W Infectious Power System Malfunction": "Small Infectious Scoped Energy Neutralizer", + "50W Infectious Power System Malfunction": "Medium Infectious Scoped Energy Neutralizer", + "Type-D Power Core Modification: Shield Power Relay": "Type-D Restrained Shield Power Relay", + "Micro Remote Shield Booster I": "'Micro' Remote Shield Booster", + "Medium I-ax Remote Armor Repairer": "Medium I-ax Enduring Remote Armor Repairer", + "Medium Asymmetric Remote Shield Booster": "Medium Asymmetric Enduring Remote Shield Booster", + "Large Murky Remote Shield Booster": "Large Murky Compact Remote Shield Booster", + "Medium 'Knave' Energy Drain": "Medium Knave Scoped Energy Nosferatu", + "Mark I Generator Refitting: Shield Power Relay": "Mark I Compact Shield Power Relay", + + # Converted items + "Medium Unstable Power Fluctuator I": "Medium Gremlin Compact Energy Neutralizer", + "'Brotherhood' Small Remote Armor Repairer": "'Beatnik' Small Remote Armor Repairer", + "Beta Reactor Control: Shield Flux I": "Type-D Restrained Shield Flux Coil", + "E500 Prototype Energy Vampire": "Heavy Knave Scoped Energy Nosferatu", + "Heavy Rudimentary Energy Destabilizer I": "Heavy Infectious Scoped Energy Neutralizer", + "Heavy Unstable Power Fluctuator I": "Heavy Gremlin Compact Energy Neutralizer", + "Medium 'Arup' Remote Armor Repairer": "Medium Solace Scoped Remote Armor Repairer", + "Alpha Reactor Shield Flux": "'Basic' Shield Flux Coil", + "Marked Generator Refitting: Shield Flux": "'Basic' Shield Flux Coil", + "Partial Power Plant Manager: Shield Flux": "'Basic' Shield Flux Coil", + "Type-E Power Core Modification: Shield Flux": "'Basic' Shield Flux Coil", + "Alpha Reactor Shield Power Relay": "'Basic' Shield Power Relay", + "Marked Generator Refitting: Shield Power Relay": "'Basic' Shield Power Relay", + "Partial Power Plant Manager: Shield Power Relay": "'Basic' Shield Power Relay", + "Type-E Power Core Modification: Shield Power Relay": "'Basic' Shield Power Relay", + "Small 'Arup' Remote Armor Repairer": "Small Solace Scoped Remote Armor Repairer", + "Medium Diminishing Power System Drain I": "Medium Ghoul Compact Energy Nosferatu", + "Local Power Plant Manager: Reaction Shield Flux I": "Mark I Compact Shield Flux Coil", + "Large 'Arup' Remote Armor Repairer": "Large Solace Scoped Remote Armor Repairer", + "Passive Barrier Compensator I": "M51 Benefactor Compact Shield Recharger", + "'Benefactor' Ward Reconstructor": "M51 Benefactor Compact Shield Recharger", + "Supplemental Screen Generator I": "M51 Benefactor Compact Shield Recharger", + "E5 Prototype Energy Vampire": "Small Knave Scoped Energy Nosferatu", + "Medium 'Atonement' Remote Shield Booster": "Medium Murky Compact Remote Shield Booster", + "Small 'Atonement' Remote Shield Booster": "Small Murky Compact Remote Shield Booster", + "Heavy Diminishing Power System Drain I": "Heavy Ghoul Compact Energy Nosferatu", + "Small Unstable Power Fluctuator I": "Small Gremlin Compact Energy Neutralizer", + "Local Power Plant Manager: Reaction Shield Power Relay I": "Mark I Compact Shield Power Relay", + "'Pacifier' Large Remote Armor Repairer": "'Peace' Large Remote Armor Repairer", + "Small Diminishing Power System Drain I": "Small Ghoul Compact Energy Nosferatu", + "Small Rudimentary Energy Destabilizer I": "Small Infectious Scoped Energy Neutralizer", + "Medium Rudimentary Energy Destabilizer I": "Medium Infectious Scoped Energy Neutralizer", + "Beta Reactor Control: Shield Power Relay I": "Type-D Restrained Shield Power Relay", + "Micro Asymmetric Remote Shield Booster": "'Micro' Remote Shield Booster", + "Micro Murky Remote Shield Booster": "'Micro' Remote Shield Booster", + "Micro 'Atonement' Remote Shield Booster": "'Micro' Remote Shield Booster", + "Micro S95a Remote Shield Booster": "'Micro' Remote Shield Booster", + "Large 'Atonement' Remote Shield Booster": "Large Murky Compact Remote Shield Booster", + "E50 Prototype Energy Vampire": "Medium Knave Scoped Energy Nosferatu", +} \ No newline at end of file diff --git a/service/conversions/releaseFeb2016.py b/service/conversions/releaseFeb2016.py new file mode 100644 index 000000000..4314ef173 --- /dev/null +++ b/service/conversions/releaseFeb2016.py @@ -0,0 +1,10 @@ +""" +Conversion pack for January 2016 (YC118.1) release +""" + +CONVERSIONS = { + # Renamed items + "Capital Coaxial Remote Armor Repairer Blueprint": "CONCORD Capital Remote Armor Repairer Blueprint", + "Capital Murky Remote Shield Booster Blueprint": "CONCORD Capital Remote Shield Booster Blueprint", +} + diff --git a/service/conversions/releaseJan2016.py b/service/conversions/releaseJan2016.py new file mode 100644 index 000000000..e5f9beba3 --- /dev/null +++ b/service/conversions/releaseJan2016.py @@ -0,0 +1,13 @@ +""" +Conversion pack for January 2016 (YC118.1) release +""" + +CONVERSIONS = { + # Renamed items + "Micro' Remote Shield Booster": "'Micro' Remote Shield Booster", + "C-IR Compact Guidance Disruptor I": "C-IR Compact Guidance Disruptor", + "'Distributor' Guidance Disruptor I": "'Distributor' Guidance Disruptor", + "'Distributor' Guidance Disruptor I Blueprint": "'Distributor' Guidance Disruptor Blueprint", + "Highstroke Scoped Guidance Disruptor I": "Highstroke Scoped Guidance Disruptor", + "A-211 Enduring Guidance Disruptor I": "A-211 Enduring Guidance Disruptor", +} \ No newline at end of file diff --git a/service/conversions/releaseMar2016.py b/service/conversions/releaseMar2016.py new file mode 100644 index 000000000..2af04e1af --- /dev/null +++ b/service/conversions/releaseMar2016.py @@ -0,0 +1,361 @@ +""" +Conversion pack for January 2016 (YC118.1) release +""" + +CONVERSIONS = { + # Renamed items + "Basic Gyrostabilizer": "'Basic' Gyrostabilizer", + "Basic Damage Control": "'Basic' Damage Control", + "Micro Capacitor Battery I": "'Micro' Cap Battery", + "ECM Burst I": "Burst Jammer I", + "Small Capacitor Battery I": "Small Cap Battery I", + "Basic Heat Sink": "'Basic' Heat Sink", + "ECM - Ion Field Projector I": "Magnetometric ECM I", + "Basic Signal Amplifier": "'Basic' Signal Amplifier", + "Basic Tracking Enhancer": "'Basic' Tracking Enhancer", + "ECM - Spatial Destabilizer I": "Gravimetric ECM I", + "ECM - White Noise Generator I": "Radar ECM I", + "ECM - Multispectral Jammer I": "Multispectral ECM I", + "ECM - Phase Inverter I": "Ladar ECM I", + "Medium Capacitor Battery I": "Medium Cap Battery I", + "Large Capacitor Battery I": "Large Cap Battery I", + "ECM Burst II": "Burst Jammer II", + "Guristas Nova Citadel Cruise Missile": "Guristas Nova XL Cruise Missile", + "Guristas Scourge Citadel Cruise Missile": "Guristas Scourge XL Cruise Missile", + "Guristas Inferno Citadel Cruise Missile": "Guristas Inferno XL Cruise Missile", + "Guristas Mjolnir Citadel Cruise Missile": "Guristas Mjolnir XL Cruise Missile", + "ECM - Phase Inverter II": "Ladar ECM II", + "ECM - Ion Field Projector II": "Magnetometric ECM II", + "ECM - Multispectral Jammer II": "Multispectral ECM II", + "ECM - Spatial Destabilizer II": "Gravimetric ECM II", + "ECM - White Noise Generator II": "Radar ECM II", + "Small Capacitor Battery II": "Small Cap Battery II", + "Medium Capacitor Battery II": "Medium Cap Battery II", + "Large Capacitor Battery II": "Large Cap Battery II", + "'Limos' Citadel Cruise Launcher I": "'Limos' XL Cruise Launcher I", + "Shock 'Limos' Citadel Torpedo Bay I": "Shock 'Limos' XL Torpedo Bay I", + "X5 Prototype Engine Enervator": "X5 Enduring Stasis Webifier", + "Fleeting Propulsion Inhibitor I": "Fleeting Compact Stasis Webifier", + "Caldari Fuel Block": "Nitrogen Fuel Block", + "Minmatar Fuel Block": "Hydrogen Fuel Block", + "Amarr Fuel Block": "Helium Fuel Block", + "Gallente Fuel Block": "Oxygen Fuel Block", + "Small Ld-Acid Capacitor Battery I": "Small Compact Pb-Acid Cap Battery ", + "Large Ld-Acid Capacitor Battery I": "Large Compact Pb-Acid Cap Battery", + "F-23 Reciprocal Remote Sensor Booster": "F-23 Compact Remote Sensor Booster", + "Coadjunct Linked Remote Sensor Booster": "Coadjunct Scoped Remote Sensor Booster", + "Linked Remote Sensor Booster": "Linked Enduring Sensor Booster", + "Low Frequency Sensor Suppressor I": "LFT Enduring Sensor Dampener", + "Kapteyn Sensor Array Inhibitor I": "Kapteyn Compact Sensor Dampener", + "Phased Muon Sensor Disruptor I": "Phased Muon Scoped Sensor Dampener", + "F-293 Nutation Remote Tracking Computer": "F-293 Scoped Remote Tracking Computer", + "Phase Switching Remote Tracking Computer": "P-S Compact Remote Tracking Computer", + "Alfven Surface Remote Tracking Computer": "Alfven Enduring Remote Tracking Computer", + "'Deluge' ECM Burst I": "Deluge Enduring Burst Jammer", + "'Rash' ECM Emission I": "Rash Compact Burst Jammer", + "'Cetus' ECM Shockwave I": "Cetus Scoped Burst Jammer", + "J5 Prototype Warp Disruptor I": "J5 Enduring Warp Disruptor", + "Faint Warp Disruptor I": "Faint Scoped Warp Disruptor", + "Initiated Warp Disruptor I": "Initiated Compact Warp Disruptor", + "J5b Phased Prototype Warp Scrambler I": "J5b Enduring Warp Scrambler", + "Faint Epsilon Warp Scrambler I": "Faint Epsilon Scoped Warp Scrambler", + "Initiated Harmonic Warp Scrambler I": "Initiated Compact Warp Scrambler", + "Internal Force Field Array I": "IFFA Compact Damage Control", + "Extruded Heat Sink I": "Extruded Compact Heat Sink", + "Counterbalanced Weapon Mounts I": "Counterbalanced Compact Gyrostabilizer", + "Medium Ld-Acid Capacitor Battery I": "Medium Compact Pb-Acid Cap Battery", + "Alumel-Wired Sensor Augmentation": "Alumel-Wired Enduring Sensor Booster", + "F-90 Positional Sensor Subroutines": "F-90 Compact Sensor Booster", + "Optical Tracking Computer I": "Optical Compact Tracking Computer", + "F-12 Nonlinear Tracking Processor": "F-12 Enduring Tracking Computer", + "F-89 Synchronized Signal Amplifier": "F-89 Compact Signal Amplifier", + "Fourier Transform Tracking Program": "Fourier Compact Tracking Enhancer", + "Initiated Multispectral ECM I": "Initiated Enduring Multispectral ECM", + "Basic Magnetic Field Stabilizer": "'Basic' Magnetic Field Stabilizer", + "Magnetic Vortex Stabilizer I": "Vortex Compact Magnetic Field Stabilizer", + "Mizuro's Modified Warp Disruptor": "Mizuro's Modified Heavy Warp Disruptor", + "Hakim's Modified Warp Disruptor": "Hakim's Modified Heavy Warp Disruptor", + "Gotan's Modified Warp Disruptor": "Gotan's Modified Heavy Warp Disruptor", + "Tobias' Modified Warp Disruptor": "Tobias' Modified Heavy Warp Disruptor", + "Mizuro's Modified Warp Scrambler": "Mizuro's Modified Heavy Warp Scrambler", + "Hakim's Modified Warp Scrambler": "Hakim's Modified Heavy Warp Scrambler", + "Gotan's Modified Warp Scrambler": "Gotan's Modified Heavy Warp Scrambler", + "Tobias' Modified Warp Scrambler": "Tobias' Modified Heavy Warp Scrambler", + "Cross-linked Bolt Array I": "Crosslink Compact Ballistic Control System", + "Citadel Torpedo Battery": "XL Torpedo Battery", + "Mjolnir Citadel Torpedo": "Mjolnir XL Torpedo", + "Scourge Citadel Torpedo": "Scourge XL Torpedo", + "Inferno Citadel Torpedo": "Inferno XL Torpedo", + "Nova Citadel Torpedo": "Nova XL Torpedo", + "Peripheral Weapon Navigation Diameter": "Peripheral Compact Target Painter", + "Parallel Weapon Navigation Transmitter": "Parallel Enduring Target Painter", + "Phased Weapon Navigation Array Generation Extron": "Phased Scoped Target Painter", + "Induced Ion Field ECM I": "Morpheus Enduring Magnetometric ECM", + "Compulsive Ion Field ECM I": "Aergia Compact Magnetometric ECM", + "'Hypnos' Ion Field ECM I": "Hypnos Scoped Magnetometric ECM", + "Induced Multispectral ECM I": "Induced Compact Multispectral ECM", + "Compulsive Multispectral ECM I": "Compulsive Scoped Multispectral ECM", + "Languid Phase Inversion ECM I": "Languid Enduring Ladar ECM", + "Halting Phase Inversion ECM I": "Halting Compact Ladar ECM", + "Enfeebling Phase Inversion ECM I": "Enfeebling Scoped Ladar ECM", + "FZ-3a Disruptive Spatial Destabilizer ECM": "FZ-3a Enduring Gravimetric ECM", + "CZ-4 Concussive Spatial Destabilizer ECM": "CZ-4 Compact Gravimetric ECM", + "BZ-5 Neutralizing Spatial Destabilizer ECM": "BZ-5 Scoped Gravimetric ECM", + "'Gloom' White Noise ECM": "Gloom Enduring Radar ECM", + "'Shade' White Noise ECM": "Shade Compact Radar ECM", + "'Umbra' White Noise ECM": "Umbra Scoped Radar ECM", + "Dread Guristas ECM Multispectral Jammer": "Dread Guristas Multispectral ECM", + "Kaikka's Modified ECM Multispectral Jammer": "Kaikka's Modified Multispectral ECM", + "Thon's Modified ECM Multispectral Jammer": "Thon's Modified Multispectral ECM", + "Vepas' Modified ECM Multispectral Jammer": "Vepas' Modified Multispectral ECM", + "Estamel's Modified ECM Multispectral Jammer": "Estamel's Modified Multispectral ECM", + "Citadel Torpedo Launcher I": "XL Torpedo Launcher I", + "'Marshall' Ion Field Projector": "'Marshall' Magnetometric ECM", + "'Gambler' Phase Inverter": "'Gambler' Ladar ECM", + "'Plunderer' Spatial Destabilizer": "'Plunderer' Gravimetric ECM", + "'Heist' White Noise Generator": "'Heist' Radar ECM", + "'Ghost' ECM Burst": "'Ghost' Burst Jammer", + "'Full Duplex' Ballistic Targeting System": "'Full Duplex' Ballistic Control System", + "'Kindred' Stabilization Actuator I": "'Kindred' Gyrostabilizer", + "Process-Interruptive Warp Disruptor": "'Interruptive' Warp Disruptor", + "Multi Sensor Firewall": "'Firewall' Signal Amplifier", + "'Inception' Target Painter I": "'Inception' Target Painter", + "Citadel Torpedoes": "XL Torpedoes", + "'Shady' ECCM - Gravimetric I": "'Shady' Sensor Booster", + "'Monopoly' Magnetic Field Stabilizer I": "'Monopoly' Magnetic Field Stabilizer", + "'Bootleg' ECCM Projector I": "'Bootleg' Remote Sensor Booster", + "'Marketeer' Tracking Computer I": "'Marketeer' Tracking Computer", + "'Executive' Remote Sensor Dampener I": "'Executive' Remote Sensor Dampener", + "'Radical' Damage Control I": "'Radical' Damage Control", + "'Crucible' Small Capacitor Battery I": "'Crucible' Small Cap Battery", + "'Censer' Medium Capacitor Battery I": "'Censer' Medium Cap Battery", + "'Thurifer' Large Capacitor Battery I": "'Thurifer' Large Cap Battery", + "Guristas Citadel Torpedo Battery": "Guristas XL Torpedo Battery", + "Dread Guristas Citadel Torpedo Battery": "Dread Guristas XL Torpedo Battery", + "Legion ECM Ion Field Projector": "Legion Magnetometric ECM", + "Legion ECM Multispectral Jammer": "Legion Multispectral ECM", + "Legion ECM Phase Inverter": "Legion Ladar ECM", + "Legion ECM Spatial Destabilizer": "Legion Gravimetric ECM", + "Legion ECM White Noise Generator": "Legion Radar ECM", + "Guristas Nova Citadel Torpedo": "Guristas Nova XL Torpedo", + "Guristas Inferno Citadel Torpedo": "Guristas Inferno XL Torpedo", + "Guristas Scourge Citadel Torpedo": "Guristas Scourge XL Torpedo", + "Guristas Mjolnir Citadel Torpedo": "Guristas Mjolnir XL Torpedo", + "Citadel Cruise Missiles": "XL Cruise Missiles", + "Scourge Citadel Cruise Missile": "Scourge XL Cruise Missile", + "Nova Citadel Cruise Missile": "Nova XL Cruise Missile", + "Inferno Citadel Cruise Missile": "Inferno XL Cruise Missile", + "Mjolnir Citadel Cruise Missile": "Mjolnir XL Cruise Missile", + "Citadel Cruise Launcher I": "XL Cruise Launcher I", + + # Converted items + "Muon Coil Bolt Array I": "Crosslink Compact Ballistic Control System", + "Multiphasic Bolt Array I": "Crosslink Compact Ballistic Control System", + "'Pandemonium' Ballistic Enhancement": "Crosslink Compact Ballistic Control System", + "Piercing ECCM Emitter I": "Coadjunct Scoped Remote Sensor Booster", + "1Z-3 Subversive ECM Eruption": "Cetus Scoped Burst Jammer", + "ECCM - Radar I": "Sensor Booster I", + "ECCM - Ladar I": "Sensor Booster I", + "ECCM - Magnetometric I": "Sensor Booster I", + "ECCM - Gravimetric I": "Sensor Booster I", + "ECCM - Omni I": "Sensor Booster I", + "Beta-Nought Tracking Mode": "'Basic' Tracking Enhancer", + "Azimuth Descalloping Tracking Enhancer": "'Basic' Tracking Enhancer", + "F-AQ Delay-Line Scan Tracking Subroutines": "'Basic' Tracking Enhancer", + "Beam Parallax Tracking Program": "'Basic' Tracking Enhancer", + "GLFF Containment Field": "'Basic' Damage Control", + "Interior Force Field Array": "'Basic' Damage Control", + "F84 Local Damage System": "'Basic' Damage Control", + "Systematic Damage Control": "'Basic' Damage Control", + "'Boss' Remote Sensor Booster": "'Bootleg' Remote Sensor Booster", + "'Entrepreneur' Remote Sensor Booster": "'Bootleg' Remote Sensor Booster", + "Fleeting Progressive Warp Scrambler I": "Faint Epsilon Scoped Warp Scrambler", + "ECCM Projector I": "Remote Sensor Booster I", + "Sigma-Nought Tracking Mode I": "Fourier Compact Tracking Enhancer", + "Auto-Gain Control Tracking Enhancer I": "Fourier Compact Tracking Enhancer", + "F-aQ Phase Code Tracking Subroutines": "Fourier Compact Tracking Enhancer", + "Monophonic Stabilization Actuator I": "'Kindred' Gyrostabilizer", + "Initiated Ion Field ECM I": "Hypnos Scoped Magnetometric ECM", + "Insulated Stabilizer Array": "'Basic' Magnetic Field Stabilizer", + "Linear Flux Stabilizer": "'Basic' Magnetic Field Stabilizer", + "Gauss Field Balancer": "'Basic' Magnetic Field Stabilizer", + "Magnetic Vortex Stabilizer": "'Basic' Magnetic Field Stabilizer", + "'Capitalist' Magnetic Field Stabilizer I": "'Monopoly' Magnetic Field Stabilizer", + "Emergency Damage Control I": "IFFA Compact Damage Control", + "F85 Peripheral Damage System I": "IFFA Compact Damage Control", + "Pseudoelectron Containment Field I": "IFFA Compact Damage Control", + "Micro Ld-Acid Capacitor Battery I": "'Micro' Cap Battery", + "Micro Ohm Capacitor Reserve I": "'Micro' Cap Battery", + "Micro F-4a Ld-Sulfate Capacitor Charge Unit": "'Micro' Cap Battery", + "Micro Peroxide Capacitor Power Cell": "'Micro' Cap Battery", + "Micro Capacitor Battery II": "'Micro' Cap Battery", + "Lateral Gyrostabilizer": "'Basic' Gyrostabilizer", + "F-M2 Weapon Inertial Suspensor": "'Basic' Gyrostabilizer", + "Hydraulic Stabilization Actuator": "'Basic' Gyrostabilizer", + "Stabilized Weapon Mounts": "'Basic' Gyrostabilizer", + "'Hypnos' Multispectral ECM I": "Compulsive Scoped Multispectral ECM", + "Fleeting Warp Disruptor I": "Faint Scoped Warp Disruptor", + "'Mangonel' Heat Sink I": "'Trebuchet' Heat Sink I", + "Heat Exhaust System": "'Basic' Heat Sink", + "C3S Convection Thermal Radiator": "'Basic' Heat Sink", + "'Boreas' Coolant System": "'Basic' Heat Sink", + "Stamped Heat Sink": "'Basic' Heat Sink", + "Extra Radar ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Extra Ladar ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Extra Gravimetric ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Extra Magnetometric ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Gravimetric Positional ECCM Sensor System I": "F-90 Compact Sensor Booster", + "Radar Positional ECCM Sensor System I": "F-90 Compact Sensor Booster", + "Omni Positional ECCM Sensor System I": "F-90 Compact Sensor Booster", + "Ladar Positional ECCM Sensor System I": "F-90 Compact Sensor Booster", + "Magnetometric Positional ECCM Sensor System I": "F-90 Compact Sensor Booster", + "Conjunctive Radar ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Conjunctive Ladar ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Conjunctive Gravimetric ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Conjunctive Magnetometric ECCM Scanning Array I": "F-90 Compact Sensor Booster", + "Supplemental Scanning CPU I": "F-90 Compact Sensor Booster", + "'Gonzo' Damage Control I": "'Radical' Damage Control", + "'Penumbra' White Noise ECM": "Umbra Scoped Radar ECM", + "ECCM - Omni II": "Sensor Booster II", + "ECCM - Gravimetric II": "Sensor Booster II", + "ECCM - Ladar II": "Sensor Booster II", + "ECCM - Magnetometric II": "Sensor Booster II", + "ECCM - Radar II": "Sensor Booster II", + "Scattering ECCM Projector I": "Linked Enduring Sensor Booster", + "Gravimetric Backup Array I": "Signal Amplifier I", + "Ladar Backup Array I": "Signal Amplifier I", + "Magnetometric Backup Array I": "Signal Amplifier I", + "Multi Sensor Backup Array I": "Signal Amplifier I", + "RADAR Backup Array I": "Signal Amplifier I", + "Large Ohm Capacitor Reserve I": "Large Compact Pb-Acid Cap Battery", + "Large F-4a Ld-Sulfate Capacitor Charge Unit": "Large Compact Pb-Acid Cap Battery", + "Large Peroxide Capacitor Power Cell": "Large Compact Pb-Acid Cap Battery", + "ECCM Projector II": "Remote Sensor Booster II", + "Cross-Lateral Gyrostabilizer I": "Counterbalanced Compact Gyrostabilizer", + "F-M3 Munition Inertial Suspensor": "Counterbalanced Compact Gyrostabilizer", + "Pneumatic Stabilization Actuator I": "Counterbalanced Compact Gyrostabilizer", + "'Langour' Drive Disruptor I": "X5 Enduring Stasis Webifier", + "Patterned Stasis Web I": "Fleeting Compact Stasis Webifier", + "'Tycoon' Remote Tracking Computer": "'Enterprise' Remote Tracking Computer", + "'Economist' Tracking Computer I": "'Marketeer' Tracking Computer", + "Gravimetric Backup Array II": "Signal Amplifier II", + "Ladar Backup Array II": "Signal Amplifier II", + "Magnetometric Backup Array II": "Signal Amplifier II", + "Multi Sensor Backup Array II": "Signal Amplifier II", + "RADAR Backup Array II": "Signal Amplifier II", + "Faint Phase Inversion ECM I": "Enfeebling Scoped Ladar ECM", + "'Prayer' Remote Tracking Computer": "P-S Compact Remote Tracking Computer", + "Partial Weapon Navigation": "Phased Scoped Target Painter", + "Basic RADAR Backup Array": "'Basic' Signal Amplifier", + "Basic Ladar Backup Array": "'Basic' Signal Amplifier", + "Basic Gravimetric Backup Array": "'Basic' Signal Amplifier", + "Basic Magnetometric Backup Array": "'Basic' Signal Amplifier", + "Basic Multi Sensor Backup Array": "'Basic' Signal Amplifier", + "Emergency Magnetometric Scanners": "'Basic' Signal Amplifier", + "Emergency Multi-Frequency Scanners": "'Basic' Signal Amplifier", + "Emergency RADAR Scanners": "'Basic' Signal Amplifier", + "Emergency Ladar Scanners": "'Basic' Signal Amplifier", + "Emergency Gravimetric Scanners": "'Basic' Signal Amplifier", + "Sealed RADAR Backup Cluster": "'Basic' Signal Amplifier", + "Sealed Magnetometric Backup Cluster": "'Basic' Signal Amplifier", + "Sealed Multi-Frequency Backup Cluster": "'Basic' Signal Amplifier", + "Sealed Ladar Backup Cluster": "'Basic' Signal Amplifier", + "Sealed Gravimetric Backup Cluster": "'Basic' Signal Amplifier", + "Surplus RADAR Reserve Array": "'Basic' Signal Amplifier", + "F-42 Reiterative RADAR Backup Sensors": "'Basic' Signal Amplifier", + "Surplus Magnetometric Reserve Array": "'Basic' Signal Amplifier", + "F-42 Reiterative Magnetometric Backup Sensors": "'Basic' Signal Amplifier", + "Surplus Multi-Frequency Reserve Array": "'Basic' Signal Amplifier", + "F-42 Reiterative Multi-Frequency Backup Sensors": "'Basic' Signal Amplifier", + "Surplus Ladar Reserve Array": "'Basic' Signal Amplifier", + "F-42 Reiterative Ladar Backup Sensors": "'Basic' Signal Amplifier", + "Surplus Gravimetric Reserve Array": "'Basic' Signal Amplifier", + "F-42 Reiterative Gravimetric Backup Sensors": "'Basic' Signal Amplifier", + "Amplitude Signal Enhancer": "'Basic' Signal Amplifier", + "'Acolyth' Signal Booster": "'Basic' Signal Amplifier", + "Type-E Discriminative Signal Augmentation": "'Basic' Signal Amplifier", + "F-90 Positional Signal Amplifier": "'Basic' Signal Amplifier", + "Gravimetric Firewall": "'Firewall' Signal Amplifier", + "Ladar Firewall": "'Firewall' Signal Amplifier", + "Magnetometric Firewall": "'Firewall' Signal Amplifier", + "Multi Sensor Firewall": "'Firewall' Signal Amplifier", + "RADAR Firewall": "'Firewall' Signal Amplifier", + "'Pacifier' Large Remote Armor Repairer": "'Peace' Large Remote Armor Repairer", + "Monopulse Tracking Mechanism I": "F-12 Enduring Tracking Computer", + "Alumel Radar ECCM Sensor Array I": "Alumel-Wired Enduring Sensor Booster", + "Alumel Ladar ECCM Sensor Array I": "Alumel-Wired Enduring Sensor Booster", + "Alumel Gravimetric ECCM Sensor Array I": "Alumel-Wired Enduring Sensor Booster", + "Alumel Omni ECCM Sensor Array I": "Alumel-Wired Enduring Sensor Booster", + "Alumel Magnetometric ECCM Sensor Array I": "Alumel-Wired Enduring Sensor Booster", + "Supplemental Ladar ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Supplemental Gravimetric ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Supplemental Omni ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Supplemental Radar ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Supplemental Magnetometric ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Incremental Radar ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Incremental Ladar ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Incremental Gravimetric ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Incremental Magnetometric ECCM Scanning Array I": "Alumel-Wired Enduring Sensor Booster", + "Prototype ECCM Radar Sensor Cluster": "Alumel-Wired Enduring Sensor Booster", + "Prototype ECCM Ladar Sensor Cluster": "Alumel-Wired Enduring Sensor Booster", + "Prototype ECCM Gravimetric Sensor Cluster": "Alumel-Wired Enduring Sensor Booster", + "Prototype ECCM Omni Sensor Cluster": "Alumel-Wired Enduring Sensor Booster", + "Prototype ECCM Magnetometric Sensor Cluster": "Alumel-Wired Enduring Sensor Booster", + "Prototype Sensor Booster": "Alumel-Wired Enduring Sensor Booster", + "Thermal Exhaust System I": "Extruded Compact Heat Sink", + "C4S Coiled Circuit Thermal Radiator": "Extruded Compact Heat Sink", + "'Skadi' Coolant System I": "Extruded Compact Heat Sink", + "'Forger' ECCM - Magnetometric I": "'Shady' Sensor Booster", + "Insulated Stabilizer Array I": "Vortex Compact Magnetic Field Stabilizer", + "Linear Flux Stabilizer I": "Vortex Compact Magnetic Field Stabilizer", + "Gauss Field Balancer I": "Vortex Compact Magnetic Field Stabilizer", + "'Broker' Remote Sensor Dampener I": "'Executive' Remote Sensor Dampener", + "'Orion' Tracking CPU I": "Optical Compact Tracking Computer", + "Spot Pulsing ECCM I": "F-23 Compact Remote Sensor Booster", + "Phased Muon ECCM Caster I": "F-23 Compact Remote Sensor Booster", + "Connected Remote Sensor Booster": "F-23 Compact Remote Sensor Booster", + "Small Ohm Capacitor Reserve I": "Small Compact Pb-Acid Cap Battery", + "Small F-4a Ld-Sulfate Capacitor Charge Unit": "Small Compact Pb-Acid Cap Battery", + "Small Peroxide Capacitor Power Cell": "Small Compact Pb-Acid Cap Battery", + "FZ-3 Subversive Spatial Destabilizer ECM": "BZ-5 Scoped Gravimetric ECM", + "Medium Ohm Capacitor Reserve I": "Medium Compact Pb-Acid Cap Battery", + "Medium F-4a Ld-Sulfate Capacitor Charge Unit": "Medium Compact Pb-Acid Cap Battery", + "Medium Peroxide Capacitor Power Cell": "Medium Compact Pb-Acid Cap Battery", + "Ballistic 'Purge' Targeting System I": "'Full Duplex' Ballistic Control System", + "Protected Gravimetric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Protected Ladar Backup Cluster I": "F-89 Compact Signal Amplifier", + "Protected Magnetometric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Protected Multi-Frequency Backup Cluster I": "F-89 Compact Signal Amplifier", + "Protected RADAR Backup Cluster I": "F-89 Compact Signal Amplifier", + "Reserve Gravimetric Scanners": "F-89 Compact Signal Amplifier", + "Reserve Ladar Scanners": "F-89 Compact Signal Amplifier", + "Reserve Magnetometric Scanners": "F-89 Compact Signal Amplifier", + "Reserve Multi-Frequency Scanners": "F-89 Compact Signal Amplifier", + "Reserve RADAR Scanners": "F-89 Compact Signal Amplifier", + "Secure Gravimetric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Secure Ladar Backup Cluster I": "F-89 Compact Signal Amplifier", + "Secure Magnetometric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Secure Radar Backup Cluster I": "F-89 Compact Signal Amplifier", + "F-43 Repetitive Gravimetric Backup Sensors": "F-89 Compact Signal Amplifier", + "F-43 Repetitive Ladar Backup Sensors": "F-89 Compact Signal Amplifier", + "F-43 Repetitive Magnetometric Backup Sensors": "F-89 Compact Signal Amplifier", + "F-43 Repetitive Multi-Frequency Backup Sensors": "F-89 Compact Signal Amplifier", + "F-43 Repetitive RADAR Backup Sensors": "F-89 Compact Signal Amplifier", + "Shielded Gravimetric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Shielded Ladar Backup Cluster I": "F-89 Compact Signal Amplifier", + "Shielded Magnetometric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Shielded Radar Backup Cluster I": "F-89 Compact Signal Amplifier", + "Surrogate Gravimetric Reserve Array I": "F-89 Compact Signal Amplifier", + "Surrogate Ladar Reserve Array I": "F-89 Compact Signal Amplifier", + "Surrogate Magnetometric Reserve Array I": "F-89 Compact Signal Amplifier", + "Surrogate Multi-Frequency Reserve Array I": "F-89 Compact Signal Amplifier", + "Surrogate RADAR Reserve Array I": "F-89 Compact Signal Amplifier", + "Warded Gravimetric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Warded Ladar Backup Cluster I": "F-89 Compact Signal Amplifier", + "Warded Magnetometric Backup Cluster I": "F-89 Compact Signal Amplifier", + "Warded Radar Backup Cluster I": "F-89 Compact Signal Amplifier", + "'Mendicant' Signal Booster I": "F-89 Compact Signal Amplifier", + "Wavelength Signal Enhancer I": "F-89 Compact Signal Amplifier", + "Type-D Attenuation Signal Augmentation": "F-89 Compact Signal Amplifier", + "Indirect Scanning Dampening Unit I": "Phased Muon Scoped Sensor Dampener", +} \ No newline at end of file diff --git a/service/fit.py b/service/fit.py index efbf95b8b..085748e85 100644 --- a/service/fit.py +++ b/service/fit.py @@ -24,6 +24,8 @@ import logging import wx from codecs import open +import xml.parsers.expat + import eos.db import eos.types @@ -65,10 +67,13 @@ class FitImportThread(threading.Thread): def run(self): sFit = Fit.getInstance() - fits = sFit.importFitFromFiles(self.paths, self.callback) + success, result = sFit.importFitFromFiles(self.paths, self.callback) - # Send done signal to GUI - wx.CallAfter(self.callback, -1, fits) + if not success: # there was an error during processing + logger.error("Error while processing file import: %s", result) + wx.CallAfter(self.callback, -2, result) + else: # Send done signal to GUI + wx.CallAfter(self.callback, -1, result) class Fit(object): @@ -98,7 +103,9 @@ class Fit(object): "rackLabels": True, "compactSkills": True, "showTooltip": True, - "showMarketShortcuts": False} + "showMarketShortcuts": False, + "enableGaugeAnimation": True, + "exportCharges": True} self.serviceFittingOptions = SettingsProvider.getInstance().getSettings( "pyfaServiceFittingOptions", serviceFittingDefaultOptions) @@ -849,24 +856,50 @@ class Fit(object): fits = [] for path in paths: if callback: # Pulse - wx.CallAfter(callback, "Processing file:\n%s"%path) + wx.CallAfter(callback, 1, "Processing file:\n%s"%path) file = open(path, "r") srcString = file.read() + + if len(srcString) == 0: # ignore blank files + continue + codec_found = None - # If file had ANSI encoding, convert it to unicode using system - # default codepage, or use fallbacks UTF-16, then cp1252 on any - # encoding errors + # If file had ANSI encoding, decode it to unicode using detection + # of BOM header or if there is no header try default + # codepage then fallback to utf-16, cp1252 + if isinstance(srcString, str): - attempt_codecs = (defcodepage, "utf-16", "cp1252") - for page in attempt_codecs: - try: - srcString = unicode(srcString, page) - codec_found = page - except UnicodeDecodeError: - logger.warn("Error unicode decoding %s from page %s, trying next codec", path, page) - else: - break + encoding_map = ( + ('\xef\xbb\xbf', 'utf-8'), + ('\xff\xfe\0\0', 'utf-32'), + ('\0\0\xfe\xff', 'UTF-32BE'), + ('\xff\xfe', 'utf-16'), + ('\xfe\xff', 'UTF-16BE')) + + for bom, encoding in encoding_map: + if srcString.startswith(bom): + codec_found = encoding + savebom = bom + + if codec_found is None: + logger.info("Unicode BOM not found in file %s.", path) + attempt_codecs = (defcodepage, "utf-8", "utf-16", "cp1252") + + for page in attempt_codecs: + try: + logger.info("Attempting to decode file %s using %s page.", path, page) + srcString = unicode(srcString, page) + codec_found = page + logger.info("File %s decoded using %s page.", path, page) + except UnicodeDecodeError: + logger.info("Error unicode decoding %s from page %s, trying next codec", path, page) + else: + break + else: + logger.info("Unicode BOM detected in %s, using %s page.", path, codec_found) + srcString = unicode(srcString[len(savebom):], codec_found) + else: # nasty hack to detect other transparent utf-16 loading if srcString[0] == '<' and 'utf-16' in srcString[:128].lower(): @@ -874,8 +907,17 @@ class Fit(object): else: codec_found = "utf-8" - _, fitsImport = Port.importAuto(srcString, path, callback=callback, encoding=codec_found) - fits += fitsImport + if codec_found is None: + return False, "Proper codec could not be established for %s" % path + + try: + _, fitsImport = Port.importAuto(srcString, path, callback=callback, encoding=codec_found) + fits += fitsImport + except xml.parsers.expat.ExpatError, e: + return False, "Malformed XML in %s"%path + except Exception, e: + logger.exception("Unknown exception processing: %s", path) + return False, "Unknown Error while processing %s"%path IDs = [] numFits = len(fits) @@ -888,12 +930,12 @@ class Fit(object): IDs.append(fit.ID) if callback: # Pulse wx.CallAfter( - callback, + callback, 1, "Processing complete, saving fits to database\n(%d/%d)" % (i+1, numFits) ) - return fits + return True, fits def importFitFromBuffer(self, bufferStr, activeFit=None): _, fits = Port.importAuto(bufferStr, activeFit=activeFit) diff --git a/service/market.py b/service/market.py index 9abed103c..39c700ce5 100644 --- a/service/market.py +++ b/service/market.py @@ -235,7 +235,11 @@ class Market(): "Guristas Shuttle": False, "Mobile Decoy Unit": False, # Seems to be left over test mod for deployables "Tournament Micro Jump Unit": False, # Normally seen only on tournament arenas - "Council Diplomatic Shuttle": False, # CSM X celebration] + "Council Diplomatic Shuttle": False, # CSM X celebration + "Civilian Gatling Railgun": True, + "Civilian Gatling Pulse Laser": True, + "Civilian Gatling Autocannon": True, + "Civilian Light Electron Blaster": True, } # do not publish ships that we convert @@ -262,8 +266,7 @@ class Market(): "'Wild' Miner I": ("Storyline", "Miner I"), "Medium Nano Armor Repair Unit I": ("Tech I", "Medium Armor Repairer I"), "Large 'Reprieve' Vestment Reconstructer I": ("Storyline", "Large Armor Repairer I"), - "Khanid Navy Torpedo Launcher": ("Faction", "Torpedo Launcher I"), - "Shadow Serpentis Remote Sensor Dampener": ("Faction", "Remote Sensor Dampener I") } + "Khanid Navy Torpedo Launcher": ("Faction", "Torpedo Launcher I"),} # Parent type name: set(item names) self.ITEMS_FORCEDMETAGROUP_R = {} for item, value in self.ITEMS_FORCEDMETAGROUP.items(): @@ -504,8 +507,10 @@ class Market(): parents.add(parent) # Check for overrides and add them if any if parent.name in self.ITEMS_FORCEDMETAGROUP_R: - for itmn in self.ITEMS_FORCEDMETAGROUP_R[parent.name]: - variations.add(self.getItem(itmn)) + for item in self.ITEMS_FORCEDMETAGROUP_R[parent.name]: + i = self.getItem(item) + if i: + variations.add(i) # Add all parents to variations set variations.update(parents) # Add all variations of parents to the set diff --git a/service/port.py b/service/port.py index fc7d308b7..9f98b8383 100644 --- a/service/port.py +++ b/service/port.py @@ -44,6 +44,9 @@ INV_FLAGS = { Slot.RIG: 92, Slot.SUBSYSTEM: 125} +INV_FLAG_CARGOBAY = 5 +INV_FLAG_DRONEBAY = 87 + class Port(object): """Service which houses all import/export format functions""" @classmethod @@ -90,7 +93,24 @@ class Port(object): item['type']['href'] = "%stypes/%d/"%(eve._authed_endpoint, module.item.ID) item['type']['id'] = module.item.ID item['type']['name'] = '' + fit['items'].append(item) + for cargo in ofit.cargo: + item = nested_dict() + item['flag'] = INV_FLAG_CARGOBAY + item['quantity'] = cargo.amount + item['type']['href'] = "%stypes/%d/"%(eve._authed_endpoint, cargo.item.ID) + item['type']['id'] = cargo.item.ID + item['type']['name'] = '' + fit['items'].append(item) + + for drone in ofit.drones: + item = nested_dict() + item['flag'] = INV_FLAG_DRONEBAY + item['quantity'] = drone.amount + item['type']['href'] = "%stypes/%d/"%(eve._authed_endpoint, drone.item.ID) + item['type']['id'] = drone.item.ID + item['type']['name'] = '' fit['items'].append(item) return json.dumps(fit) @@ -142,11 +162,11 @@ class Port(object): for module in items: try: item = sMkt.getItem(module['type']['id'], eager="group.category") - if item.category.name == "Drone": + if module['flag'] == INV_FLAG_DRONEBAY: d = Drone(item) d.amount = module['quantity'] f.drones.append(d) - elif item.category.name == "Charge": + elif module['flag'] == INV_FLAG_CARGOBAY: c = Cargo(item) c.amount = module['quantity'] f.cargo.append(c) @@ -531,12 +551,13 @@ class Port(object): offineSuffix = " /OFFLINE" export = "[%s, %s]\n" % (fit.ship.item.name, fit.name) stuff = {} + sFit = service.Fit.getInstance() for module in fit.modules: slot = module.slot if not slot in stuff: stuff[slot] = [] curr = module.item.name if module.item else ("[Empty %s slot]" % Slot.getName(slot).capitalize() if slot is not None else "") - if module.charge: + if module.charge and sFit.serviceFittingOptions["exportCharges"]: curr += ", %s" % module.charge.name if module.state == State.OFFLINE: curr += offineSuffix @@ -644,6 +665,8 @@ class Port(object): doc = xml.dom.minidom.Document() fittings = doc.createElement("fittings") doc.appendChild(fittings) + sFit = service.Fit.getInstance() + for i, fit in enumerate(fits): try: fitting = doc.createElement("fitting") @@ -681,7 +704,7 @@ class Port(object): hardware.setAttribute("slot", "%s slot %d" % (slotName, slotId)) fitting.appendChild(hardware) - if module.charge: + if module.charge and sFit.serviceFittingOptions["exportCharges"]: if not module.charge.name in charges: charges[module.charge.name] = 0 # `or 1` because some charges (ie scripts) are without qty diff --git a/service/pycrest/eve.py b/service/pycrest/eve.py index 0e1585035..c0f33becd 100644 --- a/service/pycrest/eve.py +++ b/service/pycrest/eve.py @@ -26,6 +26,7 @@ except ImportError: # pragma: no cover from urllib import quote import logging import re +import config logger = logging.getLogger("pycrest.eve") cache_re = re.compile(r'max-age=([0-9]+)') @@ -103,7 +104,7 @@ class APIConnection(object): if additional_headers is None: additional_headers = {} if user_agent is None: - user_agent = "PyCrest/{0}".format(version) + user_agent = "pyfa/{0} ({1})".format(config.version, config.tag) session.headers.update({ "User-Agent": user_agent, "Accept": "application/json", diff --git a/service/server.py b/service/server.py index 714e93d1f..9f48534e1 100644 --- a/service/server.py +++ b/service/server.py @@ -3,6 +3,7 @@ import urlparse import socket import thread import wx +from service.settings import CRESTSettings import logging @@ -55,8 +56,11 @@ class StoppableHTTPServer(BaseHTTPServer.HTTPServer): def server_bind(self): BaseHTTPServer.HTTPServer.server_bind(self) - # Allow listening for 60 seconds - sec = 60 + self.settings = CRESTSettings.getInstance() + + # Allow listening for x seconds + sec = self.settings.get('timeout') + logger.debug("Running server for %d seconds", sec) self.socket.settimeout(0.5) self.max_tries = sec / self.socket.gettimeout() diff --git a/service/settings.py b/service/settings.py index 10e7389b5..5b4bd003b 100644 --- a/service/settings.py +++ b/service/settings.py @@ -278,7 +278,7 @@ class CRESTSettings(): # mode # 0 - Implicit authentication # 1 - User-supplied client details - serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": ""} + serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": "", "timeout": 60} self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings("pyfaServiceCRESTSettings", serviceCRESTDefaultSettings) diff --git a/service/update.py b/service/update.py index cb37a129a..47a3e35b0 100644 --- a/service/update.py +++ b/service/update.py @@ -37,7 +37,7 @@ class CheckUpdateThread(threading.Thread): network = service.Network.getInstance() try: - response = network.request('https://api.github.com/repos/DarkFenX/Pyfa/releases', network.UPDATE) + response = network.request('https://api.github.com/repos/pyfa-org/Pyfa/releases', network.UPDATE) jsonResponse = json.loads(response.read()) jsonResponse.sort(key=lambda x: calendar.timegm(dateutil.parser.parse(x['published_at']).utctimetuple()), reverse=True) diff --git a/setup-osx.py b/setup-osx.py new file mode 100644 index 000000000..b27a5df2b --- /dev/null +++ b/setup-osx.py @@ -0,0 +1,22 @@ +""" +This is a setup.py script generated by py2applet +Usage: + python setup.py py2app +""" + +from setuptools import setup +import requests.certs +APP = ['pyfa.py'] +DATA_FILES = ['eve.db', 'README.md', 'LICENSE', 'imgs', requests.certs.where()] +OPTIONS = { + 'argv_emulation': False, + 'iconfile': 'dist_assets/mac/pyfa.icns', + 'packages': ['eos', 'gui', 'service', 'utils'] +} + +setup( + app=APP, + data_files=DATA_FILES, + options={'py2app': OPTIONS}, + setup_requires=['py2app'], +) diff --git a/utils/timer.py b/utils/timer.py index e852d8603..c1ca87a8b 100644 --- a/utils/timer.py +++ b/utils/timer.py @@ -18,7 +18,7 @@ class Timer(): def checkpoint(self, name=''): text = u'Timer - {timer} - {checkpoint} - {last:.2f}ms ({elapsed:.2f}ms elapsed)'.format( timer=self.name, - checkpoint=name, + checkpoint=unicode(name, "utf-8"), last=self.last, elapsed=self.elapsed ).strip()