Merge branch 'master' into citadel

Conflicts:
	config.py
	service/market.py
This commit is contained in:
blitzmann
2016-07-03 01:10:26 -04:00
404 changed files with 1230 additions and 362 deletions

View File

@@ -14,8 +14,13 @@ The latest version along with release notes can always be found on the project's
## Installation
Windows and OS X users are supplied self-contained builds of pyfa on the [latest releases](https://github.com/pyfa-org/Pyfa/releases/latest) page. An `.exe` installer is also available for Windows builds. Linux users can run pyfa using their distribution's Python interpreter. There is no official self-contained package for Linux, however, there are a number of third-party packages available through distribution-specific repositories.
### OS X
If you got [Homebrew](http://brew.sh), simply fire up in terminal:
#### OS X
There are two different distributives for OS X: `-mac` and `-mac-deprecated`.
* `-mac`: based on wxPython 3.0.2.0 and has updated libraries. This is the recommended build.
* `-mac-deprecated`: utilizes older binaries running on wxPython 2.8; because of this, some features are not available (currently CREST support and Attribute Overrides). Additionally, as development happens primarily on wxPython 3.0, a few GUI bugs may pop up as `-mac-deprecated` is not actively tested. However, due to some general issues with wxPython 3.0, especially on some newer OS X versions, `-mac-deprecated` is still offered for those that need it.
There is also a [Homebrew](http://brew.sh) option for installing pyfa on OS X. Please note this is maintained by a third-party and is not tested by pyfa developers. Simply fire up in terminal:
```
$ brew cask install pyfa
```
@@ -59,4 +64,4 @@ pyfa is licensed under the GNU GPL v3.0, see LICENSE
* Email: sable.blitzmann@gmail.com
## CCP Copyright Notice
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to Osmium to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Osmium. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to pyfa to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, pyfa. CCP is in no way responsible for the content on or functioning of this program, nor can it be liable for any damage arising from the use of this program.

View File

@@ -18,10 +18,10 @@ debug = False
saveInRoot = False
# Version data
version = "1.21.3"
version = "1.22.1"
tag = "git"
expansionName = "Citadel"
expansionVersion = "1.11"
expansionName = "YC 118.6"
expansionVersion = "1.0"
evemonMinVersion = "4081"
pyfaPath = None

View File

@@ -194,7 +194,7 @@ def searchItems(nameLike, where=None, join=None, eager=None):
items = gamedata_session.query(Item).options(*processEager(eager)).join(*join)
for token in nameLike.split(' '):
token_safe = u"%{0}%".format(sqlizeString(token))
items = items.filter(processWhere(Item.name.like(token_safe, escape="\\"), where))
items = items.filter(and_(Item.name.like(token_safe, escape="\\"), where))
items = items.limit(100).all()
return items

View File

@@ -14,6 +14,7 @@ __all__ = [
"targetResists",
"override",
"crest",
"implantSet"
"implantSet",
"loadDefaultDatabaseValues"
]

View File

@@ -20,7 +20,7 @@
from sqlalchemy import Table, Column, Integer, ForeignKey, Boolean
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import Fighter
from eos.types import Fighter, Fit
from sqlalchemy.orm import *
from sqlalchemy.sql import and_
from eos.effectHandlerHelpers import *
@@ -42,6 +42,7 @@ fighter_abilities_table = Table("fightersAbilities", saveddata_meta,
mapper(Fighter, fighters_table,
properties = {
"owner": relation(Fit),
"_Fighter__abilities": relation(
FighterAbility,
backref="fighter",

View File

@@ -0,0 +1,190 @@
#===============================================================================
# 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 <http://www.gnu.org/licenses/>.
#===============================================================================
import eos.db
import eos.types
class ImportError(Exception):
pass
class DefaultDatabaseValues():
instance = None
@classmethod
def importDamageProfileDefaults(self):
damageProfileList = []
damageProfileList.append(["Uniform", "25", "25", "25", "25"])
damageProfileList.append(["[Generic]EM", "100", "0", "0", "0"])
damageProfileList.append(["[Generic]Thermal", "0", "100", "0", "0"])
damageProfileList.append(["[Generic]Kinetic", "0", "0", "100", "0"])
damageProfileList.append(["[Generic]Explosive", "0", "0", "0", "100"])
damageProfileList.append(["[NPC][Asteroid] Blood Raiders", "5067", "4214", "0", "0"])
damageProfileList.append(["[Bombs]Concussion Bomb", "0", "0", "6400", "0"])
damageProfileList.append(["[Bombs]Electron Bomb", "6400", "0", "0", "0"])
damageProfileList.append(["[Bombs]Scorch Bomb", "0", "6400", "0", "0"])
damageProfileList.append(["[Bombs]Shrapnel Bomb", "0", "0", "0", "6400"])
damageProfileList.append(["[Frequency Crystals][T2] Gleam", "56", "56", "0", "0"])
damageProfileList.append(["[Frequency Crystals][T2] Aurora", "40", "24", "0", "0"])
damageProfileList.append(["[Frequency Crystals][T2] Scorch", "72", "16", "0", "0"])
damageProfileList.append(["[Frequency Crystals][T2] Conflagration", "61.6", "61.6", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Gamma", "61.6", "35.2", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Infrared", "44", "17.6", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Microwave", "35.2", "17.6", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Multifrequency", "61.6", "44", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Radio", "44", "0", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Standard", "44", "26.4", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Ultraviolet", "52.8", "26.4", "0", "0"])
damageProfileList.append(["[Frequency Crystals]Xray", "52.8", "35.2", "0", "0"])
damageProfileList.append(["[Hybrid Charges][T2] Void", "0", "61.6", "61.6", "0"])
damageProfileList.append(["[Hybrid Charges][T2] Null", "0", "48", "40", "0"])
damageProfileList.append(["[Hybrid Charges][T2] Javelin", "0", "64", "48", "0"])
damageProfileList.append(["[Hybrid Charges][T2] Spike", "0", "32", "32", "0"])
damageProfileList.append(["[Hybrid Charges]Antimatter", "0", "48", "67.2", "0"])
damageProfileList.append(["[Hybrid Charges]Iridium", "0", "28.8", "38.4", "0"])
damageProfileList.append(["[Hybrid Charges]Iron", "0", "19.2", "28.8", "0"])
damageProfileList.append(["[Hybrid Charges]Lead", "0", "28.8", "48", "0"])
damageProfileList.append(["[Hybrid Charges]Plutonium", "0", "48", "57.6", "0"])
damageProfileList.append(["[Hybrid Charges]Thorium", "0", "38.4", "48", "0"])
damageProfileList.append(["[Hybrid Charges]Tungsten", "0", "19.2", "38.4", "0"])
damageProfileList.append(["[Hybrid Charges]Uranium", "0", "38.4", "57.6", "0"])
damageProfileList.append(["[Missiles]Mjolnir", "100", "0", "0", "0"])
damageProfileList.append(["[Missiles]Inferno", "0", "100", "0", "0"])
damageProfileList.append(["[Missiles]Scourge", "0", "0", "100", "0"])
damageProfileList.append(["[Missiles]Nova", "0", "0", "0", "100"])
damageProfileList.append(["[Missiles][Structure) Standup Missile", "100", "100", "100", "100"])
damageProfileList.append(["[Projectile Ammo][T2] Tremor", "0", "0", "24", "40"])
damageProfileList.append(["[Projectile Ammo][T2] Quake", "0", "0", "40", "72"])
damageProfileList.append(["[Projectile Ammo][T2] Hail", "0", "0", "26.4", "96.8"])
damageProfileList.append(["[Projectile Ammo][T2] Barrage", "0", "0", "40", "48"])
damageProfileList.append(["[Projectile Ammo]Carbonized Lead", "0", "0", "35.2", "8.8"])
damageProfileList.append(["[Projectile Ammo]Depleted Uranium", "0", "26.4", "17.6", "26.4"])
damageProfileList.append(["[Projectile Ammo]EMP", "79.2", "0", "8.8", "17.6"])
damageProfileList.append(["[Projectile Ammo]Fusion", "0", "0", "17.6", "88"])
damageProfileList.append(["[Projectile Ammo]Nuclear", "0", "0", "8.8", "35.2"])
damageProfileList.append(["[Projectile Ammo]Phased Plasma", "0", "88", "17.6", "0"])
damageProfileList.append(["[Projectile Ammo]Proton", "26.4", "0", "17.6", "0"])
damageProfileList.append(["[Projectile Ammo]Titanium Sabot", "0", "0", "52.8", "176"])
damageProfileList.append(["[NPC][Burner] Cruor (Blood Raiders)", "90", "90", "0", "0"])
damageProfileList.append(["[NPC][Burner] Dramiel (Angel)", "55", "0", "20", "96"])
damageProfileList.append(["[NPC][Burner] Daredevil (Serpentis)", "0", "110", "154", "0"])
damageProfileList.append(["[NPC][Burner] Succubus (Sanshas Nation)", "135", "30", "0", "0"])
damageProfileList.append(["[NPC][Burner] Worm (Guristas)", "0", "0", "228", "0"])
damageProfileList.append(["[NPC][Burner] Enyo", "0", "147", "147", "0"])
damageProfileList.append(["[NPC][Burner] Hawk", "0", "0", "247", "0"])
damageProfileList.append(["[NPC][Burner] Jaguar", "36", "0", "50", "182"])
damageProfileList.append(["[NPC][Burner] Vengeance", "232", "0", "0", "0"])
damageProfileList.append(["[NPC][Burner] Ashimmu (Blood Raiders)", "260", "100", "0", "0"])
damageProfileList.append(["[NPC][Burner] Talos", "0", "413", "413", "0"])
damageProfileList.append(["[NPC][Burner] Sentinel", "0", "75", "0", "90"])
damageProfileList.append(["[NPC][Asteroid] Angel Cartel", "1838", "562", "2215", "3838"])
damageProfileList.append(["[NPC][Deadspace] Angel Cartel", "369", "533", "1395", "3302"])
damageProfileList.append(["[NPC][Deadspace] Blood Raiders", "6040", "5052", "10", "15"])
damageProfileList.append(["[NPC][Asteroid] Guristas", "0", "1828", "7413", "0"])
damageProfileList.append(["[NPC][Deadspace] Guristas", "0", "1531", "9680", "0"])
damageProfileList.append(["[NPC][Asteroid] Rogue Drone", "394", "666", "1090", "1687"])
damageProfileList.append(["[NPC][Deadspace] Rogue Drone", "276", "1071", "1069", "871"])
damageProfileList.append(["[NPC][Asteroid] Sanshas Nation", "5586", "4112", "0", "0"])
damageProfileList.append(["[NPC][Deadspace] Sanshas Nation", "3009", "2237", "0", "0"])
damageProfileList.append(["[NPC][Asteroid] Serpentis", "0", "5373", "4813", "0"])
damageProfileList.append(["[NPC][Deadspace] Serpentis", "0", "3110", "1929", "0"])
damageProfileList.append(["[NPC][Mission] Amarr Empire", "4464", "3546", "97", "0"])
damageProfileList.append(["[NPC][Mission] Caldari State", "0", "2139", "4867", "0"])
damageProfileList.append(["[NPC][Mission] CONCORD", "336", "134", "212", "412"])
damageProfileList.append(["[NPC][Mission] Gallente Federation", "9", "3712", "2758", "0"])
damageProfileList.append(["[NPC][Mission] Khanid", "612", "483", "43", "6"])
damageProfileList.append(["[NPC][Mission] Minmatar Republic", "1024", "388", "1655", "4285"])
damageProfileList.append(["[NPC][Mission] Mordus Legion", "25", "262", "625", "0"])
damageProfileList.append(["[NPC][Mission] Thukker", "0", "52", "10", "79"])
damageProfileList.append(["[NPC][Other] Sleepers", "1472", "1472", "1384", "1384"])
damageProfileList.append(["[NPC][Other] Sansha Incursion", "1682", "1347", "3678", "3678"])
for damageProfileRow in damageProfileList:
name, em, therm, kin, exp = damageProfileRow
damageProfile = eos.db.getDamagePattern(name)
if damageProfile is None:
damageProfile = eos.types.DamagePattern(em, therm, kin, exp)
damageProfile.name = name
eos.db.save(damageProfile)
@classmethod
def importResistProfileDefaults(self):
targetResistProfileList = []
targetResistProfileList.append(["Uniform (25%)", "0.25", "0.25", "0.25", "0.25"])
targetResistProfileList.append(["Uniform (50%)", "0.50", "0.50", "0.50", "0.50"])
targetResistProfileList.append(["Uniform (75%)", "0.75", "0.75", "0.75", "0.75"])
targetResistProfileList.append(["[T1 Resist]Shield", "0.0", "0.20", "0.40", "0.50"])
targetResistProfileList.append(["[T1 Resist]Armor", "0.50", "0.45", "0.25", "0.10"])
targetResistProfileList.append(["[T1 Resist]Hull", "0.33", "0.33", "0.33", "0.33"])
targetResistProfileList.append(["[T1 Resist]Shield (+T2 DCU)", "0.125", "0.30", "0.475", "0.562"])
targetResistProfileList.append(["[T1 Resist]Armor (+T2 DCU)", "0.575", "0.532", "0.363", "0.235"])
targetResistProfileList.append(["[T1 Resist]Hull (+T2 DCU)", "0.598", "0.598", "0.598", "0.598"])
targetResistProfileList.append(["[NPC][Asteroid] Angel Cartel", "0.54", "0.42", "0.37", "0.32"])
targetResistProfileList.append(["[NPC][Asteroid] Blood Raiders", "0.34", "0.39", "0.45", "0.52"])
targetResistProfileList.append(["[NPC][Asteroid] Guristas", "0.55", "0.35", "0.3", "0.48"])
targetResistProfileList.append(["[NPC][Asteroid] Rogue Drones", "0.35", "0.38", "0.44", "0.49"])
targetResistProfileList.append(["[NPC][Asteroid] Sanshas Nation", "0.35", "0.4", "0.47", "0.53"])
targetResistProfileList.append(["[NPC][Asteroid] Serpentis", "0.49", "0.38", "0.29", "0.51"])
targetResistProfileList.append(["[NPC][Deadspace] Angel Cartel", "0.59", "0.48", "0.4", "0.32"])
targetResistProfileList.append(["[NPC][Deadspace] Blood Raiders", "0.31", "0.39", "0.47", "0.56"])
targetResistProfileList.append(["[NPC][Deadspace] Guristas", "0.57", "0.39", "0.31", "0.5"])
targetResistProfileList.append(["[NPC][Deadspace] Rogue Drones", "0.42", "0.42", "0.47", "0.49"])
targetResistProfileList.append(["[NPC][Deadspace] Sanshas Nation", "0.31", "0.39", "0.47", "0.56"])
targetResistProfileList.append(["[NPC][Deadspace] Serpentis", "0.49", "0.38", "0.29", "0.56"])
targetResistProfileList.append(["[NPC][Mission] Amarr Empire", "0.34", "0.38", "0.42", "0.46"])
targetResistProfileList.append(["[NPC][Mission] Caldari State", "0.51", "0.38", "0.3", "0.51"])
targetResistProfileList.append(["[NPC][Mission] CONCORD", "0.47", "0.46", "0.47", "0.47"])
targetResistProfileList.append(["[NPC][Mission] Gallente Federation", "0.51", "0.38", "0.31", "0.52"])
targetResistProfileList.append(["[NPC][Mission] Khanid", "0.51", "0.42", "0.36", "0.4"])
targetResistProfileList.append(["[NPC][Mission] Minmatar Republic", "0.51", "0.46", "0.41", "0.35"])
targetResistProfileList.append(["[NPC][Mission] Mordus Legion", "0.32", "0.48", "0.4", "0.62"])
targetResistProfileList.append(["[NPC][Other] Sleeper", "0.61", "0.61", "0.61", "0.61"])
targetResistProfileList.append(["[NPC][Other] Sansha Incursion", "0.65", "0.63", "0.64", "0.65"])
targetResistProfileList.append(["[NPC][Burner] Cruor (Blood Raiders)", "0.8", "0.73", "0.69", "0.67"])
targetResistProfileList.append(["[NPC][Burner] Dramiel (Angel)", "0.35", "0.48", "0.61", "0.68"])
targetResistProfileList.append(["[NPC][Burner] Daredevil (Serpentis)", "0.69", "0.59", "0.59", "0.43"])
targetResistProfileList.append(["[NPC][Burner] Succubus (Sanshas Nation)", "0.35", "0.48", "0.61", "0.68"])
targetResistProfileList.append(["[NPC][Burner] Worm (Guristas)", "0.48", "0.58", "0.69", "0.74"])
targetResistProfileList.append(["[NPC][Burner] Enyo", "0.58", "0.72", "0.86", "0.24"])
targetResistProfileList.append(["[NPC][Burner] Hawk", "0.3", "0.86", "0.79", "0.65"])
targetResistProfileList.append(["[NPC][Burner] Jaguar", "0.78", "0.65", "0.48", "0.56"])
targetResistProfileList.append(["[NPC][Burner] Vengeance", "0.66", "0.56", "0.75", "0.86"])
targetResistProfileList.append(["[NPC][Burner] Ashimmu (Blood Raiders)", "0.8", "0.76", "0.68", "0.7"])
targetResistProfileList.append(["[NPC][Burner] Talos", "0.68", "0.59", "0.59", "0.43"])
targetResistProfileList.append(["[NPC][Burner] Sentinel", "0.58", "0.45", "0.52", "0.66"])
for targetResistProfileRow in targetResistProfileList:
name, em, therm, kin, exp = targetResistProfileRow
resistsProfile = eos.db.eos.db.getTargetResists(name)
if resistsProfile is None:
resistsProfile = eos.types.TargetResists(em, therm, kin, exp)
resistsProfile.name = name
eos.db.save(resistsProfile)
@classmethod
def importRequiredDefaults(self):
damageProfileList = []
damageProfileList.append(["Uniform", "25", "25", "25", "25"])
for damageProfileRow in damageProfileList:
name, em, therm, kin, exp = damageProfileRow
damageProfile = eos.db.getDamagePattern(name)
if damageProfile is None:
damageProfile = eos.types.DamagePattern(em, therm, kin, exp)
damageProfile.name = name
eos.db.save(damageProfile)

View File

@@ -18,7 +18,7 @@
#===============================================================================
from sqlalchemy.orm import eagerload
from sqlalchemy.sql import and_
from sqlalchemy.sql import and_, or_
replace = {"attributes": "_Item__attributes",
"modules": "_Fit__modules",

View File

@@ -6,5 +6,13 @@ type = "active"
def handler(fit, module, context):
for type in ("kinetic", "thermal", "explosive", "em"):
attr = "armor%sDamageResonance" % type.capitalize()
#Adjust RAH to match the current damage pattern
damagePattern = fit.damagePattern
attrDamagePattern = "%sAmount" % type
damagePatternModifier = getattr(damagePattern,attrDamagePattern)/float(sum((damagePattern.emAmount,damagePattern.thermalAmount,damagePattern.kineticAmount,damagePattern.explosiveAmount)))
modifiedResistModifier = (1-(((1-module.getModifiedItemAttr(attr))*4)*(damagePatternModifier)))
module.forceItemAttr(attr, modifiedResistModifier)
fit.ship.multiplyItemAttr(attr, module.getModifiedItemAttr(attr),
stackingPenalties=True, penaltyGroup="preMul")

View File

@@ -1,7 +1,7 @@
# boosterArmorHpPenalty
#
# Used by:
# Implants from group: Booster (12 of 42)
# Implants from group: Booster (12 of 45)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.ship.boostItemAttr("armorHP", booster.getModifiedItemAttr("boosterArmorHPPenalty"))

View File

@@ -1,7 +1,9 @@
# boosterArmorRepairAmountPenalty
#
# Used by:
# Implants from group: Booster (9 of 42)
# Implants named like: Drop Booster (3 of 4)
# Implants named like: Mindflood Booster (3 of 4)
# Implants named like: Sooth Sayer Booster (3 of 4)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit",

View File

@@ -1,7 +1,7 @@
# boosterMaxVelocityPenalty
#
# Used by:
# Implants from group: Booster (12 of 42)
# Implants from group: Booster (12 of 45)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.ship.boostItemAttr("maxVelocity", booster.getModifiedItemAttr("boosterMaxVelocityPenalty"))

View File

@@ -1,7 +1,7 @@
# boosterShieldCapacityPenalty
#
# Used by:
# Implants from group: Booster (12 of 42)
# Implants from group: Booster (12 of 45)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.ship.boostItemAttr("shieldCapacity", booster.getModifiedItemAttr("boosterShieldCapacityPenalty"))

View File

@@ -1,7 +1,9 @@
# boosterTurretOptimalRangePenalty
#
# Used by:
# Implants from group: Booster (9 of 42)
# Implants named like: Blue Pill Booster (3 of 5)
# Implants named like: Mindflood Booster (3 of 4)
# Implants named like: Sooth Sayer Booster (3 of 4)
type = "boosterSideEffect"
def handler(fit, booster, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),

View File

@@ -1,4 +1,4 @@
# capitalLauncherSkillCruiseCitadelEmDamage1
# capitalLauncherSkillCruiseCitadelEmDamage1
#
# Used by:
# Skill: XL Cruise Missiles

View File

@@ -1,7 +1,4 @@
# decreaseTargetSpeed
#
# Used by:
# Drones from group: Stasis Webifying Drone (3 of 3)
# Not used by any item
type = "active", "projected"
def handler(fit, module, context):
if "projected" not in context:

View File

@@ -1,7 +1,7 @@
# doHacking
#
# Used by:
# Modules from group: Data Miners (13 of 14)
# Modules from group: Data Miners (15 of 16)
# Module: QA Cross Protocol Analyzer
type = "active"
def handler(fit, module, context):

View File

@@ -1,7 +1,4 @@
# droneDamageBonusRequringDrones
#
# Used by:
# Skill: Drone Interfacing
# Not used by any item
type = "passive"
def handler(fit, skill, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),

View File

@@ -1,7 +1,4 @@
# eliteBonusCommandDestroyerMWDSigRadius3
#
# Used by:
# Ships from group: Command Destroyers (4 of 4)
# Not used by any item
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")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Oneiros
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 Cruisers")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Guardian
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 Cruisers")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -4,6 +4,5 @@
# Ship: Basilisk
# Ship: Etana
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 Cruisers")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogistics1"), skill="Logistics Cruisers")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Scimitar
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 Cruisers")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("eliteBonusLogistics2"), skill="Logistics Cruisers")

View File

@@ -6,4 +6,4 @@
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Neutralizer",
"energyDestabilizationAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships")
"energyNeutralizerAmount", ship.getModifiedItemAttr("eliteBonusReconShip2"), skill="Recon Ships")

View File

@@ -4,5 +4,5 @@
# Skill: EM Shield Compensation
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Resistance Amplifier",
"emDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)

View File

@@ -1,13 +1,10 @@
# energyDestabilizationNew
#
# Used by:
# Drones from group: Energy Neutralizer Drone (3 of 3)
# Not used by any item
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")
amount = container.getModifiedItemAttr("energyNeutralizerAmount")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount * multiplier, 0)

View File

@@ -0,0 +1,12 @@
# energyNeutralizerEntity
#
# Used by:
# Drones from group: Energy Neutralizer Drone (3 of 3)
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")):
amount = container.getModifiedItemAttr("energyNeutralizerAmount")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount, 0)

View File

@@ -1,14 +1,12 @@
# energyNeutralizerFalloff
#
# Used by:
# Drones from group: Energy Neutralizer Drone (3 of 3)
# Modules from group: Energy Neutralizer (51 of 51)
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")
amount = container.getModifiedItemAttr("energyNeutralizerAmount")
time = container.getModifiedItemAttr("duration")
fit.addDrain(time, amount * multiplier, 0)
fit.addDrain(time, amount, 0)

View File

@@ -1,7 +1,4 @@
# energyTransfer
#
# Used by:
# Modules from group: Remote Capacitor Transmitter (38 of 38)
# Not used by any item
type = "projected", "active"
def handler(fit, module, context):
if "projected" in context:

View File

@@ -0,0 +1,11 @@
# entityECMFalloff
#
# Used by:
# Drones named like: EC (3 of 3)
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

View File

@@ -0,0 +1,12 @@
# entityEnergyNeutralizerFalloff
#
# Used by:
# Drones from group: Energy Neutralizer Drone (3 of 3)
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")):
amount = container.getModifiedItemAttr("energyNeutralizerAmount")
time = container.getModifiedItemAttr("energyNeutralizerDuration")
fit.addDrain(time, amount, 0)

View File

@@ -1,8 +1,12 @@
# entosisDurationMultiply
#
# Used by:
# Ships from group: Supercarrier (5 of 5)
# Items from market group: Ships > Capital Ships (22 of 32)
# Ships from group: Carrier (4 of 4)
# Ships from group: Dreadnought (5 of 5)
# Ships from group: Force Auxiliary (4 of 4)
# Ships from group: Supercarrier (6 of 6)
# Ships from group: Titan (5 of 5)
# Ship: Rorqual
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemMultiply(lambda mod: mod.item.requiresSkill("Infomorph Psychology"),

View File

@@ -1,7 +1,4 @@
# ewTargetPaint
#
# Used by:
# Drones named like: TP (3 of 3)
# Not used by any item
type = "projected", "active"
def handler(fit, container, context):
if "projected" in context:

View File

@@ -4,5 +4,5 @@
# Skill: Explosive Shield Compensation
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Resistance Amplifier",
"explosiveDamageResistanceBonus", skill.getModifiedItemAttr("hardeningBonus") * skill.level)

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
@@ -10,5 +11,8 @@ prefix = "fighterAbilityLaunchBomb"
type = "active"
# This flag is required for effects that use charges in order to properly calculate reload time
hasCharges = True
def handler(fit, src, context):
pass

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.
@@ -10,5 +11,8 @@ prefix = "fighterAbilityMissiles"
type = "active"
# This flag is required for effects that use charges in order to properly calculate reload time
hasCharges = True
def handler(fit, src, context):
pass

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.

View File

@@ -1,3 +1,4 @@
# Not used by any item
"""
Since fighter abilities do not have any sort of item entity in the EVE database, we must derive the abilities from the
effects, and thus this effect file contains some custom information useful only to fighters.

View File

@@ -6,8 +6,10 @@ runTime = "late"
type = "active"
def handler(fit, module, context):
if module.charge and module.charge.name == "Nanite Repair Paste":
module.multiplyItemAttr("armorDamageAmount", 3)
multiplier = 3
else:
multiplier = 1
amount = module.getModifiedItemAttr("armorDamageAmount")
amount = module.getModifiedItemAttr("armorDamageAmount") * multiplier
speed = module.getModifiedItemAttr("duration") / 1000.0
fit.extraAttributes.increase("armorRepair", amount / speed)

View File

@@ -4,6 +4,6 @@
# Skill: Kinetic Shield Compensation
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier",
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Resistance Amplifier",
"kineticDamageResistanceBonus",
skill.getModifiedItemAttr("hardeningBonus") * skill.level)

View File

@@ -1,7 +1,4 @@
# marauderModeEffect26
#
# Used by:
# Module: Bastion Module I
# Not used by any item
type = "active"
runTime = "early"
def handler(fit, module, context):

View File

@@ -1,7 +1,7 @@
# modifyShieldResonancePostPercent
#
# Used by:
# Modules from group: Shield Amplifier (88 of 88)
# Modules from group: Shield Resistance Amplifier (88 of 88)
type = "passive"
def handler(fit, module, context):
for type in ("kinetic", "thermal", "explosive", "em"):

View File

@@ -1,11 +1,17 @@
# moduleBonusAncillaryRemoteArmorRepairer
#
# Used by:
# Modules from group: Ancillary Remote Armor Repairer (4 of 4)
runTime = "late"
type = "projected", "active"
def handler(fit, module, context):
if "projected" not in context: return
if module.charge and module.charge.name == "Nanite Repair Paste":
module.multiplyItemAttr("armorDamageAmount", 3)
amount = module.getModifiedItemAttr("armorDamageAmount")
multiplier = 3
else:
multiplier = 1
amount = module.getModifiedItemAttr("armorDamageAmount") * multiplier
speed = module.getModifiedItemAttr("duration") / 1000.0
fit.extraAttributes.increase("armorRepair", amount / speed)

View File

@@ -0,0 +1,11 @@
# moduleBonusAncillaryRemoteShieldBooster
#
# Used by:
# Modules from group: Ancillary Remote Shield Booster (4 of 4)
runTime = "late"
type = "projected", "active"
def handler(fit, module, context):
if "projected" not in context: return
amount = module.getModifiedItemAttr("shieldBonus")
speed = module.getModifiedItemAttr("duration") / 1000.0
fit.extraAttributes.increase("shieldRepair", amount / speed)

View File

@@ -4,9 +4,8 @@
# Module: Networked Sensor Array
type = "active"
def handler(fit, src, context):
fit.ship.increaseItemAttr("maxLockedTargets", src.getModifiedItemAttr("maxLockedTargetsBonus"))
fit.ship.multiplyItemAttr("maxTargetRange", src.getModifiedItemAttr("maxTargetRangeMultiplier"), stackingPenalties=True, penaltyGroup="postMul")
fit.ship.multiplyItemAttr("scanResolution", src.getModifiedItemAttr("scanResolutionMultiplier"), stackingPenalties=True)
fit.ship.boostItemAttr("scanResolution", src.getModifiedItemAttr("scanResolutionBonus"), stackingPenalties=True)
for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'):
fit.ship.boostItemAttr("scan{}Strength".format(scanType),

View File

@@ -44,14 +44,9 @@ def handler(fit, src, context):
fit.ship.forceItemAttr("disallowAssistance", src.getModifiedItemAttr("disallowAssistance"))
# new in April 2016 release
for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'):
fit.ship.boostItemAttr("scan{}Strength".format(scanType),
src.getModifiedItemAttr("scan{}StrengthPercent".format(scanType)),
stackingPenalties=True)
# missile ROF bonus
for group in ("Missile Launcher XL Torpedo", "Missile Launcher Rapid Torpedo", "Missile Launcher XL Cruise"):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == group, "speed", src.getModifiedItemAttr("siegeLauncherROFBonus"), stackingPenalties=True)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == group, "speed", src.getModifiedItemAttr("siegeLauncherROFBonus"))
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Torpedoes"), "maxVelocity", src.getModifiedItemAttr("siegeTorpedoVelocityBonus"), stackingPenalties=True)

View File

@@ -56,12 +56,6 @@ def handler(fit, src, context):
fit.ship.forceItemAttr("disallowAssistance", src.getModifiedItemAttr("disallowAssistance"))
# new in April 2016 release
for scanType in ('Magnetometric', 'Ladar', 'Gravimetric', 'Radar'):
fit.ship.boostItemAttr("scan{}Strength".format(scanType),
src.getModifiedItemAttr("scan{}StrengthPercent".format(scanType)),
stackingPenalties=True)
fit.drones.filteredItemBoost(lambda mod: mod.item.requiresSkill("Drones"), "damageMultiplier", src.getModifiedItemAttr("droneDamageBonus"), stackingPenalties=True)
fit.ship.increaseItemAttr("warpScrambleStatus", src.getModifiedItemAttr("siegeModeWarpStatus"))

View File

@@ -1,9 +1,9 @@
# overloadSelfDamageBonus
#
# Used by:
# Modules from group: Energy Weapon (102 of 209)
# Modules from group: Hybrid Weapon (106 of 221)
# Modules from group: Projectile Weapon (100 of 165)
# Modules from group: Energy Weapon (101 of 209)
# Modules from group: Hybrid Weapon (105 of 221)
# Modules from group: Projectile Weapon (99 of 165)
type = "overheat"
def handler(fit, module, context):
module.boostItemAttr("damageMultiplier", module.getModifiedItemAttr("overloadDamageModifier"))

View File

@@ -4,6 +4,5 @@
# Ship: Guardian
# Ship: Oneiros
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"power", ship.getModifiedItemAttr("remoteArmorPowerNeedBonus"))
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "power", src.getModifiedItemAttr("remoteArmorPowerNeedBonus"))

View File

@@ -0,0 +1,10 @@
# remoteArmorRepairEntity
#
# Used by:
# Drones named like: Armor Maintenance Bot (6 of 6)
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)

View File

@@ -2,7 +2,6 @@
#
# Used by:
# Modules from group: Remote Armor Repairer (39 of 39)
# Drones named like: Armor Maintenance Bot (6 of 6)
type = "projected", "active"
def handler(fit, container, context):
if "projected" in context:

View File

@@ -1,7 +1,4 @@
# remoteEcmBurst
#
# Used by:
# Module: ECM Jammer Burst Projector
# Not used by any item
type = 'active'
def handler(fit, module, context):
pass

View File

@@ -14,4 +14,4 @@ def handler(fit, src, context):
):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
tgtAttr, src.getModifiedItemAttr(srcAttr),
stackingPenalties=True)
stackingPenalties=True, remoteResists=True)

View File

@@ -1,7 +1,4 @@
# remoteHullRepair
#
# Used by:
# Drones named like: Hull Maintenance Bot (6 of 6)
# Not used by any item
type = "projected", "active"
runTime = "late"
def handler(fit, module, context):

View File

@@ -0,0 +1,11 @@
# remoteHullRepairEntity
#
# Used by:
# Drones named like: Hull Maintenance Bot (6 of 6)
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)

View File

@@ -2,7 +2,6 @@
#
# Used by:
# Modules from group: Remote Hull Repairer (8 of 8)
# Drones named like: Hull Maintenance Bot (6 of 6)
type = "projected", "active"
runTime = "late"
def handler(fit, module, context):

View File

@@ -0,0 +1,14 @@
# remoteSensorDampEntity
#
# Used by:
# Drones named like: SD (3 of 3)
type= "projected", "active"
def handler(fit, module, context):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
stackingPenalties = True, remoteResists=True)
fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
stackingPenalties = True, remoteResists=True)

View File

@@ -2,12 +2,13 @@
#
# Used by:
# Modules from group: Sensor Dampener (6 of 6)
# Drones named like: SD (3 of 3)
type= "projected", "active"
def handler(fit, module, context):
if "projected" not in context:
return
fit.ship.boostItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeBonus"),
stackingPenalties = True)
stackingPenalties = True, remoteResists=True)
fit.ship.boostItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionBonus"),
stackingPenalties = True)
stackingPenalties = True, remoteResists=True)

View File

@@ -0,0 +1,10 @@
# remoteShieldTransferEntity
#
# Used by:
# Drones named like: Shield Maintenance Bot (6 of 6)
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)

View File

@@ -2,7 +2,6 @@
#
# Used by:
# Modules from group: Remote Shield Booster (38 of 38)
# Drones named like: Shield Maintenance Bot (6 of 6)
type = "projected", "active"
def handler(fit, container, context):
if "projected" in context:

View File

@@ -0,0 +1,9 @@
# remoteTargetPaintEntity
#
# Used by:
# Drones named like: TP (3 of 3)
type = "projected", "active"
def handler(fit, container, context):
if "projected" in context:
fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"),
stackingPenalties = True, remoteResists=True)

View File

@@ -2,9 +2,8 @@
#
# Used by:
# Modules from group: Target Painter (8 of 8)
# Drones named like: TP (3 of 3)
type = "projected", "active"
def handler(fit, container, context):
if "projected" in context:
fit.ship.boostItemAttr("signatureRadius", container.getModifiedItemAttr("signatureRadiusBonus"),
stackingPenalties = True)
stackingPenalties = True, remoteResists=True)

View File

@@ -1,17 +1,16 @@
# remoteTrackingDisruptFalloff
#
# Used by:
# Drones named like: TD (3 of 3)
# Variations of module: Tracking Disruptor I (6 of 6)
type= "projected", "active"
def handler(fit, module, context):
if "projected" in context:
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
stackingPenalties = True)
stackingPenalties = True, remoteResists=True)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"maxRange", module.getModifiedItemAttr("maxRangeBonus"),
stackingPenalties = True)
stackingPenalties = True, remoteResists=True)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"falloff", module.getModifiedItemAttr("falloffBonus"),
stackingPenalties = True)
stackingPenalties = True, remoteResists=True)

View File

@@ -0,0 +1,16 @@
# remoteWeaponDisruptEntity
#
# Used by:
# Drones named like: TD (3 of 3)
type= "projected", "active"
def handler(fit, module, context):
if "projected" in context:
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"trackingSpeed", module.getModifiedItemAttr("trackingSpeedBonus"),
stackingPenalties = True, remoteResists=True)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"maxRange", module.getModifiedItemAttr("maxRangeBonus"),
stackingPenalties = True, remoteResists=True)
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Gunnery"),
"falloff", module.getModifiedItemAttr("falloffBonus"),
stackingPenalties = True, remoteResists=True)

View File

@@ -0,0 +1,9 @@
# remoteWebifierEntity
#
# Used by:
# Drones from group: Stasis Webifying Drone (3 of 3)
type = "active", "projected"
def handler(fit, module, context):
if "projected" not in context: return
fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"),
stackingPenalties = True, remoteResists=True)

View File

@@ -1,11 +1,10 @@
# remoteWebifierFalloff
#
# Used by:
# Drones from group: Stasis Webifying Drone (3 of 3)
# 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)
stackingPenalties = True, remoteResists=True)

View File

@@ -1,7 +1,4 @@
# rigDrawbackBonusEffect
#
# Used by:
# Skills from group: Rigging (9 of 10)
# Not used by any item
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill(skill),

View File

@@ -0,0 +1,9 @@
# rigDrawbackReductionArmor
#
# Used by:
# Skill: Armor Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Armor", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Resource Processing", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,9 @@
# rigDrawbackReductionAstronautics
#
# Used by:
# Skill: Astronautics Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Navigation", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Anchor", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,8 @@
# rigDrawbackReductionDrones
#
# Used by:
# Skill: Drones Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Drones", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,10 @@
# rigDrawbackReductionElectronic
#
# Used by:
# Skill: Electronic Superiority Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Electronic Systems", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Scanning", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Targeting", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,8 @@
# rigDrawbackReductionEnergyWeapon
#
# Used by:
# Skill: Energy Weapon Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Energy Weapon", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,8 @@
# rigDrawbackReductionHybrid
#
# Used by:
# Skill: Hybrid Weapon Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Hybrid Weapon", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,8 @@
# rigDrawbackReductionLauncher
#
# Used by:
# Skill: Launcher Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Launcher", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,8 @@
# rigDrawbackReductionProjectile
#
# Used by:
# Skill: Projectile Weapon Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Projectile Weapon", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -0,0 +1,8 @@
# rigDrawbackReductionShield
#
# Used by:
# Skill: Shield Rigging
type = "passive"
def handler(fit, src, context):
lvl = src.level
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Rig Shield", "drawback", src.getModifiedItemAttr("rigDrawbackBonus") * lvl)

View File

@@ -1,7 +1,7 @@
# scanStrengthBonusPercentPassive
#
# Used by:
# Implants named like: High grade (20 of 60)
# Implants named like: High grade (20 of 61)
type = "passive"
def handler(fit, implant, context):
for type in ("Gravimetric", "Magnetometric", "Radar", "Ladar"):

View File

@@ -1,8 +1,8 @@
# shieldCapacityBonusOnline
#
# Used by:
# Modules from group: Shield Amplifier (88 of 88)
# Modules from group: Shield Extender (33 of 33)
# Modules from group: Shield Resistance Amplifier (88 of 88)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("shieldCapacity", module.getModifiedItemAttr("capacityBonus"))

View File

@@ -3,6 +3,5 @@
# Used by:
# Ships from group: Logistics (3 of 5)
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"cpu", ship.getModifiedItemAttr("shieldTransportCpuNeedBonus"))
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "cpu", src.getModifiedItemAttr("shieldTransportCpuNeedBonus"))

View File

@@ -1,7 +1,9 @@
# shipAdvancedSpaceshipCommandAgilityBonus
#
# Used by:
# Items from market group: Ships > Capital Ships (31 of 32)
# Ships from group: Dreadnought (5 of 5)
# Ships from group: Titan (5 of 5)
# Items from market group: Ships > Capital Ships (32 of 33)
type = "passive"
def handler(fit, ship, context):
skillName = "Advanced Spaceship Command"

View File

@@ -2,6 +2,7 @@
#
# Used by:
# Ship: Moros
# Ship: Vehement
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Hybrid Turret"), "speed", src.getModifiedItemAttr("shipBonusDreadnoughtG2"), skill="Gallente Dreadnought")

View File

@@ -0,0 +1,7 @@
# shipBonusDreadnoughtM1WebBonus
#
# Used by:
# Ship: Vehement
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Stasis Web", "speedFactor", src.getModifiedItemAttr("shipBonusDreadnoughtM1"), skill="Minmatar Dreadnought")

View File

@@ -1,7 +1,9 @@
# shipBonusDreadnoughtRole1DamageBonus
#
# Used by:
# Ship: Naglfar
# Ship: Vehement
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Projectile Turret"), "damageMultiplier", src.getModifiedItemAttr("shipBonusRole1"))
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Hybrid Turret"),
"damageMultiplier", ship.getModifiedItemAttr("shipBonusRole1"))

View File

@@ -1,7 +1,4 @@
# shipBonusEnergyVampireRangeAD2
#
# Used by:
# Ship: Dragoon
# Not used by any item
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Energy Nosferatu",

View File

@@ -4,5 +4,9 @@
# Ship: Apostle
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"), "powerTransferAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "armorDamageAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capacitor Emission Systems") or
mod.item.requiresSkill("Capital Capacitor Emission Systems"),
"powerTransferAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems") or
mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"armorDamageAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryA1"), skill="Amarr Carrier")

View File

@@ -4,5 +4,9 @@
# Ship: Minokawa
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"), "powerTransferAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryC1"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "shieldBonus", src.getModifiedItemAttr("shipBonusForceAuxiliaryC1"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capacitor Emission Systems") or
mod.item.requiresSkill("Capital Capacitor Emission Systems"),
"powerTransferAmount", src.getModifiedItemAttr("shipBonusForceAuxiliaryC1"), skill="Caldari Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems") or
mod.item.requiresSkill("Capital Shield Emission Systems"),
"shieldBonus", src.getModifiedItemAttr("shipBonusForceAuxiliaryC1"), skill="Caldari Carrier")

View File

@@ -4,7 +4,9 @@
# Ship: Ninazu
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG1"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG1"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG1"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG1"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems") or
mod.item.requiresSkill("Capital Shield Emission Systems"),
"duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG1"), skill="Gallente Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems") or
mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryG1"), skill="Gallente Carrier")

View File

@@ -4,7 +4,10 @@
# Ship: Lif
type = "passive"
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems") or
mod.item.requiresSkill("Capital Shield Emission Systems"),
"duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems") or
mod.item.requiresSkill("Capital Remote Armor Repair Systems"),
"duration", src.getModifiedItemAttr("shipBonusForceAuxiliaryM1"), skill="Minmatar Carrier")

View File

@@ -4,6 +4,5 @@
# Ship: Deacon
# Ship: Inquisitor
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"armorDamageAmount", ship.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "armorDamageAmount", src.getModifiedItemAttr("shipBonus2AF"), skill="Amarr Frigate")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Augoror
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"armorDamageAmount", ship.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "armorDamageAmount", src.getModifiedItemAttr("shipBonusAC2"), skill="Amarr Cruiser")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Exequror
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"armorDamageAmount", ship.getModifiedItemAttr("shipBonusGC2"), skill="Gallente Cruiser")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "armorDamageAmount", src.getModifiedItemAttr("shipBonusGC2"), skill="Gallente Cruiser")

View File

@@ -3,6 +3,5 @@
# Used by:
# 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",
"armorDamageAmount", ship.getModifiedItemAttr("shipBonusGF2"), skill="Gallente Frigate")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "armorDamageAmount", src.getModifiedItemAttr("shipBonusGF2"), skill="Gallente Frigate")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Augoror
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("shipBonusAC"), skill="Amarr Cruiser")

View File

@@ -4,6 +4,5 @@
# Ship: Deacon
# Ship: Inquisitor
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("shipBonusAF"), skill="Amarr Frigate")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("shipBonusAF"), skill="Amarr Frigate")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Exequror
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Armor Repairer",
"capacitorNeed", ship.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("shipBonusGC"), skill="Gallente Cruiser")

View File

@@ -3,6 +3,5 @@
# Used by:
# 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",
"capacitorNeed", ship.getModifiedItemAttr("shipBonusGF"), skill="Gallente Frigate")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Remote Armor Repair Systems"), "capacitorNeed", src.getModifiedItemAttr("shipBonusGF"), skill="Gallente Frigate")

View File

@@ -3,6 +3,5 @@
# Used by:
# Ship: Osprey
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Remote Shield Booster",
"capacitorNeed", ship.getModifiedItemAttr("shipBonusCC"), skill="Caldari Cruiser")
def handler(fit, src, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Shield Emission Systems"), "capacitorNeed", src.getModifiedItemAttr("shipBonusCC"), skill="Caldari Cruiser")

Some files were not shown because too many files have changed in this diff Show More